Mysqli检查用户名是否已存在

时间:2015-02-19 13:33:31

标签: php database login mysqli

是的我知道之前已经问过这个问题,我从这个站点的多个答案中复制了代码,试图让它运行起来。这是我现在使用的代码,但它一直允许我输入重复的条目。

$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处显示错误,但发生的情况尚未发生。

The new code

我也错过了一些明显的东西,我正在使用一个IF语句,因此只有在我想到的时候才会通过fie查询检查

2 个答案:

答案 0 :(得分:1)

我怀疑那些SELECT查询失败了,因为他们没有读取插入数据库的相同数据。这是你的插入内容:

INSERT INTO users ...

但是你要从不同的表中选择:

SELECT * FROM Email ...
SELECT * FROM Username ...

如果值位于名为users的表中,为什么要从名为EmailUsername的表中进行选择?也许你打算从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";
}

如果输入的数据已存在,则会发出错误,而不是简单地发送一条消息,表明该名称已被使用。