What are the best practices for allowing users to change their passwords in a PHP application?

To allow users to change their passwords in a PHP application, it is important to ensure that the process is secure and follows best practices. This includes verifying the user's current password before allowing them to set a new one, hashing the new password before storing it in the database, and using secure password reset tokens to verify the user's identity.

// Verify current password before allowing user to change it
if (password_verify($_POST['current_password'], $user['password'])) {
    // Hash the new password before storing it in the database
    $new_password = password_hash($_POST['new_password'], PASSWORD_DEFAULT);
    
    // Update the user's password in the database
    $query = "UPDATE users SET password = :new_password WHERE id = :user_id";
    $stmt = $pdo->prepare($query);
    $stmt->execute(['new_password' => $new_password, 'user_id' => $user_id]);
    
    echo "Password updated successfully";
} else {
    echo "Incorrect current password";
}