2015-07-05 35 views
-1

我得到了分页控件,我的搜索结果显示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/>'; 

?> 
+0

能否请您以更一致的缩进重写代码?现在很难跟踪。谁知道,你甚至可能在这个过程中发现错误。 – Anders

+0

当然,请等待一秒,我现在就编辑它。 –

+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; '; 
      } 
    } 
+0

我会在for循环中检查您的paginationCTRLS声明中的引号;) –

+0

@Ramin Rahimi,只是一个问题,但在第二页上,您如何传递POST值?我似乎无法在您的代码中看到它。除非存在,否则什么也不会发生,因为它甚至不会超过第一个“if”声明。 –

+0

右对。所以你知道我该如何解决这个问题?因为你的权利我认为我没有通过岗位价值。 –