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 :

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);
                }
            }
        }
    }
Si par exemple à la place de

Code : Sélectionner tout - Visualiser dans une fenêtre à part
$request->document_upload_new_.=$idPJ
Je rentre

Code : Sélectionner tout - Visualiser dans une fenêtre à part
$request->document_upload_new_1
Ca fonctionne, mais juste pour le premier formulaire évidemment..

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.