Попытка проверить, не является ли электронная почта дубликатом - PullRequest
0 голосов
/ 17 апреля 2020

Я пытался проверить, существует ли электронное письмо в базе данных. Та же система работала отлично, если я попытался проверить имя пользователя. Я использую AJAX и PHP. Это файл, который получает переменные $ _POST.

<?php 

require_once 'Config.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $email = $_POST['email'];
    $password = $_POST['password'];

    if (!empty($password) and !empty($email)) {
        $notEmpty = true;
        include 'validate.php'; 
        if($notEmpty == true and validateEmail($email) == true){
            $password = md5($password);
            $stmt = $link->prepare("INSERT INTO `Users`(`user_password`, `user_email`) VALUES (?,?)");
            $stmt->bind_param("ss",$email,$password);
            $stmt->execute();
        }
    }else{
        $notEmpty == false;
    }
}
?>

, и этот файл проверяет, что адрес электронной почты не существует в базе данных.

function validateEmail($user_email){
    include '../Backend/Config.php';
    $sql = "SELECT `user_password`, `user_email` FROM `Users` WHERE `user_email` = ?";
    $stmt = $link->prepare($sql);
    $stmt->bind_param("s",$user_email);
    $stmt->execute();
    $result = $stmt->get_result(); // get the mysqli result
    $row = $result->fetch_assoc();
    if ($result->num_rows > 0) {
        echo 1;
        return false;
    }
    else{
        // echo json_encode(array('status' => 'OK'));
        echo 0;
        return true;
    }

}

Js код (ajax):

$('#form').submit(function(e) {
    //Don't refresh the page
    e.preventDefault();

    //Collecting data for the server call
    post_data = {
    'email'    : $('input[name=email]').val(), 
    'password': $('input[name=password]').val()
    };
    //AJAX server call to signup.php,which calls validate.php
    $.ajax({
        method: "POST",
        url: "../Backend/signup.php",
        data: post_data
    })
    //Server response and setting the input values to ""
    .then(function( msg ) {
        if(msg == 0){
            console.log("Success, user data inserted. Code: " + msg);
        }
        //Failed
        if(msg == 1){
            console.log("Inserting failed. Error code:" + msg);
            document.getElementById("error").innerHTML = "This email already exists.";
        }
        $('input[name=email]').val("");
        $('input[name=password]').val("");  
    });
});

Он все равно вставляет, в чем здесь проблема?

1 Ответ

0 голосов
/ 18 апреля 2020

Если вы сразу же вызовете num_rows() после выполнения подготовленного оператора, он, как правило, вернет 0, так как не может узнать, сколько строк в наборе результатов, поскольку набор результатов еще не сохранен в памяти. Сначала необходимо вызвать store_result() для буферизации результатов, чтобы последующий вызов num_rows() содержал правильные результаты.

Это объясняется в разделе «Примечания пользователя» в нижняя часть документации PHP для num_rows () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...