【发布时间】:2012-11-03 18:46:56
【问题描述】:
以下是单击表单的更改密码按钮时运行的脚本。该表单包含 2 个密码字段,一个用于新密码,一个用于确认新密码。下面是表单的动作脚本:
<?php
session_start();
include("func.php");
$NewPassword = mysql_real_escape_string(md5($_POST['newpassword']));
$Confirm = mysql_real_escape_string(md5($_POST['confirmnewpassword']));
$userid = $_SESSION['username'];
if (!isset($NewPassword) || !isset($Confirm)) {
header("Location: ../error.php");
die("Error");
}else if ($NewPassword <> $Confirm) {
header("Location: ../error.php");
die("Error");
}else{
dbConnect();
mysql_query("UPDATE users SET password='$Confirm' WHERE username='$userid'");
mysql_close($connect);
header("Location: ../profile.php");
die("Success");
}
?>
即使表单上的 2 个密码字段为空或不匹配,密码仍会在数据库中更新。这可能是什么原因?
感谢您提供的任何帮助。
【问题讨论】:
-
isset()将允许空密码通过,不仅因为它认为要设置空值,还因为md5()将始终生成非空哈希。此外,由于您在输入中使用md5(),因此无需转义它。 -
第二种情况更有趣,因为如果密码确实不同,它应该不符合这个条件
($NewPassword <> $Confirm)。我建议删除重定向并执行var_dump($_POST)并查看确切的内容。 -
调试的第一步是var_dump...谢谢@NullUserException
标签: php mysql if-statement logic