我的登录表单返回无效的用户名/密码,即使它是正确的

2w3kk1z5  于 2021-06-19  发布在  Mysql
关注(0)|答案(3)|浏览(324)

我正在创建一个简单的用户注册和登录系统。注册工作正常,它将用户存储在数据库中。但是当我尝试登录时,即使用户名/密码正确,它仍然返回不正确的信息。我好像找不到问题在这里是代码。登录表单:

<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>";
}
ncgqoxb0

ncgqoxb01#

你的意思是

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

?
另外,我强烈建议不要写自己的注册和报名表,除非这是一个练习。

yzuktlbb

yzuktlbb2#

你把变量混在一起了。我猜您的密码存储为哈希值,但您正在将其与未保存的值进行比较。
试试吧

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

尽管我想知道你为什么要把完整的结果放在$\u会话中。我不会这样做,如果你需要在会话中有一些值(例如userid、email和username或similiar),我只会存储这些值,而不是该行的所有列。另外,在没有指定要检索的列的情况下执行查询也不是最佳做法,请参阅本主题以获取解释。
您可能需要检查php参考中的password\u hash和password\u verify来改进您的概念。

nbnkbykc

nbnkbykc3#

嘿不要对php变量使用单引号使用string con cat(.)运算符 $query = "SELECT * FROM users WHERE email = '".$email."' AND password = '".$password."'";

相关问题