是的我知道之前已经问过这个问题,我从这个站点的多个答案中复制了代码,试图让它运行起来。这是我现在使用的代码,但它一直允许我输入重复的条目。
$query = mysqli_query($con, "SELECT * FROM Email WHERE Email = '".$testemail. "'");
if(mysqli_num_rows($query) > 0){
echo "Email is already in use.<br>";
}else{
$query = mysqli_query($con, "SELECT * FROM Username WHERE Username = '".$testname. "'");
if(mysqli_num_rows( $query) > 0){
echo "Username is already in use.<br>";
}else{
$sql = "INSERT INTO users (Username, Password, Email, Firstname, Lastname, Lastlogin, Registered) VALUES ('$testname', '$testpass', '$testemail', '$testfirstname' , '$testlastname', '$lastlogin', '$registered')";
if ($conn->query($sql) === TRUE) {
echo "New account created successfully<br>";
}
}
}
应该阻止这种情况发生的具体代码是here is the full page:
我第一次使用这样的登录系统,所以如果我犯了一些愚蠢的错误,我不会感到惊讶。
编辑:我尝试编辑它但它仍然无效,我还在我的数据库中使“电子邮件”和“用户名”列唯一。但所有这一切都是阻止数据被输入。我还尝试了一种解决方法,它在错误号1062处显示错误,但发生的情况尚未发生。我也错过了一些明显的东西,我正在使用一个IF语句,因此只有在我想到的时候才会通过fie查询检查
答案 0 :(得分:1)
我怀疑那些SELECT
查询失败了,因为他们没有读取插入数据库的相同数据。这是你的插入内容:
INSERT INTO users ...
但是你要从不同的表中选择:
SELECT * FROM Email ...
SELECT * FROM Username ...
如果值位于名为users
的表中,为什么要从名为Email
和Username
的表中进行选择?也许你打算从users
中选择?这也意味着您可以在一个查询而不是两个查询中执行此操作:
SELECT * FROM users WHERE Username = '".$testname. "' OR Email = '".$testemail. "'
答案 1 :(得分:0)
我在我的数据库中创建了名称列UNIQUE,而不是通过以下行添加新数据:
$sql = "INSERT INTO users (Username, Password) VALUES ('$testname', '$testpass')";
if (!($conn->query($sql))) {
echo "Username is already in use";
}else{
echo "New account created successfully";
}
如果输入的数据已存在,则会发出错误,而不是简单地发送一条消息,表明该名称已被使用。