problème recherche multi critère

problème recherche multi critère - PHP - Programmation

Marsh Posté le 13-07-2013 à 18:18:02    

bonjour à tous j'ai un petit problème avec mon code et je galére depuis quelques jour. j'ai vraiment besoin d'aide pour m'en sortir.
voila j'ai un formulaire de recherche dans une base de données. lorsque aucun champ du formulaire n'est renseigné et est laissé vide donc la requête m'affiche toutes les données de la base. si le premier champs du formulaire est rempli par vente, j'ai toutes les entrées concernant les ventes et c'est la même chose si on entre location. par contre des que l'on ajoute une autre champs du formulaire, il n'y a pas de résultat il en va de même si on laisse le premier champs vide et que l'on remplisse l'un des deux autre champs. je sais pas si j'ai étais assez clair dans mes explications mais j'ai besoin d'aide.  
PS: j’apprends le php
 
voici le formulaire
 

Code :
  1. <form method="post" action="recherche.php">
  2.                         <p>
  3.                                 Type d'opération : <br />
  4.                                 <select name="type_ope" value="Choisissez">
  5.                                         <option value="" selected="selected"></option>
  6.                                         <option>vente</option>
  7.                                         <option>location</option>
  8.                                 </select><br />
  9.                                 type de bien : <br />
  10.                                 <select name="type_bien">
  11.                                         <option value="" selected="selected"></option>
  12.                                         <option>Villa</option>
  13.       <option>appartement</option>
  14.       <option>terrain</option>
  15.       <option>chambre</option>
  16.       <option>magasin</option>
  17.       <option>immeuble</option>
  18.       <option>studio</option>
  19.       <option>bureaux</option>
  20.       <option>entrepot</option>
  21.                                 </select><br />
  22.                                prix : <br />
  23.                                 <select name="prix">
  24.                                         <option value="" selected="selected"></option>
  25.                                        <option value="1"> Moins de 200 000</option>
  26.       <option value="2"> Entre 200 000 et 300 000</option>
  27.       <option value="3"> Entre 300 000 et 400 000</option>
  28.       <option value="4"> Entre 400 000 et 600 000</option>
  29.       <option value="5"> Entre 600 000 et 800 000</option>
  30.       <option value="6"> Entre 800 000 et 1 000 000</option>
  31.       <option value="7"> Entre 1 000 000 et 1 500 000</option>
  32.       <option value="8"> Entre 1 500 000 et 2 000 000</option>
  33.       <option value="9"> Plus de 2 000 000</option>
  34.                                 </select><br />
  35.                                
  36.                                 <input type="submit" value="Valider" /><br />


 
et le code php
 

Code :
  1. $cnx = mysql_connect($host,$user,$pass) or die("Impossible de se connecter" );
  2. $db = mysql_select_db($bdd) or die("Impossible de se connecter" );
  3. $limit  = 15;
  4. $offset = ((isset($_REQUEST['offset']) && $_REQUEST['offset'] > 0) ? $_REQUEST['offset'] : 0);
  5. $sql_limit = "LIMIT $offset, $limit";
  6. $where = array();
  7. // j'ai considéré que tous ces champs étaient des varchar dans ta base de données
  8. if (isset($_POST['type_ope']) && strlen($_POST['type_ope'])) {
  9.    $where[] = "type_ope = '".mysql_real_escape_string($_POST['type_ope'])."'";
  10. }
  11. if (isset($_POST['type_bien']) && strlen($_POST['type_bien'])) {
  12.    $where[] = "type_bien = '".mysql_real_escape_string($_POST['type_bien'])."'";
  13. }
  14. if (isset($_POST['prix']) && strlen($_POST['prix'])) {
  15.    $where[] = "prix = '".mysql_real_escape_string($_POST['prix'])."'";
  16. }
  17. $sql_Where = (empty($where)) ? null : 'WHERE '.implode(' AND ', $where);
  18. $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM annonce $sql_Where $sql_limit";
  19. $requete = mysql_query($sql, $cnx) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
  20.                      $i = @mysql_num_rows($requete); //comptage du nombre d'entrées sélectionnées par la recherche
  21.     if ($i == 0) //s'il n'y a pas de résultat
  22.     {
  23.         echo '<font color="#FF0000">Pas de résultat ....</font><br><font color="#808080">1 - Faites votre choix dans le type de commerce<br>2 - choisissez un département limitrophe<br>3 - cette référence peut ne plus exister (commerce vendu)</font>';
  24.     }
  25.      else
  26.                 {
  27.                          $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM annonce $sql_Where $sql_limit ORDER BY type_bien";
  28.                  }
  29.     while ($donnees = @mysql_fetch_assoc( $requete ) )
  30.   { 
  31.     ?>
  32.         <tr>
  33. <fieldset class="arrondi" style="border:2px solid #CCCCCC; font-family:verdana; color:#000000; background-color:#FFFFFF; margin-bottom: 5px">
  34. <div style="float:left; width:200px; margin-top: 3px">&nbsp;<font color="#808080" size="2" face="arial">Ref:</font>&nbsp;<font color="#0000FF" face="arial" size="2"><?php echo $donnees['type_ope']; ?></font></div>
  35. <div style="float:right; width:250px; margin-top: 5px">
  36. <font color="#808080" size="2" face="arial">Prix des murs:</font>&nbsp;<font color="FF0000" face="arial" size="2"><strong><?php echo $donnees['type_bien']; ?>&nbsp;€</strong></font></div>
  37. <div style="margin:auto; margin-top: 5px">
  38. <font color="#808080" size="2" face="arial">Prix du Fonds de C</font><font color="#808080" size="3" face="arial">:</font>&nbsp;<font color="FF0000" size="2"><strong><?php echo $donnees['prix']; ?>&nbsp;€</strong></font></div>
  39. <div align="left" style="margin-bottom: 5px; margin-top: 5px">&nbsp;<font color="808080" size="3" face="arial"><strong><?php echo $donnees['ville']; ?></strong></font></div>
  40. <div align="left" style="margin-bottom: 5px">&nbsp;<font color="#808080" size="2">Descriptif:</font>&nbsp;<font color="#808080" size="2" face="arial"><?php echo $donnees['quartier']; ?></font></div>
  41. </fieldset>
  42. </tr>
  43. <?php
  44. }
  45. //$requete = mysql_query('SELECT FOUND_ROWS() AS total');
  46. //$donnees = mysql_fetch_assoc($requete);
  47. //echo paging('../recherche.php', $donnees['total'], $limit, $offset);
  48. //function paging($page, $total_rows, $limit, $offset, $preserved_params = null){
  49. //$preserved_params = array('code_commerce'=>mysql_real_escape_string($_GET['code_commerce']), 'departement'=>mysql_real_escape_string($_GET['departement']) );
  50. // $query = '';
  51. // $str_hidden = '';
  52. // if (is_array($preserved_params)) {
  53. //   foreach ($preserved_params as $k=>$v) {
  54.   //    if ($k != 'offset') {
  55.   //      $query .= $k.'='.urlencode($v).'&amp;';
  56.    //     $str_hidden .= '<input type="hidden" name="'.$k.'" value="'.htmlentities($v).'" />';
  57.   //    }
  58. //   }
  59. //  }
  60. //}
  61. ?>

Reply

Marsh Posté le 13-07-2013 à 18:18:02   

Reply

Marsh Posté le 17-07-2013 à 17:18:26    

regarde du coté de like en sql pour tes conditions dans ta variable where en php, egalement, tu devrais faire attention au valeur dans ta liste déroulante,
 
par exemple, si tu sélectionnes "Entre 600 000 et 800 000", la valeur de $_POST['prix'] sera egale a 5.
 
De plus, es-tu vraiment l'auteur de ce code?
// j'ai considéré que tous ces champs étaient des varchar dans ta base de données  
 

Reply

Marsh Posté le 17-07-2013 à 17:24:55    

ojediop a écrit :

Code :
  1. $cnx = mysql_connect($host,$user,$pass) or die("Impossible de se connecter" );



 [:cheesecake]


---------------
Main/Alt1/Alt2/Alt3
Reply

Sujets relatifs:

Leave a Replay

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