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 :

[PHP-JS] Lecture des options d'un select


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    Points : 145
    Points
    145
    Par défaut [PHP-JS] Lecture des options d'un select
    Bonjour,

    Je reviens sur un pb d'affichage des valeurs des options de select.
    Voici un exemple simple sur le principe :

    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
    // Inclusion de l'entete de page
    include("../entetepied/hautpage.php");
     
    // Après validation
     
    if (isset($_POST['valider']))
    {
    	$ret.="<script>alert('valider');</script>";
    	foreach($_POST['toto'] as $clef => $list){ 
    	  foreach($list as $val => $text){ 
    		echo 'liste '.$clef.' valeur '.$val.' : '.$text.'</br>'; 
    	  } 
    	}
    }
     
    // Contenu de la fenêtre
    $ret.='<form name="maj_form" action="../admin/document.php" method="post">';
    $ret.='</br></br></br></br></br></br></br></br></br></br>';
     
    $ret.='<select name="toto[0]" class="1">';
    $ret.='<option value="1">valeur1</option>';
    $ret.='<option value="2">valeur2</option>';
    $ret.='<option value="3">valeur3</option>';
    $ret.='<option value="4">valeur4</option>';
    $ret.='</select>';
    $ret.='<select name="toto[1]" class="1">';
    $ret.='<option value="1">valeur5</option>';
    $ret.='<option value="2">valeur6</option>';
    $ret.='<option value="3">valeur7</option>';
    $ret.='<option value="4">valeur8</option>';
    $ret.='</select>';
     
    $ret.="<input type='submit' name='valider' value='Valider'>";
    $ret.="</form>";
     
     
    $ret.="</body></html>";
    echo $ret;
    Après validation il ne s'affiche rien. J'ai dû raté qqchose.

    Avez-vous une idée ?

    Merci.

  2. #2
    Membre régulier Avatar de ashurai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 144
    Points : 115
    Points
    115
    Par défaut
    $essaie comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach($_POST as $clef => $list)
    Ca fonctionne chez moi

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par ashurai
    $essaie comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach($_POST as $clef => $list)
    Ca fonctionne chez moi
    Il me donne :
    • liste toto valeur 0 : 1
      liste toto valeur 1 : 1


    Comment obtenir les valeurs des options : "valeur1", "valeur2",... ?

  4. #4
    Membre régulier Avatar de ashurai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 144
    Points : 115
    Points
    115
    Par défaut
    Si tu veux le texte des options, soit tu le récupére en Javascript, soit tu doit donné la même valeur à ton option que ton texte, afin d'avoir directement le texte en PHP.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par ashurai
    Si tu veux le texte des options, soit tu le récupére en Javascript, soit tu doit donné la même valeur à ton option que ton texte, afin d'avoir directement le texte en PHP.
    La solution par javascript n'est pas possible puisqu'il ne connait plus "maj_form".
    J'ai donc nommé les options avec leur texte.
    Là si je fais :
    Il trouve 2.
    Les valeurs sont la première valeur de chaque select : valeur1 et valeur 5. :
    As-tu une idée ?

  6. #6
    Membre régulier Avatar de ashurai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 144
    Points : 115
    Points
    115
    Par défaut
    j'ai testé en séléctionnant "valeur3" et "valeur6", et ca marche :

    liste toto valeur 0 : valeur3
    liste toto valeur 1 : valeur6

    Ou alors je ne comprend pas ce que tu veux

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    Points : 145
    Points
    145
    Par défaut
    Effectivement ça marche pour une valeur sélectionnée dans chaque select.
    Mais je veux récupérer la totalité des valeurs. Même si je mets "selected" dans toutes les options il ne trouve que "valeur4" et "valeur"8".

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    // Après validation
     
    if (isset($_POST['valider']))
    {
    	echo 'count($toto) : '.count($_POST['toto']).'</br>';
    	foreach($_POST as $clef => $list){ 
    	  foreach($list as $val => $text){ 
    		echo 'clef '.$clef. ' list '.$list.' valeur '.$val.' : '.$text.'</br>'; 
    	  } 
    	}
    }
     
    // Contenu de la fenêtre
    $ret.='<form name="maj_form" action="../admin/document.php" method="post">';
    $ret.='</br></br></br></br></br></br></br></br></br></br>';
     
    $ret.='<select name="toto[0]" class="1" multiple>';
    $ret.='<option value="valeur1" selected>valeur1</option>';
    $ret.='<option value="valeur2" selected>valeur2</option>';
    $ret.='<option value="valeur3" selected>valeur3</option>';
    $ret.='<option value="valeur4" selected>valeur4</option>';
    $ret.='</select>';
    $ret.='<select name="toto[1]" class="1" multiple>';
    $ret.='<option value="valeur5" selected>valeur5</option>';
    $ret.='<option value="valeur6" selected>valeur6</option>';
    $ret.='<option value="valeur7" selected>valeur7</option>';
    $ret.='<option value="valeur8" selected>valeur8</option>';
    $ret.='</select>';
     
    $ret.="<input type='submit' name='valider' value='Valider'>";
    $ret.="</form>";

  8. #8
    Membre régulier Avatar de ashurai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 144
    Points : 115
    Points
    115
    Par défaut
    d'accord, en fait tu ne peux récupérer que les valeurs séléctionnées, et comme tu ne peux en séléctionner qu'un par select, tu n'en recupere qu'une.

    Il te faut utiliser un Select avec multiselection en ajoutant l'attribut MULTIPLE dans ta balise select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="MySelect" MULTIPLE>

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par ashurai
    d'accord, en fait tu ne peux récupérer que les valeurs séléctionnées, et comme tu ne peux en séléctionner qu'un par select, tu n'en recupere qu'une.

    Il te faut utiliser un Select avec multiselection en ajoutant l'attribut MULTIPLE dans ta balise select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="MySelect" MULTIPLE>
    C'est ce qu j'ai fait. Dans ma précédente réponse j'ai joint le code.

  10. #10
    Membre régulier Avatar de ashurai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 144
    Points : 115
    Points
    115
    Par défaut
    pfff, j'avais même pas vu
    ... Je regarde ce qui cloche, désolé ...

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par ashurai
    pfff, j'avais même pas vu
    ... Je regarde ce qui cloche, désolé ...
    J'ai trouvé un code sur le web qui fonctionne très bien avec un seul select.
    Il change le nom du select en tableau. Cette notion permet à php de traiter le select comme un tableau.

    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
    if(isset($_POST['Col1']) && !empty($_POST['Col1'])){ 
      $Col1_Array = $_POST['Col1']; 
      foreach($Col1_Array as $selectValue){ 
        echo $selectValue."<br>"; 
      } 
    } 
     
    $ret.='<html>'; 
    $ret.='<head>'; 
    $ret.='<title>Recuperer valeur select dans variable php</title>'; 
    $ret.='<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />'; 
     
    $ret.='<script>'; 
    $ret.='function PostSelect(liste){ ';
     
      // On modifie l'ID du champ select pour que PHP traite cette 
      // dernière comme un array 
    $ret.='  document.forms[liste].elements.Col1.name = "Col1[]"; ';
     
      // On soumet le formulaire 
    $ret.='  document.forms[liste].submit(); ';
    $ret.='} ';
    $ret.='</script>'; 
    $ret.='</head>'; 
     
    $ret.='<body>'; 
    $ret.='<form name="Liste1" method="post" action="../admin/document.php" onSubmit="PostSelect(this.name)">'; 
    $ret.='  <select name="Col1" size="4" multiple style="width: 150px">'; 
    $ret.='    <option value="Valeur 1" selected>Valeur 1</option>'; 
    $ret.='    <option value="Valeur 2" selected>Valeur 2</option>'; 
    $ret.='    <option value="Valeur 3" selected>Valeur 3</option>'; 
    $ret.='    <option value="Valeur 4" selected>Valeur 4</option>'; 
    $ret.='    <option value="Valeur 5" selected>Valeur 5</option>'; 
    $ret.='  </select><br><br>'; 
    $ret.='  <input name="Envoyer" type="submit" value="Envoyer" />'; 
    $ret.='</form>';
    Le pb c'est que je n'arrive pas à adapter cette solution à une collection de select.

    Es-tu + inspiré que moi ?

  12. #12
    Membre régulier Avatar de ashurai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 144
    Points : 115
    Points
    115
    Par défaut
    J'ai un peu de mal avec cette collection de select aussi .

    Tu es obligé de passé par une collection ? Tu ne peux pas nommé chacuns de tes select différemment ?
    Je sais pas, du genre "sel1", "sel2" ... aprés validation, tu boucle sur tous tes select ?

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par ashurai
    J'ai un peu de mal avec cette collection de select aussi .

    Tu es obligé de passé par une collection ? Tu ne peux pas nommé chacuns de tes select différemment ?
    Je sais pas, du genre "sel1", "sel2" ... aprés validation, tu boucle sur tous tes select ?
    Ces select sont créés dans une boucle avec comme nom toto[$x].
    Ils peut s'en créer de 0 à n.
    Je ne peux donc pas les nommer individuellement.

    C'est un vrai casse-tête.

  14. #14
    Membre régulier Avatar de ashurai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 144
    Points : 115
    Points
    115
    Par défaut
    Non, on va y arriver !

    Dans ta boucle de création nomme tes select différemment sans faire de tableau, un peu comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for($i=0;$i++;$i<n)
    {
      print '<select name="MySelect'.$i.'">';
    }
    Et comme ca aprés validation, tu parcours de 0 à n tes selects, tu test avant si le POST correspondant éxiste, et tu utilise le bout de code que tu as trouvé sur le Net.
    J'espere être assez clair ... Je pense que comme ca, ca devrait marcher.

  15. #15
    Membre éclairé Avatar de Yobs
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    675
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 675
    Points : 846
    Points
    846
    Par défaut
    pour ton select:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ret.='<select name="toto[]" class="1" multiple>'; 
    $ret.='<option value="valeur[]" selected>valeur1</option>'; 
    $ret.='<option value="valeur[]" selected>valeur2</option>'; 
    $ret.='<option value="valeur[]" selected>valeur3</option>'; 
    $ret.='<option value="valeur[]" selected>valeur4</option>';
    et pour ta boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for ($i = 0; $i<sizeof($_POST['toto']);$i++) {
       echo $_POST['toto'][$i]."<br>";
    }
    Chaque problème a une solution, mais il est plus facile de répondre si le problème est correctement renseignés

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par ashurai
    Non, on va y arriver !

    Dans ta boucle de création nomme tes select différemment sans faire de tableau, un peu comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for($i=0;$i++;$i<n)
    {
      print '<select name="MySelect'.$i.'">';
    }
    Et comme ca aprés validation, tu parcours de 0 à n tes selects, tu test avant si le POST correspondant éxiste, et tu utilise le bout de code que tu as trouvé sur le Net.
    J'espere être assez clair ... Je pense que comme ca, ca devrait marcher.
    Tu es un géni. Si si...
    Je te remercie beaucoup pour cette idée lumineuse.

    Bonne fin de journée.

  17. #17
    Membre régulier Avatar de ashurai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 144
    Points : 115
    Points
    115
    Par défaut
    Sinon.. la méthode a Yobs marche nickel... c'est encore plus simple.

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par ashurai
    Sinon.. la méthode a Yobs marche nickel... c'est encore plus simple.
    Il n'y a pas de notion de collection de select.

  19. #19
    Membre éclairé Avatar de Yobs
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    675
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 675
    Points : 846
    Points
    846
    Par défaut
    Que veux tu dire par notion de collection de select?
    Chaque problème a une solution, mais il est plus facile de répondre si le problème est correctement renseignés

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par Yobs
    Que veux tu dire par notion de collection de select?
    Des select faisant partie d'un tableau de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ret.='<select name="toto[0]" class="1">'; 
    $ret.='<option value="1">valeur1</option>'; 
    $ret.='<option value="2">valeur2</option>'; 
    $ret.='<option value="3">valeur3</option>'; 
    $ret.='<option value="4">valeur4</option>'; 
    $ret.='</select>'; 
    $ret.='<select name="toto[1]" class="1">'; 
    $ret.='<option value="1">valeur5</option>'; 
    $ret.='<option value="2">valeur6</option>'; 
    $ret.='<option value="3">valeur7</option>'; 
    $ret.='<option value="4">valeur8</option>'; 
    $ret.='</select>';

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [IE] Enlever des options d'un select
    Par sliderman dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/01/2009, 19h22
  2. [PHP-JS] Personnalisation des options d'affichage
    Par cirtey dans le forum Langage
    Réponses: 3
    Dernier message: 14/12/2006, 17h35
  3. Changer la police des options d'un select
    Par MrMaze dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 02/06/2006, 17h44
  4. Comment fonctionnent les index des options d'un select ?
    Par pekka77 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/10/2005, 18h05
  5. [html/css]coloration des options dans un select
    Par the_edge dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 04/05/2005, 15h19

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