无法在PHP中显示会话消息?

时间:2015-01-04 14:20:57

标签: php session

我在类文件$_SESSION['op_status'] = 'MY MESSAGE HERE';中设置了会话消息,然后将页面header("location:news.php");页面重定向重定向到news.php,但会话消息未显示。

的config.php:

<?php
   session_start();
   // DATABASE CONFIURATION GOES HERE
?>

news.php:

<?php
  require_once 'config.php';
  require_once 'classes/class.news.php';
  $objNews = new News();

  if(isset($_POST['submit']) && $_POST['submit'] == 'add')
   $objNews->add();

?>

<span class='text-warning'><?php echo $_session['op_status']; ?></span>

class.news.php:

public function add() {
  if(){
     // SOME CODE GOES HERE
  } else {
     $_SESSION['op_status'] == 'Already Exist';
  }
}

3 个答案:

答案 0 :(得分:4)

你需要在header()之后使用exit()。

 $_SESSION['msg']="Hello";
 header("Location: account.php");
 exit();

然后在account.php中使用

 echo $_SESSION['msg'];

确保在您要显示/创建会话消息的每个页面上都显示session_start();

而不是使用这种方式,我更喜欢使用以下功能。 (以区分是否是Bootstrap HTML标记中的错误消息或成功)

 function _redirect($url=NULL, $message=NULL, $message_type=NULL){
      $_SESSION['sess_flash_message']= array();
      if($message){
          switch($message_type){ 
            case 'success': $_SESSION['sess_flash_message'][] = '<div class="alert alert-success"><button data-dismiss="alert" class="close" type="button">×</button>'.$message.'</div>';break;
            case 'error': $_SESSION['sess_flash_message'][] = '<div class="alert alert-error"><button data-dismiss="alert" class="close" type="button">×</button>'.$message.'</div>';break;
            case 'notice': $_SESSION['sess_flash_message'][] = '<div class="alert alert-info"><button data-dismiss="alert" class="close" type="button">×</button>'.$message.'</div>';break;
            case 'warning': $_SESSION['sess_flash_message'][] = '<div class="alert alert-block"><button data-dismiss="alert" class="close" type="button">×</button>'.$message.'</div>';break;
            default: $_SESSION['sess_flash_message'][] = $message;
          }
      }
    if($url) {
        header("Location: ".$url);
    } else {
        header("Location: ".$_SERVER['HTTP_REFERER']);
    }
     exit();
     ob_flush();    
}

并致电_redirect('login.php','You need to login first!','warning');

答案 1 :(得分:3)

你必须改变:

$_session['op_status']

为:

$_SESSION['op_status']

因为$_SESSION是一个超全局,必须是大写的。

另外,请参阅:http://php.net/manual/en/language.variables.superglobals.php

你也可以在这里进行比较:

$_SESSION['op_status'] == 'Already Exist';

我认为你想要分配它,所以改为:

$_SESSION['op_status'] = 'Already Exist';

此外,我希望你的if声明中有条件,否则它不起作用。

Nota:确保session_start();位于使用会话的所有网页内。


旁注:

您可以在测试环境中添加错误报告:

<?php
    ini_set("display_errors", 1);
    error_reporting(E_ALL);

// rest of your code below 

答案 2 :(得分:1)

很可能你还没有开始或继续会议

<?php
session_start();

// your code
?>

另一种选择是通过网址传递您的邮件。这就是您将其标题化的方式:

$myMessage = "<YOUR MESSAGE HERE>";
header("Location: http://www.somesite.com/news.php?mymessage=" . $myMessage);

然后在news.php上:

$theMessage = $_GET['mymessage'];