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 : Sélectionner tout - Visualiser dans une fenêtre à part
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>
&nbsp;&nbsp;
<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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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>
&nbsp;&nbsp;
<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>
&nbsp;&nbsp;
<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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
 @$_POST["champ2"], @$_POST["mots2"],@$_POST["oper2"]
et le checkbox "et_ou"

Merci par avance pour vos lumières.