此代码的第一部分工作正常,我似乎无法在else
为if ($row[password] == $password_hash)
时使false
语句正常工作。我确定我在某个地方只有一个小错误,但似乎无法找到它。
list ($sessionname) = checkuser();
if (isset($_POST['save'])){
connect();
$currentpass = sha1($_POST['password']);
$newpass = sha1($_POST['password1']);
$sql = "SELECT password FROM members WHERE username = '$sessionname'";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if ($row['password'] == $currentpass)
$query = mysql_query("UPDATE members SET password = '$newpass' WHERE username = '$_SESSION[username]'");
$updated = "Your password has been updated";
print_r($row);
}else{
$a = "Passwords do not match";
return $b;
}
}
答案 0 :(得分:2)
确保 MySQL 返回结果集,方法是使用print_r($row);
调试代码。
if ($row['password'] == $password_hash){
提示:您应该在字符串键周围使用引号。如果省略引号,PHP认为它是常量。
答案 1 :(得分:2)
在if
语句后,您缺少一个大括号。
if ($row['password'] == $currentpass) {
$query = mysql_query("UPDATE members SET password = '$newpass' WHERE username = '$_SESSION[username]'");
$updated = "Your password has been updated";
print_r($row);
}else{
$a = "Passwords do not match";
return $b;
}
注意{after if ($row['password'] == $currentpass)
没有大括号(并且没有错误报告),它正在跳过查询并显示字符串“您的密码已更新”。这就是为什么密码不会在数据库中发生变化以及为什么其他任何东西都无法正常工作的原因。
顺便说一下:
ini_set('display_errors',1);
error_reporting(E_ALL);
将启用错误报告
答案 2 :(得分:1)
你的问题不是很清楚。运行代码会发生什么?您是否尝试检查$password_hash
和$row[password]
之前的条件是什么?
我很确定问题不在于缺少的引号,我只是测试了它并且工作正常,但它们应该在那里。