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 :

Comment faire une recherche avec plusieurs critères générés via la base de données à partir de formulaires ?


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2021
    Messages : 4
    Par défaut Comment faire une recherche avec plusieurs critères générés via la base de données à partir de formulaires ?
    Bonjour,

    J'aimerai faire un site internet qui affiche toute ma base de données quand je ne choisi aucun critère dans mon menu, mais lorsque je choisis un ou plusieurs critères et que j'appuie sur valider, seul les élèments qui correspondent aux critères s'affichent.
    Seulement, j'aimerai que les proposition de choix de critères se générent automatiquement grâce à ma base de données.
    J'ai donc fait cela sur une page que j'ai nommé catalogue.php pour sélectionner les critères que l'on veut voir apparaitre :

    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
    <form method="POST" action="catalogue.php">
                        <fieldset>
                        <?php
                        if(isset($res)){
                        $sql= "SELECT motif FROM catalogue GROUP BY motif";
                        $resul = $bdd->query($sql);
                         while ($ligne = $resul->fetch()) { ?>
                        <input type="radio" name="motif" value="soleil" id="soleil"/>
                          <label for="soleil"> Soleil</label><br>
                          <input type="radio" name="motif" value="lune" id="lune" />
                          <label for="lune"> Lune</label><br>
                          <input type="radio" name="motif" value="etoile" id="etoile" />
                          <label for="etoile"> Étoile</label><br>
                          <input type="radio" name="motif" value="planete" id="planete"/>
                          <label for="planete"> Planéte</label>
                         <?php }} ?>
                        </fieldset>
                        <input type="submit" name="typemotif" value="Valider">
                      </form>
     
                      <form method="POST" action="catalogue.php">
                        <fieldset>
                        <?php
                        if(isset($res)){
                        $sql= "SELECT position FROM catalogue GROUP BY position";
                        $resul = $bdd->query($sql);
                         while ($ligne = $resul->fetch()) { ?>
                        <input type="radio" name="position" value="Droite" id="Droite" />
                          <label for="Droite"> Droite</label><br>
                          <input type="radio" name="position" value="Gauche" id="Gauche" />
                          <label for="Gauche"> Gauche</label>
                         <?php }} ?>
                        </fieldset>
                        <input type="submit" name="typeposition" value="Valider">
                      </form>
     
                     <form method="POST" action="catalogue.php">
                        <fieldset>
                        <?php
                        if(isset($res)){
                        $sql= "SELECT couleur FROM catalogue GROUP BY couleur";
                        $resul = $bdd->query($sql);
                         while ($ligne = $resul->fetch()) { ?>
                        <input type="radio" name="couleur" value="bleu" id="bleu"/>
                          <label for="bleu"> Bleu</label><br>
                          <input type="radio" name="couleur" value="rouge" id="rouge" />
                          <label for="rouge"> Rouge</label><br>
                          <input type="radio" name="couleur" value="vert" id="vert" />
                          <label for="vert"> Vert</label><br>
                          <input type="radio" name="couleur" value="jaune" id="jaune"/>
                          <label for="jaune"> Jaune</label>
                         <?php }} ?>
                        </fieldset>
                        <input type="submit" name="typecouleur" value="Valider">
                      </form>
    Ensuite dans la balise <head> </head> de cette même page (catalogue.php), j'ai écrit ce code pour chercher ces critères dans la base de données:

    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
    <?php
      session_start();
      require_once('BD.php');
      $bdd = getBD();
     
       $req="SELECT * FROM catalogue"
     
        if (isset($_POST['motif'])) {
        $motif = $_SESSION['motif'] = "'" . $_POST['motif'] . "'";
        $req = $req . " AND catalogue.motif = $motif";
      }
     
      if (isset($_POST['position'])) {
        $position = $_SESSION['position'] ="'" . $_POST['position'] . "'";
        $req = $req . " AND catalogue.position = $position";
      }
     
      if (isset($_POST['couleur'])) {
        $couleur= "'" . $_POST['couleur'] . "'";
        $req = $req . " AND catalogue.couleur = $couleur";
      }
     
      $res = $bdd->query($req);
     
     
      ?>
    Avec ce code j'ai toute ma base de données qui s'affiche quand j'arrive sur la page et que je n'ai choisi aucun critère comme je voulais, seulement dès que je coche n'importe quel critère je n'ai plus rien qui s'affiche sur la page.

    Je débute dans la programmation en php, peut être que mes erreurs sont évidentes je suis désolée, mais pourriez vous m'aider svp ?

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 521
    Par défaut
    Bonjour,

    La requête SQL n'est pas ok lorsque tu coches des critères parce que tu as oublié le WHERE.

    Il va falloir prendre en considération les autres critères avant d'ajouter le AND
    Quelque chose comme ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    $req='SELECT * FROM catalogue ';
    if(isset($_POST['motif'])||isset($_POST['position'])||isset($_POST['couleur'])) $req.=" where ";
    if(isset($_POST['motif'])) $req.=" catalogue.motif = $motif";
    if(isset($_POST['position'])){
        $req.=(isset($_POST['motif'])?' and ':'')." catalogue.position = $position";
    }
    if(isset($_POST['couleur'])){
        $req.=(isset($_POST['motif'])||isset($_POST['position'])?' and ':'')." catalogue.couleur = $couleur";
    }
    echo "req:".$req;//vérifier la requête...

    Ou bien :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php 
    $colonnes=[];
    if(isset($_POST['motif'])){ $motif=$_POST['motif']; $colonnes[]=["catalogue.motif",$motif];}
    if(isset($_POST['position'])){ $position=$_POST['position'];$colonnes[]=["catalogue.position",$position];}
    if(isset($_POST['couleur'])){$couleur=$_POST['couleur'];$colonnes[]=["catalogue.couleur",$couleur];}
     
    $req='SELECT * FROM catalogue ';
     
    $req.=(isset($_POST['motif'])||isset($_POST['position'])||isset($_POST['couleur'])?" where ":'')
    .implode('',array_map(function($item,$index){ return ($index>0?" and ":"").$item[0].'='.$item[1];},$colonnes,array_keys($colonnes)));
     
    echo "req:".$req;//vérifier la requête...

    Attention ton code n'est pas protégé contre les injections SQL, il faut utiliser les requêtes préparées.

Discussions similaires

  1. Faire une recherche avec plusieurs critères à partir de formulaires ?
    Par emmanse dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 02/06/2021, 16h33
  2. [PDO] Comment faire une recherche sur plusieurs critères ?
    Par geeka dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/05/2015, 10h19
  3. [AC-2007] Comment faire une requete avec 23 critères "ou" sur colonnes differentes
    Par sebing dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 14/09/2010, 19h33
  4. Comment faire une recherche avec dbLoockupCombo ?
    Par dj_techno dans le forum Composants VCL
    Réponses: 7
    Dernier message: 05/11/2008, 11h40
  5. VBA-E Comment réaliser une recherche avec plusieurs critères ?
    Par Larsen21 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 14/12/2006, 13h43

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