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 :

balise <optgroup> dans une boucle while [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 350
    Points : 149
    Points
    149
    Par défaut balise <optgroup> dans une boucle while
    Bonjour à tous,
    Serait-il possible d’afficher les résultats d’une requête inclus dans une boucle sql comme ceci :

    Dupond B.
    Dupont G.
    Lemaire T.
    (Fam.) Leclou
    Leclou T.
    Leclou X.
    Legros T.
    Bodevin R.


    Alors que mon code produit ceci :
    Dupond B.
    Dupont G.
    Lemaire T.
    (Fam.) Leclou
    Leclou T.
    (Fam.) Leclou
    Leclou X.
    Legros T.
    Bodevin R.

    Je ne vois pas comment supprimer la redondance type « (Fam.) » dans la boucle.

    La table users comprend par exemple 4 champs :
    Id
    Nom
    Prénom
    Type (contient soit rien soit (Fam.) )



    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
     
    $sql2 = $DB_con->query("SELECT * FROM users  ORDER BY nom ASC ");
     
    <select class="form-control" id="name2" name="name2" />
             <?php
            while( $data2 = $sql2->fetch(PDO::FETCH_OBJ) )
             {
                    if($data2->type == '(Fam.)'){      ?>
                          <optgroup  label="<?php echo $data2->type.' '.$data2->nom ; ?>">
                          <option  value="<?php echo $data2->user_id;?>"> <?php echo $data2->nom.' '.$data2->prenom; ?></option> 
                          </optgroup>
                    <?php
    		}
    		else { ?>
    		      option  value="<?php echo $data2->user_id;?>"> <?php echo $data2->nom.' '.$data2->prenom; ?></option> 
    		<?php }
     
           }?>
    </select>
    En vous remerciant pour l'aide

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    la 1re étape est de construire un tableau temporaire en parcourant les résultats de la requête

    cet tableau aura 2 dimensions comme cela par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $tableau = [
        "(Fam.) Leclou" => [
            "Leclou T.",
            "Leclou X.",
        ],
        "(Fam.) Poule" => [
            "Poule V.",
        ],
    ];

    ensuite avec une 2e boucle vous parcourez ce tableau intermédiaire pour construire le code HTML de retour

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    une astuce :
    Code php : 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
    <?php
    $sql2 = $DB_con->query("SELECT * FROM users  ORDER BY nom ASC ");
     
    $nom_encours = '';
    ?>
    <select class="form-control" id="name2" name="name2" />
    <?php
    	while( $data2 = $sql2->fetch(PDO::FETCH_OBJ) )
    	{
    		if( $data2->type == '(Fam.)' && $nom_encours != $data2->nom )
    		{  
    			$nom_encours = $data2->nom;
    ?>
    	<optgroup label="<?php echo $data2->type.' '.$data2->nom ; ?>"></optgroup>
    <?php
    		}
    ?>
    		<option  value="<?php echo $data2->user_id;?>"> <?php echo $data2->nom.' '.$data2->prenom; ?></option> 
    <?php 
    	}
    ?>
    </select>
    l'astuce : <optgroup...></optgroup> est fermé sans "entourer" les options concernées.

    Mais fermer </optgroup> après est plus complexe à mettre en place
    (et nécessite de passer par un array intermédiaire* avant de construire les options)


    * comme le propose mathieu

  4. #4
    Membre habitué Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 350
    Points : 149
    Points
    149
    Par défaut
    Héhéé bien vu l'astuce Jreaux62

    Merci pour vos réponses.

    J'ai juste complété le script pour l'indentation comme ceci:

    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
     
    <?php
     $nom_encours = '';
    ?>
     <select class="form-control" id="name2" name="name2" />
       <?php
         while( $data2 = $sql2->fetch(PDO::FETCH_OBJ) )	  {
    		  if( $data2->type == '(Fam.)' && $nom_encours != $data2->nom ) 
                      {
     			$nom_encours = $data2->nom;
        ?>
    			  <optgroup label="<?php echo $data2->type.' '.$data2->nom ; ?>"></optgroup>
    		  <?php
    		  }
    			   if( $data2->type == '(Fam.)') {
    		  ?>
    			  <option  value="<?php echo $data2->user_id;?>">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <?php echo $data2->nom.' '.$data2->prenom; ?></option> 
                     <?php }
    			   else { ?>
    			   <option  value="<?php echo $data2->user_id;?>"> <?php echo $data2->nom.' '.$data2->prenom; ?></option> 
    			 <?php }
      }
      ?>
    		  </select>

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

Discussions similaires

  1. [Tkinter] Méthode get() dans une boucle while
    Par Thundie dans le forum Tkinter
    Réponses: 2
    Dernier message: 04/02/2006, 00h06
  2. Problème de SCANF dans une boucle WHILE
    Par FidoDido® dans le forum C
    Réponses: 4
    Dernier message: 30/12/2005, 17h42
  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