afficher un tableau avec trie par colonne 2

Petit nouveau ! | 2 Messages

08 nov. 2007, 04:25

Bonjour,

Voila, j'ai un tout petit problème de rien du tout.
j'ai beau chercher sur les forums, et je ne trouve pas de réponse à mon problème.

j'ai un petit tableau (http://84.101.228.160/consultation.php) tout simple qui se créer tout seul par un php.

le tableau va gentiment chercher les valeurs stockées dans en base de données et me les affiche par ordre d'entrée.

jusque la tout va.

maintenant j'aimerai cliquer sur mon entête de colonne pour afficher les données par ordre croissant. en plus claire, j'ai 3 colonnes, nom premon et cp.
j'aimerai cliquer sur "nom" pour tier les données par ordre croissant selon les noms
la même chose avec "prenom" et "cp".

mon code php actuel est :
<?php virtual('/Connections/root.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

mysql_select_db($database_root, $root);
$query_Recordset1 = "SELECT * FROM nom";
$Recordset1 = mysql_query($query_Recordset1, $root) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>repertoire</title>
</head>

<body>
<table width="52%" height="46" border="1">
  <tr>
    <td width="32%" nowrap="nowrap" height="21" class="TitleColor">nom</td>
    <td width="12%" nowrap="nowrap" class="TitleColor">prenom</td>
    <td width="56%" nowrap="nowrap" class="TitleColor">cp</td>
  </tr>
  <?php do { ?>
  <tr>
    <td nowrap="nowrap" class="ListTitleColor"><?php echo $row_Recordset1['nom']; ?></td>
    <td nowrap="nowrap" class="ListTitleColor"><?php echo $row_Recordset1['prenom']; ?></td>
    <td nowrap="nowrap" class="ListTitleColor"><?php echo $row_Recordset1['cp']; ?></td>
    </tr>
  <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
</table>
</body>
</html>
<?php
mysql_free_result($Recordset1);
?>

comment faire

merci de répondre en langage de non-geek
y4 p4s qu3 d3s G33K sur t3rr3 :D

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 nov. 2007, 09:11

Modération :
Bibbe, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

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

08 nov. 2007, 10:57

Pour trier les résultats d'une requête, il te suffit d'utiliser l'instruction "ORDER BY" et le nom du ou des champs, avec éventuellement la mention ASC (par défaut) ou DESC pour préciser le sens :

Code : Tout sélectionner

SELECT ... ORDER BY champ1, champ2 DESC
Cette requête va trier les résultats selon le champ1 de manière croissante, puis pour les doublons dans le champ1, par champ2 de manière décroissante.

Il te faut donc compléter ta requête avec la clause ORDER BY pour trier les résultat (avec par défaut pourquoi pas un tri sur l'id) puis mettre un lien vers ta page sur tes entêtes de tableau et passer un paramètre qui indiquera sur quelle colonne faire le tri (et optionnellement dans quel sens :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 2 Messages

10 nov. 2007, 03:38

merci :D

Mammouth du PHP | 693 Messages

10 nov. 2007, 10:54

SInon, tu as toujours la fonction usort() qui te permet un tri personnaliser d'un tableau.