Codeigniter: Как перенаправить правильно с проверкой формы

Я понимаю, как сделать это w/простая форма w/o существующие значения, но скажем, у меня есть представление, что я могу звонить с помощью http://domain.com/account/settings. скажем, у меня есть два поля, имя пользователя, пароль и город, которые все вытягивают от DB (за исключением пароля, конечно). Так, если пользователь пытается отправить форму и проверку сбоев по любой причине, где я должен "перенаправить" их к? Прямо сейчас у меня есть он показывающий то же представление, но проблема, это вытягивает информацию от DB снова. Я должен создавать два различных взглядов?

Второе представление по существу показало бы информацию, они пытались ввести вдоль w/сообщение об ошибке.

5
задан luckytaxi 4 January 2010 в 16:37
поделиться

3 ответа

Вам не нужно два отдельных вида. Проверьте функции Form Helper's set_value(), set_select(), set_checkbox() и set_radio(). Эти формы заново заполняются после их представления и проверки. Поэтому в вашем случае, вы должны указать поля следующим образом:

<input type="text"
       name="username"
       value="<?php echo set_value('username', $user['username']); ?>" />
<input type="text"
       name="city"
       value="<?php echo set_value('city', $user['city']); ?>" />

По умолчанию, вход будет иметь значение $user['city']. Но после неудачной валидации он будет заново заполнен ранее введенными значениями (в том числе и некорректными).

Просто помните, что все поля, которые вы хотите заново заполнить, должны быть переданы через библиотеку form_validation:

$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('city', 'City', '');
4
ответ дан 14 December 2019 в 04:39
поделиться

На том же контроллере вы можете иметь нечто подобное:

    if ($this->form_validation->run('create_comment') === TRUE)
    {
        $this->comments_model->name     = $this->input->post('name', TRUE);
        $this->comments_model->email    = $this->input->post('email', TRUE);
        $this->comments_model->website  = $this->input->post('website', TRUE);
        $this->comments_model->comment  = $this->input->post('comment', TRUE);
        $this->comments_model->create_comment();
                    redirect(current_url());
    }

    $this->load->view('your_view');

Это все, что есть.

Идея заключается в том, чтобы перенаправить его на себя или куда угодно, когда валидация вернет "true", чтобы мы вроде как обновили страницу, а значит, обновили ее.

Если валидация вернет "false", то вам ничего не придется делать.

2
ответ дан 14 December 2019 в 04:39
поделиться

Перенаправить в ту же форму.

И, на ваш взгляд, дать посетителю информацию об ошибке.

Есть два способа сделать это.

  1. Использовать эту ошибку на ваш взгляд. Это покажет информацию об ошибке валидации.

    echo validation_errors('

    ",'

    ');

  2. Или вы можете использовать flashdata()

В вашем контроллере

...
...
 $this->session->set_flashdata('msg', 'All fields are required. or other useful info here. Please try again!');
redirect('yourcontroller');

И на ваш взгляд, вы должны это показать.

<?php
if ($this->session->flashdata('msg')){ //change!
    echo "<div class='message'>";
    echo $this->session->flashdata('msg');
    echo "</div>";
}
?>
1
ответ дан 14 December 2019 в 04:39
поделиться
Другие вопросы по тегам:

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