我在尝试更改应用程序中的密码时遇到问题。它一直显示当前密码无效。我的PHP编码可能有问题。但我无法找到问题所在。这是我的PHP代码。
<?php
require ("config1.php");
if (!empty($_POST)) {
$lecID = $_GET['lecID'];
$query = "UPDATE lecturer SET lecPass= :lec_Pass WHERE lecID = '$lecID' ";
$query_params = array(':lec_Pass'=> $_POST['lecPass']);
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
$response["success"] = 0;
$response["message"] = "Database Error1. Please try again";
die(json_encode($response));
}
$validate_info = false;
// Fetching rows from query
$row = $stmt->fetch();
if ($row) {
if ($_POST['lecPass'] === $row['lecPass']) {
$changePass_ok = true;
}
}
if ($changePass_ok) {
// UserLogin
$response['success'] = 1;
$response['message'] = "Password changed successfully";
die(json_encode($response));
}
else {
$response["success"] = 0;
$response["message"] = "Failure";
die(json_encode($response));
}
}
?>
感谢有人可以指导我。感谢。
答案 0 :(得分:1)
$row = $stmt->fetch();
if ($row){
if($_POST['lecPass'] === $row['lecPass']){
$changePass_ok=true;
}
}
这不会起作用。在UPDATE语句上执行fetch()
永远不会返回任何内容,因为UPDATE语句不会返回行。没有什么可比较的。
您有两种选择:
1)只需检查UPDATE语句是否成功。这应该足以证明密码已成功更新,而无需再次选择该行。
2)更长的方式,更类似于您现在尝试的是,在UPDATE之后,您运行单独的SELECT语句以再次从数据库中获取相同的行,并将返回的值与$进行比较_POST值。
N.B。正如其他人在评论中指出的那样,以纯文本形式存储密码并通过未加密的HTTP传输密码是非常不安全的,并且要求麻烦。您应该切换到HTTPS并使用单向哈希将密码存储在数据库中,这样任何有权访问数据库的人都无法立即窃取密码。然后,当用户登录时,您使用相同的算法对它们提供的密码值进行哈希处理,并将 与DB中的值进行比较,以验证登录。