2016-10-02 3 views
2

Ich habe ein bisschen Code, der alle Ergebnisse aus einer Datenbank abruft und diejenigen anzeigt, die für die Benutzersuche relevant sind. Ich habe etwas mehr Code, der die Anzahl der Elemente zählt und eine bestimmte Anzahl an Seiten generiert, basierend darauf, wie viele Elemente für die Benutzersuche relevant sind. Das Problem ist wie folgt. Wenn ich alles suche, zeigt mein Code auf 11 Seiten alles in der Datenbank an. Wenn ich nach einem Auto suche, werden immer noch 11 Seiten angezeigt, aber nur 2 Ergebnisse, die das Wort Auto im Titel haben. Das Problem ist, dass diese Ergebnisse auf der achten Seite angezeigt werden und alle anderen Seiten leer sind. Während der Suche werden alle zwei Ergebnisse mit Auto im Titel auf der achten Seite angezeigt. Die Suche basiert auf der Reihenfolge, in der sich die Elemente in der Datenbank befinden. Hier ist mein aktueller Code:HTML- und PHP-Paginierung funktioniert nicht richtig

   $pagesQuery = mysql_query("SELECT count(id) FROM(`posts`)"); 
       $pageNum = ceil(mysql_result($pagesQuery, 0)/5); 
       $start = (($page-1)*5); 


       $currentname = mysql_query("SELECT * FROM posts LIMIT $start, 5"); 
       while ($row = mysql_fetch_array($currentname)) { 
         //recieve relevant data. 
         $title = $row[0]; 
         $desc = $row[13]; 
         $ID = $row[6]; 
         $views = $row[3]; 
         $user = $row[7]; 
         //fetch the last id from accounts table. 
         $fetchlast1 = mysql_query("SELECT * FROM allaccounts WHERE id=(SELECT MAX(id) FROM allaccounts)"); 
         $lastrow1 = mysql_fetch_row($fetchlast1); 
         $lastid1 = $lastrow1[6]; 
         //acquire the username of postee. 
         for ($i1=1; $i1 <= $lastid1; $i1++) { 
          $currentname1 = mysql_query("SELECT * FROM allaccounts WHERE id=$user"); 
          while ($row1 = mysql_fetch_array($currentname1)) { 
           $username1 = $row1[0]; 
          } 
         } 

         //Format Title, description and view count. 
         $title2 = rtrim($title); 
         $donetitle = str_replace(" ", "-", $title2); 
         $url = "articles/".$ID."/".$donetitle.""; 

         $donetitle = strlen($title) > 40 ? substr($title,0,40)."..." : $title; 
         $donedesc = ''; 

         if(strlen($desc) > 150) { 
          $donedesc = explode("\n", wordwrap($desc, 150)); 
          $donedesc1 = $donedesc[0] . '...';       
         }else{ 
          $donedesc1 = $desc;       
         } 
         $finviews = number_format($views, 0, '.', ','); 

         //Give relevant results 
         if(stripos($title, $terms) !== false || stripos($desc, $terms) !== false || stripos($username1, $terms) !== false){ 
           if($row[10] == null){ 
            $SRC = "img/tempsmall.jpg"; 
           }else{ 
            $SRC ="generateThumbnailSmall.php?id=$ID"; 
           } 
           echo "<div id = \"feature\"> 

             <img src=\"$SRC\" alt = \"article thumbnail\" /> 
             </div> 
             <div id = \"feature2\"> 
              <a href= \"$url\" id = \"titletext\" alt = \"article title\">$donetitle</a> 
              <p id=\"resultuser\" >$username1</p> 
              <p id=\"resultp\">$donedesc1</p> 
              <a href = \"sendflag.php?title=$title&url=$url&id=$ID&userid=$user\" id = \"flag\" alt = \"flag\"><img src=\"img/icons/flag.png\"/></a><b id=\"resultview\">$finviews views</b> 

             </div> 
             <div id = \"border\"></div>"; 
         } 






       } 



        $totalPages = $pageNum; 
        $currentPage = $page; 
        $numPagesToShow = 10; 

        if($currentPage > $totalPages) { 
         $currentPage = $totalPages; 
        } 


        if($numPagesToShow >= $totalPages) { 
         $numMaxPageLeft = 1; 
         $numMaxPageRight = $totalPages; 
        } else { 
         $pagesToShow = ceil($numPagesToShow/2); 
         $numMaxPageLeft = $currentPage - $pagesToShow; 
         $numMaxPageRight = $currentPage + $pagesToShow; 

         if($numMaxPageLeft <= 0) { 
          $numMaxPageRight = $numMaxPageRight - $numMaxPageLeft +1; 
          $numMaxPageLeft = 1; 
         } elseif($numMaxPageRight >= $totalPages) { 
          $numMaxPageLeft -= ($numMaxPageRight - $totalPages); 
          $numMaxPageRight = $totalPages; 
         } 
        } 

        for ($i=$numMaxPageLeft; $i<=$numMaxPageRight; $i++) { 
         echo "<a id =\"pagenationlink\" href=\"searchresults.php?search=".$terms."&page=".$i."\">".$i."</a>"; 
        } 

Wie kann ich nur mit den beiden Ergebnissen auf sie statt 11 Seiten mit den beiden relevanten Ergebnissen auf der achten Seite eine Seite angezeigt werden? Danke

+0

depricted werden Sie alle Datensätze nicht holen. Holen Sie nur die relevanten Datensätze ab und stimmen Sie mit der Suche überein. –

+0

Verwenden Sie nicht die veralteten 'mysql_ *' -Funktionen. Sie sind seit PHP 5.5 veraltet und in PHP 7 vollständig entfernt worden. Sie sind auch unsicher. Verwenden Sie stattdessen MySQLi oder PDO. –

+0

erklären, wie man mir dies bitte – jack

Antwort

0

Bitte aktualisieren Sie Ihren Code wie folgt.
Aber versuchen mysqli_ verwenden () als mysql()

$cond = ""; 
if(!empty($_POST["search"])) 
{  
    $cond = " write your search condition " ; 
} 
$start = (($page-1)*5); 
$query = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM posts where $cond LIMIT $start, 5"); 
$TotalDataQuery = mysql_query("SELECT FOUND_ROWS() tot;"); 
$rsVal = mysql_fetch_array($pagesQuery); 
$pagesQuery = $rsVal['tot']; 
$pageNum = ceil($pagesQuery/5); 

while ($row = mysql_fetch_array($query)) { 
//continue your code 
}