Php 如何在CI中存储从视图发送到控制器的数据

Php 如何在CI中存储从视图发送到控制器的数据,php,codeigniter,session,controller,Php,Codeigniter,Session,Controller,我有一个大字符串数据从视图发送到控制器。字符串可能超过65535个字符。我尝试将其存储在会话闪存数据中 这是我在控制器中存储数据的方法 public function get_dt_pemenuhan_d2(){ $this->load->library('session'); $list = $this->input->post('no_pnh'); //a huge list of item $this->session->set_f

我有一个大字符串数据从视图发送到控制器。字符串可能超过65535个字符。我尝试将其存储在会话闪存数据中

这是我在控制器中存储数据的方法

public function get_dt_pemenuhan_d2(){
   $this->load->library('session');

   $list = $this->input->post('no_pnh'); //a huge list of item

   $this->session->set_flashdata('sess_no_pnh',$list);
}
这是我从会话flashdata中检索数据的方法

public function pembebanan2(){
    $this->load->library('session');

    $get_no_pnh = $this->session->flashdata('sess_no_pnh');
    $data       = array('no_pnh' => $get_no_pnh);

    $this->load->view('memo_pembebanan2',$data); //sending the data to a view
}
对于小数据(少于500个字符),一切都很好。但如果我存储了大量数据,则不会向视图发送任何内容。我使用alert来确保所有数据完全发送到控制器,并且一切正常。那么,代码中有什么错误

非常感谢您的帮助和建议。多谢各位

编辑: 这是视图,以及我如何将数据发布到控制器,然后在弹出视图中查看它

$("#btn_memo").on('click',function(e){
   var arr_pnh = [];
   $('#tbl_content tr td:nth-child(2)').each(function(){ 
      var x = $(this).text().split('||');
      arr_pnh.push(x[1]);
   });

   var no_pnh = arr_pnh;

   $.post('<?php echo site_url('con_atk/get_dt_pemenuhan_d2'); ?>',{no_pnh:no_pnh},function(){

       popUp = new Boxy("<iframe src='<?php echo site_url('con_atk/pembebanan2') ?>' width='640px' height='480px' frameborder='0'></iframe>" , {title: "<strong>Memo Pembebanan</strong>" , modal: true});
   });
});
$(“#btn_memo”)。在('click',函数(e){
var arr_pnh=[];
$('#tbl_content tr td:n个子(2)')。每个(函数(){
var x=$(this.text().split(“| |”);
arr_pnh.push(x[1]);
});
var no_pnh=arr_pnh;
$.post(“”,{no\u pnh:no\u pnh},function(){

popUp=new-Boxy(“编辑:经过研究,我找到了一个建议,很可能会奏效

我看到会话的大小是有限的,甚至还有cookies

最好的方法是获取数据,将其存储在数据库中,从模型进入控制器,然后将其传递到弹出窗口

下一个选项是将其存储到.txt文件中,然后从那里加载

编辑:以下是您可以做的事情

将数据发布到控制器,而不是执行此操作

public function get_dt_pemenuhan_d2(){
$this->load->library('session');

$list = $this->input->post('no_pnh'); //a huge list of item

$this->session->set_flashdata('sess_no_pnh',$list); 
}
这样做

public function get_dt_pemenuha_d2()
{
    $this->load->model('your_model');
    $list = $this-input->post('no_pnh');
    $this->your_model->insert_into_table($list);
 }
这将是您的模型函数

public function insert_into_table($list)
{
    $this->db->insert('table_name',$list);
}
如果你想访问它,就这样做

public function pembebanan2()
{
    $this->load->model('your_model');
    $data['list'] = $this->your_model->get_list();
    $this->load->view('memo_pembebanan2',$data);
}
这是您的get_list函数

public function get_list()
{
  $this->db->get('yourtable');
}
如果您希望在完成后删除表的内部,或者如果您希望保留其他列表,则可以放置一个ID以便能够使用where子句

无需将其转换为全局变量,只需加载您的模型并获取列表即可


现在在您的视图中,您只需要回显$list

也许只需要尝试使用
gzencode

诸如此类:

$this->session->set_flashdata('sess_no_pnh', gzencode($list));
或者将其存储在临时文件中,并将引用保留到会话中:

$tmpfname = tempnam("/tmp", "FOO");
$handle = fopen($tmpfname, "w");
fwrite($handle, $list);
fclose($handle);
$this->session->set_flashdata('sess_no_pnh', $tmpfname);
然后在弹出窗口中阅读:

$get_no_pnh = $this->session->flashdata('sess_no_pnh');
$data       = array('no_pnh' => file_get_contents($get_no_pnh));
unlink($get_no_pnh);

谢谢你的回复。数据不是来自数据库。它来自视图中的一个表。它只是一个巨大的名称列表。我不能使用你建议的功能,因为我使用了某种需要使用会话的弹出插件。哦,我很抱歉。你试图在弹出框中显示字符。我说得对吗?是的。实际上它工作正常。但是r列表中大约500个字符或大约75个名称。我可能需要更多。可能需要1000多个名称。您可以编辑您的问题并发布视图吗?我将尝试查看这是由ajax生成的常见html表。请参阅我的编辑
$get_no_pnh = $this->session->flashdata('sess_no_pnh');
$data       = array('no_pnh' => file_get_contents($get_no_pnh));
unlink($get_no_pnh);