我正在为一个网站撰写评论表,并试图抵御垃圾邮件发送者。我从这个link获取了validEmail函数。
我在使用功能方面不是很有经验。这是调用该函数并验证用户电子邮件地址的正确方法吗?任何建议赞赏。谢谢
$email = $_POST['email'];
if (validEmail($email)) {
$to = 'fsddfsdfa@gmail.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com';
mail($to, $subject, $message, $headers);
print "Form submitted successfully: <br>Your name is <b>".$_POST['cname']."</b> and your email is <b>".$_POST['email']."</b><br>";
} else {
print "There was an error with your form submission.";
}
答案 0 :(得分:3)
自5.2.0以来,PHP拥有自己的验证过滤器,可用于检查用户是否输入了正确的电子邮件地址。没有必要依赖于您在互联网上找到的东西,因为这些功能可能存在缺陷或损坏。要使用filter_var()进行电子邮件验证,解决方案将是:
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
print "E-mail is correct";
} else {
print "E-mail is not correct";
}
(另请注意,问题中的原始示例代码在其中一个打印件中缺少分号)。
答案 1 :(得分:1)
包含validEmail( $email );
的函数应包含在您的文件中:
include "whatever.php"
(或者,您可以将该功能复制并粘贴到与您的代码相同的文件中)
您的if
语句应如下所示:
if( validEmail( $email ) ) {
// print your success message here
} else {
// print your fail message here
}
在回答下面的评论时,你也可以这样写:
if( validEmail( $email ) === true ) {
// print your success message here
} else {
// print your fail message here
}
答案 2 :(得分:1)
整个链接的validEmail()
函数可以替换为:
function validEmail($email)
{
if (filter_var('bob@example.com', FILTER_VALIDATE_EMAIL) !== false) {
$domain = preg_split("/@/", $email);
$domain = $domain[count($domain) - 1];
if (checkdnsrr($domain,"MX") || checkdnsrr($domain,"A")) {
return true;
}
}
return false;
}
虽然我只是从您链接的文章中获取checkdnsrr()
功能。我不熟悉它,以前我还没有用它。内置的filter_var()
函数可能就是您真正想要使用的功能,因为检查DNS需要时间(因此,每当有人向您的表单提交内容时,您的脚本可能会执行2次DNS查找)。
答案 3 :(得分:0)
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "e-Mail is Valid";
} else {
echo "Invalid e-Mail";
}