Я предполагаю, что в вашей форме есть поля "old_password" и "new_password", которые заполняет пользователь. Сначала вы проверяете старый пароль, введенный по хешированному паролю, который уже есть в вашей таблице пользователей.
ПРИМЕЧАНИЕ использование фильтра, очищающего информацию, введенную в форму, перед передачей ее в SQL-запрос.
Если все хорошо, тогда вы продолжаете и проверяете новый пароль, введенный так, как вы хотите,Если новый пароль подтвержден, тогда вы продолжаете и обновляете свою таблицу пользователей.
// Connect to database
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$valid = false;
if ( !empty($_POST)) {
// Manter a validação dos erros
$usernameError = null;
$passwordError = null;
// Read in old password from form field
$old_password = filter_var($_POST['old_password'], FILTER_SANITIZE_STRING);
// Validar os inputs
if (empty($old_password)) {
$passwordError = 'Introduza a password!';
$valid = false;
}
// Check old password
else {
// Read in old password from db
// build SELECT statement with variable
$sql = 'SELECT password FROM users WHERE username = :USER';
$sql->bindValue(':USER', $user);
$sql->execute();
if ($sql->rowCount() > 0) {
// Read in value from select
$row = $sql->fetchObject();
$user_password = $row->password;
// Test entered password against hashed current user password
if (password_verify($old_password, $user_password)) {
$valid = true;
}
else {
// passwords do not match
$valid = false
}
}
else {
// Did not find user in table
$valid = false;
}
}
}
// Inserir os dados
if ($valid) {
// Test new password
$new_password = filter_var($_POST['new_password'], FILTER_SANITIZE_STRING);
// here you would test length, or content or whatever ...
// if still valid you save the new password
$new_password = password_hash($new_password, PASSWORD_BCRYPT);
$sql = "UPDATE users SET password = :NEWPASSWORD WHERE username = :USER';
$sql->bindValue(':NEWPASSWORD', $new_password);
$sql->bindValue(':USER', $user);
$sql->execute();
// header("Location: index.php");
}
Database::disconnect();