recherche via un select

recherche via un select - PHP - Programmation

Marsh Posté le 07-05-2007 à 09:57:33    

bonjour a tous,
j ai dans une base un champs "surface" int  (en metres carrés),
j essaie de faire un formulaire de recherche qui comprend 5 tranches du genre de 0a20  de 21a40 de 41a60   etc
et je galere pour mon faire mon select   :pt1cable:  
 
si vous avez deux secondes a m'accorder, merci d avance  ;)  

Reply

Marsh Posté le 07-05-2007 à 09:57:33   

Reply

Marsh Posté le 07-05-2007 à 10:13:00    

tu peux faire ça avec BETWEEN je crois

 

ou "brol >0 AND  brol <20"

 



Message édité par art_dupond le 07-05-2007 à 10:21:15

---------------
oui oui
Reply

Marsh Posté le 07-05-2007 à 10:21:17    

euh oups, c'est le select du formulaire que tu veux faire ?
 
<select id="surface">
  <option value="1">0-20</option>
  <option value="2">21-40</option>
</select>
 
:??:


---------------
oui oui
Reply

Marsh Posté le 07-05-2007 à 10:37:48    

oui je sais faire un select  :p
 
j essaie d etoffer un peu plus : j ai un formaulaire de recherche multi criteres. POur la surface je me suis trompé en mettant un enum dans la partie saisie, j ai donc remplacer par un int. Le select ne se fait que dans la partie "internaute" du coup. mais la je ne sais pas rechercher dans la table avec un systeme de tranche.
J avais ca avant :
 
 

Code :
  1. <select name="rechercher[]">
  2.                     <option value="0" <? if($rechercher[3]=="0" ) echo " selected"; ?>>S&eacute;lection ...</option>
  3.                     <option value="20" <? if($rechercher[3]=="20" ) echo " selected"; ?>> 0-20 </option>
  4.                     <option value="50"<? if($rechercher[3]=="50" ) echo " selected"; ?>> 21-50</option>
  5.                     <option value="75"<? if($rechercher[3]=="75" ) echo " selected"; ?>> 51-75</option>
  6.                     <option value="100"<? if($rechercher[3]=="100" ) echo " selected"; ?>> 76-100</option>
  7.                     <option value="150"<? if($rechercher[3]=="150" ) echo " selected"; ?>> 101-150</option>
  8.                     <option value="200"<? if($rechercher[3]=="200" ) echo " selected"; ?>> 151-200</option>
  9.                     <option value="250"<? if($rechercher[3]=="250" ) echo " selected"; ?>> 201-250</option>
  10.                     <option value="300"<? if($rechercher[3]=="300" ) echo " selected"; ?>> 251-300</option>
  11.                     <option value="+300"<? if($rechercher[3]=="+300" ) echo " selected"; ?>> +300</option>
  12.                   </select>


 
 je me fait mal comprendre peut etre ?
merci :)

Reply

Marsh Posté le 07-05-2007 à 10:55:01    

aïe j'ai du mal à comprendre :p

 

il est à quel niveau le problème ? html, php, sql ?

 

si c'est sql, ma première réponse ne t'inspire pas ?


Message édité par art_dupond le 07-05-2007 à 10:56:01

---------------
oui oui
Reply

Marsh Posté le 07-05-2007 à 11:13:04    

a priori ca doit etre avec BETWEEN... je fouille de ce coté la  merci :p

Reply

Marsh Posté le 07-05-2007 à 12:08:25    

j ai vraiment du mal  :/
d apres ce que j ai trouvé il faut que je fasse une requete par tranche voulue, mais je sais pas organiser les boucles etc...  
need help please :p

Reply

Marsh Posté le 07-05-2007 à 12:59:13    

des boucles :??:
 
 
en fait, je crois que je n'ai rien compris à ton problème :sweat:  
 
explique clairement ce que tu veux faire, où ça coince et à quel niveau ça coince (php, sql, ...)
 
 
 
ce que j'ai compris :  
 
tu as un formulaire et quand on choisis une certaine surface, tu récupères les enregistrements correspondants.
Si c'est ça, tu fais juste une requête avec un between (je crois) non ?
 


---------------
oui oui
Reply

Marsh Posté le 07-05-2007 à 13:04:14    

ca coince un peu partout... je ne sais pas faire la requete (les requetes?), et ni les conditions  :/
 
ex : l internaute choisi la surface 20-51 dans la liste de choix. comment faire pour renvoyé les enregistrements correspondants. Dans ma table il n y a que des entiers desormais.
il me faut une condition et une requete par tranche peut etre...  
 


Message édité par francescu le 07-05-2007 à 13:11:15
Reply

Marsh Posté le 07-05-2007 à 14:56:05    

dans ton php, tu peux par exemple faire un switch sur ton select
 

Code :
  1. $condition = ''; // c'est dans condition que tu vas dire de où à où sélectionner
  2. switch ($_POST['rechercher']) // pour différentes valeurs du select on va regarder ce qu'il faut faire
  3. {
  4.    case 20: // ici, il faut prendre surface entre 0 et 20
  5.         $condition = 'surface >= 0 AND surface <= 20';  // je connais pas la syntaxe avec BETWEEN, je te mets une condition "normale"
  6.         break;
  7.    case 50: // ici, on prend surface entre 21 et 50
  8.         $condition = 'surface > 20 AND surface <= 50';
  9.         break;
  10.    deflault: // si ce n'est pas un des cas prévus
  11.        // tu peux dire d'afficher un message d'erreur par exemple
  12.        // ou tout afficher par défaut
  13.      
  14. }
  15. $requete = 'SELECT * FROM ta_table WHERE '.$condition;
  16. msyql_query($requete) or die('oups ça merdouille');


 
 
 
note: remplacer * par le nom des champs


Message édité par art_dupond le 07-05-2007 à 14:57:05

---------------
oui oui
Reply

Marsh Posté le 07-05-2007 à 14:56:05   

Reply

Marsh Posté le 07-05-2007 à 15:42:56    

Note : Remplacer deflault: par default:


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
Reply

Marsh Posté le 07-05-2007 à 15:45:01    

note : par défaut remplacer deflault: par default:


---------------
oui oui
Reply

Marsh Posté le 07-05-2007 à 18:04:57    

je te remercie bcp :))
ca me semble pas mal du tout... meme si je ne sais pas encore inserer un switch dans un select.
Je vais continuer de chercher en tout cas,
merci encore :p

Reply

Marsh Posté le 07-05-2007 à 20:24:01    

francescu a écrit :

je te remercie bcp :))
ca me semble pas mal du tout... meme si je ne sais pas encore inserer un switch dans un select.
Je vais continuer de chercher en tout cas,
merci encore :p


:??:
 
J'ai un pitit doute,
 
tu peux poster le action de ton formulaire et comment tu traites ton formulaire ?


---------------
oui oui
Reply

Marsh Posté le 08-05-2007 à 12:20:08    

 
oui voila :
 

Code :
  1. <form action="recherche.php5" name="form" method="post">
  2.  <br>
  3.  <table width="98%" border="0" align="center" cellpadding="0" cellspacing="0">
  4.    <tr>
  5.      <td width="100%" height="32" align="center">
  6.   <table width="612" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#990000">
  7.               <tr>
  8.                 <td width="127" class="style2"  >
  9.                   <div align="right">Type de transaction&nbsp; </div></td>
  10.                 <td width="185" height="32" class="style2"  >
  11.                   <div align="left">
  12.                     <select name="rechercher[]">
  13.                       <option value="0"<? if($rechercher[0]=="0" ) echo " selected"; ?>>S&eacute;lection ...</option>
  14.                       <option value="location" <? if($rechercher[0]=="location" ) echo " selected"; ?>>location</option>
  15.                       <option value="location_saisonniere"<? if($rechercher[0]=="location_saisonniere" ) echo " selected"; ?>>location saisonniere</option>
  16.                       <option value="vente"<? if($rechercher[0]=="vente" ) echo " selected"; ?>> vente</option>
  17.                     </select>                       
  18.                     <br>   
  19.                   </div></td>
  20.     
  21.                 <td width="150" class="style2" >
  22.                   <div align="right">Type de bien immobilier&nbsp; </div></td>
  23.                 <td width="150" class="style2" ><div align="left" >
  24.                   <select name="rechercher[]">
  25.                           <option value="0" <? if($rechercher[1]=="0" ) echo " selected"; ?>>S&eacute;lection ...</option>
  26.                           <option value="villa" <? if($rechercher[1]=="villa" ) echo " selected"; ?>>Villa</option>
  27.                           <option value="appartement" <? if($rechercher[1]=="appartement" ) echo " selected"; ?>>appartement</option>
  28.                           <option value="maison_village"  <? if($rechercher[1]=="maison_village" ) echo " selected"; ?>>maison de village</option>
  29.                           <option value="terrain" <? if($rechercher[1]=="terrain" ) echo " selected"; ?>>terrain</option>
  30.                           <option value="commerce" <? if($rechercher[1]=="commerce" ) echo " selected"; ?>>commerce</option>
  31.                           <option value="propriete" <? if($rechercher[1]=="propriete" ) echo " selected"; ?>>propriete</option>
  32.                         </select>
  33.                 </div></td>
  34.               </tr>
  35.               <tr>
  36.                 <td class="style2">
  37.                   <div align="right">Nombre de pieces&nbsp;</div></td>
  38.                 <td height="24" class="style2">
  39.                   <div align="left">
  40.                     <select name="rechercher[]" size="1">
  41.                       <option value="0"  <? if($rechercher[2]=="location" ) echo " selected"; ?>>S&eacute;lection ...</option>
  42.                       <option value="1" <? if($rechercher[2]=="1" ) echo " selected"; ?>>1</option>
  43.                       <option value="2"<? if($rechercher[2]=="2" ) echo " selected"; ?>>2</option>
  44.        <option value="3"<? if($rechercher[2]=="3" ) echo " selected"; ?>>3</option>
  45.      <option value="4"<? if($rechercher[2]=="4" ) echo " selected"; ?>>4</option>
  46.         <option value="5"<? if($rechercher[2]=="5" ) echo " selected"; ?>>5</option>
  47.        <option value="6"<? if($rechercher[2]=="6" ) echo " selected"; ?>>6</option>
  48.         <option value="6+"<? if($rechercher[2]=="6+" ) echo " selected"; ?>>6+</option>
  49.                     </select>
  50.                   </div></td>
  51.                 <td class="style2">
  52.                   <div align="right">Surface&nbsp; </div></td>
  53.                 <td height="24" class="style2"><div align="left">
  54.                   <select name="rechercher[]">
  55.                     <option value="0" <? if($rechercher[3]=="0" ) echo " selected"; ?>>S&eacute;lection ...</option>
  56.                     <option value="20" <? if($rechercher[3]=="20" ) echo " selected"; ?>> 0-20 </option>
  57.                     <option value="50"<? if($rechercher[3]=="50" ) echo " selected"; ?>> 21-50</option>
  58.                     <option value="75"<? if($rechercher[3]=="75" ) echo " selected"; ?>> 51-75</option>
  59.                     <option value="100"<? if($rechercher[3]=="100" ) echo " selected"; ?>> 76-100</option>
  60.                     <option value="150"<? if($rechercher[3]=="150" ) echo " selected"; ?>> 101-150</option>
  61.                     <option value="200"<? if($rechercher[3]=="200" ) echo " selected"; ?>> 151-200</option>
  62.                     <option value="250"<? if($rechercher[3]=="250" ) echo " selected"; ?>> 201-250</option>
  63.                     <option value="300"<? if($rechercher[3]=="300" ) echo " selected"; ?>> 251-300</option>
  64.                     <option value="301"<? if($rechercher[3]=="301" ) echo " selected"; ?>> +300</option>
  65.                   </select>
  66.                 </div></td>
  67.               </tr>
  68.               <tr>
  69.                 <td height="39" colspan="4" class="style42" ><div align="left" class="style43">
  70.                   <div align="center">
  71.                     <input type="submit" name="envoyer" value="Rechercher"> </div> </div> </td> </tr>
  72.             </table><div align="center">
  73. input type="hidden" name="action" value="rechercher">
  74.           </th>  </div> </tr>
  75.  <tr >
  76.              <td height="276" valign="top" align="left" b > <br>
  77.  <table width="100%" border="0" cellspacing="0" cellpadding="0" >
  78.              <tr><td valign="top" width="100%" height="120" bgcolor="#E3E3E1" >
  79.    <table width="100%" height="90%" >
  80. <?
  81.   if(isset($action)) {
  82.      if($nb_bien >0) {
  83.      while ($object_bien = mysql_fetch_object($result)) {
  84.      echo"
  85.  <tr bgcolor=\"#cccccc\">
  86.  <td  valign=\"middle\" colspan=\"3\"> <div align=left><font size=\"1\" face=\"Verdana\" > 
  87.  <a href=javascript:onClick=popup_Window('./detail.php5?id=" .  $object_bien->num_bien . "',995,925) >
  88.  <img src=\"./images/img_admin/".$object_bien->num_bien."_a.jpg\" height=\"102\" border='0' align='left'> </a></font></div>
  89.  <div align=\"center\"><font size=\"2\" face=\"Verdana\" color=\"#333333\">
  90.  <br><br>&nbsp; &nbsp; &nbsp; -Reference :<strong> $object_bien->reference </strong>-  &nbsp; $object_bien->nb_piece pi&egrave;ces &nbsp;  surface : $object_bien->surface m&sup2; &nbsp; ";
  91. if ($object_bien->type_bien  == "maison_village" ){
  92.  echo"<strong> maison de village </strong>   &nbsp;  <br>$object_bien->commentaire_1 <br> $object_bien->type    &nbsp;  <strong>$object_bien->prix &euro; </strong></div>"; }
  93. else
  94.  { echo "<strong> $object_bien->type_bien </strong> &nbsp;  <br>$object_bien->commentaire_1 <br> $object_bien->type  &nbsp;  <strong> $object_bien->prix &euro; </strong></div>"; }
  95.    if ($object_bien->coeur == "oui" ) {
  96.  print "<div align=\"right\">  <img src='images/coeur.jpg' alt=\"coup de coeur\"></div></td></tr> ";
  97.  }
  98.  else { echo" &nbsp </td></tr> ";
  99.  }   }
  100.      } else {
  101.       echo "<tr>
  102.     <td>Pas de résultats pour votre recherche.</td>
  103.      </tr> ";
  104.      }
  105.     }
  106.      ?>
  107.   </table> </td> </tr> </table> </td>   </tr>
  108. <tr>  <td ></td>
  109.             </tr></table></form>


 
 
euh la mise en page a changé et c est un peu bordelique du coup :/
mais a priori tout fonctionne mnt avec :

Code :
  1. if(isset($action)) {
  2. //--------------------- recuperation des enregistrements ---------
  3. $tab_champs = array("type","type_bien","nb_piece", "surface" );
  4. $query = "select * from bien where";
  5. $i=0;
  6. $ajouter_and = false;
  7. foreach($rechercher as $champs) {
  8.   if($champs!="0" ) {
  9.   if($ajouter_and) {
  10.    $query .= " and ";
  11.   } else {
  12.    $query .= " ";
  13.   }
  14.   $ajouter_and = true;
  15.  if($i==3){
  16.   if($champs!="0" ) {
  17.   $condition = '';
  18.   switch ($champs)
  19.   {
  20.      case 20:
  21.     $condition = "surface >= '0' AND surface <= '20'";
  22.     break;
  23.      case 50:
  24.     $condition = "surface > '21' AND surface <= '50'";
  25.     break;
  26.      case 75:
  27.     $condition = "surface > '51' AND surface <= '75'";
  28.     break;
  29.      case 100:
  30.     $condition = "surface > '76' AND surface <= '100'";
  31.     break;
  32.    case 150:
  33.     $condition = "surface > '101' AND surface <= '150'";
  34.     break;
  35.      case 200:
  36.     $condition = "surface > '151' AND surface <= '200'";
  37.     break;
  38.      case 250:
  39.     $condition = "surface > '201' AND surface <= '250'";
  40.     break;
  41.      case 300:
  42.     $condition = "surface > '251' AND surface <= '300'";
  43.     break;
  44.     case 301:
  45.     $condition = "surface > '300'";
  46.     break;  
  47.    }
  48.   }
  49.   $query .= $condition;
  50.  } else {
  51.   $query .= $tab_champs[$i]."='".$champs."'";
  52.  }
  53.  }
  54.  $i++;
  55. }
  56. if($ajouter_and==false)  $query .= " 1";
  57. $result = mysql_query($query);
  58. $nb_bien = mysql_num_rows($result);
  59. }
  60. ?>


 
c etait chaud pour mon ptit cerveau :p
merci encore !  :)

Reply

Marsh Posté le 08-05-2007 à 12:56:46    

ah ouais, je comprenais pas le pourquoi du "switch dans le select"
 
mais si ça marche, fallait pas tout poster :p
 
 
Sinon j'aurais séparé le traitement de chaque <select> au lieu de tout mettre dans un grand tableau. Mais c'est juste mon avis à deux balles ;)


---------------
oui oui
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed