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

Langage PHP Discussion :

Menu déroulant dynamique et automatique [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut Menu déroulant dynamique et automatique
    Bonjour,
    J'ai un formulaire où j'affiche les âges des utilisateurs et leurs noms...

    Voici le code :

    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
    <?php
     
    include"bd_db/connection.php";
     
    include"bd_db/selection.php";
     
    	$req=  " select bd_age,bd_nom FROM $table_db  ";
    	$rep =  mysql_query($req, $cnx) or die( mysql_error() ) ;
     
    	while($row=mysql_fetch_row($rep)){
    		$var_age=$row[0];
    		$var_nom=$row[1];
     
    	echo "<tr><td>$var_age</td><td>$var_nom</td></tr>"  ;
    		 			}	
     
     
    				 ?>
    Ça fonctionne...

    Je vais mettre un menu déroulant au lieu d'afficher tous les ages dans la table...
    Donc ce menu déroulant va prendre les infos dans la bdd MySql.

    J’arrive afficher les valeurs dans mon menu.

    Voici mon code

    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
    <select name="age_menu" id="age_menu" onchange="submit()">
            <?php
                echo "<option selected=\"selected\" value='null'>Choissiez une option</option>"; 
     
     
    			$res =   " select bd_age FROM $table_db  ";
    			$rep_menu =  mysql_query($res, $cnx) or die( mysql_error() ) ;
     
     
     
                while($affiche_contenu = mysql_fetch_assoc($rep_menu)) {
                    echo '<option value="'.$affiche_contenu['bd_age'].'">'.$affiche_contenu['bd_age'].'</option>';
                }
            ?>
        </select>
    1er question : comment je peux regrouper les informations::rolleyes:
    Exemple
    +---------+-------------+----------+
    | ID | bd_age | bd_nom |
    +---------+-------------+----------+
    | 1 | 5 ans | nathalie |
    | 2 | 5 ans | alice |
    | 3 | 2 ans | nathalie |
    | 4 | 2 ans | john |
    | 5 | 10 ans | gilles |
    +---------+-------------+----------+
    En fait avec le code actuel, les options de mon menu sont 2 fois "5 ans", 2 fois "2 ans" et une fois "10 ans". Comment je peux afficher seulement 3 options au lieu de 5 options (sans répéter) ?:rolleyes:



    2e question : comment je peux afficher les résultats de ce menu, par exemple : lorsque l'on sélecte 5 ans, il faut que j'affiche Nathalie et Alice...:rolleyes:

  2. #2
    Membre régulier Avatar de 2h15Crew
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 79
    Points : 106
    Points
    106
    Par défaut
    Utilise un distinct dans ta requête pour ne sélectionner qu'une occurrence de chaque age.

    Du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT DISTINCT Colonne
    FROM Table

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Utilise DISTINCT dans ta requête.

    Par contre, pour stocker un âge, utilise un champ SMALLINT et ne stocke que la valeur : actuellement tu stockes x fois " ans" pour rien.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Merci 2h15Crew et sabotage
    Ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $res =   " select DISTINCT bd_age FROM $table_db  ";


    Bonsoir sabotage,

    c'est vrais ... tu as raison
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<option value="'.$affiche_contenu['bd_age'].'">'.$affiche_contenu['bd_age'].'ans</option>';
    Est ce que vous avez la solution pour ma 2e question ?

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $an = ($affiche_contenu['bd_age'] == 1) ? ' an' : ' ans';
    echo '<option value="'.$affiche_contenu['bd_age'].'">'.$affiche_contenu['bd_age'].$an.'</option>';
    Pour le résultat, tu as juste à faire une requête avec le critère selectionné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'select bd_nom FROM table WHERE bd_age = ' . intval($_POST['age_menu']);

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Bonjour Sabotage,

    Merci pour le variable $an que je n'ai pas pu penser...

    Pour le critère de sélection j'ai essayé de trouver la solution sans te demander, mais...
    ce que j'ai fait à partir de ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
     			$cherche_menu =   " select bd_nom FROM $table_db WHERE bd_age = " . intval($_POST['age_menu']);
    			$rep_cherche_menu =  mysql_query($cherche_menu, $cnx) or die( mysql_error() ) ;
     
    			while($row_menu=mysql_fetch_row($rep_cherche_menu)){
    				$var_nom=$row_menu[0];
     
    				echo "<table><tr><td>$var_nom</td><td></tr></table>"  ;
    		 										}	
     
     
      ?>
    mais je ne sais pas s'il faut mettre un bouton soumettre et envoyer tout cela dans une autre page pour afficher les résultats ?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    alors, j'ai mis mon code dans 2e page et ça marche lorsqu’on sélectionne un article dans 1er écran, et on click sur le bouton envoyer pour afficher les résultats dans la 2e page

    Voici le code et merci...
    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
    <?php
     
    	//connection au serveur
    	include"bd_db/connection.php";
    	//sélection de la base de données et table
    	include"bd_db/selection_test.php";
     
    		$var_age_menu=$_POST["age_menu"];
    					$var_age_menu= htmlspecialchars($var_age_menu, ENT_QUOTES);
     
     
     			$cherche_menu =   " select bd_nom FROM $table_db WHERE bd_age = " . intval($_POST['age_menu']);
    			$rep_cherche_menu =  mysql_query($cherche_menu, $cnx) or die( mysql_error() ) ;
     
    			while($row_menu=mysql_fetch_row($rep_cherche_menu)){
    				$var_nom=$row_menu[0];
     
    				echo "<table><tr><td>$var_nom</td><td></tr></table>"  ;
    		 										}	
     
    ?>

    j'ai une question*: comment je peux afficher les informations dans 1er (le même) écran où il y a le menu déroulant lorsqu’un article a été sélectionné par l"utilisateur sans cliquer sur un bouton "Envoyer" ?

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Utilise du Javascript.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    merci sabotage,

    Javascript ? c'est compliqué...

    voila la solution sans javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="age_menu" id="age_menu" onChange="location.href='?age='+this.value;">
    ( plus loin)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $age=0+@$_GET['age'];
    $cherche_option_menu =   " select bd_nom,bd_age FROM $table_db WHERE bd_age =".$age;
     
    $rep_cherche_option_menu =  mysql_query($cherche_option_menu, $cnx) or die( mysql_error() ) ;
     
    	while($row_menu=mysql_fetch_row($rep_cherche_option_menu)){
    		$var_nom=$row_menu[0];
    		echo "<table><tr><td>$var_nom</td><td></tr></table>"  ;
    Meerci et bonne journée...

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    c'est du javascript ce que tu nous montres

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    C'est vrai Sabotage mais un p'tit (tout petit) script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onChange="location.href='?age='+this.value;">
    J'ai un problème ... Lorsque je change le critère de mon affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    select bd_nom,bd_age FROM $table_db WHERE bd_age ='".$_GET['age'].
    Comme tu vois, dans le code ci-dessus, je fais mon sélectionne de mon bd, selon âge (dans bd_age qui a un type "smallint(6)), ça marche, mais si je veux faire la sélection, au contraire, selon le nom (dans bd_nom qui a un type "text") pour afficher les âges,
    l'application affiche tous les âges sans que je sélectionne le nom dans le menu.
    voici mon bd :
    +----------+-------------+----------+
    | ID | bd_age | bd_nom |
    |type: |type: |type: |
    |int(11) |smallint(6) | text |
    +----------+------------+----------+
    | 1 | 5 ans | nathalie |
    | 2 | 5 ans | alice |
    | 3 | 2 ans | nathalie |
    | 4 | 2 ans | john |
    | 5 | 10 ans | gilles |
    +---------+-------------+----------+

    Comment je peux trouver la solution ?

    J'ai fais un écho

    echo "echo $age";

    quand c'est avec age (bd_age)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $age=0+@$_GET['age'];
    echo "echo $age";
    $cherche_option_menu =   " select bd_nom,bd_age FROM $table_db WHERE bd_age =".$age;
    echo est 0... donc ça marche
    mais avec le champs, bd_nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $age=0+@$_GET['age'];
    						echo "echo $age";
    						$cherche_option_menu =   " select bd_age,bd_nom FROM $table_db WHERE bd_nom =".$age;
    écho c'est encore 0 et ça ne marche pas

    Comment je peux trouver la solution ?

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    j'ai trouvé...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //$cherche_option_menu =   " select bd_nom,bd_age FROM $table_db WHERE bd_age =".$age;  //une requête sur un champ numérique :
    						$cherche_option_menu =   " select bd_age,bd_nom FROM $table_db WHERE bd_nom ='".$age."'";  //   requête sur un champ alphanumérique :

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 22/03/2007, 08h36
  2. menu déroulant dynamique
    Par jojo971 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/06/2006, 14h43
  3. [Conception] Menu déroulant dynamique et administrable
    Par guy2004 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 16/05/2006, 15h37
  4. Menu déroulant avec préselection automatique
    Par nesbla dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/06/2005, 12h11

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