编辑页更新其他字段未修改图片时数据库slider字段为空问题求助
问题原因
- 表单命名冲突 + 后端取值逻辑缺失:前端给文件上传控件和存储旧图的隐藏输入框都用了
name="slider[]",且后端代码仅读取了$_FILES['slider']处理新上传的图片,完全没有获取隐藏输入框中存储的旧图片名称。 - 无新图上传时代码逻辑直接返回空值:当你没有上传新图片时,
$file_post['name'][0]为空,判断逻辑不执行,$gallery_images为空数组,implode之后自然得到空字符串,存入数据库后slider字段就为空了。
解决步骤
第一步:修改前端代码,区分新图上传和旧图存储的字段名
把隐藏输入框的name属性改为old_slider[],避免和文件上传控件重名:
<div class="row"> <?php $sliders=explode(",", $companyInfo['slider']); foreach ($sliders as $key => $h) {?> <div class="col-xxl-4 col-xl-4 col-lg-4 col-md-4 mb-3"> <div class="upload_doc"> <input type="file" name="slider[]" class="fileupload noofslider"> <div class="uploadInfo"> <div class="upload_icon"></div> </div> <div class="previewImage"></div> <div class="afteruploadedImage uploadedCompany"> <img src="assets/images/uploads/sliders/<?php echo $h;?>" alt="" class="singlePreview" /> <input type="hidden" name="old_slider[]" value="<?php echo $h;?>"></div> </div> </div> <?php } ?> </div> <input type="text" name="name"> <!--我正在更新这个字段-->
第二步:修改后端处理逻辑,兜底保留旧图片数据
先读取旧图片数组,有新上传的图片时对应替换旧数组的对应位置值,没有新图就直接用旧数组的值:
/*多轮播图处理*/ // 先获取存储的旧图片数组 $old_sliders = isset($_POST['old_slider']) ? $_POST['old_slider'] : []; $file_post = $_FILES['slider']; if($file_post['name'][0]!=''){ $file_ary = array(); $file_count = count($file_post['name']); $file_keys = array_keys($file_post); for ($i=0; $i<$file_count; $i++) { // 跳过没有上传新文件的位置 if(empty($file_post['name'][$i])) continue; foreach ($file_keys as $key) { $file_ary[$i][$key] = $file_post[$key][$i]; } $location='assets/images/uploads/sliders/'; if($r_value =resizeImage($file_ary[$i], $location, 800)){ // 替换对应下标的旧图片 $old_sliders[$i] = $r_value; } } } // 最终入库的slider值用处理后的旧数组合并 $allsliders = implode(",",$old_sliders);
可选优化点
- 如果需要支持删除旧图,可以加删除按钮,点击时移除对应的
old_slider隐藏输入框即可 - 可以加额外的文件格式、大小校验,避免上传失败导致数据异常
内容的提问来源于stack exchange,提问作者user9437856
相关产品推荐
相关产品推荐

