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

问题描述:

我在我正在建设的网站上有注册表单。如果填写正确,我希望用户回到主页面。如何在表单完成后在php中重定向到另一页?

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

有关如何在表单正常时重定向用户的建议? (除了带按钮的成功页面)

+0

如果你在屏幕上打印任何东西 - 任何东西 - 你都不能使用`header`。必须在任何输出之前调用`header`,如果你向我们展示你的代码,也许我们可以弄清楚什么是错误的;即使你在第一个` 2011-01-26 00:17:38

如果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响应的主体。如果您的脚本在标题命令之前有任何内容,您将继续收到该错误。

+0

我知道。我以为我有另一个问题。现在我发现了一个require_once“file.php”;命令是问题 - 任何想法为什么? – AYBABTU 2011-01-26 13:04:27

由于您尝试在内容已呈现到页面后向浏览器发送新标题,因此您无法修改标题信息消息。如果在任何回显/打印调用之前执行header()调用,它将重定向。否则,你需要一个元重定向。您发布表单的位置无关紧要。

这不起作用的原因是标头先于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标记,因为它们会强制标题和内容发送。