为了账号安全,请及时绑定邮箱和手机立即绑定

如何修复php表单验证密码错误?

如何修复php表单验证密码错误?

PHP
茅侃侃 2022-01-14 15:13:26
我正在使用 Mac OS、mamp、phpmyadmin 创建一个简单的登录表单。我在 php myadmin 和第一个用户中创建了我的数据库。我确定用户名和密码正确(根据我的数据库),但我收到密码不正确的错误。我松散地遵循本教程https://www.tutorialrepublic.com/php-tutorial/php-mysql-login-system.php我相信这可能会导致错误,但我不确定。$hashed_password = $row["password"];                        if(password_verify($password, $hashed_password)){<?php// Initialize the sessionsession_start();// Check if the user is already logged in, if yes then redirect him to welcome pageif(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){    header("location: welcome.php");    exit;}// Include config filerequire_once "config.php";// Define variables and initialize with empty values$username = $password = "";$username_err = $password_err = "";// Processing form data when form is submittedif($_SERVER["REQUEST_METHOD"] == "POST"){    // Check if username is empty    if(empty(trim($_POST["username"]))){        $username_err = "Please enter username.";    } else{        $username = trim($_POST["username"]);    }    // Check if password is empty    if(empty(trim($_POST["password"]))){        $password_err = "Please enter your password.";    } else{        $password = trim($_POST["password"]);    }    // Validate credentials    if(empty($username_err) && empty($password_err)){        // Prepare a select statement        $sql = "SELECT id, username, password FROM users WHERE username = :username";        if($stmt = $pdo->prepare($sql)){            // Bind variables to the prepared statement as parameters            $stmt->bindParam(":username", $param_username, PDO::PARAM_STR);            // Set parameters            $param_username = trim($_POST["username"]);?>我希望被带到我的欢迎屏幕。
查看完整描述

2 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

修复我更换


$hashed_password = $row["password"];

if(password_verify($password, $hashed_password)){


$hashed_password = password_hash( $_POST["password"], PASSWORD_DEFAULT);

if(password_verify($_POST["password"], $hashed_password)){

此哈希密码在将它们存储在数据库中之前,然后根据哈希密码验证计划文本


查看完整回答
反对 回复 2022-01-14
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

验证方法需要散列密码。您$row["password"]包含散列密码(如果您password_hash()在用户注册中使用函数),而收到的密码$_POST是纯文本密码。


使用以下内容:


    if (password_verify($_POST["password"], $row["password"])) {

      // User authorized

    } else {

      // User non authorized

    }


查看完整回答
反对 回复 2022-01-14
  • 2 回答
  • 0 关注
  • 185 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信