[英]PHP Login Form. Always wrong email, password
我有一個小問題。 我真的不知道我做錯了什么。 我將代碼從不推薦使用的php5更改為php7,但之后將其更改了。 登錄無效,因為它應該是
if(isset($_POST['is_login'])){
$sql = "SELECT * FROM ".$SETTINGS["USERS"]." WHERE `email` = '".mysqli_real_escape_string($_POST['email'])."' AND `password` = '".mysqli_real_escape_string($_POST['password'])."'";
$sql_result = mysqli_query ($connection,$sql) or die ('request "Could not execute SQL query" '.$sql);
$user = mysqli_fetch_assoc($sql_result);
if(!empty($user)){
$_SESSION['panel'] = $user;
$query = " UPDATE ".$SETTINGS["USERS"]." SET last_login = NOW() WHERE id=".$user['id'];
mysqli_query ($connection,$query ) or die ('request "Could not execute SQL query" '.$query);
}
else{
$error = 'Wrong email or password.';
最后一個語句$error = 'Wrong email or password.';
總是被叫。 感謝幫助。
原因是mysqli_real_escape_string()
要求將數據庫連接作為第一個參數傳遞。
更好的是,使用准備好的語句並消除那些討厭的函數/數據庫調用。
請記住,如果打算繼續使用此方法,或者使用實時方法,請使用安全的哈希方法,例如password_hash()
。 我確定您希望保持數據庫不變。
password_hash()
http://php.net/manual/zh/function.password-hash.php 調試:
在查詢中使用mysqli_error()
可以在過渡期間為您提供幫助。
附帶說明:如果並且當您決定安全存儲密碼時,請記住不要對密碼使用任何轉義方法。 像這樣的123'\\abc<BR>
將被視為有效。 但是,通過轉義,它將被解釋為123\\'\\abc<BR>
,進而將其驗證方法呈現為“ null&void”,並且由於將斜杠/轉義引用嵌入哈希中而將無提示地失敗。 password_hash()
和password_verify()
考慮到了這一點。
password_verify()
http://php.net/manual/zh/function.password-verify.php
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.