php怎么能不执行'然后'也不是'否则'如果'的条款?

时间:2015-10-22 14:38:11

标签: php if-statement header

关注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的价值?

1 个答案:

答案 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;