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>
怎么显示不了分页?帮我看下谢谢~~
/*
分页步骤:
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从数据库内获取数据并显示了。
二、分页代码说明:五个步骤
代码中有充分解释,可复制到自己记事本中直接使用
- <html>
- <head>
- <meta http-equiv="content-type" content="text/html;charset=utf-8" />
- <title>雇员信息列表</title>
- </head>
- <?php
- //显示所有emp表的信息
- //1.连接数据库
- $conn=mysql_connect(‘localhost‘,‘root‘,‘1234abcd‘) or die(‘连接数据库错误‘.mysql_error());
- //2.选择数据库
- mysql_select_db(‘empManage‘);
- //3.选择字符集
- mysql_query(‘set names utf8‘);
- //4.发送sql语句并得到结果进行处理
- //4.1分页[分页要发出两个sql语句,一个是获得$rowCount,一个是通过sql的limit获得分页结果。所以我们会获得两个结果集,在命名的时候要记得区分。
- 分页 (四个值 两个sql语句)。]
- $pageSize=3;//每页显示多少条记录
- $rowCount=0;//共有多少条记录
- $pageNow=1;//希望显示第几页
- $pageCount=0;//一共有多少页 [分页共有这个四个指标,缺一不可。由于$rowCount可以从服务器获得的,所以可以给予初始值为0;
- $pageNow希望显示第几页,这里最好是设置为0;$pageSize是每页显示多少条记录,这里根据网站需求提前制定。
- $pageCount=ceil($rowCount/$pageSize),既然$rowCount可以初始值为0,那么$pageCount当然也就可以设置为0.四个指标,两个0 ,一个1,另一个为网站需求。]
- //4.15根据分页链接来修改$pageNow的值
- if(!empty($_GET[‘pageNow‘])){
- $pageNow=$_GET[‘pageNow‘];
- }[根据分页链接来修改$pageNow的值。]
- $sql=‘select count(id) from emp‘;
- $res1=mysql_query($sql);
- //4.11取出行数
- if($row=mysql_fetch_row($res1)){
- $rowCount=$row[0];
- }//[取得$rowCount,,进了我们就知道了$pageCount这两个指标了。]
- //4.12计算共有多少页
- $pageCount=ceil($rowCount/$pageSize);
- $pageStart=($pageNow-1)*$pageSize;
- //4.13发送带有分页的sql结果
- $sql="select * from emp limit $pageStart,$pageSize";//[根据$sql语句的limit 后面的两个值(起始值,每页条数),来实现分页。以及求得这两个值。]
- $res2=mysql_query($sql,$conn) or die(‘无法获取结果集‘.mysql_error());
- echo ‘<table border=1>‘;[ echo "<table border=‘1px‘ cellspacing=‘0px‘ bordercolor=‘red‘ width=‘600px‘>";]
- "<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)){
- 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>"; }
- echo ‘</table>‘;
- //4.14打印出页码的超链接
- for($i=1;$i<=$pageCount;$i++){
- echo "<a href=‘?pageNow=$i‘>$i</a> ";//[打印出页码的超链接]
- }
- //5.释放资源,关闭连接
- mysql_free_result($res2);
- mysql_close($conn);
- ?>
- </html>
三、简单分页类分享
现在公布一个简单分类制作。只要理解了这个类的原理和步骤,其他复杂类也就能够触类旁通了。不废话,直接上源码,可以直接用在你的项目中。
数据库操作类代码:mysqli.func.php
- <?php
- // 数据库连接常量
- define(‘DB_HOST‘, ‘localhost‘);
- define(‘DB_USER‘, ‘root‘);
- define(‘DB_PWD‘, ‘‘);
- define(‘DB_NAME‘, ‘guest‘);
- // 连接数据库
- function conn()
- {
- $conn = mysqli_connect(DB_HOST, DB_USER, DB_PWD, DB_NAME);
- mysqli_query($conn, "set names utf8");
- return $conn;
- }
- //获得结果集
- function doresult($sql){
- $result=mysqli_query(conn(), $sql);
- return $result;
- }
- //结果集转为对象集合
- function dolists($result){
- return mysqli_fetch_array($result, MYSQL_ASSOC);
- }
- function totalnums($sql) {
- $result=mysqli_query(conn(), $sql);
- return $result->num_rows;
- }
- // 关闭数据库
- function closedb()
- {
- if (! mysqli_close()) {
- exit(‘关闭异常‘);
- }
- }
- ?>
分页实现代码:
本帖隐藏的内容
- <?php
- include ‘mysqli.func.php‘;
- // 总记录数
- $sql = "SELECT dg_id FROM tb_user ";
- $totalnums = totalnums($sql);
- // 每页显示条数
- $fnum = 8;
- // 翻页数
- $pagenum = ceil($totalnums / $fnum);
- // 页数常量
- @$tmp = $_GET[‘page‘];
- //防止恶意翻页
- if ($tmp > $pagenum)
- echo "<script>window.location.href=‘index.php‘</script>";
- //计算分页起始值
- if ($tmp == "") {
- $num = 0;
- } else {
- $num = ($tmp - 1) * $fnum;
- }
- // 查询语句
- $sql = "SELECT dg_id,dg_username FROM tb_user ORDER BY dg_id DESC LIMIT " . $num . ",$fnum";
- $result = doresult($sql);
- // 遍历输出
- while (! ! $rows = dolists($result)) {
- echo $rows[‘dg_id‘] . " " . $rows[‘dg_username‘] . "<br>";
- }
- // 翻页链接
- for ($i = 0; $i < $pagenum; $i ++) {
- echo "<a href=index.php?page=" . ($i + 1) . ">" . ($i + 1) . "</a>";
- }
- ?>
以上是关于PHP分页问题!的主要内容,如果未能解决你的问题,请参考以下文章