L'idée est de proposer des listes de participants, de clubs et de catégorie dans le formulaire de saisie des changement par année.
Voici comment construire un formulaire de saisie des changements, c'est à dire l'affectation d'un participant à un club, une catégorie et un dossard pour une année donnée :
<form>
<h1>Affectation des participants</h1>
<?php
//Classe HTML utilisée
$HTML = new HTML();
//Affichage de la liste participant
//Propriétés de la liste
$titre = "<p>Participant";
$nom = "id_participant";
$options = "SELECT id, nom FROM course.participant";
$option_selectionnée = 1;
//Affichage de la liste à partir de la classe liste
$HTML->liste($titre, $nom, $options, $option_selectionnée);
//Affichage de la liste club
//Propriétés de la liste
$titre = "<P>Club";
$nom = "id_club";
$options = "SELECT id, nom FROM course.club";
$option_selectionnée = "";
//Affichage de la liste à partir de la classe liste
$HTML->liste($titre, $nom, $options, $option_selectionnée);
//Affichage de la liste catégorie
//Propriétés de la liste
$titre = "<p>Catégorie";
$nom = "id_categorie";
$options = "SELECT id, nom FROM course.categorie";
$option_selectionnée = 1;
//Affichage de la liste à partir de la classe liste
$HTML->liste($titre, $nom, $options, $option_selectionnée);
?>
<P>Année <input name="annee" value=2006>
<P>Dossard <input name="dossard">
<p><input type="submit" name="enregistrer" value="Enregistrer">
</form>
<?php
extract($_GET);
if ($enregistrer) {
mysql_db_query("course", "INSERT INTO affectation values ('$id_participant','$id_club', '$id_categorie', $annee, $dossard)", mysql_connect("localhost", "root", "")) or die ("<P>Enregistrement non effectué!");
echo "<P>Le participant $id_participant est enregistré avec succès.";
}
//*** CLASSES ET FONCTION UTILISEES ***
class HTML {
//La fonction liste décrit comment une liste HTML est affichée
//Elle utilise comme variables :
//$titre : le titre de la liste
//$nom: le nom de la balise SELECT
//$options: un tableau qui est la source des d'options (valeur => texte) ou un texte SQL de type SELECT champs1, champs2 FROM ...
//$option_selectionnée : la valeur de l'option à sélectionner par défaut
function liste($titre="Liste 1", $nom="Liste1", $options=array(), $option_selectionnée=""){
echo "$titre <SELECT name=\"$nom\"><OPTION value=\"\"></OPTION>";
//Vérifier si='il s'agit d'une source SQL dont les deux premier champs sont la valeur et le texte de la liste
if ($options && !is_array($options)){
$rs = @mysql_query($options, mysql_connect("localhost", "root", ""));
//Cette boucle de fetch rempli le tableau des options
$options = null;
if ($rs)
while ($row_rs = mysql_fetch_array($rs)) {
//L'index du tableau est le champs1 de SQL et le texte est champs2
$options [$row_rs[0]] = $row_rs[1];
}
}
//Affichage du contenu du tableau des options
if ($options && is_array($options) )
foreach ($options as $valeur=>$texte)
echo "<OPTION value=\"$valeur\"".($valeur==$option_selectionnée?" SELECTED ":"").">$texte</OPTION>";
echo "</SELECT>";
}
}
//Fin de la classe
?>
Pour des soucis de simplification du code HTML concernat la construction des listes déroulantes, ce script une classe liste réutilisable.
Cette classe est utilisée pour créer les listes :
* participant issue de la table des participants
* club issue de la table club
* categorie de la table categorie
Quand le formulaire est envoyé un INSERT affecte la table changement (dans l'exemple elle s'appelle Affectation)