您的代码中没有任何内容可以防止空字符串被散列和上传。您正在检查哈希,而不是原始字符串。这可以解释为什么空值仍然得到更新。
但是,如果值不匹配,它们的哈希值应该不同。这将向我表明这可能是您的变量$_POST['newpassword']
并且$_POST['confirmnewpassword']
不准确。正如其他人所建议的那样,代码开头的var_dump甚至print_r($_POST)语句将帮助您诊断这一点。
甚至不涉及诸如 PDO 与 mysql 之类的大问题或以不同的方式构建代码,这就是我要做的:
session_start();
include("func.php");
print_r ($_POST); // you'll want to delete this later
$new_password = $_POST['newpassword']; // not technically necessary, my preferred style
$confirm_password = $_POST['confirmnewpassword']; // also not technically necessary
$userid = $_SESSION['username'];
/* Test the actual submitted password and confirmation to ensure they are set */
if (empty ($new_password) || empty ($confirm_password)) {
/* header("Location: ../error.php"); */ // comment this out for now
die ("Error: Password or Password Confirmation not set");
}
/* Test the actual submitted password and confirmation to ensure they match */
elseif ($new_password != $confirm_password) {
/* header("Location: ../error.php"); */ // comment this out for now
die("Error: Password and Password Confirmation do not match");
}
else {
/* NOW that you have established the password and confirmation are both
* set AND match, you get the hash value */
$password_hash = mysql_real_escape_string(md5($new_password));
dbConnect();
mysql_query("UPDATE users SET password='$Confirm' WHERE username='$userid'");
mysql_close($connect);
/* header("Location: ../profile.php"); */ // comment this out for now
die("Success: Updated");
}
这应该允许您调试脚本并查看发生了什么问题。我的猜测是数据要么作为 GET 传递,要么变量名不正确。
下一步:
- 工作后,删除 var_dump 并取消注释您的重定向。
- 考虑重新编写 if 语句,以更明确地测试密码是否正确,如其他答案之一所述。
- 说真的,看看PDO或mysqli。程序 mysql_* 正在被贬低。
- 如果您不想走完整的 OOP 路线,请考虑制作 update_password () 和 send_error () 之类的函数。这将使您的代码更具可读性和可重用性。
但是一步一步,让我们调试这些当前的东西!