我正在用PHP编写脚本以允许用户更改其密码。我让他们输入他们的旧密码(即使他们已经登录)然后输入新密码。我正在尝试比较旧密码,然后将字段更新为新密码,而不运行两个单独的查询,但我的代码不能像我预期的那样工作。这里有错误吗?或者由于某种原因这是不允许的?你有什么建议?
mysql_query("UPDATE users SET userpass = '$encryptedPW' WHERE userid = '$uid' AND userpass = '$currentPW'");
我可以看看mySQL是否按照它们编写的顺序执行了任务,但它必须找到该行才能更新,对吧?
非常感谢!
比利
ETA:对不起!错字!
答案 0 :(得分:2)
实际生成的查询是什么样的?您是否检查了查询查询是否成功?
$result = mysql_query("UPDATE ....") or die(mysql_error());
if (mysql_affected_rows() != 1) {
die("Failed to change password");
}
or die()
部分将处理任何sql语法错误,而affected_rows将检查某些内容是否已更新。如果受影响的行数不是1(假设您不允许重复的用户名/密码对),那么某些内容无法正常工作。 0 =没有受影响的行,没有进行任何更改。 > 1 =您有重复的用户/密码对。
还要确保你是苹果的苹果。如果您以加密/散列形式存储密码,那么您必须比较散列/加密密码才能使结果有意义。
... WHERE password='letmein'
如果密码实际存储为加密二进制垃圾,将失败。
答案 1 :(得分:0)
,我看到您使用加密密码。检查您是否加密了两个密码。 此外,您的查询中包含userpass和user_pass。这是两个“不同”的列。
答案 2 :(得分:0)
您在这里有正确的想法,但我建议使用mysql_query()
未经过滤的输入(出于安全考虑)。我宁愿看到你使用准备好的陈述。
但是,从您的上述查询中,您似乎有两个不同的列user_pass
和userpass
。这可能是你现在困境的根源。