php проверка текущего пароля и обновление хеш-пароля - PullRequest
0 голосов
/ 07 февраля 2019

Я создаю скрипт обновления хеш-пароля пользователя PHP, этот скрипт не работает и не отображает никаких сообщений об ошибках. Отображение за все время Ваш старый пароль - неверное сообщение. Я только пытался это сделать, но он не работает. Я хочу создать проверку старого пароля пользователя.и обновить новый пароль

Вот мой код

<?php
include "database/config.php";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
    $old_password = password_hash($_POST['old_password'], PASSWORD_DEFAULT);
    $new_password = password_hash($_POST['new_password'], PASSWORD_DEFAULT);
    $con_password = password_hash($_POST['con_password'], PASSWORD_DEFAULT);

    $stmt = $con->prepare('SELECT * FROM users WHERE user_id= ?');
    $stmt->bind_param('i', $_POST['user_id']);
    $stmt->execute();
    if ($stmt == $old_password) {
        if ($new_password == $con_password) {
            $stmt = $con->prepare = "UPDATE users SET password = ? WHERE user_id = ?";
            echo "Update Sucessfully";
        } else {
            echo "Your new Password is not match ";
        }
    } else {
        echo "Your old password is incorrect";
    }
}

Вот моя HTML-форма

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

1 Ответ

0 голосов
/ 07 февраля 2019

То, что вы делаете, - это хэширование, а затем сравнение двух хешей. Это неправильный способ сделать это, поскольку хэши никогда не будут точно совпадать (иначе, что хорошего в шифровании?) - Вы делаете:

$old_password = password_hash($_POST['old_password'], PASSWORD_DEFAULT);

Когда вы просто должны делать:

$old_password = $_POST['old_password'];

Тогда это простая проверка:

if (password_verify($old_password, $stmt)) { {
    if ($new_password == $con_password) {
        $stmt = $con->prepare = "UPDATE users SET password = ? WHERE user_id = ?";
        echo "Update Sucessfully";
    } else {
        echo "Your new Password is not match ";
    }
 } else {
    echo "Your old password is incorrect";
 }



ТАКЖЕ

Как уже упоминал Джей. Вам нужно что-то выбрать. В этот момент вы возвращаете объект с помощью:

$stmt = $con->prepare('SELECT * FROM users WHERE user_id= ?');

Объект не подходит для этого сравнения.Тебе нужна строка.Если вы ожидаете 1 результат, вы можете добавить fetch_array()[0] в конец этого запроса.fetch_array преобразует ваш Object в одномерный массив.[0] - это просто массив index , который вы хотите присвоить $stmt следующим образом:

$stmt = $con->prepare('SELECT * FROM users WHERE user_id= ?');
$stmt->bind_param('i', $_POST['user_id']);
$stmt->execute();
$stmt = $stmt->fetch_array()[0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...