2013-06-29 1 views
1

Я использую следующий код для управления разбиением на страницы в результатах поиска: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». Но из-за каких-то возбудимых и чрезмерных правил умеренности мне пришлось окутать его в нечто менее значимое.

ответ

3

Первое, что вам нужно посетить, - это когда вы вызываете метод $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()does NOT generate a warning if the variable does not exist, и возвращает FALSE.

CI reference

Существует также хороший tutorial на 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'); 

} // ... 
+0

Хашем, спасибо за усилия, но это не имеет никакого значения. Кроме того, в итоговой инструкции if() есть ошибка в результате отсутствия $ post ['search-notes']. Но - и, как я уже говорил, если я повторяю эту переменную, она оценивает. Это просто не имеет никакого смысла. –

+0

Вы могли бы написать 'var_dump ($ post ['search-notes']);' после окончательного 'if' и опубликовать результат? –

+1

Хорошо, я попробовал функции set_userdata() и userdata(), и они работают. Хашем, спасибо. –