Php SQL查询验证-不是每次都测试
我有一个php页面,javascript将输入中的字符串值传递到aa insert.php页面 在这个insert.php页面上,我测试传入的电子邮件是否已经存在于数据库中。我的查询在这方面起作用,但所发生的是错误被传递回页面并作为验证错误输出 我希望在验证错误发送其输出后发生。然后,用户可以更改该字段并重试。出于某种原因,我的insert.php页面不会再次检查此项,如果检查了,则不会让用户输入其他值以继续。(错误消息保留在屏幕上,不允许通过进行唯一输入) 我的sql查询/php有什么问题Php SQL查询验证-不是每次都测试,php,mysql,validation,Php,Mysql,Validation,我有一个php页面,javascript将输入中的字符串值传递到aa 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));
}
$errors=Array();
$sql=“从数据_表中选择1,其中email=”“$email。”“限制1”;
$sth=$db->prepare($sql);
$varcomp=$sth->execute();
如果($varcomp!=“0”){
$errors[]=“每人限输入一项。”;
}
如果(sizeof($errors)>0){
$result=数组(
“错误”=>内爆(
,$errors),
“成功”=>0);
die(json_encode($result));
}
再次重申,通过验证电子邮件是否已经在数据表中,sql查询第一次可以正常工作。但是,当它在“每人限制一个条目”页面上吐出该错误后,即使用户将电子邮件更改为唯一的邮件,错误消息也不会消失,并且不允许再次检查或提交新的唯一电子邮件。如下更改您的查询代码:
$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>';
}
- 您需要计算行数,而不仅仅是检查查询是否成功
- 使用事先准备好的语句
die()
显示消息-这将终止script@BenPearlKahan不,还有连接数据库的代码。此时,与db相关的唯一代码是上面的第二行代码,我在这里进行查询以进行选择。此外,骰子阻止我在这里编写的代码之后的代码被执行。我的问题是,我猜这封电子邮件只测试了一次。如果它返回了错误,即使电子邮件被改成了独一无二的东西,错误也会一直保留下来。查看你发布的代码。如果$sql
字符串不等于'0'
字符串,则您正在加载带有错误消息的$errors
数组。有了这个,你每次都会收到错误信息。在bobby tables出现之前,你需要参数化你的查询。看起来您从未在数据库中执行过SQL语句。您只是在比较字符串SELECT 1 FROM data_table WHERE email=whatever@email.com将1
限制为0
,这将始终返回false。相反,您应该执行SQL,捕捉结果(和错误),然后根据结果做出决策。喜欢你的SQL很好,你只是不需要用它做任何事情。这样更好<代码>选择1将很好地工作,它只需要选择任何东西,所以这并不重要。@jnevil是的,你说得对,通常一个人想要做更多的事情useful@meda另外,我假设第一次的“?”应该是变量?@NoReceipt4Panda是的,它将绑定到它,使用$sth->execute(array($email))代码>,这是为了防止sql注入和转义字符well@meda我需要初始化数组$email吗?在前面的代码中,我已经提取了一个$email变量,让它成为数组($emaillist)重要吗?
$sql="SELECT email FROM data_table WHERE email = :email LIMIT 1";
$sth = $db->prepare($sql);
$sth->execute(array(':email'=>$email));