2014-10-07 60 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

相關問題