2014-02-07 61 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的安全问题护理和检查,以确保受骗者不能输入到数据库中也是如此。