You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:01:13