php - 登录效果不佳

标签 php mysql

我试图让我的新登录系统开始工作,我创建了一个简单的密码,并使用下一个代码将散列传递到我的 MySQL 表

ma​​kepass.php

<?php
$password = "testpass";


$hash = password_hash($password, PASSWORD_DEFAULT);

echo $hash;
?>

dologin.php

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

include('includes/functions.php');
session_start();   
if(isset($_POST['login'])) {
if(isset($_POST['username'])) {
    if(isset($_POST['password'])) {
        $username = $_POST['username'];
        $dbconn = mysqli_query($query, "SELECT * FROM cm_users WHERE Username = '$username'") or die(mysqli_error($query));
        foreach ($dbconn as $user) {
            if (password_verify($_POST['password'], $user['Password'])) {
                $_SESSION['user'] = $user['Username'];
            } else {
               echo 'Invalid password!';
            }
        }
    } else {
      echo 'Invalid username!';
    }
}
}
?>

所以我尝试使用“testpass”登录,哇哦:密码无效!

有什么想法吗? Afaik 它应该没问题,我没有看到任何语法或其他问题。

最佳答案

你不应该为此使用 foreach,但首先要查询,获取数组(你没有使用)然后将其与行的进行比较密码。

旁注:将 ("xxx", "xxx", "xxx", "xxx") 替换为您自己的凭据。但是,使用 $query 不是您应该用作连接变量的词,因为它很容易混淆。

(甚至我在写答案时也很困惑)。使用 $connection$conn 并且我已经在此处更改了它们,因此请改用它。

$conn = new mysqli("xxx", "xxx", "xxx", "xxx");
if ($conn->connect_error) {
    die('Connect Error (' . $conn->connect_errno . ') '
            . $conn->connect_error);
}

if(isset($_POST['login'])) {

$username = $_POST['username']; // you could use a conditional !empty() here
$password = $_POST['password']; // here also

    $query = "SELECT * FROM cm_users WHERE Username = '".$conn->real_escape_string($username)."';";
    $result = $conn->query($query);

// error checking on the query
if (!$result) {
    echo "<p>There was an error in query: $query</p>";
    echo $conn->error;
}

    $row_hash = $result->fetch_array();
    if (password_verify($password, $row_hash['Password'])) {
        echo "Welcome!";
    }
    else{
        echo "Invalid";
    }

}

  • 一旦成功,您就可以在之后添加其他好东西。

旁注:绝对确保您的 POST 数组保存值并且不包含空格。如果有,使用 trim()

即:

$username = trim($_POST['username']);
$password = trim($_POST['password']);

同时检查您的查询是否有错误:

和错误报告:

关于php - 登录效果不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34459222/

相关文章:

php - 为什么这个 while 循环不更新我的 mysql 查询?

php - Global Traffic Director - 需要 Ubuntu、LAMP 和 Nginx 帮助的 DO droplet

mysql - 错误: Loading local data is disabled - this must be enabled on both the client and server sides

mysql - Galera 集群高 Ping

php - 找到正确的出现顺序

php - mysql 和 30 天

mysql - 在 phpmyadmin 中逐行删除

MySQL查询反转数据

php - OR 和 AND 组合失败 MySQL

mysql - phpmyadmin:如何将 int 转换为 date?