Selection auto
Sélection dynamique
Affichage dynamique d'une table à partir d'une sélection dans une liste déroulante
Code de la page "selection-clients.php" :
<form action="index.php?page=selection-clients.php" method="post">
<h3>Sélectionnez un nom de client :</h3>
<select name="listeclients">
<?php
// Affichage des noms de client dans une liste déroulante
$requete = "SELECT * FROM clients";
$resultat = mysql_query($requete);
while($ligne = mysql_fetch_array($resultat)) {
echo "<option value='".$ligne['nom_client']."'>".$ligne['nom_client']."</option>";
}
?>
</select>
<input type="submit" value="Valider" />
</form>
<?php
// traitement locale du formulaire
// si il existe une valeur dans le champ de formulaire listeclients
if (isset($_POST['listeclients'])) {
// redirection avec envoie de cette variable par URL (via la variable nomduclient)
header("Location: index.php?page=clients.php&nomduclient=".$_POST['listeclients']);
// la valeur de variable sera récupérée par un $_GET['nomduclient']
}
?>
<h3>Sélectionnez un nom de client :</h3>
<select name="listeclients">
<?php
// Affichage des noms de client dans une liste déroulante
$requete = "SELECT * FROM clients";
$resultat = mysql_query($requete);
while($ligne = mysql_fetch_array($resultat)) {
echo "<option value='".$ligne['nom_client']."'>".$ligne['nom_client']."</option>";
}
?>
</select>
<input type="submit" value="Valider" />
</form>
<?php
// traitement locale du formulaire
// si il existe une valeur dans le champ de formulaire listeclients
if (isset($_POST['listeclients'])) {
// redirection avec envoie de cette variable par URL (via la variable nomduclient)
header("Location: index.php?page=clients.php&nomduclient=".$_POST['listeclients']);
// la valeur de variable sera récupérée par un $_GET['nomduclient']
}
?>
Explication :
Le traitement locale (voir l'action du formulaire) récupère le nom du client via un $_POST['listeclients'] et réalise une redirection vers la page d'affichage (ici clients.php) avec un envoi de variable par URL (ici nommée nomduclient) comme ceci :
if (isset($_POST['listeclients'])) {
header("Location: index.php?page=clients.php&nomduclient=".$_POST['listeclients']);
}
header("Location: index.php?page=clients.php&nomduclient=".$_POST['listeclients']);
}
Dans la page d'affichage de la table (ici clients.php),
on récupère cette variable transmise par URL par un $_GET['nomduclient'] en transformant la ligne PHP de la requette comme ceci :
Extrait du code de la page "clients.php" (voir 4. Affichage auto) :
<?php
if (isset($_GET['nomduclient'])) {
// requette qui n'affiche que le nom récupéré
$requete = "SELECT * FROM ".$table." WHERE nom_client = '".$_GET['nomduclient'];."'";
}
else {
// sinon, requette qui affiche tout
$requete = "SELECT * FROM ".$table;
}
?>
if (isset($_GET['nomduclient'])) {
// requette qui n'affiche que le nom récupéré
$requete = "SELECT * FROM ".$table." WHERE nom_client = '".$_GET['nomduclient'];."'";
}
else {
// sinon, requette qui affiche tout
$requete = "SELECT * FROM ".$table;
}
?>
Pour aller plus loin
On pourrait optimiser la requette pour donner la possibilité de tout afficher, comme ceci:$requete = "SELECT * FROM ".$table." WHERE (nom_client = '".$_GET['nomduclient'];."' OR '".$nomduclient."' = 'Tous')";
Ce qui se traduirais par "OU BIEN Tous = Tous", ce qui est forcément vrai. Il faudrait, bien sur, aussi rajouter un <option value="Tous">Tous</option> dans la liste déroulante de la page "clients.php"