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

#javascript #php #jquery #mysql #ajax

#javascript #php #jquery #mysql #ajax

Вопрос:

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

 $.post('check-email.php', {'suEmail' : $suEmail}, function(data) {
  if(data=='exists') {
    validForm = false;
    $suRememberMeCheckbox.css('top', '70px');
    $suRememberMeText.css('top', '68px');
    $signUpSubmit.css('top', '102px');
    $tosppText.css('top', '115px');
    $suBox.css('height', '405px');
    $suBox.css('top', '36%');
    $errorText.text('The email has been taken.');
    return false;
  };
});
 

И это мой PHP-код:

 <?php include("dbconnect.php") ?>
  <?php
    $sql = "SELECT email FROM users WHERE email = " .$_POST['suEmail'];
    $select = mysqli_query($connection, $sql);
    $row = mysqli_fetch_assoc($select);

    if (mysqli_num_rows($row) > 0) {
      echo "exists";
    }
?>
 

Когда я просматриваю форму регистрации, когда я использую электронное письмо, уже имеющееся в базе данных, текст ошибки никогда не меняется на то, что я указал, а вместо этого на некоторые другие случаи ошибок, которые я закодировал. Почему это не работает! Большое спасибо!

Комментарии:

1. Заключаем $_POST['suEmail'] в кавычки, ... email = '" . $_POST['suEmail'] . "'";

2. Кроме того, измените if (mysqli_num_rows($row) > 0) { ... на if (mysqli_num_rows($select) > 0) { ... , и нет необходимости извлекать строку из результирующего набора.

3. Используйте параметризованные запросы, убейте двух зайцев одним выстрелом.

4. Привет, что такое параметризованные запросы? Кроме того, я сделал все вышеперечисленное, и это все равно не сработало. Большое спасибо! : D

Ответ №1:

     Use This Code: Working Perfectly:    

    <?php 
        include("dbconnect.php");

            $sql = "SELECT email FROM users WHERE email = '" .$_POST['suEmail']."' ";
            $select = mysqli_query($connection, $sql);
            $row = mysqli_fetch_assoc($select);

            if (mysqli_num_rows($select) > 0) {
              echo "exists";
            }
?>
 

Комментарии:

1. Это зависит от вашего определения «идеального». Если вам нравится идея, что кто-то взломает вашу базу данных, то да, это идеально

2. Привет, я сделал это, но это все еще не работает. Большое спасибо!

Ответ №2:

Если он не меняется, это означает, что у вас может быть ошибка с вашим запросом. Проверьте параметры разработчика в вашем браузере в разделе сеть. Там вы можете увидеть все выполняемые вызовы ajax. Нажмите, чтобы просмотреть ответ. Проверьте, была ли ошибка в вашем запросе.

Также вы должны подтвердить отправку формы. Что-то вроде.

 if($_SERVER['REQUEST_METHOD'] = 'POST')
{

//maybe send a token over with the form to prevent form spoofing 

 if($_POST['token'] === $_SESSION['token'])
 {
    // all your code goes in here
    // you provably want to check that is a real email also
      // check email input against regular expression

        if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
        {
            //if valid email to variable and escape data
            $e = sanitizeString($_POST['email']);
        }else 
            {
                /// if not a real email to errors array
                $reg_errors['email'] = 'Please enter a valid email address!';
            }

 }
}
 

Вы должны использовать инструкции prepare в своих запросах.

Комментарии:

1. Привет, я использую js / jQuery для проверки, является ли это законным электронным письмом, если в нем отсутствует информация и т. Д. Я новичок в веб-разработке, что вы имеете в виду, отправляя токен вместе с формой? Есть ли что-нибудь, что я могу прочитать, чтобы узнать об этом? большое спасибо!

2. Подделка межсайтовых запросов (CSRF) любой может подделать вашу форму и отправить запрос с помощью curl. Добавление скрытого поля в вашу форму в качестве случайного токена. Легко передать ее по вашему вызову ajax и проверить ее на соответствие $ _SESSION [‘token’] .