Jump to content

Formulaire de recherche multicritères...


Recommended Posts

Bonjour à tous

je suis en train de créer un site de "rencontres" (no troll please :jap: ) sur lequel les membres possedent des fiches.

J'ai crée un formulaire de recherche de membre qui fonctionne tres bien.... (même si ce n'est peut être pas la plus juducieuse des facons de coder ça!)

Je me retrouve confronté à un problème: je voudrais faire fonctionner mon option "Chercher uniquement les profils avec photo", en utilisant la valeur du chackbox prévu à cet effet. Sauf que je ne sais pas du tout comment ajouter une nouvelle condition à mes requetes qui me semblent déjà bien trop brouillonnes!

Bref: mon formulaire:

<form method="post" action="fiches_affich.php" name="rech_critere">
<tr>
	<td align="left" class="important" colspan="2">
	Recherche rapide
	</td>
</tr>
<tr>
	<td>
	Vous cherchez:
	</td>
	<td>
	<select name="sexe">
	<option value="">Indifférent</option>
	<option value="Homme">Un homme</option>
	<option value="Femme">Une femme</option>
	<option value="Couple">Un couple</option>
	</select>
	</td>
</tr>
<tr>
	<td>Localisation:</td>
	<td>
	<select name="region">
			  <option value="" selected="selected" >Indifferent</option>
			  <option value="ILE DE FRANCE">ILE DE FRANCE</option>
			  <option value="ALSACE">ALSACE</option>
			  <option value="AQUITAINE">AQUITAINE</option>
			  <option value="AUVERGNE">AUVERGNE</option>
			  <option value="BASSE NORMANDIE">BASSE NORMANDIE</option>
			  <option value="BOURGOGNE">BOURGOGNE</option>
			  <option value="BRETAGNE">BRETAGNE</option>
			  <option value="CENTRE VAL DE LOIRE">CENTRE VAL DE LOIRE</option>
			  <option value="CHAMPAGNE ARDENNE">CHAMPAGNE ARDENNE</option>
			  <option value="CORSE">CORSE</option>
			  <option value="FRANCHE COMTE">FRANCHE COMTE</option>
			  <option value="HAUTE NORMANDIE">HAUTE NORMANDIE</option>
			  <option value="LANGUEDOC ROUSSILLON">LANGUEDOC ROUSSILLON</option>
			  <option value="LIMOUSIN">LIMOUSIN</option>
			  <option value="LORRAINE">LORRAINE</option>
			  <option value="MIDI PYRENEES">MIDI PYRENEES</option>
			  <option value="NORD PAS DE CALAIS">NORD PAS DE CALAIS</option>
			  <option value="PAYS DE LA LOIRE">PAYS DE LA LOIRE</option>
			  <option value="PICARDIE">PICARDIE</option>
			  <option value="POITOU CHARENTES">POITOU CHARENTES</option>
			  <option value="PACA">PACA</option>
			  <option value="RHONE ALPES">RHONE ALPES</option>
			  <option value="DOM">DOM</option>
			  <option value="TOM">TOM</option>						   
	</select>
	</td>
</tr>
<tr>
	<td>Chercher uniquement les profils avec photo</td>
	<td>
	<input name="photo" type="checkbox"/>
	</td>
</tr>
<tr>
	<td colspan="2"><input name="submit" type="submit" value='Rechercher'></td>
</tr>

</form>

Et voici le code de ma page "fiches_affich.php" qui va traiter les requetes:

$sexe=$_POST['sexe'];
$region=$_POST['region'];

if ($sexe=="" AND $region=="")
{
$reponse = mysql_query("SELECT * FROM les_membres ORDER BY id");
}

elseif ($sexe=="")
{
$reponse = mysql_query("SELECT * FROM les_membres WHERE region='$region' ORDER BY id");
}

elseif ($region=="")
{
$reponse = mysql_query("SELECT * FROM les_membres WHERE sexe='$sexe' ORDER BY id");
}

else $reponse = mysql_query("SELECT * FROM les_membres WHERE sexe='$sexe' AND region='$region' ORDER BY id");

Comptant sur un peu de votre aide pour me suggérer quelque chose !!!

Link to comment
Share on other sites

salut,

Honnêtement je trouve ta méthode avec les if/elseif pas pratique du tout... Car le nombre de tests est exponentiel!

Ma solution (pas forcément la meilleure, mais mieux que celle là en tout cas) est de ne faire que des if sur les arguments fournis et de compléter la requête SQL au fur et à mesure!

Ce qui donnerait quelque chose comme ca:

$reponse = "SELECT * FROM les_membres WHERE "; // On crée le minimum pour la requête

if ($sexe)
{
$reponse .= " sexe='$sexe' AND ";
}

if ($region)
{
$reponse .= " region='$reegion' AND ";
}
if($photo)
{
$reponse .= " photo='$photo' AND ";
}

Là, un pb se pose: tu as un ' AND' de trop, donc il te suffit de le retirer, avec un substr:

$reponse = substr($reponse, 0, -4);// On retire les 4 derniers caractères de la requête (l'espace et le AND)

Ensuite, tu peux exécuter ta requête sans pb!

Cette méthode a l'avantage de n'avoir qu'un if par argument à prendre en compte dans ta requête et peut très facilement être étendue, en rajoutant un if à chaque fois

Autre truc qu'il te faut gérer (je ne l'ai pas fait, désolé), si tu n'as aucun argument à ajouter tu te retrouves avec un WHERE sans rien ensuite => erreur MySQL!

Il te faut soit vérifier qu'au moins un argument a été demandé, soit tu pars du principe qu'il y aura forcément au moins un argument de fourni

Link to comment
Share on other sites

Bonjour,

Dans ce cas tu peux mettre :

$reponse = "SELECT * FROM les_membres WHERE 1=1"; // On crée le minimum pour la requête
//1=1 c'est toujours vrai....

if ($sexe)
{
$reponse .= " AND sexe='$sexe' ";
}

if ($region)
{
$reponse .= " AND region='$reegion' ";
}
if($photo)
{
$reponse .= " AND photo='$photo' ";
}

Et voila pas d'argument minimum et pas de AND à virer...

Par contre je ne sais pas si au niveau perf c'est bien le 1=1...

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...