2017-06-12 32 views
0

我試圖2個月此代碼我嘗試修改輸出限制分頁 但對我不起作用每次如何限制從Mysqli搜索這個代碼的分頁php?

<?php 
         ini_set('display_errors', 1); 
         error_reporting(~0); 

         $strKeyword = null; 

         if (isset($_POST["txtKeyword"])) { 
          $strKeyword = $_POST["txtKeyword"]; 
         } 
         if (isset($_GET["txtKeyword"])) { 
          $strKeyword = $_GET["txtKeyword"]; 
         } 
         ?> 

include('condb.php'); 
          $sql  = "SELECT *FROM an_files WHERE (f_episode LIKE '%" . $strKeyword . "%' or f_name LIKE '%" . $strKeyword . "%')"; 
          $query = mysqli_query($con, $sql); 
          $num_rows = mysqli_num_rows($query); 
          $per_page = 5; // Per Page 
          $page  = 1; 

          if (isset($_GET["Page"])) { 
           $page = $_GET["Page"]; 
          } 

          $prev_page = $page - 1; 
          $next_page = $page + 1; 

          $row_start = (($per_page * $page) - $per_page); 
          if ($num_rows <= $per_page) { 
           $num_pages = 1; 
          } else if (($num_rows % $per_page) == 0) { 
           $num_pages = ($num_rows/$per_page); 
          } else { 
           $num_pages = ($num_rows/$per_page) + 1; 
           $num_pages = (int) $num_pages; 
          } 
          $row_end = $per_page * $page; 
          if ($row_end > $num_rows) { 
           $row_end = $num_rows; 
          } 

          $sql .= "ORDER BY f_date DESC LIMIT $row_start ,4 "; 
          $query = mysqli_query($con, $sql); 

      <form class="form-search" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post"> 
           <table border="0" align="right" width="100%"> 
            <tr> 
             <td style="border: hidden; text-align: right"> 
              <input placeholder="Searth" type="text" 
                class="input-medium search-query" name="txtKeyword" id="txtKeyword"> 
              <button type="submit" class="btn">Search</button> 
             </td> 
            </tr> 
           </table> 
          </form> 

    <div class="pagination"> 

              <?php 
              if ($prev_page) { 
               echo " <a href='$_SERVER[SCRIPT_NAME]?Page=$prev_page&txtKeyword=$strKeyword'><< Back</a> "; 
              } 

              for ($i = 1; $i <= $num_pages; $i ++) { 
               if ($i != $page) { 
                echo "<a href='$_SERVER[SCRIPT_NAME]?Page=$i&txtKeyword=$strKeyword'>$i</a> "; 
               } else { 
                echo "<a class='active'><b> $i </b></a>"; 
               } 
              } 


              if ($page != $num_pages) { 
               echo " <a href ='$_SERVER[SCRIPT_NAME]?Page=$next_page&txtKeyword=$strKeyword'>Next>></a> "; 
              } 
              ?> 
             </div> 

這一點出1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

我想輸出1 2 3 4 5 6 7 8 9 10 ... 20

我怎麼能修改此代碼謝謝

回答

0

你需要使用MySQL的LIMIT的組合和OFFSET。我看到您使用的是LIMIT,但沒有OFFSET,您將繼續獲得相同的結果。

這裏有一個簡單的文章,得到的想法:LIMIT and OFFSET SQL Pagination

假設你有1000條記錄,在您的an_files表,要在每頁一次顯示25。您的查詢應該成爲這樣的事:

"SELECT * FROM an_files 
WHERE 
    f_episode LIKE '%mykeyword%' 
    OR 
    f_name LIKE '%anotherkeyword%' 
ORDER BY f_date DESC 
LIMIT " . $per_page . " " . 
"OFFSET " . (0 * ($page_num - 1)) 

現在,所有你需要做的就是通過$per_page量PHP還有$ PAGE_NUM(頁碼)。我們從頁碼減去1,因爲我們通常不會在現實生活中使用「零指數」頁碼,所以當用戶點擊第1頁的鏈接,並且您發送$page_num = 1到後端, 而不會減去您將抵消通過一個記錄,所以你永遠不會拿到第一個記錄,因此以1

所以減去的頁碼,如果我想看到從第6頁的結果,例如,你最終的查詢翻譯爲:

SELECT * FROM an_files 
WHERE 
    f_episode LIKE '%mykeyword%' 
    OR 
    f_name LIKE '%anotherkeyword%' 
ORDER BY f_date DESC 
LIMIT 25 
OFFSET 125 

這將顯示下面的25條記錄第012條記錄產生的SELECT * FROM an_files WHERE f_episode LIKE '%mykeyword%' OR f_name LIKE '%anotherkeyword%' ORDER BY f_date DESC

  • 1-25:第1頁
  • 26-50:第2頁
  • 51-75:
  • 第3頁
  • 76-100:第4頁
  • 101-125:第5頁
  • 126-150:第6頁

現在,如果你想生成的所有記錄的總數,因此您可以生成分頁鏈接,我建議做一個獨立的新查詢返回你的記錄數的基本查詢:

SELECT COUNT(*) FROM an_files WHERE f_episode LIKE '%mykeyword%' OR f_name LIKE '%anotherkeyword%'; 

所以在這種情況下,如果您的an_files表中有1000條記錄,則結果應爲1000

+0

你能完整修改這段代碼嗎?我真的不知道這很難工作 – Comingsoon