我理解如何使用没有现有值的简单形式来做,但是假设我有一个可以通过http://domain.com/account/settings调用的视图。假设我有两个字段,用户名,密码和城市,都是从数据库中提取的(当然除了密码)。因此,如果用户尝试提交表单并因任何原因未通过验证,我应该将它们“重定向”到哪里?现在,我让它显示相同的视图,但问题是,它再次从数据库中提取信息。我应该创建两个不同的视图吗?
第二个视图基本上会显示他们尝试输入的错误信息。
答案 0 :(得分: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', '');
答案 1 :(得分: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');
这就是它的全部内容。
这个想法是让它重定向到自己或者你想要的任何地方,当验证返回'true'时,我们会刷新页面,因此,更新页面。
如果验证返回'false',那么您将不必做任何事情。
答案 2 :(得分:1)
重定向到相同的表单。
并在您的视图中向访问者提供错误信息。
有两种方法可以做到这一点。
在视图中使用此错误。这将显示验证错误信息。
echo validation_errors('&lt; p class =“error”&gt;','&lt; / p&gt;');
或者您可以使用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>";
}
?>
答案 3 :(得分:1)
遇到同样的问题并发现重定向会让您丢失form_error(...)或validation_errors()提供的数据,除非您将这些数据存储在会话中或传入数组中的数据中。加载视图。
要注意的一点是,只有当您想传递的数据在会话中时才应重定向,否则您应该只加载视图。后者确保在到达加载的视图时,您的验证错误完好无损。
答案 4 :(得分: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>
此代码显示表单错误并重新填充表单