Это мой код, я хочу обновить пароль с учетом нового пароля $new_password
, подтвердите это с $new_password2
и проверьте, соответствует ли текущий данный пароль $old_password
,
<?php
if (isset($_POST['submit'])) {
//validations
$required_fields = array("username", "old_password", "password", "password2");
validate_presences($required_fields);
$fields_with_max_lengths = array("username" => 30);
validate_max_lengths($fields_with_max_lengths);
if(empty($errors)) {
//process the form
$id = $admin["id"];
$username = mysql_prep($_POST["username"]);
$new_password = password_encrypt($_POST["password"]);
$old_password = password_encrypt($_POST["old_password"]);
$new_password2 = password_encrypt($_POST["password2"]);
Два пароля, которые вы должны указать, должны быть равны друг другу для смены пароля. Все три пароля хэшируются. $new_password
а также $new_password2
необходимы для подтверждения нового пароля. $old_password
также должны быть обновлены с $new_password
, Он должен быть изменен, если идентификатор равен идентификатору в базе данных и если $old_password
соответствует текущему $old_password
,
if ($new_password == $new_password2) {
//update
$query = "UPDATE admins SET ";
$query .= "username = '{$username}', ";
$query .= "password = '{$new_password}', ";
$query .= "old_password = '{$new_password}', ";
$query .= "password2 = '{$new_password}' ";
$query .= "WHERE id = {$id} ";
$query .= "AND old_password = '{$old_password}' ";
$query .= "LIMIT 1";
$result = mysqli_query($connection, $query);
if ($result && mysqli_affected_rows($connection) == 1) {
//success
$_SESSION["message"] = "Admin updated.";
redirect_to("manage_admins.php");
} else {
//failure
$_SESSION["message"] = "Admin update failed1";
}
} else {
$_SESSION["message"] = "Admin update failed2";
}
} else {
$_SESSION["message"] = "Admin update failed3";
}
} else {
}
?>
Возможно, вы имели в виду password_hash вместо password_encrypt. Тем не менее, это было бы неправильное использование. Заглянуть в password_verify. Основная идея заключается в том, что вы получаете текущий хешированный пароль для этого пользователя из БД, а затем используете password_verify для проверки ввода пользователя по сохраненному хешу.
Других решений пока нет …