CodeIgniter表单验证问题:提交报错后已填字段清空的解决方法
解决CodeIgniter表单验证失败后已填字段清空的问题
嘿,这个问题我之前也碰到过!其实核心原因就是表单验证失败返回视图时,没把用户已经输入的内容回显到输入框里。好在CodeIgniter自带了set_value()函数,能轻松搞定这个问题,下面是具体的解决步骤:
关键修改:给输入框添加回显值的value属性
你只需要修改视图页面里的每个<input>标签,为它们加上value="<?php echo set_value('字段名'); ?>"属性。这个函数会自动判断场景:
- 第一次加载页面时:返回空字符串,不影响初始显示
- 表单验证失败返回时:从POST数据中取出用户之前输入的值,自动填充到输入框里
修改后的视图代码如下:
<form name='frm1' action="<?php echo base_url(); ?>index.php/Registrationc/add_user" id="form1" method="post"> <input type="text" class="form-control" style="text-transform: capitalize;" autocomplete="off" id="fname" name="fname" value="<?php echo set_value('fname'); ?>"> <h6 style="color:red;"><?php echo form_error('fname');?></h6> <input type="text" class="form-control" style="text-transform: capitalize;" autocomplete="off" id="mname" name="mname" value="<?php echo set_value('mname'); ?>"> <h6 style="color:red;"> <?php echo form_error('mname');?></h6> <input type="text" class="form-control" style="text-transform: capitalize;" autocomplete="off" id="lname" name="lname" value="<?php echo set_value('lname'); ?>"> <h6 style="color:red;"><?php echo form_error('lname');?></h6> <center> <input type="submit" value="Submit" class="btn btn-bricky" id="subbtn" name="submit"> </center> </form>
确认控制器逻辑无需改动
你的控制器代码逻辑是正确的:当表单验证失败时,直接调用$this->extra3()加载视图(而不是重定向),这样POST数据还能被set_value()函数获取到。如果验证失败时用了重定向,POST数据会丢失,就没法回显了,好在你这里没这么做,所以控制器保持原样即可:
public function add_patient() { $this->form_validation->set_rules('fname', 'Firstname', 'trim|required|alpha'); $this->form_validation->set_rules('mname', 'Middlename', 'trim|required|alpha'); $this->form_validation->set_rules('lname', 'Lastname', 'trim|required|alpha'); if ($this->form_validation->run() == FALSE) { $this->extra3(); } else { $this->load->model('addpatientM'); $fname1 = $this->input->post('fname'); $lname1 = $this->input->post('lname'); $mname1 = $this->input->post('mname'); $submit = $this->addpatientM->insert_patient($fname1, $lname1, $mname1); if ($submit === true) { $this->load->library('session'); $this->session->set_flashdata('success', 'successfully added'); } else { $this->session->set_flashdata('fail', 'Opps there was some error while inserting'); } redirect('Registrationc/extra3'); } }
效果验证
修改完成后再测试表单:
- 当某个字段为空提交时,系统会正常提示该字段的错误信息
- 已经填写的其他字段内容会保留在输入框里,不用用户重新输入
内容的提问来源于stack exchange,提问作者Nisha
相关产品推荐
相关产品推荐

