PHP 更改密码脚本总是从数据库中检测到错误的密码
PHP Change password script always detect wrong password from database
所以我有一个带有 phpmyadmin 的数据库,那里有密码列。我想制作一个可以更改密码的脚本,如果当前密码与数据库中的密码相同,则更改成功。但如果当前密码与数据库中的密码不匹配,则更改密码失败。
当我尝试时,我总是出错 password/failed 即使当前密码与数据库中的密码相同。我使用 Postman
检查它
这是邮递员的输出postman
这是我的数据库
database
这是我的 PHP 脚本
<?php
if ($_SERVER['REQUEST_METHOD']=='POST'){
$id = $_POST['id'];
$currentpassword = $_POST['currentpassword'];
$newpassword = $_POST['newpassword'];
require_once 'connect.php';
$sql = "SELECT * FROM user_account WHERE id='$id' ";
$response = mysqli_query($conn, $sql);
//echo mysqli_num_rows($response);
if(mysqli_num_rows($response) > 0){
$row = mysqli_fetch_assoc($response);
if (password_verify($currentpassword, $row['password']) ){
$updatepass = "UPDATE user_account SET password='$newpassword' WHERE id='$id' ";
if(mysqli_query($conn, $updatepass)) {
$result["success"] = "1";
$result["message"] = "success";
echo json_encode($result);
mysqli_close($conn);
}
else{
$result["success"] = "0";
$result["message"] = "error!";
echo json_encode($result);
mysqli_close($conn);
}
}else{
$result['success'] = "0";
$result['message'] = "Wrong password.";
echo json_encode($result);
mysqli_close($conn);
}
}
}
?>
来自manual
password_verify — Verifies that a password matches a hash
然后您将密码存储为原始密码。您需要将密码存储在数据库中作为 散列 密码 password_hash() function 因此 password_verify
函数 returns 为真。
//for example replace this
$query = "insert into user_account(name, email, password) values ('testing','testing@gmail.com','1234567')";
//with this
$query = "insert into user_account(name, email, password) values ('testing','testing@gmail.com','" . password_hash('1234567') . "')";
所以我有一个带有 phpmyadmin 的数据库,那里有密码列。我想制作一个可以更改密码的脚本,如果当前密码与数据库中的密码相同,则更改成功。但如果当前密码与数据库中的密码不匹配,则更改密码失败。
当我尝试时,我总是出错 password/failed 即使当前密码与数据库中的密码相同。我使用 Postman
检查它这是邮递员的输出postman
这是我的数据库 database
这是我的 PHP 脚本
<?php
if ($_SERVER['REQUEST_METHOD']=='POST'){
$id = $_POST['id'];
$currentpassword = $_POST['currentpassword'];
$newpassword = $_POST['newpassword'];
require_once 'connect.php';
$sql = "SELECT * FROM user_account WHERE id='$id' ";
$response = mysqli_query($conn, $sql);
//echo mysqli_num_rows($response);
if(mysqli_num_rows($response) > 0){
$row = mysqli_fetch_assoc($response);
if (password_verify($currentpassword, $row['password']) ){
$updatepass = "UPDATE user_account SET password='$newpassword' WHERE id='$id' ";
if(mysqli_query($conn, $updatepass)) {
$result["success"] = "1";
$result["message"] = "success";
echo json_encode($result);
mysqli_close($conn);
}
else{
$result["success"] = "0";
$result["message"] = "error!";
echo json_encode($result);
mysqli_close($conn);
}
}else{
$result['success'] = "0";
$result['message'] = "Wrong password.";
echo json_encode($result);
mysqli_close($conn);
}
}
}
?>
来自manual
password_verify — Verifies that a password matches a hash
然后您将密码存储为原始密码。您需要将密码存储在数据库中作为 散列 密码 password_hash() function 因此 password_verify
函数 returns 为真。
//for example replace this
$query = "insert into user_account(name, email, password) values ('testing','testing@gmail.com','1234567')";
//with this
$query = "insert into user_account(name, email, password) values ('testing','testing@gmail.com','" . password_hash('1234567') . "')";