Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EXPORTER UNE TABLE MYSQL VERS UN FICHIER XML AVEC PHP


Information sur la source

Catégorie :Xml Niveau : Débutant Date de création : 25/01/2004 Date de mise à jour : 25/01/2004 15:02:34 Vu : 27 673

Note :
6,5 / 10 - par 2 personnes
6,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

Description

Un bout de code php qui permet l'exportation du contenu d'une table MySQL vers un fichier XML.

Cas d'utilisation :
- sauvegarde de table
- différentes structures de contenu
- etc...;


 

Source

  • - carnet.sql :
  • CREATE TABLE personne (
  • nom varchar(255),
  • prenom varchar(255),
  • age int(2)
  • )
  • - carnetMysqlToXml.php :
  • <?php
  • /*
  • * Penser à ouvrir une connexion vers la base mysql
  • * Ecrire une requête ($q) pour récupérer les données de la table
  • */
  • $xml = '<?xml version="1.0" encoding="ISO-8859-1"?>'.'<carnet>';
  • while ($row = mysql_fetch_array($q)) {
  • $xml .= '<personne>';
  • $xml .= '<nom>'.$row['nom'].'</nom>';
  • $xml .= '<prenom>'.$row['prenom'].'</prenom>';
  • $xml .= '<age>'.$row['age'].'</age>';
  • $xml .= '</personne>';
  • }
  • $xml .= '</carnet>';
  • $fp = fopen("carnetMysqlToXml.xml", 'w+');
  • fputs($fp, $xml);
  • fclose($fp);
  • echo 'Export XML effectue !<br><a href="carnetMysqlToXml.xml">Voir le fichier</a>';
- carnet.sql :

CREATE TABLE personne (
	nom varchar(255),
	prenom varchar(255),
	age int(2)
)

- carnetMysqlToXml.php :

<?php
/*
 * Penser à ouvrir une connexion vers la base mysql
 * Ecrire une requête ($q) pour récupérer les données de la table
*/

$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>'.'<carnet>';
		while ($row = mysql_fetch_array($q)) {
			$xml .= '<personne>';
			$xml .= '<nom>'.$row['nom'].'</nom>';
			$xml .= '<prenom>'.$row['prenom'].'</prenom>';
			$xml .= '<age>'.$row['age'].'</age>';
			$xml .= '</personne>';
		}
		$xml .= '</carnet>';
		
		$fp = fopen("carnetMysqlToXml.xml", 'w+');
		fputs($fp, $xml);
		fclose($fp);
		
		echo 'Export XML effectue !<br><a href="carnetMysqlToXml.xml">Voir le fichier</a>';

Conclusion

Bon courage ;-)
 

Commentaires et avis

signaler à un administrateur
Commentaire de afad le 26/04/2004 15:25:14

Salut, je suis un peu neophyte en php, est ce que de la même manière, je peux écrire un flux RSS avec PHP (à partir de news écrite dans une table MySQL)...

Qu'est ce qui change,la syntaxe du xml, c'est tout ??

A+
aFaD

signaler à un administrateur
Commentaire de OriOn le 26/04/2004 21:05:42 administrateur CS

RSS = XML

Réfléchit à ce que je viens de dire ;-)

signaler à un administrateur
Commentaire de afad le 27/04/2004 09:04:41

J'adore les devinettes, lol
OK, Faut juste que je respecte la DTD RSS 2.0, c'est dans mes cordes....

Merci A+
aFaD

signaler à un administrateur
Commentaire de sophie13 le 27/10/2004 17:06:27

Bravo pour ce script génial.
Comment dois-je faire pour générer un fichier XML dans le cas où <personne> serait un élément et où les informations nom, prenom, age seraient des attributs de <personne> ?
Exemple :
<carnet>
<personne nom="Untel" prenom="Isidore" age="31"/>
</carnet>

En effet, l'intérêt d'utiliser des attributs est qu'ils sont bien mieux "lus" dans une application Flash.
Merci cent mille fois d'avance pour votre aide.

signaler à un administrateur
Commentaire de OriOn le 28/10/2004 09:05:28 administrateur CS

$xml .= '<personne nom="'.$row['nom'].'"/> ne fonctionne pas ?-)

signaler à un administrateur
Commentaire de sophie13 le 28/10/2004 10:58:34

Bonjour,

En fait, voici la réponse que j'ai pu obtenir :

$xml .= '<personne';
$xml .= 'nom="'.$row['nom'].'" '; // ou le nom entre crochet correspond au champ de la base de données
$xml .= 'prenom="'.$row['prenom'].'" ';
$xml .= 'age="'.$row['age'].'" ';
$xml .= '/>';
        }
        $xml .= '</photos>';

Ce qu'il y a d'assez extraordinaire, c'est que si après avoir lancé la page en php, si j'ai le malheur de la réactualiser, le fichier php se transforme et devient invalide :

$xml .= '<personne';
$xml .= 'nom="'.$row['nom'].'" '].'" ';
$xml .= 'prenom="'.$row['prenom'].'" '].'" ';
$xml .= 'age="'.$row['age'].'" '].'" ';
$xml .= '/>';
        }
        $xml .= '</photos>';

Des crochets et doubles côtes apparaissent à la fin des lignes. Il faut donc faire très attention à l'actualisation.

De plus, si j'utilise l'encodage XML UTF-8, le fichier n'est pas créé. Ce qui me pose des problèmes pour les accents.

Si quelqu'un a la solution ...
Sinon, ce code marche très bien.

Sophie

signaler à un administrateur
Commentaire de sniperbe le 27/11/2004 21:37:09

salut a tous,comment faire pour obtenir ceci??,

<?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?>
<paquay>
<travail photo="g1.jpg>
<commentaires></commentaires>
</travail>
</paquay>

car je charge mes photo dans une bd afin de deja la ressortir en php,j'aimerais employé la meme bd pour ressortir les données en xml et pouvoir les mettre dans un diâporama en flash.Mais il faut que mon xml ressortant de ma bd soit absolument comme cela et qu'il puisse se mettre a jour a chaque upload dans la bd.Je sais pas si je suis compréhensible dans mes propos lolll j'en suis désolé.Dés que j'ai la reponse,je mettrais ma première sources en fla avec un diapo en fla,un en php avec une bd,idéal pour les sites en deux parties.Merci a tous de votre aide.

signaler à un administrateur
Commentaire de grandvizir le 24/06/2005 16:46:32

Ce RSS est certes enregistré sur le serveur, mais il faudrait le faire télécharger, puis le supprimer. Au niveau de la taille des XML, ça risque de flooder un max si la base est grosse... C'est effectivement un bout de code.

signaler à un administrateur
Commentaire de grandvizir le 25/06/2005 18:49:18

Je me suis renseigné et pour éveiller aux problèmes d'exportation, je vous conseille le lien suivant afin d'utiliser les fonctions HTMLSPECIALCHARS et ADDSLASHES.
http://www.phpcs.com/forum.v2.aspx?ID=495433

Et puis, au lieu de faire un lien en bas de page, pourquoi ne pas rediriger l'utilisateur.

Au final, on obtient ceci:

<?php
  function Display($Value) {
    return htmlspecialchars(addslashes($Value));
  }
  /* CONNEXION: $q étant le résultat d'une requète */
  $xml = '<?xml version="1.0" encoding="ISO-8859-1"?><carnet>';
  while ($dat = mysql_fetch_array($q)) {
    $xml .= '<personne>';
    $xml .= '<nom>'.Display($dat['nom']).'</nom>';
    $xml .= '<prenom>'.Display($dat['prenom']).'</prenom>';
    $xml .= '<age>'.Display($dat['age']).'</age>';
    $xml .= '</personne>';
  }
  $xml .= '</carnet>';

  $Fichier = fopen('carnetMysqlToXml.xml', 'a+');
  fputs($Fichier, $xml);
  fclose($Fichier);

  header('Location: carnetMysqlToXml.xml');
?>

Le soucis est qu'il faudra faire du ménage après sur le serveur... Au final, avec ma proposition, on a un truc qui ne bugge pas. En espérant que phpMyAdmin 253 aura été corrigé...

signaler à un administrateur
Commentaire de grandvizir le 26/06/2005 15:31:08

Désolé de travailler au goutte à goutte, mais je découvre petit à petit les secrets bizarres du XML. Pour éviter d'enregistrer sur le serveur, allez voir: http://www.phpcs.com/code.aspx?id=13282

signaler à un administrateur
Commentaire de lookperso le 11/09/2005 21:29:15

Euh... Si le fichier XML existe déjà... Sa va le remplacer ?

signaler à un administrateur
Commentaire de DrChal le 01/03/2007 14:14:50

Salut
J'ai essayé ton code et malheureusement. J'ai les erreurs suivante:
<b>
Warning: domxml_open_file(): I/O in c:\program files\easyphp1-8\www\xml\phpxml6\ihm\carnet.php on line 2

Warning: domxml_open_file(): warning : in c:\program files\easyphp1-8\www\xml\phpxml6\ihm\carnet.php on line 2

Warning: domxml_open_file(): failed to load external entity "../xml/carnet.xml" in c:\program files\easyphp1-8\www\xml\phpxml6\ihm\carnet.php on line 2

Warning: domxml_xslt_stylesheet_file(): I/O in c:\program files\easyphp1-8\www\xml\phpxml6\ihm\carnet.php on line 3

Warning: domxml_xslt_stylesheet_file(): warning : in c:\program files\easyphp1-8\www\xml\phpxml6\ihm\carnet.php on line 3

Warning: domxml_xslt_stylesheet_file(): failed to load external entity "../xml/carnet.xsl" in c:\program files\easyphp1-8\www\xml\phpxml6\ihm\carnet.php on line 3

Fatal error: Call to a member function on a non-object in c:\program files\easyphp1-8\www\xml\phpxml6\ihm\carnet.php on line 4
</b>

Peux tu me dire s'il n'y a pas un paramètre supplémentaire à configurer dans easyphp?
J'ai déjà rajouter les extensions :
- php_domxml
- php_xmlrpc
- php_xslt

J'ai remarqué une chose, si je mets le chemin réel du fichier xml, ça marche.
Comment peut on le faire avec un chemin absolu?

Merci davance


signaler à un administrateur
Commentaire de crusty8x le 31/05/2007 09:32:20

je ne comprends pas d'ou ça viens mais j'ai de balises qui se répètent à des endroits ou elles n'ont pas lieu d'etre.

<descripteur>
   <nom>Cls</nom>
   <comment>closed limit switch</Comment></comment>
</descripteur>

donc comme je viens de le dire, je ne comprends pas s'ou viens cette balise </Comment>...

merci d'avance.

signaler à un administrateur
Commentaire de willink le 24/07/2007 19:02:32

Nickel ce pti bout de code... maintenant, à chaque fois que j'ajoute un article sur mon blog, le flux RSS se mets automatiquement... C'est parfait...
Mon blog : mouchel.philippe.free.fr

signaler à un administrateur
Commentaire de lecappa le 22/02/2008 12:17:21

Et point de vue Accent ? c'est bon? car l'exporte dans le fichier xml et qd je veux le lire dans mon flash, les accents sautent !
cela vient de l'encodage ou de mon flash?

signaler à un administrateur
Commentaire de game50 le 21/04/2008 13:52:40

Comment on fait pour la requette $q? merci

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,016 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.