关注this tutorial(我改编为PostgreSQL),我在register.inc.php
中遇到了问题:
if (empty($error_msg)) {
// Create a random salt
$random_salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true));
// Create salted password
$pwd = hash('sha512', $pwd.$random_salt);
// Insert the new user into the database
$q = "insert into usr (username,email,pwd,salt) values ($1,$2,$3,$4);";
$res = pg_query_params($conn,$q,[$username,$email,$pwd,$random_salt]);
if ($res === false) {
header("Location: ../html/coisas/error.php?err=Registration failure: INSERT");
} else {
header('Location: ./register_success.php?msg=1'.$random_salt);
}
header('Location: ./register_success.php?msg=2'.$random_salt);
}
发送的标头是第3个(?msg = 2 ...)。如果我发表评论,则没有发送标题。它怎么可能不会进入then子句,也不会进入else子句?数据没有存储在数据库中,但是我得到了一个成功的数据"响应。我怎么能确切知道$res
的价值?
答案 0 :(得分:1)
header()
只有在将任何其他输出发送到浏览器之前发送时才有效。我猜你已经向浏览器发送了一些东西,可能是一条调试消息或其他东西。
如果发生这种情况,您应该会在php error log
此外,您应该在exit;
语句之后始终执行header()
,因为header()
实际上并未停止执行其余脚本。
即
if ($res === false) {
header("Location: ../html/coisas/error.php?err=Registration failure: INSERT");
exit;
} else {
header('Location: ./register_success.php?msg=1'.$random_salt);
exit;
}
header('Location: ./register_success.php?msg=2'.$random_salt);
exit;