php如何既不能执行也不能执行';然后';诺尔';其他';第'条;如果';?

php如何既不能执行也不能执行';然后';诺尔';其他';第'条;如果';?,php,if-statement,header,Php,If Statement,Header,下面(我改编为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_sa

下面(我改编为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);
}
发送的头是第三个头(?msg=2…)。如果我将其注释掉,则不会发送标题。它怎么可能不进入then子句,也不进入else子句?数据没有存储在数据库中,但我得到了一个“success”响应。我如何才能确定
$res
的值?

只有在将任何其他输出发送到浏览器之前发送
头()
才有效。我猜您已经向浏览器发送了一些内容,可能是调试消息或其他内容

如果发生这种情况,您应该在
php错误日志中看到一条自我解释错误消息

此外,您应该始终执行
退出header()
语句之后执行code>,因为
header()
实际上不会停止脚本其余部分的执行

i、 e


尝试对标题使用
if/elseif/else
,然后添加
exit在每个标题之后。检查errorstry是否可以在
$error\u msg
$error\u msg
上执行变量转储。不做var_dump($res),但可能是手册中的一个缺陷。PHP中有很多函数可以返回FALSE或“一个可以计算为FALSE的值”。但并不是所有这些都被描述成它应该描述的那样。尝试
var\u dump($res)
并查看它是否返回bool false。如果是这样的话,那么我所说的一切都是正确的。无论如何,它不会给出您的问题的答案,因为它的计算结果无论如何都应该为FALSE,并落在
else
子句中。语言几乎从来没有错。。。通常是程序员。如果发现bug,请向PHP团队报告:),因为
标题会重定向到另一个页面,除非您将消息添加到
get params
或将其放入
$\u会话
中,然后在重定向的表单中从那里拾取,否则无法在运行
标题或重定向到的表单上查看和回显输出。我只包含第三个标题,因为它没有进入前两个标题(我觉得这听起来很荒谬!)。请阅读我对这个问题的最后评论。当然,DUH。
==
比较类型和值。
false
是布尔值,
$res
是type=resource,值为零。类型不匹配。我一直想知道为什么我在这些测试中只使用
=
,现在我知道你是否按照建议添加了
退出;
。其他的吗rwise它将重定向到第二个,然后继续执行,然后再重定向到第三个。好的,我想当时就是这样。我现在不能重复错误,因为我已经解决了数据库错误(缺少序列权限),不想再次解决它。谢谢!
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;