2015-07-05 38 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

右對。所以你知道我該如何解決這個問題?因爲你的權利我認爲我沒有通過崗位價值。 –