Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Transformer une requete SQL en fichier XML

Compatible ActionScript 2. Cliquer pour en savoir plus sur les compatibilités.Compatible PHP. Cliquer pour en savoir plus sur les compatibilités.Par Damien, le 15 décembre 2002

Article écrit le 15/12/2002 21:42.
Par damien.

Il est d'actualité de parler de flash dynamique et d'interactivité entre les technologies web.
Or précisement un des moyens de relier ces technologies, c'est le XML, sur lequel tout le monde insiste.
Beaucoup, quand on leur dit que le XML sert à structurer les données, le mettent instinctivement en 'concurrence' avec les bases de données telles MySql, et pensent les deux technologies incompatibles ou redondantes.
Pourtant, il existe une autre manière d'examiner le problème : le XML peut etre utilisé non comme solution d'archivage des données mais bien comme une formidable solution de TRANSFERT des données, en préservant la structure.

:arrow: Nous nous interessons ici à l'exploitation d'une base MySql par une application flash.
La jonction sera faite par un fichier php qui produira du code xml et non html, ce qui permet d'etre loadé dans un flash.
Le deuxième point interessant, c'est que la requete effectuée par le php lui sera transmise en parametre, dynamiquement par le flash.
Il s'agit donc d'un code polyvalent, utile en toutes situations, dès que vous voudrez remplacer une page web par une animation swf.

Voici donc le code php:

<?xml version="1.0" encoding="UTF-8" ?>
 
<?
 
 
 
/*
 
** le script necessite que lui fournisse ou bien
 
** une requete  SQL précise,
 
** ou bien le nom d'une table qu'il retournera en entier.
 
**
 
** tout d'abord on se connecte à la base mysql
 
** remplacez host/login/pass/dbname par vos parametres
 
** ( par exemple, sur free, le login sert aussi de dbname
 
** et le host c'est 'sql.free.fr' )
 
*/
 
mysql_connect("host","login","pass") or die('<error>connexion impossible</error>');
 
mysql_select_db("dbname") or die('<error>Base down</error>');
 
 
 
/*
 
** ici on determine la requete
 
** selon que l'on a spécifié une requete précise
 
** ou seulement une table
 
*/
 
if(!$query)
 
$query="SELECT * FROM $table";
 
 
 
/*
 
** on effectue la requete:
 
** si elle échoue, un message d'erreur est renvoyé
 
*/
 
$result = mysql_query($query) or die('<error>'.$mysql_error().'</error>');
 
 
 
/*
 
** ici il sagit de structurer les données pour former la chaine xml
 
** la structure est LA MEME qu'un tableau html :
 
** <ligne><colonne></colonne><colonne></colonne></ligne>
 
** <ligne><colonne></colonne><colonne></colonne></ligne>
 
**
 
** dans notre cas:
 
** <row><field></field><field></field>><field></field></row>
 
** on utilise pour cela deux boucles for() , l'une pour les lignes
 
** et l'autre pour les colonnes.
 
*/
 
$xml = '<query numrows="'.mysql_num_rows($result).'">\n';
 
for($i = 0; $i < mysql_num_rows($result); $i++)
 
{
 
       $xml .= '<row>';
 
       $row= mysql_fetch_row($result);
 
       //pour tous les champs
 
       for($j = 0; $j < mysql_num_fields($result); $j++)
 
              $xml .= '<field name="'.mysql_field_name($result,$j).'">'.$row[$j].'</field>';
 
      $xml .= '</row>\n';
 
}
 
$xml .= '</query>\n';
 
mysql_free_result($result);
 
 
 
/*
 
** on donne le résultat:
 
*/
 
echo $xml;
 
 
 
?>

Vu du flash, le code aura cette allure:

data=new XML(); // déclaration
 
data.ignoreWhite=true; // ignorer les sauts de ligne, indispensable
 
table='table_news'; //par exemple
 
data.load("URL/mysql_xml.php?table="+table);

Dans ce cas simple le fichier retournera tout la table, il est donc beaucoup plus puissant de transmettre une requête ciblée au fichier, de la meme façon que vous avez transmis le nom de la table.

Veuillez vous reporter aux autres tutoriaux pour manipuler les fichiers XML, ou mettre en place un préchargement. Merci.

Damien