Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/11/2010, 17h03   #1
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 158
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 158
Points : 26
Points : 26
Par défaut faire une seule balise pour plusieurs contenu (ajout: problème enregistrement xml)

Bonjour

j'ai une base de données avec plusieurs data récupérer.

mes colones : ID / Titre / genre / sous genre

dans la colone genre, je vais avoir plusieurs fois "Aventure".

Par la suite je veux créer mon xml:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$xml = "<?xml version='1.0' ?>\n";
$xml .= '<Catalogue>';
$xml .= '<Aventure>';
 
 
 
while( $row = mysql_fetch_assoc($query) )
{
 
	if($row['sous_genre'] == "Aventure"){	
 
	$xml .= '<Item>';
    $xml .= '<monID id="' . $row['id'] . '">';
    $xml .= '<titre>' . htmlspecialchars($row['titre']) . '</titre>';
    $xml .= '<sous-genre>' . htmlspecialchars($row['sous_genre']) . '</sous-genre>';
    $xml .= '</monID>';
    $xml .= '</Item>';
}
}
$xml .= '</Aventure>';
 
$xml .= '</Catalogue>';
dans cette exemple cela me fait une seule balise Aventure, le seule problème après j'aurais par exemple le genre "policier" et je voudrais faire aussi une balise policier est mettre tous mes items avec le champ policier dedans.

Sauf que je voudrais par exemple faire une seule balise Aventure et que tous mes item qui sont égale à Aventure les mettre dans cette balise.

je ne veux pas créer une balise Aventure ou Policier à chaque fois.
jameson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 17h19   #2
Membre éclairé
 
Inscription : octobre 2004
Messages : 235
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 235
Points : 360
Points : 360
En pseudo php :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
$res = query("SELECT * from items ORDER by genre;");
 
$current_genre=null;
while($array_res = fetch_assoc($res)) {
  if($current_genre!=$res['genre']) {
     if(!empty($current_genre)) {
        echo '</'.$current_genre.'>';
     } 
     $current_genre=$res['genre'];
     echo '<'.$current_genre.'>';
  }
 
   echo '<item>' ..... $res[] ...'</item>';
 
}
 
 
if(!empty($current_genre)) {
  echo '</'.$current_genre.'>';
}
Joker-eph est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/11/2010, 17h20   #3
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
Il faudrait d'abord que, dans ta requête, tu utilises une clause GROUP BY pour regrouper tes résultats par genre. De cette façon, quand tu boucles et que le style change, tu es certain que tu as passé tous les résultats de cette balise en particulier.

Ensuite, c'est simplement de faire une vérification pour voir quand tu changes de style:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
$xml = "<?xml version='1.0' ?>\n";
$xml .= '<Catalogue>';
 
$styleCourant = "";
$premierTour = true;
while( $row = mysql_fetch_assoc($query) )
{
      if($styleCourant != $row['sous_genre'])
      {
            if (!$premierTour)
            {
                 $xml .= "</" . $styleCourant . ">";
            }
            $styleCourant = $row['sous_genre'];
            $xml .= "<" . $styleCourant . ">";
      }
     $xml .= '<Item>';
    $xml .= '<monID id="' . $row['id'] . '">';
    $xml .= '<titre>' . htmlspecialchars($row['titre']) . '</titre>';
    $xml .= '<sous-genre>' . htmlspecialchars($row['sous_genre']) . '</sous-genre>';
    $xml .= '</monID>';
    $xml .= '</Item>';
 
      $premierTour = false;
}
Donc voilà, j'espère que ça va pouvoir t'aider.

Au plaisir .
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/11/2010, 17h29   #4
Membre éclairé
 
Inscription : octobre 2004
Messages : 235
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 235
Points : 360
Points : 360
Citation:
Envoyé par osuwariboy Voir le message
Il faudrait d'abord que, dans ta requête, tu utilises une clause GROUP BY pour regrouper tes résultats par genre.
ORDER BY tu voulais dire je pense ?
Joker-eph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 17h30   #5
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 158
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 158
Points : 26
Points : 26
Merci j'ai pas tout tout compris mais ça ma l'air de résoudre mon problème, je vais étudier tous ça. Merci beaucoup. Je reviendrais vers vous pour vous tenir au courant.

Bonne journée.
jameson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 19h02   #6
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
À Joker-eph: C'est exact, je voulais effectivement dire "ORDER BY", petite erreur d'inattention, désolé
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 15h53   #7
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 158
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 158
Points : 26
Points : 26
Bonjour,

Bon j'ai suivi vos conseils cela fonctionne parfaitement, et en plus j'ai tous compris

Seule petit problème quand mes donnée sont dans mon $xml.

Je veux enregistrer le tout dans un fichier xml, pour cela je fait :

Code :
1
2
$file = 'Mon_Fichier_Test.xml';
file_put_contents($file, $xml);
Sauf que par la suite je retrouve bien mon fichier créé, mais quand je veux l'ouvrir par exemple avec safari ...

j'ai

Citation:
This page contains the following errors:

error on line 1 at column 49: StartTag: invalid element name
error on line 1 at column 49: Encoding error
Below is a rendering of the page up to the first error.
donc je pense que c'est l'architecture du fichier qui ce fait mal avec file_put_contents, comment puis je résoudre ce problème.

je vous remercie.
j'avais regarder pour faire mon xml via SimpleElement mais ça veux dire que je dois créer mes balise et dans ce cas la mon code ne va plus.

Merci d'avance.
jameson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 17h45   #8
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 158
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 158
Points : 26
Points : 26
Bonsoir,

En faite faudrait que je reprenne l'exemple et le translater en SimpleElement.

Je sais pas si je peux garder la même architecture.
jameson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 15h10   #9
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 158
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 158
Points : 26
Points : 26
Par défaut Realisation xml via requete SQL (probleme resultat sortie et enregistrement)

Bonjour,

Voici mon code pour realiser mon xml

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$xml_output = "<?xml version=\"1.0\"?>\n"; 
$xml_output .= "<catalogue>\n"; 
 
 
$styleCourant = "";
$premierTour = true;
 
for($x = 0 ; $x < mysql_num_rows($query) ; $x++){ 
    $row = mysql_fetch_assoc($query); 
 
{
      if($styleCourant != $row['category'])
      {
            if (!$premierTour)
            {
                 $xml .= "</" . $styleCourant . ">";
            }
            $styleCourant = $row['category'];
            $xml_output .= "<" . $styleCourant . ">";
      }
    $xml_output .= "<item>\n";
    $xml_output .= '<monID id="' . $row['idvoditem'] . '">\n';
    $xml_output .= "<titre>" . htmlspecialchars($row['title']) . "</titre>\n";
    $xml_output .= "<sous-genre>" . htmlspecialchars($row['category']) . "</sous-genre>\n";
    $xml_output .= "</monID>\n";
    $xml_output .= "</Item>\n";
 
      $premierTour = false;
}
 
 
    $xml_output .= "</catalogue>";
Voici pour afficher mon résultat et enregistrer mon xml:
Code :
1
2
3
4
5
 
Echo $xml_output;
 
$file = 'MonXML.xml';
file_put_contents($file, $xml_output);
resultat reçu:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
<catalogue>
  <Series>
    <item>...</item>
    <item>...</item>
    <item>...</item>
    <item>...</item>
 
    <policier>
          <item>...</item>
          <item>...</item>
          <item>...</item>
 
          <thriller>  .....              </thriller>
 
   </policier>
 
  </Series>
 
</catalogue>
Donc déjà comme vous pouvez le voir la catégorie ce décale à chaque nouvelle catégorie alors que je voudrais ça comme resultat:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
<catalogue>
  <Series>
    <item>...</item>
    <item>...</item>
    <item>...</item>
    <item>...</item>
  </Series>
  <policier>
      <item>...</item>
      <item>...</item>
      <item>...</item>
  </policier>
  <thriller> 
 .....
  </thriller>
 
</catalogue>
ça c'est le premier petit problème.

Par la suite en ce qui concerne la lecture de mon fichier XML enregistrer je l'ouvre avec safari, j'ai un message d'erreur:

error on line 7 at column 8: Opening and ending tag mismatch: item line 0 and Item
error on line 7 at column 8: Encoding error

si je l'ouvre avec xcode ou smultron je vois bien mes données.


Merci d'avance.
jameson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 15h26   #10
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 158
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 158
Points : 26
Points : 26
En ce qui concerne mon problème d'ouverture de xml je commence à le régler, maintenant le problème vient des accents présent dans mes données.

j'ai toujours le premier problème. du décalage.
jameson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 16h50   #11
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 158
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 158
Points : 26
Points : 26
Bon j'ai tous repris de A à Z avec SimpleXMLElement hier je devais être fatigué pour que ça fonctionne pas , mais maintenant cela fonctionne parfaitement.

Merci à ceux qui mon aidé.
jameson est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h09.


 
 
 
 
Partenaires

Hébergement Web