Изменение пароля из 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();