2013-07-19 88 views
5

我一直在做一個登錄/註冊系統,我正在接近完成我的註冊部分代碼。我遇到的唯一問題是如何使用戶無法註冊重複的用戶名。我希望它能夠工作,以便我的數據庫不會接受這些信息,並且它會告訴用戶有關錯誤。任何幫助表示讚賞。如何防止用戶註冊時出現重複的用戶名? PHP/MySQL

我的PHP

<?php 
include ('database_connection.php'); 
if (isset($_POST['formsubmitted'])) { 
$error = array();//Declare An Array to store any error message 
if (empty($_POST['name'])) {//if no name has been supplied 
    $error[] = 'Please Enter a name ';//add to array "error" 
} else { 
    $name = $_POST['name'];//else assign it a variable 
} 

if (empty($_POST['e-mail'])) { 
    $error[] = 'Please Enter your Email '; 
} else { 


    if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST['e-mail'])) { 
     //regular expression for email validation 
     $Email = $_POST['e-mail']; 
    } else { 
     $error[] = 'Your EMail Address is invalid '; 
    } 


} 


if (empty($_POST['Password'])) { 
    $error[] = 'Please Enter Your Password '; 
} else { 
    $Password = $_POST['Password']; 
} 


if (empty($error)) //send to Database if there's no error ' 

回答

7

你能做到這樣,當用戶發佈,例如用戶名,然後點擊提交,你可以這樣寫代碼,或將其與您的修改添加到您的代碼:

<?php 
$connect = mysql_connect('whatever','whatever','whatever'); 
$database = mysql_select_db('your dbname'); 
$username = $_POST['username']; 
if(isset($username)){ 
$mysql_get_users = mysql_query("SELECT * FROM table_name where username='$username'"); 

$get_rows = mysql_affected_rows($connect); 

if($get_rows >=1){ 
echo "user exists"; 
die(); 
} 

else{ 
echo "user do not exists"; 
} 



} 
?> 
+0

很抱歉等待,但這完全解決了我的問題!我只是在大約10分鐘前將它放入我的代碼中,它將不再接受重複的用戶名並輸出錯誤。 – Zippylicious

+0

非常感謝你爲我+的代表,我很高興這個答案爲你工作,我想跟你說一些東西,當你創建用戶的專欄,你可以使它獨一無二,例如創建表用戶(username varchar(350)not null unique),祝你好運:) –

1

我覺得這樣的事情是你在找什麼:

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

    if (mysql_num_rows(yourFunctionForQueryingMySQL("SELECT * FROM tablename WHERE user='$user'"))) 
      echo "Name is taken"; 
    else echo "Name available"; 
} 
1

有兩件事情 你應該做。

  1. 使用戶名成爲數據庫表中的主鍵。這很容易使用phpmyadmin完成。

  2. 插入前驗證。

對於第二步,這裏是一個算法。你可以用你自己的方式使用pdo,mysqli甚至mysql來實現它(儘管現在不推薦)。

算法在你的代碼的結束(即,如果沒有錯誤)...匹配後提供的用戶名是

選擇記錄。

如果存在,則發出錯誤。

如果不存在,請將其插入。

希望有所幫助。

0

如果用戶名已經存在,您必須(可以)制定禁止註冊的條件。

$sql="SELECT username FROM tablename WHERE username='".$username."'";//looking through existing usernames 
    $resul=mysql_query($sql); 
    $num = mysql_num_rows($resul); 

    if ($num !=0){ //If there is already such username... 

    die("There is user with that username."); // ...kill the script! 
} else //continue with the script 
0

我用了PDO和類的方法,可能有些用處。

//function for checking if the user already exists in the database 
public function userExists($username){ 

//prepared statements for added security 
$query = $this->db->prepare("SELECT COUNT(`id`) FROM `users` WHERE `username`= ?"); 
$query->bindValue(1, $username); 

try{ 
    //execute the query 
    $query->execute(); 
    $rows = $query->fetchColumn(); 

    //if a row is returned...user already exists 
    if($rows == 1){ 
     return true; 
    }else{ 
     return false; 
    } 
//catch the exception 
}catch (PDOException $e){ 
    die($e->getMessage()); 
} 
}//end function userExists 

注意到預處理語句太 - 絕對向前

0

的方式,你可以這樣做:

<?php 

//---put this code before "if (empty($error))"------ 

$username = $_POST['username']; 
//---if your table user is "table_user" and fieldname username is "username" 
$query = 'SELECT username FROM table_user WHERE username = "' . $username . '" LIMIT 1'; 
$result = mysql_query($query) 
$totalNumRowResult = mysql_num_rows($result); 

if($totalNumRowResult > 0) { 
    $error[] = 'User exist'; 
} 

?> 

希望有所幫助。