Проверка имени пользователя JQuery - PullRequest
0 голосов
/ 20 апреля 2011

Я новичок в 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
    }
}
?>

HTML Источник:

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

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

Ответы [ 5 ]

1 голос
/ 20 апреля 2011

Установите параметр вызова ajax type на '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
        }
    },

Просто посмотрите на примеры.

0 голосов
/ 21 июля 2012

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

      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

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

  }                                 
0 голосов
/ 22 марта 2012

Вы можете использовать следующее, просто измените его на свое имя пользователя (я использую адрес электронной почты в качестве имени пользователя. Я использую пустую ячейку таблицы 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):


  include('inc.php');

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

  if($result > 0)
    print 'true';
  else
    print 'false';

0 голосов
/ 20 апреля 2011

Попробуйте изменить исходный код 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
    }
}
?>

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

success:
 function(msg) { 
   isSuccess = parseInt(msg);
 }
0 голосов
/ 20 апреля 2011

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

data: "username=" + username,

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

...