par
Ryle » 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

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 :
[php]$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;[/php]
Ou bien tout rassembler à la fin :
[php]$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);[/php]
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 :)