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
相关产品推荐
相关产品推荐

