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 :

Récupération de la valeur choisie d'une liste


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut Récupération de la valeur choisie d'une liste
    Bonjour !

    Déja j'espère avoir écrit dans le bon forum ...

    En fait, j'ai une liste déroulante contenant des choix récupérés via une requête SQL. Quand je fais un choix dans cette liste, ça m'en affiche une seconde.

    Et là le problème c'est que dès que j'affiche ma seconde liste, le choix fait sur la première se change.
    Comment garder ce choix à partir du moment où je l'ai sélectionné ?

    J'avais testé ceci, mais ça ne marche que sur la dernière valeur entrée dans la base :

    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
     
     // Requête pour l'affichage des thèmes
    $req_cat = mysql_query("SELECT Libellé FROM categorie WHERE Numero LIKE 'A%'"); 
    // Thèmes
    echo '<select name="list_thm">';
    while ($donnees = mysql_fetch_array($req_cat) )
    	{
    		$temp = $donnees['Libellé'];
    		echo '<OPTION value="'.$donnees['Numero'].'"';
    		if (isset($_POST['list_thm']))
    		{
    			echo 'selected="selected"';
    		}
    		echo '>'.$temp.'</OPTION>';
    	}
    	echo '</select>';
    Donc si vous pouviez m'aider ça serait avec plaisir =)

  2. #2
    Membre régulier Avatar de daajack
    Inscrit en
    Octobre 2007
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 97
    Points : 97
    Points
    97
    Par défaut
    Hello,

    Il faut prendre l'habitude de contrôler le code html généré pour détecter les erreurs.

    apparemment ton selected viens se coller à l'attribut value, il faudrait donc ajouter un espace et deuxième chose tu contrôle si le tag list_thm a envoyé une valeur, mais tu ne contrôle pas de quelle valeur il s'agit, il faudrait mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_POST['list_thm']) && $_POST['list_thm'] == $donnees['Numero'])
    dans ta condition.

    Sinon le champ 'Libellé' avec majuscule et accent c'est audacieux, mais généralement déconseillé. Et l'idéal serait de mettre le nom de tes tags et attributs en minuscule, c'est plus xhtml-style.
    Mais si tu veux un truc vraiment cool, AJAX is your friend

  3. #3
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Sinon le champ 'Libellé' avec majuscule et accent c'est audacieux, mais généralement déconseillé
    Oui je sais très bien mais mon binôme ne l'a pas encore intégré totalement et comme c'est lui qui a géré la création des tables et tout le tsointsoin ... il a pas écouté tout ce que j'avais dit ! Lol.

    Bon j'ai modifié ce que tu m'as dit et ça ne marche toujours pas :/
    Apparement il ne veut pas me prendre en compte mon espace je ne sais pas pourquoi oO En effet il est bien collé au truc du value, j'ai vérifié dans le code source. J'ai tout testé ce que je connaissais pour l'espace mais rien à faire, est-ce que c'est vraiment ça qui peut faire foirer le truc ?

  4. #4
    Membre régulier Avatar de daajack
    Inscrit en
    Octobre 2007
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 97
    Points : 97
    Points
    97
    Par défaut
    Peux-tu poster ton nouveau code please

  5. #5
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Yep.

    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
     
    // Requête pour l'affichage des thèmes
    $req_cat = mysql_query("SELECT Libellé FROM categorie WHERE Numero LIKE 'A%'"); 
    // Thèmes
    echo '<select name="list_thm">';
    while ($donnees = mysql_fetch_array($req_cat) )
    	{
    		$temp = $donnees['Libellé'];
    		echo '<OPTION value="'.$donnees['Numero'].'"  ';
    		if (isset($_POST['list_thm']) && $_POST['list_thm'] == $donnees['Numero'])
    		{
    			echo ' selected="selected"';
    		}
    		echo '>'.$temp.'</OPTION>';
    	}
    	echo '</select>';
    Bon je suppose que mon espace n'est pas calé au bon endroit ... Mais ça m'étonne que ce soit ça qui puisse faire que mon truc ne marche pas oO

  6. #6
    Membre régulier Avatar de daajack
    Inscrit en
    Octobre 2007
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 97
    Points : 97
    Points
    97
    Par défaut
    Je n'avais pas vu mais tu as oublié de récupérer la valeur de ton option.
    Une petite réecriture du code s'impose :
    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
     
      $req_cat = mysql_query("SELECT Libellé AS lib, Numero AS num FROM categorie WHERE num LIKE 'A%'"); 
     
    ?>
    <select name="list_thm">
    <?php
     
      while ($donnees = mysql_fetch_array($req_cat)) {
     
        if (isset($_POST['list_thm']) && $_POST['list_thm'] == $donnees['num']) $selected = ' selected="selected"';
        else $selected = '';
     
    		echo "<option value=\"{$donnees['num']}\"$selected>{$donnees['lib']}</option>";
      }
    ?>
    </select>
    Je préfère généralement ne pas mettre l'html en echo, ça te permet de profiter de la coloration syntaxique de ton éditeur. Petite exception pour l'option, se serait vraiment trop bordelique sinon.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    je préfère comme ça mais tous est question de gout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
     
      $req_cat = mysql_query("SELECT Libellé AS lib, Numero AS num FROM categorie WHERE numero LIKE 'A%'"); 
     
     
    echo '<select name="list_thm">';
     
      while ($donnees = mysql_fetch_array($req_cat)) {  
     
        $selected=(isset($_POST['list_thm']) && $_POST['list_thm'] == $donnees['num'])? " selected":""; 
    		echo '<option value="'.$donnees['num'].'"'. $selected.'>'.$donnees['lib'].'</option>';
      }
    ?>
    </select>

  8. #8
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Merci à vous 2 pour la solution, ça marche nickel =)

    [EDIT]
    J'ai parlé un peu trop vite ... En fait ça marche très bien pour ma première liste déroulante, quand je sélectionne "plop", je retrouve "plop" dans la seconde, et la première n'a pas changé.
    Par contre si dans la seconde liste déroulante, je choisis "youplala", ça m'affiche la troisième liste, mais la seconde aura changé, le "youplala" aura disparu ...

    Vous voyez ce que je veux dire ? Vous avez une idée de pourquoi ça fait ça ?

    [/EDIT]

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    montre nous le code pr la 2eme liste

  10. #10
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    La première et la seconde ont un code identique excepté pour le name du select qui change évidemment, et pour les adaptations dans les $_POST.

    Vala ce que donne la seconde ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // Requête pour l'affichage des ss catégories
    $ssc = $_POST["list_cat"];
    $req_cat = mysql_query("SELECT Libellé FROM categorie WHERE Numero LIKE '$ssc%' ORDER BY categorie.Libellé ASC"); 
    // Sous catégories
    echo '<select name="list_sscat" onchange="this.form.submit()">';
    while ($donnees = mysql_fetch_array($req_cat)) 
    {  
    	$selected = (isset($_POST['list_sscat']) && $_POST['list_sscat'] == $donnees['Numero'])? " selected":""; 
    	echo '<option value="'.$donnees['Numero'].'"'. $selected.'>'.$donnees['Libellé'].'</option>';
    }
    echo '</select></label>';
    echo '</td>';

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    tu n'as pas de $donnees['Numero'] pour cette requete

  12. #12
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    En effet, j'ai oublié de mettre Numero dans ma requête ><

    Merci pour la rapidité ^^ Maintenant ça marche =P

  13. #13
    Membre régulier Avatar de daajack
    Inscrit en
    Octobre 2007
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 97
    Points : 97
    Points
    97
    Par défaut
    ca vaut bien la peine de lui montrer les alias, lui donner de bon conseil de déontologie il ne m'écoute même pas...

    Sinon la technique du $val = test ? $v1 : ''; je n'y pense jamais, mais c'est plus sympa effectivement.

    Une ou deux remarques :
    Dans ta requête dans 'categorie.Libellé' categorie n'est pas obligatoire si tu n'as qu'une table.
    selected fonctionne mais n'est pas correct, il faudrait mettre comme pour les précédents selected="selected".
    Tu as un vilain </label> après ton select, ça fait saigner les yeux... si il commence avant tu ne dois pas mettre le <select> dedans, et ajouter un attribut for="id du select".

    voilou

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

Discussions similaires

  1. [WD-2002] Comment utiliser la valeur choisie d'une liste déroulante
    Par ouickend dans le forum VBA Word
    Réponses: 2
    Dernier message: 04/05/2010, 16h11
  2. Réponses: 5
    Dernier message: 04/12/2008, 15h58
  3. Récupérer la valeur choisie ds une liste
    Par taroudant dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 08/08/2006, 10h53
  4. Afficher la valeur choisie d'une liste déroulante dans une textbox
    Par bouchette63 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 20/06/2006, 14h26
  5. Récupération de la valeur visible d'une Liste déroulante
    Par Yaz dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 26/10/2004, 12h01

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