Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2105 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème avec le tri dans les colonnes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec le tri dans les colonnes

n°1385535
Cindy21
Posté le 12-06-2006 à 00:14:40  profilanswer
 

Bonjour,
 
J'ai un formulaire avec 4 champs (Nom, Hobby, Pays, Date).
 
Pour "Hobby" il y a 2 possibilités à choix :
- hobby (liste déroulante)
- hobby_autre (champ texte permettant d'insérer un hobby, s'il n'est pas dans la liste déroulante
Mais on ne peut en choisir qu'un, soit dans la liste déroulante, soit en entrer un dans le champ texte.
 
Pour les afficher dans ma page de résultats, j'ai mis :

Code :
  1. <?php echo $row['hobby']; ?><?php echo $row['hobby_autre']; ?>


Je ne suis pas sûre que ce soit très correct, mais ça marche.
 
Par contre j'ai un problème, car j'aimerais pouvoir les trier par colonnes, mais comme la colonne "Hobby" fait référence à 2 champs différents (hobby + hobby_autre), mon tri ne fonctionne pas correctement.
 
Voici ce que j'ai mis pour l'instant :
 

Code :
  1. <td><a href="index.php?go=all&amp;sort=nom">Nom</a></td>
  2. <td><a href="index.php?go=all&amp;sort=hobby">Hobby</a></td>
  3. <td><a href="index.php?go=all&amp;sort=pays">Pays</a></td>


Pour info, j'ai déjà la query suivante sur la page :

Code :
  1. <?php
  2. if ( !isset($_GET['sort']) ) { $sort='date DESC'; } else { $sort=$_GET['sort']; }
  3. $result=db_query("SELECT * FROM hobby ORDER BY $sort" );
  4. $i=db_num_rows($result);
  5. ?>

mood
Publicité
Posté le 12-06-2006 à 00:14:40  profilanswer
 

n°1385538
naceroth
Posté le 12-06-2006 à 00:24:29  profilanswer
 

Là, comme ça, on voit pas vraiment le rapport entre la première partie de ton message et la deuxième. Pas plus qu'on ne voit de question d'ailleurs, machin fonctionne pas correctement, j'ai envie de dire qu'on s'en doute, tu  ne serais pas là dans le cas contraire.
 
Bref, tu peux préciser un peu ta question ? :)

n°1385540
nargy
Posté le 12-06-2006 à 00:25:49  profilanswer
 

Tu peut changer la requête suivante selon que ton champs est NULL ou vide lorsqu'il est non renseigné:
SELECT
  IF(hobby_autre IS NULL OR LENGTH(hobby_autre)==0,
    hobby, hobby_autre) AS hobby
  FROM hobby;
 
PS: je suppose que tu utilise MySQL.


Message édité par nargy le 12-06-2006 à 00:29:37
n°1385542
nargy
Posté le 12-06-2006 à 00:28:35  profilanswer
 

Ça c'est dangereux:

Code :
  1. $sort=$_GET['sort'];
  2. ... ORDER BY $sort"


faille de sécurité, l'utilisateur peut changer à sa guise le paramètre <<sort>> et s'amuser avec ta BDD.

n°1385640
Cindy21
Posté le 12-06-2006 à 11:00:02  profilanswer
 

naceroth a écrit :

Là, comme ça, on voit pas vraiment le rapport entre la première partie de ton message et la deuxième. Pas plus qu'on ne voit de question d'ailleurs, machin fonctionne pas correctement, j'ai envie de dire qu'on s'en doute, tu  ne serais pas là dans le cas contraire.
 
Bref, tu peux préciser un peu ta question ? :)


 
Pour répondre à naceroth :
1) Tout d'abord j'ai un formulaire à compléter (les données sont enregistrées dans une BDD MySQL) - pas de problème à ce niveau
2) J'ai une page qui permets de voir toutes les entrées et sur cette page, je souhaite pouvoir faire des tris par colonnes. Là, j'ai juste un problème pour trier la colonne hobby, puisqu'elle fait référence à 2 champs (hobby et hobby_autre). Par défaut les données sont triées par date. Mais j'aimerais donner la possibilité de trier les données par hobby en cliquant sur un lien, comme je l'ai déjà fait pour nom et pays.
Merci

n°1385684
nargy
Posté le 12-06-2006 à 11:45:44  profilanswer
 

Et ça, ne va pas?
SELECT
  IF(hobby_autre IS NULL OR LENGTH(hobby_autre)==0,
    hobby, hobby_autre) AS hobby2
  FROM hobby
  ORDER BY hobby2;

n°1385719
Cindy21
Posté le 12-06-2006 à 12:24:28  profilanswer
 

nargy a écrit :

Et ça, ne va pas?
SELECT
  IF(hobby_autre IS NULL OR LENGTH(hobby_autre)==0,
    hobby, hobby_autre) AS hobby2
  FROM hobby
  ORDER BY hobby2;


Merci Nargy,  
Mais non, cela ne marche pas... Il me dit qu'il n'y a aucune entrée dans la BDD, alors qu'il y en a.
Mais si ça se trouve, c'est moi qui n'ai pas mis correctement le code… Voici ce que j'ai mis :
 

Code :
  1. <?php
  2. if ( !isset($_GET['sort']) ) { $sort='date DESC'; } else { $sort=$_GET['sort']; }
  3. $result=db_query("SELECT
  4.   IF(hobby_autre IS NULL OR LENGTH(hobby_autre)==0,
  5.     hobby, hobby_autre) AS hobby2
  6.   FROM hobby
  7.   ORDER BY hobby2" );
  8. $i=db_num_rows($result);
  9. ?>

n°1385816
nargy
Posté le 12-06-2006 à 14:43:13  profilanswer
 

Qu'est-ce que tes fonctions db_* ? c'est bien sur du mysql, hein?
 
Je ne voie pas tout à fait la structure de ta BDD.
 
Simplement, utilise les fonctions SQL suivantes:
IF( condition, valeur_vrai, valeur_faux)
champs IS NULL
LENGTH(champs)==0
...pour construire le champs hobby2 à partir de hobby et hobby_autre.

n°1385855
Cindy21
Posté le 12-06-2006 à 15:54:55  profilanswer
 

oui, j'ai bien une base mysql. Voici la structure de ma table :

Code :
  1. DROP TABLE IF EXISTS hobby;
  2. CREATE TABLE hobby (
  3.    id int(6) NOT NULL auto_increment,
  4.    nom varchar(255) NOT NULL,
  5.    hobby varchar(255) NOT NULL,
  6.    hobby_autre varchar(255) NOT NULL,
  7.    date date NOT NULL default '0000-00-00',
  8.    PRIMARY KEY (id)
  9. );

n°1385992
nargy
Posté le 12-06-2006 à 18:22:36  profilanswer
 

Ok, erreur de syntaxe de ma part, un seul  ``=``:
LENGTH(hobby_autre)=0

Code :
  1. SELECT
  2.      IF(hobby_autre IS NULL OR LENGTH(hobby_autre)=0,
  3.        hobby, hobby_autre) AS hobby2
  4.      FROM hobby
  5.      ORDER BY hobby2


Exemple:


mysql> insert into hobby (hobby) values ('planche à voile');
Query OK, 1 row affected (0.07 sec)
 
mysql> insert into hobby (hobby) values ('surf');
Query OK, 1 row affected (0.00 sec)
 
mysql> insert into hobby (hobby_autre) values ('base de données');
Query OK, 1 row affected (0.00 sec)
 
mysql> SELECT IF(hobby_autre IS NULL OR LENGTH(hobby_autre)=0, hobby, hobby_autre) AS hobby2 FROM hobby ORDER BY hobby2;
+-----------------+
| hobby2          |
+-----------------+
| base de données |
| planche à voile |
| surf            |
+-----------------+
3 rows in set (0.00 sec)


Message édité par nargy le 12-06-2006 à 18:23:10
mood
Publicité
Posté le 12-06-2006 à 18:22:36  profilanswer
 

n°1386186
Cindy21
Posté le 13-06-2006 à 02:19:48  profilanswer
 

Merci !
 
Ca marche tip top dans MySQL ;), mais maintenant j'essaie de l'intégrer dans ma page PHP et je n'arrive pas à y faire fonctionner... :(  
 
J'essaie encore...

n°1386197
nargy
Posté le 13-06-2006 à 06:44:03  profilanswer
 

olala faut tout te faire... remplace la ligne 3 du tout premier code par:

Code :
  1. if($sort!="nom" || $sort!="hobby" || $sort!="pays" )
  2.   $sort="nom";
  3. if($sort=="hobby" )
  4.   $sort="hobby2";
  5. $result=db_query("SELECT
  6.         IF(hobby_autre IS NULL OR LENGTH(hobby_autre)=0,
  7.           hobby, hobby_autre) AS hobby2,
  8.         nom, pays
  9.         FROM hobby
  10.         ORDER BY $sort" );


Jespère au moins que tu as compris comment ça marche.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème avec le tri dans les colonnes

 

Sujets relatifs
Problème avec FlashProbleme avec AJAX et internet explorer
Problème d'accès à une base Access via VB6 (erreur 13)problème avec DialogBox
[PHP] Problème de checkbox dans une sessionURGENT probleme
Problème d'implémentation (FK qui référence deux colonnes)[css] creer 2 colonnes (probleme tres simple)
[RESOLU]Probleme saut de page et colonnes 
Plus de sujets relatifs à : Problème avec le tri dans les colonnes


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR