IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

faire une seule balise pour plusieurs contenu (ajout: problème enregistrement xml) [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 226
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Par défaut
    En pseudo php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.'>';
    }

  3. #3
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 .

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Par défaut
    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 ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 226
    Par défaut
    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.

  6. #6
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    À Joker-eph: C'est exact, je voulais effectivement dire "ORDER BY", petite erreur d'inattention, désolé

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 226
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

    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.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 226
    Par défaut
    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.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 226
    Par défaut Realisation xml via requete SQL (probleme resultat sortie et enregistrement)
    Bonjour,

    Voici mon code pour realiser mon xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Echo $xml_output;
     
    $file = 'MonXML.xml';
    file_put_contents($file, $xml_output);
    resultat reçu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 226
    Par défaut
    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.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 226
    Par défaut
    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é.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/03/2011, 15h09
  2. Réponses: 2
    Dernier message: 10/07/2007, 13h45
  3. faire une seule table avec plusieurs table
    Par bossboss dans le forum Access
    Réponses: 4
    Dernier message: 08/01/2007, 16h11
  4. Réponses: 7
    Dernier message: 01/02/2006, 15h49
  5. [C#] Une seule méthode pour plusieurs composants
    Par niPrM dans le forum Windows Forms
    Réponses: 8
    Dernier message: 01/06/2004, 14h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo