Проверка Формы Codeigniter - как сбросить значения формы после успеха?

Я понимаю, что этот запрос идет вразрез с примером, обеспеченным в документации CI (который советует отдельному просмотру страницы 'успеха'), но я хотел бы повторно использовать высказанное мнение формы после того, как форма была успешно отправлена - отображение сообщения успеха затем отображение незаполненного бланка. Я попробовал несколько путей неудачно для очистки установленных значений проверки (сбрасывание $_POST, устанавливание правил / поля к пустому массиву и повторному выполнению проверки).

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

Какие-либо идеи, как лучше всего достигнуть вышеупомянутого?

32
задан Hassaan 23 September 2015 в 14:05
поделиться

3 ответа

Перенаправление на себя. Таким образом, ни одно представление не было запущено... Это также дает вам возможность показать flash_data.

    $this->load->library('form_validation');

    $this->form_validation->set_rules('firstname', 'First Name', 'required');
    $this->form_validation->set_rules('surname', 'Sur Name', 'required');

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

        $this->session->set_flashdata('message', 'New Contact has been added');
        redirect(current_url());
    }

    $this->load->view('contacts/add', $this->data);
36
ответ дан 27 November 2019 в 20:36
поделиться

Передайте переменную TRUE/FALSE в ваши представления, которая условно устанавливает значения формы.

Контроллер

if($this->form_validation->run())
{
    $data['reset'] = TRUE;
}
else
{
    $data['reset'] = FALSE:
}

$this->load->view("form", $data);

Представление:

<input type="text" name="email" value="<?php echo ($reset) ? "" : set_value('email'); ?>" />

<input type="text" name="first_name" value="<?php echo ($reset) ? "" : set_value('first_name'); ?>" />
7
ответ дан 27 November 2019 в 20:36
поделиться

Функция set_value получает свое значение из объекта Form_validation, а не из массива $_POST. Объект Form_validation хранит свою собственную копию размещенных значений в переменной $_field_data.

Это хак, но вы могли бы очистить эту переменную после обработки успешной отправки :

class Item extends Controller
{
    function Item()
    {
        parent::Controller();
        $this->load->model('item_model');
    }

    function add()
    {
        $this->load->library('form_validation');
        $this->form_validation->set_rules('name', 'name', 'required');

        $success = false;

        if ($this->form_validation->run())
        {
            $this->item_model->add_item($this->input->post('name'));
            $success = true;

            // Look away now. Hack coming up!
            // Clear the form validation field data
            $this->form_validation->_field_data = array();
        }

        $this->load->view('item/add', array('success' => $success));
    }
}
4
ответ дан 27 November 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: