Pagination sur recherche...
barale61
Messages postés
1214
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'essai de paginer une recherche. Ma pagination fonctionne bien sur une sélection simple mais sur une recherche, elle me liste tous les résultats de la table et lorsque je clique sur un numéro de page, ma recherche "s'efface" et n'est pas transmise sur la prochaine page.
Je ne m'y prends sans doute pas de la bonne façon.
Je vous remercie de votre aide.
J'essai de paginer une recherche. Ma pagination fonctionne bien sur une sélection simple mais sur une recherche, elle me liste tous les résultats de la table et lorsque je clique sur un numéro de page, ma recherche "s'efface" et n'est pas transmise sur la prochaine page.
Je ne m'y prends sans doute pas de la bonne façon.
Je vous remercie de votre aide.
<?php include 'connexion.php'; /////////////////////////////// DEBUT RECHERCHE ////////////////////////////// function recherche_par_mots_cles($search) { ///////////////////////// DEBUT FONCTION PAGINATION ////////////////////////// include 'fonctions/pagination.func.php'; ///////////////////////// DEBUT FONCTION PAGINATION ////////////////////////// global $connexion; // $where = ""; $search = preg_split('/[\s\-]/' ,$search); $count_keywords = count($search); foreach ($search as $key => $searches) { $where .= "article LIKE '%$searches%' OR description LIKE '%$searches%'"; if ($key != ($count_keywords-1)) { $where .= " AND "; } } $query = mysqli_query($connexion, "SELECT * FROM articles WHERE $where ORDER BY id ASC LIMIT $premierDeLaPage, $parPage")or exit(mysqli_error($connexion)); $rows = mysqli_num_rows($query); if ($rows) { while ($article = mysqli_fetch_assoc($query)) { echo " <p><div class=\"row\"> <div class=\"col l12 m12 s12\"> <a href=index.php?page=articles&id=".$article['id'].">".$article['article']."</a> <br> <u>Description:</u><br> ".$article['description']." <br> Prix: ".$article['prix']."€ </div> </div></p> "; } ////////////////////////// DEBUT BODY PAGINATION /////////////////////////// include 'body/pagination.inc.php'; ////////////////////////// FIN BODY PAGINATION ///////////////////////////// } else { echo "<p>Pas de résultat !</p>"; } } /////////////////////////////// FIN RECHERCHE ////////////////////////////// ?>
A voir également:
- Pagination sur recherche...
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Pagination powerpoint - Guide
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Recherche photo - Guide
- Je recherche une chanson - Guide
5 réponses
Salut,
Comment sont définies les critères de recherche (variable $search) ?
Si les critères sont récupérés depuis les paramètres de l'URL ($_GET), il est normal que ces critères ne soit pas transmis puisque les URLs de la pagination de contiennent pas ces paramètres.
Une solution possible est donc d'ajouter le ou les paramètres correspondant aux critères de recherche dans les URLs de la pagination.
Une autre solution est d'enregistrer les critères de recherche dans une session php afin de pouvoir les transmettre sur les autres pages.
Pour info, les fonctions mysql_* sont obsolètes et supprimées depuis PHP7, il faudrait idéalement passer à mysqli ou PDO.
Pour info bis, tes requêtes ne sont pas protégées contre les injections sql.
Bonne journée
Comment sont définies les critères de recherche (variable $search) ?
Si les critères sont récupérés depuis les paramètres de l'URL ($_GET), il est normal que ces critères ne soit pas transmis puisque les URLs de la pagination de contiennent pas ces paramètres.
Une solution possible est donc d'ajouter le ou les paramètres correspondant aux critères de recherche dans les URLs de la pagination.
Une autre solution est d'enregistrer les critères de recherche dans une session php afin de pouvoir les transmettre sur les autres pages.
Pour info, les fonctions mysql_* sont obsolètes et supprimées depuis PHP7, il faudrait idéalement passer à mysqli ou PDO.
Pour info bis, tes requêtes ne sont pas protégées contre les injections sql.
Bonne journée
Salut,
Tout est en mysqli puisque je n'ai que php7 sur WAMP. Pour les injections, j'ai ajouté htmlspecialchars et là, je pense que c'est bon.
Pour le reste, je ne trouve rien sur le net à ce sujet et j'ai pourtant suivi PHP Mysql sur Open classroom mais c'est loin d'être suffisamment complet.
Je vais chercher si je peux trouver sur des forums.
Tout est en mysqli puisque je n'ai que php7 sur WAMP. Pour les injections, j'ai ajouté htmlspecialchars et là, je pense que c'est bon.
while ($article = mysqli_fetch_assoc($query)) { echo " <p><div class=\"row\"> <div class=\"col l12 m12 s12\"> <a href=index.php?page=articles&id=".htmlspecialchars($article['id']).">".htmlspecialchars($article['article'])."</a> <br> <u>Description:</u><br> ".htmlspecialchars($article['description'])." <br> Prix: ".htmlspecialchars($article['prix'])."€ </div> </div></p> "; }
Pour le reste, je ne trouve rien sur le net à ce sujet et j'ai pourtant suivi PHP Mysql sur Open classroom mais c'est loin d'être suffisamment complet.
Je vais chercher si je peux trouver sur des forums.
La fonction htmlspecialchars() permet d'échapper les caractères réservés au HTML lors de l'affichage de données dans un document html et permet d'éviter les injections de script (faille xss), ce que tu as bien fais.
Ceci est par contre différent des injections sql. Avec mysqli, il faut utiliser la fonction mysqli_real_escape_string() pour échapper les caractères réservés au SQL lors de la concaténation de variable dans une requête sql.
Qu'en est-il du problème initial ? As tu réussi à transmettre le critère de recherche via un paramètre GET ou la session PHP ?
Ceci est par contre différent des injections sql. Avec mysqli, il faut utiliser la fonction mysqli_real_escape_string() pour échapper les caractères réservés au SQL lors de la concaténation de variable dans une requête sql.
Qu'en est-il du problème initial ? As tu réussi à transmettre le critère de recherche via un paramètre GET ou la session PHP ?
J'ai bien essayé de créer une session et de la remplir avec la recherche et en fait ça fonctionne pas très bien.
Bonjour,
Donc via ton code de pagination ?
... mais... que contient cette page ? (le code...)
C'est à dire ??? Tu pourrais être plus précis ? En quoi cela ne fonctionne t'il pas très bien selon toi ?
Quel code as tu écris ?
lorsque je clique sur un numéro de page, ma recherche "s'efface"
Donc via ton code de pagination ?
include 'body/pagination.inc.php';
... mais... que contient cette page ? (le code...)
J'ai bien essayé de créer une session et de la remplir avec la recherche et en fait ça fonctionne pas très bien
C'est à dire ??? Tu pourrais être plus précis ? En quoi cela ne fonctionne t'il pas très bien selon toi ?
Quel code as tu écris ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Cette page contient:
Dans la session cela me renvoie bien les mots clés saisis.
<ul class="pagination"> <li class="<?php if ($pageCourrante == '1'){ echo "disabled";}?>"><a href="?page=recherche&numeroPage=<?php if ($pageCourrante !='1'){ echo $pageCourrante-1;}else { echo $pageCourrante;}?>">«</a></li> <?php for($i=1;$i<=$nbPage;$i++) { if($i==$pageCourrante) { ?> <li class="active"><a href="?page=recherche&numeroPage=<?php echo $i ?>"><?php echo $i ?></a></li> <?php }//Si ce n'est pas la page actuelle on enlève la classe active else { ?> <li><a href="?page=recherche&numeroPage=<?php echo $i ?>"><?php echo $i ?></a></li> <?php } ?> <li></li> <?php } ?> <li class="<?php if ($pageCourrante == $nbPage){ echo "disabled";}?>"><a href="?page=recherche&numeroPage=<?php if ($pageCourrante !=$nbPage){ echo $pageCourrante+1;}else { echo $pageCourrante;}?>">»</a></li> </ul>
Dans la session cela me renvoie bien les mots clés saisis.
Ce code peut être plus proprement écrit comme ceci :
Maintenant il reste à ce que tu nous montres le code contenant tes variables de session... (en gros ... le code COMPLET ) de ta page pour qu'on puisse essayer de comprendre ce qui ne fonctionne pas.
<?php // les variables : $disabled1 = $pageCourrante == '1' ? "disabled" : ""; $disabled2 = $pageCourrante == $nbPage ? "disabled" : ""; $prev = $pageCourrante !='1' ? $pageCourrante-1 : $pageCourrante; $next = $pageCourrante !=$nbPage ? $pageCourrante+1 : $pageCourrante; //tu mendu : echo "<ul class='pagination'> <li class='$disabled1'> <a href='?page=recherche&numeroPage=$prev'>«</a> </li>"; for($i=1;$i<=$nbPage;$i++) { $clas = $i==$pageCourrante ? "active" : ""; echo "<li class='$clas'> <a href='?page=recherche&numeroPage=$i'>$i</a> </li>"; echo "<li></li>"; } echo "<li class='$disabled2'> <a href='?page=recherche&numeroPage=$next'>»</a> </li>"; echo "</ul>"; ?>
Maintenant il reste à ce que tu nous montres le code contenant tes variables de session... (en gros ... le code COMPLET ) de ta page pour qu'on puisse essayer de comprendre ce qui ne fonctionne pas.