如何分页搜索结果?

时间:2017-02-02 07:40:16

标签: php pagination

我的网站标题中有搜索页面和搜索输入,当用户输入查询时,他会被定向到search.php,我会显示用户想要的结果。

但是当我有很多结果时,我很难显示或阅读这些结果,所以我需要做一个分页..

我在我的网站上使用了分页功能,但是当我处理这个搜索页面时它不起作用,我认为原因是因为我在每个页面都发送相同的查询..所以它的显示所有页面中第1页的结果..

有人可以向我解释如何为搜索页面分页吗?例如,每页显示15个结果?

这是我的搜索表单:

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

2 个答案:

答案 0 :(得分:1)

我将展示我自己项目分页的例子。我确实做了一些评论,但他们是法语,因为我是法国人,但我认为他们很容易翻译。我希望这能帮到您。我不认为你需要我的&#39; configuraiton.php&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&#39;&nbsp;它本地服务器连接无论如何只是试图理解我的例子。我和我的搜索符合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";
}

 ?>

这是我的汽车搜索页面。

<?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>';

?>

答案 1 :(得分:0)

我认为此表格不需要更改。您必须更改search.php文件(以及显示结果的文件)。添加对sql-query的限制并将分页按钮添加到标记。与this一样。