关于 分页 显示 数据库 表中记录的问题

时间:2022-12-11 18:36:09
我在这里搜了好半天,搜到不少这方面的dd。
但为什么好多代码都看不懂呢?尤其是对于初学者。会的人心里很清楚,不会的却摸不出头绪。
索性把代码全拷下来,又不知道该修改哪里?没办法了,只有在这里发帖了,望各位大狭指点指点。

我想做一个“上一页|下一页”这样的连接,来读数据,怎么这么难?
那个什么什么page变量怎么传递的?又是怎么得到的?能讲清楚一点吗?
例如:
     // 格式化当前显示页号
     $page = $_GET['page'];
     if($page < 1) $page = 1;
这是什么意思?page 从那里传来的?是自身吗?怎么传的?$_GET又是怎么用的?

一句两句不嫌少,请多多指点!

11 个解决方案

#1


先看看手册

$page = $_GET['page'];
     if($page < 1) $page = 1;
当传入的页号小于1时,将页号设为1
避免出错

#2


我想你要一步一步的来.
首先你实现读取数据,逐条显示,再加入分页程序.
事情总是有先后的,慢慢来吧.
$PAGE是自定义变量,$_GET['page']是从地址栏传递过来的URL变量,即:abc.php?page=2中的page,$_GET是一个数组,里面的值就是URL变量,你可以随便做一个页面试一试,如下:

abc.php
===========
<?php
print_r($_GET);//print_r()函数不知道就查手册
?>

在地址栏里输入abc.php?a=1&b=2&c=3&page=5
看看会输出什么?

#3


大体上意思就是你先确定所有数据的总数!!然后确定每一页输出几条数据!然后分页的时候再确定一共需要几页!!在输出数据的时候:
 $page++;
 $s=($page-1)*20;
select * from 表 order by id desc limit $s,20;
意思就是在本页第二次输出的时候从第21条开始!!
就是这样!!

#4


分页的思路基本上都是一样的
$onelist="15";//每页显示数量
//获取GET
if(isset($_GET['cp'])){
$cp=$_GET['cp'];
$limit=($_GET['cp']-1)*$onelist;
}
else{
$cp="1";
$limit="0";//查询开始记录数


$query="select * from table limit $limit,".$onelist;

然后算出下一页(上一页,最后页)的page值是多少

基本上都是这样了
自己试着写一下就明白了

#5


楼主有没有学会从数据库中取出数据,并且显示在页面上了?
如果这个会了,然后再谈的上分页的问题了.

慢慢来,不要着急哦.

#6


楼主给你个类,呵呵http://www.phpe.net/class/104.shtml
不知道能不能看懂。

那个page,是url穿过来的,_get的作用就是得到它。

#7


多谢各位!

到此时,我稍微懂点儿了。我再试试。

#8


现在 有一点点进步了 
我的 代码是这样的 :
<?
     $page = $_GET['p'];
     if($page < 1) $page = 1;
echo $page;
echo "<a href=?p=";?><? echo $page+1;?><? echo ">下一页</a>";
echo "<a href=?p=";?><? echo $page-1;?><? echo ">上一页</a>";
echo $p;
?>
在地址栏中输入:文件名.php或 文件名.php?p=3 就可以了 

但echo "<a href=?p='.($page+1).'>下一页</a>";会出错,错在哪里?
班门弄斧,多多指教!

#9


搂主喜欢用echo,呵呵

#10


echo "<a href=?p=";?><? echo $page+1;?><? echo ">下一页</a>";
echo "<a href=?p=";?><? echo $page-1;?><? echo ">上一页</a>";

写的有够乱的....不能弄成一行吗?....晕..你自己看着也不方便呀.

下一页出错,可能是你的href里的地址出错了,查一下看看.

#11


这个是比较简单的,可以好好看看了
<html>

<head>

<title>PHP分页</title>

</head>

<body>

<?
$gPageSize= 50; //每页显示的记录数

$hostname = "localhost"; //mysql Server

$dbuser = "root"; //用户名

$dbpasswd = ""; //密码

//连接数据库

$id = mysql_connect($hostname,$dbuser,$dbpasswd) or die("无法连接数据库服务器!");

//选择数据库

$db = mysql_select_db("数据库名",$id) or die("无法连接数据库!");

$query = "select * from 表名";

//执行查询语句

$rresult = mysql_query($query) or die("无法执行SQL:$query");

//$page变量标示当前显示的页

if(!isset($page)) $page=1;

if($page==0) $page=1;

//得到当前查询到的纪录数 $nNumRows

if(($nNumRows= mysql_num_rows($rresult))<=0)

{

echo "<p align=center>没有纪录";

exit;

};

//得到最大页码数MaxPage

$MaxPage = (int)ceil($nNumRows/$gPageSize);

if((int)$page > $MaxPage)

$page=$maxPage;

?>

<table align="center" width="80%" border=0> <tr><td><? echo "<font size=2>第
$page 页,共 $MaxPage 页</font>";?></td><td></td></tr></table>

<table align="center" width="80%" border="1" cellspacing="0" cellpadding="4" bordercolorlight="#CC9966" bgcolor="#00F2EE" bordercolordark="#FFFFFF" class="LZH">

<tr bgcolor="#F7F2ff" style="font-size:14.8px;font-weight:bold">

<?

//显示表格头

for($iCnt = 0; $iCnt < mysql_num_fields($rresult); $iCnt++)

{

echo "<td>".mysql_field_name($rresult,$iCnt)."</td>" ;

}

?>

</tr>

<?

//根据偏移量($page - 1)*$gPageSize,运用mysql_data_seek函数得到要显示的页面

if( mysql_data_seek($rresult,($page-1)*$gPageSize) )

{

$i=0;

//循环显示当前纪录集

for($i;$i<$gPageSize;$i++)

{

echo "<tr style=\"font-size:12px\">";

//得到当前纪录,填充到数组$arr;

$arr= mysql_fetch_row($rresult);

if($arr)

{

//循环显示当前纪录的所有字段值

for($nOffSet = 0;$nOffSet < count($arr);$nOffSet++)

{

echo "<td>".$arr[$nOffSet]."</td>";

}

}

echo "</tr>";

}

}

?>

</table>

<br>

<hr size=1 width=80%>

<div align=center style="font-size:12px">

<?

//首页和上一页的链接

if( $nNumRows>1 && $page>1)

{

$prevPage=$page-1;

echo " <a href=$PHP_SELF?page=1>首页</a> ";

echo " <a href=$PHP_SELF?page=$prevPage >上一页</a> ";

}

//下一页和末页的链接

if( $page>=1 && $page<$MaxPage)

{

$nextPage= $page+1;

echo " <a href=$PHP_SELF?page=$nextPage >下一页</a> ";

echo " <a href=$PHP_SELF?page=$MaxPage >末页</a> ";

}

?>

</div>

</body>

</html>

#1


先看看手册

$page = $_GET['page'];
     if($page < 1) $page = 1;
当传入的页号小于1时,将页号设为1
避免出错

#2


我想你要一步一步的来.
首先你实现读取数据,逐条显示,再加入分页程序.
事情总是有先后的,慢慢来吧.
$PAGE是自定义变量,$_GET['page']是从地址栏传递过来的URL变量,即:abc.php?page=2中的page,$_GET是一个数组,里面的值就是URL变量,你可以随便做一个页面试一试,如下:

abc.php
===========
<?php
print_r($_GET);//print_r()函数不知道就查手册
?>

在地址栏里输入abc.php?a=1&b=2&c=3&page=5
看看会输出什么?

#3


大体上意思就是你先确定所有数据的总数!!然后确定每一页输出几条数据!然后分页的时候再确定一共需要几页!!在输出数据的时候:
 $page++;
 $s=($page-1)*20;
select * from 表 order by id desc limit $s,20;
意思就是在本页第二次输出的时候从第21条开始!!
就是这样!!

#4


分页的思路基本上都是一样的
$onelist="15";//每页显示数量
//获取GET
if(isset($_GET['cp'])){
$cp=$_GET['cp'];
$limit=($_GET['cp']-1)*$onelist;
}
else{
$cp="1";
$limit="0";//查询开始记录数


$query="select * from table limit $limit,".$onelist;

然后算出下一页(上一页,最后页)的page值是多少

基本上都是这样了
自己试着写一下就明白了

#5


楼主有没有学会从数据库中取出数据,并且显示在页面上了?
如果这个会了,然后再谈的上分页的问题了.

慢慢来,不要着急哦.

#6


楼主给你个类,呵呵http://www.phpe.net/class/104.shtml
不知道能不能看懂。

那个page,是url穿过来的,_get的作用就是得到它。

#7


多谢各位!

到此时,我稍微懂点儿了。我再试试。

#8


现在 有一点点进步了 
我的 代码是这样的 :
<?
     $page = $_GET['p'];
     if($page < 1) $page = 1;
echo $page;
echo "<a href=?p=";?><? echo $page+1;?><? echo ">下一页</a>";
echo "<a href=?p=";?><? echo $page-1;?><? echo ">上一页</a>";
echo $p;
?>
在地址栏中输入:文件名.php或 文件名.php?p=3 就可以了 

但echo "<a href=?p='.($page+1).'>下一页</a>";会出错,错在哪里?
班门弄斧,多多指教!

#9


搂主喜欢用echo,呵呵

#10


echo "<a href=?p=";?><? echo $page+1;?><? echo ">下一页</a>";
echo "<a href=?p=";?><? echo $page-1;?><? echo ">上一页</a>";

写的有够乱的....不能弄成一行吗?....晕..你自己看着也不方便呀.

下一页出错,可能是你的href里的地址出错了,查一下看看.

#11


这个是比较简单的,可以好好看看了
<html>

<head>

<title>PHP分页</title>

</head>

<body>

<?
$gPageSize= 50; //每页显示的记录数

$hostname = "localhost"; //mysql Server

$dbuser = "root"; //用户名

$dbpasswd = ""; //密码

//连接数据库

$id = mysql_connect($hostname,$dbuser,$dbpasswd) or die("无法连接数据库服务器!");

//选择数据库

$db = mysql_select_db("数据库名",$id) or die("无法连接数据库!");

$query = "select * from 表名";

//执行查询语句

$rresult = mysql_query($query) or die("无法执行SQL:$query");

//$page变量标示当前显示的页

if(!isset($page)) $page=1;

if($page==0) $page=1;

//得到当前查询到的纪录数 $nNumRows

if(($nNumRows= mysql_num_rows($rresult))<=0)

{

echo "<p align=center>没有纪录";

exit;

};

//得到最大页码数MaxPage

$MaxPage = (int)ceil($nNumRows/$gPageSize);

if((int)$page > $MaxPage)

$page=$maxPage;

?>

<table align="center" width="80%" border=0> <tr><td><? echo "<font size=2>第
$page 页,共 $MaxPage 页</font>";?></td><td></td></tr></table>

<table align="center" width="80%" border="1" cellspacing="0" cellpadding="4" bordercolorlight="#CC9966" bgcolor="#00F2EE" bordercolordark="#FFFFFF" class="LZH">

<tr bgcolor="#F7F2ff" style="font-size:14.8px;font-weight:bold">

<?

//显示表格头

for($iCnt = 0; $iCnt < mysql_num_fields($rresult); $iCnt++)

{

echo "<td>".mysql_field_name($rresult,$iCnt)."</td>" ;

}

?>

</tr>

<?

//根据偏移量($page - 1)*$gPageSize,运用mysql_data_seek函数得到要显示的页面

if( mysql_data_seek($rresult,($page-1)*$gPageSize) )

{

$i=0;

//循环显示当前纪录集

for($i;$i<$gPageSize;$i++)

{

echo "<tr style=\"font-size:12px\">";

//得到当前纪录,填充到数组$arr;

$arr= mysql_fetch_row($rresult);

if($arr)

{

//循环显示当前纪录的所有字段值

for($nOffSet = 0;$nOffSet < count($arr);$nOffSet++)

{

echo "<td>".$arr[$nOffSet]."</td>";

}

}

echo "</tr>";

}

}

?>

</table>

<br>

<hr size=1 width=80%>

<div align=center style="font-size:12px">

<?

//首页和上一页的链接

if( $nNumRows>1 && $page>1)

{

$prevPage=$page-1;

echo " <a href=$PHP_SELF?page=1>首页</a> ";

echo " <a href=$PHP_SELF?page=$prevPage >上一页</a> ";

}

//下一页和末页的链接

if( $page>=1 && $page<$MaxPage)

{

$nextPage= $page+1;

echo " <a href=$PHP_SELF?page=$nextPage >下一页</a> ";

echo " <a href=$PHP_SELF?page=$MaxPage >末页</a> ";

}

?>

</div>

</body>

</html>