FILTER _VALIDATE_EMAIL check


FILTER _VALIDATE_EMAIL check

我有一个PHP脚本,我想在其中使用filter_var()验证有效的电子邮件地址,但它不起作用。

html表单:

 <!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="style.css">
<title>CRUD Operations</title>
</head>
<body>
<div id="container"><!--container-->
    <div id="wrapper">
        <div id="form-element">
            <div id="headings">
                <h1>PHP Contact Form</h1>
            </div>
            <form method="post" action="operations.php" enctype="multipart/form-data">
            <span>Name:</span><br>
            <input type="text" name="name" value=""><br><br>
            <span>Email:</span><br>
            <input type="text" name="mail" value=""><br><br>
            <span>Gender:</span><br>
            &nbsp; <input type="radio" name="gender" value="Male">&nbsp;Male
            &nbsp; <input type="radio" name="gender" value="Female">&nbsp;Female<br><br>
               <span>Message</span><br>
           <div id="message">
            <textarea cols="36" rows="4" name="message"></textarea><br>
           </div>
           <div id="submit">
           <input type="submit" value="Submit" name="submit">
           </div>
           </form>
        </div>
    </div>
</div><!--container-->
</body>
</html>

php代码:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="style.css">
<title>CRUD Operations</title>
</head>
<?php
include_once('config.php');
$name = $mail = $gender = $message = '';
$email_err = '';
if(isset($_POST['submit'])){
    $name= $_POST['name'];
    $mail = $_POST['mail'];
    if(!isset($_POST['gender'])){
    }
    else {
        $gender = $_POST['gender'];
    }
    $message = $_POST['message'];
    if(empty($name) || empty($mail) || empty($gender)|| empty($message)) {
        if(empty($name)){
            echo'<div class="error">*Dear User fill the Name field properly</div>';
        } 
        if(empty($mail)){
            echo'<div class="error">*Dear User fill the Email field properly</div>';
        }
        else {
            if(!filter_var($mail, FILTER_VALIDATE_EMAIL)){
                $email_err = "*valid Email is required";
            }
        }
        if(empty($gender)){
            echo'<div class="error">*Dear User please select your gender</div>';
        }
        if(empty($message)){
            echo'<div class="error">*Dear User please Leave your Message</div>';
        }
    }
    else {
        $query = mysql_query("INSERT INTO users(`name`, `mail`, `gender`, `message`) VALUES('".$name."','".$mail."','".$gender."','".$message."')");
        if($query) {
            echo '<div class="success">Congratulations You Are Registered Successfully</div>';
            echo '<a href="users.php">View Records</a>';
        }
        else {
            echo 'not';
        }
    }
}
?>
</html> 

任何帮助都将不胜感激!

您正在将验证错误设置为$email_err变量,但在此之后您不会对该变量执行任何操作。

但更重要的是,filter_var()调用永远不会被命中。您在检查$name $mail $gender $messsage是否为空的块中有它。因此,让你的代码进行电子邮件验证的唯一方法是,如果有人输入了电子邮件地址,但没有输入性别。

您需要将filter_var()调用移出该块:

if(empty($name) || empty($mail) || empty($gender)|| empty($message)) {
    if(empty($name)){
        echo'<div class="error">*Dear User fill the Name field properly</div>';
    } 
    if(empty($mail)){
        echo'<div class="error">*Dear User fill the Email field properly</div>';
    }
    if(empty($gender)){
        echo'<div class="error">*Dear User please select your gender</div>';
    }
    if(empty($message)){
        echo'<div class="error">*Dear User please Leave your Message</div>';
    }
}
elseif(!filter_var($mail, FILTER_VALIDATE_EMAIL)){
    echo'<div class="error">*valid Email is required</div>';
}
else {
    $query = mysql_query("INSERT INTO users(`name`, `mail`, `gender`, `message`) VALUES('".$name."','".$mail."','".$gender."','".$message."')");
    if($query) {
        echo '<div class="success">Congratulations You Are Registered Successfully</div>';
        echo '<a href="users.php">View Records</a>';
    }
    else {
        echo 'not';
    }
}

当我编写这样的验证代码时,我尽量避免使用同时检查太多内容的条件语句。相反,依次验证每个输入,如果无效则中止;此时向用户返回错误。然后,您可以将所有这些验证转移到一个子例程中。在这个例程中,如果任何验证检查失败,它会立即返回并返回一个错误。只有当您的子例程完成时,才会创建一个用户。它防止检查变量$mail,然后在它已经通过真实性检查后对其进行验证。