Json probleme de boucle
Résolu
tomeck
Messages postés
12
Date d'inscription
Statut
Membre
Dernière intervention
-
tomeck Messages postés 12 Date d'inscription Statut Membre Dernière intervention -
tomeck Messages postés 12 Date d'inscription Statut Membre Dernière intervention -
bonjour,
le but: à l'ouverture de la page, une carte google map apparait avec les markers correspondants aux Point GPS entrés dans une Bdd (Markers variable).
Probleme: la carte s'affiche bien mais avec UN seul markers. En l'occurrence le dernier du tableau créé et encodé. Les autres ne s'affichent pas.
voici le code:
je pense que la boucle ne s'effectue pas correctement, mais ne trouve pas de solution pour le moment.
Je continue de chercher mais si quelqu'un peut me mettre sur une piste,
merci
tomeck
le but: à l'ouverture de la page, une carte google map apparait avec les markers correspondants aux Point GPS entrés dans une Bdd (Markers variable).
Probleme: la carte s'affiche bien mais avec UN seul markers. En l'occurrence le dernier du tableau créé et encodé. Les autres ne s'affichent pas.
voici le code:
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script> <script type="text/javascript"> <?php include ("../../base.php");?> <?php $req = $bdd->query('SELECT id, session, pseudo FROM pourvoir WHERE pseudo="subtomek" 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'])); while ($donnee = $reponse->fetch()) { ?> <?php $plonge = array('lat'=>array($donnee['latitude']), 'lng'=>array($donnee['longitude'])); $plonge_json = json_encode($plonge); ?> 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 ); <?php } $reponse->closeCursor(); ?> <?php } $req->closeCursor(); ?> </script>
je pense que la boucle ne s'effectue pas correctement, mais ne trouve pas de solution pour le moment.
Je continue de chercher mais si quelqu'un peut me mettre sur une piste,
merci
tomeck
5 réponses
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>
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
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
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
ç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