2013-11-24 31 views
-2

我在PHP中使用mysqli並試圖從數據庫獲取數據以登錄到系統中。當我使用phpmyadmin來執行我的查詢時,我會得到完美的結果。但是當我試圖從php腳本中獲得它時,我得到了一個概率。我的PHP腳本低於需要糾正我的mysqli查詢

if(isset($login)){ 


$email = @$db->real_escape_string(htmlentities($_POST['loginid'])); 
$username = @$db->real_escape_string(htmlentities($_POST['loginid'])); 
$pass1 = @$db->real_escape_string(htmlentities($_POST['loginpass'])); 

$blah = new Encryption(); 
$pass = $blah->encode($pass1); 


    if($db->query("SELECT `uid` FROM `users` WHERE BINARY `uname` = '$username' AND `pass` = '$pass'")){ 
    $errors[] = 'Logged in by username'; 
    } 
    else if($db->query("SELECT `uid` FROM `users` WHERE `email` = '$username' AND `pass` = '$pass'")){ 
    $errors[] = 'Logged in by email'; 
    } 

} 

現在的事情是,我的用戶名是「ABC」,郵件是「[email protected]」和密碼「qazwsx」加密。第二個用戶名是'xyz',電子郵件是'[email protected]',密碼是'abcdef',但它不檢查uname並一次通過或一次通過並同時通過。如果我輸入「1」或任何帶有「qazwsx」密碼的密碼,則表明您已通過用戶名登錄,這意味着它僅檢查密碼。

而且看到結果,我用這些代碼,

if($errors){ 
     echo '<ul>'; 
      foreach ($errors as $error){ 
      echo '<li>'.$error.'</li>'; 
      } 
     echo '</ul>'; 
} 

else if ($loginform){ 
    echo $loginform; 
    } 

我不知道該怎麼辦。請幫我guyz。

回答

0

查找0行不是錯誤。查詢無法找到並仍然返回成功。

您希望在查詢返回後檢查並確保結果至少包含一行。

$result = $db->query("SELECT...."); 
if ($result and $result->num_rows) { 
    # query found a matching user 
} 
+0

你能告訴我應該使用什麼樣的代碼嗎?你可以編輯我的代碼嗎? – user2947999

+0

Thanx,它爲用戶名工作,但我仍然無法用電子郵件ID登錄。 :'( – user2947999

+0

)如果你對兩者都做了同樣的事情,那麼你就面臨着一個完全不同的問題。數據庫中的值是什麼樣的,你在查詢中使用的值是什麼樣的 – cHao