Se connecter / S'enregistrer
Votre question

Trier un tableau en php

Tags :
  • Echo
  • Programmation
Dernière réponse : dans Programmation
23 Décembre 2010 17:58:57

Bonjour,
J'ai un tableau qui affiche des données de la base de données
Je voulais que lorsque j'appuie sur la première ligne de chaque colonne du
tableau, il sera trié selon la colonne choisie.
voici l'essentiel du code de mon tableau:
  1. <table class="tableau" width= "700">
  2. <tr>
  3. <th>Nom</th>
  4. <th>Prénom</th>
  5. <th>Tel</th>
  6. </tr>
  7. <?php
  8. $retour = mysql_query('SELECT * FROM client');
  9. while ($donnees = mysql_fetch_array($retour)or die(mysql_error()))
  10. { ?>
  11. <tr>
  12. <td> <?php echo $donnees['C_Nom']; ?> </td>
  13. <td> <?php echo $donnees['C_Prenom']; ?> </td>
  14. <td> <?php echo $donnees['C_Telephone']; ?> </td>
  15. </tr>
  16. <?php } ?>
  17. </table>

Autres pages sur : trier tableau php

23 Décembre 2010 18:04:01

Boujour,

  1. <th><a href="?tri=C_Nom">Nom</a></th>
  2. <th><a href="?tri=C_Prenom">Prénom</a></th>
  3. <th><a href="?tri=C_Telephone">Tel</a></th>
  4.  
  5. $tri = mysql_real_escape_string(htmlspecialchars($_GET['tri']));
  6. $retour = mysql_query ("SELECT * FROM client ORDER BY $tri");
  7. ...
m
0
l
23 Décembre 2010 18:15:55

je ne sais pas mais ça marche pas
m
0
l
Contenus similaires
23 Décembre 2010 18:23:37

Faut avoir fais une connexion à la BDD avant d'utiliser mysql_real_escape_string();

Ajouter aussi:
  1. if (!isset($tri)) {
  2. $tri = "C_Nom";
  3. }
m
0
l
23 Décembre 2010 22:34:25

il faut que tu utilise order by desc dans la req SQL
m
0
l
24 Décembre 2010 08:58:33

Je crois que je dois utiliser array_multisort() mais je sais pas comment l'utiliser dans mon cas
m
0
l
a c 232 L Programmation
24 Décembre 2010 09:16:18

Le plus simple est de trier directement dans ta requête SQL, ça sera beaucoup plus rapide qu'un tri en PHP sur le tableau, et allstar27 t'as expliqué comment faire
m
0
l
24 Décembre 2010 09:22:21

oui j'ai essayé ça mais ça pas marché, je ne sais pas pourquoi?
m
0
l
a c 232 L Programmation
24 Décembre 2010 14:38:55

Fais voir ce que tu as fait...
m
0
l
24 Décembre 2010 16:05:27

voici le code:
  1. <table class="tableau" width= "700">
  2. <tr>
  3. <th><a href="?tri=C_Nom">Nom</a></th>
  4. <th><a href="?tri=C_Prenom">Prénom</a></th>
  5. <th><a href="?tri=C_Telephone">Tel</a></th>
  6. </tr>
  7. <?php
  8. $cnx=mysql_connect("localhost","admin","admin")or die('Impossible de connecter');
  9. mysql_select_db("FAX",$cnx) or die('Impossible de slectioner la bdd');
  10. if (!isset($tri)) {
  11. $tri = "C_Nom";
  12. }
  13. $tri = mysql_real_escape_string(htmlspecialchars($_GET['tri']));
  14. $retour = mysql_query ("SELECT * FROM client ORDER BY '$tri' " );
  15. while ($donnees = mysql_fetch_array($retour)or die(mysql_error()))
  16. { ?>
  17. <tr>
  18. <td> <?php echo $donnees['C_Nom']; ?> </td>
  19. <td> <?php echo $donnees['C_Prenom']; ?> </td>
  20. <td> <?php echo $donnees['C_Telephone']; ?> </td>
  21. </tr>
  22. <?php } ?>
  23. </table>
m
0
l
a c 232 L Programmation
24 Décembre 2010 17:36:55

Remplace les lignes 10 à 13 par :
  1. if (!isset(($_GET['tri'])) {
  2. $tri = "C_Nom";
  3. } else {
  4. $tri = mysql_real_escape_string(htmlspecialchars($_GET['tri']));
  5. }



Edit: et tu peux aussi vérifier que $tri soit bien une des colonnes existantes.
m
0
l
27 Décembre 2010 08:59:59

désolé mais ça pas marché encore
et pour les colonnes j'ai 3 : C_Nom, C_Prénom et C_Telephone
m
0
l
a c 232 L Programmation
27 Décembre 2010 10:51:26

Ah oui, forcément, il ne faut pas mettre de ' ' autour de $tri, c'est un nom de colonne.
SELECT * FROM client ORDER BY $tri
m
0
l
27 Décembre 2010 11:35:58

quand j’enlève les ' ' il m'affiche un message d'erreur:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
m
0
l
a c 232 L Programmation
27 Décembre 2010 12:14:02

Fais un echo de ta requête qu'on voit à quoi elle ressemble
m
0
l
27 Décembre 2010 12:19:27

il n'affiche rien seulement le message d'erreur, mais lorsque je mets les ' ' il affiche Resource id #3
m
0
l
a c 232 L Programmation
27 Décembre 2010 13:02:40

Je parlais de la requête SQL, pas du résultat de mysql_query.
Remplace:
  1. $retour = mysql_query ("SELECT * FROM client ORDER BY $tri " );

Par
  1. echo "SELECT * FROM client ORDER BY $tri ";
  2. $retour = mysql_query ("SELECT * FROM client ORDER BY $tri " );


Et dis nous ce qu'il affiche
m
0
l
27 Décembre 2010 14:20:24

ça marche mais il y a un problème il fait le tri que lorsque j'appuie sur la colonne désirée alors que lorsque je charge la page pour la première fois il m'affiche ça:
m
0
l
27 Décembre 2010 14:29:53

c bon le problème est résolu mais juste une autre question
je voulais afficher une image d'un petit flèche pour indiquer pour quelle colonne le tri est effectué comme par exemple dans Mysql
j'ai mis ça mais ça pas marché:
  1. <th>
  2. <a href="?tri=C_Nom">Nom<?php if ($tri == "C_Nom") {?><img src="images/sortdown.gif"> <?php }?>
  3. </a>
  4. </th>
m
0
l
a c 232 L Programmation
27 Décembre 2010 15:33:55

Tu fais une condition if pour voir si $tri est égal à la valeur de la colonne, et tu affiches une flèche si c'est le cas.
m
0
l
27 Décembre 2010 15:46:49

avec ce code il n'affiche plus d'image:
  1. <th>
  2. <a href="?tri=C_Nom">Nom<?php if ($tri == "C_Nom" ) {?><img src="images/sortdown.gif"> <?php }?>
  3. </a>
  4. </th>
m
0
l
a c 145 L Programmation
27 Décembre 2010 15:55:17

C'est normal.
  1. <th>
  2. <a href="?tri=C_Nom">Nom <img src="images/sortdown<? ($tri == "C_Nom" )?'_on':'';?>.gif">
  3. </a>
  4. </th>

Et il te faut deux images: sortdown.gif et sortdown_on.gif
m
0
l
27 Décembre 2010 16:00:28

il affiche toujours l'image du flèche
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS