Bonjour,

J'améliore mon scripte pour la recherche sur ma BDD Mysql.
je récupère mes critères de recherche via url.

Et je fair une boucle pour chercher avec le if s'il y a un resultat
exemple :
if(!empty($nb_rooms)) s'il y a quelque chose il récupère le résultat et passe au suivant jusqu'à récupérer tous les résultat
et lance une recherche sur tous les critères.

Et a fiche tous les résultat existant.

Mais quant j'affiche avec var_dump($donnees7);die();
j'ai que
object(PDOStatement)#18 (1) { ["queryString"]=> string(96) "SELECT * FROM db_product, db_customer WHERE good_quality LIKE 'Moyen' AND id_custom=id_customer" }
et il ne prend pas les autre critère. Il ne prend que le 1er if et pas les autres. Comment faire.

Pouvez-vous m'aider merci a vous.

                     $i = 0;

                        $nb_rooms = ''. $_GET['nb_rooms'] . '';
                        $neighborhood = ''. $_GET['neighborhood'] . '';
                        $neighborhood_1 = ''. $_GET['neighborhood_1'] . '';
                        $neighborhood_2 = ''. $_GET['neighborhood_2'] . '';
                        $neighborhood_3 = ''. $_GET['neighborhood_3'] . '';
                        $neighborhood_4 = ''. $_GET['neighborhood_4'] . '';
                        $neighborhood_5 = ''. $_GET['neighborhood_5'] . '';
                        $neighborhood_6 = ''. $_GET['neighborhood_6'] . '';
                        $neighborhood_7 = ''. $_GET['neighborhood_7'] . '';
                        $good_quality = ''. $_GET['good_quality'] . '';
                        $budget_min = ''. $_GET['budget_min'] . '';
                        $budget_max = ''. $_GET['budget_max'] . '';      
                        $price = ''. $_GET['budget_max'] . ' AND '. $_GET['budget_min'] . ' ';      
                        //$budget_minn = $budget_min * 1.50;
                        //$budget_maxx = $budget_max / 1.50;     

                        if(!empty($good_quality)) { 

                            $choix[$i++] = "good_quality LIKE '$good_quality'"; 
                        }

                        if(!empty($nb_rooms)) 
                        { 
                            $choix[$i++] = "nb_rooms = $nb_rooms"; 
                        }

                     if(!empty($neighborhood)) 
                        { 
                            $choix[$i++] = "neighborhood = '$neighborhood'"; 
                        }
                    if(!empty($neighborhood_1)) 
                        { 
                            $choix[$i++] = "neighborhood_1 = '$neighborhood_1'"; 
                        }
                    if(!empty($neighborhood_2)) 
                        { 
                            $choix[$i++] = "neighborhood_2 = '$neighborhood_2'"; 
                        }
                    if(!empty($neighborhood_3)) 
                        { 
                            $choix[$i++] = "neighborhood_3 = '$neighborhood_3'"; 
                        }
                    if(!empty($neighborhood_4)) 
                        { 
                            $choix[$i++] = "neighborhood_4 = '$neighborhood_4'"; 
                        }
                    if(!empty($neighborhood_5)) 
                        { 
                            $choix[$i++] = "neighborhood_5 = '$neighborhood_5'"; 
                        }
                    if(!empty($neighborhood_6)) 
                        { 
                            $choix[$i++] = "neighborhood_6 = '$neighborhood_6'"; 
                        }
                    if(!empty($neighborhood_7)) 
                        { 
                            $choix[$i++] = "neighborhood_7 = '$neighborhood_7'"; 
                        }

                        if(!empty($price)) 
                        { 
                            $choix[$i++] = "price BETWEEN $price"; 
                        }

                $critere = $choix[0]." ";

                    for($j=1;$j>$i;$j++)
                    {
                             $critere .= " AND ".$choix[$i]." ";
                     }

                        $donnees7 = $bdd->query("SELECT * FROM db_product, db_customer WHERE $critere AND id_custom=id_customer") or die(mysql_error());                          

                                $donnees = $donnees7->fetch();
                                 var_dump($donnees7);die();                                                                                         

29 réponses


C'est un peu n'importe quoi ton code :) :

  • pour ajouter une valeur dans un tableau tu peux juste faire : $tableau[] = "valeur"
  • ta boucle fait n'importe quoi : un foreach serait plus adapté...
azizs
Auteur

Je comprend pas trop peux-tu m'aider

Tu n'as qu'une condition car ta boucle ne s'éxécute pas à cause d'une mauvaise condition : $i est compris entre 0 et 11, $j vaut 1 et la boucle s'éxécute lorsque $j est plus grand que $i, ce qui et absurde. Si $i = 0, ta boucle s'éxécute mais il n'y a aucune condition à ajouter, si $i est plus grand que 1 (tu as des conditions) ta boucle ne s'éxécute pas!
Change le $j>$i par $j<$i

Tu fais un var dump de $donnees7 et non de $donnees . + les petits problèmes relevé au dessus.

azizs
Auteur

je n'arrive pas a trouver de solution quelqu'un peux m'aider.

merci a vous,

voilà mon code modifier :

                  $i = 0;

                    $budget_min = ''. $_GET['budget_min'] . '';
                    $budget_max = ''. $_GET['budget_max'] . '';
                    $nb_rooms = ''. $_GET['nb_rooms'] . '';
                    $neighborhood = ''. $_GET['neighborhood'] . '';
                    $neighborhood_1 = ''. $_GET['neighborhood_1'] . '';
                    $neighborhood_2 = ''. $_GET['neighborhood_2'] . '';
                    $neighborhood_3 = ''. $_GET['neighborhood_3'] . '';
                    $neighborhood_4 = ''. $_GET['neighborhood_4'] . '';
                    $neighborhood_5 = ''. $_GET['neighborhood_5'] . '';
                    $neighborhood_6 = ''. $_GET['neighborhood_6'] . '';
                    $neighborhood_7 = ''. $_GET['neighborhood_7'] . '';
                    $good_quality = ''. $_GET['good_quality'] . '';
                    $price = ''. $_GET['budget_min'] . ' AND '. $_GET['budget_max'] .'';

                    if(!empty($neighborhood)) { $choix[$i++] = "neighborhood LIKE '$neighborhood'"; }
                    if(!empty($neighborhood_1)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_1'"; }
                    if(!empty($neighborhood_2)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_2'"; }
                    if(!empty($neighborhood_3)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_3'"; }
                    if(!empty($neighborhood_4)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_4'"; }
                    if(!empty($neighborhood_5)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_5'"; }
                    if(!empty($neighborhood_6)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_6'"; }
                    if(!empty($neighborhood_7)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_7'"; }
                    if(!empty($good_quality)) { $choix[$i++] = "good_quality LIKE '$good_quality'"; }
                    if(!empty($price)) { $choix[$i++] = "price BETWEEN $price"; }
                    if(!empty($nb_rooms)) { $choix[$i++] = "nb_rooms = $nb_rooms"; }

                 $critere = $choix[0]." ";

                for($j=1;$j<$i;$j++)
                {
                         $critere .= " AND ".$choix[$j]." ";
                 }
                  if($i > 0)
                {
                         $reponse = $bdd->query("SELECT * FROM db_product WHERE $critere ORDER BY price DESC ") or die(mysql_error());
                        $nbr=$reponse->rowCount();   
                 }
                  else
                {

                            echo"<center><h6>Merci de selectioner un critère de recherche</h6></center>";

                 }

while ($donnees = $reponse->fetch())
//var_dump($reponse);die();                                                                                         

{
?>   

je cherche a réaliser des conditions si reponse ne donne pas de résultat, je passe a reponse2 qui reduit les critères jusqu'a avoir un réponse.

Merci de votre aide, je ne trouve pas de solution, même sur le net.

Slt essaye avec Switch() http://php.net/manual/fr/control-structures.switch.php C'est plus simple ily a moins de risque d'erreur et c'est plus compreensible !!!

azizs
Auteur

Je te remerci TJ de ton aide,
J'ai fait ce que tu ma conseiller, j'ai un problème avec les case.

j'ai fait cela :

                  $i = 0;

                    $budget_min = ''. $_GET['budget_min'] . '';
                    $budget_max = ''. $_GET['budget_max'] . '';
                    $nb_rooms = ''. $_GET['nb_rooms'] . '';
                    $neighborhood = ''. $_GET['neighborhood'] . '';
                    $neighborhood_1 = ''. $_GET['neighborhood_1'] . '';
                    $neighborhood_2 = ''. $_GET['neighborhood_2'] . '';
                    $neighborhood_3 = ''. $_GET['neighborhood_3'] . '';
                    $neighborhood_4 = ''. $_GET['neighborhood_4'] . '';
                    $neighborhood_5 = ''. $_GET['neighborhood_5'] . '';
                    $neighborhood_6 = ''. $_GET['neighborhood_6'] . '';
                    $neighborhood_7 = ''. $_GET['neighborhood_7'] . '';
                    $good_quality = ''. $_GET['good_quality'] . '';
                    $price = ''. $_GET['budget_min'] . ' AND '. $_GET['budget_max'] .'';

            switch (!$neighborhood) {
                case 0:
                    if(!empty($neighborhood)) { $choix[$i++] = "neighborhood LIKE '$neighborhood'"; }
                break;                                          
                case 1:
                    if(!empty($neighborhood_1)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_1'"; }
                break;                       
                case 2:
                    if(!empty($neighborhood_2)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_2'"; }
                break;                       
                case 3:
                    if(!empty($neighborhood_3)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_3'"; }
                break;                       
                case 4:
                    if(!empty($neighborhood_4)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_4'"; }
                break;                       
                case 5:
                    if(!empty($neighborhood_5)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_5'"; }
                break;                       
                case 6:
                    if(!empty($neighborhood_6)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_6'"; }
                break;                       
                case 7:
                    if(!empty($neighborhood_7)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_7'"; }
                break;                       
                }
                    if(!empty($good_quality)) { $choix[$i++] = "good_quality LIKE '$good_quality'"; }
                    if(!empty($price)) { $choix[$i++] = "price BETWEEN $price"; }
                    if(!empty($nb_rooms)) { $choix[$i++] = "nb_rooms = $nb_rooms"; }

                 $critere = $choix[0]." ";

                for($j=1;$j<$i;$j++)
                {
                         $critere .= " AND ".$choix[$j]." ";
                 }
                    switch (!$i) {
                    case 0:
                            $reponse = $bdd->query("SELECT * FROM db_product WHERE $critere ORDER BY price DESC") or die(mysql_error());
                        break;                       

                    case 1:
                            $reponse = $bdd->query("SELECT * FROM db_product WHERE price BETWEEN $price AND good_quality LIKE '$good_quality' AND nb_rooms = $nb_rooms ORDER BY price DESC") or die(mysql_error());
                        break;                   

                    case 2:
                            $reponse = $bdd->query("SELECT * FROM db_product WHERE good_quality LIKE '$good_quality' AND nb_rooms = $nb_rooms ORDER BY price DESC") or die(mysql_error());
                        break;

                     case 3:
                            $reponse = $bdd->query("SELECT * FROM db_product WHERE price BETWEEN $price AND nb_rooms = $nb_rooms ORDER BY price DESC") or die(mysql_error());
                        break;

                     case 4:
                            $reponse = $bdd->query("SELECT * FROM db_product WHERE $price ORDER BY price AND good_quality LIKE '$good_quality' AND nb_rooms = $nb_rooms ORDER BY price DESC") or die(mysql_error());
                            break;
                     case 5:

                        $reponse = $bdd->query("SELECT * FROM db_product WHERE good_quality LIKE '$good_quality' AND nb_rooms = $nb_rooms ORDER BY price DESC") or die(mysql_error());
                            break;
                   }

while ($donnees = $reponse->fetch())
{
?>  

Comment faire pour qu'il passe de case1 à case2 ainsi de suite.

Switch case c'est pour tester si c'est sol1 ou sol2 qui est dans variable:

switch ($variable) {
    case "sol1":
        // Ton code
        break;
    case "sol2":
        // Ton code
        break;
}

Voila !

Sinon il y a une requete spécial pour faire une recherche regarde dans phpmyadmin (Section recherche quand tu est dans ta base) ca peut t'aider et te donner des pistes de recherche !!

azizs
Auteur

voilà ce que j'ecris

                  $i = 0;

                    $budget_min = ''. $_GET['budget_min'] . '';
                    $budget_max = ''. $_GET['budget_max'] . '';
                    $nb_rooms = ''. $_GET['nb_rooms'] . '';
                    $neighborhood = ''. $_GET['neighborhood'] . '';
                    $neighborhood_1 = ''. $_GET['neighborhood_1'] . '';
                    $neighborhood_2 = ''. $_GET['neighborhood_2'] . '';
                    $neighborhood_3 = ''. $_GET['neighborhood_3'] . '';
                    $neighborhood_4 = ''. $_GET['neighborhood_4'] . '';
                    $neighborhood_5 = ''. $_GET['neighborhood_5'] . '';
                    $neighborhood_6 = ''. $_GET['neighborhood_6'] . '';
                    $neighborhood_7 = ''. $_GET['neighborhood_7'] . '';
                    $good_quality = ''. $_GET['good_quality'] . '';
                    $price = ''. $_GET['budget_min'] . ' AND '. $_GET['budget_max'] .'';

              switch ($i > 0) {
                case 0:
                    if(!empty($neighborhood)) { $choix[$J++] = "neighborhood LIKE '$neighborhood'"; }
                case 1:
                    if(!empty($neighborhood_1)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_1'"; }
                case 2:
                    if(!empty($neighborhood_2)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_2'"; }
                case 3:
                    if(!empty($neighborhood_3)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_3'"; }
                case 4:
                    if(!empty($neighborhood_4)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_4'"; }
                case 5:
                    if(!empty($neighborhood_5)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_5'"; }
                case 6:
                    if(!empty($neighborhood_6)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_6'"; }
                case 7:
                    if(!empty($neighborhood_7)) { $choix[$i++] = "neighborhood LIKE '$neighborhood_7'"; }
                }
                    if(!empty($good_quality)) { $choix[$i++] = "good_quality LIKE '$good_quality'"; }
                    if(!empty($price)) { $choix[$i++] = "price BETWEEN $price"; }
                    if(!empty($nb_rooms)) { $choix[$i++] = "nb_rooms = $nb_rooms"; }

                 $critere = $choix[0]." ";

                for($j=1;$j<$i;$j++)
                {
                         $critere .= " AND ".$choix[$j]." ";
                 }

              switch ($i<0) {

                    case "sol1":
                             $reponse = $bdd->query("SELECT * FROM db_product WHERE $critere") or die(mysql_error());
                         var_dump($reponse);die();               
                    break;                       
                    case "sol2":
                            $reponse = $bdd->query("SELECT * FROM db_product WHERE price BETWEEN $price AND nb_rooms = $nb_rooms AND good_quality LIKE '$good_quality'") or die(mysql_error());
                    break;                   
                    case "sol3":
                            $reponse = $bdd->query("SELECT * FROM db_product WHERE price BETWEEN $price AND nb_rooms = $nb_rooms") or die(mysql_error());
                break;
                case "sol4":
                            $reponse = $bdd->query("SELECT * FROM db_product WHERE price BETWEEN $price") or die(mysql_error());
                     break;

                   }

// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())

{
?>    

mon problème est que case "sol1": dois comporter quel variable je ne comprend pas ce que je dois mettre.
Quant je mais case 1 : puis case 2: et case 3: il ne me fait que le 1er et 2 case pas les autres.
merci de ton aide.

Ton code c'est de plus en olus n'importe quoi : l'usage d'un switch est inutile pour ton cas...

Salut,

switch ($i > 0) te retournera seulement true ou false.
C'est un peu (voire beaucoup) le bazar ton code, je pense que tu devrais le revoir de A & Z, puis revenir vers nous pour que nous puissions t'ader.

azizs
Auteur

Voilà,
J'ai modifier mon code mais je n'y arrive pas je cherche vraiment une solution, je suis seul devant mon ecran et ne trouve pas de solution, je demande juste que l'on m'explique pourquoi cela ne fonctionne pas et que l'on m'aide.

Je ne connais personne qui peux m'aider, et de plus j'ai essayer toutes les solutions, et me retrouve devant un mur, merci de bien m'aider.

Comme je l'ai dit a plusieurs reprise je cherche a faire un moteur de recherche avec 4 critères, qui sont récupérer de URL et l'on fait une recherche mais quant les 4 critères ne donne il cherche avec 3 critères puis 2 jusqu’à avoir une réponse, voilà mais il y a un des critère qui a 7 critères de cherche qui sont les quartiers.

J'ai chercher sur le net et rien pas de code similaire ou d'exemple.
Aider moi S.V.P

voilà mon code :

}          
      $budget_min = ''. $_GET['budget_min'] . '';
      $budget_max = ''. $_GET['budget_max'] . '';
      $nb_rooms = ''. $_GET['nb_rooms'] . '';
      $neighborhood = ''. $_GET['neighborhood'] . '';
      $neighborhood_1 = ''. $_GET['neighborhood_1'] . '';
      $neighborhood_2 = ''. $_GET['neighborhood_2'] . '';
      $neighborhood_3 = ''. $_GET['neighborhood_3'] . '';
      $neighborhood_4 = ''. $_GET['neighborhood_4'] . '';
      $neighborhood_5 = ''. $_GET['neighborhood_5'] . '';
      $neighborhood_6 = ''. $_GET['neighborhood_6'] . '';
      $neighborhood_7 = ''. $_GET['neighborhood_7'] . '';
      $good_quality = ''. $_GET['good_quality'] . '';
      $price = ''. $_GET['budget_min'] . ' AND '. $_GET['budget_max'] .'';
$l = 0;      
      if(!empty($price)) { $choix[$l] = "price BETWEEN $price";  $l++;}
      if(!empty($nb_rooms)) { $choix[$l] = "nb_rooms = $nb_rooms";  $l++;}
//      if(!empty($good_quality)) { $choix[$l] = "good_quality LIKE '$good_quality'";  $l++;}
$m = 0;      
      if(!empty($price)) { $choix[$m] = "price BETWEEN $price";  $m++;}
      if(!empty($good_quality)) { $choix[$m] = "good_quality LIKE '$good_quality'";  $m++;}
      //      if(!empty($nb_rooms)) { $choix[$m] = "nb_rooms = $nb_rooms";  $m++;}

$n = 0;      
      if(!empty($price)) { $choix[$m] = "price BETWEEN $price";  $m++;}
      if(!empty($good_quality)) { $choix[$m] = "good_quality LIKE '$good_quality'";  $m++;}
      //      if(!empty($nb_rooms)) { $choix[$m] = "nb_rooms = $nb_rooms";  $m++;}

$i = 0;
      if(!empty($price)) { $choix[$i] = "price BETWEEN $price";  $i++;} 
      if(!empty($nb_rooms)) { $choix[$i] = "nb_rooms = $nb_rooms";  $i++;}     
      if(!empty($good_quality)) { $choix[$i] = "good_quality LIKE '$good_quality'";  $i++;}

$k = 0;
      if(!empty($neighborhood)) { $choix_lieu[$k] = "neighborhood LIKE '$neighborhood'"; $k++;}
      if(!empty($neighborhood_1)) { $choix_lieu[$k] = "neighborhood LIKE '$neighborhood_1'"; $k++;}
      if(!empty($neighborhood_2)) { $choix_lieu[$k] = "neighborhood LIKE '$neighborhood_2'"; $k++;}
      if(!empty($neighborhood_3)) { $choix_lieu[$k] = "neighborhood LIKE '$neighborhood_3'"; $k++;}
      if(!empty($neighborhood_4)) { $choix_lieu[$k] = "neighborhood LIKE '$neighborhood_4'"; $k++;}
      if(!empty($neighborhood_5)) { $choix_lieu[$k] = "neighborhood LIKE '$neighborhood_5'"; $k++;}
      if(!empty($neighborhood_6)) { $choix_lieu[$k] = "neighborhood LIKE '$neighborhood_6'"; $k++;}
      if(!empty($neighborhood_7)) { $choix_lieu[$k] = "neighborhood LIKE '$neighborhood_7'"; $k++;}

$critere = $choix[0]." ";
for($j=1;$j<$i;$j++)
{
    $critere .= " AND ".$choix[$j]." ";
}  
       if($i > 0){ 
         $critere = $choix[0];

         for($j=1;$j<$i;$j++){
             $critere .= " AND ".$choix[$j]." ";
         }
      }

echo "  test 2 and critere = ".$critere;   

 if($l > 0){ 
   $critere = $choix[0];

   for($j=1;$j<$l;$j++){
       $critere .= " AND ".$choix[$j]." ";
   }
}
echo "  test 3 critere = ".$critere; 

if($k > 0){
   if($i != 0) $critere .= " AND ";
   echo "  test de i   = ".$i;

   for($j=0;$j<$k-1;$j++){
       $critere .= $choix_lieu[$j]." OR ";
   }
   $critere .= $choix_lieu[$k-1];
}

echo "  test 1 critere = ".$critere;
echo "  test de k   = ".$k       ;  

  $flag = false;
  $count = $bdd->query("SELECT COUNT(*) FROM db_product WHERE $critere") or die(mysql_error());
  $count = $count->fetchColumn();
  echo "   valeur de flag avant le IF : ".$count;

  if($count > 0){
    $flag = true;
    $reponse = $bdd->query("SELECT * FROM db_product WHERE $critere") or die(mysql_error());
  }
    echo "   valeur de flag avant le while : ".$flag." et count = ".$count;

  while ($flag == false) {
        $i--;
        if($i == 0) $k--; 

        echo "\nOn rentre dans le while avec i = ".$i." et k = ".$k;
        if($i > 0 || $k > 0){
           if($i > 0){
              $critere = $choix[0];

              for($j=1;$j<$i;$j++){ 
                  $critere .= " AND ".$choix[$j]." ";
              }
           }

           if($k > 0){
              if($i != 0) $critere .= " AND ";

              for($j=1;$j<$k-1;$j++){
                  $critere .= $choix_lieu[$j]." OR ";
              }
              $critere .= $choix_lieu[$k];
           }

           $count = $bdd->query("SELECT COUNT(*) FROM db_product WHERE $critere") or die(mysql_error());
           $count = $count->fetchColumn();      
        }else{
            $count1 = $bdd->query("SELECT COUNT(*) FROM db_product") or die(mysql_error());
            $count1 = $count1->fetchColumn();
        }

        echo "\navec nombre dargs  = ".($i+$k)."| on obtient : ".$count." résultats";       

        if($count > 0){
            $flag = true;
            $reponse = $bdd->query("SELECT * FROM db_product WHERE $critere") or die(mysql_error());
        }else if ($count1 > 0){
            $flag = true; 
            $reponse = $bdd->query("SELECT * FROM db_product") or die(mysql_error());
        }
   }  

while ($donnees = $reponse->fetch())

{
?>     

Merci de votre aide.

Bonjour Azizs
Je vous propose ceci =>

$conditions = [];
$params = [];

if(!empty($_GET['budget_min']) && !empty($_GET['budget_max'])) {
    $params['min'] = $_GET['budget_min'];
    $params['max'] = $_GET['budget_max'];
    $conditions[] = '(price between :min AND :max)';
} elseif(!empty($_GET['budget_min'])) {
    $params['min'] = $_GET['budget_min'];
    $conditions[] = 'price  >= :min';
} elseif(!empty($_GET['budget_max'])) {
    $params['max'] = $_GET['budget_max'];
    $conditions[] = 'price  <= :max';
}

$neighborhoods = '';
$addOR = false;

for($index = 1; $index <= 7; $index++) {
    $name = 'neighborhood_' . $index;
    if(!empty($_GET[$name])) {
            $params[$name] = '%' . $_GET[$name] . '%';
            if($addOR) {
                $neighborhoods .= ' OR ';
            }
            $neighborhoods .= "neighborhood LIKE :$name";
            $addOR = true;
    }
}

if(!empty($neighborhoods)) {
    $conditions[] = '(' . $neighborhoods . ')';
}
if(!empty($_GET['good_quality'])) {
    $params['good_quality'] = '%'. $_GET['good_quality'] . '%';
    $conditions[] = '( good_quality LIKE :good_quality)';
}

if(!empty($_GET['nb_rooms'])) {
    $params['nb_rooms'] = $_GET['nb_rooms'];
    $conditions[] ='(nb_rooms = :nb_rooms)';
}
if(!empty($conditions)) {
    $conditions = ' WHERE ' . implode(' AND ', $conditions);
}  else {
    $conditions = '';
}

$prepare = $bdd->prepare('SELECT * FROM db_product' . $conditions);
$prepare->execute($params) ;
$donnees = $prepare->fetchAll();

var_dump($donnees);
azizs
Auteur

Merci de votre aide balbert, j'ai cette erreur

Parse error: syntax error, unexpected '[' in /home/www/site/seach_result_acquereur_admin.php on line 713

Je viens de le corriger ressayez voir

azizs
Auteur

J'ai toujour une erreur, je comprend pas.
Parse error: syntax error, unexpected '[' in /home/www/site/seach_result_acquereur_admin.php on line 710

il ya quel instruction à la ligne 710 ?

azizs
Auteur

$conditions = [];

alors change les variables conditions et params par array

    $conditions = array();
    $params = array();
azizs
Auteur

Voilà j'ai corriger plus d'erreur et voilà la réponse de var_dump($donnees);

array(0) { }

Qu'affiche le code ci dessous =>

echo '<pre>';
print_r($_GET);
echo 'SELECT * FROM db_product' . $conditions;
echo '</pre>';

il y a t-il des données dans ta table db_product ?

azizs
Auteur

il y a t-il des données dans ta table db_product ?
OUI
voilà cela m'affiche :

array(0) { }
Array
(
    [id] => 61
    [budget] => 29999
    [budget_1] => 0
    [budget_2] => 0
    [budget_3] => 0
    [budget_4] => 199999
    [budget_5] => 0
    [budget_6] => 0
    [budget_7] => 0
    [budget_8] => 0
    [budget_9] => 0
    [budget_10] => 0
    [budget_11] => 500001
    [neighborhood] => 
    [neighborhood_1] => 
    [neighborhood_2] => 
    [neighborhood_3] => 
    [neighborhood_4] => 
    [neighborhood_5] => 
    [neighborhood_6] => Paris
    [neighborhood_7] => 
    [building] => ss
    [nb_rooms] => 3
    [nb_parking] => 2
    [total_area] => 0
    [view] => 
    [view_1] => 
    [view_2] => Vue sur la ville
    [view_3] => 
    [good_quality] => Moyen
    [budget_min] => 29999
    [budget_max] => 50001
    [date] => 2015-09-03
    [time] => 12:48:09
)
SELECT * FROM db_product WHERE (price beetwen :min AND :max) AND (neighborhood LIKE :neighborhood_6) AND ( good_quality LIKE :good_quality) AND (nb_rooms = :nb_rooms)

Pour information voilà comment j'affiche le résultat :

 <table cellpadding="0" cellspacing="0" width="100%" class="tDefault checkAll tMedia" id="checkAll">
                    <thead>
                        <tr>
                        <td width="5">Ref.</td>
                        <td width="50">Prix MOI€</td>
                        <td width="5">Lieux</td>
                        <td width="5">Immeuble</td>
                        <td width="5">Vue</td>
                        <td width="5">Nombre de chambre</td>
                        <td width="5">Nombre de parking</td>
                        <td width="5">Qualité</td>
                        <td width="5">Total habitable M<sup>2</sup></td>
                        <td width="5">Total habitable M<sup>2</sup></td>
                        <td width="5">Fiche PDF</td>
                        </tr>
                    </thead>
                    <tfoot>
                        <tr>
                            <td colspan="14">
                                <div class="itemActions">
                                </div>
                            </td>
                        </tr>
                    </tfoot>

CODE SQL

?>    
                <tbody>
                    <tr>
                        <td><?php echo number_format($donnees['price'], 0, '.', ' '); ?></td>
                        <td><?php echo $donnees['neighborhood']; ?></td>
                        <td><?php echo $donnees['building']; ?></td>
                        <td><div><?php echo $donnees['view']; ?></div>
                            <div><?php echo $donnees['view_1']; ?></div>                        
                            <div><?php echo $donnees['view_2']; ?></div>
                            <div><?php echo $donnees['view_3']; ?></div>
                        </td>
                        <td><?php echo $donnees['nb_rooms']; ?></td>
                        <td><?php echo $donnees['nb_parking']; ?></td>
                        <td><?php echo $donnees['living_area']; ?></td>
                        <td><?php echo $donnees['total_area']; ?></td>
                        <td><?php echo $donnees['good_quality']; ?></td>
                        </td>   

                   <td>
<?php
}

$reponse->closeCursor(); // Termine le traitement de la requête

?>

                    </tr>     

                </tbody>

            </table>

        </div>

        </div>

    </div>
    <!-- Main content ends -->

</div>
<!-- Content ends -->

</body>
</html>

merci encore de ton aide.

Ton code doit ressembler au code ci dessous.
Par contre je vois que tu fais un test sur le champs price alors qu'il ne figure pas dans ta table, est ce normal ça ?

<?php

  $conditions = array();
  $params = array();

  if(!empty($_GET['neighborhood'])) {
    $params['neighborhood'] = '%' . $_GET['neighborhood'] . '%'; 
    $neighborhoods = 'neighborhood like :neighborhood';
  } else {
    $neighborhoods  = '';
  }
  for($index = 1; $index <= 7; $index++) {
      $name = 'neighborhood_' . $index;
      if(!empty($_GET[$name])) {
              $params[$name] = '%' . $_GET[$name] . '%';
              if(!empty($neighborhoods)) {
                  $neighborhoods .= ' OR ';
              }
              $neighborhoods .= "$name LIKE :$name";
      }
  }

  if(!empty($neighborhoods)) {
      $conditions[] = '(' . $neighborhoods . ')';
  }

  if(!empty($_GET['budget_min']) && !empty($_GET['budget_max'])) {
      $params['min'] = $_GET['budget_min'];
      $params['max'] = $_GET['budget_max'];
      $conditions[] = '(price between :min AND :max)';
  } elseif(!empty($_GET['budget_min'])) {
      $params['min'] = $_GET['budget_min'];
      $conditions[] = 'price  >= :min';
  } elseif(!empty($_GET['budget_max'])) {
      $params['max'] = $_GET['budget_max'];
      $conditions[] = 'price  <= :max';
  }

  if(!empty($_GET['good_quality'])) {
      $params['good_quality'] = '%'. $_GET['good_quality'] . '%';
      $conditions[] = '( good_quality LIKE :good_quality)';
  }

  if(!empty($_GET['nb_rooms'])) {
      $params['nb_rooms'] = $_GET['nb_rooms'];
      $conditions[] ='(nb_rooms = :nb_rooms)';
  }

  if(!empty($conditions)) {
      $conditions = ' WHERE ' . implode(' AND ', $conditions);
  }  else {
      $conditions = '';
  }

  $prepare = $bdd->prepare('SELECT * FROM db_product' . $conditions);
  $prepare->execute($params) ;
  $donnees = $prepare->fetchAll();

  ?>
 <table cellpadding="0" cellspacing="0" width="100%" class="tDefault checkAll tMedia" id="checkAll">
                    <thead>
                        <tr>
                            <td width="5">Ref.</td>
                            <td width="50">Prix MOI€</td>
                            <td width="5">Lieux</td>
                            <td width="5">Immeuble</td>
                            <td width="5">Vue</td>
                            <td width="5">Nombre de chambre</td>
                            <td width="5">Nombre de parking</td>
                            <td width="5">Qualité</td>
                            <td width="5">Total habitable M<sup>2</sup></td>
                            <td width="5">Total habitable M<sup>2</sup></td>
                            <td width="5">Fiche PDF</td>
                        </tr>
                    </thead>
                <tbody>
                    <?php foreach($donnees as $donnee) : ?>
                      <tr>
                            <td><?php echo number_format($donnee['price'], 0, '.', ' '); ?></td>
                            <td><?php echo $donnee['neighborhood']; ?></td>
                            <td><?php echo $donnee['building']; ?></td>
                            <td>
                                    <div>
                                        <?php echo $donnee['view']; ?>
                                     </div>
                                    <div>
                                        <?php echo $donnee['view_1']; ?>
                                    </div>                        
                                    <div>
                                        <?php echo $donnee['view_2']; ?>
                                    </div>
                                    <div>
                                        <?php echo $donnee['view_3']; ?>
                                    </div>
                            </td>
                            <td><?php echo $donnee['nb_rooms']; ?></td>
                            <td><?php echo $donnee['nb_parking']; ?></td>
                            <td><?php echo $donnee['living_area']; ?></td>
                            <td><?php echo $donnee['total_area']; ?></td>
                            <td><?php echo $donnee['good_quality']; ?></td> 
                    </tr>   
                    <?php endforeach; ?>
                </tbody>
                 <tfoot>
                        <tr>
                            <td colspan="14">
                                <div class="itemActions">
                                </div>
                            </td>
                        </tr>
                    </tfoot>
     </table>
azizs
Auteur

Salut,

j'ai réaliser une modification et j'obtient un requete :

$conditions = array();
$params = array();

  if(!empty($_GET['budget_min']) && !empty($_GET['budget_max'])) {
      $min = $_GET['budget_min'];
      $max = $_GET['budget_max'];
      $conditions[] = '(price between '.$min.' AND '.$max.')';

  } elseif(!empty($_GET['budget_min'])) {
      $min = $_GET['budget_min'];
      $conditions[] = 'price  >= '.$min.'';

  } elseif(!empty($_GET['budget_max'])) {
      $max = $_GET['budget_max'];
      $conditions[] = 'price  <= '.$max.'';
  }

$neighborhoods = '';
$addOR = false;

for($index = 1; $index <= 7; $index++) {
    $name = 'neighborhood_' . $index;
    if(!empty($_GET[$name])) {
            $params[$name] = '%' . $_GET[$name] . '%';
            if($addOR) {
                $neighborhoods .= ' OR ';
            }
            $neighborhoods .= "neighborhood LIKE :$name";
            $addOR = true;
    }
}

if(!empty($neighborhoods)) {
    $conditions[] = '(' . $neighborhoods . ')';
}

if(!empty($_GET['good_quality'])) {
    $good_quality = '"%'. $_GET['good_quality'] .'%"';
    $conditions[] = '(good_quality LIKE '.$good_quality.')';
}

if(!empty($_GET['nb_rooms'])) {
    $nb_rooms = $_GET['nb_rooms'];
    $conditions[] ='(nb_rooms = '.$nb_rooms.')';
}

if(!empty($conditions)) {
    $conditions = ' WHERE ' . implode(' AND ', $conditions);

}  else {
    $conditions = '';
}

$prepare = $bdd->prepare('SELECT * FROM db_product' . $conditions);
$prepare->execute($params) ;
$donnees = $prepare->fetchAll();

var_dump($prepare);

echo '<pre>';
print_r($_GET);
echo 'SELECT * FROM db_product' . $conditions;
echo '</pre>';

{
?> 

Et cela me donne

object(PDOStatement)#18 (1) { ["queryString"]=> string(161) "SELECT * FROM db_product WHERE (price between 14999999 AND 24999999) AND (neighborhood LIKE :neighborhood_6) AND (good_quality LIKE "%Moyen%") AND (nb_rooms = 3)" }
Array
(
    [id] => 72
    [budget] => 0
    [budget_1] => 0
    [budget_2] => 0
    [budget_3] => 149999
    [budget_4] => 199999
    [budget_5] => 249999
    [budget_6] => 0
    [budget_7] => 0
    [budget_8] => 0
    [budget_9] => 0
    [budget_10] => 0
    [budget_11] => 0
    [neighborhood] => 
    [neighborhood_1] => 
    [neighborhood_2] => 
    [neighborhood_3] => 
    [neighborhood_4] => 
    [neighborhood_5] => 
    [neighborhood_6] => Paris
    [neighborhood_7] => 
    [building] => R
    [nb_rooms] => 3
    [nb_parking] => 2
    [total_area] => 3333
    [view] => 
    [view_1] => Belle vue sur la mer
    [view_2] => 
    [view_3] => 
    [good_quality] => Moyen
    [budget_min] => 149999
    [budget_max] => 249999
    [date] => 2015-09-03
    [time] => 13:24:09
)
SELECT * FROM db_product WHERE (price between 149999 AND 249999) AND (neighborhood LIKE :neighborhood_6) AND (good_quality LIKE "%Moyen%") AND (nb_rooms = 3)

je n'arrive pas a récupérer les donner de (neighborhood LIKE :neighborhood_6)

azizs
Auteur

c'est bon j'ai trouver

for($index = 1; $index <= 7; $index++) {
    $name = 'neighborhood_' . $index;
    if(!empty($_GET[$name])) {
            $name = '%' . $_GET[$name] . '%';
            if($addOR) {
                $neighborhoods .= ' OR ';
            }
            $neighborhoods .= "neighborhood LIKE $name";
            $addOR = true;
    }
}

Maintenant la requete est bonne mais rien ne s'affiche

azizs
Auteur

C'est faux ce que j'ai fait

azizs
Auteur

J'ai toujour mes requette qui son vide je comprend pas pourquoi :
Voila ce que cela me donne après

echo '<pre>';
//print_r($_GET);
echo 'SELECT * FROM db_product' . $conditions;
echo '</pre>';
SELECT * FROM db_product WHERE (price between :min AND :max) AND (neighborhood LIKE :neighborhood_2) 
AND (good_quality LIKE :good_quality) AND (nb_rooms = :nb_rooms)

La requête ne ce remplie pas je voie pas d'où cela vient.

Bonsoir.

La requête ne ce remplie pas je voie pas d'où cela vient.

C'est normal, étant donné que ton tableau $params est incorrect, tu coup il est faux et ne renvoi par conséquent aucune donnée.
Fais un var_dump de ton tableau $params avant l'exécution de la requête SQL et tu comprendras.

azizs
Auteur

j'ai fait le teste et cela donne

array(5) { ["min"]=> string(7) "59999" ["max"]=> string(8) "500000" ["neighborhood_7"]=> string(13) "%Paris%" ["good_quality"]=> string(9) "%"Moyen"%" ["nb_rooms"]=> string(1) "4" }

peux-tu m'aider a finir avec cela