Menu déroulant contient les informations qui se trouvent dan

Eléphant du PHP | 92 Messages

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

Mammouth du PHP | 19672 Messages

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.
Modifié en dernier par Cyrano le 26 juil. 2011, 16:07, modifié 1 fois.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 92 Messages

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:

Mammouth du PHP | 19672 Messages

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 juil. 2011, 16:13

Salut,

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

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 92 Messages

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

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 92 Messages

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