密码重置选项php生成错误的代码

时间:2017-01-31 00:07:20

标签: php

我正在进行passowrd重置,但我遇到的问题是,当密码即将因某种原因而得到更新时,这里更改的是我的代码

>?php
if ($password == $confirmpassword)
    {
        echo "$password";
        echo "</br>";
        //has and secure the password

        $npassword = password_hash('$password', PASSWORD_BCRYPT, array('cost' => 10));
         echo "$npassword";

        // Update the user's password
            $query = $conn->prepare('UPDATE users SET password = :password WHERE email = :email');
            $query->bindParam(':password', $npassword);
            $query->bindParam(':email', $email);
            $query->execute();
            $conn = null;
        echo "Your password has been successfully reset.";
    }
    else
        echo "Your password's do not match.";
}


 ?>

示例我尝试使用demo123作为密码,当我回显$ password我得到demo123,当我回应$ npassword我得到一个代码,当我手动做

>?php   $npassword = password_hash('demo123', PASSWORD_BCRYPT, array('cost' => 10));?>

我得到另一个哈希现在这确实有效,如果我手动添加它,如果我使用变量$ password我得到另一个代码错误的方式因为我无法登录但如果我这样做手动和更新它然后demo123工作。< / p>

我做错了什么,我是新手

2 个答案:

答案 0 :(得分:1)

如果要在字符串中使用变量,则必须使用双引号(")。 但是,在您的情况下,由于您正在使用变量并且不向其添加任何内容,因此您只需删除引号:

$npassword = password_hash($password, PASSWORD_BCRYPT, array('cost' => 10));

此外,由于cost已默认为10,您可以省略以下内容:

$npassword = password_hash($password, PASSWORD_BCRYPT);

答案 1 :(得分:0)

password_hash结果总是不同的,您无法通过生成的哈希查询mysql,您需要获取用户并执行password_verify ($password, $hash);而不是

$ password 是&#39; demo123&#39;和 $ hash 是来自DB的密码列值