Как сменить пароль используя password_hash?

Я попытался изменить этот php-код на password_hash, когда пользователь вводит свой пароль, если он хочет изменить его, но он никогда не будет совпадать, потому что pssword, хранящийся в моей базе данных, хэшируется во время регистрации, поэтому мне нужен старый pw, который он вводил сопоставить с хешированным паролем на БД, который не работает.

Я знаю, что должен использовать password_verify, но я не знаю, какую часть этого кода я должен вставить?

<?php
include 'session.php';
$db = new mysqli('localhost', 'root', '', 'alumni');
if(isset($_POST['submit'])):
extract($_POST);$user_check=$_SESSION['login_user'];

$old_pwd=$_POST['old_password'];
$pwd=$_POST['password'];
$c_pwd=$_POST['confirm_pwd'];
if($old_pwd!="" && $pwd!="" && $c_pwd!="") :if($pwd == $c_pwd) :
if($pwd!=$old_pwd) :
$sql="SELECT * FROM `alumni` WHERE `username`='$user_check' AND `password` ='$old_pwd'";
$db_check=$db->query($sql);
$count=mysqli_num_rows($db_check);
if($count==1) :
$fetch=$db->query("UPDATE `alumni` SET `password` = '$pwd' WHERE `username`='$user_check'");
$old_pwd=''; $pwd =''; $c_pwd = '';
$msg_sucess = "Password successfully updated!";
else:
$error = "Old password is incorrect. Please try again.";
endif;
else :
$error = "Old password and new password are the same. Please try again.";
endif;
else:
$error = "New password and confirm password do not match.";
endif;
else :
$error = "Please fill all the fields";
endif;
endif;
?>

1

Решение

У меня наконец то получилось! Большое спасибо за помощь, особенно сэру Шону! : D

Я изменил это:

 $sql="SELECT * FROM `alumni` WHERE `username`='$user_check' AND `password` ='$old_pwd'";
$db_check=$db->query($sql);
$count=mysqli_num_rows($db_check);

if($count==1) :
$fetch=$db->query("UPDATE `alumni` SET `password` = '$pwd' WHERE `username`='$user_check'");

к этому:

 $sql=("SELECT * FROM alumni WHERE username='$user_check'");
$db_check=$db->query($sql);
if(password_verify($old_pwd,$db_check->fetch_assoc()['password'])):
$fetch=$db->query("UPDATE `alumni` SET `password` = '$new_pw' WHERE username`='$user_check'");

И да, я добавил новую переменную $ new_pw

$new_pw = password_hash($c_pwd, PASSWORD_DEFAULT);

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

1

Другие решения

Попробуй это

<?php
include 'session.php';
session_start();
$db = new mysqli('localhost', 'root', '', 'alumni');
if(isset($_POST['submit'])):
extract($_POST);$user_check=$_SESSION['login_user'];

$old_pwd=$_POST['old_password'];
$pwd=$_POST['password'];
$c_pwd=$_POST['confirm_pwd'];
if($old_pwd!="" && $pwd!="" && $c_pwd!="") :if($pwd == $c_pwd) :
if($pwd!=$old_pwd) :
$sql="SELECT * FROM `alumni` WHERE `username`='$user_check' AND `password` =PASSWORD($old_pwd)";
$db_check=$db->query($sql);
$count=mysqli_num_rows($db_check);
if($count==1) :
$fetch=$db->query("UPDATE `alumni` SET `password` = PASSWORD($pwd) WHERE `username`='$user_check'");
$old_pwd=''; $pwd =''; $c_pwd = '';
$msg_sucess = "Password successfully updated!";
else:
$error = "Old password is incorrect. Please try again.";
endif;
else :
$error = "Old password and new password are the same. Please try again.";
endif;
else:
$error = "New password and confirm password do not match.";
endif;
else :
$error = "Please fill all the fields";
endif;
endif;
?>
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector