php中的电子邮件验证不起作用,尝试了filter_var和preg_match

php中的电子邮件验证不起作用,尝试了filter_var和preg_match,php,html,Php,Html,我试图验证用户是否输入了密码和电子邮件地址,电子邮件地址是否有效,以及pwd是否正确 该代码可以很好地检查是否输入了密码和电子邮件地址,以及密码是否正确。但是电子邮件验证失败了。无论我在表单中输入什么,我都会被重定向,失败消息永远不会显示 为什么? 谢谢 这是我的密码: <?php $check_email = $_POST['who']; $regex = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0

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

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

为什么?

谢谢

这是我的密码:

     <?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>

电子邮件

密码

您缺少大量关键语法
首先,您必须验证是否设置了$\u POST变量
其次,如果您想要最简单的方法,您必须使用filter\u var
第三,您缺少很多文件末尾的括号。
第四,在PHP中,星号是多余的。

旁注:记住使用mysqli\u real\u escape\u字符串清理用户输入

这是你的新代码

   <?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>

请登录
电子邮件

密码

使用函数:filter\u var(“example@gmail.com“,FILTER\u VALIDATE\u EMAIL)

对我有效:如果PHP中已经有一个内置函数,为什么还要麻烦你:
FILTER\u var($EMAIL,FILTER\u VALIDATE\u EMAIL)
?谢谢,我试过了,也不起作用……我建议你看看W3学校,因为许多问题都与基本的PHP语法有关
退出
after headerFirst-感谢您抽出时间详细撰写评论。第二,我没有发布整个代码,因为它看起来太长了。我只发布了相关信息,因为所有其他验证都在运行。因此,在原始代码中,$\u POST变量确实得到了验证。第三,我也尝试了filter_var,但它也不起作用。第四,星号只是为了突出显示代码的相关部分。我尝试了上面的代码,但电子邮件没有经过验证。就好像根本没有检查……最终功能过滤器或预匹配根本不是问题。这是php中的命令集。但有时你总是盯着错误的问题。。。