Mysqli 检查用户名是否已经存在

Mysqli check if username already exists

是的,我知道之前有人问过这个问题,我从这个网站的多个答案中复制了代码,试图让它发挥作用。这是我现在一直在使用的代码,但它一直允许我输入重复条目。

$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:

我第一次使用这样的登录系统,所以如果我犯了一些愚蠢的错误我也不会感到惊讶。

编辑:我尝试对其进行编辑,但仍然无法正常工作,我还使 'Email' 和 'Username' 列在我的数据库中是唯一的。但这一切所做的只是阻止数据被输入。我还尝试了一种解决方法,它在错误号 1062 处显示错误,但这种方法还没有奏效。

The new code

我也遗漏了一些明显的东西,我正在使用 IF 语句,所以它只在我认为时循环通过 fie 查询检查

我怀疑那些 SELECT 查询失败是因为它们读取的数据与插入数据库的数据不同。这是您的插页:

INSERT INTO users ...

但是你 select 来自不同的 tables:

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

如果值在一个名为 users 的 table 中,为什么你 select 来自 table 个名为 EmailUsername?也许您是想从 users 改为 select?这也意味着您可以在一个查询中完成,而不是两个:

SELECT * FROM users WHERE Username = '".$testname. "' OR Email = '".$testemail. "'

我在我的数据库中创建了名称列 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";
}

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