所以我有我的日誌腳本,我試圖去工作,但是當我嘗試登錄它時,總是說,即使我包含在下面的測試說預期:(密碼哈希在這裏)發現:(在這裏相同的密碼哈希)我已經改變了代碼很多次,試圖修復它,並完成了一大堆谷歌搜索(對於想給我lmgtfy鏈接的人)試圖修復它。我已經包含儘可能多的代碼,因爲我可以在無需添加虛假信息,以便堆棧溢出將讓我添加更多的代碼:php:mysqli登錄腳本失敗原因不明
實際腳本:
else{
$login = login($username, $password);
if ($login === false) {
$errors[] = 'That username/password is incorrect';
} else {
echo "ok";
$_SESSION['user_id'] = $login;
header('Location: index2.php');
exit();
}
}
print_r($errors);
//echo "expected to see: ". $pass. " "; //this was a test
//echo "found: ".$passen; //this was too
登錄功能:
function login($username, $password){
$user_id = sanitize($username);
$db = get_my_db();
$username = sanitize($username);
$password = md5($password);
$sql = "SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'";
return ($db->query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'") === 1) ? $user_id : false; }
而sanitize()
功能只是mysqli_real_escape_string($data)
如果你想要其他東西,讓我知道,我會把它放入。順便說一下,測試腳本是這樣的:預期的功能只是把$密碼變成一個MD5。
$res = $db->query("SELECT `password` FROM users WHERE username = '$username'");
$row = $res->fetch_assoc();
$pass = $row['password'];
$passen = expected($password);
一些可能不相關的建議:1.使用準備好的語句!查找MySQLi準備好的語句或PDO。 2.不要**不再使用MD5密碼!將bcrypt或scrypt與每個用戶的鹽結合使用!最好使用PHP的內置函數:[password_hash()](http://php.net/password_hash),[password_verify()](http://php.net/password_verify)。存在PHP <5.50的兼容性庫:[ircmaxell/password_compat](https://github.com/ircmaxell/password_compat)。 – ComFreek
如何定義'sanitize'? – Gumbo
你確定不會跳過else語句嗎? –