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 JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
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 JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
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 de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 rentre
Code : Sélectionner tout - Visualiser dans une fenêtre à part $request->document_upload_new_.=$idPJ
Ca fonctionne, mais juste pour le premier formulaire évidemment..
Code : Sélectionner tout - Visualiser dans une fenêtre à part $request->document_upload_new_1
J'ai également essayé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Partager