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 contient les informations qui se trouvent dans 2 "table"s différentes. [PHP 5.0]


Sujet :

Langage PHP

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Par défaut Menu déroulant contient les informations qui se trouvent dans 2 "table"s différentes.
    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>...]

    Voici mon code qui marche*:
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
      <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éléctionnée
    <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?
    Au moins, vous pouvez me donner des idées...

    Merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 236
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req_quatre_autresOption =   "SELECT fld_id_nom, fld_nom FROM $table_db_nom WHERE fld_id_nom_fruit != 'MUR' order by fld_nom";

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    es-tu sûr d'avoir bien REFLECHI à la CONCEPTION de tes tables ?

    A/ UNE SEULE TABLE aurait probablement suffi (il y a déjà 2 champs communs à tes 2 tables !)
    Avec une seule table : on prend l'ID comme value (car il est auto-incrémenté, et donc unique)
    Dans ton cas, tu risques d'être vite à cours de "code" à 3 lettres :
    - framboise => FRA
    - et pour ... fraise ??

    B/ Avec de DEUX TABLES :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    1/ table des noms de fruits [tb_fruit_nom] :
    id_fruit ; fld_code ; fld_nom
    1......ORA......Orange
    2......MEL......Melon
    3......MUR......Mûre
    4......FRA......Framboise 
    
    2/table des résultats (??) [tb_fruits_new] :
    fld_id ; id_fruit ; fld_pepins ; fld_diametres
    et il y a 2 enregistrements*:
    1......1......cela dépend de......5 cm
    2......3........autant..............0.5 cm
    Les 2 tables sont liées par id_fruit.
    Les requêtes se font alors en jointure + on utilise id_fruit en value (car unique)
    Dernière modification par Invité ; 26/07/2011 à 10h56.

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Par défaut
    Citation Envoyé par gwharl Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req_quatre_autresOption =   "SELECT fld_id_nom, fld_nom FROM $table_db_nom WHERE fld_id_nom_fruit != 'MUR' order by fld_nom";
    Merci gwharl... Ça marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req_quatre_autresOption =   "SELECT fld_id_nom, fld_nom
    												FROM $table_db_nom  WHERE fld_id_nom != 'MUR' order by fld_nom";
    bonne journée

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Les 2 tables sont liées par id_fruit.
    Les requêtes se font alors en jointure + on utilise id_fruit en value (car unique)
    Bonjour jreaux62, tu as raison aussi... parce que c'est logique

    Je vais le voir aussi...

    Merci encore vos aides et bonne journée

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Par défaut
    Bonjour Gwharl, Jreaux62 et les autres
    Citation Envoyé par gwharl Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req_quatre_autresOption =   "SELECT fld_id_nom, fld_nom FROM $table_db_nom WHERE fld_id_nom_fruit != 'MUR' order by fld_nom";
    ça marche le code de Gwharl mais si je rectifie un peu comme le suivant, j'ai un message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $toto = "MUR";
    $req_quatre_autresOption =   "SELECT fld_id_nom, fld_nom
    FROM $table_db_nom  WHERE fld_id_nom != $toto order by fld_nom";
    et voici le message :
    Unknown column 'MUR' in 'where clause'

    Pourquoi ?
    que je dois faire ?

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Par défaut
    il fallait mettre mon variable entre les apostrophes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $toto = "MUR";
    $req_quatre_autresOption =   "SELECT fld_id_nom, fld_nom
    FROM $table_db_nom  WHERE fld_id_nom != '$toto' order by fld_nom";
    Désolé pour ce dérangement...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Pour être plus "propre" et plus lisible (donc plus facile à déboguer), écris-le ainsi :
    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
    <?php
    $toto = "MUR";
    $req_quatre_autresOption = 
    		"SELECT fld_id_nom, fld_nom
    		FROM ".$table_db_nom." 
    		WHERE fld_id_nom != '".$toto."' 
    		ORDER BY fld_nom;";
     
    		// ou :
    $req_quatre_autresOption = 
    		" SELECT fld_id_nom, fld_nom ".
    		" FROM ".$table_db_nom.
    		" WHERE fld_id_nom != '".$toto."' ".
    		" ORDER BY fld_nom;";
    ?>

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Par défaut
    merci pour cette info, jreaux62.
    C'est ainsi plus clair comme tu dis

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Pour être plus "propre" et plus lisible (donc plus facile à déboguer), (...)
    Salut Jreaux62,
    Est-ce que tu pourrais me dire la règle de cette histoire?

    Par exemple avec celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    " SELECT fld_id_nom, fld_nom
      FROM $table_db_nom  ";
    il faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    " SELECT fld_id_nom, fld_nom ".
    " FROM .$table_db_nom";
    mais pas celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    " SELECT fld_id_nom, fld_nom ".
    " FROM ".$table_db_nom.;
    et lorsqu'il y a une jointure?
    par exemple avec celui-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    "	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'";
    Comment fais-tu?

    Merci et bonne journée

  11. #11
    Invité
    Invité(e)
    Par défaut
    C'est juste une question d'écriture, et de lisibilité du code.
    Au lieu d'écrire sur une seule ligne (qui peut être très longue !), on indente la requête sur plusieurs lignes.
    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
    <?php
     		// ici, on écrit toute la requête entre ".............."; 
     		// avec juste des passage à la ligne pour la lisibilité
    $req_quatre_autresOption = "SELECT fld_id_nom, fld_nom FROM ".$table_db_nom." WHERE fld_id_nom != '".$toto."' ORDER BY fld_nom;";
    		// 1ERE ECRITURE :
    $req_quatre_autresOption = 
    		"SELECT fld_id_nom, fld_nom
    		FROM ".$table_db_nom." 
    		WHERE fld_id_nom != '".$toto."' 
    		ORDER BY fld_nom;";
     
    		// ici, c'est de la concaténation : "lign1"."lign2"."lign3";
    $req_quatre_autresOption = " SELECT fld_id_nom, fld_nom "." FROM ".$table_db_nom." WHERE fld_id_nom != '".$toto."' "." ORDER BY fld_nom;";
    		// 2EME ECRITURE :
    $req_quatre_autresOption = 
    		" SELECT fld_id_nom, fld_nom ".
    		" FROM ".$table_db_nom.
    		" WHERE fld_id_nom != '".$toto."' ".
    		" ORDER BY fld_nom;";
    ?>
    Perso, j'utilise la 2ème écriture, mais c'est une question de choix personnel
    Dernière modification par Invité ; 28/07/2011 à 10h30.

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Par défaut
    merci jreaux62, super

    avec la jointure,selon tes explications, je fais ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    " SELECT nevo.fld_id_nom_fruit, nom.fld_id_nom, nom.fld_nom ".
    " FROM ". $table_db . " nevo".
    " INNER JOIN ".$table_db_nom . " nom".
    " ON nevo.fld_id_nom_fruit = nom.fld_id_nom ".
    " WHERE nevo.fld_id_nom_fruit='MUR'";
    bonne journée

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/07/2015, 19h07
  2. Réponses: 6
    Dernier message: 18/07/2014, 14h21
  3. Réponses: 2
    Dernier message: 04/02/2014, 18h13
  4. Ou trouver les informations qui defile lors du boot ?
    Par piff62 dans le forum Administration système
    Réponses: 2
    Dernier message: 17/03/2005, 18h19

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