Problème pagination PHP
Fermé
MaXDurand
Messages postés
14
Date d'inscription
samedi 1 octobre 2016
Statut
Membre
Dernière intervention
25 janvier 2017
-
3 oct. 2016 à 17:51
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 5 oct. 2016 à 09:17
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 5 oct. 2016 à 09:17
A voir également:
- Problème pagination PHP
- Easy php - Télécharger - Divers Web & Internet
- Pagination powerpoint - Guide
- Sommaire avec pagination - Guide
- Get_magic_quotes_gpc php 8 ✓ - Forum PHP
- Pagination excel plusieurs feuilles ✓ - Forum Excel
2 réponses
elgazar
Messages postés
5841
Date d'inscription
mercredi 30 octobre 2013
Statut
Membre
Dernière intervention
17 mars 2021
1 325
3 oct. 2016 à 18:15
3 oct. 2016 à 18:15
c'est le lien vers la page 2 qui n'est pas bon, cela devrait être quelque chose dans ce style
www.tonsite.fr/recherche/page/2/?s=terme
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
4 oct. 2016 à 14:11
4 oct. 2016 à 14:11
Salut,
Le problème semble venir du fait que tu utilises les paramètres POST pour stocker les critères de recherche. Cela fonctionne donc correctement lorsque les paramètres POST sont remplis, c-a-d lorsque tu valide la recherche, néanmoins en cliquant ensuite sur le lien vers la page2, les paramètres POST sont alors vide (normal puisqu'il n'y a pas d'envoi de formulaire).
Une solution possible est d'enregistrer les critères de recherche dans des variables de session PHP puis d'utiliser ces variables de session pour effectuer la requête sql. Puisque les variables de session sont conservés entre les pages, la page 2 affichera alors correctement les résultats avec les critères validé lors de la validation du formulaire sur la page 1.
Bonne journée,
Le problème semble venir du fait que tu utilises les paramètres POST pour stocker les critères de recherche. Cela fonctionne donc correctement lorsque les paramètres POST sont remplis, c-a-d lorsque tu valide la recherche, néanmoins en cliquant ensuite sur le lien vers la page2, les paramètres POST sont alors vide (normal puisqu'il n'y a pas d'envoi de formulaire).
Une solution possible est d'enregistrer les critères de recherche dans des variables de session PHP puis d'utiliser ces variables de session pour effectuer la requête sql. Puisque les variables de session sont conservés entre les pages, la page 2 affichera alors correctement les résultats avec les critères validé lors de la validation du formulaire sur la page 1.
Bonne journée,
MaXDurand
Messages postés
14
Date d'inscription
samedi 1 octobre 2016
Statut
Membre
Dernière intervention
25 janvier 2017
4 oct. 2016 à 17:50
4 oct. 2016 à 17:50
Merci beaucoup pour cette solution. En revanche aurais-tu un exemple de code car si je comprends tout à fait le concept, sur la pratique je sèche un peu :)
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
5 oct. 2016 à 09:17
5 oct. 2016 à 09:17
Il faut commencer par ouvrir la session php avec l'instruction session_start() pour pouvoir utiliser les variables de session.
Ensuite à la soumission du formulaire (donc lorsque $_POST['rechercher'] est définie, isSet), on enregistre les critères de recherches passés en post en session.
Enfin, que le formulaire soit envoyé ou non (donc en dehors de la condition
"if (isset($_POST['rechercher']))", on construit la requête préparée à partir des critères en session).
Petites remarques complémentaires :
- évite l'utilisation de la fonction extract() qui peut être dangereuse, récupère directement les paramètres attendus
- htmlentities() devrait être utilisée uniquement lors de l'affichage des données dans le document html, pas avant l'utilisation des données dans une requête sql
- attention aux injections sql, puisque tu utilises PDO, tu devrais utiliser une requête préparée avec des marqueurs ou la méthode PDO::quote() pour éviter les injections sql
Ensuite à la soumission du formulaire (donc lorsque $_POST['rechercher'] est définie, isSet), on enregistre les critères de recherches passés en post en session.
Enfin, que le formulaire soit envoyé ou non (donc en dehors de la condition
"if (isset($_POST['rechercher']))", on construit la requête préparée à partir des critères en session).
session_start(); if (isset($_POST['rechercher'])) { // extract($_POST); $_SESSION['pseudonyme'] = $_POST['pseudonyme']; $_SESSION['age'] = $_POST['age']; $_SESSION['sexe'] = $_POST['sexe']; } // construction de la requête préparée if (!empty($_SESSION['pseudonyme'])) { $choix[] = "pseudonyme = '$pseudonyme'";} if (!empty($_SESSION['age'])) { $choix[] = "age = '$age'";} if (!empty($_SESSION['sexe'])) { $choix[] = "sexe = 'sexe'";} $critere = implode(' AND ', $choix); $requete = ma requête préparée
Petites remarques complémentaires :
- évite l'utilisation de la fonction extract() qui peut être dangereuse, récupère directement les paramètres attendus
- htmlentities() devrait être utilisée uniquement lors de l'affichage des données dans le document html, pas avant l'utilisation des données dans une requête sql
- attention aux injections sql, puisque tu utilises PDO, tu devrais utiliser une requête préparée avec des marqueurs ou la méthode PDO::quote() pour éviter les injections sql
3 oct. 2016 à 18:36
Merci pour ta réponse
4 oct. 2016 à 09:33
tu dis que tu ne peut pas passer de la page 1 à la page 2 dans la pagination mais que si tu tapes directement l'url de la page 2, tu accèdes aux résultats normaux
donc qu'est qui est différent entre l'url que tu tapes et celle qui s'affiche dans la pagination ?
4 oct. 2016 à 11:44
En revanche si je fais la même recherche alors que je suis sur la page 2 il va m'afficher la suite logique des résultats à partir du 16ème résultat.