2013-07-19 90 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'; 
} 

?> 

希望有所帮助。