为什么图片的上传只适用于第一个表单?



我有一个包含多个项目的页面,每个项目都有一个表单,允许用户更新这些项目。

每个条目的表单包含一个图像文件输入和其他输入。

当我通过更新其他输入来更新一个项目时,它工作得很好,但是当我尝试更新一个项目的图像时,它只对第一个项目起作用,否则它什么也不做。

下面是html表单中包含输入文件的部分:

<div id="modifier_emlement_{{$elem->id}}">
<form class="form-horizontal" action="/Clients/{{$client->nom}}/Batiments/{{$batiment->id}}/Consulter/Element/{{$elem->id}}" method="POST" enctype="multipart/form-data">
@csrf
@method('PUT')
<div class="un_element col-xs-12 col-sm-12 col-md-12 col-lg-6">
<div class="col-xs-4 col-sm-4 col-md-4 col-lg-4 ">
<label for="image_elem"> 
<img class="rounded" style="max-width: 100%; border-radius: 5px;" src="{{$elem->lien_photo}}" alt="image de l'element">
</label>
<input type="file" id="image_elem" name="image_elem" accept="image/*" class="form-control" style="display:none;">
</div>

这里是html表单中带有提交按钮的部分:

<div class="col-xs-4 col-sm-4 col-md-4 col-lg-4">
<input type="hidden" id="id_batiment" name="id_batiment" value="{{$batiment->id}}">
<input type="hidden" id="groupe" name="groupe" value="{{$groupe}}">
<button type="submit" class="btn btn-primary"> Enregistrer </button>
</div>
</form>

这是我的控制器内部调用的函数:

public function update(Request $request, $client, $id_bat, $id)
{
dd($request->file('image_elem'));
$request->validate([
'image_elem' => 'mimes:jpg,png,jpeg|max:5048'
]);

if($request->hasFile('image_elem')){ //(isset($request->image_elem)){
$newImageName =time().'-elem'. $id.'.'. $request->image_elem->extension();

$request->image_elem->move(public_path('images'), $newImageName);
$lien = '/images/'.$newImageName;
}else{
$lien ="/img/placeholder-image.jpg";
}

$element = elements::where('id', $id)
->update([
'id_batiment' => $request->input('id_batiment'),
'lien_photo' => $lien,
'groupe' => $request->input('groupe'),
'intitule' => $request->input('intitule'),
'description' => $request->input('description'),
'etat' => $request->input('note_etat'),
'obsolescence' => $request->input('note_obsolescence'),
'quantite' => $request->input('quantite'),
'unite' => $request->input('unite'),
'date_element' => $request->input('date_element')
]);
$batiment = batiments::find($id_bat)->first();
$leclient = entreprises::where('nom',$client)->first();

return redirect('/Clients/'.$leclient->nom.'/Batiments/'.$id_bat.'/Consulter')->with('client', $leclient, 'batiment', $batiment);
}

为了以防万一,下面是我在我的页面中生成多个项目的方法:

@forelse($leselements as $elem)
<div class="row espace-bas">
@include('layouts.element')
</div>
@endif
@empty
@endforelse

正如您在控制器函数中看到的那样,我确实尝试了DD图像输入,并且只有在更新第一个项目时才有图像,否则它返回null。

在寻找其他线程的答案后,我试图改变变量upload_max_filesize和post_max_size在我的php.ini为了允许上传超过500MO,但它没有帮助。

我还尝试在输入文件上放置一个唯一的id,但DD不返回任何文件(即使是第一种形式)id为

的Dd

我知道为什么它不起作用了。标签没有引用唯一的id。在这之后:

<label for="image_elem"> 
<img class="rounded" style="max-width: 100%; border-radius: 5px;" src="{{$elem->lien_photo}}" alt="image de l'element">
</label>
<input type="file" id="image_elem" name="image_elem" accept="image/

我试过了:

<label for="image_elem"> 
<img class="rounded" style="max-width: 100%; border-radius: 5px;" src="{{$elem->lien_photo}}" alt="image de l'element">
</label>
<input type="file" id="image_elem{{$elem->id}}" name="image_elem" accept="image/

但是它不起作用,因为id不相同。下面是答案:

<label for="image_elem{{$elem->id}}"> 
<img class="rounded" style="max-width: 100%; border-radius: 5px;" src="{{$elem->lien_photo}}" alt="image de l'element">
</label>
<input type="file" id="image_elem{{$elem->id}}" name="image_elem" accept="image/

最新更新