#1 Le 07/10/2008, à 15:54
- Skippy le Grand Gourou
[Contourné] Trier un tableau (PHP+SQL)
Salut,
J'ai une page HTML avec un formulaire. Un script PHP prend en charge ce formulaire en affichant le résultat de la requête SQL (PostgreSQL, mais a priori on s'en fout) correspondante dans un tableau HTML.
Je voudrais que l'utilisateur puisse trier les éléments du tableau suivant une colonne donnée, en cliquant sur le nom de la colonne (la première ligne).
Le problème est que ma requête SQL est formée par une succession de « if » et donc très chiante à refaire. Sauf qu'une fois que le tableau est affiché, cette requête est a priori perdue, donc je suis obligé d'une manière ou d'une autre de la reformer.
D'où ma question : y a-t-il un moyen quelconque de garder cette requête en mémoire en tant que variable cachée dans la page HTML (sans qu'elle soit écrite dans la source…) ? Dans ce cas je verrais bien un lien en POST vers un script PHP pour réitérer la requête avec le tri en plus, d'où la question subsidiaire : y'a-t-il moyen de faire un lien en POST (avec <a></a>) [j'ai pas encore googlé pour celle-là, je viens d'y penser et la pause café m'appelle…] ?
Merci.
Edit : Problème contourné en me dirigeant vers la solution JavaScript, et notamment en découvrant le script sorttable (doc en anglais) qui permet de faire en sorte qu'un tableau soit triable en temps réel.
Dernière modification par Skippy le Grand Gourou (Le 07/10/2008, à 17:18)
Hors ligne
#2 Le 07/10/2008, à 21:38
- Link31
Re : [Contourné] Trier un tableau (PHP+SQL)
Fais une requête à chaque chargement de la page, en changeant le ORDER BY en fonction de ce que tu veux. C'est simple, solide, efficace, et ça ne nécessite pas de Javascript.
Hors ligne
#3 Le 08/10/2008, à 08:08
- Skippy le Grand Gourou
Re : [Contourné] Trier un tableau (PHP+SQL)
Ben non justement c'est pas simple de refaire la requête à chaque fois, puisqu'elle est issue d'un formulaire à remplir et donc créée avec une suite de if/then/else suivant les champs facultatifs qui ont été remplis…
Mais la solution JavaScript me va, sorttable est assez élégant à l'usage en fait, et ça réduit le nombre de requêtes (et le tri n'étant pas vraiment nécessaire tant pis pour ceux qui ont désactivé le JS).
Hors ligne
#4 Le 08/10/2008, à 08:46
- HP
Re : [Contourné] Trier un tableau (PHP+SQL)
Ben non justement c'est pas simple de refaire la requête à chaque fois, puisqu'elle est issue d'un formulaire à remplir et donc créée avec une suite de if/then/else suivant les champs facultatifs qui ont été remplis…
Bé, il faut se débrouiller pour que ce soit simple… mais je pense que ça doit venir avec l'expérience .
cat /dev/urandom >/dev/null 2>&1 #github
Hors ligne
#5 Le 08/10/2008, à 11:02
- obiwankennedy
Re : [Contourné] Trier un tableau (PHP+SQL)
je suppose qu'après la gestion du formulaire en php, tu as dans une variable la requête sql ? si oui, il te suffit de mettre cette chaine dans une variable de sessions. Ensuite tu fais un truc genre si l'utilisateur demande un tric sur la colonne X j'ajoute "order by X" à la fin.
Je te conseille donc de lire de la doc sur l'utilisation des sessions en PHP.
Dans mes logiciels, j'écris ton nom.
SGNGD: SvgGd is Not GD
Rolisteam
Hors ligne
#6 Le 08/10/2008, à 12:43
- Skippy le Grand Gourou
Re : [Contourné] Trier un tableau (PHP+SQL)
Skippy le Grand Gourou a écrit :Ben non justement c'est pas simple de refaire la requête à chaque fois, puisqu'elle est issue d'un formulaire à remplir et donc créée avec une suite de if/then/else suivant les champs facultatifs qui ont été remplis…
Bé, il faut se débrouiller pour que ce soit simple… mais je pense que ça doit venir avec l'expérience
.
Ben si quelqu'un a une méthode pour créer de manière simple une requête avec le résultat d'un formulaire dont tous les champs sont facultatifs, je suis preneur… Pour l'instant ça donne quelque chose comme :
$query = "SELECT * FROM matable WHERE 1=1";
if (!empty($_POST['var1']))
$query .= " AND var1>" . pg_escape_string($_POST['var1']);
if (!empty($_POST['var2']))
$query .= " AND var2<" . pg_escape_string($_POST['var2']);
[…]
$query .= ";";
L'autre possibilité que je vois serait de mettre des valeurs par défaut partout, mais ça ne m'intéresse pas.
je suppose qu'après la gestion du formulaire en php, tu as dans une variable la requête sql ? si oui, il te suffit de mettre cette chaine dans une variable de sessions. Ensuite tu fais un truc genre si l'utilisateur demande un tric sur la colonne X j'ajoute "order by X" à la fin.
Je te conseille donc de lire de la doc sur l'utilisation des sessions en PHP.
Merci, je vais regarder dans cette direction.
Hors ligne
#7 Le 08/10/2008, à 12:53
- HP
Re : [Contourné] Trier un tableau (PHP+SQL)
Ben si quelqu'un a une méthode pour créer de manière simple une requête avec le résultat d'un formulaire dont tous les champs sont facultatifs, je suis preneur…
à la base, il me semble que tu parlais d'un tableau qui serait réordonné selon un clic sur un titre de colone… un peu comme :
http://www.torrentz.com/search?q=ubuntu
là, un simple switch devrait suffire…
et donc même pas la peine de faire des escape sur les "paramètres de tri", puis que l'on serait sûr de ceux ci…
PS : je me demande encore que viennent faire les sessions dans cette histoire…
Dernière modification par HP (Le 08/10/2008, à 12:55)
cat /dev/urandom >/dev/null 2>&1 #github
Hors ligne
#8 Le 08/10/2008, à 13:37
- Skippy le Grand Gourou
Re : [Contourné] Trier un tableau (PHP+SQL)
Skippy le Grand Gourou a écrit :Ben si quelqu'un a une méthode pour créer de manière simple une requête avec le résultat d'un formulaire dont tous les champs sont facultatifs, je suis preneur…
à la base, il me semble que tu parlais d'un tableau qui serait réordonné selon un clic sur un titre de colone… un peu comme :
http://www.torrentz.com/search?q=ubuntulà, un simple switch devrait suffire…
et donc même pas la peine de faire des escape sur les "paramètres de tri", puis que l'on serait sûr de ceux ci…
Oui, sauf que les éléments du tableau sont le résultat d'une requête du type
SELECT * FROM matable WHERE a AND b AND c AND …;
où les (a,b,c,…) sont les résultats d'un formulaire (en POST). En gros j'ai des données dans une table à une dizaine de colonnes, et l'utilisateur doit pouvoir sélectionner une parties des données selon des tests sur tous les critères — ou pas.
PS : je me demande encore que viennent faire les sessions dans cette histoire…
Ben si j'ai compris l'idée (pas encore lu la doc), ça permettrait de garder la requête dans une variable une fois le tableau affiché ?
Dernière modification par Skippy le Grand Gourou (Le 08/10/2008, à 13:38)
Hors ligne
#9 Le 08/10/2008, à 13:56
- HP
Re : [Contourné] Trier un tableau (PHP+SQL)
bé en $_GET tu peux faire passer tes arguments…
et donc savoir comment reconstruire ta requête…
pas trop besoin de session pour çà !
cat /dev/urandom >/dev/null 2>&1 #github
Hors ligne
#10 Le 08/10/2008, à 15:16
- MrWaloo
Re : [Contourné] Trier un tableau (PHP+SQL)
ou alors mémoriser ta requête dans un variable de session $_SESSION['requete'] par exemple...
A chaque rechargement, tu la retrouves...
"De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent !!" (Desproges)
UNIX is an operating system, OS/2 is half an operating system, Windows is a shell, MS-DOS is a boot sector virus.
Hors ligne
#11 Le 08/10/2008, à 15:41
- HP
Re : [Contourné] Trier un tableau (PHP+SQL)
M'enfin, si je veux des pages en Français qui parlent de Ubuntu (dans GG), c'est quand même assez pratique d'avoir çà :
http://www.google.com/search?hl=fr&q=ubuntu&lr=lang_fr
plutôt que l'emploi de sessions…
enfin, après, c'est à adapter selon les cas, mais franchement l'emploi de sessions comme unique moyen de conserver des params de recherche, je trouve çà assez moyen, et pas très "user-friendly", en règle générale.
Dernière modification par HP (Le 08/10/2008, à 15:42)
cat /dev/urandom >/dev/null 2>&1 #github
Hors ligne
#12 Le 13/10/2008, à 18:18
- Skippy le Grand Gourou
Re : [Contourné] Trier un tableau (PHP+SQL)
Plop, désolé pour la réponse tardive j'étais absent.
Bon, je vais potasser un peu plus le côté POST/GET pour voir si le GET peut présenter un intérêt ici.
Et je vais tester aussi les sessions, comme ça peu importe ce que je choisis je m'endormirai moins con.
Merci pour les pistes.
Hors ligne
#13 Le 14/10/2008, à 17:51
- Skippy le Grand Gourou
Re : [Contourné] Trier un tableau (PHP+SQL)
Au fait, après avoir lu ça et failli lire ça (la flemme mais ça a l'air assez complet) je me suis dirigé vers le GET, je pense en avoir l'utilité.
Par contre le chiant avec le GET, c'est que la page de départ est vite perdue dans les tréfonds de l'historique…
Pas encore étudié le tri du tableau cependant, d'autres chats à fouetter pour l'instant.
Dernière modification par Skippy le Grand Gourou (Le 14/10/2008, à 17:55)
Hors ligne
#14 Le 14/10/2008, à 17:58
- HP
Re : [Contourné] Trier un tableau (PHP+SQL)
http://www.cs.tut.fi/~jkorpela/forms/methods.html
très bien ! d'autant qu'il pointe (au moins une fois) vers le WDG , de saines lectures en perspectives…
cat /dev/urandom >/dev/null 2>&1 #github
Hors ligne