| Accueil | table PHP | index PHP | précédent | suivant |

Les formulaires - 6 (listes de sélections)

Reprenons l'exemple précédent en remplaçant les boutons radio par une liste à sélection unique et les cases à cocher par une liste à sélection multiple (dans cet exemple, les listes select sont produites par un script PHP à partir des tableaux contenant les titres. Notez également que l'on peut affecter un style aux listes select).

Lorsqu'un élément est coché dans la liste à sélection unique de nom ma_liste, sa valeur (value) est retournée dans le tableau $_POST et peut être obtenue par $_POST["ma_liste"], définissant ainsi l'élément qui a été coché.

Pour obtenir une liste à sélections multiples, il faut lui affecter un nom de tableau comme ma_liste[] et la déclarer multiple en plaçant dans sa balise la déclaration multiple="multiple". Lorsque plusieurs éléments sont cochés (maintenir la touche Ctrl enfoncée pour en sélectionner plusieurs), leurs valeurs (value) sont placées dans les premières positions du tableau associé et sont récupérables par $_POST["ma_liste"][position] (bien noter que ces positions ne correspondent donc pas nécessairement à l'ordre des éléments dans la liste).


/* Fichier PHPStyle013.css */

body
{
background-color : rgb(245,235,204);
}

#form
{
position : absolute;
left : 7cm;
top : 1cm;
padding-top : 10px;
background-color : rgb(255,255,255);
font-family : Verdana;
font-size : 9pt;
color : rgb(0,0,0);
line-height : 150%;
}

h2
{
margin-top : 0;
font-size : 12pt;
color : rgb(60,0,0);
text-align : center;
}

h3
{
margin-top : 20px;
margin-bottom : 0;
font-size : 10pt;
color : rgb(60,0,0);
text-align : center;
}

.age
{
width : 160px;
background-color : rgb(225,245,204);
color : rgb(0,0,0);
margin-left : 20px;
margin-right : 20px;
}

.pref
{
width : 160px;
background-color : rgb(245,235,214);
color : rgb(0,0,0);
margin-left : 20px;
margin-right : 20px;
}

.boutons
{
background-color : rgb(225,225,245);
color : rgb(0,0,0);
width : 80px;
font-weight : bold;
color : rgb(150,0,0);
}

.table
{
margin-top : 20px;
margin-left : 15px;
margin-bottom : 20px;
margin-right : 0;
}

.Tspan
{
margin-left : 20px;
color : rgb(0,60,0);
font-weight : bold;
}



<?php
// initialisation des sélections

// table des tranches d'âge
$age[]="moins de 20ans";
$age[]="de 21 à 40 ans";
$age[]="de 41 à 60 ans";
$age[]="plus de 60 ans ";
$age[]="";

$ageNb=count($age); // taille du tableau

// table des préférences cochées (true) et non cochées (false)
$pref_select[]=false;
$pref_select[]=false;
$pref_select[]=false;
$pref_select[]=false;
$pref_select[]=false;

// titres des préférences
$pref_titres[]="sports";
$pref_titres[]="théâtres";
$pref_titres[]="concerts";
$pref_titres[]="musées";
$pref_titres[]="cinéma";

$prefNb=count($pref_titres); // taille du tableau

// origine de l'appel au script
$envoi=isset($_POST["envoi"]);
// si pas "envoi" : affichage initial ou bouton "nouveau"
// alors ne pas enregistrer les sélections

// enregistrer les sélections si "envoi"
$choixA=$ageNb-1;
$OKa=false;
$OKp=false;

if($envoi)
{


// liste âges
$choixA=$_POST["choixA"];
if($choixA < 4) {$OKa=true;}

// liste préférences
$N=0;

while($N < $prefNb)
{


// ranger les sélections dans la table $pref_select[]
if(isset($_POST["choixP"][$N]))
{


$OKp=true;
$value=$_POST["choixP"][$N];
$pref_select[$value]=true;


}
$N++;


} // fin while


} // fin si

?>

<!--script026 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Titre de cette page : script026</title>
<meta name="description" content="Phrase décrivant clairement cette page" />
<meta name="keywords" content="mot1 mot2, mot3 mot4 mot5, mot6" />
<link rel="stylesheet" type="text/css" href="PHPStyle013.css" />
</head>

<body>

<form id="form" action="script026.php" method="post">

<h2>Vos préférences</h2>

<h3>tranche d'âge</h3>

<p>
<select class="age" name="choixA" >
<?php
// script produisant la liste des options "age"
$N=0;
while($N<$ageNb)
{


echo "<option value=\"$N\" ";
if($choixA==$N) {echo "selected=\"selected\"";}
echo ">";
echo "$age[$N]</option>";
$N++;


}
?>
</select>
</p>

<h3>préférences</h3>

<p>
<select class="pref" name="choixP[]" multiple="multiple" >
<?php
// script produisant la liste des options "préférences"
$N=0;
while($N<$prefNb)
{


echo "<option value=\"$N\" ";
if($pref_select[$N]) {echo "selected=\"selected\"";}
echo ">";
echo "$pref_titres[$N]</option>";
$N++;


}
?>
</select>
</p>

<table class="table">
<tr>
<td>
<input class="boutons" type="submit" name="envoi" value="envoi" />
</td>
<td>
<input class="boutons" type="submit" name="nouveau" value="nouveau" />
</td>
</tr>
</table>

<?php

// affichage des sélections effectuées
if($envoi)
{


if(!$OKa)
{echo "<p class=\"Tspan\" >tranche d'âge non cochée</p>";}

if(!$OKp)
{echo "<p class=\"Tspan\" >préférences non cochées</p>";}

if($OKa and $OKp)
{


echo "<p class=\"Tspan\" ><i>Votre tranche d'âge : </i><br/>
$age[$choixA]</p>";

echo "<p class=\"Tspan\" ><i>Vos préférences : </i><br/>";
$N=0;
while($N < $prefNb)
{


if($pref_select[$N]) {echo $pref_titres[$N]; echo "<br/>"; }
$N++;


} // fin while
echo "</p>";


} // fin si OK


} // fin si envoi

?>

</form>
</body>
</html>


Exécuter ce script


suivant