【问题标题】:Display message before redirect to other page在重定向到其他页面之前显示消息
【发布时间】:2013-08-20 17:53:44
【问题描述】:

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

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

【问题讨论】:

  • "...但是我的代码只是直接重定向页面而不显示消息," 不可能。你不能在header之前使用echo,你会得到一个错误消息Headers already sent
  • 您好,先生。我没有收到错误消息,而是直接重定向.. thx..

标签: php


【解决方案1】:

试试睡眠功能

<?php
sleep(10);//seconds to wait..
echo "Please Log In First";
header("location: login6.php");
?>

【讨论】:

  • Sleep 只是延迟了服务器端的 PHP 脚本执行。因此,您赢得了反对票。
【解决方案2】:

你可以做一个 html 重定向:把它放在你的脑海里

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

并且页面会在5秒后重定向(把5改成你想要的秒数)

【讨论】:

    【解决方案3】:

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

    header( "refresh:5; url=login.php" ); //wait for 5 seconds before redirecting
    

    【讨论】:

    【解决方案4】:

    你不能那样做。 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>";
    

    【讨论】:

    • ...如果有人没有启用 JavaScript 怎么办?他会被卡住的!
    • @Gigala 你可以在消息中添加链接
    【解决方案5】:

    HTTP 刷新重定向等待 5 秒:

    header('Refresh:5; url=login6.php');
    echo 'Please Log In First';
    

    【讨论】:

    • @Fred-ii- 你是对的,请意识到这一点。该消息应在 标头之后回显。
    • 先生..我不太明白逻辑..为什么在显示消息之前先重定向页面?我正在应用这个。它有效..非常感谢..
    【解决方案6】:

    重定向就是重定向 ;-)

    如果您通过使用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
    

    【讨论】:

    • “因此,你的回声根本不会显示。”不仅如此,this
    • 感谢您抽出宝贵时间向我解释这个问题。这对我来说太深奥了。我是新手,新手.. :(
    • 我认为这将是更好的答案,因为如果用户禁用 JavaScript,当前接受的答案将不起作用...
    【解决方案7】:

    php 中的工作示例。

    echo "<script>";
    echo " alert('Import has successfully Done.');      
            window.location.href='".site_url('home')."';
    </script>";
    

    【讨论】:

      猜你喜欢
      • 2018-07-29
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      相关资源
      最近更新 更多