par
Cyrano » 25 oct. 2010, 06:22
Salut, il faut construire ta requête dynamiquement.
D'abord, affecter une valeur aux options qui affichent juste un message « Choix 1 » et « Choix 2 » :
<form action="select.php" method="post">
<b><font size="5"><i>Faites votre selection :</i></font></b>
<select name="rub">
<option value="-1">Choix 1</option>
<option value="lot">A</option>
<option value="lot2">B</option>
<option value="lot3">C</option>
</select>
<select name="ville">
<option value="-1">Choix 2</option>
<option value="groupe">D</option>
<option value="groupe2">E</option>
<option value="groupe3">F</option>
</select>
<input type="submit" value="Envoyer">
</form>
Ensuite, tu récupères ce qui est envoyé pour construire la clause WHERE selon qu'il y a un choix différent de -1 ou non :
<?php
/* On crée un container pour stocker les clauses WHERE */
$aWhere = array();
/* Si une rubrique a été choisie, on ajoute une clause sur cette rubrique */
if(isset($_POST['rub']) && $_POST['rub'] != '-1')
{
$aWhere[] = "rubrique='". $_POST['rub'] ."'";
}
/* Si une ville a été sélectionnée, on crée une clause sur la ville */
if(isset($_POST['ville']) && $_POST['ville'] != '-1')
{
$aWhere[] = "ville='". $_POST['ville'] ."'";
}
/* On construit la clause WHERE si au moins une clause a été définie précédemment */
$sWhere = (count($aWhere) > 0)
? "WHERE ". implode(" AND ", $aWhere) ." "
: null;
/* On construit la requête */
$sql = "SELECT * ".
"FROM table1 ".
$sWhere .
"ORDER BY date DESC, heure DESC ".
"LIMIT 5";
De cette manière, si ton internaute ne sélectionne aucune valeur des deux listes, il n'y aura pas de clause WHERE et toutes les lignes de la table seront retournées, s'il ne sélectionne qu'une ville, alors seules les lignes correspondantes seront retournées, s'il ne sélectionne qu'une rubrique sans préciser de ville, alors ne reviendront que les lignes correspondant à la rubrique, et s'il sélectionne les deux, ne reviendront alors que les lignes correspondant aux deux valeurs.
Salut, il faut construire ta requête dynamiquement.
D'abord, affecter une valeur aux options qui affichent juste un message « Choix 1 » et « Choix 2 » :
[html]<form action="select.php" method="post">
<b><font size="5"><i>Faites votre selection :</i></font></b>
<select name="rub">
<option value="-1">Choix 1</option>
<option value="lot">A</option>
<option value="lot2">B</option>
<option value="lot3">C</option>
</select>
<select name="ville">
<option value="-1">Choix 2</option>
<option value="groupe">D</option>
<option value="groupe2">E</option>
<option value="groupe3">F</option>
</select>
<input type="submit" value="Envoyer">
</form>[/html]
Ensuite, tu récupères ce qui est envoyé pour construire la clause WHERE selon qu'il y a un choix différent de -1 ou non :
[php]<?php
/* On crée un container pour stocker les clauses WHERE */
$aWhere = array();
/* Si une rubrique a été choisie, on ajoute une clause sur cette rubrique */
if(isset($_POST['rub']) && $_POST['rub'] != '-1')
{
$aWhere[] = "rubrique='". $_POST['rub'] ."'";
}
/* Si une ville a été sélectionnée, on crée une clause sur la ville */
if(isset($_POST['ville']) && $_POST['ville'] != '-1')
{
$aWhere[] = "ville='". $_POST['ville'] ."'";
}
/* On construit la clause WHERE si au moins une clause a été définie précédemment */
$sWhere = (count($aWhere) > 0)
? "WHERE ". implode(" AND ", $aWhere) ." "
: null;
/* On construit la requête */
$sql = "SELECT * ".
"FROM table1 ".
$sWhere .
"ORDER BY date DESC, heure DESC ".
"LIMIT 5";[/php]
De cette manière, si ton internaute ne sélectionne aucune valeur des deux listes, il n'y aura pas de clause WHERE et toutes les lignes de la table seront retournées, s'il ne sélectionne qu'une ville, alors seules les lignes correspondantes seront retournées, s'il ne sélectionne qu'une rubrique sans préciser de ville, alors ne reviendront que les lignes correspondant à la rubrique, et s'il sélectionne les deux, ne reviendront alors que les lignes correspondant aux deux valeurs.