PHP用户名已存在,但不存在

时间:2016-08-13 08:37:22

标签: php sql mysqli

我已经检查了许多关于我的问题的线索,但它仍然无法正常工作。

当我输入不存在的用户名时,它将抛出已创建的用户名。但是,当我输入已经在我的数据库中注册的用户名时,它仍然会注册。

这是我的注册表的php / html页面:

$error = false;
if(isset($_POST['signup'])) {

$name = mysqli_real_escape_string($con, $_POST['name']);
$email = mysqli_real_escape_string($con, $_POST['email']);
$password = mysqli_real_escape_string($con, $_POST['password']);
$cpassword = mysqli_real_escape_string($con, $_POST['cpassword']);

$sql = "SELECT name FROM users WHERE name='".mysql_real_escape_string($name)."'";
$query = mysqli_query($sql);
if(mysql_num_rows($query)){
    $error = true;
    $ckname_error = "Nom d'utilisateur déjà enregistré!";
} else { unset($ckname_error); }


if (!$error) {
        if(mysqli_query($con, "INSERT INTO users(name,mail,password,rank) VALUES('" . $name . "', '" . $email . "', '" . md5($password) . "', 'user' )")) {
            $successmsg = "Successfully Registered! <a href='login.php'>Click here to Login</a>";
            header("Location: login.php");
        } else {
            $errormsg = "Error in registering...Please try again later!";
        }
    }

3 个答案:

答案 0 :(得分:1)

您错过了$con,并使用mysqli_num_rows而不是mysql_num_rows

$query = mysqli_query($con,$sql);
if(mysqli_num_rows($query)){

答案 1 :(得分:1)

您的结果不可靠,因为您将mysqli_mysql_功能混合在一起。

1。更改:

$sql = "SELECT name FROM users WHERE name='".mysql_real_escape_string($name)."'";

为:

$sql = "SELECT name FROM users WHERE name='$name'";

2. 更改

$query = mysqli_query($sql);

为:

$query = mysqli_query($con,$sql);

3. 更改

if(mysql_num_rows($query))

为:

if(mysqli_num_rows($query))

答案 2 :(得分:0)

您正在使用mysqli_query($ sql)。你应该使用&#39; mysqli_num_rows()&#39;而不是mysql_num_rows()。 PHP reference - mysqli_num_row

int mysql_num_rows(resource $ result)需要资源类型,而如果您使用mysqli_query,则应该使用int mysqli_num_rows(mysqli_result $ result) - 期望mysqli_results。

告诉我们是否有效。