данные не установлены в коде сеанса - PullRequest
0 голосов
/ 15 февраля 2012
//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 работает нормально, но у сеанса screenshot_upload есть данные только с оператором if (3-й в коде), если я пытаюсь и доступ к нему вне кода, тогда эта часть сеанса пуста?

Есть ли причина для этого?

Ответы [ 2 ]

0 голосов
/ 16 февраля 2012

Похоже, что вы отправляете вывод пользователю перед установкой сеанса (это вывод из $ this-> template-> build, который является пользовательским кодом).

Сессия, как и заголовки, не может быть изменена после того, как что-либо (НИЧЕГО) было отправлено на выход. Это потому, что сам сеанс отправляется в заголовке.

0 голосов
/ 15 февраля 2012

Почему вы храните данные в сеансе перед тем, как вставить их в базу данных?

Файлы cookie могут содержать только 4 КБ данных ...

но у сеанса 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...