php重定向后打印语句

时间:2011-08-02 04:53:55

标签: php forms

我现在正在为一个网站制作几种表格,我希望在与表格相同的页面上提交后自定义通过/失败通知:

$get = $_GET;
$post = $_POST;

ob_start();
header('Location: ' . $_SERVER['PHP_SELF']);
ob_end_flush();

submit_form($get, $post) ? print('passed') : print('failed');

提交表单功能正常,但是打印语句没有显示 - 我不确定我的逻辑中存在什么缺陷,并且非常感谢一些帮助。

3 个答案:

答案 0 :(得分:1)

我不相信标头得到缓冲(http://php.net/manual/en/function.ob-start.php)所以一般在标题('Location:xyz')调用后立即调用浏览器发送到Location指定的页面。有时您需要调用exit();在标题('Location:xyz')之后调用以防止进一步处理,但情况并非总是如此,并且无法依赖。

由于在发送标题之前无法向屏幕输出任何内容,因此您需要使用某种非屏幕日志记录来通知您成功,例如将消息存储在数据库,文本文件或通过电子邮件发送给您自己通知。

答案 1 :(得分:1)

所以,基本上这是一个消息传递的问题。如果您的重定向位于同一站点内,并且您可以访问结束页面的php,那么您应该执行以下操作:

使用$ _SESSION变量存储名为“system-message”的自定义变量或任何您想要调用的变量。 (记住,要使用$ _SESSION,你需要在每个php文件的开头调用“session_start()”。)

表单成功后,请说

$_SESSION['system-message'] = "Form was successfully submitted"; 

然后调用你的标题重定向。

在结束页面中,通过执行以下操作来查找可能的系统消息:

if(isset($_SESSION['system-message'])) { echo "<div class="system-message">".$_SESSION['system-message']."</div>";

然后清空该变量,以便每次进入新页面时都不显示...(您希望它只显示一次......)

unset($_SESSION['system-message']);

答案 2 :(得分:0)

默认情况下,PHP使用HTTP 302状态代码重定向Location标头,该标头没有“正文”。因此,您需要将一些信息传递给脚本,您将使用GET(url),会话,cookie或其他内容输出一些消息。