Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/02/2011, 17h49   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 6
Points : 1
Points : 1
Par défaut Sql = donner le choix au visiteur de trier la requête

Bonjour bonjour!

je bloque et ne trouve pas de solution sur le web (formulerais-je mal mon problème ???).
j'vais tenter d'être pertinent !

alors ! hm je donne un formulaire au visiteur pour faire une recherche sur le site...
une fois validé le formulaire, il arrive sur une page avec le listing en fonction de ses réponses ( jusque là tout va bien)

mais je voudrais rajouter une liste déroulante qui offre au visiteur le choix de re-trier cette requête...

j'ai donc en html la liste déroulante :


Code :
1
2
3
4
5
6
7
8
9
10
<select style="width: 122px;" name="tri">
                      <option value="prix">Choix du tri</option>
                      <option value="ville">Ville</option>
                      <option value="piece">Pièce</option>
                      <option value="surface">Surface</option>
                      <option value="DPE">DPE</option>
                      <option value="prix">Prix</option>
 
                      </select></p><p>
                <input type="submit" value="Valider">


et je mets une variable pour le order by dans mon sql :


Code :
$result = mysql_query("$query order by ".$_REQUEST["tri"]." ASC;");

et enfin pour info voila ce que donne la requête du formulaire :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Array
(
[type] => -1
[piece] => Array
(
[0] => 1
)
 
[ville] => 
[pxmin] => min
[pxmax] => max
[surfacemin] => min
[surfacemax] => max
[tri] => prix
)
deux problèmes :

1- lorsque j'effectue le tri ma requête ne prend pas en considération le résultat du formulaire / c'est comme une nouvelle requête.
-> je voudrais réussir à reprendre les informations qui a actuellement sur la page. (superposer des requêtes ???)

2- comme vous pouvais le voir dans le HTML je suis obligé de passé par un bouton submit est-il possible de directement cliquer sur le critère pour que le résultat s'affiche ???

merci d'avance pour l'attention que vous y aurez porté
logtt12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 20h25   #2
Futur Membre du Club
 
Damien
Inscription : juillet 2009
Messages : 50
Détails du profil
Informations personnelles :
Nom : Damien

Informations forums :
Inscription : juillet 2009
Messages : 50
Points : 16
Points : 16
Rapidement, j'ai pas vraiment tout approfondi sur ta question mais je soulève juste un point primordial :

Citation:
$result = mysql_query("$query order by ".$_REQUEST["tri"]." ASC;");
avec ton script en l'état, tu ne protège pas le POST qui est passé, du coup on peut faire passer absolument n'importe quoi. Vérifie déjà ça
htmlspecialchars($_REQUEST["tri"]);
par exemple..

Citation:
comme vous pouvais le voir dans le HTML je suis obligé de passé par un bouton submit est-il possible de directement cliquer sur le critère pour que le résultat s'affiche ???
Pour le submit automatique, faut faire une soumission en javascript sur l'event "onchange".

Et enfin, j'suis pas sûr de tout saisir.. Ta table ne contient donc pas de colonne titrée "prix", mais tu essaie de faire un ORDER BY sur "prix" tout de même ? Idem pour "surface", "DPE"...

On peut connaitre la conception de ta table ?

Sinon je dirais, à première vue pour le prix par exemple, de faire un ORDER BY pxmin
WibiMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 13h09   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 6
Points : 1
Points : 1
bonjour,

merci pr le java j'ai trouvé ma solution pour info, il faut mettre : "onchange="this.form.submit();" dans le select style et on peut supprimer le bouton submit

----
Sinon pour ma table elle fonctionne et elle a bien une colonne titré prix, pxmin et pxmax l'utilise notamment.
----


Sinon quelqu'un aurait une idée pour mon problème de base :/ à savoir récupérer les infos de la première requête (le formulaire) pour que la seconde (le tri) puisse les exploiter ?

merci d'avance!
logtt12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 14h25   #4
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 586
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 586
Points : 859
Points : 859
Lorsque tu traites le premier formulaire de recherche et que tu crées la première requête, tu crées une variable de session qui contient cette requête sur la page de résultat (je suppose que c'est la que tu veux mettre ta liste déroulante, donc un second formulaire) et tu testes l'existence de $_POST['tri'] qui si il existe tu concatène à ta première requête...je sais pas si c'est assez clair ?
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 14h29   #5
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
2 solutions en tête, la première est de traiter ton tableau retourné avec les fonction php(lien).

La seconde vise à récupérer la première chaine de requête et d'y concaténer le "order by" et de la re-exécuter, à mon avis cette solution offre de meilleures perf. mais nécessite un peu plus de travail.
gwharl est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h44.


 
 
 
 
Partenaires

Hébergement Web