好吧,我正在使用带有 PDO 扩展名的PHP作为数据库驱动程序。
我正在修改密码'事情对我来说很糟糕:(
我们(某些 Stackoverflow 帮助,Kudos!)已使用当前密码成功 验证 密码,但我认为它并没有更新数据。
以下是遇到情景:
您正在将密码从 quora 更改为 stackoverflow 。我们知道,如果您更改密码,则无法使用旧密码,但在我的情况下,您可以使用旧密码而不是新密码,使新密码 obselete
以下是我的代码片段:
$option = ['cost' => 12];
$password = password_hash($_currentpassword, PASSWORD_BCRYPT, $option);
$selectpasswordsql = "SELECT `password` FROM `auth` WHERE username=?";
$selectpasswordstmt = $conn->prepare($selectpasswordsql);
$selectpasswordstmt->execute(array($_SESSION['account']['username']));
$selectpasswordresults = $selectpasswordstmt->fetch(PDO::FETCH_ASSOC);
$databasepass = $selectpasswordresults['password'];
if(password_verify($_currentpassword,$databasepass)){
if(empty($passmsgs)){
$updatepasssql = "UPDATE `auth` SET
`password`=?
WHERE username=?
";
$updatepassstmt = $conn->prepare($updatepasssql);
$updatepassstmt->execute(array(password_hash($password, $_SESSION['account']['username']));
if($updatepassstmt){
array_push($passmsgs, 'Successfully updating your password!');
} else {
array_push($passmsgs, 'There was a problem executing your command!');
}
}
} else {
array_push($passmsgs, 'Your current password is wrong!');
}
答案 0 :(得分:1)
首先,请确保您可以通过在页面顶部添加以下行来查看错误。
error_reporting(E_ALL);
ini_set("display_errors", 1);
以下代码包含逻辑和语法错误。
$updatepassstmt->execute(array(password_hash($password, $_SESSION['account']['username']));
if($updatepassstmt){
我建议您像这样转换代码逻辑:
...
$updatepassstmt = $conn->prepare($updatepasssql);
$new_hashed_password = password_hash($_POST['new_password'], PASSWORD_BCRYPT, $option); // replace $_POST['new_password'] with the correct one.
$result = $updatepassstmt->execute($new_hashed_password, $_SESSION['account']['username']);
if ($result){
...etc...