PHP 回声和 headers - 没有输出回声
PHP Echos and headers - Echos not being outputted
我有一个部分,如果 Session 变量用户名不存在,应用程序应该输出一条错误消息,说明需要凭据,然后将用户重定向到登录页面。问题是,只有后者发生, "error message" 没有被输出。
<?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();
}
?>
我尝试使用 Output Buffer 来解决这个问题,但是,同样的问题不断发生。请问我该如何解决?
非常感谢!
我同意@khartnett。
由于您正在进行 header 重定向,它会在您有机会显示警告框之前重定向页面。
如果你这样做:
<?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();
}
?>
然后,它将显示阻止脚本进一步执行的警告框,直到按下确定,然后继续通过 window.location.href
重定向。
我通常通过将我要重定向到 post 消息的页面来处理这种需求。一种方法是这样的:
<?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>";
}
我有一个部分,如果 Session 变量用户名不存在,应用程序应该输出一条错误消息,说明需要凭据,然后将用户重定向到登录页面。问题是,只有后者发生, "error message" 没有被输出。
<?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();
}
?>
我尝试使用 Output Buffer 来解决这个问题,但是,同样的问题不断发生。请问我该如何解决?
非常感谢!
我同意@khartnett。
由于您正在进行 header 重定向,它会在您有机会显示警告框之前重定向页面。
如果你这样做:
<?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();
}
?>
然后,它将显示阻止脚本进一步执行的警告框,直到按下确定,然后继续通过 window.location.href
重定向。
我通常通过将我要重定向到 post 消息的页面来处理这种需求。一种方法是这样的:
<?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>";
}