8723 sujets

Développement web côté serveur, CMS

Bonjour, je suis un peu nouvelle dans la programmation et je développe en PHP et html et javascript. Je rencontre un soucis avec mon foreach. dans mon foreach, je parcours un tableau de couverture en php et pour chaque couverture, je veux qu'il recupère les données dans la BDD en javascript mais le problème c'est qu'il recupère juste les données du dernier élément du tableau.

voici mon code :

[code=php][code=html]<?php
        for($i=0; $i < count($tableauAffichage); $i++) {

        ?>

           var typeCouverture = '<?PHP echo $tableauAffichage[$i]; ?>'

            console.log('couverture', typeCouverture);

         
            allPolygone = new XMLHttpRequest();

            // ici on cherche à lire la fonction qui permet de recuperer tous les polygones dans la BDD
            allPolygone.open("GET", "http://localhost/connexionsqlserver_v2/Fonctions/LireAllPolygone.php?affichage=" + typeCouverture);

           // console.log("test",typeCouverture);

            // Ici la variable allPolygine contient tous les polygones
            allPolygone.onreadystatechange = () => {
                

                //si la transaction pour recuperer tous les polygones est terminée
                if (allPolygone.readyState == 4) {

                    //si la transaction pour recuperer tous les polygones est un succès
                    if (allPolygone.status == 200) {

                        //Variable qui recupère après transformation en fichier JSON tous les polygones
                        console.log('le responseText',allPolygone.responseText)
                        let dataAllPolygone = JSON.parse(allPolygone.responseText)

                        //console.log('ApresJSON',dataAllPolygone)

                        // Je fais un foreach (je parcours) sur ma variable contenant tous les polygones ( le .region c'est parce que mon tableau c'est un tableau de region)
                        Object.entries(dataAllPolygone.region).forEach(poly => {

                            // ici je mets dans la varaible le polygone qui est parcouru 
                            regionselectionnee = myCallBack(poly[1].polygone);

                            //Variable qui recupère après transformation en fichier JSON toutes des coordonnées en fonction du polygone
                            let allCoordByPolygone = new XMLHttpRequest();

                            // ici on cherche à lire la fonction qui permet de recuperer toutes les coordonnées en fonction du polygone dans la BDD
                            allCoordByPolygone.open("GET", "http://localhost/connexionsqlserver_v2/Fonctions/LireCoordByPolygone.php?region=" + regionselectionnee);

                            //On envoie la transaction pour mettre dans la variable le resultat
                            allCoordByPolygone.send(regionselectionnee);



                            // variable qui recupère toutes les zones en fonction du polygone ( Cette variable fait une jointure entre les tables polygone et couleur )
                           let allZoneByPolygone = new XMLHttpRequest();

                            // let date='2021-03-10'


                            // ici on cherche à lire la fonction qui permet de recuperer toutes les zones en fonction du polygone dans la BDD
                            allZoneByPolygone.open("GET", "http://localhost/connexionsqlserver_v2/Fonctions/LireZoneByPoly.php?region=" + regionselectionnee + "&date=" + date + "&affichage=" + typeCouverture);

                            //On envoie la transaction pour mettre dans la variable le resultat
                            allZoneByPolygone.send(null);

                            // Ici la variable allCoordByPolygone contient toutes les coordonnées en fonction du polygone qui est rentré
                            allCoordByPolygone.onreadystatechange = () => {

                                

                                //si la transaction pour recuperer toutes les coord par polygone est terminée
                                if (allCoordByPolygone.readyState == 4) {

                                    //si la transaction pour recuperer toutes les coord par polygone est un succès
                                    if (allCoordByPolygone.status == 200) {
                                        

                                        // Ici la variable allZoneByPolygone contient toutes les zones en fonction du polygone qui est rentré
                                        allZoneByPolygone.onreadystatechange = () => {

                                            if (allZoneByPolygone.readyState == 4) {

                                                if (allZoneByPolygone.status == 200) {

                                                    let text = allZoneByPolygone.responseText
                                                    
                                                   // console.log("test",text);
                                                   
                                                  
                                                    //Variable qui recupère après transformation en fichier JSON toutes les zones
                                                    let dataAllZoneByPolygone = JSON.parse(text)

                                                    

                                                    //Variable qui recupère après transformation en fichier JSON toutes les coordonnées en fonction du polygone
                                                    let dataAllCoordByPolygone = JSON.parse(allCoordByPolygone.responseText)

                                                    //console.log("test",dataAllCoordByPolygone.coordonnees);

                                                    // On déclare la variable polygone qui va contenir notre polygone et qu'on va ajouté à la carte
                                                    let polygone = L.polygon(dataAllCoordByPolygone.coordonnees, {

                                                        color: dataAllZoneByPolygone.coord[1].couleur,
                                                        fillColor: dataAllZoneByPolygone.coord[1].couleur,
                                                        fillOpacity: 0.5,
                                                        stroke: false,
                                                        weight: 2,
                                                        lineJoin: 'round',
                                                        lineCap: 'round',
                                                    }).addTo(macarte);

                                                    // Ici on ajoute un popup pour chaque polygone ajouté à la carte
                                                    polygone.bindPopup("region: " + poly[1].polygone + "<br/> zone: " + dataAllZoneByPolygone.coord[1].zone + "<br/> g2r: " + dataAllZoneByPolygone.coord[1].g2r);

                                                }
                                            }
                                        }
                                    } else {

                                        //si la transaction pour recuperer toutes les coord par polygone n'est pas un succè
                                        console.log("reponse est", allCoordByPolygone.statusText)
                                    }

                                }
                            }


                        })
                    }

                }
                
            }

             //On envoie la transaction pour mettre dans la variable le resultat
            allPolygone.send(null);

        
        <?php
        }
        ?>

[/code][/code]
Du coup, la il va exécuter tout ce qu'il y'a dans me foreach mais juste pour le dernier élément du tableau et pourtant dans mon console.log('couverture', typeCouverture), tous les éléments sont affichés.

Je vous prie de m'aider svp.
Modifié par Ivanna (18 Mar 2021 - 12:05)
Modérateur
Salut,

Le code est un peu long je ne suis pas bien rentré dedans mais ce que tu décris m'évoque le fait qu'a chaque itération tu mets le résultat dans la même variable. Du coup le résultat est écrasé a chaque tour et tu n'a que le dernier à la fin.
Merci pour votre réponse Laurent. Le problème est que ca doit justement écraser l'ancien résultat après avoir éffectué tout ce qui était dans le foreach. mais avant déffectué ce qui était dans le foreach que ca écrase l'ancienne valeur et ca met la nouvelle
Ivanna a écrit :
Merci pour votre réponse Laurent. Le problème est que ca doit justement écraser l'ancien résultat après avoir éffectué tout ce qui était dans le foreach. mais avant déffectué ce qui était dans le foreach que ca écrase l'ancienne valeur et ca met la nouvelle


j'ai pas compris Smiley smile