GENERER A LA VOLER UN FICHIER XML VIA UNE TABLE SQL + PHP

cs_pdl Messages postés 134 Date d'inscription mardi 20 novembre 2001 Statut Membre Dernière intervention 16 juin 2008 - 22 avril 2004 à 08:26
ibompuis Messages postés 5 Date d'inscription dimanche 28 avril 2002 Statut Membre Dernière intervention 23 mai 2008 - 23 mai 2008 à 08:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/22123-generer-a-la-voler-un-fichier-xml-via-une-table-sql-php

ibompuis Messages postés 5 Date d'inscription dimanche 28 avril 2002 Statut Membre Dernière intervention 23 mai 2008
23 mai 2008 à 08:22
Extra, j'essai dadapter cette superbe source mais j'ai n petit souci de mise en forme xml :

le script :

<?php

//connection à la base de donnée
$db_name = "cook";
$link = mysql_connect("localhost", "root", "root") or die("Connexion impossible.");
$table_name = 'jos_groups';

$db = mysql_select_db($db_name);

$query = "select * from " . $table_name;
$result = mysql_query($query, $link) or die("Impossible d'interroger la base de données");
$num = mysql_num_rows($result);

// connaître le nbre de champs
$nombre=mysql_num_fields($result);

// s'il y a des résultats
if ($num != 0) {
$file= fopen("results.xml", "w");
$_xml ="<?xml version="1.0" encoding="UTF-8" ?>\r\n";
$_xml .="<newsList>\r\n";

while ($row = mysql_fetch_array($result)) {

for ($i=0;$i<$nombre;$i++){
$_xml .="<news>\r\n";
$champs=mysql_field_name($result,$i);
//convertit en utf8 pour les caractères accentués.
$contenu=utf8_encode($row[$champs]);

$_xml .="\t<$champs>" . $contenu . "</$champs>\r\n";
$_xml .="</news>\r\n";
}
}

$_xml .="</newsList>";
fwrite($file, $_xml); fclose($file);
echo "Le fichier XML a était créé Show source :).";
}
else {
echo "erreur";
}
?>

le resulta :

<newsList>
<news>
0
</news>
<news>
<name>Public</name>
</news>
<news>
1
</news>
<news>
<name>Registered</name>
</news>
<news>
2
</news>
<news>
<name>Special</name>
</news>
</newsList>

Mon problème c'est que je voudrais plutot obtenir :

<newsList>
<news>
0
<name>Public</name>
</news>
<news>
1
<name>Registered</name>
</news>
<news>
2
<name>Special</name>
</news>
</newsList>

Une idéee comment procéder ?
Merci
sletis Messages postés 11 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 29 mai 2005
28 avril 2006 à 16:51
génial ce code ;) bon travail!
sletis Messages postés 11 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 29 mai 2005
28 avril 2006 à 16:51
génial ce code ;) bon travail!
cs_lir Messages postés 28 Date d'inscription dimanche 19 janvier 2003 Statut Membre Dernière intervention 26 mars 2008
20 janv. 2006 à 15:08
c'est possible deme dire les zones à changer par rapport à une base.
désolé je débute!

merci
cs_lir Messages postés 28 Date d'inscription dimanche 19 janvier 2003 Statut Membre Dernière intervention 26 mars 2008
20 janv. 2006 à 14:52
sympat
sawinashi Messages postés 2 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 24 octobre 2005
24 oct. 2005 à 03:20
C'est cool de voir un code repris et corrigé sur Codes sources (en douceur en plus, et sans aggressivité) ! Bravo les gars ! Pour une fois que c'est pas dans le genre 'sale-newbie-regarde-ce-que-tu-fais-c'est-bourré-de-problèmes-de-sécurité-ton-truc-je-te-mets(zéro-surtout-reviens-plus-par-ici'...

En plus ton code est intéréssant. :)
cs_FRAJA Messages postés 3 Date d'inscription lundi 21 mars 2005 Statut Membre Dernière intervention 10 avril 2008
28 juin 2005 à 15:32
Bonjour,

un petit complément pour gérer tous les champs de la table et transformer en utf8 pour garder les accents dans le fichier xml.

<?php
//nom de la table
$table_name="nom_de_la_table";

//connection à la base de donnée
include ("connect.php");

$query = "select * from " . $table_name;
$result = mysql_query($query) or die("Impossible d'interroger la base de données");
$num = mysql_num_rows($result);

// connaître le nbre de champs
$nombre=mysql_num_fields($result);

// s'il y a des résultats
if ($num != 0) {
$file= fopen("results.xml", "w");
$_xml ="<?xml version="1.0" encoding="UTF-8" ?>\r\n";
$_xml .="\r\n\";
while ($row = mysql_fetch_array($result)) {
for ($i=0;$i<$nombre;$i++){ $champs=mysql_field_name($result,$i);
//convertit en utf8 pour les caractères accentués.
$contenu=utf8_encode($row[$champs]);

$_xml .=\"\t<$champs>\" . $contenu . \"</$champs>\r\n\";
}
}
$_xml .="
";
fwrite($file, $_xml); fclose($file);
echo "Le fichier XML a etait créé Show source :).";
}
else {
echo "erreur";
}
?>

Franck
redisnotdead Messages postés 7 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 9 novembre 2005
14 avril 2005 à 18:01
Bonjoir ( une sorte de croisement entre bonjour et bonsoir )
J'ai bien aimé cette source qui m'as permis d'éffectuer une transition de data entre sql et flash (via xml) mais j'ai une petite question : j'utilise l'utf-8 et j'ai un petit soucis, les caractères spéciaux et accentués ne passe pas dans le xml géneré par ta méthode, alors je sait pas si je m'y prend mal ou si il y as une astuce (faire passer le tout par une String) et comme je suis du genre noob éternel sur php j'aurai bien besoin de vos lumières, merci d'avance et bon <?php ?>
___
Redisdead : mi codeur mi codé
cs_ceced Messages postés 70 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 11 mai 2005
22 avril 2004 à 10:23
Pas mal pdl, eu pour votre CHAMP mafoi le champ d'une table! pour recuper l'id ou news tout depend de votre config!!!!

Bin voila , j aime bien partagé mes recettes de cuisine on dit toujour que les recettes peuvent etre amelioré!

Cordialement :p
cs_pdl Messages postés 134 Date d'inscription mardi 20 novembre 2001 Statut Membre Dernière intervention 16 juin 2008
22 avril 2004 à 08:54
Allez, pour être complet, je livre une version améliorée qui permet de mettre toutes les colonnes dans le fichier XML
if ($num != 0) { 
$file= fopen("results.xml", "w"); 
$_xml ="<?xml version="1.0" encoding="ISO-8859-1" ?>\r\n"; 
$_xml .="\r\n\";
while ($row = mysql_fetch_array($result)) {
$_xml .=\"\t<row title=\\"\" . $row[0] . \"\\">\r\n\";
$i = 0;
while (list($key, $val) = each($row)) {
// évite d'avoirune ligne avec l'index de la colonne
list($key, $val) = each($row);
$_xml .=\"\t\t<$key>\" . $val . \"</$key>\r\n\";
$i++;
}
$_xml .=\"\t</row>\r\n\";
} $_xml .="
"; 
fwrite($file, $_xml); 
fclose($file); echo "Le fichier XML a etait créé  Show source :)."; 
} else { 
echo "erreur"; 
} 
cs_pdl Messages postés 134 Date d'inscription mardi 20 novembre 2001 Statut Membre Dernière intervention 16 juin 2008
22 avril 2004 à 08:26
C'est pas claire ton truc ! Qu'est-ce que l'on met à la place de "votrechamp" ? A quoi sert le test if ($row["votrechamp"]) ?

Et puis ton code ne permet pas de dumper toutes les colonnes de la requête de manière dynamique.

Tu peux certainement mieux faire.
Rejoignez-nous