简体   繁体   English

如何分页搜索结果?

[英]How to paginate search result?

I have search page and search input in the header of my website, and when the user types in the query he'll be directed to search.php and i'll display whatever the result the user wants. 我的网站标题中有搜索页面和搜索输入,当用户键入查询时,他将被定向到search.php,并且我将显示用户想要的任何结果。

But when I have a lot of result I becomes really hard to display or read those results, so I need to make a pagination.. 但是当我得到很多结果时,我真的很难显示或阅读这些结果,因此我需要进行分页。

I'm using a pagination function in my website, but its not working when I'm dealing with this search page, I think the reason of that because i'm sending the same query in every page.. so Its showing the results of the page 1 in all pages.. 我在网站上使用了分页功能,但是当我处理此搜索页面时,它无法正常工作,我认为原因是因为我在每个页面中都发送了相同的查询。所有页面中的第1页。

Can anyone please explain to me how to make pagination for search page? 有人可以向我解释如何对搜索页面进行分页吗? by showing 15 results per-page for example? 例如每页显示15条结果?

This is the search form that I have: 这是我的搜索表:

<form class="navbar-form navbar-left" action="search" method="POST">
<div class="form-group">
    <input type="search" name="searchFor" class="form-control" placeholder="Search for Articles" dir="auto"
        <?php
            echo isset($_POST['searchFor']) && !empty($_POST['searchFor']) ?
            'value="' .  htmlentities($_POST['searchFor']) . '"' : ''
        ?>
    >
</div>
<button type="submit" class="btn btn-default">Search</button>

I will show my example of pagination of my own project. 我将展示我自己项目的分页示例。 I did put some commentary but they are in french because im french but i think they will be easy to translate . 我确实发表了一些评论,但它们是法语的,因为我是法语,但我认为它们会很容易翻译。 I hope this will help you. 我希望这能帮到您。 I don't think you need my ''configuraiton.php'' it's for the local server connection anyway just try to understand my example . 我认为您不需要我的``configuraiton.php''还是用于本地服务器连接,只要尝试理解我的示例即可。 Ow and my search is on 3 criterion that's why i have a switch and case . 噢,我的搜索基于3条标准,这就是为什么我要换个箱子。

//This is foncitons.php purpose limit items and create page for pagination 

    <?php

if(isset($_GET['limite'])) 

    $limite=$_GET['limite'];
else   $limite=0;

function verifLimite($limite,$total,$nombre) {

 if(is_numeric($limite)) {

    if(($limite >=0) && ($limite <= $total) && (($limite%$nombre)==0)) {

       $valide = 1;

   }    

   else {

       $valide = 0;

   }

}

else {


    $valide = 0;

}

return $valide;

}


function displayNextPreviousButtons($nb,$page,$total,$limite) {
    $limiteSuivante = $limite + $nb;
    $limitePrecedente = $limite - $nb;


    echo  '<nav><ul class="pagination">'."\n";

    if($limite != 0) {
        echo '<li><a href="'.$page.'?limite='.$limitePrecedente.'" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>';
    }
    $nbpages=ceil($total/$nb);
    $numeroPages = 1;
    $compteurPages = 1;
    $limite  = 0;
    while($numeroPages <= $nbpages) {
        echo '<li><a href = "'.$page.'?limite='.$limite.'">'.$numeroPages.'</a></li>'."\n";
        $limite = $limite + $nb;
        $numeroPages = $numeroPages + 1;
        $compteurPages = $compteurPages + 1;
        if($compteurPages == 10) {
            $compteurPages = 1;
        }
    }


    if($limiteSuivante < $total) {
        echo '<li><a href="'.$page.'?limite='.$limiteSuivante.'" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>';
    }


    echo '</ul></nav>'."\n";
}

 ?>

This my search page for cars . 这是我的汽车搜索页面。

<?php

// Variables de connexion
include("configuration.php");

// Fonctions AffichePages, Bouton Suivant/Précédent, VérifLimite
include ("fonctions.php");

// Connexion à la base
$link = mysqli_connect($hote,$login,$pass,$base);






// Nombre d'entrées par page
$nombre=6;

// Au début limite inférieur = 0
if (!$limite) 
{
  $limite = 0;
}

// On recherche le lien de la page
$path_parts = pathinfo($_SERVER['PHP_SELF']);

$page = $path_parts["basename"];


// On vérifie si on a effectué une recherche et on compte le nombre de données a retourner
if (((isset($_REQUEST["marque"])) && ($_REQUEST["marque"] !="")) || ((isset($_REQUEST["modele"])) && ($_REQUEST["modele"] !=""))) {

  // Si on a effectué la recherche, on stock 
  $nom=$_REQUEST["marque"];
  $categorie=$_REQUEST["modele"];

  // On remplace les accents dans la variable $nom avec les codes appropriés
  $nom=str_replace("é", "&eacute", $nom);
  $nom=str_replace("è", "&egrave", $nom);
  $nom=str_replace("ê", "&ecirc", $nom);
  $nom=str_replace("à", "&agrave", $nom);
  $nom=str_replace("â", "&acirc", $nom);
  $nom=str_replace("ç", "&ccedil", $nom);


  if($nom !=""){
    $choix=1;
  }
  if($categorie !=""){
    $choix=2;
  }
  if($nom !="" and $categorie !=""){
    $choix=3;
  }
  Switch($choix){
   case 1:

   $sqlcount = "SELECT COUNT(*) FROM voitures WHERE marque LIKE '%$nom%'";
   $result = mysqli_query($link,$sqlcount);
   $row = mysqli_fetch_row($result);
   $total = $row[0];

            // On calcule la limite
   $verifLimite= verifLimite($limite,$total,$nombre);

   if(!$verifLimite)  {

    $limite = 0;

  }

            // On va lire les données de la table
  $sql = "SELECT idvoitures, marque, modele, LEFT(details,70), images, annee, lien, kilometrage, puissance, couleur FROM voitures WHERE marque LIKE '%$nom%' ORDER BY marque, modele LIMIT $limite, $nombre";
  break;

  case 2:
  $sqlcount = "SELECT COUNT(*) FROM voitures WHERE modele LIKE '$categorie'";
  $result = mysqli_query($link,$sqlcount);
  $row = mysqli_fetch_row($result);
  $total = $row[0];

            // On calcule la limite
  $verifLimite= verifLimite($limite,$total,$nombre);

  if(!$verifLimite)  {

    $limite = 0;

  }

            // On va lire les données de la table
  $sql = "SELECT idvoitures, marque, modele, LEFT(details,70), images, annee, lien, kilometrage, puissance, couleur FROM voitures WHERE modele LIKE '%$categorie%' ORDER BY marque, modele LIMIT $limite, $nombre";
  break;

  case 3:
  $sqlcount = "SELECT COUNT(*) FROM voitures WHERE marque LIKE '%$nom%' and modele LIKE '%$categorie%'";
  $result = mysqli_query($link,$sqlcount);
  $row = mysqli_fetch_row($result);
  $total = $row[0];

              // On calcule la limite
  $verifLimite= verifLimite($limite,$total,$nombre);

  if(!$verifLimite)  {

    $limite = 0;

  }

              // On va lire les données de la table
  $sql = "SELECT idvoitures, marque, modele, LEFT(details,70), images, annee, lien, kilometrage, puissance, couleur FROM voitures WHERE marque LIKE '%$nom%' and modele LIKE '%$categorie%' ORDER BY marque, modele LIMIT $limite, $nombre";

  break;
}

}

else
{
  $sqlcount = 'SELECT COUNT(*) FROM voitures';
  $result = mysqli_query($link,$sqlcount);
  $row = mysqli_fetch_row($result);

  $total = $row[0];

  // On calcule la limite
  $verifLimite= verifLimite($limite,$total,$nombre);

  if(!$verifLimite)  {

    $limite = 0;

  }

  // On va lire les données de la table
  $sql = "SELECT idvoitures, marque, modele, LEFT(details,70), images, annee, lien, kilometrage, puissance, couleur FROM voitures ORDER BY marque, modele LIMIT $limite, $nombre";
}







$result = mysqli_query($link,$sql);

echo '<div class="container">';
echo '<div class="row">';

// Variable qui compte le nombre d'affichage par rangée
$i = 0;
// On affiche les résultats à travers la boucle
if($total) {

  while($row = mysqli_fetch_array($result)) {

    $idvoitures=$row["idvoitures"];
    $marque=$row["marque"];
    $modele=$row["modele"];
    $details=$row["LEFT(details,70)"];
    $images=$row["images"];
    $couleur=$row["couleur"];
    $annee=$row["annee"];
    $kilometrage=$row["kilometrage"];
    $lien=$row["lien"];

    // On affiche 3 par rangée -> après chaque trois affichages on met une nouvelle rangée
    // if (($i%3 == 0) && ($i != 0))
    // {
    //   echo '<div class="row">';
    // }

    echo '<div class="col-md-4">';
    echo "<div class=\"view view-forth\">";
    echo "<img class=\"thumb\" src=\"images/$images\" />";
    echo "<div class=\"mask\">";
    echo "<h2>$marque $modele</h2>";
    echo "<p>$details...</p>";
    echo "<a href=\"afficheVoiture.php?id=$idvoitures\" class=\"info\">Découvrir</a>";
    echo "</div>";
    echo "</div>";
    echo "</div>";

    // On ferme la balise div à chaque fois qu'on crée une nouvelle rangée
    // if (($i%3 == 0) && ($i != 0))
    // {
    //   echo '</div>';
    // }

  }
}
echo '</div>';
echo '</div>';

?>

I think this form does not need changes. 我认为此表格不需要更改。 You have to change search.php file (and file which show results). 您必须更改search.php文件(以及显示结果的文件)。 Add limit to sql-query and add pagination buttons to markup. 将限制添加到sql-query并将分页按钮添加到标记。 Like this . 这样

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM