2016-08-13 72 views
1

我查了一下我的問題很多線程,但它仍然是行不通的。PHP的用戶名已經存在,當它不

當我輸入用戶名,不存在,它會拋出的用戶名已尚未創建。但是,當我輸入已經在我的數據庫中註冊的用戶名時,它仍然會註冊。

這裏是我註冊的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!"; 
     } 
    } 
+1

這很糟糕。使用pdO –

+1

您正在混合'mysql'和'mysqli' – C2486

+0

完全同意Aleksandar。使用PDO。 – Redhart

回答

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); 

變化

if(mysql_num_rows($query)) 

到:

if(mysqli_num_rows($query)) 
1

你錯過$con,並使用mysqli_num_rowsmysql_num_rows

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

您使用mysqli_query($ SQL)。你應該使用'mysqli_num_rows()'而不是mysql_num_rows()。 PHP reference - mysqli_num_row

INT mysql_num_rows($資源結果)預計,資源類型,而如果你使用mysqli_query,你應該用INT mysqli_num_rows(mysqli_result $結果) - 預計mysqli_results。

讓我們知道,如果它的工作原理。

相關問題