分页显示需要两个参数,一个是第几页,一个是每页显示多少条记录,通常通过url传递参数,既page(第几页),和pagesize(通常为程序内部定义)
所谓的分页是指,根据这两个参数,查询数据库记录,找出你想要的内容,不是一次得到所有记录.
比如有32条记录符合条件,没页显示10条(即pagesize=10),第一次只查询10条,limite 0,10.
第二次也只查询10条,limite 10,10
第三次也只查询10条,limite 20,10
依此类推(关于sql中的limite,请查阅mysql手册)
所谓的分页是指,根据这两个参数,查询数据库记录,找出你想要的内容,不是一次得到所有记录.
比如有32条记录符合条件,没页显示10条(即pagesize=10),第一次只查询10条,limite 0,10.
第二次也只查询10条,limite 10,10
第三次也只查询10条,limite 20,10
依此类推(关于sql中的limite,请查阅mysql手册)
把页码传过去,不然不知道你是第几页
<?php
if(!$page){
$page=1;
}else{
if($page<1) $page=1;
}
$temp = ($page-1)*20; //每页显示的起始位置
$str = "select * from table where ******* limit $temp,20";
$query = mysql_query($str);
$nums = mysql_num_rows($query); //总的记录数
$totalpages=ceil($nums/20); //总的页数
?> $page是点击“下一页”、“上一页”、“首页”、“尾页”、“跳到**页”传过来的参数
下一页:$page = $page + 1
上一页:$page = $page - 1
首页: $page = 1
尾页: $page = $totalpages
跳到**页:$page = **
别的你看着办,很简单的
我早在去年就提出查询结果分页的问题,一直没有得到真正的解决,也在这个上面花了不少功夫的,直到前不久才解决!!
这样吧,你把邮箱告诉我,我把自己做的一个小系统发给你。
不过我可以告诉你,我采用的是session的方式将查询条件保存下来,然后在分页中用的。
可不可以把代码贴出来看看,
为什么一定要用session保存查询条件呢?
通过url,用get方法把查询条件传回来也是可以的啊?
你把情况说清楚,我看看
我曾经试过隐藏字段,结果经过试验发现从search传出的所有参数在按下“查询”键鼠标事件结束并传到fy1页面后,它们的生命周期就结束了,想再把这些参数通过fy1继续传到下一页fy2就不可能了。 所以:往往在点“下一页”后,出现的错误提示就是:查询条件为空!!!!!
所以,唯一可行的办法就是:在search页面传出参数的时候,打开session,将它们保存为session,我是专门用一个页面search1做这个工作的,然后由search页面采用header("Location: search.php");直接跳回到search页面,让人以为是从search页面点“查询”后直接得到了查询结果分页的,而其实以后的fy1,fy2,fy3.....等所有的页面需要的查询参数直接从session过的变量中去取得。不再与search页面相关。
---------------------------------------------
<?php
session_start(); //注意:session_start()必须放在页面的最开头,前面不能有任何字符存在!!
?><html>
<head>
<meta http-equiv=Content-Type content=text/html;charset=gb2312>
<title>查询</title>
<link href="style.css" rel="stylesheet" type="text/css">
<script language="JavaScript">
function Initial()
{
document.all.xz3.disabled =true;
document.all.xz4.disabled =true;
document.all.search2.disabled =true; document.all.stxt1.value="bookname";
document.all.stxt2.value="like";
document.all.stxt3.value="";
document.all.stxt4.value="";
document.all.stxt5.value="10";
}function Ischecked(x)
{
if(x.checked == true)
{
document.all.xz3.disabled =false;
document.all.xz4.disabled =false;
document.all.search2.disabled =false;
}
else
{
document.all.xz3.disabled =true;
document.all.xz4.disabled =true;
document.all.search2.disabled =true;
}
}function myxz1()
{document.all.stxt1.value=document.all.xz1.options[document.all.xz1.selectedIndex].value;}function myxz2()
{document.all.stxt2.value=document.all.xz2.options[document.all.xz2.selectedIndex].value;}function myxz3()
{document.all.stxt3.value=document.all.xz3.options[document.all.xz3.selectedIndex].value;}function myxz4()
{document.all.stxt4.value=document.all.xz4.options[document.all.xz4.selectedIndex].value;}function myxz5()
{document.all.stxt5.value=document.all.xz5.options[document.all.xz5.selectedIndex].value;}
</script>
</head>
<!--=======================================前台页面============================================-->
<body onload=Initial()>
<!--将查询条件传到search1页面,使它们以session的方式保存下来,以供后台程序分页时使用-->
<form method="post" action="search1.php"> <?php
require_once('./header.php');
?>§查 询§ <font color='blue'>[注:日期格式 2000-10-1 | 近似查询 like | 精确查询 = | 大于 > | 小于 < | 不等于 <>]</font><br>
<TABLE border="0" bgcolor="black" width="594" cellspacing="1" cellpadding="0">
<TR>
<TD bgcolor="#7399BF" width="20"> </TD>
<TD bgcolor="#7399BF">
<select id="xz1" name="select1" align="absmiddle" onClick=myxz1()>
<option value="bookname" selected>书名</option>
<option value="writer">作者</option>
<option value="booktype">类别</option>
<option value="publisher">出版社</option>
<option value="price">定价</option>
<option value="publishdate">出版日期</option>
<option value="buydate">购买日期</option>
<option value="isdn">书号</option>
<option value="comment">内容简介</option>
<option value="islend">是否借出</option>
</select>
<select id="xz2" name="select2" align="absmiddle" onClick=myxz2()>
<option value="like" selected>like</option>
<option value="=" >=</option>
<option value=">">></option>
<option value="<"><</option>
<option value="<>"><></option>
</select>
</TD>
<TD bgcolor="white">
<input type="text" name="search1" value="" size="65" style="background-color:transparent;border:#6699cc 0px solid;height:19px">
</TD>
</TR>
<TR>
<TD bgcolor="#7399BF"><input type=checkbox id=chk2 value="" size="10" onClick=Ischecked(this)></TD>
<TD bgcolor="#7399BF">
<select id="xz3" name="select3" align="absmiddle" onClick=myxz3()>
<option value="bookname" selected>书名</option>
<option value="writer">作者</option>
<option value="booktype">类别</option>
<option value="publisher">出版社</option>
<option value="price">定价</option>
<option value="publishdate">出版日期</option>
<option value="buydate">购买日期</option>
<option value="isdn">书号</option>
<option value="comment">内容简介</option>
<option value="islend">是否借出</option>
</select>
<select id="xz4" name="select4" align="absmiddle" onClick=myxz4()>
<option value="like" selected>like</option>
<option value="=" >=</option>
<option value=">">></option>
<option value="<"><</option>
<option value="<>"><></option>
</select>
</TD>
<TD bgcolor="white">
<input type="text" name="search2" value="" size="65" style="background-color:transparent;border:#6699cc 0px solid;height:19px">
</TD>
</TR>
</table>
<input type="Submit" name="BtSech" value="查 询">
<select id="xz5" name="select5" align="absmiddle" onClick=myxz5()>
<option value="10" selected>每页显示</option>
<option value="5">5</option>
<option value="10">10</option>
<option value="15">15</option>
<option value="20">20</option>
<option value="25">25</option>
<option value="30">30</option>
<option value="35">35</option>
<option value="40">40</option>
<option value="45">45</option>
<option value="50">50</option>
<option value="100">100</option>
</select><input id="stxt1" name="txt1" type="hidden" size="20">
<input id="stxt2" name="txt2" type="hidden" size="20">
<input id="stxt3" name="txt3" type="hidden" size="20">
<input id="stxt4" name="txt4" type="hidden" size="20">
<input id="stxt5" name="txt5" type="hidden" size="20">
</form>
</body>
</html>
<!--========================================================================================-->
//========================================后台程序======================================
require_once('./conn.php');
require_once('./fy_class.php');$mypage = new G_Page; //创建自定义类G_Page的新对象$mypage$G_Table = "book"; //确定数据表//接收search1页面以session方式保存过的查询条件,以后分页导航时反复用到的查询条件就直接从这里找,
//而不需回到前台页面去找了!
$txt1 = $_SESSION['txt1'];
$txt2 = $_SESSION['txt2'];
$txt3 = $_SESSION['txt3'];
$txt4 = $_SESSION['txt4'];
$txt5 = $_SESSION['txt5'];
$sech1 = $_SESSION['sech1'];
$sech2 = $_SESSION['sech2'];$PageSize = $txt5; //确定每页显示记录数if(!$sech1=="")//如果查询项不为空
{
if ($txt2=="like") //模糊查询 .$txt1." ".$txt2.[两个txt之间的空格" "必不可少,否则sql语句会出错!]
{
$WhereStr=$txt1." ".$txt2." '%".$sech1."%'";
}
else //精确查询
{
if ($txt3=="")
{
$WhereStr=$txt1." ".$txt2." '".$sech1."'";
}
else
{
$WhereStr=$txt1." ".$txt2." '".$sech1."' AND ".$txt3." ".$txt4." '".$sech2."'";
}
} //确定查询条件[$WhereStr]、符合条件的记录数[$RecCount]、总页数[$PageCout]、当前页码[$curPageID]
$RecCount = $mypage->RecCount($G_Table,$WhereStr); //统计符合条件的记录数
$PageCout = $mypage->PageCount($G_Table,$WhereStr,$PageSize); //统计页数
$curPageID = $mypage->CurPageID(); //取得当前页码 $p1 = $curPageID-1; //当前页码-1 传到print页面
$p2 = $PageSize; //每页显示的记录数 //确定查询语句 [大量查询时出于速度考虑,最好不要用SELECT *...的方式,而应直接写出需查询的字段]
$myStr = "SELECT bookid,bookname,writer,booktype,publisher,publishdate FROM book WHERE ";
$sql = $myStr.$WhereStr." ORDER BY bookid ASC LIMIT ".($curPageID-1)*$PageSize.",".$PageSize; //执行查询语句
$result = mysql_query($sql,$conn) or die("查询失败!" . mysql_error()); //显示查询结果
$row_count = mysql_num_rows($result); //获取记录数并赋值给$row_count
if (!$row_count==0) //如果记录数不为空
{
echo "<u>查询结果</u><br>";
echo "<table border=0 cellspacing=1 cellpadding=2 bgcolor='black'>";
echo "<tr bgcolor='#7399BF' align='center'><td width='86'>操作</td><td width='26'>编号</td><td>书名</td><td>作者</td><td>类别</td><td>出版社</td><td>出版日期</td><td width='26'>详细</td></tr>";
while ($line = mysql_fetch_array($result,MYSQL_NUM))
{
echo "<tr bgcolor='white'>";
echo "<td><a href='edit.php?id=$line[0]'>修改</a>|<a href='del.php?id=$line[0]'>删除</a>|<a href='print.php?id=$line[0]'>打印</a></td><td>";
echo($line[0]);
echo "</td><td>";
echo($line[1]);
echo "</td><td>";
echo($line[2]);
echo "</td><td>";
echo($line[3]);
echo "</td><td>";
echo($line[4]);
echo "</td><td>";
echo($line[5]);
echo "</td><td align='center'>";
echo "<a href='detail.php?id=$line[0]'>>></a>";
echo "</td></tr>";
}
echo "</table>"; //分页导航
include('./fy_dh.php'); if ($row_count > 1)//如果记录数大于1,则显示"打印当前页面",否则就不显示了
{
echo "<br><br><a href='print.php?t1=".$txt1."&t2=".$txt2."&t3=".$txt3."&t4=".$txt4."&s1=".$sech1."&s2=".$sech2."&p1=".$p1."&p2=".$p2."'>§打印当前页面§</a>"; //把查询语句所有的值传给print页面,以帮助print页面确定查询语句
}
}
else
{
echo "<table border='1' bgcolor='#6699FF' cellspacing='1' cellpadding='1' ><td><font color='#FFFFCC'>对不起,数据库中没有该记录!</font></td></table>";
}
}
else
{
echo "<table border='1' bgcolor='#6699FF' cellspacing='1' cellpadding='1' ><td><font color='#FFFFCC'>请输入查询内容!</font></td></table>";
}mysql_free_result($result); //释放结果内存资源
mysql_close($conn); // 断开连接
?>=============================================================================
search1.php [将查询条件以session的方式保存并返还search页面,使分页不再缺条件]
-----------------------------------------------------------------------------
<?php
session_start(); //注意:session_start()必须放在页面的最开头,前面不能有任何字符存在!!//接收search页面传来的查询条件,并以session的方式保存下来
$_SESSION['txt1'] = trim($_POST["txt1"]);
$_SESSION['txt2'] = trim($_POST["txt2"]);
$_SESSION['txt3'] = trim($_POST["txt3"]);
$_SESSION['txt4'] = trim($_POST["txt4"]);
$_SESSION['txt5'] = trim($_POST["txt5"]);
$_SESSION['sech1'] = trim($_POST["search1"]);
$_SESSION['sech2'] = trim($_POST["search2"]);//直接跳转回search页面
header("Location: search.php");
?>
我现在给你个实例你自己看看吧,用get传变量.
<?php
if (! mysql_connect('localhost', 'root', '')) {
die('Can NOT connect to MySQL Server');
} elseif (! mysql_select_db('test')) {
die('Can NOT select Database "test" ');
}// ==========================================
// 函数声明
// ==========================================
function paginate($query, $keyword, $pageno) {
if (! $result = mysql_query($query)) {
die('SQL ERROR!');
}
$rows_found = mysql_num_rows($result); // 一共有多少条符合条件的记录
$rows = 5; // 每页显示 5 条
$pages = ceil($rows_found / $rows); // 总页数(总记录数 / 每页记录数,向后取整数)
if (! isset($pageno)) {
$pageno = 1;
}
$offset = $pageno * $rows - $rows; // 当前页的首记录偏移量 // 需要由函数返回的变量
$paginate['query'] = $query.' limit '.$offset.','.$rows; // 对当前页应显示记录的查询
$paginate['rows_found'] = $rows_found;
$paginate['pageno'] = $pageno;
$paginate['pages'] = $pages;
$paginate['pagenoList'] = '';
for ($i=1; $i<=$pages; $i++) {
if ($pageno == $i) {
$paginate['pagenoList'] .= ' '.$i.' ';
} else {
$paginate['pagenoList'] .= ' <a href="index.php?keyword='.$keyword.'&pageno='.$i.'">'.$i.'</a> ';
}
} // 返回变量
return $paginate;
}// ==========================================
// 处理查询表单的提交行为
// ==========================================
if ($keyword) {
$query = 'select * from test where XM like "%'.$keyword.'%"'; // 检索符合条件的记录
$paginate = paginate($query, $keyword, $pageno);
}// ==========================================
// HTML
// ==========================================
?>
<form method="get" action="index.php">
<input type="text" name="keyword" value="<?php echo $keyword; ?>">
<input type="submit" name="submit" value="search">
</form><p>
<?php
if ($paginate['rows_found'] && $paginate['pageno']) {
echo '找到'.$paginate['rows_found'].'条,当前页为第'.$paginate['pageno'].'页';
}
?>
</p><ul id="queryResultList">
<?php
if ($result = mysql_query($paginate['query'])) {
while ($row = mysql_fetch_array($result)) {
echo '<li>'.$row['XM'].'</li>';
}
}
?>
</ul><div id="pagenoList"><?php echo $paginate['pagenoList']?></div>