PHP Filtrer les lignes d'un tableau issu d'une base de données
clem-au
-
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
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
A voir également:
- PHP Filtrer les lignes d'un tableau issu d'une base de données
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
- Base de registre - Guide
5 réponses
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
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
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.
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.
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>
<?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>
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>
<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>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Dans le formulaire j'ai corrigé une erreur, il manquait la balise de fin du formulaire
Dans la page où vous récupérez les données (soit affichageTableauProvence.php)
Pour la requête SQL la syntaxe est
Ici, le code pour l'affichage du résultat
<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
?>