在提交表单时,我检查电子邮件是否尚未在sql数据库中,但它不起作用


While submitting a form I check if there the e-mail isnt already in the sql database but it doesnt work

我正在使用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值。