Recherche Multi-Multi critères
Bonjour à tous,
J'ai récupéré un bout de code qui me permet de faire des recherches sur des champs et selon des opérateurs. Voici la vue :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <table cellpadding=5 cellspacing=0>
<form name="frm" method="post" action="liste.php?mode=search">
<tr><td align=right>Champ : </td><td><select name="champ">
<option value="titre">Titre</option>
<option value="auteur">Auteur</option>
<option value="membre">Emprunteur</option>
<option value="reservation">Réservation</option>
<option value="observations">Observations</option>
<option value="etat">État</option>
<option value="code">Référence</option>
</select>
<select name="oper">
<option value="like">contient</option>
<option value="notl">ne contient pas</option>
<option value="egal">est égal à</option>
<option value="comm">commence par</option>
<option value="fini">finit par</option>
<option value="vide">est vide</option>
</select>
</td></tr>
<tr><td align=right>Mots clefs : </td><td><input type=text name="mots" size=36></td></tr>
<tr><td align=center colspan=2><input type="submit" value="Valider"></td></tr>
</form></table> |
et voici le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <?
if (@$_GET["mode"]=="search"){
$SQL="select * from medias where 1=0";
if (@$_POST["oper"]=="like"){$tst=" like '%$$$%'";}
if (@$_POST["oper"]=="notl"){$tst=" not like '%$$$%'";}
if (@$_POST["oper"]=="egal"){$tst=" = '$$$'";}
if (@$_POST["oper"]=="comm"){$tst=" like '$$$%'";}
if (@$_POST["oper"]=="fini"){$tst=" like '%$$$'";}
$xmots=explode(" ",@$_POST["mots"].",");
for($i=0;$i<=sizeof($xmots);$i++){
if ($xmots[$i]!=""){$SQL.=$chp.str_replace("$$$",$xmots[$i]);}
}
if ((@$_POST["oper"]=="vide"){
$SQL="select * from medias where ".@$_POST["champ"]." is Null";}
$SQL=$SQL." order by ".@$_POST["champ"];
}
echo "SQL=".$SQL."<hr>";
?> |
Cela fonctionne parfaitement. Je souhaiterais maintenant doubler les critères en concaténant avec "ET" "OU"
La vue serait comme suit :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| <table cellpadding=5 cellspacing=0>
<form name="frm" method="post" action="liste.php?mode=search">
<tr><td align=right>Champ : </td><td><select name="champ">
<option value="titre">Titre</option>
<option value="auteur">Auteur</option>
<option value="membre">Emprunteur</option>
<option value="reservation">Réservation</option>
<option value="observations">Observations</option>
<option value="etat">État</option>
<option value="code">Référence</option>
</select>
<select name="oper">
<option value="like">contient</option>
<option value="notl">ne contient pas</option>
<option value="egal">est égal à</option>
<option value="comm">commence par</option>
<option value="fini">finit par</option>
<option value="vide">est vide</option>
</select>
</td></tr>
<tr><td align=right>Mots clefs : </td><td><input type=text name="mots" size=36></td></tr>
<tr>
<td></td><td align=right>ET <input name="et_ou" value="AND" checked="checked" type="radio"> OU <input name="et_ou" value="OR" type="radio"></td>
</tr>
<tr><td align=right>Champ 2 : </td><td><select name="champ2">
<option value="titre">Titre</option>
<option value="auteur">Auteur</option>
<option value="membre">Emprunteur</option>
<option value="reservation">Réservation</option>
<option value="observations">Observations</option>
<option value="etat">État</option>
<option value="code">Référence</option>
</select>
<select name="oper2">
<!-- Les opérateurs proposés -->
<option value="like">contient</option>
<option value="notl">ne contient pas</option>
<option value="egal">est égal à</option>
<option value="comm">commence par</option>
<option value="fini">finit par</option>
<option value="vide">est vide</option>
</select>
</td></tr>
<tr><td align=right>Mots clefs 2 : </td><td><input type=text name="mots2" size=36></td></tr>
<tr><td align=center colspan=2><input type="submit" value="Valider"></td></tr>
</form></table> |
Pourriez vous me donner une piste sur comment dans ce bout de code :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
$xmots=explode(" ",@$_POST["mots"].",");
for($i=0;$i<=sizeof($xmots);$i++){
if ($xmots[$i]!=""){$SQL.=$chp.str_replace("$$$",$xmots[$i]);}
}
if ((@$_POST["oper"]=="vide"){
$SQL="select * from medias where ".@$_POST["champ"]." is Null";}
$SQL=$SQL." order by ".@$_POST["champ"];
} |
je pourrais intégrer
Code:
@$_POST["champ2"], @$_POST["mots2"],@$_POST["oper2"]
et le checkbox "et_ou"
Merci par avance pour vos lumières.