1 ou 2 paramètres possibles passent encore, plus cela fait beaucoup de combinaisons à tester
La solution est donc de tester chaque paramètre indépendamment des autres et de rajouter ou non la clause correspondante dans la requête
Le problème maintenant est de savoir si c'est le premier critère choisi (et donc s'il faut mettre un "WHERE") ou un des suivants (et mettre un "AND")
la solution est d'expédier le WHERE avec une clause toujours vrai du genre "1 = 1" et ensuite de n'ajouter que des AND
si on n'ajoute aucune clause, on récupérera bien tous les enregistrements puisque 1 est toujours égal à 1
un petit exemple :
// j'ai un formulaire qui permet de choisir 0, 1, 2 ou 3 critères de sélection
$param1 = (isset($_GET['param1']))?$_GET['param1']:null;
$param2 = (isset($_GET['param2']))?$_GET['param2']:null;
$param3 = (isset($_GET['param3']))?$_GET['param3']:null;
// je crée le code SQL de base de la requête avec un WHERE toujours vrai
$requete = "SELECT champ1, champ2 FROM table WHERE 1 = 1";
// et ensuite, je vais rajouter ou non des critères de sélection à ma requête suivant les paramètres
// sans me soucier de savoir si chacun est le premier à être utilisé
if (!empty($param1)) {
$requete .= " AND champ3 = '".$param1."'";
}
if (!empty($param2)) {
$requete .= " AND champ4 = '".$param2."'";
}
if (!empty($param3)) {
$requete .= " AND champ5 = '".$param3."'";
}
// on peut vérifier, la requête est construite et correcte
echo $requete;