2010-06-02 63 views
1

我想創建一個分頁,其中有5個項目一次取決於數據庫中的項目數。我寫了這段代碼。但我DONO如何去更好地buggy..any分頁或進一步改變。其本使用php與mysql數據分頁

<?php 

$myresult .= "<div class='pagination' >"; 

if ($pagenum == 1) 
{ 
} 
else 
{ 
$pagenum = 1; 
$myresult .= "<a href='javascript:newPage(\"".$pagenum."\")'>&nbsp;first&nbsp;</a>"; 

$myresult .= " "; 

$previous = $pagenum-1; 
$myresult .= "<a href='javascript:newPage(\"".$previous."\")'> &nbsp;Prev&nbsp;</a>"; 

if ($pagenum == $last) 
{ 

$previous3 = $pagenum-4; 
$myresult .= "<a href='javascript:newPage(\"".$previous3."\")'> &nbsp; $previous3 &nbsp;</a>"; 

$previous2 = $pagenum-3; 
$myresult .= "<a href='javascript:newPage(\"".$previous2."\")'> &nbsp; $previous2 &nbsp;</a>"; 
} 
if ($pagenum > 2) 
{ 
$previous1 = $pagenum-2; 
$myresult .= "<a href='javascript:newPage(\"".$previous1."\")'> &nbsp; $previous1 &nbsp;</a>"; 

} 
if ($pagenum > 1) 
{ 

$previous2 = $pagenum-1; 
$myresult .= "<a href='javascript:newPage(\"".$previous2."\")'> &nbsp; $previous2 &nbsp;</a>"; 
$myresult .= " "; 

} 



} 

$myresult .= "<span class=\"disabled\"> $pagenum </span>"; 



if ($pagenum == $last) 
{ 
} 
else { 

if($pagenum < $last - 1) 
{ 
$next = $pagenum+1; 
$myresult .= "<a href='javascript:newPage(\"".$next."\")'>&nbsp; $next &nbsp;</a>"; 
} 
if($pagenum < $last - 2) 
{ 
$next1 = $pagenum+2; 
$myresult .= "<a href='javascript:newPage(\"".$next1."\")'> &nbsp; $next1 &nbsp;</a>"; 
} 
if($pagenum == 1) 
{ 
$next2 = $pagenum+3; 
$myresult .= "<a href='javascript:newPage(\"".$next2."\")'> &nbsp; $next2 &nbsp;</a>"; 

$next3 = $pagenum+4; 
$myresult .= "<a href='javascript:newPage(\"".$next3."\")'> &nbsp; $next3 &nbsp;</a>"; 
} 
if($pagenum == 2) 
{ 
$next2 = $pagenum+3; 
$myresult .= "<a href='javascript:newPage(\"".$next2."\")'> &nbsp; $next2 &nbsp;</a>"; 
} 
$next = $pagenum+1; 
$myresult .= "<a href='javascript:newPage(\"".$next."\")'>&nbsp;Next&nbsp;</a>"; 


$myresult .= "<a href='javascript:newPage(\"".$last."\")'>&nbsp;Last</a>"; 

} 
$myresult .= "</div>"; 
$myresult .= "</br>"; 
?> 
+0

分頁很大程度上取決於您打算實現的圖形方面! 你有圖片/截圖/無論你想創建什麼? 有了這個,我可以給你一個手... 關於你現在的代碼,你重複相同的語句分配,正如你所說,它是非常buggy :) – Zuul 2010-06-02 21:13:34

+0

http://drupal.org/node ?page = 2我正在嘗試在底部創建類似分頁的內容。說分頁按鈕像第一,先導,3,4,5,6,7,下一個,最後。獲得第一,prev,next,last很容易,但中心5頁鏈接對我來說很困難 – Hacker 2010-06-03 05:06:40

+0

我找到了解決方案。其在phpeasystep.com/phptu/29.html – Hacker 2010-06-03 06:29:31

回答

2

也許不是最好的答案永遠但這裏是我已經使用:

<?php 

class Pagination { 

    function __construct() { 

    } 

    function getPaginatinationNavigation($page = 1, $num_rows, $rows_per_page, $page_name) 
    { 
     $lastpage = ceil($num_rows/$rows_per_page); 

     $page = (int)$page; 
     if ($page > $lastpage) 
     { 
      $page = $lastpage; 
     } 
     if ($page < 1) { 
      $page = 1; 
     } 

     $content='<p style="text-align: center;">'; 

     if ($page == 1) { 
      $content.= " FIRST PREV "; 
     } else { 
      $content.= " <a href='$page_name?page=1'>FIRST</a> "; 
      $prevpage = $page-1; 
      $content.= " <a href='$page_name?page=$prevpage'>PREV</a> "; 
     } 

     $content.= " (Page $page of $lastpage) "; 

     if ($page == $lastpage) { 
      $content.= " NEXT LAST "; 
     } else { 
      $nextpage = $page+1; 
      $content.= " <a href='$page_name?page=$nextpage'>NEXT</a> "; 
      $content.= " <a href='$page_name?page=$lastpage'>LAST</a> "; 
     } 

     $content.= '</p>'; 

     return $content; 

    } 
} 

?> 

導入對象

require_once('classes/Pagination.php'); 

獲取總行量:

$query= "SELECT COUNT(*) FROM TABLE_NAME"; 
$row = mysql_fetch_array($getResults); 
$numRecords = $row[0]; 

做出了限制,以限制基於頁面數行:

$limit = ' LIMIT ' . ($page - 1) * 25 .', 25'; 

查詢中使用LIMIT

$query = 'SELECT * FROM TABLE_NAME' . $limit; 
$getResults=mysql_query($query) or die(mysql_error()); 

顯示結果,你通常會:

while($row = mysql_fetch_array($getResults)) 
{ 
DISPLAY RESULTS HERE 
} 

使用類吐出導航:

$pagination->getPaginatinationNavigation($page, $numRecords, 25, 'display_page_name.php'); 

所以總體而言,分頁您需要2個疑問:

1)要獲得在搜索 2)爲了獲得在一定範圍僅限於這些項目的記錄中記錄的總金額:說25〜50或1000至1050

您可以顯示來自有限查詢的記錄,並轉到下一組記錄,將頁碼增加1。

希望這會有所幫助。不要忘記清理從url查詢字符串中獲得的任何數據。

讓我知道你是否希望我進一步解釋。

+0

數據提取的後端代碼正在完成。 drupal.org/node?page=2我正在嘗試在底部創建類似分頁的內容。說分頁按鈕像第一,上一頁,3,4,5,6,7,下一頁,最後 – Hacker 2010-06-03 05:13:03

+0

我找到了解決方案。它在http://www.phpeasystep.com/phptu/29.html – Hacker 2010-06-03 06:28:08

+0

的問題,一旦你調用函數一次,你得到的總頁數和結果總數。在進入後續頁面的後續調用函數時,有沒有辦法讓電話獲得結果的總數?加載「新頁面」時,基本上是兩次前往數據庫。「 – luckytaxi 2010-06-10 15:06:52