是的,我知道PHP MySQL更新语句有答案,但是他们都还没有解决这个问题。我的重置PHP文件使用bind_param或连接变量准备好查询。它在重定向到reset_success页面时也可以正常执行。但是,数据库记录没有变化。我已确认该网站使用的用户具有更新权限。我甚至试过转义password
,因为它是一个保留字的小写版本,没有任何效果。 apache2错误日志也没有显示错误,所以没有帮助。
代码如下:
if (empty($error_msg)) {
// Create a random salt
$random_salt = hash('sha512', uniqid(openssl_random_pseudo_bytes(16), TRUE));
// Create salted password
$password = hash('sha512', $password . $random_salt);
// Prepare the update statement
//if ($update_stmt = $mysqli->prepare("UPDATE members SET password = ?, salt = ? WHERE email = ?")) {
if ($update_stmt = $mysqli->prepare("UPDATE members SET password = '".$password."', salt = '".$random_salt."' WHERE email = '".$_SESSION['email']."';")) {
// Binding params
//$update_stmt->bind_param('sss', $password, $random_salt, $_SESSION['email']);
// Execute the update statement
if ($update_stmt->execute()) {
header('Location: reset_success.php');
exit();
}
else{
header('Location: error.php?err=Reset failure: UPDATE');
exit();
}
}
else{
header('Location: error.php?err=Reset failure: PREPARE');
exit();
}
}
非常感谢任何见解!
答案 0 :(得分:0)
好的,它正在发挥作用。我需要在函数文件中另外调用session_start(),即使reset_password.php没有重定向($ _SERVER [' PHP_SELF'])。注册页面及其相应的功能文件以相同的方式运行时不需要这样做。我仍然不清楚为什么在推荐人本身并且没有重定向时再次需要这样做。
答案 1 :(得分:0)
这应该是评论,但有点长。
$ random_salt = hash('sha512',uniqid(openssl_random_pseudo_bytes(16),TRUE));
这非常错误。您正在将盐填充为16到64位和通过散列来删除熵。如果你想要64个随机字节,那么只需使用openssl_random_pseudo_bytes(64)。
apache2错误日志也显示没有错误
您是否检查过PHP错误记录是否有效?
为什么不检查mysql日志?
if($ update_stmt-> execute()){
尝试检查$ update_stmt-> affected_rows()