CodeIgniter分类提交时name字段表单验证报错问题求助
问题排查与修复方案
一、name字段验证报错问题
根因
你的表单内存在两个name属性均为name的字段:
- 分类名称文本输入框:
<input type="text" name="name" id="name"> - 图片上传控件:
<input type="file" name="name" id="image">
表单提交时,后出现的字段值会覆盖前者,未选择图片时提交到后端的name值为空,自然触发required验证规则报错。移除验证逻辑时,即使name值为空也会直接入库,所以不会触发错误。
修复方法
将图片上传控件的name属性修改为唯一值即可,例如:
<input type="file" name="image" id="image">
额外提醒:如果需要上传文件,需要给form标签添加enctype="multipart/form-data"属性,否则后端无法接收上传的文件内容。
二、redirect跳转丢失表单验证错误问题
CodeIgniter的form_validation组件的错误信息仅在当前请求生命周期内有效,redirect相当于发起了全新的HTTP请求,原请求的上下文数据会全部清空,因此无法直接获取上一次请求的验证错误。
你当前的代码逻辑中,验证失败时直接调用$this->load->view()加载表单页,这种场景本来就不会丢失错误信息。如果你的业务需要调整为两个方法分离(一个方法仅展示表单,一个方法仅处理提交逻辑),可以按以下方案实现:
- 提交处理方法中,验证失败时将错误信息和用户输入存入闪存数据,再跳转:
if($this->form_validation->run()==FALSE) { // 存错误和旧输入到闪存 $this->session->set_flashdata('validation_errors', $this->form_validation->error_array()); $this->session->set_flashdata('old_input', $this->input->post()); // 跳转到表单页 redirect(base_url().'admin/category/create'); }
- 表单展示方法中,将闪存数据传入视图:
public function create() { $data['errors'] = $this->session->flashdata('validation_errors') ?? []; $data['old_input'] = $this->session->flashdata('old_input') ?? []; $this->load->view('admin/category/create', $data); }
- 视图中用传入的
$errors输出错误,用$old_input回填用户之前填写的内容即可。
内容的提问来源于stack exchange,提问作者sure success classes
相关产品推荐
相关产品推荐

