Lara_Love's avatar

image upload in edit

If 3 images have already been created for the post. We have 3 image selection fields for editing. The commented part does not work for selecting the image. i use this form for edit

<form action="{{ route('housebuild.update',$items->id) }}" method="POST" enctype="multipart/form-data">
    @csrf
    @method('PUT')
            <input type="text" name="title" class="form-control" value="{{ $items->title }}">
            <input type="text" name="wall" class="form-control" value="{{ $items->wall }}">
            <input type="text" name="sailing" class="form-control" value="{{ $items->sailing }}">
            <input type="text" name="adres" class="form-control" value="{{ $items->adres }}">
            <textarea id="editor" type="text" name="desc" class="form-control" rows="10">
              {{ $items->desc }}
            </textarea>
            <div class="form-group">
                {{--<input type="file" name="images[]" id="inputImage" multiple class="form-control @error('images') is-invalid @enderror">--}}
                {{--@error('images')--}}
                {{--<span class="text-danger">{{ $message }}</span>--}}
                {{--@enderror--}}
                @foreach ($items->buildimages as $image)
                <input type="file" name="images[{{ $image->id }}]" id="inputImage" multiple class="form-control @error('images') is-invalid @enderror">
                @error('images')
                <span class="text-danger">{{ $message }}</span>
                @enderror
                @endforeach
            </div>
        <x-BtnSend/>
</form>

and controller

 public function update(Request $request, $id)
    {
        $validatedData = $request->validate([
            'title' => 'required',
            'desc' => 'required',
            'wall' => 'required',
            'sailing' => 'required',
            'adres' => 'required',
            'images' => 'array',
            'images.*' => ['nullable', 'image']
        ]);
        $build = Build::findOrFail($id);
        foreach ($request->file('images') as $imageId => $image) {
            $destinationPath = 'image/house/build/';
            $profileImage = date('YmdHis') . "." . $image->getClientOriginalExtension();
            $resize = Image::make($image);
            $resize->resize(500, 300);
            $resize->save($destinationPath . $profileImage);
            $build->buildimages()->where('id', $imageId)->update(['image' => $profileImage]);
        }
        $build->update(Arr::except($validatedData, 'images'));
        return redirect()->route('housebuild.index')
```

https://s2.uupload.ir/files/ss_jmh2.png
0 likes
5 replies
tykus's avatar
tykus
Best Answer
Level 104

You don't need multiple attribute; you want separate file input fields so you have the ID of the image you are wanting to replace

<input type="file" name="images[{{ $image->id }}]" id="inputImage" class="form-control @error('images') is-invalid @enderror">
Lara_Love's avatar

@tykus

<input type="file" name="images[]" id="inputImage" multiple class="form-control @error('images') is-invalid @enderror">
                        @error('images')
                        <span class="text-danger">{{ $message }}</span>
                        @enderror

is beautiful and we can select many or less image for post

tykus's avatar

@LoverToHelp again that is okay if you didn’t need the ID for the image you want replaced. You could indiscriminately remove *all associated images and replace them using this approach (with some modifications to previous code)

1 like

Please or to participate in this conversation.