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

CodeIgniter分类提交时name字段表单验证报错问题求助

问题排查与修复方案

一、name字段验证报错问题

根因

你的表单内存在两个name属性均为name的字段:

  1. 分类名称文本输入框:<input type="text" name="name" id="name">
  2. 图片上传控件:<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()加载表单页,这种场景本来就不会丢失错误信息。如果你的业务需要调整为两个方法分离(一个方法仅展示表单,一个方法仅处理提交逻辑),可以按以下方案实现:

  1. 提交处理方法中,验证失败时将错误信息和用户输入存入闪存数据,再跳转:
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');
}
  1. 表单展示方法中,将闪存数据传入视图:
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);
}
  1. 视图中用传入的$errors输出错误,用$old_input回填用户之前填写的内容即可。

内容的提问来源于stack exchange,提问作者sure success classes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:45:02