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

Fermé
clem-au - Modifié par clem-au le 10/07/2015 à 10:01
 clem-au - 10 juil. 2015 à 14:10
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

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
10 juil. 2015 à 10:06
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
DelNC Messages postés 2234 Date d'inscription samedi 25 octobre 2014 Statut Membre Dernière intervention 22 février 2020 2 002
10 juil. 2015 à 10:14
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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DelNC Messages postés 2234 Date d'inscription samedi 25 octobre 2014 Statut Membre Dernière intervention 22 février 2020 2 002
10 juil. 2015 à 11:55
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
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