COURS PHP

  Dernière mise à jour effectuée le : Mardi 23 septembre 2003    

Accueil | Passer la valeur d'une liste multiple (Method = GET)

Passer la valeur d'une liste multiple (Method = GET)


Pre-requis :

 


Supposons le formulaire suivant :

<form action="AffListeMultipleGet.php" method="GET" name="formulaire">
Je travaille sur
<select name="Ordinateur" size="3" multiple >
<option value="PC sous Windows">PC sous Windows</option>
<option value="PC sous NT">PC sous NT</option>
<option value="MacIntosh">MacIntosh</option>
</select>
<input type="submit" value="Envoyer">
</form>

dans lequel j'ai mis en rouge et en bleu les choses importantes. Ce qui donnera à l'écran :

Je travaille sur

 

N'essayez pas de cliquer sur le bouton "Envoyer", ça n'est qu'un exemple, et il n'est pas opérationnel. Il le sera plus bas dans la démonstration.

Dans ce type de liste, l'utilisateur à la possibilité de sélectionner plusieurs options en utilisant les combinaisons Ctrl-Clic (choix disjoints) ou Maj-Clic (choix contigus), et non plus une seule option, comme c'était le cas dans les liste de type dites "Menu", c'est-à-dire sans l'attribut "multiple" dans le tag select.
Ici, l'utilisateur ne saisi aucun texte. Il sélectionne ou ne sélectionne pas une ou plusieurs options de la liste. Nous n'avons donc pas de valeur saisie à passer à la page appelée. Mais vous avez certainement remarqué que dans les Tags des listes select, il y a un attribut "value" qui représente justement ce que nous décidons de passer comme valeur pour les options de la liste si l'utilisateur en sélectionne une ou plusieurs. Ce sont ces valeurs que nous récupérerons dans la page appelée par l'intermédiaire de la variable $_GET avec les valeurs des clés associatives représentées par les noms des options de la liste (ce que nous avons mis dans les attribut "name" du tag select de la liste ).
Du moins dans la théorie, car dans les faits, si nous laissons les choses en l'état, la variable $_GET ne contiendra que la valeur de la dernière option sélectionnée par l'utilisateur si il en a sélectionné plusieurs.

Ainsi, si pour récupérer la valeur de l'option sélectionnée (l'attribut "name" est "Ordinateur" pour cette liste ci), nous écrivons, comme nous avons l'habitude de le faire, dans la page appelée :

$_GET[Ordinateur] ;

celle-ci contiendra uniquement ce que nous avons mis dans l'attribut "value" de la dernière option sélectionnée par l'utilisateur (dans l'ordre d'apparition, puisque tout ceci fonctionne en séquentiel)..

Essayez avec la liste select ci-dessous en sélectionnant plusieurs options, et regardez ce que ça donne dans la page appelée AffListeMultipleGet.php en cliquant sur le bouton "Envoyer".

Je travaille sur

Vous voyez, ça n'est pas exactement la réalité de la sélection de l'utilisateur. En effet, la valeur passée, est de type "string" (chaîne de caractères), et ne peut contenir qu'une seule valeur.
Pour résoudre ce petit problème, il va nous falloir dire que le nom (attribut "name") du tag select devra être lui même un tableau. Pour ça, nous n'avons qu'à rajouter à la suite de son nom, deux crochets "[]" et le tour sera joué. Notre tag select deviendra alors (pour le même formulaire) :

<select name="Ordinateur[]" size="3" multiple >

ce qui nous donnera le formulaire suivant :

<form action="AffListeMultiple2Get.php" method="GET" name="formulaire">
Je travaille sur
<select name="Ordinateur[]" size="3" multiple >
<option value="PC sous Windows">PC sous Windows</option>
<option value="PC sous NT">PC sous NT</option>
<option value="MacIntosh">MacIntosh</option>
</select>
<input type="submit" value="Envoyer">
</form>

Maintenant, le poste "Ordinateur" de la variable $_GET n'est plus du type "string" (chaîne de caractères), mais du type "Array" (tableau). La première valeur sélectionnée par l'utilisateur (toujours dans l'ordre d'apparition dans la liste) aura l'index [0], la deuxième l'index [1], etc. Si l'utilisateur sélectionne tout (il peu travailler sur plusieurs machines hein ? ), ça donnera pour la variable $_GET, les valeurs suivantes :

Array
(
     [Ordinateur] => Array
          (
               [0] => PC sous Windows
               [1] => PC sous NT
               [2] => MacIntosh
          )
)

ce qui va nous obliger, pour récupérer tout ce qu'il a sélectionné, à faire une petite boucle (voir la leçon sur les structures répétitives).

Essayez de sélectionner, rien, une, puis deux, puis toutes les valeurs des options du formulaire ci-dessous, et regardez à chaque fois dans la page appelée ce que donne la variable $_GET.

Je travaille sur

Dans la page appelée, le code PHP est le suivant :

<?php

$ListeOrdinateur = array() ;
$ListeOrdinateur = $_GET[Ordinateur] ;
echo "Vous travaillez sur : <br>" ;
for ($i=0; $i<count($ListeOrdinateur); $i++) { // début de boucle
echo "<b>- " . $ListeOrdinateur[$i] . "</b><br>";
} // fin de boucle

?>

L'instruction count($ListeOrdinateur), renvoi le nombre de postes du tableau $ListeOrdinateur.

 

 



Ce cours est enseigné par Philippe Médan 
dans le cadre de la formation des professionnels de l'INTERNET.
au CREFAC , 14 rue Scandicci, 93000 Pantin. Tél. : 01 48 46 51 99
au GITA-GRETA , Lycée Technologique Diderot 61, rue David D'Angers 75019 Paris Tél. : 01 40 40 36 27
au CESI à l'Ecole des ingénieurs, 116 Av Aristide Briand, BP 57, 92224 Bagneux CEDEX Tél. : 01 45 36 70 00

© Philippe Médan 1999-2003. Tous droits de reproduction réservés pour tous pays.