IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Laravel PHP Discussion :

Upload fichier avec plusieurs formdata


Sujet :

Laravel PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    août 2019
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : août 2019
    Messages : 44
    Points : 35
    Points
    35
    Par défaut Upload fichier avec plusieurs formdata
    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.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    août 2019
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : août 2019
    Messages : 44
    Points : 35
    Points
    35
    Par défaut En effet c'était très con...
    Désolé de vous avoir dérangé..pour si peu..^^ la fatigue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        public function updateFileNew(int $id,$idPJ, Request $request){
            $f = $request['document_upload_new_'.$idPJ];
            if($f){
                foreach($f 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);
                    }
                }
            }
        }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Upload fichiers avec Applet vers serveur Asp .net
    Par rouliow dans le forum ASP.NET
    Réponses: 4
    Dernier message: 20/05/2008, 17h47
  2. upload fichier avec flash
    Par escteban dans le forum Flash
    Réponses: 2
    Dernier message: 13/04/2007, 13h10
  3. Plusieurs formulaires dans un fichier avec plusieurs méthodes post
    Par cyberdevelopment dans le forum Langage
    Réponses: 2
    Dernier message: 17/08/2006, 15h04
  4. [Upload] upload fichiers avec multiple submit
    Par dolf13 dans le forum Langage
    Réponses: 17
    Dernier message: 06/06/2006, 01h20
  5. [AJAX] upload fichiers avec AJAX
    Par jibouze dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 08/12/2005, 21h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo