Générer une liste déroulante dynamiquement

Rechercher

Générer une liste déroulante dynamiquement

  • Par Emacs
  • 7 commentaires
  • 55899 lectures
  • RSS -  Atom

Le principal atout de PHP est de pouvoir générer dynamiquement du code HTML, ce qui facilite grandement la tâche du webmaster lorsqu'il faut mettre à jour certaines zones d'un site Internet. Parmi elles, nous pouvons citer les liste déroulantes de formulaire (élément repéré par les balises <select> et </select>).

Les deux portions de code qui vont suivre montrent comment générer efficacement des listes déroulantes à l'aide de PHP. La première utilise une boucle for() pour créer une liste des années de 1970 à 2030. La seconde, quant à elle, construira une liste contenant des noms de couleur et leur valeur équivalente en hexadécimale. Ces couples valeur hexadécimale / nom de la couleur seront stockés dans un tableau associatif qui sera parcouru au moyen d'une boucle foreach().

Génération d'une liste déroulante d'années

Pour complexifier un peu le code, nous sélectionnerons par défaut l'année courante. C'est à dire lorsque le compteur $i aura atteint la même valeur que date('Y').

Génération d'une liste déroulante d'années
<?php
// Variable qui ajoutera l'attribut selected de la liste déroulante
$selected = '';
// Parcours du tableau
echo '<select name="annees">',"\n";
for($i=1970; $i<=2030; $i++)
{
// L'année est-elle l'année courante ?
if($i == date('Y'))
{
$selected = ' selected="selected"';
}
// Affichage de la ligne
echo "\t",'<option value="', $i ,'"', $selected ,'>', $i ,'</option>',"\n";
// Remise à zéro de $selected
$selected='';
}
echo '</select>',"\n";
?>

Génération d'une liste déroulante de couleurs

Dans ce code, nous sélectionnerons par défaut la couleur rouge. Cela signifie que nous devrons faire un test sur le nom de la couleur. Si la condition est remplie, nous ajoutons l'attribut selected sur la ligne de la couleur rouge.

Génération d'une liste déroulante de couleurs
<?php
// Définition du tableau de couleurs
$arrayCouleurs = array(
'#ff9900' => 'orange',
'#00ff00' => 'vert',
'#ff0000' => 'rouge',
'#ff00ff' => 'violet',
'#0000ff' => 'bleu',
'#000000' => 'noir',
'#ffffff' => 'blanc',
'#ffff00' => 'jaune'
);
// Variable qui ajoutera l'attribut selected de la liste déroulante
$selected = '';
// Parcours du tableau
echo '<select name="couleurs">',"n";
foreach($arrayCouleurs as $valeurHexadecimale => $nomCouleur)
{
// Test de la couleur
if($nomCouleur === 'rouge')
{
$selected = ' selected="selected"';
}
// Affichage de la ligne
echo "\t",'<option value="', $valeurHexadecimale ,'"', $selected ,'>', $nomCouleur ,'</option>',"\n";
// Remise à zéro de $selected
$selected='';
}
echo '</select>',"\n";
?>


Les commentaires

1. Par LiHo le 01/09/2008 17:56

Enfin je tombe sur quelque chose de simple et concis !
Merci

2. Par devile le 05/11/2008 14:51

Franchement super simpas

3. Par Soyel le 23/11/2008 02:49

Très interessant mais j'ai une question complètement hors sujet:
Pourriez vous me préciser pourquoi utiliser les virgules dans le renvoi des valeurs avec echo plutôt qu'une bête concaténation avec un point ? Il me semblait pourtant que ce moyen de fonctionnement était recommander pour l'optimisation de la génération des pages ( ou pas ... ) . A ce sujet, je recherche d'ailleurs un bon tuto sur l'optimisation des scripts PHP. J'aurai penser trouver cela dans votre rubrique "Développement avancé et optimisation des applications" mais cette dernière ne traite que ( hum ) de l'optimisation de DB tel MySQL. Si dans un élan de bon cœur et de générosité quelqu'un venait à trouver un site ou ce sujet serai abordé ou bien si ce dernier était abordé ici, je me ferai un plaisir de le lire.

4. Par Emacs le 23/11/2008 11:10

Bonjour Soyel et merci pour tous tes commentaires d'encouragement. Ca fait plaisir de savoir qu'Apprendre-PHP.com remplit pleinement son rôle d'aider les débutants à débuter sur les meilleures bases.

Concernant ta question, il faut savoir qu'il y'a une différence de performances entre la virgule et le point quand on utilise echo(). Comme tu le sais d'après ton dernier commentaire, echo() est une structure de langage qui peut accepter un nombre de paramètres infinis séparés par une virgule. Ainsi lorsque tu utilises la virgule avec echo, tu dis à echo() d'afficher ces paramètres les uns à la suite des autres sur la sortie standard. Donc au final, echo() prend le paramètre 1 puis l'affiche tout de suite, puis pareil pour le second, etc... Il n'y a donc pas de concaténation. En revanche l'emploi de l'opérateur de concaténation (le point) avec echo() procède d'une manière différente. En effet, quand tu demandes d'afficher 'Martin a '. $chiens . ' chiens et '. $chats .' chats', PHP va d'abord concaténer toutes les chaînes pour n'en former qu'une, puis renvoyer la chaîne finale sur la sortie standard. La concaténation a un coût non négligeable sur les performances puisqu'il faut stocker en mémoire la chaîne avant de l'afficher contrairement à echo() qui affiche les paramètres les uns à la suite des autres.

Pour plus d'informations, je t'invite à lire ce billet très intéressant :

http://expreg.com/fred_article.php?art=echo_lapin

++

5. Par Soyel le 23/11/2008 11:57

Merci grandement pour cette réponse aussi rapide Emacs. Je viens de lire ce billet et je comprend maintenant beaucoup mieux l'utilisation de la forme multi-paramètres de cette merveilleuse structure de langage echo() et je vais essayer de me forcer à l'utiliser plus souvent (utilisateur Nowdoc abusif ' ) .
Bonne continuation. En espérant lire encore pleins de choses intéressantes sur votre site
Soyel

6. Par Abdel le 19/04/2009 05:36

Emacs je vous remercie infiniment pour ce bon site et bonne continuation.

7. Par manu le 29/05/2009 15:00

merci infiniment sa ma beaucoup aidé