2013-08-25 43 views
0

我想檢查用戶名在數據庫中已經存在,我寫了這個代碼驗證用戶名是否已經存在與PHP和MYSQL?

<?php 
include('connect.php'); 
if(isset($_POST['registrati'])) { 

$Username = $_POST['nickname']; 
$Password = md5($_POST['password']); 
$Escape = mysql_real_escape_string($Username); 
$Query2 = "SELECT * FROM utenti WHERE utenti='".$Username."'"; 
if(mysql_num_rows($Query2)>0) { 
    echo "Nome utente già in uso"; 
} 
else { 
$Query = "INSERT INTO sito(usenti, password) VALUES('$Escape', '$Password')"; 
$Esecuzione = mysql_query($Query); 
} 
if(!$Esecuzione) { 
    echo "Errore: ".mysql_error(); 
} 
else { 
echo ""; 
}} 
?> 

當我運行它,即使我把兩個相同的用戶名,沒有人說並把它們一視同仁。爲什麼?

+0

是'個用戶'和'usenti'一樣嗎? – 2013-08-25 05:43:53

+0

您需要在運行mysql_num_rows ....之前執行查詢,順便說一句,從不再使用mysql_,它已棄用,請使用mysqli或PDO代替 –

+0

$ Query2未執行? – lulyon

回答

0

您需要在檢查返回行數mysql_num_rows()之前執行查詢。

$result_set = mysql_query($Query2) 
if(mysql_num_rows($result_set) > 0) { 
    //continue 
} 

旁註:MySQL_*自PHP 5.5起已棄用。改爲使用MySQLi_*PDO

0

您需要一個結果作爲mysql_num_rows的參數。

所以,

$Query2 = mysql_query("SELECT * FROM utenti WHERE utenti='$Username'");

,而不只是字符串

$Query2 = "SELECT * FROM utenti WHERE utenti='$Username'";

應該修復它。

請注意,如果您使用雙引號,則不需要連接字符串。

此外,我強烈建議您停止使用mysql_ *函數,因爲它們已被棄用並切換到mysqli_ *或PDO。見the red box。並且不要忘記總是清理你的用戶輸入(或者使用準備好的語句),否則你會接受SQL注入。

+0

我試過了,但我沒有說什麼一樣的 – Francesco64

+0

你是什麼意思? – Shomz

+0

我試圖按照你說的做,但問題仍然存在,他還說: mysql_num_rows()期望參數1是資源,布爾給定 – Francesco64

0

執行QUERY2 beforre mysql_num_rows($Query2)

這樣,

$result = mysql_query("SELECT * FROM utenti WHERE utenti='".$Username."'") 
    if (mysql_num_rows($result) > 0) {//code) 
0
  1. 嘗試插入並從同一個表中檢索相同的列。 YOu插入表sito的列usenti,但從表utenti檢索utenti。我認爲這是一個錯字。
  2. 您存儲的用戶名與$Escape,你應該檢索相同。
  3. 在檢查行數之前,您需要執行mysql_query($Query2)來執行實際查詢。

請嘗試以下修正:

$Query2 = mysql_query ("SELECT * FROM sito WHERE usenti='".$Escape."'"); 
if(mysql_num_rows($Query2)>0) { 
    echo "Nome utente già in uso"; 
} 
相關問題