用header()重新加载页面后用echo()写文本

时间:2015-04-05 11:28:49

标签: php if-statement header echo

我有一个名为account_settings.php的页面,它包含更改密码,更改个人资料照片,更改用户详细信息(名称,生物等)。我的问题是如何在使用echo()重定向页面后使用header()编写邮件。

这样的事情:

if (true) 
{
    Do_Some_MySQL();
    header("Location: account_settings.php");
    echo "Success!";
}
else
{
    echo "Error!";
}

感谢您的回复。 ; - )

4 个答案:

答案 0 :(得分:2)

发送Location标题后,您实际上无法做某事 - 这是不可能的。

相反,您可以使用$_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()

答案 1 :(得分:1)

我会使用SESSION变量: 在redirect-page:

<?php
@session_start();

if(true){
   $_SESSION['success'] = 1;
   header("Location: account-settings.php");
}
?>

并在account-settings.php上:

<?php
@session_start();

if(isset($_SESSION['success'])){
   echo "Success!";
   unset($_SESSION['success']);
}

答案 2 :(得分:0)

重新定向后,您无法回复任何内容。浏览器已经在处理重定向到另一个页面的请求,因此它不再需要显示消息了。你似乎在寻找的是一种叫做flash消息的东西。您可以在会话中设置临时消息,并将其显示在新页面上。例如,在您的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']);
}

答案 3 :(得分:0)

这些人是正确的......您无法在重定向后发送标头。虽然我认为这将是一个有益的选择。在标题中发送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&timestamp=" . 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会在浏览器网址中公开您的邮件。因此,除非您保护敏感信息,否则不会发送敏感信息。希望这会有所帮助。