2016-10-02 3 views
2

У меня есть немного кода, который извлекает все результаты из базы данных и отображает те, которые имеют отношение к поиску пользователей. У меня есть еще один код, который подсчитывает количество элементов и генерирует определенное количество страниц в зависимости от того, сколько элементов относится к поиску пользователей. Проблема заключается в следующем. Если я все-таки выполняю поиск, мой код отображает все в базе данных на 11 страницах. Если я буду искать автомобиль, он все равно отобразит 11 страниц, но только 2 результата, которые содержат слово car в названии. Проблема в том, что эти результаты отображаются на восьмой странице, а все остальные страницы пусты. Во время поиска все два результата с автомобилем в заголовке отображаются на восьмой странице. Поиск осуществляется в соответствии с порядком, в котором находятся элементы, в базе данных. Вот мой текущий код:HTML и PHP pagination не работают правильно

   $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>"; 
        } 

Как я могу показывать только одну страницу с двумя результатами на нем вместо 11 страниц с двумя соответствующими результатами на восьмой странице? Спасибо

+0

Не получать все записи. Используйте только нужные записи и сопоставляйте результаты поиска. –

+0

Не используйте устаревшие функции 'mysql_ *'. Они устарели с PHP 5.5 и полностью удалены в PHP 7. Они также небезопасны. Вместо этого используйте MySQLi или PDO. –

+0

объясните, как это сделать мне, пожалуйста, – jack

ответ

0

Пожалуйста, обновите свой код, как показано ниже.
Но попробуйте использовать mysqli_ () в MySQL() являются depricted

$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 
} 
Смежные вопросы