Я понимаю, как сделать это w/простая форма w/o существующие значения, но скажем, у меня есть представление, что я могу звонить с помощью http://domain.com/account/settings. скажем, у меня есть два поля, имя пользователя, пароль и город, которые все вытягивают от DB (за исключением пароля, конечно). Так, если пользователь пытается отправить форму и проверку сбоев по любой причине, где я должен "перенаправить" их к? Прямо сейчас у меня есть он показывающий то же представление, но проблема, это вытягивает информацию от DB снова. Я должен создавать два различных взглядов?
Второе представление по существу показало бы информацию, они пытались ввести вдоль w/сообщение об ошибке.
Вам не нужно два отдельных вида. Проверьте функции 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', '');
На том же контроллере вы можете иметь нечто подобное:
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", то вам ничего не придется делать.
Перенаправить в ту же форму.
И, на ваш взгляд, дать посетителю информацию об ошибке.
Есть два способа сделать это.
Использовать эту ошибку на ваш взгляд. Это покажет информацию об ошибке валидации.
echo validation_errors('
",'
');Или вы можете использовать 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>";
}
?>