Le magasin YBET

Rue Albert 1er, 7

6810 Pin - Chiny

Route Arlon - Florenville

(/fax: 061/32.00.15

Les formations sur Internet

YBET   Créer son propre site internet

17. Listes déroulantes à partir d'une table MySQL

1. Liste déroulante - 2. Récupération des catégories - sous-catégorie dans un tableau à partir de la base MySQL

Lorsqu'on affiche un formulaire, on reprend souvent des listes déroulantes, des valeurs possibles pré-établies pour un champ. Voyons comment afficher dans un champ des valeurs reprises dans une table MySQL. Ceci va permettre de reprendre pour un site de petites annonces les différentes catégories, pour un développement de facturation les taux de TVA ou le nom du client, ...

La première partie va être de créer une liste déroulante reprenant les catégories dans le formulaire d'entrée ou même de sélection d'une catégorie. Avant de gérer les utilisateurs, nous afficherons les annonces (ce sera la partie suivante) en les intégrant dans notre lay-out du chapitre 11.

L'insertion d'annonces reprendra un formulaire auto-appelé comme dans le chapitre précédant, un seul fichier php reprenait le formulaire et les vérifications.

1. Une liste déroulante dans un formulaire

Une liste déroulante se code en HTML de la manière suivante. Dans ce cas, nous avons simplement demandé d'afficher le numéro de catégorie mais le formulaire envoie en fait valeur X (ne numéro de la catégorie

<form method="POST" name="catégorie">

<p><select size="1" name="uid">

<option selected value="valeur 1">catégorie 1</option>

<option value="valeur 2">catégorie 2</option>

</select></p>

<p><input type="submit" value="Envoyer" name="B1"></p>

</form>

Ce qui affiche:

Dans ce cas, la valeur catégorie 1 est affichée par défaut (<option selected value ...), les suivantes (<option value ...) sont aussi possibles. La difficulté est de reprendre non pas des textes et des valeurs fixes comme ci-dessus mais bien des valeurs reprises dans la table.

Commençons par créé un simple formulaire auto invoquant (pour l'instant sans gestion des erreurs) en PHP qui permet d'afficher le choix de la liste.

<?php
if (isset($_POST['go'])){
$uid = $_POST['uid'];
echo$uid;
}
$form = "<table>
<form METHOD=POST>
<form method=\"POST\">
<p><select size=\"1\" name='uid'>
<option selected value=\"valeur 1\">catégorie 1</option>
<option value=\"valeur 2\">catégorie 2</option>
</select></p>
<p><input type=\"submit\" value=\"Envoyer\" name=\"go\"></p>
</form>
</table>
<HR>";
print($form);
?>

Ce petit programme ne fait qu'afficher la valeur correspondant à la catégorie. Si vous sélectionnez catégorie 1, il affiche donc valeur 1. Nous allons modifier ce formulaire plus tard pour qu'il affiche le numéro uid en fonction de l'affichage de la catégorie. Pour l'instant commençons par récupérer les catégories avec leur description dans une variable PHP sous forme de tableau que nous appellerons $categorie-tab

2. Récupération de la catégorie - sous catégorie dans un tableau.

 La première partie va reprendre l'ensemble des données dans une variable php sous forme de tableaux.

  1. La première partie du fichier php ne fait que créer la requête MySQL qui récupère les données.
  2. La deuxième partie va remplir un tableau ($categorie_tab) avec les mêmes valeur correspondante de la table MySQL. Seule distinction, nous ne récupérons pas les catégories non actives, seulement toutes celles dont le contenu est différent de "N". La variable $i va être incrémentée à chaque nouvelle catégorie active, à la fin elle permet d'afficher le nombre avec $ligne:$i. A ce stade, les manipulations sur la table sont terminées et nous pouvons la fermer.
  3. En dernier, on reprend un formulaire avec une liste déroulante. De nouveau la variable $i est utilise dans la boucle While, et incrémentée tant que sa valeur n'est pas égale au nombre de lignes récupérées en 2 ($ligne).

Dans tous les cas, nous remplissons $categorie_tab['complet'] du nom de la catégorie

<?php
$categorie_tab=array();
$requete="SELECT * FROM categorie";
$valeur=mysql_query($requete);
$i=0;
$ligne=0;
   while ($tableau=mysql_fetch_array($valeur)){
   // on récupère les données de la table
  // print($ligne);
  if($tableau['actif']<>"N"){
    $categorie_tab[$i]['uid']=$tableau['uid'];
    $categorie_tab[$i]['nom']=$tableau['nom'];
    $categorie_tab[$i]['description']=$tableau['description'];
    $i=$i+1;
  }else{
    print('<br>Catégorie non active');
  }
}
$ligne=$i;
<form method=\"POST\">
<p><select size=\"1\" name='uid'>";
while ($i<$ligne){
$uid= $categorie_tab[$i]['uid'];
$complet= $categorie_tab[$i]['nom'];
$liste=$liste."<option value=".$uid.">".$nom."</option>";
$i=$i+1;
}
$liste=$liste."<p><input type=\"submit\" value=\"Envoyer\" name=\"go\"></p>
</form>
<HR>";
echo$liste;
?>

> 18. Modifications de tables MySQL
<16 . Table utilisateurs

Modification: 24/03/2012