Page 1 sur 3

Recherche multicritère

Posté : 14 mai 2013, 15:53
par NUAGE
Bonjour,

J'ai une table Etablissement sur laquelle je voudrais faire une sélection selon multicritère.
C'est-à-dire, je fais d'abord une recherche de mon établissement, sinon je ne le trouve pas dans ma liste déroulante, je coche selon
d'autre critère, par exemple le critère du département et de la nature de l'établissement.
J'ai déjà un fichier qui me sélectionne les dpts mais maintenant je veux pouvoir sélectionner suivants plusieurs critères et je ne vois pas comment je peux m'en servir.
Voici mon code avec des checkbox :

<?php
require("connect.php");
// pour oracle: $dsn="oci:dbname=//serveur:1521/mydb
$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>




<form>
  <input type="checkbox" name="dpt">Département<br>
  

</form>
  <form>
  <input type="checkbox" name="nature">Nature<br>
   <select name="nature"> 
                <option value="1">...</option>
                <option value="2">...</option>
                <option value="3">...</option>
               
                </select>
       
  <input 
  

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

</body>
</html>
Merci de m'aider

Re: Recherche multicritère

Posté : 14 mai 2013, 15:59
par ghost5922

Re: Recherche multicritère

Posté : 14 mai 2013, 16:15
par NUAGE
Merci ghost5922
Ce code remplace quelle partie de mon code, je ne vois pas où je dois modifier...

Re: Recherche multicritère

Posté : 14 mai 2013, 16:19
par ghost5922
Bonjour,

juste avant le select

ce code permet de voir quel champ sont envoyer en post pour derriere initialise le where

donc je pense que du dois le traite avant

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

pour que ta requete devienne

if



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

Re: Recherche multicritère

Posté : 14 mai 2013, 16:25
par NUAGE
C'est ce que j'ai fais mais que devienne les input et checkbox, rien n'est relié finalement...

<?php
require("connect.php");
// pour oracle: $dsn="oci:dbname=//serveur:1521/mydb
$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();
    }
     $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(!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{
        ?>
        <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>




<form>
  <input type="checkbox" name="dpt">Département<br>
  

</form>
  <form>
  <input type="checkbox" name="nature">Nature<br>
   <select name="nature"> 
                <option value="1">...</option>
                <option value="2">...</option>
                <option value="3">...</option>
               
                </select>
       
  <input 
  

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

</body>
</html>

Re: Recherche multicritère

Posté : 14 mai 2013, 16:33
par ghost5922
je ne comprend pas tu veux que lorque tu valide filtre les résultats ?

dans tes form tu mets aucun action donc c'est du GET et non post :)

Re: Recherche multicritère

Posté : 14 mai 2013, 16:42
par NUAGE
Ce que je veux pouvoir faire c'est par exemple sélectionner toutes les établissements qui ont pour "nature" école d'ingénieur et qui ont pour département 75 en cochant sur des cases et choisir la nature dans une liste déroulante. J'espère que c'est clair :?

Re: Recherche multicritère

Posté : 14 mai 2013, 19:44
par ghost5922
Oui mais vous avez plusieurs formulaire

voila

j'ai pas modifie le php
<?php
require("connect.php");
// pour oracle: $dsn="oci:dbname=//serveur:1521/mydb
$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();
    }
     $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(!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{
        ?>
        <form action="etablissement.php" method="GET">
        <select name="nom">
                <?php
        foreach ($connexion->query($sql) as $row){

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


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

</form>




<form action="" method="post">
  <input type="checkbox" name="dpt">Département<br>

  <input type="checkbox" name="nature">Nature<br>
   <select name="nature"> 
                <option value="1">...</option>
                <option value="2">...</option>
                <option value="3">...</option>
               
                </select>
       
<input type="submit" value="Rechercher">
</form>
  

</body>
</html>
 
dans les formulaire
le premier qui va envoyer vers etablissement.php
le second va envoyer sur la même page mais avec les critère en plus

Re: Recherche multicritère

Posté : 15 mai 2013, 10:41
par NUAGE
Merci ghost5922, ça marche mais je voudrais pouvoir utiliser mon fichier selectiondpt.php qui me permettais de sélectionner plusieurs dpts aussi.

Voici mon code :

<?php
require("connect.php");
// pour oracle: $dsn="oci:dbname=//serveur:1521/mydb
$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();
    }
     $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(!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{
        ?>
        <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>




<form action="" method="POST">

   <p>Département</p>
 <form action="selectiondpt.php">
  <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
</form>
    <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>

 
</body>
</html>

Re: Recherche multicritère

Posté : 15 mai 2013, 11:02
par ghost5922
Bonjour,

c'est le même principe tu fais un

if(isset($_POST['checkbox'])){
// ici tu utilise un implode pour preparer la requete
}

http://php.net/manual/fr/function.implode.php

Re: Recherche multicritère

Posté : 15 mai 2013, 11:05
par ghost5922
if(isset($_POST['checkbox'])){$where.=implode($_POST['checkbox'])." and";}

Re: Recherche multicritère

Posté : 15 mai 2013, 11:16
par NUAGE
J'ai fais quelques modifications, c'est-à-dire que je ne veux pas que la sélection se fasse dans la liste déroulante mais que les résultats s'affichent dans un tableau en dessous. Voilà mon 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
     $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(!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>

Re: Recherche multicritère

Posté : 15 mai 2013, 11:23
par ghost5922
j'ai peux d'etre fais une erreur
if(isset($_POST['checkbox'])){$where.=implode($_POST['checkbox']." and ");}
apres faut tester et revenir avec un problème :)

Re: Recherche multicritère

Posté : 15 mai 2013, 11:26
par NUAGE
J'ai testé mais j'ai ce warning Warning: implode() [<a href='function.implode'>function.implode</a>]: Argument must be an array in C
Et puis, mon autre problème c'est que j'ai le dernier établissement d'affiché :?

Re: Recherche multicritère

Posté : 15 mai 2013, 11:30
par ghost5922
voila au moins il a une erreur ;)

if(isset($_POST['checkbox']) and !empty($_POST['checkbox'])){$where.=implode($_POST['checkbox']," and ")." and ";}