FORUM Tom's Hardware » Programmation » PHP & MySQL & ASP » Formulaire de recherche multicritères [RESOLU]
 

Formulaire de recherche multicritères [RESOLU]

Il y a 153 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Formulaire de recherche multicritères [RESOLU]
 
Plus d'informations

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:
 

Code :
  1. <form method="post" action="fiches_affich.php" name="rech_critere">
  2.     <tr>
  3.         <td align="left" class="important" colspan="2">
  4.         Recherche rapide
  5.         </td>
  6.     </tr>
  7.     <tr>
  8.         <td>
  9.         Vous cherchez:
  10.         </td>
  11.         <td>
  12.         <select name="sexe">
  13.         <option value="">Indifférent</option>
  14.         <option value="Homme">Un homme</option>
  15.         <option value="Femme">Une femme</option>
  16.         <option value="Couple">Un couple</option>
  17.         </select>
  18.         </td>
  19.     </tr>
  20.     <tr>
  21.         <td>Localisation:</td>
  22.         <td>
  23.         <select name="region">
  24.                   <option value="" selected="selected" >Indifferent</option>
  25.                   <option value="ILE DE FRANCE">ILE DE FRANCE</option>
  26.                   <option value="ALSACE">ALSACE</option>
  27.                   <option value="AQUITAINE">AQUITAINE</option>
  28.                   <option value="AUVERGNE">AUVERGNE</option>
  29.                   <option value="BASSE NORMANDIE">BASSE NORMANDIE</option>
  30.                   <option value="BOURGOGNE">BOURGOGNE</option>
  31.                   <option value="BRETAGNE">BRETAGNE</option>
  32.                   <option value="CENTRE VAL DE LOIRE">CENTRE VAL DE LOIRE</option>
  33.                   <option value="CHAMPAGNE ARDENNE">CHAMPAGNE ARDENNE</option>
  34.                   <option value="CORSE">CORSE</option>
  35.                   <option value="FRANCHE COMTE">FRANCHE COMTE</option>
  36.                   <option value="HAUTE NORMANDIE">HAUTE NORMANDIE</option>
  37.                   <option value="LANGUEDOC ROUSSILLON">LANGUEDOC ROUSSILLON</option>
  38.                   <option value="LIMOUSIN">LIMOUSIN</option>
  39.                   <option value="LORRAINE">LORRAINE</option>
  40.                   <option value="MIDI PYRENEES">MIDI PYRENEES</option>
  41.                   <option value="NORD PAS DE CALAIS">NORD PAS DE CALAIS</option>
  42.                   <option value="PAYS DE LA LOIRE">PAYS DE LA LOIRE</option>
  43.                   <option value="PICARDIE">PICARDIE</option>
  44.                   <option value="POITOU CHARENTES">POITOU CHARENTES</option>
  45.                   <option value="PACA">PACA</option>
  46.                   <option value="RHONE ALPES">RHONE ALPES</option>
  47.                   <option value="DOM">DOM</option>
  48.                   <option value="TOM">TOM</option>                         
  49.         </select>
  50.         </td>
  51.     </tr>
  52.     <tr>
  53.         <td>Chercher uniquement les profils avec photo</td>
  54.         <td>
  55.         <input name="photo" type="checkbox"/>
  56.         </td>
  57.     </tr>
  58.     <tr>
  59.         <td colspan="2"><input name="submit" type="submit" value='Rechercher'></td>
  60.     </tr>
  61.     </form>


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

Code :
  1. $sexe=$_POST['sexe'];
  2. $region=$_POST['region'];
  3. if ($sexe=="" AND $region=="" )
  4.     {
  5.     $reponse = mysql_query("SELECT * FROM les_membres ORDER BY id" );
  6.     }
  7. elseif ($sexe=="" )
  8.     {
  9.     $reponse = mysql_query("SELECT * FROM les_membres WHERE region='$region' ORDER BY id" );
  10.     }
  11. elseif ($region=="" )
  12.     {
  13.     $reponse = mysql_query("SELECT * FROM les_membres WHERE sexe='$sexe' ORDER BY id" );
  14.     }
  15. 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 !!!


Message édité par ghmpou le 01-09-2006 à 16:24:46

zeb
Profil : Modérateur libre
Plus d'informations

Oh la ! Tu vas faire un produit cartésien de tous tes critères comme ça (ordre n2).
 
Réfléchis à ça :
 
Ta requête commente toujours par  

SELECT * FROM les_membres


 
Elle finit toujours par  

ORDER BY id


 
Au milieu, il faut mettre une clause where.
 

MotClef = " WHERE "
Clause = ""


 
Premier critère :

Si Crit1 est Vrai
        Clause = Clause + MotClef + " Crit1='$Crit1'"
        MotClef = " AND "


 
Et tu enchaînes sur autant de Critères
 
Tu auras donc autant de blocs que de critères (ordre n).
 
Ensuite tu remets tout bout à bout :
 

Requete = "SELECT * FROM les_membres " + Clause + " ORDER BY id"


Message édité par zeb le 31-08-2006 à 09:58:43
Profil : Pointeur
Plus d'informations

et accessoirement, faut que tu dise a ton html d'envoyer une valeur quand  on coche la chackbox :o


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Plus d'informations

Voilà problème résolu, en m'inspirant de vos conseils!!!
 
Voici le code de la page qui traite les requetes une fois refait:
 

Code :
  1. //// Définition des variables
  2. $sexe=$_POST['sexe'];
  3. $region=$_POST['region'];
  4. //// Définitiion du choix "photo" ou "pas photo"
  5. if (isset($_POST['photo']))
  6.     {
  7.     $clause_photo_where=" WHERE photo='oui' ";
  8.     $clause_photo_and=" AND photo='oui' ";
  9.     }
  10. elseif (!isset($_POST['photo']))
  11.     {
  12.     $clause_photo_where="";
  13.     $clause_photo_and="";
  14.     }
  15. //// Liste des requetes
  16.          if ($sexe=="" AND $region=="" )
  17.          {
  18.          $reponse = mysql_query("SELECT * FROM les_membres ".$clause_photo_where." ORDER BY id" );
  19.          }
  20.          elseif ($sexe=="" )
  21.          {
  22.          $reponse = mysql_query("SELECT * FROM les_membres WHERE region='$region' ".$clause_photo_and." ORDER BY id" );
  23.          }
  24.          elseif ($region=="" )
  25.          {
  26.          $reponse = mysql_query("SELECT * FROM les_membres WHERE sexe='$sexe' ".$clause_photo_and." ORDER BY id" );
  27.          }
  28.          else
  29.          {
  30.          $reponse = mysql_query("SELECT * FROM les_membres WHERE sexe='$sexe' AND region='$region' ".$clause_photo_and." ORDER BY id" );
  31.          }


 
Je pense que ce n'est pas le plus beau code qui existe mais en tout cas il fonctionne très bien !!
 
Merci à vous ;)


Message édité par ghmpou le 01-09-2006 à 16:27:53
G.M.G.V.S.O.
Profil : Modo matériel
Plus d'informations

Le

Code :
  1. elseif (!isset($_POST['photo']))

peut etre remplacé par un else tout seul à mon avis.


---------------
SPAM & WAREZ = Ban!
Ultimate Boot CD | Memtest+
Mon bar préféré à Lyon ! | Bijoux Fantaisie de Créateur !
Profil : Pointeur
Plus d'informations

effectivement


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u

Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » PHP & MySQL & ASP » Formulaire de recherche multicritères [RESOLU]
 

Annonces Google
Publicité
Les téléchargements