2014-03-14 66 views
0
// query 
    $result = $server->prepare("SELECT * FROM admins WHERE username= :hjnji AND password=  :asos"); 
    $result->bindParam(':hjnji', $user); 
    $result->bindParam(':asos', $password); 
    $result->execute(); 
    $rows = $result->fetch(PDO::FETCH_NUM); 
    if($rows > 0) { 
    header("Location: database.php"); 
    } 

我試圖創建一個登錄函數,我的數據庫到表「管理員」。但是,每當我嘗試通過瀏覽器登錄到我的數據庫時,它都會迴應我的錯誤消息,表明它沒有正確的用戶名和密碼。我想可能是因爲我的查詢沒有連接到數據庫,但目前我全都沒有想法。PHP登錄功能找不到正確的用戶名和密碼

+0

即使您使用的是準備好的語句,您仍然有一個安全漏洞:您的查詢可以使用不同的密碼存在相同的用戶名。它也遇到了MySQL會對這些字符串比較進行大小寫不敏感的問題,如果你的密碼是明文,這將是一個額外的問題。 更好的方法是僅搜索用戶名,然後單獨檢查(散列)密碼字段。它還將幫助調試爲什麼找不到需要它的行,因爲它將兩個比較分開。 – staticsan

回答

0

您的代碼可以簡化爲一個我不知道在您的查詢多餘的空格或「PDO :: FETCH_NUM」的用法。我會提出以下建議。

$query = $server->prepare("SELECT * FROM admins WHERE username = ? AND password = ?"); 
$query->execute(array($username, $password)); 

if($query->rowCount() == 1) { 
    // Username/Password correct 

    header("Location: database.php"); 
    exit(); 
} else { 
    // Username/Password incorrect 
} 
+0

謝謝你的幫助!我已經將簡化的代碼添加到了崇高的內容中,但我仍然收到錯誤「請輸入正確的用戶名和密碼」 - 這讓我瘋狂。你有什麼可以提示錯誤信息的建議嗎? – DanGodsall

+0

那麼代碼是不完美的,你需要改變一些變量名稱($用戶名$用戶)。嗯,數據庫結構是什麼樣的? –

+0

數據庫只是一個簡單的mysql數據庫,帶有兩個表,管理員和用戶。所有的數據庫都有名字,姓氏,電子郵件,這是用戶 - 管理員有名字(用戶名)和密碼。這是我第一次使用PHP,所以請原諒我的無知 – DanGodsall

相關問題