Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL查询验证-不是每次都测试_Php_Mysql_Validation - Fatal编程技术网

Php SQL查询验证-不是每次都测试

Php SQL查询验证-不是每次都测试,php,mysql,validation,Php,Mysql,Validation,我有一个php页面,javascript将输入中的字符串值传递到aa insert.php页面 在这个insert.php页面上,我测试传入的电子邮件是否已经存在于数据库中。我的查询在这方面起作用,但所发生的是错误被传递回页面并作为验证错误输出 我希望在验证错误发送其输出后发生。然后,用户可以更改该字段并重试。出于某种原因,我的insert.php页面不会再次检查此项,如果检查了,则不会让用户输入其他值以继续。(错误消息保留在屏幕上,不允许通过进行唯一输入) 我的sql查询/php有什么问题 $

我有一个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));