[PHP]Trier colonnes par ordre alphabétique

Fermé
Sybrix - 8 juil. 2010 à 13:59
AmeryCourtz Messages postés 94 Date d'inscription lundi 16 février 2009 Statut Membre Dernière intervention 6 juin 2012 - 22 juil. 2010 à 15:42
Bonjour,
Je traivaille sur une application PHP/MySQL
J'effectue une requête SQL et l'affiche dans un tableau, seulement j'aimerais pouvoir ranger ses colonnes par ordre alphabétique en cliquant dessus.
Je ne trouve pas d'explications claires sur internet. Quelqu'un pourrais t-il m'éclairer?
Merci



10 réponses

AmeryCourtz Messages postés 94 Date d'inscription lundi 16 février 2009 Statut Membre Dernière intervention 6 juin 2012 18
9 juil. 2010 à 14:18
En fait sur le titre de tes colonnes tu rentre un lien qui renvoi sur la page qui traite l'affichage de ton tableau avec comme paramètre dans l'url un identifiant pour distinguer le nom de la colonne sur laquel tu effectue le trie.

J'ai pas d'exemple tout de suite, mais j'essaierais de tant mettre un quand je pourrais.

Sinon ta un exemple la :
http://seebz.net/42-trier-les-colonnes-d-un-tableau-en-php.html
1
AmeryCourtz Messages postés 94 Date d'inscription lundi 16 février 2009 Statut Membre Dernière intervention 6 juin 2012 18
Modifié par AmeryCourtz le 22/07/2010 à 15:43
Désolé, j'ai pas trop le temps avec mon taf de regarder. Normalement c'est juste un parametre a rajouter.

Perso si t'a pas envie de te prendre la tete utilise du javascript, tiens utilise sa.

https://www.paperblog.fr/1008181/trier-vos-tableaux-avec-javascript/

EDIT: pour plus de détails pense a consulter le code source de la demo : http://www.smashou.info/demos/table-sort.html
1
Breub62 Messages postés 2989 Date d'inscription lundi 7 juin 2010 Statut Membre Dernière intervention 17 avril 2014 369
8 juil. 2010 à 14:09
Après le clic sur le bouton tu recharge ta page en faisant de nouveau ta requête mais en mettant un order by la_colonne_que_tu_veux_trier ASC ou DESC selon que tu clique sur l'une ou l'autre flèche
0
J'ai ceci pour chacune de mes colonnes (je me suis inspirée d'un code) :

<td align='center' class='entete'><a href='<?php echo $href."table.champ"; ?>'>Numéro</a></td>

Comment dois-je l'utiliser? ou comment intégrer ta requête?
0
AmeryCourtz Messages postés 94 Date d'inscription lundi 16 février 2009 Statut Membre Dernière intervention 6 juin 2012 18
Modifié par AmeryCourtz le 8/07/2010 à 15:51
Personnelement j'utilise un lien qui renvoi sur la même page de traitement ou s'affiche le tableau en passant un argument pour le trie (ex : trieId) qui est le nom de ma colonne. (Je sécurise avec du htaccess et expression regulière donc pas d'injection)
genre :

<th href='formulaire_tableau-trieId.html'>trieId</th> 
<th href='formulaire_tableau-trieNom.html'>trieNom</th> 


ensuite juste avant ton appel de ta requete tu fait sa

if(isset($_GET['montrie']){ 

      $OrderSql = $_GET['montrie']; 
}else{ 

      $OrderSql = 'trie_par_default'; 
} 

$tbl = marequete($OrderSql); 


et dans ta requete tu fait un 'ORDER BY ".$OrderSql."'


EDIT : formulaire_tableau-trieId.html <== .htaccess ==> index.php?Corps=AffichageTableu?montrie=trieId
0

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

Posez votre question
Excuse moi je suis débutante en php, je ne comprend pas bien le principe.
Aurais tu un exemple concret?
Merci d'avance
0
Merci pour ton lien, je vois ca cette après midi, j'espere que je trouverais la solution!
0
Alors quant au code exemple que tu m'as fourni, cela ne fonctionne pas chez moi.
En effet lorsque je clique sur le nom de la colonne, cela me renvoi sur une autre page.
Comment indiquer le lien de ma page? Car dans la fonction sort_link, ce n'est pas indiqué.
Merci de votre aide.



// Notre fonction qui affiche les liens
function sort_link($text, $order=false)
{
global $order_by, $order_dir;
if(!$order)
$order = $text;
$link = '<a href="?order=' . $order;

if($order_by==$order && $order_dir=='ASC')
$link .= '&inverse=true';
$link .= '"';

if($order_by==$order && $order_dir=='ASC')
$link .= ' class="order_asc"';

elseif($order_by==$order && $order_dir=='DESC')
$link .= ' class="order_desc"';
$link .= '>' . $text . '</a>';

return $link;

}
0
Finalement j'ai réussi grâce au code exemple! j'ai corrigé mon erreur.

Une dernière question il est indiqué "Si le paramètre inverse existe, le tri se fera dans l'ordre inverse. "

Comment procéder pour créer ce paramètre inverse?

Merci
0
AmeryCourtz Messages postés 94 Date d'inscription lundi 16 février 2009 Statut Membre Dernière intervention 6 juin 2012 18
15 juil. 2010 à 10:15
Desolé de pas répondre plus tôt.

Alors pour inverser le sens des trie il faut l'attribuer au lien afficher. Dans le code exemple c'est celle-ci qui le fait .
$link .= '&inverse=true';

(Tu ajoute l'attribut inverse)

Qui elle même affecte la requête ici
$order_dir = isset($_GET['inverse']) ? 'DESC' : 'ASC';


Par defaut il est a ASC.

Maintenant, normalement t'a pas de modification à faire, mais montre ton code je regarderais.

PS: Le code que je t'ai fourni n'est qu'un exemple parmi tant d'autre rien ne t'empeche d'en prendre un autre qui correspond mieux à ta façon de coder
0
Hello! Alors voici mon code, il me permet de ranger les colonnes dans l'ordre alphabétique croissant mais non décroissant, si tu peux jetter un oeil..
Merci d'avance.


</head>
<body class="body" bgcolor="#DFF5FF">

<?php
include ('../annexes/connexions/connexion.php');
// Le nom de la table
$table_name = 'eds_actif_jointure';

//Tri sur colonne
$tri_autorises = array ('id_evenement', 'numTicket', 'prioriteTraitement', 'idUn', 'date_intervention', 'nom', 'prenom', 'email');
$order_by = in_array ($_GET['order'], $tri_autorises) ? $_GET['order'] : 'nom';

//Sens du tri
$order_dir = isset($_GET['inverse']) ? 'DESC' : 'ASC' ;

//Préparation de la requete
$reqfinale = mysql_query ("SELECT id_evenement, numTicket, prioriteTraitement, idUn, date_intervention, nom_agent, prenom 
		FROM {$table_name} ORDER BY {$order_by} {$order_dir}") or die ("impossible d'executer la requete finale");
								
// Notre fonction qui affiche les liens
function sort_link ($text, $order=false)
{
	global $order_by, $order_dir;
	
	if(!$order)
		$order=$text;
		
	$link = '<a href="?order='.$order. '&traitement=consult';
	
	if(order_by==$order && $order_dir=='ASC')
		$link='&inverse=true';
		
$link.='"';
	if($order_by==$order && $order_dir=='ASC')
		$link.='class="order_asc"';
		
	elseif($order_by==$order && $order_dir=='DESC')
		$link='class="order_desc"';
		
$link.='>'.$text.'</a>';

	return $link;
} 

//Affichage ?>
<style type="text/css">
a.order_asc,
a.order_desc:hover
	{
		padding-right:15px;
		backgroung:transparent url(s_asc.png) right no-repeat;
	}
a.order_desc,
a.order_asc:hover
	{
		padding-right:15px;
		background:transparent url(s_desc.png) right no repeat;
	}
</style>

  <table width="100%" align="center">
  <tr>
    <th align='center' class='entete'><?php echo sort_link('MCMT', 'id_evenement')?></th>
	<th align='center' class='entete'><?php echo sort_link('Numéro Océane', 'numTicket' )?></th>
    <th align='center' class='entete'><?php echo sort_link('Priorité de Traitement', 'prioriteTraitement') ?></th>
    <th align='center' class='entete'><?php echo sort_link('SQTQS', 'idUn') ?></th>
	<th align='center' class='entete'><?php echo sort_link('Date intervention', 'date_intervention' )?></th>
    <th align='center' class='entete'><?php echo sort_link('Nom', 'nom') ?></th>
    <th align='center' class='entete'><?php echo sort_link('Prénom', 'prenom' ) ?></th>
	<th align='center' class='entete'><a href="../affichage/elodie_affichage_mail.php" target="haut"  title="Envoyer un mail" class=""><strong>Envoyer<strong/></a></th>
  </tr>
 
 <?php
// Boucle affichage tableau
            while($row = mysql_fetch_assoc($reqfinale)){
?>
				<tr class="<?php if(($i%2) == 0) {echo "ma_couleur1";} else{ echo "ma_couleur2";}?>">
					<td class="centrer"><? echo $row['id_evenement']; ?> <BR></td>
					<td class="centrer"><? echo $row['numTicket']; ?> <BR></td>
					<td class="centrer"><? echo $row['prioriteTraitement']; ?> <BR></td>
					<td class="centrer"><? echo $row['idUn']; ?></td>
					<td class="centrer"><? echo $row['date_intervention']; ?></td>
					<td class="centrer"><? echo $row['nom']; ?></td>
					<td class="centrer"><? echo $row['prenom']; ?></td>
					<td class="centrer"><input type="checkbox" checked="checked"/><input type="hidden" name='email' value="<?echo $row['email']; ?>"</td>
				</tr>
<?php											}
?>
</table>
</body>
</html>






0