Member 14148208 Ответов: 1

PHP для извлечения хэш пароля из базы данных


I am creating PHP stmt hash password updating script this script not updating password. every time display Your old password is incorrect message I want check fetch old password from database and new password should be updated I have lot of tried to do that's but not working


Что я уже пробовал:

Here is my code

<?php
include("database/config.php");
if($_SERVER['REQUEST_METHOD'] == "POST"){
$old_password = $_POST['old_password'];
$new_password = $_POST['new_password'];
$con_password = $_POST['con_password'];
$stmt = $con->prepare('SELECT * FROM users WHERE user_id= ?');
$stmt->bind_param('s', $_POST['user_id']);
$stmt->execute();
$stmt->store_result(); 
if ($stmt->num_rows >0){
$hash=$stmt->fetch();
$hash = password_hash($_POST['old_password'], PASSWORD_DEFAULT);
 if(password_verify($_POST['old_password'],  $hash)){
 if ($new_password == $con_password) {
        $stmt = $con->prepare("UPDATE users SET password = ? WHERE user_id = ?");

         echo "Updated Sucessfully";
    } else {
        echo "Your new Password is not match ";
    }
 }
  }else {
    echo "Your old password is incorrect";
 }
}
?>


This is my HTML form

<form name="form1" method="post" action="">
<input name="old_password" type="password" id="old_password" value="" placeholder="Current Password" required>
<input name="new_password" type="password" id="new_password" value="" placeholder="New Password" required>
<input name="con_password" type="password" id="con_password" value="" placeholder="confirm new password" required>
 <input type="submit" name="changePass" value="change password" class="submit2" />
</form>

Richard MacCutchan

Я так не думаю $con->prepare обновляет базу данных; для этого требуется выполнить команду. Вам также не хватает значений, необходимых для того, чтобы обновление действительно что-то делало. И, как и многие другие люди, Вы публикуете сообщение "успех", не проверяя, что ваше обновление действительно удалось.

Richard Deeming

$hash = password_hash($_POST['old_password'], PASSWORD_DEFAULT);
if(password_verify($_POST['old_password'],  $hash)){


функцию password_verify[^] принимает введенный пароль и сохраненный хэш текущего пароля.

Вы передаете введенный пароль и вычисленный хэш введенного пароля.

Вы спрашиваете, соответствует ли "старый пароль", который ввел пользователь, самому себе. Вы НЕ проверка соответствия текущему паролю пользователя.

1 Ответов

Рейтинг:
2

Patrice T

Цитата:
Я создаю хэш в PHP инструкции, пароль обновление скрипта этот скрипт не обновляется пароль.

Когда вы выполняете эту команду SQL ?
$stmt = $con->prepare("UPDATE users SET password = ? WHERE user_id = ?");

Когда вы устанавливаете параметры ?

Пример из вашего кода
// prepare SQL command
$stmt = $con->prepare('SELECT * FROM users WHERE user_id= ?');
// set parameters
$stmt->bind_param('s', $_POST['user_id']);
// execute command
$stmt->execute();


Member 14148208

Я пытался это сделать, но те же результаты показывают, что любой может отредактировать этот код.пожалуйста

Member 14148208

Я изменил его но не работает старый пароль неверное отображение сообщения кто нибудь может мне помочь я очень старался это сделать не могли бы вы отредактировать этот код пожалуйста

Patrice T

Обновите вопрос с помощью вашего нового кода.
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.