2017-02-02 74 views
0

我在我的网站的标题中有搜索页面和搜索输入,当用户键入查询时,他将被引导至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

请参阅[如何接受答案的工作?](http://meta.stackoverflow.com/questions/5234/how-does-accepting-an-answer-work) – Quentin

回答

1

我将展示我自己项目的分页示例。我做了一些评论,但他们都是法文的,因为我是法文的,但我认为他们很容易翻译。我希望这能帮到您。我不认为你需要我的''configuraiton.php''这是本地服务器连接无论如何只是试图了解我的例子。噢,我的搜索是在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>'; 

?> 
+0

谢谢主席先生,我已经通过使用分页结果的功能解决了这个问题,它是这样的: HTTP:// pastebin.com/EmQBMb0J –

+0

欢迎你,不错! –

0

我觉得这种形式并不需要改变。你必须改变search.php文件(和显示结果的文件)。将限制添加到sql-query并将分页按钮添加到标记。像this

+0

是否有更简单的方法做这件事?我真的不明白这个代码! –

+0

恐怕\t有没有简单的方法)你能显示你的search.php文件吗? – questlooking

+0

这是我的search.php文件: http://pastebin.com/zXxy3zzR 注: 我已经改变了POST我的形式 –