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 :

while dans une while ? [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2008
    Messages : 112
    Par défaut while dans une while ?
    Bonjour à tous, j'ai un petit souci
    J'espère que je trouverai de l'aide ici...

    j'aimerais afficher des données de cette manière :

    CONCOURS01
    gagnant01_concours01
    gagnant02_concours01
    gagnant03_concours01
    etc..

    CONCOURS02
    gagnant01_concours02
    gagnant02_concours02
    gagnant03_concours02
    etc...

    et non sous cette forme :
    CONCOURS01
    gagnant01_concours01
    CONCOURS01
    gagnant02_concours01
    CONCOURS01
    gagnant03_concours01
    etc...

    J'aimerais que si il y a plus qu'un résultat pour un concours on n'affiche le titre "CONCOURS01" qu'une seule fois...

    voici mon code, qui m'affiche un listing de gagnants, le résultat est partiellement juste, mais si par exemple j'ai 3 gagnants pour le CONCOURS01
    le code ci-dessous va m'afficher 3x ce résultat :
    CONCOURS01
    gagnant01_concours01
    gagnant02_concours01
    gagnant03_concours01

    alors qu'il faudrait logiquement qu'il ne s'affiche qu'une seule fois

    pourriez vous m'aider SVP, j'ai passé de nombreuses heures a retourner le problème dans tous les sens et je n'arrives pas à trouver une solution à mon problème, c'est logiquement la boucle while dans l'autre boucle while qui pose souci, je ne sais pas si ça se fait, mais je ne sais pas trop comment faire autrement ??

    d'avance un grand merci et meilleures salutations à tout l'équipe...


    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
    		 <?				//je recherche tous les gagnants dans ma base de donnée
    		 				$gagnants=mysql_query("SELECT * FROM membre_concours WHERE GAGNE='1'");
    						while($win=mysql_fetch_array($gagnants))
    							{
    									$idduconcours=$win['ID_CONCOURS'];
     
    									//recherche du titre du concours dans la base concours
    									$sql =mysql_query("SELECT ID, TITRE FROM concours WHERE ID='$idduconcours'");
    									$rep=mysql_fetch_array($sql);
     
    									//comptage du nombre de gagnants pour chaque concours
    									$retour = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM membre_concours Where ID_CONCOURS='$idduconcours' AND GAGNE='1' ");
    									$donnees = mysql_fetch_array($retour); 
    									$nBgagnants=$donnees['nbre_entrees']; 
     
    							//si il y a plus que 1 gagnant
    							if ($nBgagnants>1)
    								{		
    										//j affiche le titre du concours une seule fois
    										?><br /><h2><? echo $rep['TITRE']; ?></h2><?
    										//je refais une boucle pour chercher les gagnants
    										$retour1=mysql_query("SELECT * FROM membre_concours WHERE ID_CONCOURS='$idduconcours' and GAGNE='1'");
    										while($win1=mysql_fetch_array($retour1))
    										{
    											?>
    											<p><? echo $win1['PRENOM']; ?> <? echo $win1['NOM']; ?>, <? echo $win1['ADRESSE']; ?> - <? echo $win1['CODEPOSTAL']; ?> <? echo $win1['VILLE']; ?> | <? echo $win1['REPONSE']; ?></p>	
    											<?
    										}
     
    								}
    							else 
    								{	
    							?>
    								<br />
    								<p><strong><? echo $rep['TITRE']; ?></strong><br /><? echo $win['PRENOM']; ?> <? echo $win['NOM']; ?>, <? echo $win['ADRESSE']; ?> - <? echo $win['CODEPOSTAL']; ?> <? echo $win['VILLE']; ?> | <? echo $win['EMAIL']; ?></p>		 	  									
    							 <? }
    							}
     
    ?>

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Août 2007
    Messages : 109
    Par défaut
    bonjour,

    il faut que tu inverse tes boucles.

    Tu boucle sur tous les concours

    La requête ci-dessous te retourne les concours pour lesquels tu à un ou des gagnants
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $sql =mysql_query("SELECT concours.ID, concours.TITRE 
    FROM concours 
    INNER JOIN membre_concours 
    ON membre_concours.ID_CONCOURS=concours.ID
    WHERE 
    GAGNE='1'");
    ensuite sur tous les gagnants du concours.

    dans ta boucle sur les concours tu fait les même requêtes qu'actuellement pour sélectionner les membres.

    ca devrais te donner le résultat que tu cherche

  3. #3
    Membre Expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Par défaut
    Bonjour,

    dans votre code vous avez deux requêtes SQL en plus, les boucles sont imbriqué dans le mauvais sens.

    essaye comme ça.

    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
    <?php
    $concour = mysql_query ( "SELECT ID, TITRE FROM concours" );
    while ( $rec_concour = mysql_fetch_array ( $concour ) ) {
    	$idduconcours = $rec_concour ["ID"];
    	$gagnant = mysql_query ( "SELECT * FROM membre_concours WHERE ID_CONCOURS='$idduconcours' and GAGNE='1'" );
    	$nbr_gagnant = mysql_num_rows ( $ganant );
     
    	if ($nbr_gagnant > 0) {
    		echo $rec_concour ['TITRE'];
     
    		while ( $rec_gagnant = mysql_fetch_array ( $gagnant ) ) {
    			// la vous affiché vos gagant  
    			echo '<p>'.$rec_gagnant['NOM'].','.$rec_gagnant['PRENOM'].'</p>';
     
    		}
    	}
     
    }
    ?>
    il est déconseillé d'utiliser les short tag (<?... ?>), il sont désactivé chez la plupart des hébergeurs.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2008
    Messages : 112
    Par défaut
    aityahia, un grand merci pour ton aide, ton code marche et c'est exactement ce dont j'avais besoin.

    MERCI BEAUCOUP, c'est vraiment sympa de ta part

    Bon week-end et salutations

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2008
    Messages : 112
    Par défaut
    excuse j'aurais encore une petite question, j'aimerais bien comprendre comme il faut... j'ai un autre exemple du même genre mais avec cette fois-ci la valeur du titre du concours dans la même table...

    une structure de ce type :
    ID
    NOM
    PRENOM
    ADRESSE
    CP
    VILLE
    EMAIL
    VALCONCOURS

    (dans le champ VALCONCOURS, j'ai la valeur du titre)

    j'ai essayé avec ce code, en m'inspirant de celui que tu m'avait fait et qui marche très bien, mais là de nouveau j'ai le même souci, j'ai de la peine à saisir

    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	
    		 				$gagnants=mysql_query("SELECT VALCONCOURS FROM membre_concours2");
    						while($win=mysql_fetch_array($gagnants))
    							{
    								$titre=$win['VALCONCOURS'];
    								$gagnant2=mysql_query("SELECT * FROM membre_concours2 WHERE VALCONCOURS='$titre' ");
    								$nbr_gagnant=mysql_num_rows($gagnant2);
     
    								if ($nbr_gagnant>0)
    								{
    									echo $win['VALCONCOURS'];
     
    									while($win2=mysql_fetch_array($gagnant2))
    									{
    									?>
    									<p><? echo $win2['PRENOM']; ?> <? echo $win2['NOM']; ?> - <? echo $win2['ADRESSE']; ?> - <? echo $win2['CP']; ?> <? echo $win2['VILLE']; ?><br /><? echo $win2['EMAIL']; ?></p>	
    									<br />		 	  									
    									<?
    									}	
    								}
    							}
     
    ?>

  6. #6
    Membre Expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Par défaut
    c'est encore plus simple, on fait une seule requête et on affiche le titre à chaque qu'il change de valeur.

    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
    <?php
     
    $gagnant = mysql_query ( "SELECT * FROM membre_concours WHERE GAGNE='1'" );
    while ( $rec_gagnant = mysql_fetch_array ( $concour ) ) {
     
    	$Concour = '';
     
     
    	if ($Concour != $rec_concour ['TITRE'] ) 
    	    echo $rec_concour ['TITRE'];
    	  // la vous affiché vos gagant  
    			echo '<p>'.$rec_gagnant['NOM'].','.$rec_gagnant['PRENOM'].'</p>';
     
    			$Concour = $rec_concour ['TITRE'];
     
    	}
     
     
    ?>

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2008
    Messages : 112
    Par défaut
    merc pour la réponse, mais êtes vous sur de vos variables ?
    j'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    					$gagnants=mysql_query("SELECT * FROM membre_concours2");
    					while ($rec_gagnant=mysql_fetch_array($gagnants)) 
     
    					{
    						$gagnant = "";
     
    						if ($gagnant != $rec_gagnant['VALCONCOURS']) 
    							echo $rec_gagnant['VALCONCOURS'];
    						  // la vous affiché vos gagant  
    								echo '<p>'.$rec_gagnant['NOM'].','.$rec_gagnant['PRENOM'].'</p>';		
    					}
    mais ca ne marche malheureusement pas...

  8. #8
    Membre Expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Par défaut
    vous avez oublier le plus important

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $gagnants=mysql_query("SELECT * FROM membre_concours2");
    while ($rec_gagnant=mysql_fetch_array($gagnants)) 
     
    		{
    			$gagnant = "";
     
    			if ($gagnant != $rec_gagnant['VALCONCOURS']) 
    				echo $rec_gagnant['VALCONCOURS'];
    				 // la vous affiché vos gagant  
    					echo '<p>'.$rec_gagnant['NOM'].','.$rec_gagnant['PRENOM'].'</p>';	
     
                   $gagnants =$rec_gagnant['VALCONCOURS']; //  tu a oublié cette ligne.
     
    			}
    vous avez ces deux variables dans votre script $gagnants et $gagnant. il est fortement déconseillé de faire un tel nommage, vos pouvez facilement vous tromper et le débogage devient difficile .

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2008
    Messages : 112
    Par défaut
    même avec cette ligne, le résultat est sous cette forme :
    CONCOURS01
    gagnant01_concours01
    CONCOURS01
    gagnant02_concours01
    CONCOURS01
    gagnant03_concours01
    etc...

    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
    $gagnants=mysql_query("SELECT * FROM membre_concours2");
    while ($rec_gagnant=mysql_fetch_array($gagnants)) 
     
    		{
    			$sql = "";
     
    			if ($sql != $rec_gagnant['VALCONCOURS']) 
    				echo $rec_gagnant['VALCONCOURS'];
    				 // la vous affiché vos gagant  
    					echo '<p>'.$rec_gagnant['NOM'].','.$rec_gagnant['PRENOM'].'</p>';	
     
                   $sql=$rec_gagnant['VALCONCOURS']; //  tu a oublié cette ligne.
     
    			}
     
     
    	}

  10. #10
    Membre Expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Par défaut
    c'est une erreur de ma part, j'ai pas testé le code, il faut initialisé $sql à l'extérieur de la boucle sinon la condition est toujours à vrai.

    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
    $gagnants=mysql_query("SELECT * FROM membre_concours2");
    $sql = "";
    while ($rec_gagnant=mysql_fetch_array($gagnants)) 
     
    		{
     
     
    			if ($sql != $rec_gagnant['VALCONCOURS']) 
    				echo $rec_gagnant['VALCONCOURS'];
    				 // la vous affiché vos gagant  
    					echo '<p>'.$rec_gagnant['NOM'].','.$rec_gagnant['PRENOM'].'</p>';	
     
                   $sql=$rec_gagnant['VALCONCOURS']; //  tu a oublié cette ligne.
     
    			}
     
     
    	}

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2008
    Messages : 112
    Par défaut
    Merci beaucoup aityahia!
    effectivement c'est tout bon comme ça!
    bon week-end

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

Discussions similaires

  1. continue; et incrementation dans une while loop !
    Par el_bacha dans le forum Langage
    Réponses: 2
    Dernier message: 02/05/2011, 01h23
  2. while dans une variable ?
    Par cyprus dans le forum Langage
    Réponses: 6
    Dernier message: 14/12/2010, 16h15
  3. probleme de boucle while dans une procedure stockée
    Par aboulemagnifique dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 08/08/2007, 12h39
  4. While dans une function ?
    Par jfberub dans le forum Langage
    Réponses: 5
    Dernier message: 02/12/2006, 21h34
  5. insérer les recordset d'un while dans une variable
    Par yoda_style dans le forum ASP
    Réponses: 4
    Dernier message: 31/03/2005, 10h01

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