【问题标题】:user check availability with jQuery用户使用 jQuery 检查可用性
【发布时间】:2012-01-26 14:52:15
【问题描述】:

我正在尝试检查我的用户名是否可以使用 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>

我哪里做错了?

【问题讨论】:

  • 我更新了问题以放置我调用的函数
  • Eek.. 易受SQL Injection 的攻击。如果您看到消息“用户名已被使用”,那么您知道mysql_num_rows 返回大于 0。您知道实际查询是/返回什么吗? $username 中有什么内容?
  • 它应该从数据库中返回用户名。
  • 嗯,应该。但是,您应该确切了解执行了什么查询,以及 $username 中的内容。
  • 是的,您应该通过使用 mysql_fetch_assoc 执行 while 循环来仔细检查它返回的内容,并查看 userUserName 是否返回值

标签: php jquery mysql


【解决方案1】:

您的代码中有错误。您正在使用 $UserName 作为函数 checkavailabileUserName 的参数,但您没有将该参数传递给函数。这会导致错误,因此只有您收到“正在使用的用户名”消息。

从函数中删除 $UserName 参数,代码将完美运行。

如果您可以使您的代码更干净整洁,并且可以使用 jquery ajax 调用和 PHP 代码,例如:

Jquery Ajax 调用

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;
   }
}  

【讨论】:

    【解决方案2】:

    首先,您应该使用 Firebug for 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 以利用我示例中的数据方法和数据类型,看看是否有帮助。查看 Firebug/Dev 工具控制台。价值是否超过?如果是这样,那么 PHP 端可能有问题。让我知道它是如何进行的,如果它是 PHP 部分,我们可以进一步研究(尽管我现在看起来很好)。

    【讨论】:

      【解决方案3】:

      我认为是这一行:

      data: "userName="+ usr,
      

      根据jQuery规范数据应该以这种格式传递

      { "userName": usr}
      

      所以可能你根本没有发送任何 POST 数据,也没有进入

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

      如果消息为空(不是“OK”),则发送消息,这就是您得到答案"the username in use"的原因

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-16
        • 1970-01-01
        • 1970-01-01
        • 2015-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多