php重定向后打印语句

php重定向后打印语句,php,forms,Php,Forms,我现在正在为一个网站制作多个表单,我希望在提交表单后在同一页面上有一个自定义的通过/失败通知: $get = $_GET; $post = $_POST; ob_start(); header('Location: ' . $_SERVER['PHP_SELF']); ob_end_flush(); submit_form($get, $post) ? print('passed') : print('failed'); submit form函数工作正常,但打印语句没有显示出来-我不确定

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

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

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

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

submit form函数工作正常,但打印语句没有显示出来-我不确定我的逻辑中有什么缺陷,非常感谢您的帮助。

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


因为在发送邮件头之前,您无法将任何内容输出到屏幕,所以您需要使用某种非屏幕日志记录来通知您是否成功,例如将邮件存储在数据库、文本文件或通过电子邮件发送通知。

因此,基本上这是一个邮件问题。如果重定向位于同一站点内,并且您可以访问结束页面的php,则应执行以下操作:

使用$\u会话变量存储名为“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>";

默认情况下,PHP使用HTTP 302状态代码通过
Location
头重定向,该头没有“body”。因此,您需要将一些信息传递给脚本,在脚本中您将使用GET(url)、session、cookie或其他方式输出一些消息。

我假设
标题(…'?form=login&success=yes')
也可以工作?我希望有一个更简单的方法,但我想没有-谢谢。是的,这将是另一个解决方案。如果使用输出缓冲,只有在刷新缓冲区或输出缓冲输出之外的内容时才会发送头。
unset($_SESSION['system-message']);