[英]PHP secure email is blocking the false emails but letting the registration go through
我正在尝试制作一种免受垃圾邮件侵扰的表格,并向注册人发送一封简单的电子邮件。
对于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");
}
}
任何帮助将不胜感激。
首先,打印Mailcheck看看它在说什么。
die('Mail Check:'。$ mailcheck);
如果没有设置,则等于===
if($ mailcheck === false){
}
可能这里的问题是,您的检查功能首先清理了电子邮件地址,然后验证了清理过的电子邮件。 这意味着,检查功能会检查已清理的电子邮件,但是在该功能之外,您仍在使用无效的电子邮件。
因此,要么在检查功能之外进行清理,要么在我看来甚至更好,仅在不进行清理的情况下验证输入(与尝试修复相比,最好让用户知道他键入的内容不正确)。
function checkEmail($input)
{
return filter_var($input, FILTER_VALIDATE_EMAIL);
}
编辑:
实际上肯定还有另一个问题,因为执行代码die(...Your email address is invalid...)
时,页面处理将停止。 我们将需要查看代码部分,该部分将写入数据库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.