簡體   English   中英

我的登錄表單返回無效的用戶名/密碼,即使它是正確的

[英]My login form returns invalid username/password even if it is correct

我正在創建一個簡單的用戶注冊和登錄系統。 注冊工作正常,並將用戶存儲在數據庫中。 但是當我嘗試登錄時,即使我的用戶名/密碼正確,它仍然返回它不正確。 我似乎找不到這里的問題是代碼。 登錄表格:

<form method="post" action = 'plogin.php'>
            <h2 class="sr-only">Login Form</h2>
            <div class="illustration"><i class="icon ion-ios-navigate"></i></div>
            <div class="form-group"><input class="form-control" type="email" name="email" placeholder="Е-маил"></div>
            <div class="form-group"><input class="form-control" type="password" name="password" placeholder="Лозинка"></div>
            <div class="form-group"><button class="btn btn-primary btn-block" type="submit">Најава</button></div><a href="#" class="forgot">Ја заборавивте лозинката? Кликнете овде.</a></form>

驗證並檢查用戶名和密碼是否存在:

<?php
session_start();

if(!empty($_POST)) {
    include('includes/general.php');
    if(!$connection){
        die("Failed to connect to database ".mysqli_connect_error());
    }
    $email = mysqli_real_escape_string($connection, $_POST['email']);
    $password = mysqli_real_escape_string($connection, $_POST['password']);
    $hashedPassword = hash('SHA256', $password);
    $query = "SELECT * FROM users WHERE email = '$email' AND password = '$password'";
    $result = mysqli_query($connection, $query) or die (mysqli_error($connection));
    if(mysqli_num_rows($result) > 0) {
        $_SESSION = mysqli_fetch_array($result);
        echo "<script>window.location.href = 'user.php';</script>";
    } else {
        echo "<script>alert('invalid username/password');
            window.location.href= 'login.php';</script>";

    }
} else {
    echo "<script>window.location.href = 'index.php';</script>";
}

你已經混合了你的變量。 我猜您的密碼存儲為哈希,但您將它與未哈希值進行比較。

試試吧

$password = mysqli_real_escape_string($connection, $_POST['password']);
$hashedPassword = hash('SHA256', $password);
$query = "SELECT * FROM users WHERE email = '$email' AND password = '$hashedPassword'";

即使我想知道您為什么嘗試將完整結果放入 $_SESSION 中。 我不會那樣做,如果你需要在你的會話中有一些值(例如 userId、電子郵件和用戶名或類似的),我只會存儲這些而不是行中的所有列。 在沒有指定要檢索的列的情況下執行查詢也不是最佳實踐,請參閱此主題以獲取說明。

您可能想要檢查password_hashpassword_verify 的PHP 參考以改進您的概念。

你的意思是

$query = "SELECT * FROM users WHERE email = '$email' AND password = '$hashedDassword'"; 

?

而且,我強烈建議您不要編寫自己的注冊和注冊表單,除非這是為了練習。

嘿,不要對 PHP 變量使用單引號,請使用 string con cat (.) 運算符

$query = "SELECT * FROM users WHERE email = '".$email."' AND password = '".$password."'";

暫無
暫無

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

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