2013-03-11 34 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