我有一个php页面,其中javascript从输入到一个insert.php页面传递一串值。
在这个insert.php页面上,我测试传入的电子邮件是否已经存在于数据库中。我的查询在这方面有效,但会发生的是错误被传递回页面并作为验证错误输出。
我想要发生的是在验证错误发送它的输出之后。然后,用户可以更改该字段,然后重试。出于某种原因,我的insert.php页面没有再次检查这个,如果确实如此,它不会让用户输入不同的值来继续。 (错误消息保留在屏幕上,并且不允许通过唯一输入)
我的SQL查询/ php出了什么问题?
$errors = Array();
$sql="SELECT 1 FROM data_table WHERE email = '".$email."' LIMIT 1";
$sth = $db->prepare($sql);
$varcomp = $sth->execute();
if ($varcomp != '0') {
$errors[] = '<span style="color:red;">Limit one entry per person.</span>';
}
if (sizeof($errors) > 0) {
$result = array(
"errors" => implode("<br/>", $errors),
"success" => 0);
die(json_encode($result));
}
重申一下,通过验证电子邮件是否已经在数据表中,sql查询第一次正常工作。但是,在它在页面上发出错误并且#34;每人限制一个条目后,即使用户将电子邮件更改为独特的内容,该错误消息也不会消失并赢得&#39; t允许再次检查或提交新的唯一电子邮件。
答案 0 :(得分:3)
更改您的查询代码:
$sql="SELECT email FROM data_table WHERE email = ? LIMIT 1";
$sth = $db->prepare($sql);
$sth->execute(array($email));
if ($sth->rowCount() != 0) {
$errors[] = '<span style="color:red;">Limit one entry per person.</span>';
}
使用命名占位符:
$sql="SELECT email FROM data_table WHERE email = :email LIMIT 1";
$sth = $db->prepare($sql);
$sth->execute(array(':email'=>$email));