2011-04-20 120 views
0

我是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 
    } 
} 
?> 

HTML來源:

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

非常感謝

+0

參見* * [JQuery用戶名驗證](http://stackoverflow.com/questions/5733253/jquery-username-validation?rq=1)** – hippietrail 2012-06-19 21:25:27

回答

1

設置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

你能解釋'==='是什麼意思嗎? – reporter 2011-04-20 15:00:47

+0

嘿,我去了,查找它並更改了我的JQuery代碼。 但它仍然顯示「已取用戶名」用於取得的用戶名和未取用戶名。 – Ash 2011-04-20 15:16:39

+0

@Ash - 不要更改你的ajax調用 - 遠程驗證類型是不同的。 – 2011-04-20 15:22:53

0

我想知道如果這條線的問題是:

data: "username=" + username, 

嘗試更改爲正確的數組這是我不相信jQuery的自動解析這種格式的,尤其是對POST數據。另外,在$ .ajax調用中設置一個類型爲'post'的選項,因爲jQuery自動解析$ .ajax請求到GET,並且您在PHP腳本中使用POST。

+0

嘿,我看着http://api.jquery.com/jQuery.ajax/,但似乎可以像我想的那樣使用它? – Ash 2011-04-20 15:18:35

0

嘗試改變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

嘿,我改變了你的建議,但我仍然遇到同樣的問題 – Ash 2011-04-20 15:27:09

0

您可以使用下面的,只需更改它爲您的用戶名(我使用電子郵件地址作爲用戶名稱,我使用空表格單元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

這部作品只是檢查由相同的代碼

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

    }