Xml et php
Résolu/Fermé
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
- Oxygen xml - Télécharger - Divers Web & Internet
1 réponse
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
20 févr. 2009 à 14:56
20 févr. 2009 à 14:56
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.
20 févr. 2009 à 16:37
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
20 févr. 2009 à 17:11
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.
20 févr. 2009 à 17:15