ne soit pas désolé, j'ai parfois du mal a comprendre
ok, donc il faut que tu stock les choix de filtre. si le tri est fait coté serveur il faut enregistrer cela en session.
pour le moment tu regarde si tu as des infos dans $_POST pour générer les variables de tri, il faut que tu modifies ce comportement pour :
- affecter les infos de tri qui sont dans $_POST dans des variables de session ($_SESSION['xxx']) si les infos existent dans $_POST (comme tu le faire déjà surement)
- modifier la gestion du tri / prédicat pour utiliser les variables dans $_SESSION plutôt que $_POST (remplacer POST par SESSION au final

)
et voilà tu gardes la dernière recherche et peu la réutiliser à l'affichage

L'avantage de faire ainsi c'est que cela est déjà prêt pour la pagination XD (qui intervient après).
ensuite pour la pagination, as tu commencé quelque chose ?
il te faut le nombre de ligne maximal que tu peux afficher en tenant compte des filtres
select count(1) as nb from produits where truc =ww and machin = xx
il te faut le nombre de lige que tu affiche par page ($nbParPage)
le nombre de page c'est $nbpage = ceil($total/$nbParPage)
pour afficher la liste des page une simple boucle for de 1 à $nbpage
pour la requête il faudrait savoir ce que tu utilise comme sgbd, il y a des solutions différentes suivant le sgbd (mais globalement c'est avec with ou une sous requête et ensuite dense rank, rownum ....)
@+