Menu déroulant contient les informations qui se trouvent dan

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Menu déroulant contient les informations qui se trouvent dan

Re: Menu déroulant contient les informations qui se trouvent dan

par aspkiddy » 26 juil. 2011, 16:57

S.... il y a un tuto assez complet sur les listes déroulantes liées, tu y trouveras sûrement des informations utiles et trois manières de le faire.
Super intéressante Cyrano, merci :D

Re: Menu déroulant contient les informations qui se trouvent dan

par Cyrano » 26 juil. 2011, 16:38

Si la seconde liste dépend du choix dans la première, alors effectivement tu n'as pas le choix. Jette un coup d’œil dans la FAQ, il y a un tuto assez complet sur les listes déroulantes liées, tu y trouveras sûrement des informations utiles et trois manières de le faire.

Re: Menu déroulant contient les informations qui se trouvent dan

par aspkiddy » 26 juil. 2011, 16:25

Bonjour Cyrano,
en fait, je dois utiliser 2 requêtes... et voici la 2e :
$req_quatre_autresOption =   "SELECT fld_id_nom, fld_nom
							FROM $table_db_nom  
                                                        WHERE fld_id_nom != 'MUR' order by fld_nom";
:D
Tu as raison en me disant :
- De quelles données ai-je besoin ?
les informations qui se trouve dans 1er table pour afficher les résultats (ou bien sélectionner l'option sélectionnée par utilisateur)
afficher les autres options qui se trouve dans 2e table pour que les utilisateurs peuvent choisir/changer une autre option
-Puis-je obtenir toutes ces données en une seule requête ?
Non il faut les deux... (si je ne m'en trompe pas)
Bonjour Moogli,
C’est vrai ce que tu dis, mais avec une jointure ( comme tu vois dans mon 1er code, en commenté) je n'obtiens pas toutes les options..

Merci pour vos explication

Bonne journée

Re: Menu déroulant contient les informations qui se trouvent dan

par moogli » 26 juil. 2011, 16:13

Salut,

Non utilise une jointure ;)
http://sqlpro.developpez.com/cours/sqlaz/jointures/

@+

Re: Menu déroulant contient les informations qui se trouvent dan

par Cyrano » 26 juil. 2011, 16:11

Vu pour la rectification, une erreur de ma part, j'ai corrigé ma réponse précédente.

Por ton problème, j'ai le sentiment que tu te poses la mauvaise question, la bonne étant finalement : « De quelles données ai-je besoin ? » Et en conséquence la suivante sera donc « Puis-je obtenir toutes ces données en une seule requête ? »

Dans un autre sujet, tu avais un problème de jointure sur ces mêmes tables, est-ce que ça ne répondrait finalement pas à tout ceci ?

Re: Menu déroulant contient les informations qui se trouvent dan

par aspkiddy » 26 juil. 2011, 15:54

Salut Cyrano,

Merci pour tes explications, :D

J’ai rectifié ton code (en replaçant « $selected » par « $selectedfruit » à la dernière ligne de ton code) et ça marche... :D
echo '<option value="'.$id_fruit.'« '. $selectedfruit .'>'.$nom_fruit.'</option>';
J'ai aussi appris "Les ternaires : des conditions condensées" grâce à ta condition (en cherchant sur google) (super sympa) je ne les connaissais pas du tout : :D
$selectedfruit = ($id_fruit == 'MUR')? ' selected="selected"' : null;
Par contre, mon problème n'est pas encore résolu : :oops:
Je n'ai pas écrit tous les détails dans ma question pour simplifier.
Dans mon cas, il y a 2 tables.... et c'est pour cela que j'ai fait deux requêtes :


1re table, c'est le résultat [tb_fruits_new] qui contient 5 champs/colonnes

fld_id ; fld_id_nom_fruit ; fld_nom_new ; fld_pepins ; fld_diametres
et il y a 2 enregistrements :
1......ORA......Orange......cela dépend de......5 cm
2......MUR......Mûre........autant..............0.5 cm

J'affiche toutes les informations de cette table dans un écran et les utilisateurs peuvent rectifier un enregistrement...
Pour cela il faut cliquer sur le id de l'information (fld_id) et ils arrivent sur l'écran de formulaire...
j'ai récupéré l'id sélectionné :
$id_info=$_GET['id'];
Ensuite on affiche les champs et le menu déroulant...
Toutes les options de ce menu viennent de la 2e table (tb_fruit_nom)
par contre pour sélectionner l'option, il faut les informations qui sont dans la 1re table :
Par id (fld_id), il faut trouver quel fruit sélectionné dans (fld_id_nom_fruit)...
$req_quatre =   " SELECT fld_id_nom_fruit, fld_nom
                  FROM $table_db
                  WHERE fld_id_nom_fruit=$id_info »;
Alors, il faut que j'utilise absolument 2 requêtes, n'est-ce pas? :?: :roll:

Re: Menu déroulant contient les informations qui se trouvent dan

par Cyrano » 26 juil. 2011, 07:56

Salut, je ne saisis pas pourquoi tu te compliques la vie à ce point.

Ton code n'indique pas d'où vient la donnée indiquant que tel ou tel fruit doit être sélectionné, mais peu importe, il n'y a pas de raison de faire deux requêtes, une seule requête et une condition dans la boucle qui construit les options peut permettre de dire laquelle doit être pré-sélectionnée. Ça ressemblerait alors à ceci :
<?php
//...
$req_toutesOptions = "SELECT fld_id_nom, fld_nom ".
                     "FROM ". $table_db_nom ." ".
                     "ORDER BY fld_nom";

$rep_toutes_autresOption =  mysql_query($req_toutesOptions, $cnx) or die( mysql_error() ) ;

while($affiche_contenu_toutes_Options = mysql_fetch_array($rep_toutes_autresOption))
{
    $id_fruit  = $affiche_contenu_toutes_Options[0];
    $nom_fruit = $affiche_contenu_toutes_Options[1];
    /**
     * On présélectionne l'option si elle correspond au choix
     */
    $selectedfruit = ($id_fruit == 'MUR') ? ' selected="selected"' : null;
    /* On construit l'option */
    echo '<option value="'.$id_fruit.'"'. $selectedfruit .'>'.$nom_fruit.'</option>';
}
Partant de là, remplace ce qu'il faut pour que la pré-sélection soit dynamique en mettant l'identifiant dans une variable si nécessaire. Et tu peux à priori faire sauter tout le code qui précède tout ça.

Menu déroulant contient les informations qui se trouvent dan

par aspkiddy » 25 juil. 2011, 22:03

Bonjour,
1re table, c'est le résultat [tb_fruits_new] qui contient 5 champs/colonnes

fld_id ; fld_id_nom_fruit ; fld_nom_new ; fld_pepins ; fld_diametres
et il y a 2 enregistrements :
1......ORA......Orange......cela dépend de......5 cm
2......MUR......Mûre........autant..............0.5 cm

Avec ces informations, je construis mon option sélectionnée de mon menu déroulant :
[<option selected="selected » value="MUR">Mûre</option>]

2e table contient les noms de fruits [tb_fruit_nom] qui contient 3 champs/colonnes
id ; fld_id_nom ; fld_nom
et il y a 4 enregistrements dedans :
1......ORA......Orange
2......MEL......Melon
3......MUR......Mûre
4......FRA......Framboise

Avec ces informations je construis mes autres options non sélectionnées de mon menu déroulant :
[<option value="FRA">Framboise </option><option value="MEL">Melon</option>...]
  <select name="nom_menu" id="nom_menu"  class="valid"  onchange="submit()" >
        <?php
		include"../bd_db/selection_test_fruits.php";
           
//**************---------------------1er partie du menu :
				//affichage 1ere option qui est séléctionné dans le menu exemple : 
				//<option selected="selected" value="MUR">Mûre</option>
//**************---------------------				
			
			
			//requête  la jointure entre les deux tables
			//je les desactive
//				$req_quatre =   " SELECT new.fld_id_nom_fruit, nom.fld_id_nom, nom.fld_nom
//										FROM $table_db new
//										INNER JOIN $table_db_nom nom
//											ON new.fld_id_nom_fruit = nom.fld_id_nom
//										WHERE new.fld_id_nom_fruit='MUR'";
									
			//requête  sans jointureavec la table db
			$req_quatre =   " SELECT fld_id_nom_fruit, fld_nom
									FROM $table_db
									WHERE fld_id_nom_fruit='MUR'";
			          
			$rep_quatre =  mysql_query($req_quatre, $cnx) or die( mysql_error() ) ;
			
			
			
            while($affiche_contenu_quatre = mysql_fetch_array($rep_quatre)) {
				
				
					$id_fruit_table_new=$affiche_contenu_quatre[0];
					$id_fruit_table_nom=$affiche_contenu_quatre[1];
					//$nom_table_nom=$affiche_contenu_quatre[2]; //pour la requête avec la jointure entre les deux tables

				
				echo '<option selected="selected" value="'.$id_fruit_table_new.'"';
									//echo '>'.$nom_table_nom.'</option>'; //pour la requête avec la jointure entre les deux tables
									echo '>'.$id_fruit_table_nom.'</option>';
									
				 }
//**************---------------------1er partie du menu FIN ---------------------**************
				
				
//:::::::::::::::::::::: 2e partie: affichage les autres options qui ne sont pas séléctionné	
				
				
				$req_quatre_autresOption =   "SELECT fld_id_nom, fld_nom
												FROM $table_db_nom order by fld_nom";
			          
				$rep_quatre_autresOption =  mysql_query($req_quatre_autresOption, $cnx) or die( mysql_error() ) ;
			
			
			
           		 while($affiche_contenu_quatre_quatre_autresOption = mysql_fetch_array($rep_quatre_autresOption)) {
				
				
					
					$id_fruit=$affiche_contenu_quatre_quatre_autresOption[0];
					$nom_fruit=$affiche_contenu_quatre_quatre_autresOption[1];

				echo '<option value="'.$id_fruit.'">'.$nom_fruit.'</option>';

            }
//:::::::::::::::::::::: 2e partie:  FIN :::::::::::::::::::::: 
        ?>
      </select>
Mais j'ai un petit souci...
Puisque, dans mon 2e enregistrement : de ma 1re table contient « MUR » alors, il y a
<option selected="selected » value="MUR">Mûre</option> dans mon menu,
mais dans ma 2e table, au 3e enregistrement, il y a aussi « MUR »...

Donc, c'est normal que j'aie 2 mêmes options : l'une est sélectionnée, l'autre n'est pas sélectionnée :arrow:
<option selected="selected » value="MUR">Mûre</option>
<option value="FRA">Framboise </option>
<option value="MEL">Melon</option>
<option value="MUR">Mûre</option>
<option value="ORA">Orange</option>

Comment peux-je éviter d'afficher la 2e qui n'est pas sélectionnée? :oops:
Au moins, vous pouvez me donner des idées... :shock:

Merci