IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Filtrer des résultats PHP


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Par défaut Filtrer des résultats PHP
    Saluut tout le monde

    J'essaye de créer un site internet, et dans l'une des pages je propose à l'utilisateur de faire une recherche dans un fichier xml, ma recherche fonctionne bien, l'affichage aussi, cependant, j'aimerai qu'il puisse filtrer les résultats. Mais je vois pas comment je pourrais faire...
    Je vous montre mon code qui gère une simple recherche, quelqu'un pourrait me dire comment je pourrais faire pour pouvoir filtrer (si l'utilisateur le souhaite) les résultats ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
      function recherche(){
     
     
        $fichier = '../document/chaussures.xml';
        $xml = simplexml_load_file($fichier);
        $toParse = $xml->chaussures;
     
    if (isset ($_POST[''])){
      $recherche=$_POST['recherche'];
    }
    if(isset($_POST['choix'])){
      $choix=$_POST['choix'];
      echo "<h4>Vous avez fait une recherche par : ".$choix."</h4>";
    }
     
     
    if(file_exists($fichier) && !empty($recherche)){
        foreach($xml as $item){
     
            $tableau = array(
              "code" => $item->code,
              "type"=>$item->type,
              "nom" =>$item->nom,
              "couleur" => $item -> couleur,
              );
     
     
      switch ($choix) {
     
        case 'code':
     
          if(strstr(strtolower($tableau["code"]),strtolower($recherche))){
            echo '<p><a href="resultat.php?code='.$tableau["code"].'">'.$tableau["nom"].' - '.$tableau["type"].'</a></p>';
           }
          break;
        case 'type':
          if(strstr(strtolower($tableau["type"]),strtolower($recherche))){
     
            echo '<p><a href="resultat.php?code='.$tableau["code"].'">'.$tableau["nom"].' - '.$tableau["type"].'</a></p>';
     
           }
          break;
          case 'couleur':
            if(strstr(strtolower($tableau["couleur"]),strtolower($recherche))){
     
              echo '<p><a href="resultat.php?code='.$tableau["code"].'">'.$tableau["nom"].' - '.$tableau["type"].'</a></p>';
     
             }
            break;
        default:
     
          if(strstr(strtolower($tableau["nom"]),strtolower($recherche))) {
     
                 echo '<p><a href="resultat.php?code='.$tableau["code"].'">'.$tableau["nom"].' - '.$tableau["type"].'</a></p>';
                  }
     
        break;
    }
           }
         }
       }

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Par défaut
    Oui j'ai lu ce topic, mais la partie qu'elle demande moi je l'ai déja.. Mais une fois toutes les chaussures dont la recherche correspond sont affichées j'aimerais que l'utilisateur puisse filtrer les résultats parce que s'il fait une recherche par type "sneakers" par exemple il y a plus d'une centaine de résultats.. du coup ca serait cool qu'il puisse faire comme une seconde recherche mais à partir des résultats de la première recherche.. Je me suis dis qu'il faudrait que je stocke la premiere recherche dans un nouveau tableau mais ca fonctionne pas..

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    donc, "filtrer"c'est juste faire une recherche multi-critères, non ?

    Et/ou avec des "listes liées" (voir avec Ajax)

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 16
    Par défaut
    J'ai aussi pensé à une recherche multi critère, mais pareil, j'ai pas réussi à la faire..

  6. #6
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Une possibilité parmi tant d'autres. Le code n'est pas forcément optimisé. C'est le principe qui compte.

    Tu cliques sur les filtres et ça filtre automatiquement.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    <!DOCTYPE html>
    <html>
    <head>
    <title>Untitled</title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
    <script>
    function chargeFiltres() {
       $.ajax({            
               type: "POST",            
            url: "test9250b.php",            
            dataType: "html",            
            success: function(msg){                
               $("#criteres").html(msg);    
            }        
      });
    }
    function filtre() {
     var cMarque = "";
     var marque = $( "[id^='marque']:checked" );
     for (var i=0;i<marque.length;i++) {
      var elem = marque[i].value;
      cMarque = elem + ',' + cMarque;
     }
     var cCarburant = "";
     var carburant = $( "[id^='carburant']:checked" );
     for (var i=0;i<carburant.length;i++) {
      var elem = carburant[i].value;
      cCarburant = elem + ',' + cCarburant;
     } 
     $.ajax({            
         type: "POST",            
      url: "test9250c.php",          
      data : {marque:btoa(cMarque),carburant:btoa(cCarburant)},  
      dataType: "html",            
      success: function(msg){                
          $("#donnees").html(msg);    
      },
      error:function (xhr, ajaxOptions, thrownError) {
       alert(xhr.status);
       alert(thrownError);
           }
     
     }); 
     
    }
    $(document).ready(function() {
     chargeFiltres();
     filtre();
    });
    </script>
    </head>
    <body>
    <table align="top">
     <tr align="top">
      <td id="criteres" valign="top"></td>
      <td id="donnees"  valign="top"></td>
     </tr>
    </table>
    </body>
    </html>

    test9250b.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    <?php
    function creeListe($entete,$info,$array) {?>
     <tr>
     <td><?php print $entete;?></td>
     </tr>
     <?php
     foreach($array as $key => $value) {?>
      <tr>
      <td>
      <input type="checkbox" class="<?php print $info;?>" id="<?php print $info.'_'.$key;?>" value="<?php print $value;?>"
      onclick="filtre()" />
      <?php print $value;?>
      </td>
      </tr><?php
     } 
    }
    $fichier   = 'voitures.xml';
    $xml       = simplexml_load_file($fichier);
    $arrMarque = array();
    $arrModele = array();
    $arrCarbur = array();
    // je fais le fainéant en ne testant pas l'existence dans le tableau avant
    foreach($xml as $wature){
        $arrMarque[] = trim($wature->marque);
        $arrModele[] = trim($wature->modele);
        $arrCarbur[] = trim($wature->carburant);
    }
    $arrMarque = array_unique($arrMarque);
    $arrModele = array_unique($arrModele);
    $arrCarbur = array_unique($arrCarbur);
    natsort($arrMarque);
    natsort($arrModele);
    natsort($arrCarbur);
    ?>
    <table id="tableau">
     <tr>
      <td>Filtres</td>
     </tr>
     <?php
     creeListe("Marque","marque",$arrMarque);
     creeListe("Carburant","carburant",$arrCarbur);
     ?>
     </tr>
    </table>
    test9250c.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    <?php
    $marques = "";
    if (isset($_POST['marque'])) {
     $marques = base64_decode($_POST['marque']);
    }
    $carburants =  "";
    if (isset($_POST['carburant'])) {
     $carburants = base64_decode($_POST['carburant']);
    }
    $resultat  = array();
    $fichier   = 'voitures.xml';
    $xml       = simplexml_load_file($fichier);
    foreach($xml as $wature){
        $marque    = trim($wature->marque);
        $modele    = trim($wature->modele);
        $carburant = trim($wature->carburant);
     $okM        = 0;
     if ($marques == "" || strpos($marques,$marque) !== false) {
      $okM++;
     }
     $okC = 0; 
     if ($carburants == "" || strpos($carburants,$carburant) !== false) {
      $okC++;
     }
     if ($okM == 1 && $okC == 1) {
      $resultat[] = array($marque,$modele,$carburant);
     }
    }
    asort($resultat);
    print count($resultat) > 1 ? count($resultat)." trouvés" : count($resultat)." trouvé";
    print "<br/>";
    ?>
    <table>
     <tr>
      <td>Marque</td><td>Modèle</td><td>Carburant</td>
     </tr><?php
     foreach($resultat as $subarray) {
      $marque    = $subarray[0];
      $modele    = $subarray[1];
      $carburant = $subarray[2];?>
      <tr>
       <td><?php print $marque;?></td>
       <td><?php print $modele;?></td>
       <td><?php print $carburant;?></td><?php
     }?>
    </table>

    voitures.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    <items>
     <item><marque> Renault </marque> <modele> Mégane </modele> <carburant> Essence </carburant> </item>
     <item><marque> Renault </marque> <modele> Clio </modele> <carburant> Essence </carburant> </item>
     <item><marque> Renault </marque> <modele> Twingo </modele> <carburant> Essence </carburant> </item>
     <item><marque> Renault </marque> <modele> Captur </modele> <carburant> Essence </carburant> </item>
     <item><marque> Renault </marque> <modele> Kadjar </modele> <carburant> Essence </carburant> </item>
     <item><marque> Renault </marque> <modele> Mégane </modele> <carburant> Diesel </carburant> </item>
     <item><marque> Renault </marque> <modele> Clio </modele> <carburant> Diesel </carburant> </item>
     <item><marque> Renault </marque> <modele> Twingo </modele> <carburant> Diesel </carburant> </item>
     <item><marque> Renault </marque> <modele> Captur </modele> <carburant> Diesel </carburant> </item>
     <item><marque> Renault </marque> <modele> Kadjar </modele> <carburant> Diesel </carburant> </item>
     <item><marque> Peugeot </marque> <modele> 208 </modele> <carburant> Diesel </carburant> </item>
     <item><marque> Peugeot </marque> <modele> 308 </modele> <carburant> Diesel </carburant> </item>
     <item><marque> Peugeot </marque> <modele> 408 </modele> <carburant> Diesel </carburant> </item>
     <item><marque> Peugeot </marque> <modele> 508 </modele> <carburant> Diesel </carburant> </item>
     <item><marque> Peugeot </marque> <modele> 208 </modele> <carburant> Essence </carburant> </item>
     <item><marque> Peugeot </marque> <modele> 308 </modele> <carburant> Essence </carburant> </item>
     <item><marque> Peugeot </marque> <modele> 408 </modele> <carburant> Essence </carburant> </item>
     <item><marque> Peugeot </marque> <modele> 508 </modele> <carburant> Essence </carburant> </item>
     <item><marque> Citroen </marque> <modele> C3 </modele> <carburant> Essence </carburant> </item>
     <item><marque> Citroen </marque> <modele> C4 </modele> <carburant> Essence </carburant> </item>
     <item><marque> Citroen </marque> <modele> C5 </modele> <carburant> Essence </carburant> </item>
     <item><marque> Citroen </marque> <modele> Cactus </modele> <carburant> Essence </carburant> </item>
     <item><marque> Citroen </marque> <modele> C3 </modele> <carburant> Diesel </carburant> </item>
     <item><marque> Citroen </marque> <modele> C4 </modele> <carburant> Diesel </carburant> </item>
     <item><marque> Citroen </marque> <modele> C5 </modele> <carburant> Diesel </carburant> </item>
     <item><marque> Citroen </marque> <modele> Cactus </modele> <carburant> Diesel </carburant> </item>
    </items>
    Nom : 20170513_001jpg.JPG
Affichages : 1772
Taille : 62,4 Ko

    Nom : 20170513_002.JPG
Affichages : 1751
Taille : 29,5 Ko

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/03/2015, 20h59
  2. [SQL-Server] Copier des résultats d'une table en php
    Par Sami37 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 20/05/2012, 15h01
  3. [html PHP] Affichage des résultats à l'horizontal
    Par camzo dans le forum Langage
    Réponses: 13
    Dernier message: 29/12/2006, 18h36
  4. Réponses: 2
    Dernier message: 02/12/2005, 21h21
  5. Réponses: 1
    Dernier message: 02/12/2005, 20h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo