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

  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 : 1775
Taille : 62,4 Ko

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

  7. #7
    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
    C'est hyper gentil de ta part badaze ! C'est exactement ce que je voulais faire ! J'ai bien compris ton code sauf la partie JavaScript.. je m'y connais pas trop trop dessus, elle gère quoi exactement ?

  8. #8
    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
    Voici quelques commentaires.

    Code html : 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
     
    function filtre() {
     var cMarque = "";
     // Prend tous les éléments dont l'id commence par "marque" et qui sont cochés
     var marque = $( "[id^='marque']:checked" );
     for (var i=0;i<marque.length;i++) {
      var elem = marque[i].value;
      // Constitue une liste des valeurs des éléments cochés
      cMarque = elem + ',' + cMarque;
     }
     var cCarburant = "";
     // comme ci-dessus mais pour le carburant
     var carburant = $( "[id^='carburant']:checked" );
     for (var i=0;i<carburant.length;i++) {
      var elem = carburant[i].value;
      cCarburant = elem + ',' + cCarburant;
     } 
     $.ajax({            
         // appel de la page qui constitue le tableau en passant les listes de valeurs converties en base64
      type: "POST",            
      url: "test9250c.php",          
      data : {marque:btoa(cMarque),carburant:btoa(cCarburant)},  
      dataType: "html",            
      success: function(msg){ 
       // remplit le td dont l'id est "donnees" avec le print fait dans test9250c.php
          $("#donnees").html(msg);    
      },
      error:function (xhr, ajaxOptions, thrownError) {
       alert(xhr.status);
       alert(thrownError);
           }
     
     }); 
     
    }
    // Code exécuté quand la page est entièrement chargée.
    $(document).ready(function() {
     chargeFiltres();
     filtre();
    });

  9. #9
    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
    Merci pour ton aide et ton explication !
    Juste par curiosité, il aurait été possible en php simple ? J'entends par là sans JavaScript ?

  10. #10
    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
    Avec rechargement de la page oui.
    Ou bien avec un iframe sans recharger la page.

  11. #11
    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
    Le rechargement de la page ne me dérange pas.. Tu pourrais me dire comment faire ? Le temps que je me documente bien sur le JavaScript et que je le maîtrise..?

  12. #12
    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
    Mais ça dérangera peut-être les utilisateurs !
    Contrairement à ce qu'on pourrait penser c'est plus compliqué qu'avec le js puisqu'il faut tenir compte des cases cochées quand on recharge la page donc avoir un formulaire, etc...

  13. #13
    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
    Le site que je suis entrain de faire n'est pas pour le "grand public" si je puis dire, je fais ca juste pour m'entraîner, j'apprends petit à petit, comme je suis en autodidacte c'est un peu compliquer xD
    Je me doute qu'avec le JS c'est beaucoup plus simple, il faut vraiment que je m'y mette mais je voulais d'abord bien maîtriser le php pour ca

  14. #14
    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
    Il faut étudier les 2. PHP n'est plus suffisant comme il a pu l'être il y a 15 ans.

  15. #15
    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 c'est ce que j'ai pu comprendre, mais je préfère d'abord bien maîtriser le php puis m'attaquer au JS, plutôt que de un peu de php puis un peu de JS pour ensuite revenir au php
    J'ai d'abord commencé avec le HTML5 et CSS3, une fois bien maîtriser je suis passé au php, je veux pas brûler d'étapes comme ca je suis sûr de tout bien maîtriser

  16. #16
    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 essayé de faire une recherche multi-critère sans le JS, mais le problème c'est que si l'utilisateur écrit quelque chose dans plusieurs formulaires, seul le dernier formulaire est pris en compte, et la recherche se fait uniquement dans ce dernier formulaire..
    Je vous mets le code
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    function recherche(){
     
     
        $fichier = '../document/chaussures.xml';
        $xml = simplexml_load_file($fichier);
        $toParse = $xml->chaussures;
     
    if (isset ($_POST['nom'])){
      $nom=$_POST['nom'];
      echo "<h4>Vous avez fait une recherche par : ".$nom."</h4>";
     
     
    }
    if (isset ($_POST['type'])){
      $academie=$_POST['type'];
      echo "<h4>Vous avez fait une recherche par : ".$type."</h4>";
     
     
    }
     
    if (isset ($_POST['couleur'])){
      $departement=$_POST['couleur'];
      echo "<h4>Vous avez fait une recherche par : ".$couleur."</h4>";
     
    }
     
    if (isset ($_POST['code'])){
      $type=$_POST['code'];
      echo "<h4>Vous avez fait une recherche par : ".$code."</h4>";
     
    }
    $tab_nom=array();
    $tab_code=array();
    $tab_couleur=array();
    $tab_type=array();
    $tab_res=array();
     
     
    if(file_exists($fichier) && (!empty($nom) || !empty($type) || !empty($couleur) || !empty($code))){
        foreach($xml as $item){
     
            $tableau = array(
              "nom" => $item->nom,
              "couleur" =>$item->couleur,
              "type"=>$item->type,
              "code"=>$item->code,
     
     
              );
            $incrementer = false;
            if(isset($nom) && $nom!=''){
              if(strstr(strtolower($tableau["nom"]),strtolower($nom))){
                $incrementer = true;
              }
              else{
                $incrementer = false;
              }
            }
     if(isset($nom) && $nom!=''){
              if(strstr(strtolower($tableau["nom"]),strtolower($nom))){
                $incrementer = true;
              }
              else{
                $incrementer = false;
              }
            }
     
            if(isset($code) && $code!=''){
              if(strstr(strtolower($tableau["code"]),strtolower($code))){
                $incrementer=true;
     
              }
              else{
                $incrementer = false;
              }
     
            }
            if(isset($type)&& $type!=''){
              if(strstr(strtolower($tableau["type"]),strtolower($type))){
                $incrementer=true;
              }
              else{
                $incrementer = false;
              }
     
            }
     
     
            }
            if($incrementer == true){
     
              $tab_res[$tableau["code"].""]=$tableau["nom"];
     
            }
     
           }
         }
     
         foreach($tab_res as $key => $value){
     
           echo '<p><a href="resultat.php?code='.$key.'">'.$value.'</a></p>';
     
         }
     
       }

  17. #17
    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
    Je ne comprends pas tes plusieurs forms ?
    Pour les critères un seul suffit. Par contre il faut gérer les cas où plusieurs valeurs sont sélectionnées pour un critère donné. Il faut que tu donnes le même "name" aux éléments d'un même critère (si mes souvenirs sont bons).

    Un conseil.

    Tu as écrit :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (isset ($_POST['nom'])){
      $nom=$_POST['nom'];
      echo "<h4>Vous avez fait une recherche par : ".$nom."</h4>";
    }

    puis plus loin tu testes si isset($nom)

    Ce serait plus simple de faire :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $nom = "";
    if (isset ($_POST['nom'])){
      $nom=$_POST['nom'];
      echo "<h4>Vous avez fait une recherche par : ".$nom."</h4>";
    }

    Comme ça tu n'as plus à te soucier si la variable est définie ou pas.

  18. #18
    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
    Citation Envoyé par badaze Voir le message
    Je ne comprends pas tes plusieurs forms ?
    Pour les critères un seul suffit. Par contre il faut gérer les cas où plusieurs valeurs sont sélectionnées pour un critère donné. Il faut que tu donnes le même "name" aux éléments d'un même critère (si mes souvenirs sont bons).
    Justement, c'est avec ca que j'ai un soucis.. Il ne prend en compte que le dernier champs.. Malgré le fait qu'il y en ai plusieurs d'entré, et je vois pas comment faire..
    Mon form est le suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      function formulaire(){
         ?>
     
        <form method="post" action="chaussures.php">
     
                <input type="text" name="nom" value="nom"/>
                <input type="text" name="couleur" value="couleur"/>
                <input type="text" name="type" value="type"/>
                <input type="submit" name="sub" value="Valider" />
              </form>

  19. #19
    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
    Dans la page chaussures.php fait un var_dump($_POST);

  20. #20
    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
    Sans la recherche ca m'affiche une array vide (normal)
    Avec une recherche simple ca m'affiche :

    C:\wamp64\www\php\chaussures.php:23:
    array (size=5)
    'nom' => string 'converse' (length=6)
    'couleur' => string '' (length=0)
    'type' => string '' (length=0)
    'sub' => string 'Valider' (length=7)

    C'est donc bon

    Par contre quand je fais la recherche multicritère :
    C:\wamp64\www\php\chaussures.php:23:
    array (size=5)
    'nom' => string 'converse' (length=6)
    'couleur' => string 'blanche' (length=8)
    'type' => string '' (length=0)
    'sub' => string 'Valider' (length=7)

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