"Classer par" apres un SELECT

Eléphant du PHP | 74 Messages

16 févr. 2006, 11:48

Bonjour à tous
Voila, encore un probleme!
J'ai fait une page de stats pour savoir qui s'est connecté et quand (accès au site apres une authentification).
Ma page marche (affiche le pseudo, le nom, le prenom, etc.) mais je voudrais que quand on clic sur les titres des colonnes, cela tri mon tableau par le titre correspondant (ex: tri par pseudo, tri par date, etc.)
<?php
session_start();
$host="localhost";
$login="root";
$pass="";
$base="ma_base";
$connect= mysql_connect($host,$login,$pass);
mysql_select_db($base, $connect);

// requête SQL 
//$sql = 'SELECT * FROM pmsi_freq ORDER BY id DESC'; 
// envoie de la requête 
//$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
?>
<html>
<head>
</head>
<body>
<table width="800">
<tr>
  <td colspan="3" align="center">
  <font face="Verdana" size="2"><b>Statistiques du nombre de connectés</b></font></tr>
<tr><td colspan="3">
		<table align="center" width="700" bgcolor="#DDE3F4" border="1" bordercolordark="#234A94" bordercolorlight="#FFFFFF">
		<tr><td align="center">
<!-- C'est ici que je veux inserer les liens -->
		<font face="Verdana" size="2"><b>Identifiant</b></font>
		</td><td align="center">
		<font face="Verdana" size="2"><b>Prénom</b></font>
		</td><td align="center">
		<font face="Verdana" size="2"><b>Nom</b></font>
		</td><td align="center">
		<font face="Verdana" size="2"><b>Clinique</b></font>
		</td><td align="center">
		<font face="Verdana" size="2"><b>Date</b></font>
		</td>
</tr>
		<?
		$sql = 'SELECT * FROM pmsi_freq ORDER BY date DESC';
		$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
		$data = mysql_fetch_array($req);
		while($data = mysql_fetch_assoc($req)) 
			{ 		
				$date = $data["date"];
				/* Traitement pour l'affichage de la date en francais ********************************************************* */
				// formatage
				list($annee, $mois1, $jour) = explode("-", $date);
				// Traitement du formatage de la date
				$mois = $mois1;
				$annees = $annee;
				// Traduction des mois dans la langue francaise
				$ms = "";
				switch($mois)
				{
				case "01" : $ms = "Janvier"; break;
				case "02" : $ms = "Février"; break;
				case "03" : $ms = "Mars"; break;
				case "04" : $ms = "Avril"; break;
				case "05" : $ms = "Mai"; break;
				case "06" : $ms = "Juin"; break;
				case "07" : $ms = "Juillet"; break;
				case "08" : $ms = "Août"; break;
				case "09" : $ms = "Septembre"; break;
				case "10" : $ms = "Octobre"; break;
				case "11" : $ms = "Novembre"; break;
				case "12" : $ms = "Décembre"; break;
				}
				$mois = $ms;
				// Regroupement de l'ensemble des variables pour former la date
				$date = $jour." ".$mois." ".$annees;
				/* Fin affichage de la date en francais *********************************************************************** */
				// on affiche les informations de l'enregistrement en cours 
				echo "<tr>";
				echo "<td width='20%'><font face='Verdana' size='2' color='#234A94'>";
				echo '<b>'.$data['utilisateur'] ;
				echo "</font></td>";
				echo "<td width='20%'><font face='Verdana' size='2' color='#234A94'>";
				echo $data['prenom'] ;
				echo "</font></td>";
				echo "<td width='20%'><font face='Verdana' size='2' color='#234A94'>";
				echo '<b>'.$data['nom'] ;
				echo "</font></td>";
				echo "<td width='20%'><font face='Verdana' size='2' color='#234A94'>";
				echo '<b>'.$data['clinique'] ;
				echo "</font></td>";
				echo "<td align='right'><font face='Verdana' size='2' color='#234A94'>";
				echo $date ;
				echo "</font></td></tr>";
			}
		?> 
		</table>
</tr><tr><td colspan="3"></td>
</table>
</body>
</html>
Si quelqu'un a une soluce...

Merci d'avance

Invité
Invité n'ayant pas de compte PHPfrance

16 févr. 2006, 11:54

tu fais un teste voir ou il a clique, et quand tu vois ou il clique, tu fais une condition
if($clique==$nom)
{$req="Select nom,prenom, ... from Matable ORDER BY NOM";
$sql=mysql_querry($req) or die('Erreur SQL'); 
}

if($clique==$prenom)
{$req="Select nom,prenom, ... from Matable ORDER BY prenom";
$sql=mysql_querry($req) or die('Erreur SQL'); 
}
quelque chose comme ca ;)

Mammouth du PHP | 19672 Messages

16 févr. 2006, 11:54

Principe de fonctionnement: Il faut que les titre en tête de tes colonnes soient des liens vers la page elle-même assortie d'un paramètre correspondant à la colonne: au rechargement de la page, tu récupères ce paramètre via la super_globale $_GET et tu fais ta requête SQL en ajoutant une clause ORDER BY sur le champ correspondant en ASC ou en DESC selon le cas.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 74 Messages

16 févr. 2006, 12:01

Merci les gars (nanas?) de votre rapidité.
- Cyrano : je comprends le fonctionnement mais ne sais pas faire la syntaxe :(.
tu peux me tenir plus la main?

- Invité : Je mets quoi comme lien sur mes en-têtes? <a href="???"...>

Mammouth du PHP | 19672 Messages

16 févr. 2006, 12:15

Ok, alors le titre de ta colonne par exemple est actuellement :
<td align="center"><font face="Verdana" size="2"><b>Nom</b></font></td>
TU vas le transformer comme ceci:
<td align="center"><a href="<?php echo($_SERVER['PHP_SELF'] ."?tri=nom"); ?>"><font face="Verdana" size="2"><b>Nom</b></font></a></td>
Ensuite, tu vas modifier un tout petit peu ta requête comme ceci:
$tri = isset($_GET['tri']) ? $_GET['tri'] : "";
switch($tri)
{
    case "ident" :  $champ = "identifiant"; break;
    case "nom" :    $champ = "nom"; break;
    case "prenom" : $champ = "prenom"; break;
    case "clin" :   $champ = "clinique"; break;
    default:        $champ = "date";
}

$sql = "SELECT * FROM pmsi_freq "."ORDER BY ". $champ ." DESC";
Remplace par les vrais noms des champs de ta table dans le switch et ça devrait fonctionner très bien.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 févr. 2006, 12:20

Le plus simple est d'utiliser les liens effectivement (après tu peux aussi coller ça dans un onClick sur le td :))

Code : Tout sélectionner

<table> <tr> <td><a href="maPage.php?trier=col1">Col1</a></td> <td><a href="maPage.php?trier=col2">Col2</a></td> <td><a href="maPage.php?trier=col3">Col3</a></td> </tr> </table>
Il ne te reste plus ensuite qu'à récupérer la valeur de $trier et à la glisser dans ton select ORDER BY $trier (en supposant que col1, col2, etc. soient les noms de tes colonnes en bases, si ce n'est pas le cas, suffit de faire la correspondance)

Tu peux ensuite agrémenter d'un deuxième paramètre pour avoir le sens de tri ASC ou DESC :)

Eléphant du PHP | 74 Messages

16 févr. 2006, 12:49

Oki merci Cyrano, sympa d'avoir pris le temps :).
Merci aussi Ryle, pas testé ta méthode car celle de Cyrano marche tip-top et m'aide à comprendre de nouvelles choses ;).

@ (très) bientot.