PHP安全电子邮件正在阻止虚假电子邮件,但允许注册通过

PHP安全电子邮件正在阻止虚假电子邮件,但允许注册通过,php,forms,security,email,spam,Php,Forms,Security,Email,Spam,我试图使一个表格,是安全的垃圾邮件,并发送一个简单的电子邮件给人谁注册 我对PHP很陌生,我面临的问题是,当表单在电子邮件字段中使用错误的电子邮件地址提交时,它会显示错误消息,说明电子邮件无效,但仍然允许注册通过将其添加到数据库 这是密码 function spamcheck($field) { // filter_var() sanitizes the e-mail // address using FILTER_SANITIZE_EMAIL $field = filt

我试图使一个表格,是安全的垃圾邮件,并发送一个简单的电子邮件给人谁注册

我对PHP很陌生,我面临的问题是,当表单在电子邮件字段中使用错误的电子邮件地址提交时,它会显示错误消息,说明电子邮件无效,但仍然允许注册通过将其添加到数据库

这是密码

function spamcheck($field) {
    // filter_var() sanitizes the e-mail
    // address using FILTER_SANITIZE_EMAIL
    $field = filter_var($field, FILTER_SANITIZE_EMAIL);

    // filter_var() validates the e-mail
    // address using FILTER_VALIDATE_EMAIL
    if(filter_var($field, FILTER_VALIDATE_EMAIL)) {
        return TRUE;
    }
    else {
        return FALSE;
    }
}

if(isset($_REQUEST['email'])) {
    // if "email" is filled out, proceed
    // check if the email address is invalid
    $mailcheck = spamcheck($_REQUEST['email']);
    if ($mailcheck==FALSE) {
        die("<font color='red'>Your email address is invalid, please try again.</font><br/><br/><form><INPUT TYPE='button' VALUE='Back' onClick='history.go(-1);return true;'></form>");
    }
    else {//send email
        $to = "$email";
        $from = "name@mywebsite.com";
        $message = "Just a message";
        $subject = "Subject";

        mail($to, $message, $subject, "From: $from", "-f$from");
    }
}
函数spamcheck($field){
//filter_var()清理电子邮件
//使用筛选器的地址\u清理\u电子邮件
$field=filter\u var($field,filter\u SANITIZE\u EMAIL);
//filter_var()验证电子邮件
//使用筛选器\验证\电子邮件的地址
if(筛选变量($field,筛选验证\电子邮件)){
返回TRUE;
}
否则{
返回FALSE;
}
}
如果(isset($_请求['email'])){
//如果填写了“电子邮件”,请继续
//检查电子邮件地址是否无效
$mailcheck=spamcheck($_请求['email']);
如果($mailcheck==FALSE){
死亡(“您的电子邮件地址无效,请重试。

”); } 否则{//发送电子邮件 $to=“$email”; $from=”name@mywebsite.com"; $message=“只是一条消息”; $subject=“subject”; 邮件($to,$message,$subject,“From:$From”,“-f$From”); } }

任何帮助都将不胜感激。

首先,打印邮件检查,看看它说什么

die(“邮件支票:”.$mailcheck)

如果没有,则将其设置为===

如果($mailcheck==false){


}

这里的问题可能是,您的检查功能首先清除电子邮件地址,然后验证已清除的电子邮件。这意味着,“检查”功能会检查经过消毒的电子邮件,但在该功能之外,您仍在处理无效的电子邮件

因此,要么在check函数之外进行清理,要么在我看来更好,只验证输入而不进行清理(最好让用户意识到他键入的内容不正确,而不是试图修复它)

编辑:


实际上肯定还有另一个问题,因为当代码
消失(…您的电子邮件地址无效…
时,页面的处理将停止。我们需要查看写入数据库的代码部分。

没有显示将其添加到数据库的代码,但是它不会发送邮件-在这种情况下,请确保将注册保存到数据库的呼叫位于您发送邮件的部分。您好,谢谢,电子邮件正在通过,代码就在它下面,要将其添加到数据库中,我将其移动了(就在值下面)和相同的问题。如果插入db的代码与mail命令不在同一个{}中,它不能向您显示“您的电子邮件地址无效”消息并发送邮件(不遵循发布的代码),谢谢你的回复,对不起,我是一个完全的新手,我应该把这段代码放在if($mailcheck==FALSE){die($insert=mysql\u query(“insert-INTO-users”)前面吗(标题、用户名、密码、电子邮件、名、名、名、年龄、国籍、城镇、语言学习、学习方式、语言水平、周一、周二、周三、周四、周五、周六、周日、电话等)值(“$title”、“$username”、“$password”、“$email”、“$firstname”、“$secondname”、“$age”、“$national”、“$town_city”、“$language_to_study”、“$how_to_study”、“$language_level”、“$星期一”、“$星期二”、“$星期三”、“$星期四”、“$星期五”、“$星期六”、“$星期天”、“$telephone”、“$telephone”;”);功能spamcheck($field)@Paul Meadows-在测试电子邮件地址之前,您正在插入新用户?只有在电子邮件验证成功后,才应执行查询。查询应位于同一位置,在该位置调用
mail()
function.好的,谢谢你的回复,我把它放在了将它插入数据库的上面,而且它似乎起了作用,谢谢你的帮助,我为此绞尽脑汁好几个小时了。@Paul Meadows-不客气!也许我误解了你的评论,但是如果你在
if(isset($\u REQUEST['email'))之后进行插入查询){…}
,有人可以将电子邮件留空,代码不会检查电子邮件地址,但无论如何都会将其插入数据库。
function checkEmail($input)
{
  return filter_var($input, FILTER_VALIDATE_EMAIL);
}