CodeIgniter多图上传并存数据库无报错无结果问题排查
以下是你代码中存在的问题和对应的修复方法:
表单提交地址错误
视图中form标签的action属性调用
base_url()时没有加echo,导致表单提交地址为空,请求根本没有触发控制器方法,所以整个逻辑都不会执行。
修复:将视图中form标签替换为<form action="<?php echo base_url("admin/products/tambah_proses") ?>" method="post" enctype="multipart/form-data" >上传方法参数错误
循环中你已经将多文件的
$_FILES结构重构为单文件的userfile结构,调用do_upload()时不需要加[]后缀,当前参数错误导致上传类找不到对应的文件字段,上传一直失败。
修复:将控制器中$this->upload->do_upload('userfile[]');修改为
$this->upload->do_upload('userfile');上传路径配置问题
当前使用的相对路径很容易出现解析错误,同时需要确认
upload/images目录已存在,且有写入权限(Linux环境下建议权限设为755)。建议使用CodeIgniter自带的FCPATH常量(指向项目根目录的绝对路径)拼接路径,避免解析异常。
修复:修改set_upload_options中的路径配置:$config['upload_path'] = FCPATH . 'upload/images/';注意路径末尾需要加斜杠。
缺少错误判断逻辑
当前代码没有判断上传是否成功,就算上传失败也会继续执行后续入库逻辑,没有错误提示自然无法定位问题。可以在
do_upload执行后增加错误判断,调试阶段直接输出错误即可:if (!$this->upload->do_upload('userfile')) { echo $this->upload->display_errors(); exit; }入库逻辑鲁棒性不足
如果用户上传的文件少于4个,直接取
$dataInfo[0]到$dataInfo[3]会抛出数组下标不存在的错误,建议做兼容处理,没上传的对应字段存空值即可。同时需要确认控制器中已经加载了Product_model,否则入库操作会失败。可选排查点
如果你的项目开启了CSRF保护,需要在表单中加入CSRF隐藏字段,否则提交请求会被CodeIgniter直接拦截,CodeIgniter3可以在表单中加入以下代码:
<?php echo form_hidden($this->security->get_csrf_token_name(), $this->security->get_csrf_hash()); ?>
内容的提问来源于stack exchange,提问作者William Sanders

