conserver une requete pour la cumuler a un filtre de tri

kairi084
Invité n'ayant pas de compte PHPfrance

14 sept. 2010, 10:15

Bonjour,

Je vous écris car j'ai grand besoin de votre aide pour un problème qui m'obsède et pour lequel je ne trouve pas de solutions =(
Aussi je vous remerci d'avance pour toute l'aide que vous pourrez m'apporter , c'est un projet qui me tient a coeur et ca me tue de pas pouvoir avancer dessus

Pour vous expliquer clairement mon probleme j'ai une page dédiée au tv.
sur cette page j'ai un premier formulaire en POST avec des menus deroulants qui me permet de faire un premier tri par marque, taille,resolution etc ...
jusquici tout fonctionne parfaitement.

Mais voila , une fois mon premier niveau de rechercher effectué, j'aurais aimé conserver ce premier niveau de recherche pour faire ensuite un deuxième tris par prix, marque, et avis... (à partir du resultat de la premiere requete)
j'ai donc cree 3 boutons qui envoie en GET le choix de l'internaute quand à son choix de tris secondaire

Code : Tout sélectionner

<div id='tris'><a href="/?order=marque"> </a><a href="/?order=avis"> </a><a href="/?order=prix"> </a></div>

Or j'ai beau faire, une fois que j'effectue une premiere selection (ex rechercher une tv de la marque lG), pas moyen de cumuler ce resultat avec un dernier filtre de tri par marque , avis , ou prix =((

Pour vous aider à y voir claire je vous ai mis en pièce jointe mon code

Code : Tout sélectionner

#********************************************************************************* # FILTRE DE TRI DU SECOND NIVEAU #********************************************************************************* $listTri= array ('marque','avis','prix'); $aList = array(); foreach ($listTri as $selectTri) { if (isset($_GET['order'])&& ($_GET['order'] == $selectTri)) { $aList[] = $selectTri ; } } if(count($aList) > 0) { $sWhereList = 'ORDER BY `'.implode($aList).'` ASC'; $tri=1; } #********************************************************************************* # FILTRE DE TRI DU PREMIER NIVEAU AVEC LES MENUS DEROULANT #********************************************************************************* if ($flag == 1) { $aCols = array('frequence','marque','technologie','taille','resolution','ports'); // Tableau de stockage des conditions de tri $aWhere = array(); // Chaine de la clause WHERE de la requête. $sWhere = null; foreach ($aCols as $col) { if (isset($_POST[$col]) && ($_POST[$col] != $col)) { $aWhere[] = " `". $col ."` = '". $_POST[$col] ."' "; } } if(count($aWhere) > 0) { $sWhere = ' WHERE '. implode(' AND ', $aWhere); } //C'est la que mon filtre de second niveau ne se cumule pas =( car une fois que je valide le formulaire de premier niveau (Ppour faire une recherche par marque elle semble disparaitre) $sql = "SELECT * FROM `tv`". $sWhere."GROUP BY `modele` ".$sWhereList; } else {//si flag !=1 $sql= "SELECT * FROM `tv` GROUP BY `modele`".$sWhereList; } if($sql) { $afficheProduct = mysql_query($sql) or die("Erreur lors de la requête SQL<br />\nRequête : <pre>". $sql ."</pre>\nCode d'erreur : ". mysql_errno() ."<br />\nMessage : ". mysql_error()); while ($donneesTV = mysql_fetch_array($afficheProduct)) { //et la j'affiche mes tvs } }
je suis complètement desespéré je ne vois pas pourquoi cela ne marche pas =(((

svp aidez moi

Mammouth du PHP | 19672 Messages

14 sept. 2010, 13:41

Peut-être bien tout simplement parce que tu ne conserves nulle-part les critères du premier tri.

Ce que tu pourrais faire : lorsque tu soumets le formulaire avec un tri particulier, tu pourrais, lors du renvoi de la page, ajouter dans le formulaire des champs cachés avec les valeurs des tris utilisés pour l'affichage courant.

Autre option : recharger ta page avec des liens qui comporteraient déjà les paramètres de tri actuellement affichés s'il y en a. Et dans ce cas, chaque lien pouvant avoir déjà été cliqué tu pourras ajouter l'ordre. Exemple, affichage de base, tu as donc les liens suivants :
<div id='tris'>
  <a href="/?order=marque">marque</a>
  <a href="/?order=avis">avis</a>
  <a href="/?order=prix">prix</a>
</div>
L'internaute clique sur le tri par Prix, les liens pourraient alors devenir :
<div id='tris'>
  <a href="/?order=prix&order2=marque">marque</a>
  <a href="/?order=prix&order2=avis">avis</a>
  <a href="/?order=prix&sensprix=desc">prix</a>
</div>
Lors du traitement des paramètres, tu peux alors déterminer les paramètres et le sens à ajouter dans ta clause ORDER BY.
C'est la piste que j'explorerais en premier lieux.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: