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

Php 在提交表单时,我会检查sql数据库中是否有电子邮件,但它不起作用,php,sql,database,for-loop,Php,Sql,Database,For Loop,我使用fetchAll和for循环来实现这个技巧。在以$validate作为结果的if语句中,我尝试使用数字、布尔值和now字符串来获得结果。到目前为止,一切都没起作用。这是我的密码: $groep_naam = $_POST['groep']; $naam = $_POST['naam']; $adres = $_POST['adres']; $mail2 = $_POST['mail2']; $pass1 = md5($_POST['pass1']); $pass2 = md5($_POST

我使用fetchAll和for循环来实现这个技巧。在以$validate作为结果的if语句中,我尝试使用数字、布尔值和now字符串来获得结果。到目前为止,一切都没起作用。这是我的密码:

$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值。

我收到对undefined method语句的错误调用::AddBind@TheShadowmaster是的,我说这是一个伪代码,我不怎么使用php。看看手册,似乎有一个bindValue方法。我会调整我的答案。