使用模态文件上传表单进行更新

问题描述 投票:0回答:1

所以,我有一个模态形式。对于插入功能,使用常规形式即可工作。 但在模态形式的更新函数中,方案运行并出现更新成功的警报,但没有发生任何变化。

这是带有按钮的模态调用

<button type="button" class="btn btn-warning" data-toggle="modal" data-target="#editsop{{$data->id_sop}}"><i class="fa fa-pencil"></i></button>

这是我的模态形式

    @foreach ($sop as $data)
<div class="modal fade" id="editsop{{$data->id_sop}}">
  <div class="modal-dialog modal-lg-6">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="editsopModal">Update SOP</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <form action="/sop/update/{id_sop}" method="POST" enctype="multipart/form-data">
          @csrf
          <div class="content">
            <div class="row">
              <div class="col-sm-12">
                <div class="form-group">
                  <input name="sop" type="text" class="form-control @error('sop') is-invalid @enderror" value="{{ $data->sop }}">
                  <div class="invalid-feedback">
                    @error('sop')
                    {{ $message }}
                    @enderror
                  </div>
                </div>
                <div class="form-group">
                    <div class="div-col-sm-6">
                        <img src="{{ url('foto_sop/'.$data->file_sop) }}" width="100px">
                    </div>
                    <input name="file_sop" type="file" class="form-control @error('file_sop') is-invalid @enderror" value="{{ $data->file_sop }}">
                    <div class="invalid-feedback">
                        @error('file_sop')
                        {{ $message }}
                        @enderror
                    </div>
                </div>
              </div>
            </div>
          </div>
          <div class="modal-footer">
            <button type="submit" class="btn btn-primary">Update</button>
            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
          </div>
        </form>
      </div>
    </div>
  </div>
</div>
@endforeach

我的更新控制器

public function update($id_sop)
{
    Request()->validate(
        [
            'file_sop' => 'mimes:pdf,jpg,jpeg,bmp,png,mp4|max:100000'
        ],
        [
            'file_sop.mimes' => 'Extension File Harus .pdf, .jpg, .jpeg, .bmp, .png, atau .mp4',
            'file_sop.max' => 'Maximal ukuran file 100 MB'
        ]
    );

    //jika ingin ganti berkas 
    if (Request()->file_sop <> "") {
        //upload gambar/foto
        $file = Request()->file_sop;
        $fileName = Request()->sop . '.' . $file->extension(); //rename nama berdasarkan nama file_sop
        $file->move(public_path('file_sop'), $fileName);

        $data = [
            'sop' => Request()->sop,
            'file_sop' => $fileName,
            'created_at' => Request()->created_at,
            'updated_at' => Request()->updated_at
        ];

        $this->SopModel->editData($id_sop, $data);
    } else {
        $data = [
            'sop' => Request()->sop,
            'created_at' => Request()->created_at,
            'updated_at' => Request()->updated_at
        ];
    
        $this->SopModel->editData($id_sop, $data);
    }
    return redirect()->route('sop')->with('pesan', 'Data Berhasil Di Update !!!');
}

这是我的更新模式

public function editData($id_sop, $data)
{
    DB::table('sop')
        ->where('id_sop', $id_sop)
        ->update($data);
}

最后这是路线更新

Route::post('/sop/update/{id_sop}', [App\Http\Controllers\SOPController::class, 'update']);

那么,我认为我的错误在哪里,我尝试了一晚上,但仍然没有找到问题所在,谢谢

php laravel model-view-controller file-upload bootstrap-modal
1个回答
0
投票

您没有正确地将

id_sop
传递给更新函数。在表单操作中,您使用了占位符
{id_sop}
,但没有将其替换为实际的
id_sop
值。

<form action="/sop/update/{{$data->id_sop}}" method="POST" enctype="multipart/form-data">

这样,

id_sop
将正确传递到控制器中的更新函数。

此外,在更新函数中,您使用

Request()
来获取请求数据。但是,您应该在函数定义中使用
request
参数来获取请求数据。以下是您应该如何定义更新函数:

public function update(Request $request, $id_sop)

然后,您可以使用

$request
代替
Request()
来获取请求数据:

if ($request->file_sop <> "") {
    // your code here
}
© www.soinside.com 2019 - 2024. All rights reserved.