CodeIgniter: установка флэш-данных не работает

Я использую следующий код для управления разбиением на страницы в результатах поиска:

if ($this->input->post('search-notes') && (is_string($this->input->post('search-notes')) || is_string($this->input->post('search-notes')))): $this->session->set_flashdata('search-notes', $_POST['search-notes']); $post['search-notes'] = $this->input->post('search-notes'); elseif ($this->session->flashdata('search-notes')): $this->session->set_flashdata('search-notes', $this->session->flashdata('search-notes')); $post['search-notes'] = $this->session->flashdata('search-notes'); endif; if (isset($post['search-notes']) && is_string($post['search-notes']) && !empty($post['search-notes'])): ... 

Все это отлично работает на моем компьютере разработки, но задыхается на веб-сайте; конечный оператор if() не оценивает значение true.

Однако, если я выхожу из переменной $post['search-notes'] до или в финальной инструкции if() , она работает!

Это совершенно странно, и я никогда раньше не встречал ничего подобного.

Я использую CodeIgniter 2.0

На стороне примечание, исходное название имело гораздо большую специфику: «Проблема с set_flashdata() в CodeIgniter». Но из-за каких-то возбудимых и чрезмерных правил умеренности мне пришлось окутать его в нечто менее значимое.

Первое, что вы должны посетить, – это когда вы вызываете $this->session->flashdata('search-notes') , он отключает элемент 'search-notes' из сеанса.

Итак, когда вы проверяете $this->session->flashdata('search-notes') во второй раз, 'search-notes' больше не будут существовать.

Если вы хотите сохранить элемент в сеансе, используйте set_userdata() и userdata() .

Кроме того, вы можете использовать keep_flashdata('search-notes') после set_flashdata() или перед первым вызовом flashdata() чтобы сохранить переменную flashdata с помощью дополнительного запроса.

В качестве побочного пункта:
Нет необходимости проверять isset() и !empty() вместе. empty() НЕ генерирует предупреждение, если переменная не существует и возвращает FALSE .

Ссылка на CI

Также есть полезный учебник по nettuts +.


Jus как демо:
НЕ копируйте, проверьте логику.

 if ($_POST['search-notes'] AND is_string($_POST['search-notes'])) { $post['search-notes'] = $this->input->post('search-notes'/*, TRUE*/ /* Enable XSS filtering */); $this->session->set_flashdata('search-notes', $post['search-notes']); } elseif ($searchNotes = $this->session->flashdata('search-notes')) { $post['search-notes'] = $searchNotes; } if (! empty($post['search-notes']) AND is_string($post['search-notes'])): // ... 

Если вам нужно сохранить элемент search-notes в сеансе, используйте следующее в первом if :

 if ($_POST['search-notes'] AND is_string($_POST['search-notes'])) { $post['search-notes'] = $this->input->post('search-notes'/*, TRUE*/ /* Enable XSS filtering */); $this->session->set_flashdata('search-notes', $post['search-notes']); // Keep the flashdata through an additional request $this->session->keep_flashdata('search-notes'); } // ...