2014-10-07 84 views
0

我不知道如何阻止用户创建帐户,如果用户名已被采取..有人可以帮助我..我尝试寻找脚本或教程在互联网上但他们没有好..我只是在编码noobie ..我的表称为“user_acc”和用户名字段为“用户名”如何防止用户创建一个帐户,如果用户名已被采用

这里是我的AJAX脚本

function validateEmail(str){ 
    var testresults; 

    var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i; 
    //var filter1=/^[A-Za-z]+$/; 
    if (filter.test(str)) 
     testresults=true; 
    else 
     testresults=false 

    return (testresults) 
    } 



//registration 
$(document).ready(function(){ 
    $('#submbut').click(function(){ 

    var fn = $('#fnamae').val();  
    var ln = $('#lnamae').val(); 
    var un = $('#unamae').val(); 
    var pass = $('#pass').val(); 
    var pass2 = $('#pass2').val(); 
    var mail = $('#mail').val(); 
    var cont = $('#cont').val(); 

    var url = "http://localhost/picturecity/acceptusr"; 

if(fn == "" && ln == "" && un == "" && pass == "" && pass2 == "" && mail == "" && cont == "" || fn == "" || ln == "" || un == "" || pass == "" 
    || pass2 == "" || mail == "" || cont == ""){ 
alert('Error: Fill up all fields'); 
} 
else{ 
    if(pass == pass2) 
    { 
      if(validateEmail(mail)){ 
       $.ajax({ 
        url:url, 
        data: "fn="+fn+"&ln="+ln+"&un="+un+"&pass="+pass+"&mail="+mail+"&cont="+cont, 
        type:"post", 
        success:function(e){ 

         alert('Registration Successful'); 
        }//success 


        });//ajax 
      } 

      else{ 
       alert("Invalid Email Format"); 
      } 
    }//if 

    else{ 
     alert('Password Do Not Match'); 
    } 
} 







    });//click 

}); //document 

我控制器代码注册

public function acceptusr(){ 
    $data = array (
      "firstname"=>$this->input->post('fn'), 
      "lastname"=>$this->input->post('ln'), 
      "username"=>$this->input->post('un'), 
      "password"=>md5($this->input->post('pass')), 
      "email"=>$this->input->post('mail'), 
      "contact"=>$this->input->post('cont') 

     ); 

    $this->Mod_admin->addtotb('user_acc',$data); 
} 

模型

public function addtotb($table, $data) 
{ 
    $this->db->insert($table,$data); 
} 

请帮助我如何创建用户名验证感谢..

+0

您应该检查这个绰号用户是否已存在于数据库(使用'SELECT')与否。 – Regent 2014-10-07 11:22:39

+0

您将必须执行数据库请求以检查用户名是否被采用。你可以在你的jQuery代码中使用ajax,或者在你的acceptusr()函数中添加一个测试。 – Jerodev 2014-10-07 11:23:04

+0

我相信codeigniter可以处理数据库异常......所以只需将您的数据库表列设置为“UNIQUE”并处理异常? – Najzero 2014-10-07 11:24:31

回答

1

你只需要做一个简单的验证。如果您使用的是AJAX,则需要执行这些步骤。

  1. 发送username到服务器。
  2. 检查数据库中是否存在username
  3. 根据username的存在对truefalse响应客户端。
  4. 根据回复,向用户发送客户端警报!

所以要做到这一点,你需要从服务器验证它。您在发布的问题中所做的只是对电子邮件地址的验证。假设你熟悉jQuery的AJAX功能,你需要做到以下几点:

  1. 发送username到服务器。

    $.get("checkuser.php", {username: $("#username").val()}, function (response) { 
    }); 
    
  2. 检查为username在数据库中存在。

    $db->query("SELECT * FROM `users` WHERE `username`=" . $_GET["username"]); 
    
  3. 响应客户机具有取决于username的存在truefalse

    if ($db->rowCount() == 1) 
        die ("true"); 
    else 
        die ("false"); 
    
  4. 基于该响应,向用户发送客户端警惕!

    $.get("checkuser.php", {username: $("#username").val()}, function (response) { 
        if (response == "true") 
        { 
        alert("User already exists!"); 
        return false; 
        } 
    }); 
    
0

之前$this->db->insert($table,$data);地址:

$userq = $this->db->query("SELECT * FROM user_acc WHERE username LIKE '".$data['username']."'"); 
if($userq->num_rows() == 0) 
+0

我应该在我的ajax中做些什么,或者我只是把它放在我的addtodb函数中,一切都会做? – James 2014-10-07 11:30:16

+0

如果你把它放在addtodb中,它会阻止把用户添加到数据库中。另外,如果你在'$ this-> db-> insert($ table,$ data);'else else return false;'并且在'acceptusr()'中改变'$ this-> Mod_admin-> addtotb('user_acc' ,$数据); ''echo $ this-> Mod_admin-> addtotb('user_acc',$ data); '并且改变'alert('Registration Successful');'如果(e == false || e =='false')alert('User already exists!');'你将会有验证。 – Romeo 2014-10-07 11:51:10

1

最好的解决办法是让数据库表行 “用户名” unique

1

很简单设置mysql列,其中用户名存储为唯一。

ALTER TABLE tbl_name 
    ADD UNIQUE (usr_name); 

插入查询作为

$q= mysqli_query($conn,"insert into users values ('xx', 'xx', 'xx')"); 
if(!$q){ 
$error= mysqli_error($q); 
//or $error="user name already exits " 
header("location:login.php?error=$error"); 
} 
0
/* $username is the desired username from New user that was input field and 
you can use mysqli too just by chaging my sql to mysqli all the best */ 

$result = mysql_query("SELECT * FROM users WHERE username='$username'"); 
if(empty($username) or empty($password1) or empty($password2)) 
{ 
    echo '<p>Fields Empty !</p>'; 
} 
elseif(mysql_num_rows($result) == 1) 
{ 
    echo "User exist"; 
} 
elseif($password1 == $password2) 
{ 
    $password = md5($password1); 
    mysql_query("INSERT INTO users (username, password) VALUES('$username', '$password')"); 
    echo "<p>Successfull Register</p>"; 
} 
else 
{ 
    echo 'Password Not Matched'; 
} 
+0

请详细说明您的答案 – 2014-10-07 12:06:28

+0

兄弟我正试图但它给我的错误...我的代码是不正确的,不提交... – 2014-10-07 12:28:31

+0

兄弟!我复制粘贴它从我的项目之一... M确定你现在没有问题。总是检查拼写,单个错误绰绰有余足以造成错误。 – 2014-11-04 22:34:31

相关问题