Json probleme de boucle
Résolu/Fermé
tomeck
Messages postés
12
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
29 octobre 2015
-
9 déc. 2014 à 13:42
tomeck Messages postés 12 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 29 octobre 2015 - 14 déc. 2014 à 23:08
tomeck Messages postés 12 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 29 octobre 2015 - 14 déc. 2014 à 23:08
5 réponses
jordane45
Messages postés
38312
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
9 déc. 2014 à 14:31
9 déc. 2014 à 14:31
Bonjour,
Déjà...
Tu sépares le PHP de tes scripts Javascript...
Là .. tu recréé chaque FUNCTION dans ta boucle.... donc à chaque tour .. il remet à nouveau les différentes fonctions.....
Evite aussi de fermer/ouvrir des balises PHP partout.... ( ?> <?php ...)
Ca devrait donner quelque chose de ce genre :
Déjà...
Tu sépares le PHP de tes scripts Javascript...
Là .. tu recréé chaque FUNCTION dans ta boucle.... donc à chaque tour .. il remet à nouveau les différentes fonctions.....
Evite aussi de fermer/ouvrir des balises PHP partout.... ( ?> <?php ...)
Ca devrait donner quelque chose de ce genre :
<?php include ("../../base.php"); $sql = "SELECT id, session, pseudo FROM pourvoir WHERE pseudo='subtomek' ORDER BY id "; $req = $bdd->query($sql); $plonge = array(); while ($donnees = $req->fetch()){ $sql1 = "SELECT id, id_pseudo, site, latitude, longitude FROM carnet WHERE id_pseudo = ? ORDER BY id"; $reponse = $bdd->prepare($sql1); $reponse->execute(array($donnees['id'])); while ($donnee = $reponse->fetch()){ $plonge[]= array('lat'=>array($donnee['latitude']), 'lng'=>array($donnee['longitude'])); } $reponse->closeCursor(); } $req->closeCursor(); //Génération du JSON $plonge_json = json_encode($plonge); ?> <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script> <script type="text/javascript"> var tableauMarqueurs = [ <?php print $plonge_json;?> ]; var maCarte; var zoneMarqueurs = new google.maps.LatLngBounds(); function initialisation() { var optionsCarte = { zoom: 6, center: new google.maps.LatLng( 41.389982, 08.688877 ), mapTypeId: google.maps.MapTypeId.SATELLITE } maCarte = new google.maps.Map( document.getElementById("EmplacementDeMaCarte"), optionsCarte ); for( var i = 0, I = tableauMarqueurs.length; i < I; i++ ) { ajouteMarqueur( tableauMarqueurs[i] ); } maCarte.fitBounds( zoneMarqueurs ); } function ajouteMarqueur( latlng ) { var latitude = latlng.lat; var longitude = latlng.lng; var optionsMarqueur = { map: maCarte, position: new google.maps.LatLng( latitude, longitude ) }; var marqueur = new google.maps.Marker( optionsMarqueur ); zoneMarqueurs.extend( marqueur.getPosition() ); } google.maps.event.addDomListener( window, 'load', initialisation ); </script>
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
9 déc. 2014 à 14:45
9 déc. 2014 à 14:45
Bonjour,
En effet, ta boucle semble englober beaucoup trop de code, y compris toutes les fonctions javascript.
De plus, à chaque itération de la boucle, la variable tableauMarqueurs est
écrasée par la valeur suivante. Pour ajouter un élément en bout de tableau, il faut utiliser la fonction javascript push().
Du coup ton code deviendrait :
En supprimant également l'accolade juste avant
Xavier
En effet, ta boucle semble englober beaucoup trop de code, y compris toutes les fonctions javascript.
De plus, à chaque itération de la boucle, la variable tableauMarqueurs est
écrasée par la valeur suivante. Pour ajouter un élément en bout de tableau, il faut utiliser la fonction javascript push().
Du coup ton code deviendrait :
[...] ?> var tableauMarqueurs = []; <?php while ($donnee = $reponse->fetch()) { $plonge = array('lat'=>array($donnee['latitude']), 'lng'=>array($donnee['longitude'])); $plonge_json = json_encode($plonge); ?> tableauMarqueurs.push(<?php print $plonge_json;?>); <?php } ?> var maCarte; var zoneMarqueurs = new google.maps.LatLngBounds(); [...]
En supprimant également l'accolade juste avant
$reponse->closeCursor();
Xavier
jordane45
Messages postés
38312
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
9 déc. 2014 à 14:50
9 déc. 2014 à 14:50
Autant générer son Array dans le PHP puis de l'utiliser dans son javascript (comme je l'ai proposé juste avant) plutot que d'inclure encore du JS DANS son PHP ... Non ?
Enfin.. ce n'est que mon avis ......(perso.. je préfère séparer le code JS du code PHP ....)
Enfin.. ce n'est que mon avis ......(perso.. je préfère séparer le code JS du code PHP ....)
tomeck
Messages postés
12
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
29 octobre 2015
1
9 déc. 2014 à 15:02
9 déc. 2014 à 15:02
merci pour vos réponse,
avec le code de Reivax962 cela fonctionne.
j'admet volontiers que mon encodage n'est pas très conventionnels ou lisible.
jordane45, avec ton code ma carte s'affiche en gris, je regarde cela car effectivement je dois peut etre prendre l'habitude de séparer mes code PHP et Java.
en tout cas un grand merci, cela fonctionne .
il me reste pas mal de chemin pour comprendre le javascript.
Merci
tomeck
avec le code de Reivax962 cela fonctionne.
j'admet volontiers que mon encodage n'est pas très conventionnels ou lisible.
jordane45, avec ton code ma carte s'affiche en gris, je regarde cela car effectivement je dois peut etre prendre l'habitude de séparer mes code PHP et Java.
en tout cas un grand merci, cela fonctionne .
il me reste pas mal de chemin pour comprendre le javascript.
Merci
tomeck
jordane45
Messages postés
38312
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
9 déc. 2014 à 15:26
9 déc. 2014 à 15:26
J'ai fait le code sans le tester.. il peut y avoir des erreurs en effet...
A la limite.. ajoute un print_r histoire de voir la tête de l'array PHP ...
A la limite.. ajoute un print_r histoire de voir la tête de l'array PHP ...
//Génération du JSON $plonge_json = json_encode($plonge); // Un petit Print.. histoire de voir ce que contient l'array ... print_r($plonge_json);
tomeck
Messages postés
12
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
29 octobre 2015
1
14 déc. 2014 à 22:03
14 déc. 2014 à 22:03
bonjour,
je me permet de revenir vers vous, car après plusieurs jours sur internet et forums je suis de nouveau dans une impasse.
Cette fois c'est sur les info bulles des marqueurs que sa bloque.
voici le code (qui fonctionne), ou l'info bulle est le même pour tous les marqueurs:
Mais lorsque je change le code pour récupérer ma variable à afficher dans l'info bulle,
seulement 1 marqueurs s'affiche (et en plus sans info bulle!)
voici ce que je change:
A la place de :
Une nouvelle fois un probleme de boucle (je pense), mais je n'arrive pas trouver l'endroit.
merci de votre aide,
tomeck
je me permet de revenir vers vous, car après plusieurs jours sur internet et forums je suis de nouveau dans une impasse.
Cette fois c'est sur les info bulles des marqueurs que sa bloque.
voici le code (qui fonctionne), ou l'info bulle est le même pour tous les marqueurs:
<script type="text/javascript"> function initialisation() { <?php include ("../../base.php");?> <?php $req = $bdd->query('SELECT id, session, pseudo FROM pourvoir WHERE pseudo="'.$pseudo.'" ORDER BY id '); while ($donnees = $req->fetch()) { ?> <?php $reponse = $bdd->prepare('SELECT id, id_pseudo, site, latitude, longitude FROM carnet WHERE id_pseudo = ? ORDER BY id'); $reponse->execute(array($donnees['id'])); ?> var tableauMarqueurs = []; <?php while ($donnee = $reponse->fetch()) { $plonge = array('lat'=>array($donnee['latitude']), 'lng'=>array($donnee['longitude']), 'site'=>array($donnee['site'])); $plonge_json = json_encode($plonge); ?> tableauMarqueurs.push(<?php print $plonge_json;?>); <?php } ?> var marqueur, infoBulle, maCarte, i, nb = tableauMarqueurs.length; maCarte = new google.maps.Map( document.getElementById("EmplacementDeMaCarte"), { 'zIndexBulle':1, 'zoom': 8, 'center': new google.maps.LatLng( 41.389982, 08.688877 ), 'mapTypeId': google.maps.MapTypeId.SATELLITE }); for (i=0; i < nb; i++) { marqueur = new google.maps.Marker( { 'position': new google.maps.LatLng( tableauMarqueurs[i].lat, tableauMarqueurs[i].lng), 'map' : maCarte, 'icon' : "http://localhost/new_page_index/espace membre/carnet/pavillon.png" }); infoBulle = new google.maps.InfoWindow({ 'content' : 'essai' }); ( function( bulle){ google.maps.event.addListener(marqueur, 'click', function() { var map = this.getMap(); var index = map.zIndexBulle ++; // incrémentation et récupération bulle.setZIndex( index); bulle.open(map, this); }); })(infoBulle); } } google.maps.event.addDomListener( window, 'load', initialisation ); <?php } $reponse->closeCursor(); ?> </script>
Mais lorsque je change le code pour récupérer ma variable à afficher dans l'info bulle,
seulement 1 marqueurs s'affiche (et en plus sans info bulle!)
voici ce que je change:
infoBulle = new google.maps.InfoWindow({ 'content' : tableauMarqueurs[i].site });
A la place de :
infoBulle = new google.maps.InfoWindow({ 'content' : 'essai' });
Une nouvelle fois un probleme de boucle (je pense), mais je n'arrive pas trouver l'endroit.
merci de votre aide,
tomeck
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
tomeck
Messages postés
12
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
29 octobre 2015
1
14 déc. 2014 à 23:08
14 déc. 2014 à 23:08
ça y est!!!!!!!!
j'ai trouver, c'était dans ma création de tableau array.
il fallait noter:
merci et à bientot,
en espérant qu'un jours se soit moi qui vous aident.
tomeck
j'ai trouver, c'était dans ma création de tableau array.
il fallait noter:
$plonge = array('lat'=>array($donnee['latitude']), 'lng'=>array($donnee['longitude']), 'site'=> ''.$donnee['site'].'' ); $plonge_json = json_encode($plonge);
merci et à bientot,
en espérant qu'un jours se soit moi qui vous aident.
tomeck