我想檢查用戶輸入的用戶名和密碼是否與使用PDO的數據庫中的條目匹配,但由於某種原因似乎無法使其工作。如何檢查用戶名和密碼匹配
數據庫表稱爲user_info,我試圖從中獲取用戶名和密碼的行分別爲username
和pass
。我並不完全確定如何檢查用戶輸入的信息是否與數據庫條目相匹配,然後根據是否返回true或false來決定將它們發送到何處。
此外,我明顯得到了先決條件,如包括連接到數據庫的文件,我知道誰的信息是正確的。
我曾在if ($username)
等黑暗中刺過,但顯然這是不正確的。
HTML
<form method="post">
<label for="username2">Username</label>
<input type="text" name="username">
<label for="password">Password</label>
<input type="text" name="password">
<input type="submit" value="Login" name="login">
</form>
PHP
$username = $_POST['username'];
$password = $_POST['password'];
try {
$result = $db->prepare("SELECT * FROM user_info WHERE username = :user AND pass = :pass");
$result->bindParam(':user', $username);
$result->bindParam(':pass', $password);
$result->execute();
$rows = $result->fetch(PDO::FETCH_NUM);
}
catch (Exception $e) {
echo "Could not retrieve data from database";
exit();
}
if ($username == "test" && $password == "test") {
$_SESSION['username'] = $username;
redirect('/add-property.php');
} else {
if (isset($_POST['login'])) {
echo "Username or password incorrect";
}
}
@ The Peanut Gallery:我不是精英主義者,但我認爲我會通過回答這個問題來做更多的傷害。對這段代碼的所有錯誤的解釋也不符合規則和準則。 – r3wt
@ r3wt你是指根據我的代碼或我的整體代碼來檢查用戶名嗎?我顯然不使用純文本的密碼,它只是一個測試目的的佔位符。 –
1.當您只需要行數時,請勿選擇*。理想情況下,無論如何你都要選擇每一列,因爲這樣更好。選擇表格中最簡單的一列,例如user_id,以使事情保持輕鬆高效。 2.如果isset($ _ POST ['login'])應該是if!empty($ _ POST),則不需要用表單名稱覆蓋您的發佈請求。它應該只有2-3個查詢字符串,用戶名和密碼以及可選的csrf標記。 3.使用password_hash和password_verify進行密碼散列。請不要推出自己的。 4.在測試過程中回顯異常情況。 (續) – r3wt