Actualites | Forum |Archives
Le magazine des décideurs et webmasters qui gagnent !
Inscription | Livre d'or | Plan du site | 15 visiteurs actifs
   
A la Une
Actualité
Dossiers
Communiqués
Coin Technique
Agenda des salons
Emploi
Echange de liens

Archives
Sélection
Expérience qui parle
Internet quotidien
Tous les dossiers

Forum
Forum SAM-MAG

Guides
Check-list de la promotion des sites
Promouvoir et référencer les sites web

Contact
Nous contacter
Newsletter
La protection des données personnelles


 
  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 :

<SELECT NAME="lstDep">
    <OPTION VALUE="01">Ain
    <OPTION VALUE="02" SELECTED>Aisne
    <OPTION VALUE="03">Allier
</SELECT>

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.

A suivre…

Daniel Lucazeau
Ajornet.com
Chef de projet Internet
Développeur informatique

Tous droits réservés - Reproduction même partielle interdite sans autorisation préalable

 
 
Google
 
Web www.sam-mag.com
 

Copyright © ACORUS 2004. All Rights Reserved

- Sam-Mag.com Referencement-Sur-mesure - Referencer-Site-Web.com
Visibilite-Internationale.com - Referencement-Immobilier.net