上文只是介绍了最基本的分页程序,假设要对搜索留言得到的结果进行分页,则在上述分页程序只能正确的显示第一页,当赢湖转到其他页面后又会显示所有的记录,而不是查询得到的记录。这是因为单机分页连接后没有将用户输入的查询关键字传递给其他页。
为此,可以杂获取了用户输入的关键字之后,一方面将它传递给SQL语句进行查询,另一方面将其保存在分页链接的URL参数(或表单隐藏域)中。具体说来,可以给分页链接增加一个URL参数,将该URL参数的值设置为查询关键字以传递给其他页。
首先是全部内容的一个分页,每个页面的显示数为6 fenye1.php
<?php /* * * @Authors peng--jun * @Email 1098325951@qq.com * @Date 2015-11-07 21:21:48 * @Link http://www.cnblogs.com/xs-yqz/ * @version $Id$ ========================================== */ header("Content-type: text/html; charset=UTF-8"); require("include/conn.php"); mysql_select_db("lyb",$conn);//选择数据库 if (isset($_GET['page']) &&intval($_GET['page']>0)) {//获取页码并检查是否非法 $Page = $_GET['page']; }else{ $Page = 1; //如果获取不到页码则显示第1页 } //设置每页显示记录数 $PageSize = 6; //创建统计记录总数的结果集 $result = mysql_query("select * from `lyb1`",$conn); $RecordCount = mysql_num_rows($result);//获取记录总数 $PageCount = ceil($RecordCount/$PageSize);//计算总共有多少页 $sql = "select * from `lyb1` limit ".($Page-1)*$PageSize.",".$PageSize; echo $sql; $result = mysql_query($sql,$conn)or die("错误".mysql_error());//将某一页的记录放入结果集 echo $result; ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>分页显示</title> </head> <body> <form action="fenye1_resault.php" method="get"> <div style="border:1px solid gray; background:#eee;padding:4px;"> 查找留言:请输入关键字 <input name="keyword" type="text"> <select name="sel"> <option value="title">文章标题</option> <option value="content">文章内容</option> <option value="author">文章作者</option> </select> <input type="submit" name="submit" value="查询"> <a href="fenye1.php">返回</a> </div> </form> <table border="1" width="95%"> <tr bgcolor="#e0e0e0"> <th>序号</th> <th>标题</th> <th>内容</th> <th>作者</th> <th>邮箱</th> <th>删除</th> <th>更新</th> </tr> <?php while ($row = mysql_fetch_assoc($result)) { ?> <tr> <td><?= $row['id']?></td> <td><?= $row['title']?></td> <td><?= $row['content']?></td> <td><?= $row['author']?></td> <td><?= $row['email']?></td> <td><a href="delete.php?id=<?= $row['id']?>">删除</a></td> <td><a href="editform.php?id=<?= $row['id']?>">更新</a></td> </tr> <?php } mysql_free_result($result);//释放结果集 ?> </table> <p><?php //显示分页连接的代码 if($Page== 1)//如果是第1页,则不显示第1页的链接 echo "第一页 上一页 "; else{ echo "<a href='?page=1'>第一页</a> <a href='?page=". ($Page-1)."'>上一页</a> "; } for ($i=1; $i <= $PageCount ; $i++) { //设置数字页码的链接 if ($i == $Page) echo "$i ";//如果是某页,则不显示某页的链接 else echo "<a href='?page=$i'>$i</a> "; } if ($Page == $PageCount) {// 设置“下一页”链接 echo " 下一页 末页 "; }else{ echo " <a href='?page=" . ($Page+1) . "'>下一页</a> <a href='?page=" . $PageCount . "'>末页</a> "; } echo "   共".$RecordCount. "条记录 ";//共多少条记录 echo " $Page / $PageCount 页";//当前页面的位置 ?></p> </body> </html>
显示查询结果的页面,每一页的结果数为3 fenye1_resault.php 由于涉及到查询类型,故也要把查询类型写到URL当中
<a href='?page=1&sel=$sel&keyword=$keyword'>第一页</a>
<?php /* * * @Authors peng--jun * @Email 1098325951@qq.com * @Date 2015-11-07 21:21:48 * @Link http://www.cnblogs.com/xs-yqz/ * @version $Id$ ========================================== */ header("Content-type: text/html; charset=UTF-8"); require("include/conn.php"); mysql_select_db("lyb",$conn);//选择数据库 if (isset($_GET['page']) &&intval($_GET['page']>0)) {//获取页码并检查是否非法 $Page = $_GET['page']; }else{ $Page = 1; //如果获取不到页码则显示第1页 } //设置每页显示记录数 $PageSize = 3; //创建统计记录总数的结果集 $keyword=trim($_GET['keyword']);//获取输入的关键字 $sel=$_GET['sel'];//获取选择的查询类型 $sql="select * from `lyb1`"; if ($keyword<>"") { $sql=$sql." where $sel like '%$keyword%'"; //构造查询语句 } $result=mysql_query($sql)or die("数据查询错误".mysql_error()); $RecordCount = mysql_num_rows($result);//获取记录总数 $PageCount = ceil($RecordCount/$PageSize);//计算总共有多少页 $sql = $sql." limit ".($Page-1)*$PageSize.",".$PageSize; echo $sql; $result1 = mysql_query($sql,$conn)or die("错误".mysql_error());//将某一页的记录放入结果集 echo $result1; ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>分页显示</title> </head> <body> <form action="fenye1_resault.php" method="get"> <div style="border:1px solid gray; background:#eee;padding:4px;"> 查找留言:请输入关键字 <input name="keyword" type="text" value="<?= $keyword ?>"> <select name="sel"> <option value="title">文章标题</option> <option value="content">文章内容</option> <option value="author">文章作者</option> </select> <input type="submit" name="submit" value="查询"> <a href="fenye1.php">返回</a> </div> </form> <table border="1" width="95%"> <tr bgcolor="#e0e0e0"> <th>序号</th> <th>标题</th> <th>内容</th> <th>作者</th> <th>邮箱</th> <th>删除</th> <th>更新</th> </tr> <?php while ($row = mysql_fetch_assoc($result1)) { ?> <tr> <td><?= $row['id']?></td> <td><?= $row['title']?></td> <td><?= $row['content']?></td> <td><?= $row['author']?></td> <td><?= $row['email']?></td> <td><a href="delete.php?id=<?= $row['id']?>">删除</a></td> <td><a href="editform.php?id=<?= $row['id']?>">更新</a></td> </tr> <?php } mysql_free_result($result);//释放结果集 ?> </table> <p><?php //显示分页连接的代码 if($Page== 1)//如果是第1页,则不显示第1页的链接 echo "第一页 上一页 "; else{ echo "<a href='?page=1&sel=$sel&keyword=$keyword'>第一页</a> <a href='?page=". ($Page-1)."'>上一页</a> "; } for ($i=1; $i <= $PageCount ; $i++) { //设置数字页码的链接 if ($i == $Page) echo "$i ";//如果是某页,则不显示某页的链接 else echo "<a href='?page=$i&sel=$sel&keyword=$keyword'>$i</a> "; } if ($Page == $PageCount) {// 设置“下一页”链接 echo " 下一页 末页 "; }else{ echo " <a href='?page=" . ($Page+1) . "&sel=$sel&&keyword=$keyword'>下一页</a> <a href='?page=" . $PageCount . "'>末页</a> "; } echo "   共".$RecordCount. "条记录 ";//共多少条记录 echo " $Page / $PageCount 页";//当前页面的位置 ?> </p> </body> </html>