我的条件不工作(准备查询和POST方法+ isset函数)


My condition is not working(prepared query and POST method + isset function)

我想验证用户是否在输入标签中输入了一些内容:

这里是index.php页面:

<form action="email_validation.php" method="post">
    <p>
     Enter email :  <input type="text" name="email" id="email" /><br />
    <input type="submit" value="Envoyer" />
</p>
</form>

和email_validation.php:

 if(isset($_POST['email']))
 {
    $req = $bdd->prepare('INSERT INTO newsletter(email) VALUES(:email)');
    $req->execute(array(
    'email' => $entree = $_POST['email']
));
echo 'Email added';
}
else
{
    echo 'Enter something';
}

似乎我的条件与isset()函数不工作…当我测试这一点时,即使我没有写任何东西,也会显示"添加的电子邮件",并向数据库添加一个空白值。当有人什么也没写时,我想显示"输入一些东西",不执行查询。我搜索了几个小时,还是无法解决这个问题……谢谢预支!

您没有验证输入。你只是在测试这个值是否存在。确实如此,_POST将有一个空值的email字段。为了验证它,代码应该是:

if(!empty($_POST['email']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
    $req....
} else {
    echo "No valid email provided";
}

希望对你有帮助。

这是因为isset将检查变量是否设置,而不是null

当您发送表单而不键入email时,$_POST['email']将包含空字符串,因此isset将返回true

你必须使用empty(或检查长度),另外检查电子邮件的格式是否正确也是个好主意。