Изменение пароля из SQL при помощи php

Всем привет, столкнулся с такой проблемой, что не могу изменить пароль в SQL.

<form action="chp.php" method="POST">
  <div class="mb-3">
    <label for="exampleInputPassword1" name="old_password" class="form-label">Password</label>
    <input type="password" class="form-control" id="exampleInputPassword1">
  </div>
  <div class="mb-3">
    <label for="exampleInputPassword1" name="new_password" class="form-label">Password</label>
    <input type="password" class="form-control" id="exampleInputPassword1">
  </div>
  <button type="submit" class="btn btn-primary">Submit</button>
</form>

php:

require_once 'connect.php';
$id = $_SESSION['user']['id']; 
$query = "SELECT * FROM users WHERE id=$id";
$result = mysqli_query($connect, $query);
$user = mysqli_fetch_assoc($result);
$hash = $user['user']['password'];
$oldPassword = $_POST['old_password'];
$newPassword = $_POST['new_password'];
if (password_verify($oldPassword, $hash)) {
    $newPasswordHash = password_hash($newPassword, PASSWORD_DEFAULT);
    $query = "UPDATE users SET `password`=$newPasswordHash WHERE id=$id";
    mysqli_query($connect, $query);
} else {
    echo "no";
echo "<pre>";
    var_dump($user);
    echo "</pre>";
}

Ответы (1 шт):

Автор решения: KordDEM
$pdo = new PDO('mysql:host='.$zsqlserver.';dbname='.$dbname, $user, $pass);
$id = $_SESSION['id'];
$stmt = $pdo->prepare("SELECT * FROM users WHERE id= :id");
$stmt->bindParam(':id', $id);
$stmt->execute();
$user = $stmt->fetch();

$hash = $user['password'];
$oldPassword = $_POST['old_password'];
$newPassword = $_POST['new_password'];

if (password_verify($oldPassword, $hash)) {
    $newPasswordHash = password_hash($newPassword, PASSWORD_DEFAULT);
    
    $stmt = $pdo->prepare("update users SET password = :hash where id = :id"); 
    $stmt->bindParam(':hash', $newPasswordHash);
    $stmt->bindParam(':id', $id);
    $stmt->execute();
        
} else {
    echo "no";
}

У вас какой-то уникальный алгоритм хеширования пароля в методе password_hash? Если нет, то в запросе update можно конкретно указать алгоритм хеширования, например

$stmt = $pdo->prepare("update users SET password = md5(:str) where id = :id");
$stmt->bindParam(':str', $newPassword);
$stmt->bindParam(':id', $id);
$stmt->execute();
→ Ссылка