php正在发送无效的电子邮件地址


php is sending invalid email address

你好,经过三天的整理,我遇到了一个问题。。。使用该表单,它可以在我按下提交时进行验证。这很好,但一旦我按下发送键,无效数据仍然会被发送到我的收件箱。。所以我最后会收到两封电子邮件。。一个具有无效数据,然后一个具有在显示并重新发送错误消息之后键入的有效数据。如果有人能看看我的代码,看看我遗漏了什么,或者做错了什么,我会非常感激

<?php
if (isset($_POST['submit'])) {
//check email
if(empty($_POST['email_addr']))
$msg_email = "*";
$email_subject = $_POST['email_addr'];
$email_pattern = '/^'w+(['.-]?'w+)*@'w+(['.-]?'w+)*('.'w{2,3})+$/';
preg_match($email_pattern, $email_subject, $email_matches);
if(!$email_matches[0])
$msg2_email = "Please enter a valid email address";
}
// validation complete 
if(isset($_POST['submit'])){
if($msg_name=="" && $msg2_name=="" && $msg_email=="" && $msg2_email=="")
$msg_success = "Thankyou for your enquiry";
//send mail   
$EmailFrom = "someone@somewhere.com";
$EmailTo = "someone@somewhere.com";
$Subject = "Online contact form";
$email_addr = Trim(stripslashes($_POST['email_addr'])); 
} 
// prepare email body text
$Body = "";
$Body .= "email_addr: ";
$Body .= $email_addr;
$Body .= "'n";
// send email 
$success = mail($EmailTo, $Subject, $Body, "From: $EmailFrom");
    ?>

我不会使用正则表达式来验证电子邮件地址。我会使用filter_var。

if( !filter_var($_POST['email_addr'], FILTER_VALIDATE_EMAIL) ) {
    $msg2_email = "Please enter a valid email address";
}

如果筛选失败,则filter_var返回false,否则返回筛选后的电子邮件地址。

除此之外,如果过滤器失败,您可以设置default值。例如,假设电子邮件地址字段不是必需的,那么就写另一行代码来检查变量中的null,比如:

$isEmailNull =  ( $_POST['email_addr'] === NULL) ? NULL : $_POST['email_addr'];

使用filter_var,您可以将其写成:

$emailAddress =  filter_var( $_POST['email_addr'], FILTER_VALIDATE_EMAIL, 
                              array('options' => array(
                                          'default' => null
                                          )
                                   ));

如果过滤器失败,那么$emailAddress不是false,而是null。这对非布尔变量更有意义。

你可以在这里阅读更多关于filter_var

您可以验证/清除IP地址、URL、电子邮件地址、ASCII字符、数字等,而无需使用可能有效也可能无效的正则表达式。

相关文章: