PHP更改密码脚本总是从数据库中检测到错误的密码

PHP更改密码脚本总是从数据库中检测到错误的密码,php,passwords,Php,Passwords,所以我有一个带有phpmyadmin的数据库,其中有密码列。我想制作一个可以更改密码的脚本,如果当前密码与数据库中的密码相同,则更改将成功。但是如果当前密码与数据库中的密码不匹配,则更改密码失败 当我尝试它时,我总是得到错误的密码/失败,即使当前密码与数据库中的密码相同。我用邮递员检查 这是邮递员的输出 这是我的数据库 这是我的PHP脚本 <?php if ($_SERVER['REQUEST_METHOD']=='POST'){ $id = $_POST['id'];

所以我有一个带有phpmyadmin的数据库,其中有密码列。我想制作一个可以更改密码的脚本,如果当前密码与数据库中的密码相同,则更改将成功。但是如果当前密码与数据库中的密码不匹配,则更改密码失败

当我尝试它时,我总是得到错误的密码/失败,即使当前密码与数据库中的密码相同。我用邮递员检查

这是邮递员的输出

这是我的数据库

这是我的PHP脚本

<?php

if ($_SERVER['REQUEST_METHOD']=='POST'){

    $id = $_POST['id'];
    $currentpassword = $_POST['currentpassword'];
    $newpassword = $_POST['newpassword'];

    require_once 'connect.php';

    $sql = "SELECT * FROM user_account WHERE id='$id' ";

    $response = mysqli_query($conn, $sql);

    //echo mysqli_num_rows($response);


    if(mysqli_num_rows($response) > 0){

        $row = mysqli_fetch_assoc($response);

        if (password_verify($currentpassword, $row['password']) ){

            $updatepass = "UPDATE user_account SET password='$newpassword' WHERE id='$id' ";

                if(mysqli_query($conn, $updatepass)) {

                    $result["success"] = "1";
                    $result["message"] = "success";

                    echo json_encode($result);
                    mysqli_close($conn);
                }
                else{

                    $result["success"] = "0";
                    $result["message"] = "error!";
                    echo json_encode($result);

                mysqli_close($conn);
                }

        }else{
            $result['success'] = "0";
            $result['message'] = "Wrong password.";
            echo json_encode($result);

            mysqli_close($conn);
        }

    }

}


?>
来自

密码\u验证-验证密码是否与哈希匹配

然后将密码存储为原始密码。您需要将密码作为哈希密码存储在数据库中,以便
password\u verify
函数返回true

//for example replace this
$query = "insert into user_account(name, email, password) values ('testing','testing@gmail.com','1234567')";
//with this
$query = "insert into user_account(name, email, password) values ('testing','testing@gmail.com','" . password_hash('1234567') . "')";

你是不是在存储前对密码进行哈希运算?啊,这就是问题所在,如果我不想对密码进行哈希运算怎么办?如何检查currentpassword是否与数据库中的密码相同?只需在没有密码验证的情况下进行正常比较即可,例如:
if($currentpassword==$row['password'))
。但不要这样做,你应该散列密码,否则如果你的数据库被盗,攻击者将以明文形式获取你所有客户端的密码!