Xml et php
Résolu
xb093
-
xb093 -
xb093 -
Bonjour, je suis entrain de faire un script afin de remplir un fichier xml qui devrait ressembler a ça...
<category>
<menu title="La Radio">
<img sImgRoute="gallerie/image/thumb/image1.jpg":>
<img sImgRoute="gallerie/image/thumb/image2.jpg"/>
<img sImgRoute="gallerie/image/thumb/image3.jpg"/>
</menu>
<menu title="Les animateurs">
<img sImgRoute="gallerie/image/thumb/image1.jpg"/>
<img sImgRoute="gallerie/image/thumb/image2.jpg"/>
<img sImgRoute="gallerie/image/thumb/image3.jpg"/>
</menu>
<menu title="Les Invités">
<img sImgRoute="gallerie/image/thumb/image1.jpg"/>
<img sImgRoute="gallerie/image/thumb/image2.jpg"/>
<img sImgRoute="gallerie/image/thumb/image3.jpg"/>
</menu>
</category>
Voici mon code php
$db_name = "*********";
$connection = mysql_connect("*******", "********", "*********") or die("Connexion impossible.");
$db = mysql_select_db($db_name, $connection);
$query = "SELECT * FROM diapo_categorie, diapo_images WHERE diapo_images.categorie = diapo_categorie.id_categorie ";
$result = mysql_query($query, $connection) or die("Impossible d'interroger la base de données");
$num = mysql_num_rows($result);
$file= fopen("results.xml", "w");
$_xml ="<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\r\n";
$_xml .="<category>\r\n";
while ($row = mysql_fetch_array($result)) {
$_xml .="\t<menu title=\"" . $row["nom_categorie"] . "\">\r\n";
$_xml .="\t\t<img sImgRoute=\"gallerie/image/thumb/" . $row["image"] . ".jpg\"/>\r\n";
$_xml .="\t\t<file>" . $row["image"] . "</file>\r\n";
$_xml .="\t</menu>\r\n";
}
$_xml .="</category>";
fwrite($file, $_xml);
fclose($file);
echo "XML conforme. <a href=\"results.xml\">Voir le XML.</a>";
Ce qui me donne ceci...
- <category>
- <menu title="La Radio">
<img sImgRoute="gallerie/image/thumb/image1.jpg" />
</menu>
- <menu title="La Radio">
<img sImgRoute="gallerie/image/thumb/image2.jpg" />
</menu>
- <menu title="La Radio">
<img sImgRoute="gallerie/image/thumb/image3.jpg" />
</menu>
- <menu title="Les animateurs">
<img sImgRoute="gallerie/image/thumb/image17.jpg" />
</menu>
- <menu title="Les animateurs">
<img sImgRoute="gallerie/image/thumb/image18.jpg" />
</menu>
- <menu title="Les Invités">
<img sImgRoute="gallerie/image/thumb/image19.jpg" />
</menu>
- <menu title="Les Invités">
<img sImgRoute="gallerie/image/thumb/image20.jpg" />
</menu>
- <menu title="Les Invités">
<img sImgRoute="gallerie/image/thumb/image21.jpg" />
</menu>
- </category>
Comment réunir les <img> dans leurs menus respectifs????
Merci...
<category>
<menu title="La Radio">
<img sImgRoute="gallerie/image/thumb/image1.jpg":>
<img sImgRoute="gallerie/image/thumb/image2.jpg"/>
<img sImgRoute="gallerie/image/thumb/image3.jpg"/>
</menu>
<menu title="Les animateurs">
<img sImgRoute="gallerie/image/thumb/image1.jpg"/>
<img sImgRoute="gallerie/image/thumb/image2.jpg"/>
<img sImgRoute="gallerie/image/thumb/image3.jpg"/>
</menu>
<menu title="Les Invités">
<img sImgRoute="gallerie/image/thumb/image1.jpg"/>
<img sImgRoute="gallerie/image/thumb/image2.jpg"/>
<img sImgRoute="gallerie/image/thumb/image3.jpg"/>
</menu>
</category>
Voici mon code php
$db_name = "*********";
$connection = mysql_connect("*******", "********", "*********") or die("Connexion impossible.");
$db = mysql_select_db($db_name, $connection);
$query = "SELECT * FROM diapo_categorie, diapo_images WHERE diapo_images.categorie = diapo_categorie.id_categorie ";
$result = mysql_query($query, $connection) or die("Impossible d'interroger la base de données");
$num = mysql_num_rows($result);
$file= fopen("results.xml", "w");
$_xml ="<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\r\n";
$_xml .="<category>\r\n";
while ($row = mysql_fetch_array($result)) {
$_xml .="\t<menu title=\"" . $row["nom_categorie"] . "\">\r\n";
$_xml .="\t\t<img sImgRoute=\"gallerie/image/thumb/" . $row["image"] . ".jpg\"/>\r\n";
$_xml .="\t\t<file>" . $row["image"] . "</file>\r\n";
$_xml .="\t</menu>\r\n";
}
$_xml .="</category>";
fwrite($file, $_xml);
fclose($file);
echo "XML conforme. <a href=\"results.xml\">Voir le XML.</a>";
Ce qui me donne ceci...
- <category>
- <menu title="La Radio">
<img sImgRoute="gallerie/image/thumb/image1.jpg" />
</menu>
- <menu title="La Radio">
<img sImgRoute="gallerie/image/thumb/image2.jpg" />
</menu>
- <menu title="La Radio">
<img sImgRoute="gallerie/image/thumb/image3.jpg" />
</menu>
- <menu title="Les animateurs">
<img sImgRoute="gallerie/image/thumb/image17.jpg" />
</menu>
- <menu title="Les animateurs">
<img sImgRoute="gallerie/image/thumb/image18.jpg" />
</menu>
- <menu title="Les Invités">
<img sImgRoute="gallerie/image/thumb/image19.jpg" />
</menu>
- <menu title="Les Invités">
<img sImgRoute="gallerie/image/thumb/image20.jpg" />
</menu>
- <menu title="Les Invités">
<img sImgRoute="gallerie/image/thumb/image21.jpg" />
</menu>
- </category>
Comment réunir les <img> dans leurs menus respectifs????
Merci...
A voir également:
- Xml et php
- Xml download - Télécharger - Édition & Programmation
- Easy php - Télécharger - Divers Web & Internet
- Office xml handler - Télécharger - Traitement de texte
- Driveimage xml - Télécharger - Sauvegarde
- Expert php pinterest - Télécharger - Langages
1 réponse
Bonjour,
D'une part je pense qu'il faut faire un GROUP BY sur la catégorie dans ta requête SQL de manière à être sur que tes résultats ressortent groupés par catégorie.
Ensuite il faut adapter ton code PHP pour qu'il gère le passage d'une catégorie à l'autre à l'intérieur de ta boucle.
Exemple : dès qu'il rencontre une nouvelle catégorie, il ferme la précédente si elle existe (cas du début ou elle n'existe pas lorsqu'on rencontre la première), puis rouvre avec la nouvelle.
Par défaut lorsque ta boucle de traitement des résultats est terminer il te faudra fermer ta dernière catégorie (si non nulle) avant de pouvoir fermer le reste.
Concrètement dans ton code PHP ça donne ça:
Il ne te reste plus qu'à faire un group by dans ta requête :
Code non testé mais qui devrait fonctionner normalement. Pour tout problème fais le moi savoir.
D'une part je pense qu'il faut faire un GROUP BY sur la catégorie dans ta requête SQL de manière à être sur que tes résultats ressortent groupés par catégorie.
Ensuite il faut adapter ton code PHP pour qu'il gère le passage d'une catégorie à l'autre à l'intérieur de ta boucle.
Exemple : dès qu'il rencontre une nouvelle catégorie, il ferme la précédente si elle existe (cas du début ou elle n'existe pas lorsqu'on rencontre la première), puis rouvre avec la nouvelle.
Par défaut lorsque ta boucle de traitement des résultats est terminer il te faudra fermer ta dernière catégorie (si non nulle) avant de pouvoir fermer le reste.
Concrètement dans ton code PHP ça donne ça:
$file= fopen("results.xml", "w"); $_xml ="<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\r\n"; $_xml .="<category>\r\n"; $currentCategory = ""; while ($row = mysql_fetch_array($result)) { if ( $currentCategory != $row["nom_categorie"] ){ // --- Close previous categorie if exists if ( $currentCategory != "" ) $_xml .="\t</menu>\r\n"; // --- Open the new $_xml .="\t<menu title=\"" . $row["nom_categorie"] . "\">\r\n"; } $_xml .="\t\t<img sImgRoute=\"gallerie/image/thumb/" . $row["image"] . ".jpg\"/>\r\n"; $_xml .="\t\t<file>" . $row["image"] . "</file>\r\n"; } // --- Close last category encountered if ( $currentCategory != "" ){ $_xml .="\t</menu>\r\n"; } $_xml .="</category>"; fwrite($file, $_xml); fclose($file); echo "XML conforme. <a href=\"results.xml\">Voir le XML.</a>";
Il ne te reste plus qu'à faire un group by dans ta requête :
SELECT * FROM diapo_categorie, diapo_images WHERE diapo_images.categorie = diapo_categorie.id_categorie GROUP BY diapo_categorie.nom_categorie
Code non testé mais qui devrait fonctionner normalement. Pour tout problème fais le moi savoir.
Il y a juste un petit soucis le xml me renvoi ça
La balise de fin category ne correspond pas à la balise de début menu. Erreur de traitement de la ressource
<?xml version="1.0" encoding="iso-8859-1" ?>
<category>
<menu title="titre1">
<img sImgRoute="gallerie/image/thumb/image1.jpg"/>
<menu title="titre2">
<img sImgRoute="gallerie/image/thumb/image9.jpg"/>
<menu title="titre3">
<img sImgRoute="gallerie/image/thumb/image19.jpg"/>
</category>
La balise <menu> ne se ferme pas
Effectivement mea culpa, j'ai oublié ce petit détail : chaque fois que ta partie change il faut mettre à jour la variable pour que ce soit pris en compte, sinon effectivement ça n'est jamais fermé.
Correction de la partie du code concernée :
Ca devrait fonctionner désormais.