【问题标题】:codeigniter - store post data in session and display in viewcodeigniter - 在会话中存储发布数据并在视图中显示
【发布时间】:2025-11-26 21:00:01
【问题描述】:

我有一个用户填充的 codeigniter 表单。在提交时,输入被发布到一个数组中。然后这个数组会显示在作为变量加载的新视图上。

我的问题是,如果我出于某种原因刷新视图,这些帖子就会丢失,并且新视图无法显示变量。

如何将发布的数组存储为会话值,然后如何访问会话变量。

所以我的控制器是:

function new_blank_order_lines() 
  {
    $data = array(
    'customer' =>$this->input->post('customer'),
    'period' =>$this->input->post('period'),
    'buom' =>$this->input->post('buom')
       );

    $this->load->view('sales/new_blank_order_lines',$data);
  }

new_blank_order_lines 上我可以用echo $customer 显示变量

现在,如果我刷新视图 new_blank_order_lines,视图会重新加载,并且 post 变量会丢失。所以我想将 $data 数组存储为一个会话,这样即使在页面重新加载/刷新后它也可用。

有什么建议吗?

我在想这样的事情:

    function new_blank_order_lines() 
      {
        $data = array(
        'customer' =>$this->input->post('customer'),
        'period' =>$this->input->post('period'),
        'buom' =>$this->input->post('buom')
           );

        $this->session->$data

        $this->load->view('sales/new_blank_order_lines',$data);
      }

这显然行不通?如果它确实有效,我该如何回显变量的值?

一如既往的感谢,

【问题讨论】:

    标签: codeigniter session variables post


    【解决方案1】:

    您如何处理用户提交给表单的信息?它没有保存到数据库或类似的吗?如果是这样,那你为什么不从那里检索数据呢?

    如果您只是想暂时获取数据,您可以使用上一个示例中的会话变量,但需要进行一些修改:

    function new_blank_order_lines() 
      {
        $data = array(
        'customer' =>$this->input->post('customer'),
        'period' =>$this->input->post('period'),
        'buom' =>$this->input->post('buom')
           );
    
        $this->session->set_userdata($data);
    
        $this->load->view('sales/new_blank_order_lines',$this->session->all_userdata());
      }
    

    See user guide

    【讨论】:

    • 谢谢。我还没有将它写入数据库,只是在下一个表单完成之后。所以只想暂时展示一下。我按照您上面的建议更改了会话的语法,它在第一次加载页面时起作用。但是,如果我刷新页面,会话变量也会丢失吗?这与控制器有关吗?也许它正在用空白的帖子变量重新加载数组?如何执行 if 语句以查看会话是否已设置?还是我在这里完全走错了路?谢谢
    • 是的,如果未设置 post 变量,$this->input->post() 将返回 FALSE。所以先做这个检查: if ($this->input->post()){ set data here
    【解决方案2】:
    $projectID = $this->input->post('projectID');
    if($projectID!=''){
        $this->session->set_userdata('projectID', $projectID);
    }
    

    重新加载时发布数据不会过期使用此代码

    【讨论】: