Comment construire une liste de sélection à partir d'une
base de données Dossier "SAM l'Informaticien"
du 18 septembre au 1er octobre 2000 par
Daniel
Lucazeau
ien souvent les valeurs d'une liste de sélection,
d'une famille de radio-boutons ou de cases à cocher sont des valeurs fixes
de l'application. Il est aisée de les stocker dans une base de données
car c'est plus souple à gérer. Nous allons voir comment construire
cette liste de sélection directement à partir de la base.
Supposons
que notre liste de valeurs soit celle des départements français,
c'est une liste connue dont les identifiants sont les numéros et les libellés
les noms complets des départements.
La table
se présent comme ceci :
+-----+---------------+
| num | Nom du dép |
+-----+---------------+
| 01 | Ain |
| 02 | Aisne |
| 03 | Allier |
| 04 | Alpes H.Prov. |
| .. | ... |
+-----+---------------+
Dans notre
table de BD les deux champs se nomment 'numDep' et 'nomDep'. Notre objectif est
d'obteni ceci, l'utilisateur choisit dans la liste un nom de département
et nous nous traitons ce choix par son identifiant-son numéro :
:
par le code HTML suivant :
Nous allons
détailler le code PHP pour obtenir ce résultat de la base, tous
les accès MySql sont "en dur" dans le code pour bien voir ce
que l'on fait. Je ne donne pas d'explications sur les fonctions d'accès
à MySql, voir pour cela http://dev.nexen.net/docs/php/annotee/manuel_ref.mysql.php
<?php
// connexion à la base
$Host = "serveur";
$User = "user";
$Password = "pass";
$Database = "Db";
$idConnect = mysql_connect( $Host, $User, $Password)
or
die( "Connexion impossible.");
$db = mysql_select_db( $Database, $idConnect)
or
die( "Accès base impossible.");
// Requête SQL
$rqSql = "SELECT numDep, nomDep FROM Dept ORDER BY numDep
ASC";
// Exécution de la requête
$result = mysql_query( $rqSql, $idConnect)
or
die( "Exécution requête impossible.");
mysql_close( $idConnect);
// Construction
de la chaîne de caractères qui fait la // liste
$ld = "<SELECT
NAME='lstDep'>";
$ld .= "<OPTION VALUE=0>Choisissez</OPTION>";
// On boucle sur la table
while ( $row = mysql_fetch_array( $result)) {
// $row est un tableau associatif
// les éléments sont «indicés»
par les noms
// des colonnes. Je préfère cette technique
à celle
// des indices numériques..on ajoute une colonne..
$mumDep = $row["numDep"];
$nomDep = $row["nomDep"];
$ld .= "<OPTION VALUE='$numDep'>$nomdep</OPTION>";
}
$ld .= "</SELECT>";
mysql_close( $idConnect); ?>
Il n'y
aura plus qu'à insérer notre liste déroulante entre les balises
de formulaires comme ceci:
<?php
print $ld; ?>
Si le formulaire
correspond à celui de la modification de fiches stockées en base,
il est intéressant que l'élément de la liste déroulante
correspondant à la valeur de l'enregistrement en cours soit sélectionné.
Peu de modification au script précédent sont à faire :
// dans le
corps de la boucle on ajoute ceci
if ( $numDep == $numDepRecord) {
$s = "selected";
} else {
$s = "";
}
$ld .= "<OPTION VALUE='$numDep' $s >
$nomdep</OPTION>";
Les
évolutions possibles :
Faire une
fonction paramétrée qui permet de faire la même chose à
partir de n'importe quelle table.
J'ai pris
PHP/MySql comme support de l'exemple, la prochaine fois je prendrai ASP/Access
et je développerai la liste de radio-boutons. La technique employée
étant rigoureusement identique.