簡體   English   中英

PHP登錄表單。 總是錯誤的電子郵件,密碼

[英]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() 我確定您希望保持數據庫不變。

調試:

在查詢中使用mysqli_error()可以在過渡期間為您提供幫助。

附帶說明:如果並且當您決定安全存儲密碼時,請記住不要對密碼使用任何轉義方法。 像這樣的123'\\abc<BR>將被視為有效。 但是,通過轉義,它將被解釋為123\\'\\abc<BR> ,進而將其驗證方法呈現為“ null&void”,並且由於將斜杠/轉義引用嵌入哈希中而將無提示地失敗。 password_hash()password_verify()考慮到了這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM