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

Laravel更新表单未重传图片导致数据库图片字段为空如何解决

核心原因

type="file" 类型的输入框无法通过value属性预设值是浏览器的安全限制,目的是避免站点恶意窃取用户本地文件,因此你无法通过file输入框提交原有图片值,按以下步骤调整即可:

第一步:修改表单代码

新增隐藏域传递原有图片地址,同时可删除file输入框无效的value属性:

<form action="/admin/settings/why-us/update/{{$data->id}}" enctype="multipart/form-data" method="POST">
@csrf
<input type="text" class="form-control" name="title" value="{{$data->title}}">
<!-- 新增隐藏域存储原有图片地址 -->
<input type="hidden" name="old_image" value="{{$data->image}}">
<input type="file" class="form-control" name="image">
<button type="submit"  class="btn btn-success py-2 px-4 text-white">Update changes</button>
</form>

第二步:修改控制器逻辑

默认使用旧图片地址,仅当用户上传新图片时才更新图片字段:

public function updateWhyusPageSetting(Request $request,$id)
{
    $title = $request->input('title');
    // 先取旧图片地址作为默认值
    $image_upload = $request->input('old_image');

    if($request->hasFile('image')) {
        $image = $request->file('image');
        $filename = $image->getClientOriginalName();
        $image->move(public_path('/frontend/images/'), $filename);
        // 上传了新图片就替换为新文件名
        $image_upload = $filename;
        // 可选:如果需要清理旧图片,可加下面的代码
        // $old_image_path = public_path('/frontend/images/').$request->input('old_image');
        // if(file_exists($old_image_path)) {
        //     unlink($old_image_path);
        // }
    }

    DB::table('features')
      ->where('id', $id)
      ->update([
          'title'  => $title, 
          'image' => $image_upload
      ]);

    \Session::flash('flash_message', __('Why us data updated'));
    \Session::flash('flash_type', 'success');

    return redirect()->back();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:45:05