2012-02-20 171 views
0

我正在研究网站的评论表单,并试图防范垃圾邮件发送者。我已从这link采取validEmail功能。PHP电子邮件表单验证

我对使用函数并不是很有经验。这是调用函数并验证用户电子邮件地址的正确方法吗?任何建议感激。谢谢

$email = $_POST['email']; 

if (validEmail($email)) { 

$to  = '[email protected]'; 
$subject = 'the subject'; 
$message = 'hello'; 
$headers = 'From: [email protected]'; 

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

真的有很多很好的答案这个问题。非常感谢您扩展这些概念。我选择了@ vivid-colors提供的答案,因为:它直接回答了如何调用函数,这是第一个响应。不过,我相信我会根据所提供的意见和信息来利用FILTER_VALIDATE_EMAIL。这是我希望我可以授予多个正确答案的一种情况。谢谢你们。 – 2012-02-20 21:39:19

回答

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 
} 
+0

那么调用这样的函数?我是否必须检查isValid是否返回真值或者是否暗含?该函数的最后一行返回$ isValid。谢谢 – 2012-02-20 21:19:54

+0

嗨,尼克,我已经扩大了我的解决方案,以帮助:)。 – ale 2012-02-20 21:25:09

+1

'#include'将不起作用:这是PHP,而不是C;) – Crontab 2012-02-20 21:29:51

3

PHP有,因为5.2.0,可以使用它自己的验证过滤器来检查用户是否已进入正确的电子邮件地址。没有必要依靠你在互联网上找到的东西,因为这些功能可能有缺陷或破坏。要使用filter_var()的电子邮件验证,解决办法是:

if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ 
    print "E-mail is correct"; 
} else { 
    print "E-mail is not correct"; 
} 

(也注意到这个问题你原来的示例代码中打印一个有缺失的分号)。

+0

非常感谢您指出这一点。我很可能会为我的表单使用FILTER_VALIDATE_EMAIL。如果可能的话,我会奖励多个正确的答案,但必须奖励鲜艳的颜色,因为他们解释了如何调用函数,并且首先回答。感谢您的帮助 – 2012-02-20 21:41:51

1

这整个联validEmail()功能可以替换为:

function validEmail($email) 
{ 
    if (filter_var('[email protected]', 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查找)。

+0

我应该如何使用FILTER_VALIDATE_EMAIL作为其他评论者的建议?或者这是一个更好的验证方法? – 2012-02-20 21:34:19

+1

那么,正如你注意到的,我还用'FILTER_VALIDATE_EMAIL'来使用'filter_var()'。我只是将它与DNS一起检查您在所用问题中链接到的功能。 – Crontab 2012-02-20 21:36:49

+0

谢谢你的帮助。试图尽可能多地向您的代表提供点数。真的很感激它 – 2012-02-20 21:44:26

0
if (filter_var($email, FILTER_VALIDATE_EMAIL)) { 
    echo "e-Mail is Valid"; 
} else { 
    echo "Invalid e-Mail"; 
}