пользователь проверяет доступность с помощью jQuery - PullRequest
0 голосов
/ 26 января 2012

Я пытаюсь проверить мое имя пользователя: если оно доступно для регистрации или нет с помощью jQuery, скрипт фактически работал без ошибок, но он продолжает говорить " the username in use ", даже если в базе данных нет записи имени пользователя.

вот код php для моей функции

function checkavailabileUserName($UserName) {
if(isSet($_POST['userName']))
{
$username = $_POST['userName'];


$sql_check = mysql_query("SELECT userUserName FROM user WHERE userUserName='$username'") or die(mysql_error());

if(mysql_num_rows($sql_check))
{
echo '<font color="red">The username <STRONG>'.$username.'</STRONG> is already in use.</font>';
}
else
{
echo 'OK';
}

}

}

я вызываю эту функцию на странице, называемой RegisterUserAction.php вот так

checkavailabileUserName($UserName);

ЗДЕСЬ КОД JAVASCRIPT

pic1 = new Image(16, 16); 
pic1.src = "loader.gif";

$(document).ready(function(){

$("#userName").change(function() { 

var usr = $("#userName").val();

if(usr.length >= 3)
{
$("#status").html('<img src="loader.gif" align="absmiddle">&nbsp;Checking availability...');

    $.ajax({  
    type: "POST",  
    url: "RegisterUserAction.php",
    data: "userName="+ usr,  
    success: function(msg){  

   $("#status").ajaxComplete(function(event, request, settings){ 

    if(msg == 'OK')
    { 
        $("#userName").removeClass('object_error'); // if necessary
        $("#userName").addClass("object_ok");
        $(this).html('&nbsp;<img src="accepted.png" align="absmiddle"> <font color="Green"> Available </font>  ');
    }  
    else  
    {  
        $("#userName").removeClass('object_ok'); // if necessary
        $("#userName").addClass("object_error");
        $(this).html(msg);
    }  

   });

 } 

  }); 

}
else
    {
    $("#status").html('<font color="red">The username should have at least <strong>3</strong> characters.</font>');
    $("#userName").removeClass('object_ok'); // if necessary
    $("#userName").addClass("object_error");
    }

});

});

И, наконец, ЗДЕСЬ КОД HTML ДЛЯ ПОЛЯ

<td><label for="userName"></label>
      <input type="text" name="userName" id="userName" onkeyup="twitter.updateUrl(this.value)" class="inn" />

      <div id="status"></div>
<script type="text/javascript">
$( function () {
twitter.screenNameKeyUp();
$('#user_screen_name').focus();
});</script>

Где я ошибся?

Ответы [ 3 ]

2 голосов
/ 26 января 2012

В вашем коде есть ошибка. Вы используете $ UserName в качестве аргумента для функции checkavailabileUserName, но вы не передаете этот аргумент в функцию. Это приводит к ошибке, и только вы получили сообщение «Имя пользователя используется».

Удалите этот аргумент $ UserName из функции, и код будет работать отлично.

Может быть, было бы хорошо, если бы вы могли сделать свой код более чистым и аккуратным и могли бы использовать вызов jquery ajax и код PHP, например:

Jquery Ajax Call

jQuery(document).ready(function(){
     jQuery("#userName").change(function() {
        jQuery("#status").empty();
        var usr = jQuery("#userName").val();
        if(usr.length >= 3)
        {
            jQuery("#status").html('<img src="loader.gif" align="absmiddle">&nbsp;Checking availability...');
            jQuery.ajax({  
               type: "POST",  
               url: "RegisterUserAction.php" ,
               data: "userName="+ usr,  
               success: function(response){
                        if(response)
                        { 
                            jQuery('#status').html('<img src="accepted.png" align="absmiddle"> <font color="Green"> Available </font>');
                            return true;
                        }  
                        else  
                        {  
                            jQuery('#status').html('<font color="red">The username <STRONG>'+usr+'</STRONG> is already in use.</font>');
                            return false;
                        }  

                    }
        });
    }
    else
    {
        jQuery("#status").html('<font color="red">The username should have at least <strong>3</strong> characters.</font>');
        return false;
    }
     });
});

КОД PHP:

function checkavailabileUserName($checkavailabileUserName) 
{
    if(isset($_POST['userName']))
    {
    $username = $_POST['userName'];

    $sql_check = mysql_query("SELECT userUserName FROM user WHERE userUserName ='$username'") or die(mysql_error());

    if(mysql_num_rows($sql_check)>0)
    {
        echo false;
    }
    else
    {
        echo true;
    }
   }
   else 
   {
    echo false;
   }
}  
1 голос
/ 26 января 2012

Сначала вы должны использовать Firebug для инструментов разработчика FF или Chrome / IE в зависимости от вашего браузера (нажмите F12). Посмотрите на консоль и посмотрите, как выглядит сообщение AJAX. Убедитесь, что он публикуется правильно и что у вас есть фактическое значение. Обычно я делаю свой JQuery AJAX так:

$.ajax({
    type: "POST",
    url: "RegisterUserAction.php",
    data: {
        userName: usr
    },
    dataType: "json",
    success: function(data) {
        if(data.success == 'true'){
            //do something
        } else {
            //do something               
        }
    }
});

Затем на странице PHP я посылаю свой обратный вызов в кодировке json следующим образом:

if (mysql_num_rows($sql_check)>0) {
    //do something
    $return_arr["success"] = 'true';
} else {
    //do something
    $return_arr["success"] = 'false';
}
echo json_encode($return_arr);

Попробуйте изменить AJAX для использования метода data и dataType в моем примере и посмотрите, поможет ли это. Взгляните на консоль инструментов Firebug / Dev. Значение переходит? Если так, то, возможно, что-то не так со стороной PHP. Дайте мне знать, как это происходит, и, если это PHP-часть, мы можем рассмотреть это подробнее (хотя сейчас она выглядит хорошо для меня).

0 голосов
/ 26 января 2012

Я думаю, что эта строка:

data: "userName="+ usr,

в соответствии со спецификацией jQuery данные должны быть переданы в этом формате

{ "userName": usr}

, поэтому, вероятно, вы вообще не отправляете никаких данных POSTи вы не вводите

if(isSet($_POST['userName'])){

и сообщение отправляется, если оно пустое (не «ОК»), поэтому вы получаете ответ "the username in use"

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