Pré-positionner une liste déroulante

1 message   •   Page 1 sur 1
Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

21 août 2005, 17:30

Voici le principe de base pour attribuer une valeur par défaut à une liste déroulante (select).

Lors du listage des valeurs et de la construction dynamique de la liste, on effectue un test d'égalité entre la valeur courante et la valeur par défaut.
Si le test est vrai, on insère selected="selected" dans la balise <option> correspondante, qui sera l'option choisie par défaut au chargement de la page

Test simple
<select name="age">
<?php
$valeurChoisie = 20;
for ($i=7; $i<=77; $i++) {
	if ($i == $valeurChoisie) {
		echo '<option value="'.$i.'" selected="selected">'.$i.'</option>';
	} else {
		echo '<option value="'.$i.'">'.$i.'</option>';
	}
}
?>
</select>
dans cet exemple, la liste déroulante contiendra les valeurs de 7 à 77, mais sera positionnée par défaut sur la valeur 20


Voici 2 autres manières de faire, le principe restant le même :

Utilisation de l'opérateur ternaire
<select name="age">
<?php
$valeurChoisie = 20;
for ($i=7; $i<=77; $i++) {
	echo(
		($i == $valeurChoisie) ?
		"  <option value=\"".$i ."\" selected=\"selected\">". $i ."</option>\n" :
		"  <option value=\"".$i ."\">". $i ."</option>\n"
	);
}
?>
</select>
Même opérateur ternaire, mais avec séparation du HTML et du PHP
<select name="age">
<?php
$valeurChoisie = 20;
for ($i=7; $i<=77; $i++) {
?>
	<option value="<?php echo($i); ?>" 
	<?php echo(($i == $valeurChoisie) ? " selected=\"selected\"" : null); ?>
	>
	<?php echo($i); ?>
	</option>
	
<?php
}
?>
</select>
Si vous voulez créer une page du type "Modifier son profil", avec un formulaire pré-rempli, et les listes de choix disponibles positionnées sur le choix enregistré, c'est ce genre de manipulation que vous pouvez faire.

Et ce sera la même chose avec une liste dynamique de cases à cocher ou de boutons radios, avec l'utilisation de l'attribut checked="checked"

Après sur ce principe, chacun peut donc faire à sa sauce, selon ce qu'il trouve plus clair ou plus pratique ;)

1 message   •   Page 1 sur 1