Creer du XML a partir d'une base de donnée
apprentiDev
Messages postés
154
Date d'inscription
Statut
Membre
Dernière intervention
-
hack_net Messages postés 783 Date d'inscription Statut Membre Dernière intervention -
hack_net Messages postés 783 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Creer du XML a partir d'une base de donnée
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Créer un compte google - Guide
- Créer une adresse hotmail - Guide
- Créer une icone à partir d'une image - Guide
- Créer une vidéo à partir de photos - Guide
16 réponses
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+
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+
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
<?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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionecho'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
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.
( voir post précedent en fin de message)
Merci de ton aide.
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
<?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
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);
}
});
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);
}
});
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>"; } ?>
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
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
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
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
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>";
?>
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>";
?>
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+
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+
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.
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.
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.