【问题标题】:Redirect PHP page AFTER outputting user message输出用户消息后重定向PHP页面
【发布时间】:2013-04-14 10:41:54
【问题描述】:

我正在尝试在成功执行后重定向页面。但是,我想在重定向完成时向用户显示一条消息(例如“已更改。重定向...”)。在页面输出后更改 header 变量会导致 PHP 出现错误,我知道这一点。我的问题是,我该怎么做?

我当前的代码类似于

// ... execution code
echo 'Changes made successfully. Now redirecting...';
header('Location: index.php');

这不起作用。我还看到了关于 SO 的答案,建议我分别在页面的开头和结尾使用 ob_start()ob_flush()。但这也没有解决我的问题,我仍然得到错误。

NB 我只需要使用 PHP,我不需要 JavaScript 进行重定向。

编辑:我最终使用 JavaScript 进行重定向,因为我需要在重定向之前向用户输出一些有用的消息,而单独使用 PHP 并不是最好的解决方案。

【问题讨论】:

  • 我想你可以找到答案here

标签: php redirect header output


【解决方案1】:

首先,您不能在 echo 或任何输出之后使用“header”。 第二,为什么你需要 php 呢?您可以使用 javascript 或最好的,只需将其放入 html 就像它说的here

【讨论】:

  • 这是不正确的。在回显任何内容后,PHP 给出错误并说您无法更改标头信息,因为输出已经发送。我最终使用了 javascript
  • 什么不正确?这就是我所说的,你不能在 echo 或 output 之后使用 header
  • 哦,对不起!我把它读作“可以”而不是“不能”。我的错。好吧,当您有拼写错误时会发生这种情况:P 它应该是不能的 :)
【解决方案2】:

设置标题后回显。

header("refresh:1;url=test.php"); 
echo 'this is a test';
exit;

【讨论】:

  • 这工作正常,除了在 test.php 之后缺少关闭“。无法编辑,因为“编辑必须包含至少 6 个字符”...
【解决方案3】:
header( "refresh:5;url=wherever.php" );

您可以在 5 秒后将页面重定向到 where.php。请看这个问题:Page redirect after certain time PHP

【讨论】:

  • 我喜欢这种方法。但是,您应该提到该行必须在任何输出之前进行。因为它会在重定向前等待 5 秒,所以可以在此行之后输出消息并在该持续时间内仍然显示。
  • 如果你想发送一条消息,你也可以像它被发明的那样将这个刷新头作为一个元标记发送。 “刷新”标头没有任何标准,它恰好适用于某些客户端。另请注意,使用此(META 标记或 HTTP 标头)会破坏浏览器中的后退按钮。查看此处列出的 W3C 的所有备注:en.wikipedia.org/wiki/…
【解决方案4】:

所有三种流行方法重定向的缺点

 header('Location:$url'); 
 echo "<meta http-equiv='refresh' content='3;$url>";
 echo "<body onload='window.location=$url'>";

是您需要决定可能的重定向页面的任何部分显示给用户之前。当决策过程很耗时时,用户会在空白页上呆住。 我将 deferred redirection 与 Javascript OnLoad 事件一起使用,该事件在页面顶部声明,但只有在 HTML 正文中稍后的任何位置回显具有 id='Redirect' 的隐藏对象时,它才会执行实际重定向。

echo "<html><body onload='if (typeof(Redirect)!=undefined) 
setTimeout(function()
    {window.location=document.getElementById(\"Redirect\").value},3000);'>";
echo $HtmlBody; echo $FormToFill;flush();
if (CheckReceivedDataFailed()) echo "Wrong data, please fill the form again";
else echo "<input type='hidden' id='Redirect' value='$url'>
           Thanks, youll be redirected in 3 sec";
echo "</body></html>";

【讨论】:

  • 更好地回显一个链接,即使 js 中断(例如未正确加载)(在移动互联网上经常发生),人们也可以被重定向(或者更确切地说是重定向自己),但我喜欢这个想法。我试试看。
猜你喜欢
  • 1970-01-01
  • 2017-08-27
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
相关资源
最近更新 更多