我的网站标题中有搜索页面和搜索输入,当用户输入查询时,他会被定向到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>
答案 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">«</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">»</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("é", "é", $nom);
$nom=str_replace("è", "è", $nom);
$nom=str_replace("ê", "ê", $nom);
$nom=str_replace("à", "à", $nom);
$nom=str_replace("â", "â", $nom);
$nom=str_replace("ç", "ç", $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一样。