这段代码的第一部分工作得很好,当if ($row[password] == $password_hash)
是false
时,我似乎无法让else
语句工作。我确信我只是在某个地方出了个小错误,但就是找不到。
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;
}
}
在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;
}
注意if ($row['password'] == $currentpass)
如果没有大括号(并且没有错误报告),它将跳过查询并显示字符串"您的密码已被更新"。这就是为什么密码不能在数据库中更改,以及为什么其他方法似乎都不起作用的原因。
By the way:
ini_set('display_errors',1);
error_reporting(E_ALL);
将打开错误报告
确保 MySQL是返回一个结果集,通过使用print_r($row);
调试代码。
if ($row['password'] == $password_hash){
提示:您应该在字符串键周围使用引号。如果省略引号,PHP会认为它是常量。
阅读:"为什么$foo[bar]
是错的"。
你的问题不太清楚。运行代码时会发生什么?您是否尝试检查$password_hash
和$row[password]
在条件之前是什么?
我很确定问题不在于缺少引号,我刚刚测试了它,它工作得很好,但它们应该在那里。