Creer du XML a partir d'une base de donnée

apprentiDev Messages postés 171 Statut Membre -  
hack_net Messages postés 814 Statut Membre -
Bonjour,

Est-il possible de creer un fichier XML à partir de php sans utiliser d'extension. On ma explique c'était possible en mettant echo('<?xml version="1.0" encoding="ISO-8859-1"?>'); pour dire que ca va être un fichier XML qui sera générer à partir de PHP. Ensuite je suppose que c'est à moi de faire en sorte que les résultats de chaque élements se place dans les bonnes balises.

Je voulais votre avis pour savoir si c'est réellement fesable ou si c'est déconseillé.

Cordialement,
ApprentiDev

16 réponses

  1. hack_net Messages postés 814 Statut Membre 51
     
    Oui c'est possible même si tu ne fait que générer un code et pas créer un fichier XML...

    En faite, c'est exactement la même chose que pour faire un tableau HTML ou une liste ordonnée à partir de php, sauf que tu remplace les "<table>, <tr>, <td>" ou "<ul>, <li>" par des "<?xml version="1.0" encoding="ISO-8859-1"?>, <nombalise>, ..."

    A+
    0
    1. apprentiDev Messages postés 171 Statut Membre 4
       
      Donc si j'ai bien compris je peux faire

      echo <nombalise>,
      requete SQL pour que les éléments correspondant à nom balise s'affiche
      echo <nombalise2>,
      requête SQL pour que l'élément correspondant a nom balise 2 s'affiche
      echo </nombalise2>,
      echo </nombalise>,

      Merci de ta réponse.
      0
  2. hack_net Messages postés 814 Statut Membre 51
     
    Oui voila c'est ça ;)
    0
  3. apprentiDev Messages postés 171 Statut Membre 4
     
    Bonjour j'ai modifier le code pour que ce soit plus compréhensible. Vu que ce n'est qu'un exemple je ne met qu'une partie des infos à afficher qui est ici les coordonnées Y et X. Voici le code :

    <?php
    //phpinfo();
    include('config.php');

    echo'<?xml version="1.0" encoding="UTF-8"?>';
    //header("Content-Type: text/xml; charset=utf-8");

    echo"Coordonees Y";
    $sql2 = "select Y(coord_scene),X(coord_scene) FROM scene sc";
    $resultats2 = mysql_query($sql2);
    while ($ligne2=mysql_fetch_array($resultats2)) {
    echo"<marker>\n"; // La balise racine
    echo "<lat>" . $ligne2['Y(coord_scene)'] . "</lat>\n";
    echo "<long>" . $ligne2['X(coord_scene)'] . "</long>\n";
    echo"</marker>\n";
    }
    ?>

    Cependant firebug me dit qu'il y a une erreur au niveau du header donc du coup je l'ai mis en commentaire. Cependant j'ai vérifier mais la syntaxe me semble exact.
    L'erreur annoncé par firebug est: Warning: Cannot modify header information - headers already sent by (output started at /data/web/sites/xxxxxxxx/zzzzz/php/config.php:1) in /data/web/sites/www.xxxxxxxx/zzzzzz/php/ajax_mysql2.php on line 6
    Pouvez-vous m'aider ?
    En vous remerciant d'avance,
    ApprentiDev
    0
  4. apprentiDev Messages postés 171 Statut Membre 4
     
    Bonjour à tous,

    Concernant le probléme du header je l'ai en parti reglé. Le probléme c'est que en utilisant firebug il me dit que le header est mal forulé. Vu que c'est un documeny XML génère par PHP j'ai mis echo'header("Content-Type: text/xml; charset=utf-8")';

    Firebug me marque mal formé <?xml version="1.0" encoding="UTF-8"?>...ype: text/xml; charset=utf-8")<marker>

    C'est comme si pour lui le header est composé des lignes suivantes :
    echo'<?xml version="1.0" encoding="UTF-8"?>';
    echo'header("Content-Type: text/xml; charset=utf-8")';

    echo"<marker>\n"; // La balise racine

    Je ne comprend pas d'ou viens l'erreur.

    Voici le code complet :
    <?php
    //phpinfo();
    include('config.php');
    //echo "cocou dez";
    echo'<?xml version="1.0" encoding="UTF-8"?>';
    echo'header("Content-Type: text/xml; charset=utf-8")';

    $sql2 = "select Y(coord_scene),X(coord_scene),id_scene,trace_scene FROM scene sc";
    $resultats2 = mysql_query($sql2);
    while ($ligne2=mysql_fetch_array($resultats2)) {
    echo"<marker>\n"; // La balise racine
    echo "<lat>" . $ligne2['Y(coord_scene)'] . "</lat>\n"; // balise pour les latitude
    echo "<long>" . $ligne2['X(coord_scene)'] . "</long>\n"; //balise pour longitude
    echo "<nom>" . $ligne2['id_scene'] . "</nom>\n"; // balise pour le nom
    echo "<url>" . $ligne2['trace_scene'] . "</url>\n"; // pour l'url
    echo"</marker>\n";
    }
    ?>

    En vous remerciant d'avance,
    ApprentiDev
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. hack_net Messages postés 814 Statut Membre 51
     
    echo'header("Content-Type: text/xml; charset=utf-8")';


    Ca n'existe aps tout simplement ! Le header est une instruction php, pas du texte à afficher !

    header("Content-Type: text/xml; charset=utf-8");


    La ça peut marcher :p
    0
  7. apprentiDev Messages postés 171 Statut Membre 4
     
    Je l'ai fait mais cette fois j'ai l'erreur warning: Cannot modify header information - headers already sent by (output started at /data/web/sites/xxxxxxxxxxx/zzzzzz/php/config.php:1) in /data/web/sites/xxxxxxxx/zzzzz/php/ajax_mysql2.php on line 6
    ( voir post précedent en fin de message)

    Merci de ton aide.
    0
  8. hack_net Messages postés 814 Statut Membre 51
     
    Et dans config.php des fois, tu n'aurait pas de header ?
    0
  9. apprentiDev Messages postés 171 Statut Membre 4
     
    Voici le code de config.php ( j'ai juste enlevé les informations sensible)

    <?php
    $base = '';
    $user = '';
    $pass = '';
    $serveur = '';
    mysql_connect($serveur,$user,$pass) or die("erreur de connexion au serveur");
    mysql_select_db($base) or die("erreur de connexion a la base de donnees");
    ?>
    et firebug me met l'erreur suivante :
    déclaration XML mal formée
    <?xml version=1.0 encoding=UTF-8?>head...Type: text/xml; charset=utf-8)<marker>
    alors qu'il n'y a, que le header qui a éte remis corectement
    0
  10. hack_net Messages postés 814 Statut Membre 51
     
    Enlève le header pour voir ?
    0
  11. apprentiDev Messages postés 171 Statut Membre 4
     
    En enlevant le header j'obtiens:
    données incompréhensibles après l'élément de document
    [Break on this error] <?xml version="1.0" encoding="UTF-8"?>...197320153</nom><url>201</url></marker>

    Or c'est le code pour l'affichage des balises avec les informations à fournir.
    Aprés la balise fermante de marker

    Il n'y a rien aprés la balise fermante a part le } pour fermer le while et le ?> qui ferme la partie php.

    (Je remets le code)

    <?php
    //phpinfo();
    include('config.php');
    //echo "cocou dez";
    echo'<?xml version="1.0" encoding="UTF-8"?>';

    $sql2 = "select Y(coord_scene),X(coord_scene),id_scene,trace_scene FROM scene sc LIMIT 10";
    $resultats2 = mysql_query($sql2);
    while ($ligne2=mysql_fetch_array($resultats2)) {
    echo"<marker>"; // La balise racine
    echo "<lat>" . $ligne2['Y(coord_scene)'] . "</lat>"; // balise pour les latitude
    echo "<long>" . $ligne2['X(coord_scene)'] . "</long>"; //balise pour longitude
    echo "<nom>" . $ligne2['id_scene'] . "</nom>"; // balise pour le nom
    echo "<url>" . $ligne2['trace_scene'] . "</url>"; // pour l'url
    echo"</marker>";
    }
    ?>

    et si ca peut aider voici le code qui doit lire les informations :

    var urlstr = "http://zzzzzzzzzzzzzzr/xxxxxxx/php/ajax_mysql2.php";
    alert("ajax javascript");
    GDownloadUrl(urlstr, function(data) {
    var xml = GXml.parse(data);
    alert("Creation marqueur");
    var markers = xml.documentElement.getElementsByTagName("marker");
    alert("la boucle for");
    for (var i = 0; i < 2; i++) {
    alert("eolo");
    var nom = markers[i].getAttribute("nom");
    alert("nom marqueur");
    var url = markers[i].getAttribute("url");
    var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("long")));
    alert("var point")
    var marker = createMarker(point,nom,url);
    map.addOverlay(marker);
    }
    });
    0
  12. hack_net Messages postés 814 Statut Membre 51
     
    Essaye ça à tout hasard :
    <?php
    @header("Content-Type: text/xml; charset=utf-8"); // le @ sert a masquer les erreurs, le header se place généralement en début de page sauf cas exceptionnel
    
    include('config.php');
    echo'<?xml version="1.0" encoding="UTF-8"?>';
    
    $sql2 = "select Y(coord_scene),X(coord_scene),id_scene,trace_scene FROM scene sc LIMIT 10";
    $resultats2 = mysql_query($sql2);
    while ($ligne2=mysql_fetch_array($resultats2)){
    	echo"<marker>"; // La balise racine
    	echo "<lat>" . $ligne2['Y(coord_scene)'] . "</lat>"; // balise pour les latitude
    	echo "<long>" . $ligne2['X(coord_scene)'] . "</long>"; //balise pour longitude
    	echo "<nom>" . $ligne2['id_scene'] . "</nom>"; // balise pour le nom
    	echo "<url>" . $ligne2['trace_scene'] . "</url>"; // pour l'url
    	echo"</marker>";
    }
    ?>
    

    0
  13. apprentiDev Messages postés 171 Statut Membre 4
     
    Bonjour,

    Après modification j'ai réussi à créer un XML qui a cette tête la :

    <markers>
    <marker> lat= 8.12 long= 8.35nom=1001197620254 url=202
    </marker>
    </markers>

    Le problème c'est qu'il me faudrait un XML plutôt comme ceci :

    <markers>
    <marker lat="8.12" long="8.35" nom="1001197620254" url="202" />
    </markers>

    Cependant quand je modifie mon code pour obtenir ce nouveau résultat j'obtient toujours XML mal construit. J'ai pensé que ça venait des guillemets mais j'ai beau les changer de place je trouve la même erreur.

    Si vous pouvez m'aider, je vous remercie d'avance,

    ApprentiDev
    0
  14. hack_net Messages postés 814 Statut Membre 51
     
    As-tu vérifié ton DTD ?
    Peux-tu mettre ton nouveau code ainsi que celui qui te met l'erreur ?
    As-tu bien déclaré ton document XML comme il se doit ?

    Plus d'infos : https://www.commentcamarche.net/contents/1332-xml-introduction-a-xml
    0
  15. apprentiDev Messages postés 171 Statut Membre 4
     
    Bonjour hack_net,

    Je n'ai pas mis de DTD car j'ai compris que ce n'etais pas obligatoire. Si ce n'est pas le cas quand faut-il le mettre ou non?

    Voici le nouveau code :

    <?php
    //phpinfo();
    header("Content-Type: text/xml; charset=utf-8");
    include('config.php');

    echo'<?xml version="1.0" encoding="UTF-8"?>';

    echo "<markers>";
    $sql2 = "select Y(coord_scene),X(coord_scene),id_scene,trace_scene FROM scene sc LIMIT 1";
    $resultats2 = mysql_query($sql2);
    while ($ligne2=mysql_fetch_array($resultats2)) {
    echo"<marker lat= ". $ligne2['Y(coord_scene)'] .
    " long= ". $ligne2['X(coord_scene)'] .
    "nom=" . $ligne2['id_scene'] .
    " url=" . $ligne2['trace_scene'] . "
    />";

    }
    echo "</markers>";
    ?>
    0
  16. hack_net Messages postés 814 Statut Membre 51
     
    Le code a l'air correct...

    En effet, le DTD n'est pas obligatoire, cependant, il est vivement recommander ! A quoi sert-il ? Il sert a définir au navigateur de quel "type" il est (quel version du langage, ...).
    Bref, si dans une version de XML les balise de type <balise argument1="contenu" /> est interdit, et que tu ne spécifie pas de quel type est ton XML, il peut y avoir des erreur de ce style... Je ne connais pas bien le XML pour le moment donc je ne pourrait pas te dire si je viens de dire une bêtise, mais en tout cas, il est bien plus préférable de mettre les DTD...

    A+
    0
  17. apprentiDev Messages postés 171 Statut Membre 4
     
    Merci de tes informations.

    Bon si le code te semble corect c'est toujours qu'il ne doit pas y avoir de grosse faute.
    Pour le DTD tu le construit ou dans le code? Je sais comment on le construit mais pas ou est ce qu'on le met dans le code.
    Je te remercie d'avoir regardé le code.
    0
    1. hack_net Messages postés 814 Statut Membre 51
       
      Quand tu regardes le lien plus haut que je t'ai donné, et que tu continus dans le chapitre, tu arrives à :
      https://www.commentcamarche.net/contents/1334-structure-d-un-document-xml
      puis
      https://www.commentcamarche.net/contents/1330-presentation-des-dtd
      etc...

      Voilà ;)

      A+
      0