Bonjour à tous,
j'ai deux petit soucie avec ma requête sql pour afficher les résultats de ma bdd.

J'ai adapter ce moteur de recherche avec multi critére :
- champ de recherche
les options de recherche :
- rechercher un mot, tous les mots ou juste l'expression.
- choix de la categorie
- et le pays

1 - Si on ne renseignes que le mot clé, je souhaite afficher tout les résultats associés dont valid ='oui'. Or pour le moment il affiche sans exceptions tous les resultats.

2 - Si les options de recherche ne sont pas choisi, je souhaite pouvoir quand même afficher les résultats. Or pour le moment, je suis obliger de renseigner toutes les options pour afficher un resultats. Je souhaite pouvoir afficher par exemple tous les pays si aucun pays en particulier n'est choisi.

J'espère que je suis assez clair. Si quelqu'un pouvait m'aider ou même m'aiguiller, parce que là, j'ai tellement la tête dans le guidon, que je ne vois plus rien.
Merci à ceux et celles qui voudront bien m'aider.
Cdt,
K@rpe

Ma balise form
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
 <form action="recherche2.php#anc" method="post">
       <div align="left"><img src="../images/spacer.png" alt=" " width="10" height="10" />
            <input name="recherche" type="text" id="recherche" value="<?php echo $_POST['recherche']; ?>" size="65" />
            <img src="../images/spacer.png" alt=" " width="10" height="10" /><img src="../images/spacer.png" alt=" " width="10" height="10" />
            <input name="rechercher" type="submit" value="rechercher"/>
<a href="javascript:visibilite('critere');" class="liens_interne">Options</a>
 
 
       <input type="hidden" name="sujets_fermes"checked="checked" />
       </div>
       <legend></legend>
         <br />
<div align="left" id="critere" style="display:none;width:100%">  <fieldset>
         <div align="center"><span class="petitpomme_vert">Trouver :</span>
             <select name="mode" class="contenus2">
               <option value="un_mot">Au moins un mot</option>
               <option value="expression_exacte">Expression exacte</option>
               <option value="tous_les_mots">Tous les mots</option>
               </select>
             <span class="petitpomme_vert">Cat&eacute;gorie :</span>
            <select name="motcat" class="contenus2" id="search_category" onchange="SearchCrit(false, get_radio_value(f.st));">
                <option selected="selected">Toutes categories</option>
                <option style="background-color:#66FF33;" value="">-- VEHICULES --</option>
                <option value="Voitures">Voitures</option>
                <option value="Motos">Motos</option>
                <option value="Utilitaires">Utilitaires</option>
                <option value="Equipement Auto">Equipement Auto</option>
                <option value="Equipement Moto">Equipement Moto</option>
                <option value="Bateaux">Bateaux</option>
 
                </select>
            <span class="petitpomme_vert">Pays :</span>
            <select name="pays"  id="search_pays" class="contenus2">
              <option selected="selected">Tous les pays</option>
              <option value="Alg&eacute;rie">Alg&eacute;rie</option>
              <option value="France">France</option>
              <option value="Maroc">Maroc</option>
              <option value="Tunisie">Tunisie</option>
             </select>
 
            </div>
</fieldset>
     </div>
   </form>
Mon code php :
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<?php
//=========================================
// initialisation des variables 
//=========================================
$nombre = 10;  
// si limite n'existe pas on l'initialise &agrave; z&eacute;ro
if (!$limite) $limite = 0; 
// on cherche le nom de la page.    
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts["basename"];
//=========================================    
// connection &agrave; la DB
//=========================================
$link = mysql_connect ($bddserver,$bddlogin,$bddpassword) or die ('Erreur : '.mysql_error() );
mysql_select_db($bdd) or die ('Erreur :'.mysql_error());
//=========================================    
// requ&ecirc;te SQL qui compte le nombre total 
// d'enregistrements dans la table.
//=========================================
$select = 'SELECT count(idannonce) FROM annonces WHERE valid=\'oui\'';
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0];
//=========================================
// v&eacute;rifier la validit&eacute; de notre variable 
// $limite;
//=========================================
$verifLimite= verifLimite($limite,$total,$nombre);
if(!$verifLimite)  {
    $limite = 0;
}
 
//========================================= affiche les 20 premiers mots des resultats - fonction
 
function debutchaine($chaine, $nbmots) { // 1er argument : chaîne - 2e argument : nombre de mots
$chaine = preg_replace('!<br.*>!iU', "", $chaine); // remplacement des BR par des espaces
$chaine = strip_tags($chaine);
$chaine = preg_replace('/\s\s+/', ' ', $chaine); // retrait des espaces inutiles
$tab = explode(" ",$chaine);
if (count($tab) <= $nbmots) {
$affiche = $chaine;
} else {
$affiche = "$tab[0]";
for ($i=1; $i<$nbmots; $i++) {
$affiche .= " $tab[$i]";
}
}
$affiche .= ' ...';
return $affiche;
} 
//========================================= requetes affichage test
 
if (isset($_POST['rechercher'])) //si on a validé le formulaire
{
$recherche = mysql_real_escape_string(htmlspecialchars($_POST['recherche'])); //sécurisation des variables
$motcat = mysql_real_escape_string(htmlspecialchars($_POST['motcat']));
$pays = mysql_real_escape_string(htmlspecialchars($_POST['pays']));
$mode = mysql_real_escape_string(htmlspecialchars($_POST['mode']));
$valid='oui';
if (isset($_POST['sujets_fermes'])) //si on a coché la case
{
$sujets_fermes = "AND valid='oui' AND souscategorie1='$motcat' AND pays='$pays'";//
}
	else //si on ne l'a pas cochée
	{
	$sujets_fermes = "";//AND valid='oui' 
	}
if ($mode == "tous_les_mots")
{
$and_ou_or = 'AND'; //on utilisera AND dans la boucle
}
	else
	{
	$and_ou_or = 'OR'; //on utilisera OR dans la boucle
	}
if ($mode == "expression_exacte") //si le mode de recherche est par expression exacte
{
$selection_recherche = mysql_query("SELECT * FROM annonces WHERE titre LIKE '%$recherche%' $sujets_fermes ORDER BY idannonce DESC");
}
	else //si le mode de recherche n'est pas par expression exacte
	{
	$mots = explode(" ", $recherche); //séparation des mots
	$nombre_mots = count ($mots); //compte le nombre de mots
	$valeur_requete = '';
		for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois
		{
		$valeur_requete .= '' . $and_ou_or . ' titre LIKE \'%' . $mots[$nombre_mots_boucle] . '%\''; //modification de la variable $valeur_requete
		}
		$valeur_requete = ltrim($valeur_requete,$and_ou_or); //suppression de AND ou de OR au début de la boucle
		$selection_recherche = mysql_query("SELECT *FROM annonces WHERE $valeur_requete $sujets_fermes ORDER BY idannonce DESC"); //requête avec le résultat de la boucle dedans
		}
		$nombre_resultats = mysql_num_rows($selection_recherche); //compte le nombre d'entrées sélectionnées par la recherche
 
if ($nombre_resultats == 0) //s'il n'y a pas de résultat
{
echo '<span class="font_blanc" align="center">...aucun resultat pour votre recherche.</span>';
}
else //il y a au moins un résultat
{
echo '<div align="center" class="font_blanc">Il y a ' . $nombre_resultats . 'annonce(s) correspondant à votre recherche !</div><br /><br />'; //nombre de résultats
    while($resultats = mysql_fetch_array($selection_recherche)) 
{
echo "<table class=\"contenus2\" width=\"600\" border=\"0\" align=\"center\"  cellpadding=\"00\" cellspacing=\"10\" onmouseover=\"javascript:this.style.background='#333333'\" onmouseout=\"javascript:this.style.background='#222222'\" ><div id=\"annoncehaut\"></div> ";
 
 
        echo '<tr>';
		echo '<span  class="pomme_vert">'.nl2br(htmlspecialchars(stripslashes($resultats['titre']))).'</span>'."\n";
        echo '<td  width="19%" valign="top">'.$resultats['pays'].'</td>';
		echo '<td width="80%"  align="right">Annonce posté par <span  class="pomme_vert">' .$resultats['pseudo']."</span> le: <span  class='font_blanc'>".$resultats['dateajout']."</span> à<span  class='font_blanc'>". $resultats['heureajout']."</span>. Catégorie :<span  class='font_blanc'>". $resultats['souscategorie1'].'</span></td>';
        echo '</tr>';
        echo '<tr>'."\n";
echo '<td rowspan="2" width="19%" valign="top"><a href="http://www.monsite.com/annonces/images/image_annonce/vignette/'. $resultats['vignette']. '" rel="lightbox" title=""  border="0" valign="top" width="100%" height="100%" ><img src="http://www.monsite.com/annonces/images/image_annonce/vignette/picto/'. $resultats['vignette']. '" alt=" " style="filter:alpha(opacity=100)" onMouseOver="nereidFade(this,30,30,10)" onMouseOut="nereidFade(this,100,50,10)" border="0"/></a></td>';
         echo '<td valign="top"  class="font_blanc">';
 
$mots_complets = $resultats['description']; //data événement
$nb_mots = 20;
$mot_courts = debutchaine($mots_complets, $nb_mots);			
 
			echo $mot_courts;
				echo '</td>';	
        echo '</tr>';
        echo '<tr>'."\n";
        echo '<td  align="right"><a href="http://www.monsite.com/annonces/voir_annonce.php?id='.$resultats['idannonce'].'" class="liens_interne"> voir l\'annonce</a></td>';
        echo '</tr>';
        echo '<tr>'."\n";
        echo '<td><img src="http://www.monsite.com/images/spacer.png" alt=" " height="15"  width="20" /></td>';
        echo '<td><img src="http://www.monsite.com/images/spacer.png" alt=" " height="15"  width="20" /></td>';
        echo '</tr>'."\n";
 
		    }
 
    echo '</table>'."\n";
 
}
}
else echo '<span class="font_blanc" align="center">...aucun resultat pour votre recherche.</span>';
mysql_free_result($result);
 
// si on a r&eacute;cup&eacute;r&eacute; un resultat on l'affiche.
if($total > $nombre) {
    affichePages($nombre,$page,$total);
    displayNextPreviousButtons($limite,$total,$nombre,$page);
}
?>