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

php正在发送无效的电子邮件地址,php,html,forms,email,Php,Html,Forms,Email,你好,经过3天的努力整理我的表格,我遇到了一个问题。。。 使用该表单,可以在我按submit时进行验证。这很好,但一旦我按下send,无效数据仍然会被发送到我的收件箱。。因此,我将以两封电子邮件结束。。一个包含无效数据,另一个包含在显示并重新发送错误消息后键入的有效数据。如果有人能看看我的代码,看到我遗漏了什么,或者我做错了什么,我会非常感激 <?php if (isset($_POST['submit'])) { //check email if(empty($_POST['email

你好,经过3天的努力整理我的表格,我遇到了一个问题。。。 使用该表单,可以在我按submit时进行验证。这很好,但一旦我按下send,无效数据仍然会被发送到我的收件箱。。因此,我将以两封电子邮件结束。。一个包含无效数据,另一个包含在显示并重新发送错误消息后键入的有效数据。如果有人能看看我的代码,看到我遗漏了什么,或者我做错了什么,我会非常感激

<?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\u var

if( !filter_var($_POST['email_addr'], FILTER_VALIDATE_EMAIL) ) {
    $msg2_email = "Please enter a valid email address";
}
如果筛选器失败,filter_var将返回false,否则将返回已筛选的电子邮件地址

最重要的是,如果过滤器失败,您可以设置一个默认值。例如,假设email address字段不是必需的,那么编写另一行代码来检查变量中的空值,如:

$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字符、数字等。。。不使用可能有效也可能无效的正则表达式

设置默认状态为false的布尔变量。正确验证后,将该变量设置为true。如果该变量为true,则表单已正确验证,因此请发送电子邮件。您能否提供一个示例?我一直在遵循教程-[并试图一路学习,但当你没有太多的php经验,并且有一周的时间完成一个网站时,这很难:p