2013-03-11 30 views
0

我創建了一個jQuery腳本,檢查數據庫的用戶名,並顯示一個錯誤,如果你在KEYUP現有名稱類型,它workng罰款,但仍形式提交即使這個錯誤是真的。我可以添加哪些其他代碼來檢查這個錯誤是否存在?這裏是我的代碼至今:表單驗證只發送如果用戶名不存在

<script> 
     $(function() 
     { 
     var ck_username = /^[A-Za-z0-9_]{5,15}$/; 
// Username validation 
     $('#username').keyup(function() 
     { 
     var username=$(this).val(); 
     if (!ck_username.test(username)) 
     { 
     $('.usernameStatus').removeClass("success").addClass("error"); 
     } 
     else 
     { 
     $('.usernameStatus').removeClass("success").removeClass("error"); 
      jQuery.ajax({ 
       type: 'POST', 
       url: 'check-users.php', 
       data: 'username='+ username, 
       cache: false, 
       success: function(response){ 
        if(response == 1){ 
         $('.usernameStatus').removeClass("success").addClass("error"); 
        } 
        else { 
         $('.usernameStatus').removeClass("error").addClass("success"); 
        } 
       } 
      }); 
     } 
     }); 
// Submit button action 
     $('#registerButton').click(function() 
     { 
     var username=$("#username").val(); 
     if(ck_username.test(username)) 
     {   
      jQuery.post("register.php", { 
      username:username, 
      }, function(data, textStatus){ 
      if(data == 1){ 
      window.location.replace("registered.php"); 
      }else{} 
      }); 
     }else{ 
     alert("Something went Wrong - Please Check All Fields Are Filled In Correctly"); 
     } 
     return false; 
     }); 
     //End 
     }); 
     </script> 

謝謝

+0

因此警報「出事了」永遠不會顯示? – 2013-03-11 16:31:36

+1

鑑於你的PHP腳本不修改數據庫,只是得到結果,它應該是一個GET。 (我今天這個剛剛學會,想我會分享:-)) – 2013-03-11 16:32:00

+0

警報不顯示,我猜,我要補充的東西,「如果(ck_username.test(用戶名))」,以確保用戶名尚未找到 - 可能是通過添加一些IF語句? – user2152265 2013-03-11 16:36:24

回答

0

請參閱假設data == 1意味着該名稱已被註冊,你會顯示錯誤代碼 評論

<script> 
     $(function() 
     { 
     var name = false; // a variable that holds false as the initial value 
     var ck_username = /^[A-Za-z0-9_]{5,15}$/; 
// Username validation 
     $('#username').keyup(function() 
     { 
     var username=$(this).val(); 
     if (!ck_username.test(username)) 
     { 
     $('.usernameStatus').removeClass("success").addClass("error"); 
     } 
     else 
     { 
     $('.usernameStatus').removeClass("success").removeClass("error"); 
      jQuery.ajax({ 
       type: 'POST', 
       url: 'check-users.php', 
       data: 'username='+ username, 
       cache: false, 
       success: function(response){ 
        if(response == 1){ 
         $('.usernameStatus').removeClass("success").addClass("error"); 
        } 
        else { 
         $('.usernameStatus').removeClass("error").addClass("success"); 
         name = true; // on success , if the name isnt there then assign it to true 
        } 
       } 
      }); 
     } 
     }); 
// Submit button action 
     $('#registerButton').click(function() 
     { 
     var username=$("#username").val(); 
     if(ck_username.test(username) && name == true) // check for the value of name 
     {   
      jQuery.post("register.php", { 
      username:username, 
      }, function(data, textStatus){ 
      if(data == 1){ 
      window.location.replace("registered.php"); 
      }else{} 
      }); 
     }else{ 
     alert("Something went Wrong - Please Check All Fields Are Filled In Correctly"); 
     } 
     return false; 
     }); 
     //End 
     }); 
     </script> 
0

您應該檢查$('.usernameStatus')的狀態,因爲它可能會通過正則表達式測試,但仍然無法從您的數據庫返回重複測試。

所以

$('#registerButton').click(function() 
     { 
     var username=$("#username").val(); 
     if(ck_username.test(username)) 
     { 

應改爲:

$('#registerButton').click(function() 
     { 
     var username=$("#username").val(); 
     if(!$('.usernameStatus').hasClass('error')) 
     { 

更妙的是引進持有name字段有效性的變量,所以你並不需要得到的DOM元素所有的時間,並檢查它的課堂。

0

我認爲你的錯誤可能是因爲一個糟糕的data語法

它應該是這樣的:

data: 'username:'+ username, 

調試你的PHP代碼,看看它正確地接收的用戶名此刻雖然

+0

謝謝,我會做到這一點,以確保公正,它一直在努力確定到目前爲止,但它是更好的安全比遺憾,謝謝 – user2152265 2013-03-11 16:41:59

相關問題