数据未在会话codeigniter中设置

时间:2012-02-15 12:33:06

标签: php codeigniter session

//uploading product movie or image?
        if($this->input->post('upload_360') == "Upload") {
            $config['upload_path'] = './media/images/products/360s';
            $config['allowed_types'] = 'swf';
            $this->load->library('upload', $config);
            $this->upload->initialize($config);
            if (!$this->upload->do_upload('film')) {
                $this->data['product_error'] = $this->upload->display_errors();
                $this->template->build('/admin/products/create', $this->data);
            } else {
                $this->data['data_360'] = $this->upload->data();
                $this->session->set_userdata(array('360_film' => $this->data['data_360']));
                $this->template->build('/admin/products/create', $this->data);
            }
            $this->session->set_userdata(array('advantages' => $this->input->post('product_advantages')));
            $this->data['session_advantages'] = $this->session->userdata('advantages');
        }
        //upload the product image, if successful the user will be
        //notified if the image is too high or wide, and will be offered,
        //the chance to crop the image. All cropping takes place in the media
        //controller.
        if($this->input->post('product_image') == "Upload") {
            $config['upload_path'] = './media/images/products/';
            $config['allowed_types'] = 'gif|jpg|jpeg|png';
            $this->load->library('upload', $config);
            $this->upload->initialize($config);
            if (!$this->upload->do_upload('image_upload')) {
                //die("!");
                $this->data['image_error'] = $this->upload->display_errors();
                $this->template->build('/admin/products/create', $this->data);
            } else {
                $this->data['image_data'] = $this->upload->data();
                $this->session->set_userdata(array('image' => $this->data['image_data']));
                $this->data['session_image'] = $this->session->userdata('image');
                $this->template->build('/admin/products/create', $this->data);
            }
            $this->session->set_userdata(array('advantages' => $this->input->post('product_advantages')));
            $this->data['session_advantages'] = $this->session->userdata('advantages');
        }

        if($this->input->post('screenshot_upload') == "Upload") {
            $config['upload_path'] = './media/images/products/360s/screenshots/';
            $config['allowed_types'] = 'gif|jpg|jpeg|png';
            $this->load->library('upload', $config);
            $this->upload->initialize($config);
            if (!$this->upload->do_upload('screenshot')) {
                //die("!");
                $this->data['screenshot_error'] = $this->upload->display_errors();
                $this->template->build('/admin/products/create', $this->data);
            } else {
                $this->data['screenshot_data'] = $this->upload->data();
                $this->session->set_userdata(array('screenshot' => $this->data['screenshot_data']));
                $this->data['session_screenshot'] = $this->session->userdata('screenshot');
                $this->template->build('/admin/products/create', $this->data);
            }
            $this->session->set_userdata(array('advantages' => $this->input->post('product_advantages')));
            $this->data['session_advantages'] = $this->session->userdata('advantages');
        }

在我的表单上,我让用户选择一个文件,然后单击一个上传按钮,该按钮取决于单击哪个按钮,文件上传,上传数据保存在会话中。

然后使用会话来获取数据以保存到数据库,upload_360会话正常工作,product_image会话工作正常但是如果我尝试使用if语句(代码中的第3个),则screenshot_upload会话只有数据并在代码之外处理它,那么会话的那部分是空的?

这是否有原因?

2 个答案:

答案 0 :(得分:0)

为什么在将数据插入数据库之前将数据存储在会话中?

Cookies只能容纳4KB的数据......

  

但是如果我尝试在代码之外使用if语句,那么screenshot_upload会话只有if语句(代码中的第3个)时才有数据,那么会话的那部分是空的吗?

我不明白你的那部分问题。你的意思是它只在使用第3 if个语句时才有数据吗?即只尝试screenshot_upload而不是product_image或360_upload`时?如果是这样,那可能与cookie大小限制有关。

而不是

$this->session->set_userdata(array('screenshot' => $this->data['screenshot_data']));
$this->data['session_screenshot'] = $this->session->userdata('screenshot');

你为什么不

$this->uploads_model->insert_screenshot_data($this->data['screenshot_data']);//send screenshot upload_data to model to be inserted into db
$this->data['screenshot_data'] = $this->data['screenshot_data'];//if you want to pass screenshot upload_data to template/view

答案 1 :(得分:0)

在设置会话之前,您似乎正在向用户发送输出(我在$​​ this-> template-> build中推断出这一点,这是自定义代码。)

在将任何内容(ANYTHING)发送到输出后,无法修改会话,就像标题一样。这是因为会话本身是在标题中发送的。