2010-01-04 2 views
5

Я понимаю, как это сделать с простой формой без существующих значений, но, допустим, у меня есть представление, которое я могу вызвать через http://domain.com/account/settings. скажем, у меня есть два поля, имя пользователя, пароль и город, которые все вытащили из БД (за исключением пароля, конечно). Итак, если пользователь пытается отправить форму и не выполняет валидацию по какой-либо причине, где я должен «перенаправить» их? Прямо сейчас, у меня есть тот же вид, но проблема в том, что он снова извлекает информацию из БД. Должен ли я создавать два разных представления?Codeigniter: как правильно перенаправить с помощью проверки формы

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

ответ

4

Вам не нужны два отдельных вида. Выезд 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', ''); 
2

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

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'); 

Вот и все есть.

Идея состоит в том, чтобы перенаправить ее к себе или туда, где вы хотите, когда валидация возвращает «истина», чтобы мы как бы обновили страницу, следовательно, обновили страницу.

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

1

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

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

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

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

    echo validation_errors ('< p class = "error">', '</p>');

  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

Имел ту же проблему и обнаружил, что перенаправление заставляет вас потерять данные, которые были бы предоставлены form_error (...) или validation_errors(), за исключением того, что вы храните такие данные в сеансе или в массиве, передаваемом в загруженное представление.

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

0

Просто загрузите ту же точку зрения, если форма проверки не удалось

контроллер

$userData=array(
'username'=NULL, 
'password'=NULL 
); 
#set form validation rules 
$this->form_validation->set_rules('username', 'Username', 'required'); 
$this->form_validation->set_rules('password', 'Password', 'required'); 
#get all posted data ,this helps you in two ways, 
# 1. Get all form data and can be use here server side 
# 2. repopulating the form data by passing to view page 
$userData=$this->input->post(NULL, TRUE); 
#check form validation result 
if ($this->form_validation->run() == TRUE) { 
//do the operation 
redirect(URL); 

}else{ 
    $this->load->view($view, $userData); 
} 

Просмотр страницы

<form method=post action='URL'> 
<input type='text' name='username'value='<?php echo $username?>'/> 
<?php echo (form_error('username')) ? form_error('username', "<div style='color:red'>", "</div>") : ""; ?> 
<input type='text' name='password' value='<?php echo $password?>'/> 
<?php echo (form_error('username')) ? form_error('username', "<div style='color:red'>", "</div>") : ""; ?> 
<input type='submit' value='submit'/> 
</form> 

Этот код ошибки формы отображения и заселить форму

Смежные вопросы