在codeigniter中使用div显示消息set_flashdata中的问题?

时间:2011-08-21 16:42:47

标签: php session codeigniter

我想要的值为“flashdata”echo id='error_text'$this>session>flashdata('error')。怎么回事? 这段代码有错误:

   <?php
      isset($this->session->flashdata('error'))
      {
          "<div id='error_text'>" . $this->session->flashdata('error') . "</div>"}
    ?>

错误:

  

致命错误:无法在写入上下文中使用方法返回值   D:\ xampp \ htdocs \ mehdi \ system \ core \ Loader.php(679):eval()'d   第2行的代码

如果使用这个:

#error_text {
    background-color: #000000;
}
<div id="error_text"><?=$this->session->flashdata('error');?></div>

如果$this->session->flashdata('error')未显示消息背景,则它始终为黑色(#error_text{background-color: #000000;})。

修改

在控制器中:

if ($this->db->count_all($this->_table) == 0) {
        $this->session->set_flashdata('error', 'Error have.');
        $error = isset($this->session->flashdata('error')) ? $this->session->flashdata('error') : FALSE; // Line 36
        redirect('admin/accommodation/insert');
        } else {
        return 0;
        }

在视图中:

<?php if($error){"<div id='error_text'>".$this->session->flashdata('error')."</div>"}?>

新错误:

  

致命错误:无法在写入上下文中使用方法返回值   d:\ XAMPP \ htdocs中\希兰-梅迪\应用\控制器\管理员\ accommodation.php   在第36行

1 个答案:

答案 0 :(得分:2)

您需要首先将flashdata传输到变量中。并在您的控制器中执行此操作,然后将其发送到视图。最好将逻辑与表示分开。

 if ($this->db->count_all($this->_table) == 0) 
 {
    $this->session->set_flashdata('error', 'Error have.');
    // You doesn't need that here...
    // $error = isset($this->session->flashdata('error')) ? $this->session->flashdata('error') : FALSE; // Line 36
    redirect('admin/accommodation/insert');
 } 
 else 
 {
    return 0;
 }


// Then for validate, in 'admin/accommodation/insert'
$error = $this->session->flashdata('error');

$data = array();

//...

$data['error'] = $error;
$this->load->view('someview',$data);

// And in your view file
<?php if($error) : ?>
<div id="error_text"><?php echo $error ?></div>
<?php endif; ?>