2017-02-02 2 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», это для подключения к локальному серверу, просто попробуйте понять мой пример. Ow и мой поиск по 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-запрос и добавьте кнопки разбиения на страницы для разметки. Мне нравится this.

+0

Есть ли более простой способ сделать это? Я не очень понимаю этот код! –

+0

Боюсь, что \t не проще), можете ли вы показать свой файл search.php? – questlooking

+0

Это мой search.php файл: http://pastebin.com/zXxy3zzR . Примечание: Я изменил POST на GET в моей форме –

Смежные вопросы