Création d'un fichier XML à partir d'une base MySQL


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/114/sda/0/0/christophe.helson/MySQL-XML/index.php5 on line 39

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/114/sda/0/0/christophe.helson/MySQL-XML/index.php5 on line 39

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/114/sda/0/0/christophe.helson/MySQL-XML/index.php5 on line 39

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/114/sda/0/0/christophe.helson/MySQL-XML/index.php5 on line 39

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/114/sda/0/0/christophe.helson/MySQL-XML/index.php5 on line 39

Nous utilisons ici une copie de la base de données du site du club lecture, Le Cercle qui contient des critiques de romans. Nous allons créer un flux RSS qui présentera les derniers textes rédigés sur ce site.

Aprés s'être connecté, nous sélectionnons les 5 dernières critiques de livres dans la base :

require "inc/_connect.php5";
$req = "SELECT MAX(NumReunion) FROM reunions";
$ress = mysql_query($req);
if ($ligne = mysql_fetch_array($ress)) $nmax = $ligne[0];
else die('Erreur interne du serveur');
$req = "SELECT NumReunion, Date, Resume FROM reunions WHERE NumReunion>'$nmax'-5 ORDER BY NumReunion DESC";
$ress = mysql_query($req);

On construit alors le contenu XML en respectant le format RSS. Une boucle est faite pour chacun des éléments <item>. Les informations sur le livre sont recherchées dans une autre table :

$xml = '<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>';
$xml .= '<rss version="0.91"><channel>';
while($ligne = mysql_fetch_array($ress)){
  $req2 = "SELECT NumReunion, Titre, PrenomAuteur, NomAuteur FROM livres WHERE NumReunion = ".$ligne['NumReunion'];
  $ress2 = mysql_query($req2);
  $ligne2 = mysql_fetch_array($ress2);
  $xml.="<item><title>".$ligne['Date'].": Club Lecture n°".$ligne['NumReunion']." - ";
  $xml.=$ligne2['Titre']." de ".$ligne2['PrenomAuteur']." ".$ligne2['NomAuteur']."</title>";
  $xml.="<link>http://lecture.helson.org/reunion.php?num=".$ligne['NumReunion']."</link>";
  $xml.="<description>".html_entity_decode($ligne['Resume'])."</description></item>";
} // while
$xml.='</channel></rss>';

Puis on utilise la fonction file_put_contents() qui est la plus rapide pour écrire dans un fichier (nouveauté PHP 5). Lorsque le fichier existe déjà, l'ancien contenu est écrasé par le nouveau, ce qui est adapté à notre cas de figure :

file_put_contents("lecercle.xml",$xml);
mysql_close();

Le résultat est sur cette page lecercle.xml.