JQuery Удаленная проверка - PullRequest
6 голосов
/ 03 марта 2011

У меня проблема с удаленной проверкой jQuery.Я проверяю, зарегистрирована ли электронная почта, работает ли удаленная проверка, но она отображает только значения - true или false, и я не могу отправить форму, чем.

jQuery код:

$("#form").validate({
  rules: {
    email: {
      required: true,
      email: true,
      remote: "check-email.php"

    }
  }
}); 

check-mail.php код:

$email = trim(strtolower($_REQUEST['email']));


$checkemail = mysql_query("SELECT * FROM users WHERE email = '".$email."'");  

if(mysql_num_rows($checkemail) == 1)
{
$valid = 'false';
}
else
{
$valid = 'true';
} //end of $checkemail if statemant


echo json_encode($valid);

Ответы [ 3 ]

13 голосов
/ 03 марта 2011
$checkemail = mysql_query("SELECT * FROM users WHERE email = '".$email."'");  

Никогда никогда никогда делайте это. Это , требующий неприятностей : инъекция SQL, случайные ошибки (одинарная кавычка действительна в адресах электронной почты, кстати).

Есть параметризованных запросов , используйте их. Это всего лишь несколько строк кода, но это разница между недостатком безопасности, столь же широким, как дверь сарая, и безопасным взаимодействием с базой данных.

if(mysql_num_rows($checkemail) == 1)
{
$valid = 'false';
}
else
{
$valid = 'true';
}

это очень многословный способ сказать

$valid = mysql_num_rows($checkemail) == 1;

В соответствии с документацией, ответ удаленной проверки является JSON-кодированным логическим , а не JSON-кодированным строкой .

У вас есть "true" или "false", которые станут "\"true\"" или "\"false\"" через json_encode(), что неправильно. Фактические true или false станут "true" или "false", что является правильным.

Установка типа содержимого ответа на JSON также может быть хорошей идеей:

header('Content-type: application/json');
1 голос
/ 03 марта 2012

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

1). Это работает только с v1.6.1 и выше. Придерживайтесь последней версии JQuery http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js

2). Выберите «синхронное» удаленное выполнение, по умолчанию асинхронное. Установите async в false.

$("#form").validate({
  rules: {
    email: {
      required: true,
      email: true,
      remote: { url:"check-email.php", async:false }
    }
  }
});
1 голос
/ 03 марта 2011

Это может быть просто возврат строк, когда требуется логическое значение. Может быть, попробуйте следующее:

if(mysql_num_rows($checkemail) == 1)
{
$valid = false;
}
else
{
$valid = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...