IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Sql = donner le choix au visiteur de trier la requête


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 6
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mysql_query("$query order by ".$_REQUEST["tri"]." ASC;");

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 56
    Par défaut
    Rapidement, j'ai pas vraiment tout approfondi sur ta question mais je soulève juste un point primordial :

    $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..

    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

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 6
    Par défaut
    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!

  4. #4
    Membre émérite Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    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 : 573
    Par défaut
    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 ?

  5. #5
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 236
    Par défaut
    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.

Discussions similaires

  1. requete sql-lite avec choix de table depuis variable
    Par julientalbourdet dans le forum Général Python
    Réponses: 4
    Dernier message: 24/08/2009, 09h48
  2. Requête SQL automatisée selon choix
    Par karous dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 06/07/2007, 11h43
  3. [PHP-JS] Donner le choix du mode d'affichage
    Par Gigi31 dans le forum Langage
    Réponses: 4
    Dernier message: 18/07/2006, 18h33
  4. [sql serveur 2k] choix entre services pack
    Par poosh dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/06/2006, 11h52
  5. [SQL] liste a choix
    Par adlich dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 27/04/2006, 01h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo