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

Langage PHP Discussion :

faire un filtre multicriteres


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 184
    Points : 65
    Points
    65
    Par défaut faire un filtre multicriteres
    bonjour,

    j' ai un petit soucis qui doit paraitre insignifiant mais bon !!!!!
    j'ai établi un filtre a l'aide de liste déroulante qui fonctionne a peu de chose près, ce qu'il me manque c'est de pouvoir afficher tout mon tableau quand ma valeur de "Endroits" a la valeur de "toutes" et "Etats" a la valeur de "tous".

    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
    <td height="30"><div align="center">
                                  <strong>ENDROIT</strong>                              
                                    <select name="Endroits">
    				  <option value="TOUTES">Toutes</option>
                                      <option value="CUISINE">cuisine</option>
                                      <option value="SALLE">salle</option>
                                      <option value="SALLE DE BAIN">salle de bain</option>
     
                                    </select>
                                </div></td>
                            </tr>
     
                            <tr>
                              <td height="30"><div align="center">
                                  <strong>ETAT</strong>
                                    <select name="Etats">
                                      <option value="tous"> Tous  </option>
                                      <option value="neuf"> neuf </option>
                                      <option value="usage"> usage </option>
                                    </select>
    				<input type="submit" value="Envoyer" />
                                </div></td>
                            </tr>
     
                        </div></td>*
     
    $Endroits = ( !empty($_POST['Endroits'])) ? $_POST['Endroits'] : '';
    $Etats = ( !empty($_POST['Etats'])) ? $_POST['Etats'] : '';
     $sql=$pdo->query( "SELECT * FROM table WHERE ETATS = '".$Etats."' AND ENDROITS= '".$Endroits."'");
     while($Resultat =$sql->fetch())
    .....
    merci pour votre aide

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Alerte sécurité : Il faut utiliser une requête préparée quand tu passes des données externes.

    Pour le reste, il suffit de définir explicitement dans ton code ce que signifie "tous".

    Au passage ça n'a pas de sens de remplacer le valeur du formulaire par une chaine vide si jamais elle n'était pas fournie.

    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
    if (!empty($_POST['Endroits']) && !empty($_POST['Etats'])) {
    if ($_POST['Endroits'] != 'TOUTES') {
       $where[] = 'ENDROITS = ?';
       $param[] = $_POST['Endroits'];
    }
     
    if ($_POST['Etats'] != 'tous') {
       $where[] = 'ETATS = ?';
       $param[] = $_POST['Etats'];
    }
     
    $sql = 'SELECT * FROM table';
    if (isset($where)) {
       $sql .= ' WHERE ' . implode(' AND ', $where);
    }
     
    $sth = $pdo->prepare($sql);
    $sth->execute($param);
    while($sth =$sql->fetch(PDO::FETCH_ASSOC))
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 184
    Points : 65
    Points
    65
    Par défaut
    bonsoir sabotage,
    après applications de tes lignes de codes je me retrouve avec cette ligne d'erreur.
    Fatal error: Call to a member function fetch() on a non-object
    de plus, pourrais tu m'expliquer ce passage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (isset($where)) {
       $sql .= ' WHERE ' . implode(' AND ', $where);
    merci d'avance

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    oups je me suis emmêlé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($row = $sth->fetch(PDO::FETCH_ASSOC))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql .= ' WHERE ' . implode(' AND ', $where);
    On rassemble tous les éléments mis dans $where séparés par AND
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 184
    Points : 65
    Points
    65
    Par défaut
    Merci pour l'éclaircissement ,d'autre part je n'arrive pas à afficher tout mon tableau malgré que dans mes listes déroulantes sont sélectionnée toutes et tous

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Contrôle $_POST :
    et le $where obtenu :
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 184
    Points : 65
    Points
    65
    Par défaut
    m'affiche bien mes valeurs toutes et tous, par contre en ce qui concerne il m'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0 => string 'ENDROITS = ?'

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 184
    Points : 65
    Points
    65
    Par défaut
    j'ai voulu rajouter cela mais rien ne s'affiche quand les valeurs sont en tous

    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
    $Endroits = ( !empty($_POST['Endroits'])) ? $_POST['Endroits'] : '';
    $Etats = ( !empty($_POST['Etats'])) ? $_POST['Etats'] : '';
    if (!empty($_POST['Endroits']) && !empty($_POST['Etats'])) {
    if ($_POST['Endroits'] != 'TOUTES') {
       $where[] = 'ENDROITS = ?';
       $param[] = $_POST['Endroits'];
    }
     
    if ($_POST['Etats'] != 'tous') {
       $where[] = 'ETATS = ?';
       $param[] = $_POST['Etats'];
    }
     
    $sql = 'SELECT * FROM table';
    if (isset($where)) {
       $sql .= ' WHERE ' . implode(' AND ', $where);
    }
     if (($Endroits == 'TOUTES') && ($Etats == 'Tous')) {
    $sql = ("SELECT * FROM table"); 
    }
    $sth = $pdo->prepare($sql);
    $sth->execute($param);
    while($resul =$sth->fetch(PDO::FETCH_ASSOC))

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Comme je t'ai déjà dit, ça n'a pas de sens ton histoire de mettre des chaines vide.

    C'est "TOUTES" comme dans ton code ou début ou "toutes" comme tu dis maintenant.
    Si tu nous avais montré $_POST au lieu de dire "il est bon" ...
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 184
    Points : 65
    Points
    65
    Par défaut
    voici le var_dump($_POST);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Endroits' => string 'TOUTES' (length=6)
      'Etats' => string 'Tous' (length=4)
    concernant la synthaxe de TOUTES et toutes ,je n'était pas passé en majuscule lors de l'écriture.
    pour les chaines vides, faut il dans ce cas la que je rajoute en implode tous mes champs du tableau?
    ID, CARACTERISTIQUE, PRODUIT,ENDROITS,ETATS,DISPONIBLE

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Donc c'est "Tous" et pas "tous" comme dans ton premier code.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 184
    Points : 65
    Points
    65
    Par défaut
    oui effectiveement pour ce cas de figure

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire un filtre sur la date
    Par Hatchepsout dans le forum Windows Forms
    Réponses: 8
    Dernier message: 29/06/2007, 14h26
  2. [VBA-Excel] Faire un filtre dans un tableau croisé dynamique
    Par SFrane dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/11/2006, 15h05
  3. [C#][Débutant] Comment faire un filtre dans un datagriview
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/05/2006, 18h13
  4. Faire un filtre automatique comme dans Excel
    Par ptitdav dans le forum Access
    Réponses: 2
    Dernier message: 19/09/2005, 13h29
  5. Faire un filtre sur un DBGRID
    Par richard038 dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/08/2005, 17h18

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