Проблема с редиректом и set_select - PullRequest
0 голосов
/ 26 июня 2011

Я использую CodeIgniter 1.7.1. Хорошо, вот сценарий. Когда форма отправляется, мне нужно сделать две вещи

1) сохранить значение, выбранное в раскрывающемся списке. 2) используя session->set_flashdata(), мне нужно установить пользовательское сообщение базы данных.

Теперь, как мы знаем, нам нужно перенаправить, прежде чем эти данные могут быть установлены.

Это код, который я написал.

if ($this->form_validation->run() == TRUE){

    $this->session->set_flashdata(‘msg’, ‘Taha Hasan’); 
    redirect(current_url());

    $this->ShowReceiveInventoryView();
}

Также я использую set_select в раскрывающемся списке, чтобы сохранить значение.

<select name=“myselect”>
<option value=“one” <?php echo set_select(‘myselect’, ‘one’, TRUE); ?> >One</option>
<option value=“two” <?php echo set_select(‘myselect’, ‘two’); ?> >Two</option>
<option value=“three” <?php echo set_select(‘myselect’, ‘three’); ?> >Three</option>
</select>

Теперь вот проблема… Вспышка появляется, НО, потому что я перенаправляю на текущую страницу, выпадающее значение set_select потеряно !!! В выборе появляется значение по умолчанию :( .. Если я удаляю строку перенаправления в коде, выпадающее значение сохраняется, но данные Flash не заданы !!!

Надеюсь, у вас, ребята, есть решение этой проблемы ...

1 Ответ

1 голос
/ 27 июня 2011

set_select() работает только тогда, когда массив $_POST имеет содержимое (как вы обнаружили), но ваше перенаправление, очевидно, является запросом GET.

Правильный способ справиться с этим - выполнить ваш запросв контроллере, передавая объект, который редактируется в вашем представлении.Затем вы снова заполняете форму или устанавливаете значения по умолчанию на основе $_POST, если она существует, или на основе переданного объекта.

Давайте предположим, что мы редактируем продукт, который имеет myselect (ужасно названная область) собственность.Мы будем использовать троичный оператор PHP, чтобы проверить, равно ли значение параметра myselect продукта текущему option - если так, мы будем использовать третий параметр set_selects(), чтобы установить значение по умолчанию.

<option value="one" <?php echo set_select('myslect', 'one', ((!$product) || !$this->input->post('myselect') && $product->myselect == 'one' ? TRUE : FALSE); ?>One</option>

<option value="two" <?php echo set_select('myselect', 'two', (!$this->input->post('myselect') && $product->myselect == 'two' ? TRUE : FALSE); ?>Two</option>
...