2014-02-07 89 views
0

因此,我的腳本完全檢查用戶名是否是免費的,但無論用戶提交他能夠註冊的所有表單。我需要一種方法來防止用戶註冊用戶名。下面是代碼:防止用戶註冊,如果用戶名被採取

的index.php

$("#username").keyup(function(){ 
    var val=$("#username").val(); 
    $("#address").html("Your address will be askfolio.com/" + val); 

    $("#freeu").html("<img src='css/ajax-loader.gif' style='margin-left:-75px;'>"); 
    if (val != ''){ 
     $.ajax({ 
      url:"s/ufree.php", 
      method:"POST", 
      data:$("#username"), 
      success:function(data){ 
       if (data == 1){ 
        $("#freeu").html("<img src='css/accept.png' style='float:left;padding-right:65px;'>"); 
        $("#reg-error").css("display","none"); 

       }else{ 
        $("#freeu").html(''); 
        $("#reg-error").css("display","block"); 
        $("#reg-error").html('Username is already taken, try another.'); 
        $("#username").focus(); 
        return false; 
       } 

      } 
     }); 

    }else { 
     $("#freeu").html(''); 
    } 


}); 
function Users_Registration() 
{ 
    var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; 
    var name = $("#name").val(); 
    var lastname=$("#lastname").val(); 
    var username = $("#username").val(); 
    var remail = $("#remail").val(); 
    var rpass = $("#rpass").val(); 
    var day=$("#day").val(); 
    var month=$("#month").val(); 
    var year=$("#year").val(); 


    if(name == "") 
    { 
     $("#reg-error").css("display","block"); 
     $("#reg-error").html('Please enter your name in the required field.'); 
     $("#name").focus(); 
    } 

    else if(lastname == "") 
    { 
     $("#reg-error").css("display","block"); 
     $("#reg-error").html(' Please enter your Last Name in the required field.'); 
     $("#lastname").focus(); 
    } 
    else if(username == ""){ 
     $("#reg-error").css("display","block"); 
     $("#reg-error").html('Please enter your desired username to proceed.'); 
     $("#username").focus(); 
    } 
    else if(remail == "") 
    { 
     $("#reg-error").css("display","block"); 
     $("#reg-error").html('Please enter your email address to proceed.'); 
     $("#remail").focus(); 
    } 
    else if(reg.test(remail) == false) 
    { 
     $("#reg-error").css("display","block"); 
     $("#reg-error").html('Please enter a valid email address to proceed.'); 
     $("#remail").focus(); 
    }else if (rpass == "") { 
     $("#reg-error").css("display","block"); 
     $("#reg-error").html('Please enter a valid password to proceed.'); 
     $("#rpass").focus(); 
    } 
    else if (day == ""){ 
     $("#reg-error").css("display","block"); 
     $("#reg-error").html('Please select a day to proceed.'); 
     $("#day").focus(); 

    }else if (month == "") { 
     $("#reg-error").css("display","block"); 
     $("#reg-error").html('Please select a month to proceed.'); 
     $("#month").focus(); 
    }else if (year == "") { 
     $("#reg-error").css("display","block"); 
     $("#reg-error").html('Please select a year to proceed.'); 
     $("#year").focus(); 
    } 
    else 
    { 
     var dataString = 'name='+ name + '&lastname='+ lastname + '&username='+ username + '&rpass='+ rpass + '&remail='+ remail + '&year=' + year + '&month=' + month + '&day=' + day +'&page=signup'; 
     $.ajax({ 
      type: "POST", 
      url: "register.php", 
      data: dataString, 
      cache: false, 
      beforeSend: function() 
      { 
       $("#reg-error").html('<br clear="all"><div style="padding-left:115px;"><font style="font-family:Verdana, Geneva, sans-serif; font-size:12px; color:black;">Please wait</font> <img src="images/loadings.gif" alt="Loading...." align="absmiddle" title="Loading...."/></div><br clear="all">'); 
      }, 
      success: function(response) 
      { 
       $("#reg-error").html("Loading"); 
       var username="<?php echo $loguser; ?>"; 
       window.location=username; 
      } 
     }); 
    } 
} 

ufree.php

<?php 

include "db.php"; 

if (isset($_POST['username'])) { 
    $username=$_POST['username']; 

    $sql=mysql_query("SELECT * FROM users WHERE username='$username'"); 
    if (mysql_num_rows($sql) == 0) { 
     echo "1"; 
    }else { 
     echo "<div style='padding-top:4px;'>username is taken</div>"; 
    } 

} 
?> 
+1

用戶不僅可以註冊,還可以獲取其他成員密碼的用戶名。您的代碼中存在SQL注入漏洞。在將它們添加到您的查詢之前,學會逃避您的用戶輸入。此外,mysql_ *函數也被棄用。更新到mysqli。在你的用戶表中設置用戶名字段爲UNIQUE – Ibu

+0

我已經添加了mysql_real_escape字符串,但該函數在我的數據庫中添加了斜槓旁邊的斜槓......反正我需要防止重複使用者名稱的幫助,並且我將轉而使用mysqli – user3170198

回答

0

除此之外,你在你的SQL查詢有SQL注入漏洞,你的方法來檢查用戶名是有點多餘的。通過在每個字符輸入時檢查用戶名,可以爲瀏覽器和服務器增加額外的負載。

我建議你在一個步驟中結合這兩個過程,這意味着你做用戶名檢查並註冊在同一個地方。在您的Register.php文件中,在註冊之前檢查用戶名的可用性,並且如果用戶名被顯示,則顯示正確的消息,如果沒有,則進行註冊。

+1

同意 - 你可能不想聽到這個 - 但你不能單靠JavaScript來驗證你的所有表單。這意味着在將數據插入數據庫之前驗證所有數據服務器端,如果您不希望任何不良數據通過,那麼這是一個令人頭疼的問題,但是必要的話。致力於更好的代碼組織,並記住保持乾爽:http://en.wikipedia.org/wiki/Don't_repeat_yourself – degenerate

0

不言而喻,無論JavaScript驗證如何,您的服務器仍然需要檢查用戶名是否在註冊時可用,因爲任何人都可以禁用或操作JavaScript。

同樣作爲哈馬德州,你的php代碼是非常脆弱的。最起碼,你應該使用以下之前,在你的SQL中使用它:

$username = mysql_real_escape_string($_POST[ 'username' ]);

也就是說,可用性,你需要做的是加入onsubmit功能,您的形式,檢查是否用戶名在提交之前有效或不可用。 (總結你的代碼爲簡單起見)

var validUser = false; 

$("#username").keyup(function(){ 

    var val=$("#username").val(); 

    validUser = false; 

    if (val != ''){ 
     $.ajax({ 
      url:"s/ufree.php", 
      method:"POST", 
      data:val, 
      success:function(data){ 
       if (data == 1){ 
        validUser = true; 
       }else{ 
        $("#username").focus(); 
        return false; 
       } 
      } 
     }); 

}else { 
$("#freeu").html(''); 
} 

function formsubmit() 
{ 
    if(!validUser) 
    { 
     alert('Username is already taken, try another'); 
     return false; 
    } 
    return true; 
} 

然後在您的形式:

<form action="whatever" onsubmit="return formsubmit();"> 
... 
</form> 
0

一旦我最喜歡的jQuery插件是驗證工程。

https://github.com/posabsolute/jQuery-Validation-Engine

它這樣做只是你在找什麼非常好的驗證。它做各種各樣的字段,包括用於用戶名檢查的內聯ajax。如果來自ajax調用的響應不正確,則表單不會提交。我用它來註冊表單。一旦用戶轉到下一個字段,它將進行驗證,如果未通過,即用戶名不可用,則表示用戶名不可用紅色。表格不會提交。

這不難設置。這裏是ajax的演示。請注意,它不會在此演示網站上進行實際驗證,但它是一個示例。如果它是空白或未經驗證,你可以看到它將不會提交。這是非常可定製的。

http://www.position-relative.net/creation/formValidator/demos/demoAjaxSubmitPHP.html

哦當然採取的任何MySQL的安全問題護理和檢查,以確保受騙者不能輸入到數據庫中也是如此。