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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Php / Sql = donner le choix au visiteur de trier la requête

Re: Php / Sql = donner le choix au visiteur de trier la requête

par logtt » 25 févr. 2011, 22:45

hmm en faite je fais des tests et j'me rend compte que certes il y a le prob avec le tableau pour les pièces mais ca doit pas être la raison du problème car même en enlevant ce critère le problème reste le même...

preuve en est lorsque je lance la recherche avec le formulaire j'ai bien le détail dans les inputs ( ce que je t'ai envoyé) mais quand je fais le tri par dessus la hop tout disparait ... :/

doit ton incriminer mon code alors qu'il a pourtant bien marcher lors de l'envoi du formulaire :s ?

Re: Php / Sql = donner le choix au visiteur de trier la requête

par logtt » 25 févr. 2011, 22:29

hmmm je crois que j'ai trouvé le coupable :/ j'ai peur qu'il complique la donne ...

j'ai un choix multiple pour les pièces... qui est donc traité sous forme de tableau :/ d'ou le array ...


voila ce que ca donne
< type="text" name="type" value="1">
< type="text" name="piece" value="Array">
< type="text" name="ville" value="ANGLET">
< type="text" name="pxmin" value="10">
< type="text" name="pxmax" value="20">
< type="text" name="surfacemin" value="30">
< type="text" name="surfacemax" value="40">
Sinon tout le reste est nikel :/

pour info voila ce que donne le traitement pour le choix multiple des pièces :
Array
(
    [context] => recherche
    [type] => -1
    [piece] => Array
        (
            [0] => 1
            [1] => 2
        )

    [ville] => 
    [pxmin] => min
    [pxmax] => max
    [surfacemin] => min
    [surfacemax] => max
    [tri] => prix
)

Re: Php / Sql = donner le choix au visiteur de trier la requête

par Ryle » 25 févr. 2011, 22:12

Ben ça devrait marcher, ça devrait marcher... ça dépend du reste du code :)

Tes input hidden devraient se trouver dans le formulaire qui contient le select pour choisir l'ordre

Si au lieu de "hidden" tu mets un type="text" (juste pour le test), cela te permettra de vérifier que les valeurs du premier formulaire sont correctement récupérées dans le formulaire... (si c'est le cas c'est que le problème est ailleurs, sinon, c'est que le problème doit provenir de la récupération des données)

Ps : le formulaire doit également être envoyé en post :)

Re: Php / Sql = donner le choix au visiteur de trier la requête

par logtt » 25 févr. 2011, 22:01

yes bien vue l'aveugle :D pour la page d'accueil c'est réglé :D

par contre je suis bien en post :/ et les input font po leur boulot :(

je suis juste sensé mettre les input et ca devrait marcher ?

Re: Php / Sql = donner le choix au visiteur de trier la requête

par Ryle » 25 févr. 2011, 21:23

J'ai utilisé $_POST dans mon exemple, mais si ton formulaire est envoyé avec la méthode get, c'est $_GET qu'il faut utiliser :)

Par contre pour ta valeur par défaut, la première solution était effectivement la bonne. En effet, quand l'utilisateur va arriver pour la première fois sur ta page, il n'y aura rien d'envoyé par un formulaire, et donc rien dans $_POST. Il faut donc bien utiliser un input dans lequel tu renseignes la valeur en dur :
<input type="hidden" name="tri" value="prix">

Re: Php / Sql = donner le choix au visiteur de trier la requête

par logtt » 25 févr. 2011, 20:59

ou plutôt :

<input type="hidden" name="tri" value="<? echo "{$_POST["prix"]}";?>">

:)

Re: Php / Sql = donner le choix au visiteur de trier la requête

par logtt » 25 févr. 2011, 20:56

je sais !
du moins pr ma deuxième question !

j'aurais qu'a mettre dans le formulaire de la page d'accueil un hidden également genre :
<input type="hidden" name="tri" value="prix">

comme ca si la requête est faite depuis l'accueil par défaut il y aura un tri par le prix ;)

illumination

bon ca c'est réglé :D reste à faire marché le tri mtn XD

Re: Php / Sql = donner le choix au visiteur de trier la requête

par logtt » 25 févr. 2011, 18:12

arf j'ai ma place dans la rubrique débutant :roll: mais j'avais bien fait la manipe sur le serveur avec les underscores j'ai retest et j'confirme ca fonctionne pas:/

de plus je me pose une question .... j'ai mon questionnaire en page d'accueil si il envoi la requête à la page listing comment les réponses vont être triées si le order à une variable qui n'est pas fournis dans la page d'accueil ?

la question parait compliqué mais le bouton tri sera que sur la page listing ...
donc si j'envoi le formulaire depuis la page accueil le server sera pas quel tri prendre vue que l'utilisateur l'aura pas encore choisi...

faudrait-il rajouter un tri par défaut ? ou ca marchera ?
oui ca fait une nouvelle question alors que la première marche déjà pas :s.

Re: Php / Sql = donner le choix au visiteur de trier la requête

par xTG » 25 févr. 2011, 17:52

La variable n'est pas $POST mais $_POST ;)

Re: Php / Sql = donner le choix au visiteur de trier la requête

par logtt » 25 févr. 2011, 13:48

alors !

bon déjà le javascript ca marche super :) une bonne chose . Par contre j'ai pas réussi à enregistrer les valeurs avec les input :/; est-ce que je les places au mauvais endroit dans mon code ?
<? 
$query = "SELECT l.* from api64_listing l where 1 = 1 ";

IF blabalbal type
IF blablabla piece 
etc.

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

// la je met la "sauvegarde" pr que le tri retrouve la premiere requete "formulaire"

?>
<input type="hidden" name="type" value="<?php echo $POST['type'];?>">
<input type="hidden" name="piece" value="<?php echo $POST['piece'];?>">												
<input type="hidden" name="ville" value="<?php echo $POST['ville'];?>">
<input type="hidden" name="pxmin" value="<?php echo $POST['pxmin'];?>">
<input type="hidden" name="pxmax" value="<?php echo $POST['pxmax'];?>">
<input type="hidden" name="surfacemin" value="<?php echo $POST['surfacemin'];?>">
<input type="hidden" name="surfacemax" value="<?php echo $POST['surfacemax'];?>">	
<?
}
?>

j'ai essayer de le mettre avant le $result mais sans succès.

Re: Php / Sql = donner le choix au visiteur de trier la requête

par Logtt » 24 févr. 2011, 22:56

Super !

c'est vraiment très gentil de m'avoir apporté ton aide.

je tente ca dès demain matin :)

bonne soirée :)

Re: Php / Sql = donner le choix au visiteur de trier la requête

par Ryle » 24 févr. 2011, 22:42

Pour répondre à ta première question, effectivement, si tu ne renvoi pas les données de ton formulaire à ton script, il utilisera les valeurs par défaut. Il te faut donc renvoyer les données saisies par l'utilisateur en plus de la condition de tri.

Le plus simple pour cela est d'utiliser des inputs de type hidden dans lesquels tu stockeras les valeurs reçu du formulaire précédent :
<input type="hidden" name="ville" value="<?php echo $_POST['ville'];?>">
<input type="hidden" name="pxmin" value="<?php echo $_POST['pxmin'];?>">
...
Ainsi ils seront renvoyés avec le critère de tri et ta requête sera réexécutée :)

Et concernant la seconde question, tu peux effectivement te passer du bouton submit en détectant le changement dans le select (attribut onchange) et en soumettant le formulaire en javascript :
<select style="width: 122px;" name="tri" onchange="this.form.submit();">

Re: Php / Sql = donner le choix au visiteur de trier la requête

par logtt » 24 févr. 2011, 16:39

j'espère que ça répond à ta question :

Array
(
[type] => -1
[piece] => Array
(
[0] => 1
)

[ville] =>
[pxmin] => min
[pxmax] => max
[surfacemin] => min
[surfacemax] => max
[tri] => prix
)


la par exemple j'ai mis que l'option une piece le reste est par défaut

Re: Php / Sql = donner le choix au visiteur de trier la requête

par xTG » 24 févr. 2011, 15:02

Que donne l'affichage de la variable $query ?

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

par Logtt » 24 févr. 2011, 14:50

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 :
                    
<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 :
$result = mysql_query("$query order by ".$_REQUEST["tri"]." ASC;");

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.
-> j'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é :)