20

我有一个简单的问题,但我不知道。我想在重定向到其他页面之前先显示消息,但是我的代码只是直接重定向页面而不显示消息,或者显示时间太短我不确定..我的代码如下..请指教。非常感谢。

echo "Please Log In First";
header("location: login6.php");
4

7 回答 7

37

你不能那样做。PHP header 必须在任何内容之前发出,所以正确的顺序是:

header("location: login6.php");
echo "Please Log In First";

但这些代码会立即重定向,不会让您看到内容。所以我会通过 JavaScript 进行重定向:

echo "Please Log In First";
echo "<script>setTimeout(\"location.href = 'http://www.example.com';\",1500);</script>";
于 2013-08-19T01:29:38.360 回答
27

您可以使用标题刷新。它将在重定向之前等待指定的时间。然后您可以显示您的消息。

header( "refresh:5; url=login.php" ); //wait for 5 seconds before redirecting
于 2013-08-19T01:24:59.760 回答
9

重定向是重定向 ;-)

如果您通过使用Location:标题告诉浏览器重定向到另一个页面,浏览器会这样做:它重定向到另一个页面。浏览器会立即执行此操作-没有任何延迟。

因此,您echo根本不会显示。

首先设置标题

此外,您需要在每个其他输出操作之前设置标题(如Fred -ii-所指出的):

// First, echo headers
header("location: login6.php");

// Then send any other HTML-output
echo "Please Log In First";

最好不要使用自动重定向

很可能,您不会显示一条消息,然后 - 在一定时间后 - 自动重定向到另一个页面。人们可能会对这个过程感到困惑。最好这样做:

显示登录页面在此页面上显示用户提示或错误消息。

一般解决方案

在用户会话中准备一个组件,其中包含要在下一个脚本实例中显示的信息。该组件可能是这样的消息列表:

$_SERVER[ 'sys$flashMessagesForLater' ] = array(
  "Sorry, userID and password didn't match.",
  "Please login again."
);

每次有脚本请求进来时,检查是否$_SERVER[ 'sys$flashMessagesForLater' ]是一个非空数组。

如果是这种情况,请将这些值发送到生成的 HTML 页面上定义明确的位置。一个明确定义的位置总是在同一个位置,在每一页的顶部。您可能希望在错误消息周围添加一个阅读框。

您可能需要准备这样的课程:

class CFlashMessageManager {

  static public function addFlashMessageForLater( $message ) {

    $_SERVER[ 'sys$flashMessagesForLater' ][] = $message;

  }

  static public function flashMessagesForLaterAvailable() {

    return isset( $_SERVER[ 'sys$flashMessagesForLater' ] )
        && is_array( $_SERVER[ 'sys$flashMessagesForLater' ] )
        && ( 0 < count( $_SERVER[ 'sys$flashMessagesForLater' ] ))
        ;

  }

  static public function getFlashMessageForLaterAsHTML() {

    return implode( '<br />', $_SERVER[ 'sys$flashMessagesForLater' ] );

  }

} // CFlashMessageManager
于 2013-08-19T01:33:19.783 回答
8

HTTP 刷新重定向等待 5 秒:

header('Refresh:5; url=login6.php');
echo 'Please Log In First';
于 2013-08-19T01:32:21.733 回答
3

你可以做一个 html 重定向:把它放在你的头上

<meta http-equiv="refresh" content="5; url=http://example.com/">

页面将在 5 秒后重定向(将 5 更改为您想要的秒数)

于 2013-08-19T01:24:52.870 回答
3

php 中的工作示例。

echo "<script>";
echo " alert('Import has successfully Done.');      
        window.location.href='".site_url('home')."';
</script>";
于 2014-12-05T07:12:54.077 回答
-4

试试睡眠功能

<?php
sleep(10);//seconds to wait..
echo "Please Log In First";
header("location: login6.php");
?>
于 2013-08-19T01:24:44.893 回答