【问题标题】:PHP email form validationPHP 电子邮件表单验证
【发布时间】:2012-02-20 21:11:21
【问题描述】:

我正在为一个网站编写评论表单,并试图防止垃圾邮件发送者。我从这个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.";

}

【问题讨论】:

  • 这个问题确实有很多很好的答案。非常感谢您扩展这些概念。我选择了@vivid-colours 提供的答案,因为:它直接回答了如何调用函数,并且是第一个响应。但是,我相信我会根据提供的意见和信息使用 FILTER_VALIDATE_EMAIL。在这种情况下,我希望我可以授予多个正确答案。谢谢大家。

标签: php email validation


【解决方案1】:

自 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";
}

(另请注意,您在问题中的原始示例代码在其中一个打印件中缺少分号)。

【讨论】:

  • 非常感谢您指出这一点。我很可能会在我的表单中使用 FILTER_VALIDATE_EMAIL。如果可能的话,我会奖励多个正确答案,但必须奖励鲜艳的颜色,因为他们解释了如何调用该函数,并且首先回答了。感谢您的帮助
【解决方案2】:

包含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
}

【讨论】:

  • 所以这样调用函数?我是否必须检查 isValid 是否返回真值或是否隐含?函数的最后一行返回 $isValid。谢谢
  • 嗨尼克,我已经扩展了我的解决方案以提供帮助:)。
  • 谢谢你肯定回答了我的问题。使用 FILTER_VALIDATE_EMAIL 是完成此过程的更好方法吗?谢谢
  • 说实话..我更喜欢if( !filter_var( $email, FILTER_VALIDATE_EMAIL ) ) { ... }是的。
【解决方案3】:

整个链接的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 查找)。

【讨论】:

  • 我应该像其他评论者建议的那样使用 FILTER_VALIDATE_EMAIL 吗?或者这是一种更好的验证方式?
  • 好吧,你注意到我还使用了filter_var()FILTER_VALIDATE_EMAIL。我只是将它与 DNS 检查您在使用的问题中链接到的功能相结合。
  • 感谢您的帮助。试图为您的代表提供尽可能多的积分。真的很感激
【解决方案4】:
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "e-Mail is Valid";
} else {
    echo "Invalid e-Mail";
}

【讨论】:

    猜你喜欢
    • 2013-09-08
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 2018-01-26
    • 2015-11-13
    • 1970-01-01
    • 2011-09-25
    • 2017-03-19
    相关资源
    最近更新 更多