我刚刚问了一个问题并将我的代码修改为下面的代码:
{
//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
}
注册时,它表示“用户名已经存在”但是,它仍然允许我创建帐户,并将相同的信息添加到数据库。
这是我的代码或数据库的问题吗?
答案 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“用户名已存在”; } 其他{ //插入新用户名 }
答案 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";
}
?>