Javascript 登记表上显示用户名在不使用时已经在使用';不存在

Javascript 登记表上显示用户名在不使用时已经在使用';不存在,javascript,php,mysql,Javascript,Php,Mysql,以下是HTML和JavaScript代码: if (username == '' || password == '' || firstname == '' || secondname == '' || email == '') { alert("Please fill all the fields!"); } else if ((password.length) < 8) { alert("Password should have at least 8 characters in

以下是HTML和JavaScript代码:

if (username == '' || password == '' || firstname == '' || secondname == '' || email == '') {
  alert("Please fill all the fields!");
} else if ((password.length) < 8) {
  alert("Password should have at least 8 characters in length!");
} else {
  $.post("register.php", {
      username1: username,
      password1: password,
      firstname1: firstname,
      secondname1: secondname,
      email1: email
    },
    function(data) {
      if (data == 'You have successfully registered!') {
        $("form-horizontal")[0].reset();
      }
      alert(data);
    });
if(用户名=“”| |密码=“”| |第一名=“”| |第二名=“”| |电子邮件=“”){
警告(“请填写所有字段!”);
}否则如果((密码长度)<8){
警报(“密码长度应至少为8个字符!”);
}否则{
$.post(“register.php”{
username1:username,
密码1:密码,
名字1:名字,
secondname 1:secondname,
email1:电子邮件
},
功能(数据){
如果(数据==“您已成功注册!”){
$(“水平形式”)[0]。重置();
}
警报(数据);
});

而php:

我的问题是,无论注册中包含什么字段和/或用户名是否在数据库中,我都会收到相同的错误:


此用户名已注册!请重试!

在您的PHP脚本中,您不检查查询中是否有任何行,只检查查询是否为空

您可以通过将
if
语句更改为:

$sql1="SELECT * FROM users WHERE username='$username'";
$result = $mysqli->query($sql1);
if(!$result->num_rows)
{
    $sql2 = "INSERT INTO users(username, password, firstname, lastname, email) VALUES ('$username', '$password', '$firstname', '$secondname', '$email')";
    $result2 = $mysqli->query($sql2);
    if($result2) // Insert query
    {
        echo "You have successfully registered!";
    }
    else
    {
        echo "Error!";
    }
我建议看一下这里,看看我改变了什么:

检查字符串是否为空的更好方法是这样做,而不是现在所拥有的:

if (username == null || password == null || firstname == null || secondname == null || email == null)
我还建议在PHP中检查所有内容是否都有值,因为当您检查元素时,Javascript可以被更改

您还需要准备语句,您的代码目前很容易受到SQL注入的攻击,您绝对不希望这样

有关如何执行此操作的更多信息,请参见此处:

介意发布你的mysql吗?允许用户使用他们想要的。@Fred ii-意思是什么?查询还是实际的表?也许你的mysql是failing@arch1ve现在更改了if语句,它转到第二个if的else分支,打印“Error!”另外,我现在不关心SQL注入,因为没有人会试图破坏我的数据库(个人项目)。无论它是否是个人项目,您都应该始终使用正确的安全工具。如果
If
语句不起作用,则是由于查询中的错误。第一个
If
语句起作用,但在这之后,当它到达
If($result2)时
并且它的计算结果不是true,然后它只会转到
else
语句,回显“Error!”因为您在那里检查的查询不正确。请尝试在数据库中执行查询,看看它是否在那里工作。没问题,我建议在开发启用错误时,您可以通过在代码的第一行添加以下内容来实现:
ini\u set('display\u errors',1);