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

CodeIgniter3动态多文档上传后无法存入数据库问题求助

问题排查及修复方案

核心错误点

  • 表单缺少文件上传必需属性:文件上传场景下form标签必须加enctype="multipart/form-data",否则文件不会被提交到后端
  • 控制器判断逻辑错误:上传的文件存放在$_FILES全局变量中,不属于POST参数,你写的if ($this->input->post('documents'))条件永远为假,整个文档处理逻辑都不会执行,这就是模型从未被调用的根本原因
  • 多文件上传适配错误:CodeIgniter原生的do_upload方法默认只处理单个文件,直接传入documents[]数组无法正常识别
  • 数组赋值错误:代码中$documentArray[$c]['title']= $documentTitle;直接把整个标题数组赋值给单条记录,会导致数据异常

修正后的代码

视图层(form标签补充属性)

<form method="post" action="你的提交地址" enctype="multipart/form-data">
<!-- 原有input代码保持不变 -->
<td><input type="text" name="doctitle[]" placeholder="Title"></td>
<td><input type="file" name="documents[]"></td>
<td><a class="btn btn-success" id="addobj" href="javascript:void(0)">Add </a></td>
</form>

控制器层

if ($this->form_validation->run() == FALSE)
{
    $main['page'] = 'crm/listings/add';
    $this->load->view('crm/index', $main);
}else {  
    $maindata=array('clients_id'=>$this->session->userdata('clientsessid'));
    $insertid=$this->listings_model->insert_listing($maindata);
    
    if($insertid){
        // 改为判断文件数组是否存在有效上传
        if (!empty($_FILES['documents']['name'][0])) {
            $documentTitle = $this->input->post('doctitle');
            $documentArray = array();
            $fileCount = count($_FILES['documents']['name']);

            for ($c=0; $c < $fileCount; $c++) { 
                // 重组$_FILES结构适配CI上传类的单文件处理逻辑
                $_FILES['temp_doc']['name']     = $_FILES['documents']['name'][$c];
                $_FILES['temp_doc']['type']     = $_FILES['documents']['type'][$c];
                $_FILES['temp_doc']['tmp_name'] = $_FILES['documents']['tmp_name'][$c];
                $_FILES['temp_doc']['error']    = $_FILES['documents']['error'][$c];
                $_FILES['temp_doc']['size']     = $_FILES['documents']['size'][$c];

                $fileName = '';
                if($this->web_upload->do_upload('temp_doc'))
                { 
                    $filedata = $this->web_upload->data();
                    $fileName = $filedata['file_name'];
                }  

                $documentArray[] = [
                    'listings_id' => $insertid,
                    'title' => $documentTitle[$c] ?? '',
                    'document' => $fileName,
                    'added_date' => date('Y-m-d H:i:s'),
                    'added_by' => $this->session->userdata('user_id')
                ];
            }

            if(count($documentArray) > 0){
                $this->listings_model->save_document($documentArray);
            }
        }
        redirect('listings/sales');
    }
}

补充注意事项

  • 提前确认上传类已经加载,且配置了合法的上传路径、允许的文件类型、大小限制等参数
  • 可以增加上传错误捕获逻辑,上传失败时调用$this->web_upload->display_errors()输出错误信息排查问题
  • 数据库表的相关字段要做好非空校验,避免无效数据插入导致批量写入失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:45:11