if条件中的filter_var($email, FILTER_VALIDATE_EMAIL)无效

5
我正在使用filter_var($email, FILTER_VALIDATE_EMAIL)来验证电子邮件。 如果上述函数返回false,我希望输出一条语句“无效的电子邮件”。然而,无论是否满足if语句,从页面加载开始,“无效的电子邮件”都会显示在屏幕上。请帮忙解决。
以下是我的代码:
<?php $emailErr = ""; ?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<ul class="form-style-1">
<li>
<label for="email">Email</label>
<input placeholder="Email*" type="email" name="email" id="email" required>
</li>
<?php 
if(filter_var($email, FILTER_VALIDATE_EMAIL) == false){
$emailErr = "Invalid email.";
echo $emailErr;}?>
</ul>
</form>

1
你在哪里创建$email变量? - ᴄʀᴏᴢᴇᴛ
这个问题发生在我身上,但我意识到我错把 filter_vars() 函数放进去了。 - user13564783
1个回答

9

似乎你在验证邮箱之前没有检查$email是否设置。空字符串或null不是有效的电子邮件地址,因此测试失败,显示消息无效的电子邮件

你应该使用以下代码:

if(!empty($email) && filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
    $emailErr = "Invalid email.";
    echo $emailErr;
}

1
在用户提交电子邮件之前,$email 包含值 null,因此函数 filter_var 将尝试将 null 作为电子邮件进行验证。这将失败,因为 null 不是有效的电子邮件地址,这就是为什么会显示错误消息的原因。在尝试验证内容之前,您必须检查变量 $email 是否包含任何内容。可以使用函数 empty 来完成此操作。 - ᴄʀᴏᴢᴇᴛ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接