PHP Echos和标题 - Echos没有输出

问题描述 投票:0回答:2

我有一个部分,如果没有使用会话变量用户名,应用程序应输出一条错误消息,指出需要凭据,然后将用户重定向到登录页面。问题是,只有后者发生,并且没有输出“错误消息”。

<?php if (!isset($_SESSION['username'])){  
    ob_start();
    echo "<script type='text/javascript'>alert('Not logged in. Please input required credentials.');</script>";
    header('location: /se7en/login.php');
    ob_end_flush();

}
?>

我尝试使用输出缓冲区来解决这个问题,然而,同样的问题不断发生。我该如何解决这个问题?

非常感谢!

php html header echo output-buffering
2个回答
0
投票

我通常通过让我重定向的页面来发布消息来处理这种需求。一种方法是:

<?php if (!isset($_SESSION['username'])){  
    ob_start();
    header('location: /se7en/login.php?message=Not logged in. Please input required credentials.');
    ob_end_flush();

}
?>

然后在你的login.php上你有

if ( ! empty( $_GET['message'] ) ) {
    $message = htmlspecialchars( $_GET['message'] );
    echo "<script type='text/javascript'>alert('$message');</script>";
}

您也可以传递一个消息号(message=1),然后在login.php文件中的数组中包含所有可能的消息:

$messages = array(
    1 => "Not logged.....",
    2 => "something else...",
    //...
);
if( ! empty( $_GET['message'] ) && ! empty( $messages[ $_GET['message'] ] ) {
    echo "<script type='text/javascript'>alert('{$messages[ $_GET['message'] ]}');</script>";
}

0
投票

我同意@khartnett。

由于您正在进行标题重定向,因此在您有机会显示警告框之前,它将重定向页面。

如果你这样做:

<?php if (!isset($_SESSION['username'])){  
ob_start();
echo "<script type='text/javascript'>" .
          "alert('Not logged in. Please input required credentials.');" .
          "window.location.href = '/se7en/login.php';" .
     "</script>";
header('location: /se7en/login.php');
ob_end_flush();
}
?>

然后,它将显示警告框,阻止进一步执行脚本,直到按下OK,然后继续通过window.location.href重定向。

© www.soinside.com 2019 - 2024. All rights reserved.