我们在分页显示的基础上进行分页查询,与其他查询不同,分页查询因为在页面跳转时会刷新页面,所以需要用get传值方式将查询条件与页数传递到跳转的页面。
这就要用到Page()类的第三个参数$query。
Page()类在造连接对象时需要四个参数,分别为:
$total:总记录数,需要从数据库中查询;
$listRows:可选的,设置每页需要显示的记录数,默认为25条;
$query:可选的,为向目标页面传递参数,可以是数组,也可以是查询字符串格式;
$ord: 可选的,默认值为true,页面从第一页开始显示,false则为最后一页。
<h1>中国行政区域代号表</h1> <?php //取提交的name值 $name = ""; $fytj = ""; if(!empty($_GET["name"])) { $name = $_GET["name"]; //分页查询条件,只有每次提交的时候才执行,而不是每次刷新页面时执行 $fytj = "name = {$name} "; } //将name作为条件拼在SQL条件语句里面 $tj = " where AreaName like '%{$name}%' "; //中间拼接的条件语句,前后都有空格 //若提交的name值为空,则查所有的 ?>
<div> <form action="" method="get"> <div>请输入名称: <input type="text" name="name" value="<?php echo $name ?>" /> <input type="submit" value="查询" /> </div> </form> </div><br /> <table width="800" border="1" cellpadding="0" cellspacing="0"> <tr> <td>代号</td> <td>名称</td> <td>父级代号</td> </tr>
<?php include("../DB.class.php"); include("../page.class.php"); $db = new DB(); //查询总记录数,需要加查询条件 $sqlall = "select count(*) from chinastates".$tj; $attrall = $db->Query($sqlall); $total = $attrall[0][0]; //先查出总记录条数放入变量$total,作为Page()的参数 $pg = new Page($total,15,$fytj,true); //Page(总记录条数,每页显示的记录条数,分页查询条件,从第一页开始显示) $sql = "select * from chinastates ".$tj.$pg->limit; //SQL语句拼接查询条件,再拼接limit,拼接时注意前后空格 $attr = $db->Query($sql); foreach($attr as $v) { echo "<tr> <td>{$v[0]}</td> <td>{$v[1]}</td> <td>{$v[2]}</td> </tr>"; } ?> </table> <div> <?php //调用分页信息 echo $pg->fpage(); ?> </div>
注意:
1. 查询条件在查询总记录数的时候也要加上
2. 分页时是通过地址栏中"?page=页数"实现的,这是类自动拼上的
分页查询条件同样也是在地址栏中拼上"查询关键字",可以是一个条件也可以是多个条件,中间用"&"连接
例如:http://localhost/0510/fenyechauxn.php?name=京&code=1101&page=2
这是get传值方式,为了方便,所以提交方式为get。
若想用post传值方式,则必须分别判断POST值与GET值是否为空
需要特别主意的是分页后,页面跳转时会刷新页面,所以分页查询条件必须写在判断提交值(即POST值或GET值)是否为空的花括号里面
这样分页查询条件只有在提交的时候才执行,而不是每次刷新页面时执行。