php中的电子邮件验证无效,尝试过filter_var和preg_match

时间:2018-04-22 23:01:08

标签: php html

我正在尝试验证用户是否输入了密码和电子邮件地址,电子邮件地址是否有效以及密码是否正确。

该代码适用于检查是否已输入密码和电子邮件地址以及密码是否正确。但电子邮件验证失败了。无论我在表单中输入什么,我都被重定向,并且失败消息永远不会显示。

为什么?

谢谢!

这是我的代码:

     <?php
      $check_email = $_POST['who'];
      $regex = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/';
      if (preg_match($regex, $check_email)) {
        header("Location: xyz.php?name=".urlencode($_POST['who']));
        return;
      } else {
          $failure = "E-mail must have an @-sign";**




<h1>Please Log In</h1>
<?php



**if ( $failure !== false ) {

echo('<p style="color: red;">'.htmlentities($failure)."</p>\n");
}**

?>
<form method="POST">
<label for="nam">E-Mail</label>
<input type="text" name="who" id="nam"><br/>
<label for="id_1723">Password</label>
<input type="text" name="pass" id="id_1723"><br/>
<input type="submit" value="Log In">
<input type="submit" name="cancel" value="Cancel">
</form>

</div>
</body>

2 个答案:

答案 0 :(得分:0)

您缺少非常多的关键语法。
首先,您必须验证是否设置了$ _POST变量。
其次,如果你想要最简单的方法,你必须使用filter_var。
第三,你遗漏了很多文件末尾括号。
第四,PHP中的星号是多余的。

SIDE NOTE:使用mysqli_real_escape_string记住SANITIZE用户输入

这是您的新代码。

   <?php
 if(isset($_POST['who']))
 {
    $check_email = $_POST['who'];
    if (filter_var($check_email, FILTER_VALIDATE_EMAIL)) 
    {
        header("Location: xyz.php?name=".urlencode($_POST['who']));
        return;
    } 
    else 
    {
        $failure = "E-mail must have an @-sign";
    }
    ?>
    <h1>Please Log In</h1>
    <?php
    if (!empty($failure)) 
    {
        echo('<p style="color: red;">'.htmlentities($failure)."</p>\n");
    }
 }
 ?>
 <form method="POST">
    <label for="name">E-Mail</label>
    <input type="text" name="who" id="nam"><br/>
    <label for="id_1723">Password</label>
    <input type="text" name="pass" id="id_1723"><br/>
    <input type="submit" value="Log In">
    <input type="submit" name="cancel" value="Cancel">
 </form>

</div>
</body>

答案 1 :(得分:-1)

使用函数:filter_var(“example@gmail.com”,FILTER_VALIDATE_EMAIL)