簡體   English   中英

提交表單時,我檢查 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>
            ';
        }

你做錯了。 您應該進行查詢以檢查該特定電子郵件是否存在於 db 中,而不是獲取所有電子郵件。

偽代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM