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

CodeIgniter中验证错误后如何保留已输入和选中的值?

解决CodeIgniter表单验证重定向后丢失输入/选中值的问题

我之前也踩过这个坑!咱们一步步排查原因,应该能快速解决:

1. 别用redirect(),直接加载视图(最常见的问题)

这是大部分人碰到这个问题的核心原因:当验证失败时,如果用redirect()跳转到表单页面,相当于发起了一个全新的HTTP请求,之前提交的表单数据会直接丢失——set_value和set_select根本拿不到旧数据!

错误写法:

if (!$this->form_validation->run()) {
    redirect('your/form/page'); // 这里会清空表单数据!
}

正确写法:

if (!$this->form_validation->run()) {
    $this->load->view('your_form_view'); // 直接加载视图,保留验证缓存的旧数据
}

如果业务需求必须用重定向(比如要保持URL统一),那得手动把表单数据存入session的flashdata,然后在表单页面取出:

// 验证失败时的控制器代码
$this->session->set_flashdata('form_inputs', $this->input->post());
redirect('your/form/page');

// 表单视图里的输入框写法
<input type="text" name="code" value="<?php echo set_value('code', $this->session->flashdata('form_inputs')['code'] ?? '') ?>">

2. 检查set_select的参数匹配问题

对于动态生成的选项(比如你循环数据库数据的场景),要注意两点:

  • 确保select标签的name属性和set_select的第一个参数完全一致(大小写也不能错)
  • 选项的value值和set_select的第二个参数类型要匹配(比如POST过来的是字符串"123",就别传整数123,否则匹配失败)

比如你这段代码可以优化一下类型匹配:

<option value="<?php echo $address_value['id']; ?>" 
        <?php echo set_select('address_name', strval($address_value['id'])) ?>>
    <?php echo $final_address; ?>
</option>

3. 确认已经加载了Form Helper

set_value、set_select都是Form Helper里的方法,必须先加载才能用:

  • 控制器里手动加载:
$this->load->helper('form');
  • 或者在application/config/autoload.php里配置自动加载:
$autoload['helper'] = array('form');

4. 检查表单name属性的一致性

不管是输入框还是下拉框,name属性的拼写、大小写必须和set_value/set_select的第一个参数完全一致,比如name="Code"和set_value('code')是匹配不上的!

5. 确保Session正常工作

CodeIgniter的表单状态依赖Session存储,所以要确认Session库已经加载且配置正确:

  • 自动加载Session:
$autoload['libraries'] = array('session');

内容的提问来源于stack exchange,提问作者Himani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:32:48