PHP分页问题!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP分页问题!相关的知识,希望对你有一定的参考价值。

<table width="100%" border="0" cellspacing="0" cellpadding="0">
<?php
// 建立数据库连接
$link = mysql_connect("localhost", "root", "")
or die("Could not connect: " . mysql_error());
mysql_select_db("dbname") or die(mysql_error());
// 获取当前页数
if( isset($_GET['page']) )
$page = intval( $_GET['page'] );

else
$page = 1;

// 每页数量
$page_size = 3;
// 获取总数据量
$sql = "select * from news";
$result = mysql_query($sql);

$i = 0;
$j = 0;

while($row=mysql_fetch_array($result))

$i++;
if ($i > $page * 4)
$j++;
if($j < 4)
?>

<tr>
<td><?=$row['id'];?></td>
<td><?=$row['title1'];?></td>
<td><?=$row['cp_id2'];?></td>
</tr>

<?php



$amount = mysql_num_rows($result);

// 记算总共有多少页
if( $amount )
if( $amount < $page_size ) $page_count = 1; //如果总数据量小于$PageSize,那么只有一页
if( $amount % $page_size ) //取总数据量除以每页数的余数
$page_count = (int)($amount / $page_size) + 1; //如果有余数,则页数等于总数据量除以每页数的结果取整再加一
else
$page_count = $amount / $page_size; //如果没有余数,则页数等于总数据量除以每页数的结果


else
$page_count = 0;


// 翻页链接
$page_string = '';
if( $page == 1 )
$page_string .= '第一页|上一页|';

else
$page_string .= '<a href="test.php?page=1">第一页</a>|<a href="test.php?page='.($page-1).'">上一页</a>|';

if( ($page == $page_count) || ($page_count == 0) )
$page_string .= '下一页|尾页';

else
$page_string .= '<a href="test.php?page='.($page+1).'">下一页</a>|<a href=" test.php?page='.$page_count.'">尾页</a>';


echo"$page_string";
?>
</table>

怎么显示不了分页?帮我看下谢谢~~

参考技术A 分页没楼上说的那么复杂,你仔细看看你的打印分页的地方,是在</tr>与</table>之间,你应该放在一个单元格里。这样他才能显示。

/*
分页步骤:
1.给出每页的记录条数
2.求出总页数(先得到总条数,再求总页数)
3.获得当前页的id值
4.得到每个页面的结果集
5.循环取出
*/
<?php
$id=$_GET["id"];
if($id=="")

$id=1;

$paginal=10;
$sql="select * from contents where title=$id";
$rs=mysql_query($sql);
$sum=mysql_num_rows($rs); //信息的总数
$pagination=($sum-1)/$paginal+1; //信息的总页数
$pagination=(int)$pagination; //总页数取整
$pageno=$_GET["pageno"]; //当前页数

if($pageno=="" || $pageno<1)

$pageno=1;

if($pageno>$pagination)

$pageno=$pagination;


$startno=($pageno-1)*$paginal; //当前结果集(当前查看第几条)
$sql="select * from contents where title=$id order by id desc limit $startno,$paginal";
$rs=mysql_query($sql);
?>
<table width="780" border="1" bordercolor="#000000" align="center">
<tr>
<td>编号</td>
<td>内容</td>
<td>作者</td>
</tr>
<?php
while($rows=mysql_fetch_assoc($rs))

?>
<tr>
<td><?php echo $rows["Id"]?></td>
<td><?php echo $rows["Contents"]?></td>
<td><?php echo $rows["Author"]?></td>
</tr>
<?php

?>
</table>
参考技术B 你应该将分页的语句放在查询语句中,不然,你是达不到分页的效果的.
不防试一试:
<?php
// 建立数据库连接
$conn = mysql_connect("localhost", "root", "") or die("Could not connect: " . mysql_error());
mysql_select_db("dbname") or die(mysql_error());

$currentPage = $_SERVER["PHP_SELF"];

$maxRows_news = 4;
$pageNum_news = 0;
if (isset($_GET['pageNum_news']))
$pageNum_news = $_GET['pageNum_news'];

$startRow_news = $pageNum_news * $maxRows_news;

$query_news = sprintf("SELECT * from news ");
$query_limit_news = sprintf("%s LIMIT %d, %d", $query_news, $startRow_news, $maxRows_news);
$news = mysql_query($query_limit_news, $conn) or die(mysql_error());
$row_news = mysql_fetch_assoc($news);

if (isset($_GET['totalRows_news']))
$totalRows_news = $_GET['totalRows_news'];
else
$all_news = mysql_query($query_news);
$totalRows_news = mysql_num_rows($all_news);

$totalPages_news = ceil($totalRows_news/$maxRows_news)-1;

$queryString_news = "";
if (!empty($_SERVER['QUERY_STRING']))
$params = explode("&", $_SERVER['QUERY_STRING']);
$newParams = array();
foreach ($params as $param)
if (stristr($param, "pageNum_news") == false &&
stristr($param, "totalRows_news") == false)
array_push($newParams, $param);


if (count($newParams) != 0)
$queryString_news = "&" . htmlentities(implode("&", $newParams));


$queryString_news = sprintf("&totalRows_news=%d%s", $totalRows_news, $queryString_news);

?>

<!--内容显示部分-->
<table>
<tr>
<td>ID号</td>
<td>标题</td>
<td>XXXX</td>
</tr>
<?php do ?>
<tr>
<td><?php echo $row_news['id'];?></td>
<td><?php echo $row_news['title'];?></td>
<td><?php echo $row_news['cp_id2'];?></td>
</tr>
<?php while ($row_news= mysql_fetch_assoc($news)); ?>
</table>
<!--内容显示结束-->

<!--分页部分-->
<table border="0" cellpadding="3" cellspacing="0">
<tr>
<td><a href="<?php printf("%s?pageNum_news=%d%s", $currentPage, 0, $queryString_news); ?>">首页</a></td>
<td><a href="<?php printf("%s?pageNum_news=%d%s", $currentPage, max(0, $pageNum_news - 1), $queryString_news); ?>">前页</a></td>
<td><a href="<?php printf("%s?pageNum_news=%d%s", $currentPage, min($totalPages_news, $pageNum_news + 1), $queryString_news); ?>">下页</a></td>
<td><a href="<?php printf("%s?pageNum_news=%d%s", $currentPage, $totalPages_news, $queryString_news); ?>">末页</a></td>
<td><?php printf("[%s-%s]/[%s]",($startRow_news + 1),min($startRow_news + $maxRows_news, $totalRows_news),$totalRows_news) ?></td>
</tr>
</table>
<!--分页结束-->本回答被提问者采纳
参考技术C 呵呵,刚上完课有一个分页给你吧:
<?php
$link=mysql_connect("localhost","root","123");
mysql_select_db("test",$link);

//$sql='select * from gsbook $db';
$execc="select count(*) from gsbook ";
$resultc=mysql_query($execc);
$rsc=mysql_fetch_array($resultc);
$num=$rsc[0];//得到总的行数
//$zpage=ceil($num/2);
//$page=0;
echo $num,"<br>";
//ceil($num/10));
if(empty($_GET['page']))

$page=0;

else

$page=$_GET['page'];
if($page<0)$page=0;
if($page>=ceil($num/2))$page=ceil($num/2)-1;//因为page是从0开始的,所以要-1

$sql="select * from gsbook limit ".($page*2).",2";
//$sql="select * from gsbook limit ".($page*2).",2";//注意limit后面的有个空格
$result=mysql_query($sql);
$row=mysql_fetch_row($result);
while($row)
echo $row[0]."--".$row[1]."--".$row[2],"<br>";
$row=mysql_fetch_row($result);
?>

<a href="limitshiyan.php?page=0">FirstPage</a>
<a href="limitshiyan.php?page=<?=($page-1)?>">PrevPage</a>
<a href="limitshiyan.php?page=<?=($page+1)?>">NextPage</a>
<a href="limitshiyan.php?page=<?=ceil($num/2)-1?>">LastPage</a>
参考技术D PHP分页显示详解,包括原理和程序都有。

http://www.kaiyuanba.cn/html/1/131/140/3776.htm

best luck

php 分页原理+分页代码+分页类制作

   分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一。对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解。

一、分页原理:
       所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数:

       每页多少条记录($PageSize)?
       当前是第几页($CurrentPageID)?

       现在只要再给我一个结果集,我就可以显示某段特定的结果出来。

       至于其他的参数,比如:上一页($PReviousPageID)、下一页($NextPageID)、总页数($numPages)等等,都可以根据前边这几个东西得到。

       以MySQL数据库为例,如果要从表内截取某段内容,sql语句可以用:select * from table limit offset, rows。看看下面一组sql语句,尝试一下发现其中的规率。

       前10条记录:select * from table limit 0,10
       第11至20条记录:select * from table limit 10,10
       第21至30条记录:select * from table limit 20,10
……
        这一组sql语句其实就是当$PageSize=10的时候取表内每一页数据的sql语句,我们可以总结出这样一个模板:
        select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize
        拿这个模板代入对应的值和上边那一组sql语句对照一下看看是不是那么回事。搞定了最重要的如何获取数据的问题以后,剩下的就仅仅是传递参数,构造合适的sql语句然后使用php从数据库内获取数据并显示了。


二、分页代码说明:五个步骤

       代码中有充分解释,可复制到自己记事本中直接使用

  1. <html>
  2. <head>
  3. <meta http-equiv="content-type" content="text/html;charset=utf-8" />
  4. <title>雇员信息列表</title>
  5. </head>
  6. <?php 
  7.         //显示所有emp表的信息
  8.         //1.连接数据库
  9.         $conn=mysql_connect(‘localhost‘,‘root‘,‘1234abcd‘) or die(‘连接数据库错误‘.mysql_error());
  10.         //2.选择数据库
  11.         mysql_select_db(‘empManage‘);
  12.         //3.选择字符集
  13.         mysql_query(‘set names utf8‘);
  14.         //4.发送sql语句并得到结果进行处理
  15.         //4.1分页[分页要发出两个sql语句,一个是获得$rowCount,一个是通过sql的limit获得分页结果。所以我们会获得两个结果集,在命名的时候要记得区分。
  16. 分页  (四个值 两个sql语句)。]
  17.         $pageSize=3;//每页显示多少条记录
  18.         $rowCount=0;//共有多少条记录
  19.         $pageNow=1;//希望显示第几页
  20.         $pageCount=0;//一共有多少页  [分页共有这个四个指标,缺一不可。由于$rowCount可以从服务器获得的,所以可以给予初始值为0;
  21. $pageNow希望显示第几页,这里最好是设置为0;$pageSize是每页显示多少条记录,这里根据网站需求提前制定。
  22. $pageCount=ceil($rowCount/$pageSize),既然$rowCount可以初始值为0,那么$pageCount当然也就可以设置为0.四个指标,两个0 ,一个1,另一个为网站需求。]
  23.                 //4.15根据分页链接来修改$pageNow的值
  24.                 if(!empty($_GET[‘pageNow‘])){
  25.                         $pageNow=$_GET[‘pageNow‘];
  26.                 }[根据分页链接来修改$pageNow的值。]
  27.         $sql=‘select count(id) from emp‘;
  28.         $res1=mysql_query($sql);
  29.         //4.11取出行数
  30.         if($row=mysql_fetch_row($res1)){
  31.                 $rowCount=$row[0];                
  32.         }//[取得$rowCount,,进了我们就知道了$pageCount这两个指标了。]
  33.         //4.12计算共有多少页
  34.         $pageCount=ceil($rowCount/$pageSize);
  35.         $pageStart=($pageNow-1)*$pageSize;
  36.         
  37.         //4.13发送带有分页的sql结果
  38.         $sql="select * from emp limit $pageStart,$pageSize";//[根据$sql语句的limit 后面的两个值(起始值,每页条数),来实现分页。以及求得这两个值。]
  39.         $res2=mysql_query($sql,$conn) or die(‘无法获取结果集‘.mysql_error());
  40.         echo ‘<table border=1>‘;[        echo "<table border=‘1px‘ cellspacing=‘0px‘ bordercolor=‘red‘ width=‘600px‘>";]
  41. "<tr><th>id</th><th>name</th><th>grade</th><th>email</th><th>salary</th><th><a href=‘#‘>删除用户</a></th><th><a href=‘#‘>修改用户</a></th></tr>";        while($row=mysql_fetch_assoc($res2)){
  42.                 echo "<tr><td>{$row[‘id‘]}</td><td>{$row[‘name‘]}</td><td>{$row[‘grade‘]}</td><td>{$row[‘email‘]}</td><td>{$row[‘salary‘]}</td><td><a href=‘#‘>删除用户</a></td><td><a href=‘#‘>修改用户</a></td></tr>";        }
  43.         echo ‘</table>‘;
  44.         //4.14打印出页码的超链接
  45.         for($i=1;$i<=$pageCount;$i++){
  46.                 echo "<a href=‘?pageNow=$i‘>$i</a> ";//[打印出页码的超链接]
  47.         
  48.         }
  49.         //5.释放资源,关闭连接
  50.         mysql_free_result($res2);
  51.         mysql_close($conn);
  52. ?>
  53. </html>
复制代码


三、简单分页类分享

         现在公布一个简单分类制作。只要理解了这个类的原理和步骤,其他复杂类也就能够触类旁通了。不废话,直接上源码,可以直接用在你的项目中。

        数据库操作类代码:mysqli.func.php
      

  1. <?php  
  2. // 数据库连接常量  
  3. define(‘DB_HOST‘, ‘localhost‘);  
  4. define(‘DB_USER‘, ‘root‘);  
  5. define(‘DB_PWD‘, ‘‘);  
  6. define(‘DB_NAME‘, ‘guest‘);  
  7.   
  8. // 连接数据库  
  9. function conn()  
  10. {  
  11.     $conn = mysqli_connect(DB_HOST, DB_USER, DB_PWD, DB_NAME);  
  12.     mysqli_query($conn, "set names utf8");  
  13.     return $conn;  
  14. }  
  15.   
  16. //获得结果集  
  17. function doresult($sql){  
  18.    $result=mysqli_query(conn(), $sql);  
  19.    return  $result;  
  20. }  
  21.   
  22. //结果集转为对象集合  
  23. function dolists($result){  
  24.     return mysqli_fetch_array($result, MYSQL_ASSOC);  
  25. }  
  26.   
  27. function totalnums($sql) {  
  28.     $result=mysqli_query(conn(), $sql);  
  29.     return $result->num_rows;  
  30. }  
  31.   
  32. // 关闭数据库  
  33. function closedb()  
  34. {  
  35.     if (! mysqli_close()) {  
  36.         exit(‘关闭异常‘);  
  37.     }  
  38. }  
  39.   
  40. ?>  
复制代码

分页实现代码:

本帖隐藏的内容

  1. <?php  
  2. include ‘mysqli.func.php‘;  
  3.   
  4. // 总记录数  
  5. $sql = "SELECT dg_id  FROM  tb_user ";  
  6. $totalnums = totalnums($sql);  
  7.   
  8. // 每页显示条数  
  9. $fnum = 8;  
  10.   
  11. // 翻页数  
  12. $pagenum = ceil($totalnums / $fnum);  
  13.   
  14. // 页数常量  
  15. @$tmp = $_GET[‘page‘];  
  16.   
  17. //防止恶意翻页  
  18. if ($tmp > $pagenum)  
  19.     echo "<script>window.location.href=‘index.php‘</script>";  
  20.   
  21. //计算分页起始值  
  22. if ($tmp == "") {  
  23.     $num = 0;  
  24. } else {  
  25.     $num = ($tmp - 1) * $fnum;  
  26. }  
  27.   
  28. // 查询语句  
  29. $sql = "SELECT dg_id,dg_username  FROM  tb_user ORDER BY dg_id DESC LIMIT " . $num . ",$fnum";  
  30. $result = doresult($sql);  
  31.   
  32. // 遍历输出  
  33. while (! ! $rows = dolists($result)) {  
  34.     echo $rows[‘dg_id‘] . " " . $rows[‘dg_username‘] . "<br>";  
  35. }  
  36.   
  37. // 翻页链接  
  38. for ($i = 0; $i < $pagenum; $i ++) {  
  39.     echo "<a href=index.php?page=" . ($i + 1) . ">" . ($i + 1) . "</a>";  
  40. }  
  41. ?>  
复制代码

































以上是关于PHP分页问题!的主要内容,如果未能解决你的问题,请参考以下文章

PHP分页问题!

PHP+mysql分页的问题,我用了php万能分页的代码,但是不好用,请帮我看看是啥问题?说19行不对,请指教

php中的分页显示

php分页

php分页原理,懂得的指教一下哈!

在php中如何对多条记录进行分页