2012-01-26 117 views
0

我想檢查我的用戶名是否可用於註冊或不使用jQuery,該腳本實際上沒有錯誤的工作,但它一直說" the username in use "即使沒有用戶名記錄在數據庫中。用戶檢查與jQuery的可用性

這裏是我的函數的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> 

我哪裏出錯了?

+0

我提出了這個問題,我把這個功能稱爲 –

+3

Eek ..容易受到[SQL注入](http://php.net/manual/en/security.database.sql-injection.php)的影響。如果你看到你的消息,「用戶名已被使用」,那麼你知道'mysql_num_rows'返回大於0.你知道什麼是實際的查詢/返回? '$ username'是什麼? – Josh

+0

它應該從數據庫返回用戶名。 –

回答

2

代碼有錯誤。您正在使用$ 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 CODE:

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

首先,您應該使用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部分,我們可以進一步研究(儘管現在看起來很好)。

+0

+1 Firebug和其他開發者擴展。 – msanford

0

我覺得這一行:

data: "userName="+ usr, 

根據jQuery的規格數據應該以這種形式傳遞

{ "userName": usr} 

所以也許你不發送任何POST數據,你不要進入

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

和消息發送如果爲空(不是'OK')那就是爲什麼你會得到答案"the username in use"