Export de données

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Export de données

    Bonjour

    J'ai installé sur mon site en 1.7, gmapfp (version gratuite) pour afficher des coordonnées de lieux. Jusqu'ici tout va bien à un détail près ...

    Ce composant est très pratique, mais oblige à noter les coordonnées d'un lieu qui nous intéresse pour les entrer manuellement dans un gps.

    J'ai vu sur une page un code permettant d'extraite des données d'une base pour générer un fichier kml, qui peut ensuite être convertit pour tel ou tel gps.

    J'ai posté un message sur le forum de gmapfp pour voir si ce type de fonctionnalité est prévue pour une prochaine version, mais le développeur n'a actuellement pas le temps de se pencher dessus.

    J'ai trouvé ce tuto : http://code.google.com/intl/fr/apis/...html#outputkml

    Est-ce que je peux le reprendre à partir du Select et l'insérer dans un mod_custom par exemple, pour que ça génère mon fichier ?

    Si oui, est-ce que ce code ne va pas ajouter un risque pour la sécurité de mon site ?

    Merci d'avance de vos réponses

  • #2
    Re : Export de données

    Hello,

    oui ce doit etre possible, mais il faut voir si les infos des tables de GMapFP sont recuperables avec les requetes SQL de ce script !?

    Coté PHP, tu n'auras pas de faille de sécurité coté Joomla si tu utilises comme il faut le framework Joomla.
    dans ce cas il faut remplacer tout cette partie :

    Code:
    <?php
    require('phpsqlajax_dbinfo.php');
    
    // Opens a connection to a MySQL server.
    
    $connection = mysql_connect ($server, $username, $password);
    
    if (!$connection) 
    {
      die('Not connected : ' . mysql_error());
    }
    // Sets the active MySQL database.
    $db_selected = mysql_select_db($database, $connection);
    
    if (!$db_selected) 
    {
      die('Can\'t use db : ' . mysql_error());
    }
    par cela :

    Code:
    <?php
    // recuperation de la connexion a la BD Joomla
    $db =& JFactory::getDBO();
    et donc pas besoin de creer un fichier "phpsqlajax_dbinfo.php" avec tes données confidentielles

    Ensuite il faut remplacer les executions de SQL en PHP par les commandes Joomla utilisant le $db

    Bonne continuation
    Dernière édition par garstud à 26/08/2011, 12h57 Raison: Modif de code suite au message de Cavo
    Garstud Workshop - Concepteur, Développeur et Formateur Joomla - http://www.garstud.com
    « Ce n’est pas parce que les choses sont difficiles que nous n’osons pas,
    c’est parce que nous n’osons pas qu’elles sont difficiles. »
    - Sénèque

    Commentaire


    • #3
      Re : Export de données

      Envoyé par garstud Voir le message
      $db = JFactory::getDBO();
      Juste une toute petite précision : getDBO retourne un pointeur. Il faut donc écrire

      Code PHP:
      $db =& JFactory::getDBO(); 
      Cela réduire la consommation mémoire et réutiliser l'objet database de JFactory au lieu d'en créer un autre.
      Dernière édition par cavo789 à 26/08/2011, 12h59
      Christophe (cavo789)
      Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
      Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

      Commentaire


      • #4
        Re : Export de données

        Bonjour,

        Merci à vous deux de vos réponses.

        Je vais m'attaquer à ça, je vous tiens au courant du résultat ... si ça peut servir à quelqu'un d'autre ...

        A+


        (je laisse le post ouvert pour l'instant, je le fermerais quand j'aurais donné des nouvelles)

        Commentaire


        • #5
          Re : Export de données

          Hello,

          Merci Cavo pour la remarque, j'ai vraiment ecris comme un rapide-cochon , car il manque aussi les "::"

          Je modifie mon post précedent
          Garstud Workshop - Concepteur, Développeur et Formateur Joomla - http://www.garstud.com
          « Ce n’est pas parce que les choses sont difficiles que nous n’osons pas,
          c’est parce que nous n’osons pas qu’elles sont difficiles. »
          - Sénèque

          Commentaire


          • #6
            Re : Export de données

            Salut tout le monde.

            Donc voilà, après qq jours d'essai, un code, basique, et certainement à corriger pour le rendre "propre", mais qui fonctionne (pour l'instant ça me suffit ). Je l'ai posté sur le site de gmapfp pour que le développeur puisse s'en servir de base dans une future version.

            J'ai ici 4 type de marqueurs. Le lien dans le code entre le marqueur et son type est fait sur le libellé du champ title, et je ne suis pas sur que ça fonctionnera si ce champs contient des espaces ou des caractères spéciaux, il faudra peut être le modifier pour que le lien se fasse sur un id ... je laisse le soin aux développeurs de le corriger.

            Le code re-génère le fichier à chaque fois que la page est affichée (je l'ai inséré dans un article avec sourcerer).

            <?php
            // recuperation de la connexion a la BD Joomla
            $db =& JFactory::getDBO();


            // Selection des données à extraire.
            $query = "SELECT #__gmapfp.id, #__gmapfp.nom, #__gmapfp.adresse, #__gmapfp.glng, #__gmapfp.glat, #__categories.title FROM #__gmapfp, #__categories WHERE #__gmapfp.catid = #__categories.id";
            $db->setQuery($query);
            $result = $db->loadObjectList();



            if (!$result)
            {
            die('Invalid query: ' . mysql_error());
            }

            // Création du document.
            $dom = new DOMDocument('1.0', 'UTF-8');

            // Création de la racine KML
            $node = $dom->createElementNS('http://earth.google.com/kml/2.1', 'kml');
            $parNode = $dom->appendChild($node);

            // Création de l'élément document kml
            $dnode = $dom->createElement('Document');
            $docNode = $parNode->appendChild($dnode);

            // Création des types de marqueurs
            $SalleStyleNode = $dom->createElement('Style');
            $SalleStyleNode->setAttribute('id', 'SalleStyle');
            $SalleIconstyleNode = $dom->createElement('IconStyle');
            $SalleIconstyleNode->setAttribute('id', 'SalleIcon');
            $SalleIconNode = $dom->createElement('Icon');
            $SalleHref = $dom->createElement('href', 'http://www.google.com/mapfiles/markerS.png');
            $SalleIconNode->appendChild($SalleHref);
            $SalleIconstyleNode->appendChild($SalleIconNode);
            $SalleStyleNode->appendChild($SalleIconstyleNode);
            $docNode->appendChild($SalleStyleNode);

            $TerrainStyleNode = $dom->createElement('Style');
            $TerrainStyleNode->setAttribute('id', 'TerrainStyle');
            $TerrainIconstyleNode = $dom->createElement('IconStyle');
            $TerrainIconstyleNode->setAttribute('id', 'TerrainIcon');
            $TerrainIconNode = $dom->createElement('Icon');
            $TerrainHref = $dom->createElement('href', 'http://www.google.com/mapfiles/markerT.png');
            $TerrainIconNode->appendChild($TerrainHref);
            $TerrainIconstyleNode->appendChild($TerrainIconNode);
            $TerrainStyleNode->appendChild($TerrainIconstyleNode);
            $docNode->appendChild($TerrainStyleNode);

            $ParcoursStyleNode = $dom->createElement('Style');
            $ParcoursStyleNode->setAttribute('id', 'ParcoursStyle');
            $ParcoursIconstyleNode = $dom->createElement('IconStyle');
            $ParcoursIconstyleNode->setAttribute('id', 'ParcoursIcon');
            $ParcoursIconNode = $dom->createElement('Icon');
            $ParcoursHref = $dom->createElement('href', 'http://www.google.com/mapfiles/markerP.png');
            $ParcoursIconNode->appendChild($ParcoursHref);
            $ParcoursIconstyleNode->appendChild($ParcoursIconNode);
            $ParcoursStyleNode->appendChild($ParcoursIconstyleNode);
            $docNode->appendChild($ParcoursStyleNode);

            $MultipratiquesStyleNode = $dom->createElement('Style');
            $MultipratiquesStyleNode->setAttribute('id', 'MultipratiquesStyle');
            $MultipratiquesIconstyleNode = $dom->createElement('IconStyle');
            $MultipratiquesIconstyleNode->setAttribute('id', 'MultipratiquesIcon');
            $MultipratiquesIconNode = $dom->createElement('Icon');
            $MultipratiquesHref = $dom->createElement('href', 'http://www.google.com/mapfiles/markerM.png');
            $MultipratiquesIconNode->appendChild($MultipratiquesHref);
            $MultipratiquesIconstyleNode->appendChild($MultipratiquesIconNode);
            $MultipratiquesStyleNode->appendChild($MultipratiquesIconstyleNode);
            $docNode->appendChild($MultipratiquesStyleNode);

            // Balayage des résultats de la requête, et création d'un marqueur pour chaque ligne
            foreach ($result as $lieu) {

            // Création d'un marqueur
            $node = $dom->createElement('Placemark');
            $placeNode = $docNode->appendChild($node);

            // Création d'un id, et affectation de la valeur de la colonne id
            $placeNode->setAttribute('id', 'placemark' . $lieu->id);

            // Création du nom du marqueur, de sa description, et affectation des valeurs lues dans les colonnes nom et adresse, affection du type
            $nameNode = $dom->createElement('name',$lieu->nom);
            $placeNode->appendChild($nameNode);
            $descNode = $dom->createElement('description', $lieu->adresse);
            $placeNode->appendChild($descNode);
            $styleUrl = $dom->createElement('styleUrl', '#' . $lieu->title . 'Style');
            $placeNode->appendChild($styleUrl);

            // Création d'un point
            $pointNode = $dom->createElement('Point');
            $placeNode->appendChild($pointNode);

            // Création des coordonnées, et affectation des valeurs de longitude et latitude
            $coorStr = $lieu->glng . ',' . $lieu->glat;
            $coorNode = $dom->createElement('coordinates', $coorStr);
            $pointNode->appendChild($coorNode);
            }


            $kmlOutput = $dom->saveXML();
            header('Content-type: application/vnd.google-earth.kml+xml');

            $fp = fopen("../fichier.kml","w");
            fputs($fp, $kmlOutput);
            fclose(fp);


            ?>
            Voilà, maintenant je peux fermer le post

            Commentaire

            Annonce

            Réduire
            Aucune annonce pour le moment.

            Partenaire de l'association

            Réduire

            Hébergeur Web PlanetHoster
            Travaille ...
            X