Modérateur PHPfrance |
10684 Messages
26 avr. 2007, 23:49
C'est pour ça qu'il y a un " WHERE ... " au préalable. Si ce n'est pas le cas, il faut adapter bien évidement à son code et tester s'il y a eu une condition pour savoir si l'on doit mettre un AND ou un WHERE

Ton exemple ne fonctionnera pas plus si 'champX' n'est pas renseigné, tu vas zapper le WHERE et attaquer directement avec le AND du 'champY'.
A chacun sa façon de faire après, on peut tester à chaque fois :
$sql = "SELECT .. FROM .. ";
$sqlCritere = "";
if($_POST['champX'] != '') {
$sqlCritere .= ($sqlCritere=='') ? 'WHERE' : 'AND';
$sqlCritere " champX = '".$_POST['champX']."'";
}
if($_POST['champY'] != '') {
$sqlCritere .= ($sqlCritere=='') ? 'WHERE' : 'AND';
$sqlCritere .= " champY LIKE '".$_POST['champY']."'%";
}
...
$sql .= $sqlCritere;
Ou bien tout rassembler à la fin :
$sql = "SELECT .. FROM .. ";
$critere = array();
if($_POST['champX'] != '')
$critere[] = " champX = '".$_POST['champX']."'";
if($_POST['champY'] != '')
$critere[] = " champY LIKE '".$_POST['champY']."'%";
...
$sql .= " WHERE " . implode(' AND ', $critere);
Quelque soit la façon de faire, ce qui compte de toute façon c'est de générer une chaine de caractère qui correspondra à la requête SQL que l'on souhaite jouer

Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...