在下面的代码中,“header:”行给出了问题。
$q = mysql_query($a) or die(mysql_error());
$row = mysql_fetch_array($q);
$ValidationResponse = "false";
if ($_COOKIE['user_name'] != "")
{
while ($row) {
if ($_COOKIE['user_name'] = $row['username'])
{
$ValidationResponse = "true";
break;
}
}
if ($ValidationResponse == "true")
{
ob_start();
header("location:personal_view.php");
ob_clean();
}
else
echo "<script>alert('Invalid Login. Try Again.');</script>";
}
$_COOKIE['user_name'] = "";
答案 0 :(得分:2)
我倾向于拥有三个有用的功能:
function redirect($url) {
while (ob_end_clean()) ; // do nothing
header("Location: " + $url);
exit;
}
function reload() {
redirect($_SERVER['REQUEST_URI']);
}
function reloadQS() {
redirect($_SERVER['REQUEST_URI'] + '?' + $_SERVER['QUERY_STRING']);
}
上面正确处理了可能已嵌套的输出缓冲区,但如果内容已经发送给用户,则无法执行任何操作。我建议使用上面的内容,否则你会用循环来清理你的代码以清理缓冲区,并且没有任何意义。
您正在错误地使用输出缓冲,这就是它失败的原因。变化:
ob_start();
header("location:personal_view.php");
ob_clean();
为:
ob_end_clean();
header("Location: personal_view.php");
exit;
答案 1 :(得分:0)
您应该将ob_start放在脚本的最开头 此外,我不确定这一点,但我总是看到以这种方式写的位置标题
header("Location: location.php");
大写字母L的位置“冒号”之后的空格
答案 2 :(得分:0)
这可能听起来很愚蠢,但您确定在header()
函数调用之前没有输出任何内容吗?即使在脚本中的起始标记<?php
之前找到换行符,Apache也不会重定向。