[PHP]:页面为什么不重定向?
在下面的代码中,“header:”行给出了问题[PHP]:页面为什么不重定向?,php,Php,在下面的代码中,“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['use
$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'] = "";
$q=mysql\u query($a)或die(mysql\u error());
$row=mysql\u fetch\u数组($q);
$ValidationResponse=“false”;
如果($\u COOKIE['user\u name']!=“”)
{
while($row){
如果($\u COOKIE['user\u name']=$row['username'])
{
$ValidationResponse=“true”;
打破
}
}
如果($ValidationResponse==“true”)
{
ob_start();
标题(“位置:personal_view.php”);
ob_clean();
}
其他的
回显“警报('登录无效。请重试');”;
}
$\u COOKIE['user\u name']=“”;
您应该将ob_start放在脚本的最开头
另外,我不确定这一点,但我总是看到位置头是这样写的
header("Location: location.php");
在冒号后加上大写字母L和空格的位置:“我通常有三个有用的功能:
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();
致:
这听起来可能很愚蠢,但您确定在调用
header()
函数之前没有输出任何内容吗?Apache不会重定向,即使它在开始标记
ob_end_clean();
header("Location: personal_view.php");
exit;