Trier tableau PHP

Résolu/Fermé
Jérôme - Modifié par Jérôme le 8/11/2010 à 12:56
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 8 nov. 2010 à 15:02
Bonjour,

J'ai un tableau en PHP composé de trois colonnes (titre, message, ordre).
Ses données s'ajoutent à partir d'un formulaire (et sont stockées dans une BDD)

J'aimerais que lorsque je clique sur le titre d'une colonne, celle-ci se classe automatiquement par ordre croissant. Puis lorsque je re-clique, elle se classe par ordre décroissant et ainsi de suite...

Il me semble pour cela que je dois utiliser dans mon URL quelque chose de ce type :

index.php?sort=titre&priorite=desc

Cependant je n'arrive pas à la mettre en oeuvre.

PS: Je précise que lorsque je clique sur un titre, j'aimerais que toutes les autres colonnes s'adaptent au tri. Pas que les données soient mélangées.

Merci d'avance,
Jérôme Dietrich



A voir également:

3 réponses

Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
8 nov. 2010 à 13:14
salut,

Les paramètres que tu passes dans l'URL n'agissent pas seuls sur le tri. Il faut les récupérer via les variables $_GET['sort'] et $_GET['priorite'].

Ensuite, dans ton code, en fonction de ces paramètres, il faut adapter ta requete SQL en fonction de ces paramètres .... avec un "order by".

Attention aux injections SQL si tu passes directement le contenu de la variable dans ta requette SQL !
1
Merci pour ta réponse,

En effet en suivant tes conseils je viens de réussir ce que je voulais. Mais il me reste une petite question : comment faire pour que quand je clique sur un titre de colonne, celle-ci se classe alternativement en ASC et en DESC ?

Voici l'extrait de mon code :

if(isset($_GET['tri']))
{
	$tri = $_GET['tri'];
}

else
{
	$tri = "titre";
}

if(isset($_GET['ordre']))
{
	$ordre = $_GET['ordre'];	
}
else
{
	$ordre = "ASC";
}

//Récupération des taches créées par l'utilisateur (dans la BDD)
$reponse = $base->query("SELECT * FROM gestionnaire ORDER BY $tri $ordre");


//Mise en place du tableau
echo '<br/><table rules="all">';
echo '<thead><tr><th><a href="index.php?tri=titre&amp;ordre=DESC">Titre</a></th><th><a href="index.php?tri=priorite&amp;ordre=DESC">Priorité</a></th><th><a href="index.php?ferme=titre&amp;ordre=DESC">Fermée ?</a></th></tr></thead>'; 
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
8 nov. 2010 à 14:19
//Mise en place du tableau
echo '<br/><table rules="all">';
echo '<thead><tr><th><a href="index.php?tri=titre&amp;ordre=DESC">Titre</a></th><th><a href="index.php?tri=priorite&amp;ordre=DESC">Priorité</a></th><th><a href="index.php?ferme=titre&amp;ordre=DESC">Fermée ?</a></th></tr></thead>'; 


=>
echo '<br/><table rules="all">';
echo '<thead><tr><th><a href="index.php?tri=titre&amp;ordre=DESC">Titre</a></th><th><a href="index.php?tri=priorite&amp;ordre=';
if (isset($ordre) and $ordre == "ASC")
 echo 'DESC';
else
 echo 'ASC";
echo '">Priorité</a></th><th><a href="index.php?ferme=titre&amp;ordre=DESC">Fermée ?</a></th></tr></thead>'; 
1
Merci encore !! Ça fonctionne parfaitement...
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
8 nov. 2010 à 15:02
$reponse = $base->query("SELECT * FROM gestionnaire ORDER BY $tri $ordre");

t'as encore une belle faille de sécurité je pense...
si on prend ca comme parametres:
index.php?priorite=desc&sort=titre;delete from gestionnaire;

a mon avis ca va faire des étincelles !!!! (a tester.. si t'as pas de données importantes dans la table gestionnaire ....
0