PHP Filtrer les lignes d'un tableau issu d'une base de données

clem-au -  
 clem-au -
Bonjour à tous,

J'ai pour but de réaliser un tableau dont les informations sont issues d'une base de donnée. Je voudrais pouvoir appliquer des filtres textuels sur chaque colonne.

Pour commencer j'ai créé un tableau de test qui contient deux colonnes : "titre" et "contenu". Pour chaque colonne un champ de recherche textuel pour l'utilisateur à été créé.
Le but est de n'afficher que les lignes qui contiennent le texte que l'utilisateur à entré dans le champ de recherche "titre", dans celui de "contenu" ou de combiner les deux recherches.

Le code que j'ai déjà réalisé me permet de le faire mais il me reste quelques problèmes :

- L'utilisateur doit taper tout le texte que contient case pour que le filtre affiche la ligne du tableau correspondante. Par exemple si différentes lignes de la colonne titre contiennent : "titre1" "titre2" et "titre3" je voudrais que lorsque l'utilisateur cherche "titre" les trois lignes soient affichées puisqu'elles contiennent toutes les trois cette chaine de caractères.

- Deuxième problème à chaque fois que je fais une nouvelle recherche, tous les champs sont réinitialisés. Alors que si il cherche un titre et valide sa recherche j'aimerai qu'il soit possible qu'il l'affine en tapant un contenu dans l'autre champ sans que le filtre de "titre" soit supprimé.

Pensez-vous que c'est possible ? Si oui quelqu'un a-t-il une idée de comment réaliser ce fonctionnement ?

Si je n'ai pas été assez claire je peux vous donner plus de précisions sur mon code ou ce que j'en attends.

Merci d'avance

5 réponses

  1. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Bonjour,

    Puisque tu as déjà presque résolu ton problème, le plus simple serait que tu nous donnes ton code, comme ça on peut te dire quels sont les points à modifier, plutôt que de réinventer la roue :)

    N'oublie pas d'utiliser les balises « code » du forum pour coller ton code.

    Xavier
    0
  2. DelNC Messages postés 2360 Statut Membre 2 010
     
    Bonjour clem-au

    pour répondre à votre premier problème
    Votre requête SQL doit resembler à ceci

    SELECT titre
    FROM VotreTable
    WHERE titre LIKE '%$titreDonne%'

    NB les %% utilisés servent à sélectionner les lignes contenant la variable titreDonne au minimum.
    Il peut y avoir autre chose avant et/ou après.
    0
  3. clem-au
     
    Mon code est :

    <?php

    require ('fonctions.php');

    //connexion à la base de données (fonction contenue dans 'fonctions.php'
    connexionDB();

    ?>

    <form method="post" action="affichageTableauProvence.php">

    <input type="text" name="titre" placeholder="Titre ?" value '$titre' style="height:30px; width: 100px;"/>
    <input type="text" name="contenu" placeholder="contenu ?" style="height:30px; width: 100px;"/>
    <input type="submit" value="chercher" style="margin-left:20px; width:150px;">

    <?php

    $titre = 0;
    $contenu =0;

    if($_POST['titre']!=null)
    {
    $titre=$_POST['titre'];
    }
    if($_POST['contenu']!=null)
    {
    $contenu=$_POST['contenu'];
    }

    // requête SQL qui filtre les enregistrements

    if($titre!=null)
    {
    if($contenu!=null)
    {
    $select = 'SELECT * FROM prod_bex WHERE titre="%'.$titre.'%" AND contenu="%'.$contenu.'%"';
    $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
    }
    else
    {
    $select = 'SELECT * FROM prod_bex WHERE titre="%'.$titre.'%"';
    $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
    }
    }
    else
    {
    if($contenu!=null)
    {
    $select = 'SELECT * FROM prod_bex WHERE contenu LIKE "%'.$contenu.'%"';
    $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
    }
    else
    {
    $select = 'SELECT * FROM prod_bex';
    $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
    }
    }

    affichage($result); // cette fontion est dans le fichier "fontions.php" inclu au début du code

    ?>
    </body>
    </html>
    0
  4. clem-au
     
    Mon code est :

    <html>
    <body>

    <?php

    require ('fonctions.php');

    //connexion à la base de données (fonction contenue dans 'fonctions.php'
    connexionDB();
    ?>

    <form method="post" action="affichageTableauProvence.php">

    <input type="text" name="titre" placeholder="Titre ?" value '$titre' style="height:30px; width: 100px;"/>
    <input type="text" name="contenu" placeholder="contenu ?" style="height:30px; width: 100px;"/>
    <input type="submit" value="chercher" style="margin-left:20px; width:150px;">

    <?php

    $titre = 0;
    $contenu =0;

    if($_POST['titre']!=null)
    {
    $titre=$_POST['titre'];
    }
    if($_POST['contenu']!=null)
    {
    $contenu=$_POST['contenu'];
    }

    // requête SQL qui filtre les enregistrements

    if($titre!=null)
    {
    if($contenu!=null)
    {
    $select = 'SELECT * FROM prod_bex WHERE titre LIKE "%'.$titre.'%" AND contenu LIKE "%'.$contenu.'%"';
    $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
    }
    else
    {
    $select = 'SELECT * FROM prod_bex WHERE titre LIKE "%'.$titre.'%"';
    $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
    }
    }
    else
    {
    if($contenu!=null)
    {
    $select = 'SELECT * FROM prod_bex WHERE contenu LIKE "%'.$contenu.'%"';
    $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
    }
    else
    {
    $select = 'SELECT * FROM prod_bex';
    $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
    }
    }

    affichage($result);

    ?>
    </body>
    </html>
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. DelNC Messages postés 2360 Statut Membre 2 010
     
    Dans le formulaire j'ai corrigé une erreur, il manquait la balise de fin du formulaire

    <form method="post" action="affichageTableauProvence.php">
    <input type="text" name="titre" placeholder="Titre ?" style="height:30px; width: 100px;"/>

    <input type="text" name="contenu" placeholder="contenu ?" style="height:30px; width: 100px;"/>

    <input type="submit" value="chercher" style="margin-left:20px; width:150px;">
    </form>


    Dans la page où vous récupérez les données (soit affichageTableauProvence.php)
    if(isset($_REQUEST["titre"   ])) {$titre= $_REQUEST["titre"    ];}
    else {$titre= "";}
    if(isset($_REQUEST["contenu" ])) {$contenu= $_REQUEST["contenu" ];}
    else {$contenu= "";}


    Pour la requête SQL la syntaxe est
    <?php
    if($titre !=null){
    if($contenu!=null){
    $query = "SELECT *) ";
    $query .= "FROM prod_bex";
    $query .= "WHERE titre LIKE '%$titre%'
    $query .= "AND contenu LIKE '%$contenu%'
    $query .= ";";
    $result = execute_query($query);
    display_table_result($result);
    }
    else{
    $query = "SELECT *) ";
    $query .= "FROM prod_bex";
    $query .= "WHERE titre LIKE '%$titre%'
    $query .= ";";
    $result = execute_query($query);
    display_table_result($result);
    }
    ...
    }
    ?>


    Ici, le code pour l'affichage du résultat
    <?php
    function display_table_result($result) {
    echo "<table border=1>\n";
    //HEADER ROW
    echo "<tr>\n";
    echo " <th width=150> Colonne1</th>\n";
    echo " <th width=200> Colonne2</th>\n";
    ...
    echo "</tr>\n";
    //DATA ROWS
    while($row = mysql_fetch_array($result)) {
    echo "<tr>\n";
    echo " <td class=\"center\">" . $row[0] . "</td>\n";
    echo " <td class=\"center\">" . $row[1] . "</td>\n";
    ...
    echo "</tr>\n";
    }//end while
    echo "</table>\n";
    }//end function
    ?>
    0
    1. clem-au
       
      Je vous remercie d'avoir pris le temps de me répondre.
      Mais quand je lance le code il plante, a priori c'est au niveau des requêtes
      0