2017-02-15 102 views
0

我使用filter_var($ email,FILTER_VALIDATE_EMAIL)验证电子邮件。 如果上述函数返回false,我想回显一个声明'invalid email'。然而,无论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'? –

回答

1

看来,如果$email被验证的电子邮件之前设置你不检查。为空字符串或null是不是一个有效的电子邮件,测试失败并显示

你应该使用这个消息invalid email

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

在用户提交他的电子邮件之前,'$ email'包含值'null',所以函数'filter_var'将尝试验证'null'为电子邮件。这将失败,因为null是无效的,这就是为什么错误消息将被显示。您必须在尝试验证内容之前检查var'$ email'是否包含某些内容。这是用'empty'功能完成的。 –

+0

非常感谢。这对我有效。 :d –