[RESOLU] Recherche multicritère

Mammouth du PHP | 619 Messages

15 mai 2013, 13:27

Re,

quand je lance le script il me sort une requete correcte
SELECT * from Etablissement where nature = '1' and (dpt='75' or dpt='95') order by nomEtablissement

Eléphant du PHP | 167 Messages

15 mai 2013, 13:33

J'ai essayé et également ça marche nikel pourtant je ne comprend pas où il y a une erreur.
Ça ne serait pas un pb de {} pour le foreach ?
Modifié en dernier par NUAGE le 15 mai 2013, 13:38, modifié 1 fois.

Mammouth du PHP | 619 Messages

15 mai 2013, 13:37

post ton code complet sans le séparer (comme tu as sur chaque page) pour voir ou est le probleme

Eléphant du PHP | 167 Messages

15 mai 2013, 13:40

Voilà
      <?php
require("connect.php");
$dsn="mysql:dbname=".BASE.";host=".SERVER;
    try{
      $connexion=new PDO($dsn,USER,PASSWD);
    }
    catch(PDOException $e){
      printf("Échec de la connexion : %s\n", $e->getMessage());
      exit();
    }

$sql="SELECT * from Etablissement order by nomEtablissement";

if(!$connexion->query($sql)) echo "Pb d'accès à la table Etablissement";
else{
        ?>
        <form action="etablissement.php" method="GET">
        <select name="nom">

          <?php
        foreach ($connexion->query($sql) as $row){

           echo "<option value=".$row['idEtablissement'].">".$row['nomEtablissement']."</option>";
           
}
}      
?>

</select>
<input type="submit" value="Rechercher">

</form>

<?php
     $where="";      

if(isset($_POST['dpt']) and !empty($_POST['dpt'])){$where.="dpt = '".$_POST['dpt']."' and ";}
if(isset($_POST['nature']) and !empty($_POST['nature'])){$where.="nature = '".$_POST['nature']."' and ";}
if(isset($_POST['checkbox'])){$where.=implode($_POST['checkbox'])." and";}
if(isset($_POST['checkbox']) and !empty($_POST['checkbox'])){$where.="(dpt='".implode("' or dpt='",$_POST['checkbox'])."') and ";}
if(!empty($where)){$where = 'where '.substr($where, 0, -4);}
;
$sql="SELECT * from Etablissement $where order by nomEtablissement";
if(!$connexion->query($sql)) echo "Pb d'accès à la table Etablissement";
else{
       echo "<table><tr><td>NOM D'ETABLISSEMENT</td></tr>";
     foreach ($connexion->query($sql) as $row)
      ?>
 
<form action="" method="POST">

   <p>Département</p>
 
  <input type="checkbox" name="checkbox[]"  value="75">75
<input type="checkbox" name="checkbox[]"  value="92">92

<input type="checkbox" name="checkbox[]"  value="95">95
<input type="checkbox" name="checkbox[]"      value="98">98

    <p>Nature</p>
  <input type="radio" name="nature"value="1">Université
   <input type="radio" name="nature" value="2">Ecole d'ingénieur
               
              
       <input type="submit" value="Rechercher">  

</form>

<?php
   echo "<br><a href=\"etablissement1.php?idEtablissement=".$row['idEtablissement'].'">'.'<br/>'.$row['nomEtablissement'];
   echo "</table>";    
           
}      
 ?>

</body>
</html>


Mammouth du PHP | 619 Messages

15 mai 2013, 13:50

tu n'as pas efface cette ligne
if(isset($_POST['checkbox'])){$where.=implode($_POST['checkbox'])." and";}
puis ton 2eme form est dans une boucle Oo

si tu veux affiche les <input type="checkbox" name="checkbox[]" value="75">75 selon la requête

test ce code
      <?php
require("connect.php");
$dsn="mysql:dbname=".BASE.";host=".SERVER;
    try{
      $connexion=new PDO($dsn,USER,PASSWD);
    }
    catch(PDOException $e){
      printf("Échec de la connexion : %s\n", $e->getMessage());
      exit();
    }

$sql="SELECT * from Etablissement order by nomEtablissement";

if(!$connexion->query($sql)) echo "Pb d'accès à la table Etablissement";
else{
        ?>
        <form action="etablissement.php" method="GET">
        <select name="nom">

          <?php
        foreach ($connexion->query($sql) as $row){

           echo "<option value=".$row['idEtablissement'].">".$row['nomEtablissement']."</option>";
           
		}
?>
        </select>
        <input type="submit" value="Rechercher">
        
        </form>
<?php
}  
//la parti du haut fonctionne aucun probleme    
?>

<?php
     
$where="";      

if(isset($_POST['dpt']) and !empty($_POST['dpt'])){$where.="dpt = '".$_POST['dpt']."' and ";}
if(isset($_POST['nature']) and !empty($_POST['nature'])){$where.="nature = '".$_POST['nature']."' and ";}
if(isset($_POST['checkbox']) and !empty($_POST['checkbox'])){$where.="(dpt='".implode("' or dpt='",$_POST['checkbox'])."') and ";}
if(!empty($where)){$where = 'where '.substr($where, 0, -4);}
;
$sql="SELECT * from Etablissement $where order by nomEtablissement";
if(!$connexion->query($sql)) echo "Pb d'accès à la table Etablissement";
else{
       echo "<table><tr><td>NOM D'ETABLISSEMENT</td></tr>";
	   echo'<form action="" method="POST">
   <p>Département</p>';
     foreach ($connexion->query($sql) as $row){
		 echo'<input type="checkbox" name="checkbox[]"  value="'.$row['idEtablissement'].'">'.$row['idEtablissement'];		 
	 }
	 ?>

    <p>Nature</p>
  <input type="radio" name="nature"value="1">Université
   <input type="radio" name="nature" value="2">Ecole d'ingénieur
               
              
       <input type="submit" value="Rechercher">  

</form>

<?php
   echo "<br><a href=\"etablissement1.php?idEtablissement=".$row['idEtablissement'].'">'.'<br/>'.$row['nomEtablissement'];
   echo "</table>";    
           
}      
 ?>

</body>
</html>

 

Eléphant du PHP | 167 Messages

15 mai 2013, 14:03

J'ai testé mais pour les chekbox j'ai des valeurs bizarres, je veux que quelques dpts j'ai pas besoin de tout ceux que j'ai dans la base...

Mammouth du PHP | 619 Messages

15 mai 2013, 14:07

Re,

ajoute tes conditions pour la requête ;)

Eléphant du PHP | 167 Messages

15 mai 2013, 14:11

J'ai pas bien compris, je dois les mettre dans le foreach ?
Désolé...

Mammouth du PHP | 619 Messages

15 mai 2013, 14:13

donne moi les conditions que tu veux pas lister

ou se que tu veux vraiment car le code actuelle me semble fonctionne maintenant faut l’améliorer et optimise selon tes besoins mais faut apprendre un peu le php/mysql pour pouvoir avancer sur ton projet :)

Eléphant du PHP | 167 Messages

15 mai 2013, 14:16

Je vois, je ne veux que les départements que j'avais mis en checkbox soit 75, 92, 94, 95, 98 et les autres je ne les veux pas

Mammouth du PHP | 619 Messages

15 mai 2013, 14:24

Ok mais pourquoi le form dans la boucle alors

      <?php
require("connect.php");
$dsn="mysql:dbname=".BASE.";host=".SERVER;
    try{
      $connexion=new PDO($dsn,USER,PASSWD);
    }
    catch(PDOException $e){
      printf("Échec de la connexion : %s\n", $e->getMessage());
      exit();
    }

$sql="SELECT * from Etablissement order by nomEtablissement";

if(!$connexion->query($sql)) echo "Pb d'accès à la table Etablissement";
else{
        ?>
        <form action="etablissement.php" method="GET">
        <select name="nom">

          <?php
        foreach ($connexion->query($sql) as $row){

           echo "<option value=".$row['idEtablissement'].">".$row['nomEtablissement']."</option>";
           
		}
?>
        </select>
        <input type="submit" value="Rechercher">
        
        </form>
<?php
}  
//la parti du haut fonctionne aucun probleme    
?>

<?php
     
$where="";//initialise la variable $where  

if(isset($_POST['dpt']) and !empty($_POST['dpt'])){$where.="dpt = '".$_POST['dpt']."' and ";}//si le champ dpt n'est pas vide alors $where prend cette condition
if(isset($_POST['nature']) and !empty($_POST['nature'])){$where.="nature = '".$_POST['nature']."' and ";}//si le champ nature n'est pas vide alors $where prend cette condition
if(isset($_POST['checkbox']) and !empty($_POST['checkbox'])){$where.="(dpt='".implode("' or dpt='",$_POST['checkbox'])."') and ";}//si le champ checkbox n'est pas vide alors $where prend cette condition
if(!empty($where)){$where = 'where '.substr($where, 0, -4);}//on efface le and et l'espace de fin
;
$sql="SELECT * from Etablissement $where order by nomEtablissement";//on prepart la requete avec ou sans condition
if(!$connexion->query($sql)) echo "Pb d'accès à la table Etablissement";
else{
	//on affiche le formulaire
		echo'
   <form action="" method="POST">

   <p>Département</p>
 
  <input type="checkbox" name="checkbox[]"  value="75">75
<input type="checkbox" name="checkbox[]"  value="92">92

<input type="checkbox" name="checkbox[]"  value="95">95
<input type="checkbox" name="checkbox[]"      value="98">98

    <p>Nature</p>
  <input type="radio" name="nature"value="1">Université
   <input type="radio" name="nature" value="2">Ecole d\'ingénieur
               
              
       <input type="submit" value="Rechercher">  

</form>
   '; 
       echo "<table><tr><td>NOM D'ETABLISSEMENT</td></tr>";//on prepart l'affichage des donnee
     foreach ($connexion->query($sql) as $row){//on boucle sur la requete

  		 echo "<br><a href=\"etablissement1.php?idEtablissement=".$row['idEtablissement'].'">'.'<br/>'.$row['nomEtablissement'];//on liste les resultats
	 }
   echo "</table>";    
     
}      
 ?>

</body>
</html>

 

Eléphant du PHP | 167 Messages

15 mai 2013, 14:36

Juste une dernière question, tout les établissements sont affichés dès le début, y-a-t-il un moyen de faire afficher les résultats une fois que j'ai fais ma sélection ?

Mammouth du PHP | 619 Messages

15 mai 2013, 14:47

Re,
      <?php
require("connect.php");
$dsn="mysql:dbname=".BASE.";host=".SERVER;
    try{
      $connexion=new PDO($dsn,USER,PASSWD);
    }
    catch(PDOException $e){
      printf("Échec de la connexion : %s\n", $e->getMessage());
      exit();
    }

$sql="SELECT * from Etablissement order by nomEtablissement";

if(!$connexion->query($sql)) echo "Pb d'accès à la table Etablissement";
else{
        ?>
        <form action="etablissement.php" method="GET">
        <select name="nom">

          <?php
        foreach ($connexion->query($sql) as $row){

           echo "<option value=".$row['idEtablissement'].">".$row['nomEtablissement']."</option>";
           
		}
?>
        </select>
        <input type="submit" value="Rechercher">
        
        </form>
<?php
}  
//la parti du haut fonctionne aucun probleme    
?>

<?php
  
$where="";//initialise la variable $where  

if(isset($_POST['dpt']) and !empty($_POST['dpt'])){$where.="dpt = '".$_POST['dpt']."' and ";}//si le champ dpt n'est pas vide alors $where prend cette condition
if(isset($_POST['nature']) and !empty($_POST['nature'])){$where.="nature = '".$_POST['nature']."' and ";}//si le champ nature n'est pas vide alors $where prend cette condition
if(isset($_POST['checkbox']) and !empty($_POST['checkbox'])){$where.="(dpt='".implode("' or dpt='",$_POST['checkbox'])."') and ";}//si le champ checkbox n'est pas vide alors $where prend cette condition
if(!empty($where)){$where = 'where '.substr($where, 0, -4);}//on efface le and et l'espace de fin
;
$sql="SELECT * from Etablissement $where order by nomEtablissement";//on prepart la requete avec ou sans condition
if(!$connexion->query($sql)) echo "Pb d'accès à la table Etablissement";
else{
	//on affiche le formulaire
		echo'
   <form action="" method="POST">

   <p>Département</p>
 
  <input type="checkbox" name="checkbox[]"  value="75">75
<input type="checkbox" name="checkbox[]"  value="92">92

<input type="checkbox" name="checkbox[]"  value="95">95
<input type="checkbox" name="checkbox[]"      value="98">98

    <p>Nature</p>
  <input type="radio" name="nature"value="1">Université
   <input type="radio" name="nature" value="2">Ecole d\'ingénieur
               
              
       <input type="submit" name="valide" value="Rechercher">  

</form>
   '; 
   if(isset($_POST['valide'])){  
     echo "<table><tr><td>NOM D'ETABLISSEMENT</td></tr>";//on prepart l'affichage des donnee
     foreach ($connexion->query($sql) as $row){//on boucle sur la requete

  		 echo "<br><a href=\"etablissement1.php?idEtablissement=".$row['idEtablissement'].'">'.'<br/>'.$row['nomEtablissement'];//on liste les resultats
	 }
   echo "</table>";  
   }
     
}      
 ?>

</body>
</html>

 

Eléphant du PHP | 167 Messages

15 mai 2013, 15:13

Merci beaucoup pour ton aide :)

Mammouth du PHP | 619 Messages

15 mai 2013, 15:14

Re,

pas de souci mais essaie de regarder quelque tuto sur php car sinon tu ne va jamais pouvoir avancer seul :p