2013-10-21 153 views
0

我有這樣的代碼PHP條件不起作用

$nick = $_POST["user"]; 
$pass = sha1($_POST["pass"]); 

$user = pg_query($dbconn, "SELECT * FROM users"); 
$user = pg_fetch_object($user); 

if($user->nick != $nick || $user->pass != $pass) { 
    echo 'Wrong user or password'; 
} 

尼克數據庫字符類是相當散列,但我仍然得到「錯誤的用戶名或密碼」輸出。

是否有任何類型衝突?

+1

你只得到了第一個記錄在你的代碼中。如果記錄是第二個呢?您可以將檢查添加到您的SQL - 「SELECT * FROM users WHERE nick =? AND pass =?',然後在執行查詢之前綁定參數 – andrewsi

+4

這就是數據庫被無盡的請求折磨的方式,這種請求總是返回最大數量的可用數據,然後應用程序無法找到它的一個數據集在尋找。提示:'「SELECT * FROM USERS WHERE nick =?AND pass =?」' – Sven

+0

我知道,它會返回表中的所有記錄,但我只有1個記錄。我測試過,什麼查詢返回,看起來是正確的。 – Jayme

回答

1
$nick = $_POST["user"]; 
$pass = sha1($_POST["pass"]); 

$user = pg_query($dbconn, "SELECT * FROM users WHERE nick = '$nick' and pass='$pass'"); 
$num = pg_num_rows($user); 
$user = pg_fetch_object($user); 

if($num==0) { 
    echo 'Wrong user or password'; 
} 

當一些價值,客戶端將交互做查詢,確保他不會用注射的一些方法

更改代碼:

$nick = pg_escape_string(strip_tags($_POST["user"])); 
$pass = sha1($_POST["pass"]);