Yo !
Mon problème est assez simple et je pense que vous allez rapidement trouver la solution..
J'ai un formulaire principal avec plusieurs formulaire crées dynamiquement.
Lorsque un utilisateur ajoute un produit, il lui associe des pièces jointes. Chaque produit a ses propres PJ.
Le problème se pose quand je veux enregistrer les PJ.
Le code :
Ajout du formulaire pour les PJs liées au produit
Code:
1
2
3
4
5 $("#new__form__pj").append(` <form method="post" id="piece_jointe_new_${id_pj_d}" enctype="multipart/form-data"> <div class="contactEl"><label>Pièces jointes</label><input type="file" name="document_upload_new_${id_pj_d}[]" id="document_upload_new_${id_pj_d}" multiple="multiple"></div> </form> `)
Création du projet / produit / PJ
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 //création projet / produit if(projet_new !== ""){ $.each(projet_new,function (index,pro) { let dataProjet = { nom_projet:pro.nom_projet, id_client:$("#client_new").val() } $.ajax({ method:'POST', url: `./projet/createNew`, data: dataProjet, success:(data)=>{ idProjet = data.id; if(produit_new !== ''){ $.each(produit_new,function (index,p) { let dataProduit = { id_projet:idProjet, nom_produit:p.nom_produit, description:p.description, prix_vente:p.prix_vente, prix_achat : p.prix_achat, minute:p.minute } let formD = new FormData(); let TotalImages = $(`#document_upload_new_${p.id_pj_d}`)[0].files.length; //Total Images let images = $(`#document_upload_new_${p.id_pj_d}`)[0]; let name = ''; for (let i = 0; i < TotalImages; i++) { formD.append(`document_upload_new_${p.id_pj_d}[]`, images.files[i]); } formD.append('TotalImages', TotalImages); for (let pair of formD.entries()) { console.log('Formdata :'+pair[0]+ ', ' + pair[1]); } $.ajax({ method:'PUT', url:'./produit/create', data: dataProduit, success:(data)=>{ $.ajax({ method: 'POST', url: `./produit/${data.id}/uploadfileNew/${p.id_pj_d}`, data: formD, contentType: false, processData: false, success: function (images) { alert('fichier upload') //$("#piece_jointe_new")[0].reset(); }, error: function (data) { console.log(data) alert(`Upload des fichiers échoués`) //$("#piece_jointe_new")[0].reset(); } }) } }) }) } } }) }) }
Et le PHP pour les PJs :
Si par exemple à la place deCode:
1
2
3
4
5
6
7
8
9
10
11
12 public function updateFileNew(int $id,$idPJ, Request $request){ if($request->document_upload_new_.=$idPJ){ foreach($request->document_upload_new_.=$idPJ as $image){ $extention = $image->getClientOriginalExtension(); $name = $image->getClientOriginalName(); $newName= 'document-'.$id.'-'.time().rand(1,1000); if($image->move(public_path('/documents/produits/'.$id.'/'),'document-'.$newName.'.'.$extention)){ Produit::uploadFile($id,$newName.'.'.$extention,$name); } } } }
Je rentreCode:$request->document_upload_new_.=$idPJ
Ca fonctionne, mais juste pour le premier formulaire évidemment..Code:$request->document_upload_new_1
J'ai également essayé :
Code:
1
2
3
4
5 $request->document_upload_new.'_'.$idPJ //ou $request->${document_upload_new_.$idPJ} // ou encore $request->${"document_upload_new_" . $idPJ}
J'ai l'impression que la solution est très basique mais bizarrement je sèche..
Merci de m'avoir lu.