重复的用户帐户

时间:2013-06-25 13:55:11

标签: php html mysql

我刚刚问了一个问题并将我的代码修改为下面的代码:

{ 
//Check if user already exists 
$un_check = mysql_query("SELECT Username FROM users WHERE Username = '$un'");  
if(mysql_num_rows($un_check) >0) {
echo "Username already exists";
}
else{
 // Username Free
}

注册时,它表示“用户名已经存在”但是,它仍然允许我创建帐户,并将相同的信息添加到数据库。

这是我的代码或数据库的问题吗?

6 个答案:

答案 0 :(得分:3)

如果您想禁止在表格中两次输入相同的值,请创建unique index

检查现有条目是一回事 - 禁止插入具有相同值的另一行是另一回事。

添加这样的索引的方式如下:

ALTER TABLE `users` ADD UNIQUE `MY_UNIQUE_INDEX` ( `username` ) 

答案 1 :(得分:1)

您可以简单地将用户添加到else块内的数据库的mysql查询代码。这样,如果用户已经存在,您将永远不会插入数据库。

答案 2 :(得分:0)

可能的情况

  • Username在您的数据库中不是唯一的。

  • (如果您不想更改表结构)将insert部分代码放在else语句中。

    if(mysql_num_rows($ un_check)> 0){   echo“用户名已存在”; } 其他{  //插入新用户名 }

BTW不使用mysql_函数。 DEPRECATED

答案 3 :(得分:0)

另一种方法是谋杀剧本。我的意思是,使用die();函数。无论您将脚本置于何处,都会停止脚本。您可能希望像这样插入:

//Check if user already exists 
$un_check = mysql_query("SELECT Username FROM users WHERE Username = '$un'");  
if(mysql_num_rows($un_check) >0) {
    echo "Username already exists";
    die(); // Don't continue, as we don't want to insert a username
}
else{
    // Username Free
}

虽然这样可行,但如果还有其他任何代码仍然要执行,无论用户名是否存在,只需将用户插入else{}块中的代码放在其他人建议的位置即可。

答案 4 :(得分:0)

问题有两个。

首先,严格来自数据存储 - 也就是数据库 - 的观点,问题在于执行不当的数据库设计。如果用户名是一个需要唯一的字段,那么应该通过向username列添加唯一索引来在数据库中声明该用户名。这会创建正确的数据库设计,因此如果表中已存在用户名值,则无法添加新记录 - 因此唯一索引。

Sencond,检查用户名是否存在的代码。在检查数据库是否重复之后是否仍在创建帐户,或者您只是说您可以在数据库中手动复制用户名?如果代码仍然复制用户,那么可能是因为结果是空集 - 即没有结果因为没有用户名存在,所以它不会返回行数因此更改>到> =。

答案 5 :(得分:-1)

我遇到了同样的问题,我的解决方案就是这个

<?php
//Connection Script Start
$mysql_host = "localhost";
$mysql_user = "root";
$mysql_password = "*******";
$mysql_database = "db_name";
$connect = mysqli_connect($mysql_host, $mysql_user, $mysql_password, $mysql_database);
//Connection Script Ends

$un = "userabc";
$search = "SELECT * FROM table_name WHERE username='$un'";
$query = mysqli_query($connect, $search);
$i = mysqli_num_rows($query);
if($i==0){
//username free
}else{
echo "This username is already taken";
}
?>