Intereting Posts

Проверка правильности имени JQuery

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

Источник JQuery:

$(document).ready(function() { jQuery.validator.addMethod("usernameCheck", function(username) { var isSuccess = false; $.ajax({ url: "username_availability.php", data: "username=" + username, async: false, success: function(msg) { isSuccess = msg === "TRUE" ? true : false } }); return isSuccess; },""); $("#register_form").validate({ onkeyup:false, rules: { username: { required: true, minlength: 3, usernameCheck: true // remote check for duplicate username } }, messages: { username: { required: "username is required.", minlength: jQuery.format("username must be at least {0} characters in length."), usernameCheck: "This username is already in use." } } }); 

PHP Источник:

 include('database_connection.php'); if (isset($_POST['username'])) { $username = mysql_real_escape_string($_POST['username']); $check_for_username = mysql_query("SELECT user_id FROM users WHERE username='$username'"); if (mysql_num_rows($check_for_username)) { echo "TRUE"; } else { echo "FALSE"; //No Record Found - Username is available } } ?> в include('database_connection.php'); if (isset($_POST['username'])) { $username = mysql_real_escape_string($_POST['username']); $check_for_username = mysql_query("SELECT user_id FROM users WHERE username='$username'"); if (mysql_num_rows($check_for_username)) { echo "TRUE"; } else { echo "FALSE"; //No Record Found - Username is available } } ?> 

HTML Источник:

 <input class="username" id="username" type="text" name="username" value="" maxlength="20" />&nbsp; 

большое спасибо

Задайте type опции ajax-вызова 'POST' . Кроме того, AJAX не будет блокировать return isSuccess .

Вы можете посмотреть удаленное подтверждение, предоставленное jQuery Validate.

http://docs.jquery.com/Plugins/Validation/Methods/remote#options

Измените свои правила.

 rules: { username: { required: true, minlength: 3, remote: 'username_availability.php' // remote check for duplicate username } }, 

Просто взгляните на примеры.

Мне интересно, является ли эта строка проблемой:

 data: "username=" + username, 

Попробуйте изменить это на правильный массив, поскольку я не верю, что jQuery автоматически разрешает такой формат, особенно для данных POST. Кроме того, установите опцию типа: «post» в вызове $ .ajax, поскольку jQuery автоматически разрешает запросы $ .ajax для GET и вы используете POST в своем PHP-скрипте.

Попробуйте изменить источник PHP, чтобы вернуть «1» или «0»:

 include('database_connection.php'); if (isset($_POST['username'])) { $username = mysql_real_escape_string($_POST['username']); $check_for_username = mysql_query("SELECT user_id FROM users WHERE username='$username'"); if (mysql_num_rows($check_for_username)) { echo "TRUE"; } else { echo "FALSE"; //No Record Found - Username is available } } ?> в include('database_connection.php'); if (isset($_POST['username'])) { $username = mysql_real_escape_string($_POST['username']); $check_for_username = mysql_query("SELECT user_id FROM users WHERE username='$username'"); if (mysql_num_rows($check_for_username)) { echo "TRUE"; } else { echo "FALSE"; //No Record Found - Username is available } } ?> 

а затем измените свой JS, чтобы проанализировать это как целое число:

 success: function(msg) { isSuccess = parseInt(msg); } 

Вы можете использовать следующее, просто измените его для своего имени пользователя (я использую адрес электронной почты в качестве имени пользователя. Я использую пустую ячейку таблицы id = «emailError» для хранения сообщения.

JQuery:

  $('#email').keyup(function(){ $.ajax({ type: 'POST', url: 'ajax.checkEmail.php', data: {e:$('#email').val()}, success: function(data){ if(data == 'true'){ $('#emailError').html('This email is already used'); }else{ $('#emailError').html(''); } } }) }); 

PHP (ajax.checkEmail.php):


   включают в себя ( 'inc.php');

   $ query = 'SELECT COUNT (*) FROM tblcustomers WHERE email = "'. $ _ POST ['e']. '"';
   $ result = $ dbO-> getSingleResult ($ query);

   if ($ result> 0)
     напечатать 'true';
   еще
     напечатать 'false';

Это работает только проверка сделана того же кода

  jQuery.validator.addMethod("usernameCheck", function(username) { var isSuccess = false; $.ajax({ url: "checkusr.php", data: "username=" + username, async: false, success: function(msg) { if(msg ==0) { isSuccess=false; } else { isSuccess=true; } } }); return isSuccess; },"Username not available"); 

PHP SIDE CODE

  if ($obj->checkUsername($_GET['username'],"artist")> 0 ) { echo 0; } else { echo 1; } }