То, что вы делаете, - это хэширование, а затем сравнение двух хешей. Это неправильный способ сделать это, поскольку хэши никогда не будут точно совпадать (иначе, что хорошего в шифровании?) - Вы делаете:
$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];