繁体   English   中英

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

[英]How to redirect to another page in php after form is complete?

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

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

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

如果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任何内容,您将继续收到该错误。

您无法修改标头信息消息,因为您尝试在将内容呈现到页面后将新标头发送到浏览器。 如果在任何echo / print调用之前执行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标记,因为它们会强制发送标题和内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM