我已经在我的一个页面上的下拉框中添加了一些服务器端验证,当我这样做时,该页面将不再起作用。我添加的代码如下:
$show_form = true;
if (isset($_POST['submit'])) {
//All of the server side validations
$validator = new FormValidator();
$validator->addValidation("hospital_name","dontselect=000","No facility was chosen");
if ($validator->ValidateForm()) {
// All the variables from the submission form
$userid = $_SESSION['user_id'];
$hosp = $_POST['hospital_name'];
header('Location: ../site_hospital' . $hosp . '/hospital_submitform.php?usr=' . $userid . '&&hosp=' . $hosp);
exit;
$show_form = false;
} else {
echo "<B style='color:red;'>The following errors occurred:</B>";
$error_hash = $validator->GetErrors();
foreach ($error_hash as $inpname => $inp_err) {
echo "<p style='color:red;'>$inp_err</p>\n";
}
}}
if (true == $show_form) {
通过纯粹的机会,我添加了ob_start();作为我调试到页面开头的一部分,突然我的代码工作正常,但我不知道为什么,我希望社区可以抛出一个有根据的猜测为什么。当代码停止工作时,它不会执行上面的header命令,当我添加ob_start()时,页面只会刷新而不会改变位置。在页面顶部,页面按计划重定向。所以总的问题是为什么没有ob_start页面不能直接使用header命令?我确信更多的细节和代码对于确定的答案是必要的,但我希望有人之前遇到过这个或者有一个有根据的猜测,这可能会让我得到我自己的答案。感谢您的任何见解。
答案 0 :(得分:2)
这是因为您正在写入输出流并阻止标头正常工作。一旦你开始缓冲其他输出,就删除了标题操作的障碍。