使用 header() 重新加载页面后使用 echo() 写入文本
Write text with echo() after reloading page with header()
我有一个名为 account_settings.php
的页面,它包括更改密码、更改个人资料照片、更改用户详细信息(姓名、简介等)。我的问题是如何在使用 header()
.
重定向页面后使用 echo()
编写消息
像这样:
if (true)
{
Do_Some_MySQL();
header("Location: account_settings.php");
echo "Success!";
}
else
{
echo "Error!";
}
谢谢大家的回复。 ;-)
我会使用 SESSION 变量:
在重定向页面上:
<?php
@session_start();
if(true){
$_SESSION['success'] = 1;
header("Location: account-settings.php");
}
?>
以及帐户-settings.php:
<?php
@session_start();
if(isset($_SESSION['success'])){
echo "Success!";
unset($_SESSION['success']);
}
您刚刚重定向后无法回显任何内容。浏览器已经在处理重定向到另一个页面的请求,因此它不再为显示消息而烦恼。您似乎在寻找的是一种叫做 flash message 的东西。您可以在会话中设置一个临时消息并让它显示在新页面上。例如,在您的 account_settings.php
页面中:
// Make sure you have an actual session
if (!session_id()) {
session_start();
}
if (true) {
Do_Some_MySQL();
$_SESSION['flashMessage'] = 'Success!';
header('Location: account_settings.php');
}
然后在 account_settings 的模板文件中,检查是否有任何 flash 消息并相应地显示它(并取消设置以避免循环):
if (isset($_SESSION['flashMessage'])) {
echo $_SESSION['flashMessage'];
unset($_SESSION['flashMessage']);
}
发送 Location
header 后你实际上不能做某事 - 这是不可能的。
相反,您可以使用 $_SESSION
数组值来执行您的任务。喜欢:
if (true)
{
Do_Some_MySQL();
$_SESSION['message'] = 'Error!';
header("Location: account_settings.php");
}
else
{
echo "Error!";
}
然后在你的 account_setting.php:
<?php echo $_SESSION['message'] ?>
如果 account_settings.php
与您当前所在的页面不同,那就太好了。否则,您可以使用以下代码:
if (true)
{
Do_Some_MySQL();
$error = 'Success!';
header("Location: account_settings.php");
}
else
{
$error = "Error!";
}
在同一页上:
<?php if($error) echo $error; ?>
此外,如果您还没有在两个页面上添加 session_start()
,请不要忘记添加。
这些人是正确的...您不能在重定向后发送 headers。尽管我认为这将是一个有益的选择。在您的 header 中发送 GET 请求并在接收页面上处理它。他们建议使用 $_SESSION 变量,但您可以使用 GET 变量。例如:
if (true)
{
//Do_Some_MySQL();
header("Location: account_settings.php?message=success");
//above has GET var message = Success
}
else
{
header("Location: account_settings.php?message=error");
}
在您的 account_settings.php 页面上有此代码:
if (isset($_GET['message'])) {
$message = $_GET['message'];
if ($message == "success") {
echo "Success";
} else {
echo "Error";
}
}
这消除了 CONSTANT SESSION 变量的需要。并为您提供足够的灵活性。
header("Location: account_settings.php?message=No%20results%20found");
//%20 are URL spaces. I don't know if these are necessary.
如果您需要可以添加一个以上。
header("Location: account_settings.php?message=error&reason=No%20Results×tamp=" . Date());
那么account_settings.php可以是:
if (isset($_GET['message'])) {
$message = $_GET['message'];
$reason = $_GET['reason'];
$time = $_GET['timestamp'];
if ($message == "success") {
echo "Success";
} else {
echo "Error: <br/>";
echo "Reason: $reason";
}
}
但请记住 GET 会在浏览器中公开您的消息 URL。因此,除非您对其进行保护,否则不要发送敏感信息。希望这有帮助。
我有一个名为 account_settings.php
的页面,它包括更改密码、更改个人资料照片、更改用户详细信息(姓名、简介等)。我的问题是如何在使用 header()
.
echo()
编写消息
像这样:
if (true)
{
Do_Some_MySQL();
header("Location: account_settings.php");
echo "Success!";
}
else
{
echo "Error!";
}
谢谢大家的回复。 ;-)
我会使用 SESSION 变量: 在重定向页面上:
<?php
@session_start();
if(true){
$_SESSION['success'] = 1;
header("Location: account-settings.php");
}
?>
以及帐户-settings.php:
<?php
@session_start();
if(isset($_SESSION['success'])){
echo "Success!";
unset($_SESSION['success']);
}
您刚刚重定向后无法回显任何内容。浏览器已经在处理重定向到另一个页面的请求,因此它不再为显示消息而烦恼。您似乎在寻找的是一种叫做 flash message 的东西。您可以在会话中设置一个临时消息并让它显示在新页面上。例如,在您的 account_settings.php
页面中:
// Make sure you have an actual session
if (!session_id()) {
session_start();
}
if (true) {
Do_Some_MySQL();
$_SESSION['flashMessage'] = 'Success!';
header('Location: account_settings.php');
}
然后在 account_settings 的模板文件中,检查是否有任何 flash 消息并相应地显示它(并取消设置以避免循环):
if (isset($_SESSION['flashMessage'])) {
echo $_SESSION['flashMessage'];
unset($_SESSION['flashMessage']);
}
发送 Location
header 后你实际上不能做某事 - 这是不可能的。
相反,您可以使用 $_SESSION
数组值来执行您的任务。喜欢:
if (true)
{
Do_Some_MySQL();
$_SESSION['message'] = 'Error!';
header("Location: account_settings.php");
}
else
{
echo "Error!";
}
然后在你的 account_setting.php:
<?php echo $_SESSION['message'] ?>
如果 account_settings.php
与您当前所在的页面不同,那就太好了。否则,您可以使用以下代码:
if (true)
{
Do_Some_MySQL();
$error = 'Success!';
header("Location: account_settings.php");
}
else
{
$error = "Error!";
}
在同一页上:
<?php if($error) echo $error; ?>
此外,如果您还没有在两个页面上添加 session_start()
,请不要忘记添加。
这些人是正确的...您不能在重定向后发送 headers。尽管我认为这将是一个有益的选择。在您的 header 中发送 GET 请求并在接收页面上处理它。他们建议使用 $_SESSION 变量,但您可以使用 GET 变量。例如:
if (true)
{
//Do_Some_MySQL();
header("Location: account_settings.php?message=success");
//above has GET var message = Success
}
else
{
header("Location: account_settings.php?message=error");
}
在您的 account_settings.php 页面上有此代码:
if (isset($_GET['message'])) {
$message = $_GET['message'];
if ($message == "success") {
echo "Success";
} else {
echo "Error";
}
}
这消除了 CONSTANT SESSION 变量的需要。并为您提供足够的灵活性。
header("Location: account_settings.php?message=No%20results%20found");
//%20 are URL spaces. I don't know if these are necessary.
如果您需要可以添加一个以上。
header("Location: account_settings.php?message=error&reason=No%20Results×tamp=" . Date());
那么account_settings.php可以是:
if (isset($_GET['message'])) {
$message = $_GET['message'];
$reason = $_GET['reason'];
$time = $_GET['timestamp'];
if ($message == "success") {
echo "Success";
} else {
echo "Error: <br/>";
echo "Reason: $reason";
}
}
但请记住 GET 会在浏览器中公开您的消息 URL。因此,除非您对其进行保护,否则不要发送敏感信息。希望这有帮助。