我正在使用fetchAll和for循环来解决问题。在以 $validate 作为结果的 if 语句中,我尝试了数字、布尔值和现在的字符串来获得结果。到目前为止没有任何效果。这是我的代码:
$groep_naam = $_POST['groep'];
$naam = $_POST['naam'];
$adres = $_POST['adres'];
$mail2 = $_POST['mail2'];
$pass1 = md5($_POST['pass1']);
$pass2 = md5($_POST['pass2']);
$select = $db->prepare("SELECT * FROM deelnemers");
$select->execute();
$result = $select->fetchAll();
$len = count($result);
for ($x=0;$x<$len;$x++) {
$mail1 = $_POST['mail1'];
$db_mail = $result[$x][mail];
if ($db_mail != $mail1) {
$validate = "true";
}
if ($db_mail == $mail1) {
$validate = "false";
}
}
if (isset($_POST['submit'])) {
if ($mail1 == $mail2 && $pass1 == $pass2) {
if ($validate == "true") {
$add = $db->prepare("INSERT INTO deelnemers (groep_naam, naam, adres, mail, pass, rechten) VALUES ('$groep_naam', '$naam', '$adres', '$mail1', '$pass1', 'user')");
$add->execute();
} if ($validate == "false") {
echo '
<script>
$("#duplicateEntry").modal("show");
</script>
';
}
你做错了。您应该执行查询以检查数据库中是否存在该特定电子邮件,而不是获取所有电子邮件。
伪代码:
$select = $db->prepare("SELECT 1 FROM deelnemers WHERE mail = :email");
$select->bindValue(':email', $_POST['mail1']);
$select->execute();
$validate = $select->rowCount() > 0; //rowCount/rowExists/whatever to check if the query returned anything
查看您当前的代码,可能的错误在线
$db_mail = $result[$x][mail];
可能应该是
$db_mail = $result[$x]['mail'];
另一件事,您遍历所有电子邮件,将它们与来自请求的电子邮件进行比较,因此即使您找到与之匹配的电子邮件,稍后在另一个循环中,您也会重写$validate
值。