表单完成后如何在php中重定向到另一个页面?

时间:2011-01-26 00:14:15

标签: php webforms redirect

我在我正在建设的网站上有一份注册表。如果填写正确,我希望用户返回主页面。

我尝试使用header,但我得到“无法修改标题信息......”我想这是因为我发布到$_SERVER['PHP_SELF'];

如果表单正常,如何重定向用户的任何建议? (除了带按钮的成功页面)

3 个答案:

答案 0 :(得分:8)

如果Web服务器没有向用户浏览器输出其他文本/字符串数据,则只能使用header()函数。

您需要先将重定向的逻辑放在脚本顶部,然后再进行其他操作:

<?php

// Process form

// If processing was successful, redirect
if($success) 
{
    header("Location: http://www.main-page-url.com/");
}

?>

这样做的原因是,当浏览器从Web服务器接收信息时,它会收到HTTP标头(header()函数将重定向输出到),然后在HTTP之后输出HTTP响应的主体头。如果您的脚本在header命令之前echo任何内容,您将继续收到该错误。

答案 1 :(得分:1)

您无法修改标头信息消息,因为您尝试在将内容呈现到页面后将新标头发送到浏览器。如果在任何echo / print调用之前执行header()调用,它将重定向。否则,您需要元重定向。你发布表格的地方是无关紧要的。

答案 2 :(得分:1)

这不起作用的原因是标头位于HTTP请求中的内容之前。当您输出内容时,PHP会先发送所有标题及其处理过的所有内容,从而领先于游戏。发送HTTP请求没有CTRL + Z,因此header()函数在发送后无法添加标题。

但是,如果您使用ob缓冲函数系列,则可以在回显内容后调用header()。调用ob_start()缓冲页面输出,进行任何必要的标题调用或内容输出,最后使用ob_end_flush()发送输出。实施例

<?php
ob_start(); //Start buffering
?>
<p>This is output!!!</p>
<?php
header('403 Moved Permanently'); //Fancy redirect is fancy
ob_end_flush(); //Send page content with redirect header
?>

使用缓冲的唯一可能的缺点是,在调用ob_end_flush()命令之前,用户在接收内容时会遇到轻微的挂起。但是,这很可能不会引起注意,所以你不应该担心它!

在完成所有这些操作之前,您可以考虑在代码中输出内容之前将所有标题调用移动到某个位置。还要检查前面空格的开始PHP标记,因为它们会强制发送标题和内容。