Я использую следующий код для управления разбиением на страницы в результатах поиска:
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'); } // ...