无法将搜索结果与分页整合

时间:2015-07-05 09:38:06

标签: php pagination

我得到了分页控件,我的搜索结果显示5个结果很好。但是当我点击第二页时,所有搜索结果都会消失。即使我搜索的内容,数据库中也有超过5个结果。如果你愿意,请在一秒钟内看到更新代码。这是我的电子邮件芽以防万一:raminrahim [at] hotmail [dot] com请。谢谢。

<?php 
    $paginationCTRLS = '';
    $textline1 = '';
    $textline2 = '';
    $list = '';
    if (isset($_GET['search_item'])) {
        $search_item = $_GET['search_item'];
        if (!empty($search_item)) {
            if (strlen($search_item)>=3) {
              // This query is just to get total count of rows
              $query= "SELECT COUNT(item_id) FROM items";  // $sql
              $query_run = mysqli_query($mysqli, $query);  // $query
              $query_row = mysqli_fetch_row($query_run);     // $row
              // $rows: here we have the total row count
              $rows = $query_row[0]; // pgRows = row[]
              // This is the number of results we want displayed per page
              $page_rows = 5;
              // This tells us the page number of our last page
              $last = ceil($rows/$page_rows);
              // This makes sure last cannot be less than 1.
              if ($last < 1)
                    {
                        $last = 1;
                    }
              // Establish the $pagenum variables
              $pagenum = 1;
              // Get pagenum from URL vars if it present, else it is = 1
              if(isset($_GET['pn'])){
                $pagenum = preg_replace('#[^0-9]#', '', $_GET['pn']);
                    }
              if ($pagenum < 1) {
                    $pagenum = 1;
              } else if ($pagenum > $last) {
                            $pagenum = $last;
              }
              $limit = 'LIMIT ' .($pagenum - 1) * $page_rows .',' .$page_rows;
             $query = "SELECT `item_id`, `featured_Items` FROM `items` WHERE
                     `featured_Items` LIKE   
                     '%".mysql_real_escape_string($search_item)."%' $limit";
             $query_run = mysqli_query($mysqli, $query);
             $query_num_rows = mysqli_num_rows($query_run);
             if ($query_num_rows>=1) 
                 {
                   echo $query_num_rows. ' results found:<br>' . '<br>';
                   while ($query_row = mysqli_fetch_assoc($query_run)) 
                       {
                        echo $query_row['featured_Items'].'<br>' . '<hr>';
                       }
                  }
                  else
                    { 
                       echo 'No result found' . '<hr>';
                    } 
                } else {
                echo 'Not enough keywords to predict your search' . '<hr>';
                }
            }
    $textline1 = "Result:" .  '(<b>$rows</br>)';
    $textline2 = "Page <b>" . '$pagenum' . "</b> of <b>" . '$last' . "</b>";
    if ($last != 1){
       if ($pagenum > 1) {
         $previous = $pagenum - 1;
         $paginationCTRLS .= '<a href='.$_SERVER['PHP_SELF'].'?pn='.$previous.'">Back</a> &nbsp; &nbsp; ';

    for($i = $pagenum-4; $i < $pagenum; $i++){
         if($i>0){

                $paginationCTRLS .= '<a href="'.$_SERVER['PHP_SELF'].'?search_item='.$search_item.'&pn='.$i.'">'.$i.'</a> &nbsp; ';
               }
        }   
    }
    $paginationCTRLS .= ''.$pagenum.' &nbsp; ';

        for ($i = $pagenum+1; $i <= $last; $i++) {
                $paginationCTRLS .= '<a href="'.$_SERVER['PHP_SELF'].'?search_item='.$search_item.'&pn='.$i.'">'.$i.'</a> &nbsp; ';
             if($i >= $pagenum+4) {
                    break;
                }
         }
    if ($pagenum != $last) {
            $next = $pagenum +1;
            $paginationCTRLS .= '&nbsp; &nbsp; <a href="'.$_SERVER['PHP_SELF'].'?pn='.$next.'">Next</a> ';

        }
    }
    $list = '';
    while($row = mysqli_fetch_array($query_run, MYSQLI_ASSOC)) {
    $id = $row["item_id"];
    $availablesITEMS = $row["featured_Items"];
    $list .= '<p><a href="boxbar.php?id='.$id.'">'.$availablesITEMS.'</a><br>.</p>';
    }   
  }      
    echo $list . '<br/>'; 
    echo $paginationCTRLS . '<br/>';

?> 

1 个答案:

答案 0 :(得分:2)

您需要设置查询才能接受起点。 像这样:

LIMIT 0, 10

如果第一个数字对应于您将从中获取结果的起始行,则第二个数字等于您从该点开始获得的结果数量。 因此,就您的代码而言,您必须将其设置为:

$query = "SELECT `item_id`, `featured_Items` FROM `items` WHERE
                     `featured_Items` LIKE   
                     '%".mysql_real_escape_string($search_item)."%' 
                      LIMIT ".($pagenum-1)*5.",5";

如果这清楚了你的疑问,请告诉我。

编辑:

至于通过您的方式启用分页,只需将表单中的方法更改为GET语句即可。

<form action="your_page.php" method="get">

然后从您的代码中可以使用

$_GET['search_item'] 

方法而不是POST。这反过来使您可以在锚标记上使用这些变量进行分页。

$paginationCTRLS .= '<a href="'.$_SERVER['PHP_SELF'].'?search_item='.$search_item.'&pn='.$i.'">'.$i.'</a> &nbsp; ';`

EDIT2: 你有这段代码:

for($i = $pagenum-4; $i < $pagenum; $i++){
         if($i>0){
                $paginationCTRLS .= '<a href="'.$_SERVER['PHP_SELF'].'?search_item='.$search_item.'&pn='.$i.'">'.$i.'</a> &nbsp; ';
         }
}   

这将始终在任何时候输出相同数量的页面,即5。

现在你所需要的只是输出你真正需要的分页。例如,设置此变量:

$pages = ceil($row/$page_rows);

为您提供总页数,然后您可以迭代到它:

for($i = 1; $i <= $pages; $i++){
             if($i>0){
                    $paginationCTRLS .= '<a href="'.$_SERVER['PHP_SELF'].'?search_item='.$search_item.'&pn='.$i.'">'.$i.'</a> &nbsp; ';
             }
    }