[RESOLU] Recherche multicritère

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Recherche multicritère

Re: Recherche multicritère

par ghost5922 » 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

Re: Recherche multicritère

par NUAGE » 15 mai 2013, 15:13

Merci beaucoup pour ton aide :)

Re: Recherche multicritère

par ghost5922 » 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>

 

Re: Recherche multicritère

par NUAGE » 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 ?

Re: Recherche multicritère

par ghost5922 » 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>

 

Re: Recherche multicritère

par NUAGE » 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

Re: Recherche multicritère

par ghost5922 » 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 :)

Re: Recherche multicritère

par NUAGE » 15 mai 2013, 14:11

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

Re: Recherche multicritère

par ghost5922 » 15 mai 2013, 14:07

Re,

ajoute tes conditions pour la requête ;)

Re: Recherche multicritère

par NUAGE » 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...

Re: Recherche multicritère

par ghost5922 » 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>

 

Re: Recherche multicritère

par NUAGE » 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>

Re: Recherche multicritère

par ghost5922 » 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

Re: Recherche multicritère

par NUAGE » 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 ?

Re: Recherche multicritère

par ghost5922 » 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