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

PHP & Base de données Discussion :

[Leaflet] : markers dans PHP


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2018
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2018
    Messages : 54
    Points : 24
    Points
    24
    Par défaut [Leaflet] : markers dans PHP
    Bonjour,

    Je dispose d'une bdd "COMMUNE", "LAT", "LON"

    Pour créer mes markers dans ma carte, j'ai besoin d'une variable javascript "villes"
    qui est un tableau au format suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <script>
    villes = 
    {
    "ville1" : {lat: $lat, lon: $lon},
    "ville2" : {lat: $lat, lon: $lon},
    ...
    }

    Je sais boucler sur ma bdd pour obtenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    $georeq = "select * from ".EA_DB."_geoloc order by COMMUNE";
    $villes = array();
    if ($result = mysql_query($georeq)) {
    	$i=1;
    	$villes = "{<br />";
    	while($row = mysql_fetch_array($result))
    	{
    	$i++;
    	{
    	$villes = $villes.'"'.$commune = $row["COMMUNE"].'" : { lat: '.$lat = $row["LAT"].', lon: '.$lon = $row["LON"].' },<br />';
    	}
    	}
    	$villes = $villes.'};';
    	}

    1° Mon export php est-il construit correctement ?
    2° Sous quelle forme et de quelle manière dois-je récupérer ma variable $villes dans mon fichier javascript ?

    Merci de vos lumières

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 656
    Points
    44 656
    Par défaut
    Bonjour,
    j'aurais plutôt vu quelque chose comme pour la partie PHP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
      $pdo = new PDO("mysql:dbname=data_base;host=127.0.0.1", "user", "password");
      $stmt = $pdo->prepare("SELECT `ville`,`lat`, `lng` FROM `markers`");
      $stmt->execute();
      $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
      $json = json_encode($results);
    ?>
    et pour l'intégration des données dans le javascript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <script>
    "use strict";
    <?php
    echo "var data = " .$json. ";\n";
    ?>
    // code d'initialisation de la carte
    // ...
    // initialisation et affichage des markers
    data.forEach(function(elem) {
      var marker = L.marker([elem.lat, elem.lng], {
      }).addTo(oMap);
    });

  3. #3
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2018
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2018
    Messages : 54
    Points : 24
    Points
    24
    Par défaut
    Merci pour cette solution qui semble alléchante.

    Mais...
    1° Concernant la partie PHP, l'ensemble de mes scripts n'est pas en PDO mais encore en mysql/mysqli
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      $pdo = new PDO("mysql:dbname=data_base;host=127.0.0.1", "user", "password");
      $stmt = $pdo->prepare("SELECT `ville`,`lat`, `lng` FROM `markers`");
      $stmt->execute();
    ...

    Je ne sais pas traduire ça en mysql.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);


    2° Concernant
    Pour le JS, je ne comprends pas le début du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <script>
    "use strict";
    Cdlt

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 656
    Points
    44 656
    Par défaut
    Je ne sais pas traduire ça en mysql.
    c'est l'inverse que tu dois faire, « traduire » mysql en PDO, PDO n'étant qu'une classe PHP permettant de communiquer avec une base de données et ce indépendamment du système de gestion de celle-ci.

    Pour le JS, je ne comprends pas le début du code :
    en résumé le passage en « mode strict » va t'aider à faire moins d'erreur dans ton code.
    Le mode strict

  5. #5
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2018
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2018
    Messages : 54
    Points : 24
    Points
    24
    Par défaut
    c'est l'inverse que tu dois faire, « traduire » mysql en PDO, PDO n'étant qu'une classe PHP permettant de communiquer avec une base de données et ce indépendamment du système de gestion de celle-ci.
    Merci pour ce conseil.

    J'ai déjà lu bcp de doc sur la classe PDO.
    Malheureusement, le logiciel pour lequel j'ai besoin de cette carte est encore en mysql et comporte énormément de scripts que nous passons progressivement à msqli...
    C'est long, fastidieux.
    https://www.agha.fr/actes/carte_OSM.php.

    J'ai essayé la requête préparée mais ça ne fonctionne pas... au milieu de tous ces scripts en mysql.

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    L'équivalent mysqli procédural du bout de code proposé par NoSmoking serait quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      $mysqli = mysqli_connect('localhost', 'user', 'password', 'la_base');
      $stmt = mysqli_prepare($mysqli, "SELECT `ville`,`lat`, `lng` FROM `markers`");
      mysqli_stmt_execute($stmt);
      $mResult = mysqli_stmt_get_result($stmt);
      $results = mysqli_fetch_all($mResult, MYSQLI_ASSOC);
      $json = json_encode($results);

  7. #7
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2018
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2018
    Messages : 54
    Points : 24
    Points
    24
    Par défaut
    Merci pour cette solution que je comprends mieux.

    Maintenant je dois m'attaquer à la lecture du $json dans la partie javascript que je n'arrive pas à faire fonctionner correctement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <script>
    "use strict";
    <?php
    echo "var data = " .$json. ";\n";
    ?>
    // code d'initialisation de la carte
    // ...
    // initialisation et affichage des markers
    data.forEach(function(elem) {
      var marker = L.marker([elem.lat, elem.lng], {
      }).addTo(oMap);
    });</script>
    Leaflet demande un objet au format :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var villes = 
    {
    "ville1" : {lat: 45.010101, lon: 5.010203},
    "ville2" : {lat: 45.010101, lon: 5.010203},
    ...
    }
    or $json est au format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $jon = 
    [
    {"ville":"ville1", "lat":"45.010101", "lon":"5.010203"},
    {"ville":"ville2", "lat":"45.010101", "lon":"5.010203"},
    ...
    ]
    J'ai du mal...

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 656
    Points
    44 656
    Par défaut
    Leaflet demande un objet au format
    LeaFlet ne t'impose rien à toi de faire correspondre ton retour JSON avec les propriétés exploitées dans ton script.

    Le code fourni par Celira permet de récupérer les champs `ville`,`lat`, `lng` donc il te faut adapter les noms des champs à ceux de ta BdD et par suite au script JS.

    Ceci étant ta page, mise en lien, même si longue à charger fonctionne correctement visiblement.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2018
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2018
    Messages : 54
    Points : 24
    Points
    24
    Par défaut
    Ceci étant ta page, mise en lien, même si longue à charger fonctionne correctement visiblement.
    Bien entendu que le code marche bien.
    Pour l'instant, les coordonnées des villes sont en dur dans le <script>, je n'ai pas encore programmé la récupération du json.
    Je m'y mettrai ce WE.
    Merci

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/03/2013, 22h52
  2. HTML dans PHP, PHP dans HTML...
    Par jeremy_chauvel dans le forum Langage
    Réponses: 3
    Dernier message: 24/04/2006, 20h28
  3. [ODBC] Peut-on inserer une BD d'un autre format dans php
    Par nzo77 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 23/12/2005, 14h28
  4. Concaténation PHP dans PHP
    Par tchoukapi dans le forum Langage
    Réponses: 2
    Dernier message: 27/11/2005, 19h30

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