Pagination sur recherche...

Fermé
barale61 Messages postés 1192 Date d'inscription jeudi 13 septembre 2012 Statut Membre Dernière intervention 17 avril 2024 - 22 mars 2016 à 17:43
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 1 avril 2016 à 18:59
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.

<?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:

5 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 24/03/2016 à 14:20
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
0
barale61 Messages postés 1192 Date d'inscription jeudi 13 septembre 2012 Statut Membre Dernière intervention 17 avril 2024 110
24 mars 2016 à 17:59
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.

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.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
29 mars 2016 à 11:50
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 ?
0
barale61 Messages postés 1192 Date d'inscription jeudi 13 septembre 2012 Statut Membre Dernière intervention 17 avril 2024 110 > Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022
1 avril 2016 à 18:58
J'ai fait ça je pense que c'est bon car je n'ai pas d'erreur. Et pour le reste j'ai essayé de mettre le résultat de ma recherche dans ma pagination mais sans résultat.
0
barale61 Messages postés 1192 Date d'inscription jeudi 13 septembre 2012 Statut Membre Dernière intervention 17 avril 2024 110
30 mars 2016 à 00:49
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.
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
30 mars 2016 à 00:55
Bonjour,


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 ?


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
barale61 Messages postés 1192 Date d'inscription jeudi 13 septembre 2012 Statut Membre Dernière intervention 17 avril 2024 110
1 avril 2016 à 18:43
Cette page contient:

			<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.
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
1 avril 2016 à 18:59
Ce code peut être plus proprement écrit comme ceci :
<?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.
0