使用php与mysql数据分页

问题描述:

我想创建一个分页,其中有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

也许不是最好的答案永远但这里是我已经使用:

<?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