JQuery Bassistance Form Проверка электронной почты с помощью удаленного доступа

Я использую плагин JQuery Bassistance Form Validation, и все работает нормально, пока я не попытаюсь проверить существующие электронные письма в моей базе данных MySQL.

Вот мой код:

    $(document).ready(function(){
    $('#signup').validate({
    rules: {
            email: {
            required: true,
        email: true,
        remote: {
            type: 'POST',
            url: "email_check.php"
        }//end remote
        }//end email
    },//end rules
    messages: {
        email: {
            remote: "Email already in use."
        }//end email
    } //end messages
    }); //end validate

    }); //end ready

А вот мой файл email_check.php:

    <? php

    $dbc = mysqli_connect('localhost', 'root', '', 'step1_db')
    or die('Error connecting to the database');

    $email = $_GET['email'];

    $check_email = "SELECT * FROM users WHERE email = '$email'";
    $existing = mysqli_query($dbc, $check_email);
    $num_rows = $existing->num_rows;    

    if ($num_rows == 1){
    echo json_encode(FALSE);

    }else{

    echo json_encode(TRUE);
    }

    mysqli_close($dbc);

    ?>

Итак, прямо сейчас, если я попытаюсь ввести адрес электронной почты, который существует в базе данных, в мою форму, я получаю сообщение об ошибке по умолчанию для недопустимого адреса электронной почты, а не «Электронная почта уже используется». Даже если я ввожу действительный адрес электронной почты, которого нет в базе данных, сообщение об ошибке не исчезает.

Я предполагаю, что проблема в моем php-файле... Я пытался использовать «return true» и «return false», но они также не работали. Я изменил свой код на echo json_encode(FALSE) из ответов на темы, подобные этой. Кто-нибудь сможет указать пальцем на то, что здесь происходит?


person bamboo_inside    schedule 21.05.2013    source источник
comment
какой необработанный ответ вы видите, когда проверяете консоль?   -  person km6zla    schedule 22.05.2013
comment
Я знаю, что это может быть просто быстрый пример настройки, но если это не так, я хочу указать, что вы действительно должны проверять этот пользовательский ввод, прежде чем поместить его в свой запрос.   -  person km6zla    schedule 22.05.2013
comment
Я действительно думаю, что проблема может заключаться в том, что проверка javascript ожидает в качестве возвращаемого значения. json_econde(true) просто возвращает строку "true".   -  person km6zla    schedule 22.05.2013
comment
спасибо за ответ, ogc-nick! Под проверкой вы подразумеваете использование mysql_real_escape_string()? Кроме того, как я могу проверить необработанный ответ из консоли? Извините, я действительно новичок в этом, поэтому мои знания действительно ограничены самыми базовыми книгами и учебниками, которым меня учат :(   -  person bamboo_inside    schedule 22.05.2013
comment
Кроме того, я пытался использовать return true/false, но моя проблема остается прежней.   -  person bamboo_inside    schedule 22.05.2013
comment
в firefox или chrome щелкните правой кнопкой мыши и «проверить элемент», затем просмотрите вкладку «консоль». это очень поможет вам в отладке вашего кода. mysql_real_escape_string() — хорошее место для начала, и его определенно следует использовать как минимум.   -  person km6zla    schedule 22.05.2013
comment
Проверьте значение $_GET['email']. Согласно документации индекс будет соответствовать имени элемента.   -  person km6zla    schedule 22.05.2013
comment
Попробуйте вернуть строку. В документации сказано, что строка рассматривается как FALSE, и эта строка будет показана пользователю как сообщение об ошибке.   -  person km6zla    schedule 22.05.2013
comment
спасибо за указатели! Итак, консоль выдала мне эту ошибку: Не удалось загрузить ресурс: сервер ответил со статусом 404 (не найден) - и указал мой email_check.php   -  person bamboo_inside    schedule 22.05.2013
comment
Кроме того, если в вашей таблице уже есть более 1 совпадающего адреса электронной почты, то условный ==1 не сработает, поэтому используйте >0   -  person km6zla    schedule 22.05.2013


Ответы (2)


Из документации:

Ресурс на стороне сервера вызывается через $.ajax (XMLHttpRequest) и получает пару ключ/значение, соответствующую имени проверяемого элемента и его значению в качестве параметра GET. Ответ оценивается как JSON и должен быть истинным для допустимых элементов и может быть любым ложным, неопределенным или нулевым для недопустимых элементов, используя сообщение по умолчанию; или строка, например. «Это имя уже занято, попробуйте вместо него peter123» для отображения в виде сообщения об ошибке.

Тогда похоже, что вы отвечаете правильно. Похоже, ваш путь к файлу неверен, так как вы получаете ошибку 404 в консоли. Исправьте путь, а остальное выглядит хорошо.

person km6zla    schedule 22.05.2013
comment
еще раз спасибо! Похоже, теперь я не получаю ошибку, но проблема с отсутствием сообщения об ошибке все еще существует. Если я заполню ввод чем-либо, я получаю ошибку по умолчанию Пожалуйста, введите действительный адрес электронной почты - person bamboo_inside; 22.05.2013

В вашем php-файле для переменной электронной почты установлено значение GET, а для функции удаленной проверки установлено значение POST, измените одно или другое, чтобы оно соответствовало, и вы должны быть установлены

person Jay Rizzi    schedule 22.05.2013
comment
классно! Большое спасибо, Джей Рицци, это было так! Я хотел бы дать вам и ogc-нику репутацию за то, что вы так много мне помогаете, но мне придется подождать, пока я сам не наберу 15 очков... :) - person bamboo_inside; 22.05.2013