1

我正在尝试制作一个不受垃圾邮件影响的表单,并向注册的人发送一封简单的电子邮件。

我对 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");
    }
}

任何帮助将不胜感激。

4

2 回答 2

0

首先,打印 Mailcheck 看看它的意思。

die('邮件检查:' . $mailcheck);

如果它没有设置它等于 ===

如果($mailcheck === 假){

}

于 2012-09-28T07:54:15.543 回答
0

也许这里的问题是,您的检查功能首先清理电子邮件地址,然后验证清理后的电子邮件。这意味着,检查功能会检查已清理的电子邮件,但在功能之外,您仍在使用无效电子邮件。

因此,要么在检查功能之外进行清理,或者在我看来更好,只验证输入而不进行清理(最好让用户意识到他输入的内容不正确,而不是尝试修复它)。

function checkEmail($input)
{
  return filter_var($input, FILTER_VALIDATE_EMAIL);
}

编辑:

其实肯定还有一个问题,因为当代码die(...Your email address is invalid...)执行的时候,页面的处理就停止了。我们需要查看写入数据库的代码部分。

于 2012-09-28T07:54:23.553 回答