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 :

Erreur dans une boucle while [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 44
    Par défaut Erreur dans une boucle while
    Bonjour a tous ,
    explications:
    J'ais une boucle avec while , je voudrais quelles m'affiche les titre de la table "categorie_realisations" ce qu'elle fait correctement . Et en dessous chaque images d'une réalisation qui sont classée par catégorie dans la "tablemini_réalisations" .
    Donc mon constat est qu'elle m'affiche bien les titres de catégorie mais pas les cinq images qui ce trouvent dans la table "tablemini_réalisations" elle en affiche qu'une seule et dans la mauvaise catégorie.

    En espérant m'être bien fais comprendre
    Je vous remercie par avance de votre aide.

    Voici la source en .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
    22
     
    /*début de la galerie*/
     
    /*Requete pour récupérer les catégories et titres de la galerie*/
    $requete_categorie_realisations = mysql_query('SELECT categorie_realisations_id, categorie_realisations_titre FROM categorie_realisations ORDER BY categorie_realisations_id ')or die(mysql_error() . $requete_sql);
     
    /*Requete pour récupérer les images de chaque catégorie de la galerie*/
    $requete_mini_réalisations = mysql_query('SELECT mini_réalisations_id, mini_réalisations_image, mini_réalisations_titre, mini_réalisations_url, mini_réalisations_fiche_url ,mini_réalisations_categorie_id  FROM mini_réalisations ORDER BY mini_réalisations_categorie_id ')or die(mysql_error() . $requete_sql);
     
    /*Affichage sous forme de liste*/
    while (($data_categorie_realisations = mysql_fetch_assoc($requete_categorie_realisations)) && ($data_mini_réalisations = mysql_fetch_assoc($requete_mini_réalisations)))
    				{
    				 echo'	
    				 <p>'.nl2br(trim(stripslashes(htmlspecialchars($data_categorie_realisations['categorie_realisations_titre'])))).'</p>
    				 <a href="'.nl2br(trim(stripslashes(htmlspecialchars($data_mini_réalisations['mini_réalisations_fiche_url '])))).'">
    				 <img src="'.nl2br(trim(stripslashes(htmlspecialchars($data_mini_réalisations['mini_réalisations_image'])))).'" 
    				 alt="'.nl2br(trim(stripslashes(htmlspecialchars($data_mini_réalisations['mini_réalisations_titre'])))).'"/></a>				 										
    					';												  
    				}
     
     
    /*Fin de la galerie*/
    Et les tables concernées:

    [CODE]/*Table mini_réalisations*/
    CREATE TABLE `mini_réalisations` (
    `mini_réalisations_id` int(11) NOT NULL AUTO_INCREMENT,
    `mini_réalisations_image` varchar(30) collate latin1_general_ci NOT NULL,
    `mini_réalisations_titre` varchar(100) collate latin1_general_ci NOT NULL,
    `mini_réalisations_url` varchar(100) collate latin1_general_ci NOT NULL,
    `mini_réalisations_fiche_url` varchar(100) collate latin1_general_ci NOT NULL,
    `mini_réalisations_categorie_id` int(100) NOT NULL,
    PRIMARY KEY (`mini_réalisations_id`)
    );


    /*Table categorie_realisations*/
    CREATE TABLE `categorie_realisations` (
    `categorie_realisations_id` int(11) NOT NULL AUTO_INCREMENT,
    `categorie_realisations_titre` varchar(100) collate latin1_general_ci NOT NULL,
    PRIMARY KEY (`categorie_realisations_id`)
    ); /CODE]

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 450
    Par défaut
    déja enleve l' accent dans $requete_mini_réalisations dans le while et a la declaration de variable .

    Et dis nous ce que sa donne

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 44
    Par défaut
    J'ai enlevé les accents comme demandé mais sa a rien changé.

    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
     
    <?php
     
    /*début de la galerie*/
     
    /*Requete pour récupérer les catégories et titres de la galerie*/
    $requete_categorie_realisations = mysql_query('SELECT categorie_realisations_id, categorie_realisations_titre FROM categorie_realisations ORDER BY categorie_realisations_id ')or die(mysql_error() . $requete_sql);
     
    /*Requete pour récupérer les images de chaque catégorie de la galerie*/
    $requete_mini_realisations = mysql_query('SELECT mini_réalisations_id, mini_réalisations_image, mini_réalisations_titre, mini_réalisations_url, mini_réalisations_fiche_url ,mini_réalisations_categorie_id  FROM mini_réalisations ORDER BY mini_réalisations_categorie_id ')or die(mysql_error() . $requete_sql);
     
    /*Affichage sous forme de liste*/
    while (($data_categorie_realisations = mysql_fetch_assoc($requete_categorie_realisations)) && ($data_mini_realisations = mysql_fetch_assoc($requete_mini_realisations)))
    				{
    				 echo'	
    				 <p>'.nl2br(trim(stripslashes(htmlspecialchars($data_categorie_realisations['categorie_realisations_titre'])))).'</p>
    				 <a href="'.nl2br(trim(stripslashes(htmlspecialchars($data_mini_realisations['mini_réalisations_fiche_url '])))).'">
    				 <img src="'.nl2br(trim(stripslashes(htmlspecialchars($data_mini_realisations['mini_réalisations_image'])))).'" 
    				 alt="'.nl2br(trim(stripslashes(htmlspecialchars($data_mini_realisations['mini_réalisations_titre'])))).'"/></a>				 										
    					';												  
    				}
     
     
    /*Fin de la galerie*/
     
    ?>

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 44
    Par défaut
    Je me suis dit pour quoi pas faire une jointure sa devrait résoudre le soucis et non la boucle fonctionne bien mais le soucis maintenant c'est que le titre ce répète a chaque image présente dans cette catégorie.

    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
    <?php
     
    /*début de la galerie*/
     
    /*Requete pour récupérer les catégories et titres de la galerie*/
    $requete_galerie = mysql_query('SELECT * FROM categorie_realisations, mini_réalisations WHERE categorie_realisations.categorie_realisations_id  = mini_réalisations.mini_réalisations_categorie_id ORDER BY categorie_realisations_id')or die(mysql_error() . $requete_sql);
     
    /*Affichage sous forme de liste*/
    while ($data_galerie = mysql_fetch_assoc($requete_galerie))
    				{
    				 echo'	
    				 	<p>'.nl2br(trim(stripslashes(htmlspecialchars($data_galerie['categorie_realisations_titre'])))).'</p>
    					<a href="'.nl2br(trim(stripslashes(htmlspecialchars($data_galerie['mini_réalisations_fiche_url '])))).'">
    				 	<img src="'.nl2br(trim(stripslashes(htmlspecialchars($data_galerie['mini_réalisations_image'])))).'" 
    				 	alt="'.nl2br(trim(stripslashes(htmlspecialchars($data_galerie['mini_réalisations_titre'])))).'"/></a>
    					';	
     
    				}				
     
     
    /*Fin de la galerie*/
     
    ?>

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 450
    Par défaut
    C'est normal vu que tu affiches le titre dans la boucle .

    De plus, je n'ai jamais vu while ($truc=mysql_fetch_assoc($machin)) {}
    Moi j' utilise while ($truc=mysql_fetch_array($machin)) {}

    Je ne dis pas que sa se fait pas, mais je n'ai jamais procedé comme cela essaie mon exemple .

    Si tu veux associer un titre different a chaque image, tu dois associer l' image avec le titre par exemple if ($id_image==$id_titre) {echo $titre.' '.$image;}

    Enfin c'est un exemple pour t' expliquer le fonctionnement

    essaye en premier lieu mysql_fetch_array() déja et dis moi

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 44
    Par défaut
    Le array revient au même pour moi.
    En gros voila ce que retourne cette boucle.

    titre1
    image
    titre1
    image
    titre1
    image
    titre1
    image

    au lieu de:

    titre 1
    image image image image

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 316
    Par défaut
    bonsoir,
    non, c'est 2 requêtes:
    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
     
    $req1="select * from realisation";
    $res=mysql_query($req) or die (mysql_error());
    while($result=mysql_fetch_array($res)){
    print($result[titre]);
    $req2="select * from mini_realisation where id_mini='$result[id]'";
    $res2=mysql_query($res2) or die (mysql_error());
    $cpte=mysql_num_rows($res2);
    while($result2=mysql_fetch_array($res2)){
     
    $image.=$result2[image].",";
     
     
    }
    $tabimage=explode(",",$image);
    for($i=0;$i<$cpte-1;$i++){ // on boucle jusqu'à l'avant dernier pour gérer les"---"
    print("$tabimage[$i]---"); // là tu mets ce que tu veux pour afficher; moi j'ai séparé les résultats par des "---"
    }
    print($tabimage[$cpte-1]); // on rajoute le dernier
    }

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 450
    Par défaut
    Moi je procèderais comme suit :

    - 1 table avec les catégories que l' on nommera "categorie"
    champs : id, nom_categorie
    - une table avec les "images"
    champs : id, image, id_categorie (pour faire simple)

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    // On récupère les catégories
    $categories=mysql_query("SELECT * FROM categorie");
    // On compte si il y'a des catégories
    $nbr_categories=mysql_num_rows($categories);
     
    // si $nbr_categories est plus grand que 0
    if ($nbr_categories)
       {
       while ($c=mysql_fetch_array($categories))
          {
          // On récupere les valeurs des catégories
          $id_categorie=$c['id'];
          $nom_categorie=$c['nom_categorie'];
     
          // On affiche le nom de la catégorie en h3 par exemple
          echo '<h3>'.$nom_categorie.'</h3>';
     
          // Puis grace à l' id de categorie, on va cherche les images correspondantes
          $images=mysql_query("SELECT * FROM images id_categorie='$id_categorie'");
          // On compte si il y' a bien des images pour cette catégorie
          $nbr_images=mysql_num_rows($images);
     
          // Si oui, alors on fait une boucle dans la boucle pour afficher les images correspondantes
          if ($nbr_images)
             {
             while ($img=mysql_fetch_array($images))
                {
                echo '<img src="lien_relatif/a_l_image/'.$img['image'].'" style="width:100px; height:auto;" /><br />';
                }
             }
          else
             {
             // Sinon, pas d'images correspondant à cette catégorie
             echo '<b>Pas d\' images pour cette catégorie !</b><br />';
             }
          }
       }
    else
       {
       // Sinon bah y'a pas de categories, alors pas d' images a afficher
       echo '<b>Pas de catégories, donc pas d\' images a afficher !</b><br />';
       }
    Pfiouf, j'ai jamais encore programmé en developpez.net lol c'est moins pratique qu'avec dreamweaver (quoi qu'en y reflechissant sa aurait été plus simple de le faire avec dreamweaver puis copier coller) ...

    Bref voila le fruit de mon dure labeur pour toi sa m'a fatigué .

    Je penses que tu peux faire un copier collé de ce code et le modifier à tes besoins .
    Comprends tu le sens de se code ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 44
    Par défaut
    Un grand merci a vous deux pour tous ces efforts fournis.
    cuisto44000 je comprend très bien ton code mais pour moi il n'était pas possible d'imbriquer deux boucles ensembles donc merci de m'avoir éclairci a ce sujet.
    Juste un peu déçus de ne pas avoir testé ce principe malgré les six heures passées sur ce code , j'en ai même oublié de venir voir le post sur le forum

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 450
    Par défaut
    Et bien maintenant, tu sais qu'il est possible de mettre une boucle dans une boucle, dans une boucle, dans une boucle ... hihi bon courage pour la suite

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

Discussions similaires

  1. Gestion des erreurs dans une boucle While
    Par Gregory.M dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/08/2008, 20h57
  2. erreur mysql-fetch_array dans une boucle While
    Par carmen256 dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/04/2006, 17h15
  3. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 18h07
  4. Réponses: 6
    Dernier message: 17/06/2005, 16h51
  5. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51

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