![](/img/trans.png)
[英]Login PHP keeps returning invalid username or password even if the fields are correct?
[英]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_hash和password_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.