首页 > 解决方案 > Laravel:更新表单保持当前图像而不输入新图像不起作用

问题描述

我有一个带有图像字段的表单,插入所有带有图像的字段都可以正常工作

但是在编辑表单->更新新图像时,我使用取消链接功能删除以前的图像并使用新图像进行更新。问题是如果我不上传新图片并提交它不起作用的表单。

但是如果没有上传新图像,我想保留当前图像。我尝试了很多方法,甚至不使用unlink功能,但无法找到任何解决方案。请帮助我,我真的需要这个解决方案。提前致谢

这是我在控制器中的更新功能

 public function Update(Request $request, $id){


        $PreviousPic = $request->Prev_pic;

        $data = array();
        $data['student_name'] = $request->student_name;
        $data['matric_no'] = $request->matric_no;
        $data['programme_name'] = $request->programme_name;
        $data['faculty_name'] = $request->faculty_name;
        $data['admission_year'] = $request->admission_year;
        $data['contact_no'] = $request->contact_no;

        $image = $request->file('pro_pic');

        if ($image){ 
            unlink($PreviousPic);
            $image_name = date('dmy_H_s_i');
            $ext = strtolower($image->getClientOriginalExtension());
            $imageFullName = $image_name.'.'.$ext;
            $uploadPath = 'media/';
            $imageURL = $uploadPath.$imageFullName;
            $success = $image->move($uploadPath,$imageFullName);

        $data['pro_pic'] = $imageURL;
        $Stdata = DB::table('students')->where('id', $id)->update($data);

        return redirect()->route('student.index')
                         ->with('success','Updated! The Student Data Updated Successfully');

        }
    }

这是我的编辑表单图像字段

<div class="form-group">
  <label class="col-md-4 control-label" >Image</label>
  <div class="col-md-5 inputGroupContainer">  
  <div class="input-group">
  <span class="input-group-addon"><i class="glyphicon glyphicon-picture"></i></span>
  <div class="upload-btn-wrapper">
  <button class="btn">Upload a New Image</button>
  <input type="file" name="pro_pic" />
  </div>   
  </div>
  </div>
  </div>

<div class="form-group">
    <label class="col-md-4 control-label">Current Image </label>
    <div class="col-md-5 inputGroupContainer">
    <img src="{{ URL::to($StudentData->pro_pic)}}" height="150px" width="190px">
    <input type="hidden" name="Prev_pic" value="{{$StudentData->pro_pic}}">
    </div>
</div>

使用它我可以上传新图片删除旧图片。但是,如果我将Upload a New Image字段留空并提交表单,则不会提交表单。

所以,我希望如果我上传新图片,它现在可以正常工作,如果我不上传新图片,当前图片将保留并提交表单。

#我正在使用 Laravel 7

标签: phplaravellaravel-7

解决方案


我已经按预期找到了答案

 public function Update(Request $request, $id){

        $PreviousPic = $request->Prev_pic;

        $data = array();
        $data['student_name'] = $request->student_name;
        $data['matric_no'] = $request->matric_no;
        $data['programme_name'] = $request->programme_name;
        $data['faculty_name'] = $request->faculty_name;
        $data['admission_year'] = $request->admission_year;
        $data['contact_no'] = $request->contact_no;

        $image = $request->file('pro_pic');

        if ($image != null){ 
            unlink($PreviousPic);
            $image_name = date('dmy_H_s_i');
            $ext = strtolower($image->getClientOriginalExtension());
            $imageFullName = $image_name.'.'.$ext;
            $uploadPath = 'media/';
            $imageURL = $uploadPath.$imageFullName;
            $success = $image->move($uploadPath,$imageFullName);

        $data['pro_pic'] = $imageURL;
        $Stdata = DB::table('students')->where('id', $id)->update($data);

        return redirect()->route('student.index')
                         ->with('success','Updated! The Student Data Updated Successfully');

        }else{
            $Stdata = DB::table('students')->where('id', $id)->update($data);

        return redirect()->route('student.index')
                         ->with('success','Updated! The Student Data Updated Successfully');
        }
    }

只需使用if else语句即可找到解决方案,并且效果很好。


推荐阅读