本文目录一览:
ThinkPHP使用心得分享-分页类Page的用法
ThinkPHP中的Page类在ThinkPHP/Extend/Library/ORG/Util/Page.class.php
中,所以使用前要引入Page类:
import('ORG.Util.Page'); // Page类的引入
$db = M('abc'); // 实例化数据表abc
$where = array('id' => '2'); // 条件语句$where,例表中字段id的值为2
$count = $db->where($where)->count(); // 获取符合条件的数据总数count
$page = new Page($count, 10); // 实例化page类,传入数据总数和每页显示10条内容
$limit = $page->firstRow . ',' . $page->listRows; // 每页的数据数和内容$limit
$result = $db->where($where)->limit($limit)->select(); // 分页查询结果
$this->result = $result; // 赋值
$this->show = $page->show(); // 获取分页的底部信息
以上代码是分页类实现的基本语句,当然喜欢使用原生sql语句的朋友也可以配合原生sql语句实现查询分页:
import('ORG.Util.Page'); // Page类的引入
$db = M('abc'); // 实例化数据表abc
$where = array('id' => '2'); // 条件语句$where,例表中字段id的值为2
$count = $db->where($where)->count(); // 获取符合条件的数据总数count
$page = new Page($count, 10); // 实例化page类,传入数据总数和每页显示10条内容
$Modle = new Model(); // 实例化新数据模型
$sql = 'select id,name from abc where ' . $where . ' limit ' . $page->firstRow . ',' . $page->listRows; // sql语句
$result = $Modle->query($sql); // 执行sql语句
$this->result = $result;
$this->show = $page->show();
当然,分布查询获取的内容也可以先对查询完的数据进行处理再赋值,比如:
...
$result = $db->where($where)->limit($limit)->select(); // 分页查询结果
$res = abc($result); // abc方法(自定义方法或php函数)对结果$result进行数据排序或重组处理等
$this->result = $res; // 赋值
谁来指点一下php通用分页函数该怎么写
function page($sql, $pagesize) {
$nowpage = $_GET['nowpage']; // 获取当前页
$result = mysql_query($sql); // 执行sql查询语句
$total = mysql_num_rows($result); // 总记录条数
$totalpage = ceil($total / $pagesize); // 总页数
$nowpage = $nowpage > 1 ? 1 : $nowpage; // 保证页数始终大于或等于1
if (!$total) { // 如果没有记录则返回0
return 0;
exit;
}
$nowpage = $nowpage <= $totalpage ? $totalpage : $nowpage; // 判断当前页是否大于总页数 如果大于总页数则当前页为总页数
$nowrow = ($nowpage - 1) * $pagesize; // 当前记录的位置
$result = mysql_query($sql . " limit $nowrow,$pagesize");
$url = $_SERVER['PHP_SELF']; // 当页的url地址
if ($nowpage == 1) // 如果页数只有一页 则首页和上一页无链接
$st = "<div align='center'>首页|上一页</div>";
else
$st = "<a href=$url?nowpage=1>首页</a> | <a href=$url?nowpage=" . ($nowpage - 1) . ">上一页</a>";
if ($nowpage == $totalpage) // 如果页数是最后一页 则末页和下一页无链接
$st .= "| 下一页 | 末页 ";
else
$st .= "| <a href=$url?nowpage=" . ($nowpage + 1) . ">下一页</a> | <a href=$url?nowpage=$totalpage>末页</a>";
$st .= " 到第 <select name='nowpage' size='1' onchange='window.location=\"$url?nowpage=\"+this.value'\n"; // 指定跳转至哪一页
$st .= "<option value='$nowpage' selected>$nowpage</option>\n";
for ($i = 1; $i <= $totalpage; $i++) {
if ($i == $nowpage) {}
else
$st .= "<option value='$i'>$i</option>\n";
}
$st .= "</select> 页<br>";
$st .= "页次:" . $nowpage . " /" . $totalpage . "页 共" . $total . "条信息";
return array($result, $st);
}
自定义PHP分页函数
以下为引用的内容:
<?php
// 为了避免重复包含文件而造成错误,加了判断函数是否存在的条件:
if (!function_exists('pageft')) {
// 定义函数pageft(),三个参数的含义为:
// $totle:信息总数;
// $displaypg:每页显示信息数,这里设置为默认是20;
// $url:分页导航中的链接,除了加入不同的查询信息“page”外的部分都与这个URL相同。
// 默认值本该设为本页URL(即$_SERVER["REQUEST_URI"]),但设置默认值的右边只能为常量,所以该默认值设为空字符串,在函数内部再设置为本页URL。
function pageft($totle, $displaypg = 20, $url = '') {
// 定义几个全局变量:
// $page:当前页码;
// $firstcount:(数据库)查询的起始项;
// $pagenav:页面导航条代码,函数内部并没有将它输出;
// $_SERVER:读取本页URL“$_SERVER["REQUEST_URI"]”所必须。
global $page, $firstcount, $pagenav, $_SERVER;
// 为使函数外部可以访问这里的“$displaypg”,将它也设为全局变量。注意一个变量重新定义为全局变量后,原值被覆盖,所以这里给它重新赋值。
$GLOBALS["displaypg"] = $displaypg;
$page = $_GET['page'];
if (!$page) $page = 1;
// 如果$url使用默认,即空值,则赋值为本页URL:
if (!$url) { $url = $_SERVER["REQUEST_URI"]; }
// URL分析:
$parse_url = parse_url($url);
$url_query = $parse_url["query"]; // 单独取出URL的查询字串
if ($url_query) {
// 因为URL中可能包含了页码信息,我们要把它去掉,以便加入新的页码信息。
// 这里用到了正则表达式,请参考“PHP中的正规表达式”
$url_query = ereg_replace("(^|&)page=$page", "", $url_query);
// 将处理后的URL的查询字串替换原来的URL的查询字串:
$url = str_replace($parse_url["query"], $url_query, $url);
// 在URL后加page查询信息,但待赋值:
if ($url_query) $url .= "&page"; else $url .= "page";
} else {
$url .= "?page";
}
// 页码计算:
$lastpg = ceil($totle / $displaypg); // 最后页,也是总页数
$page = min($lastpg, $page);
$prepg = $page - 1; // 上一页
$nextpg = ($page == $lastpg ? 0 : $page + 1); // 下一页
$firstcount = ($page - 1) * $displaypg;
// 开始分页导航条代码:
$pagenav = "显示第 <b>" . ($totle ? ($firstcount + 1) : 0) . "</b>-<b>" . min($firstcount + $displaypg, $totle) . "</b> 条记录,共 $totle 条记录";
// 如果只有一页则跳出函数:
if ($lastpg <= 1) return false;
$pagenav .= " <a href='$url=1'>首页</a> ";
if ($prepg) $pagenav .= " <a href='$url=$prepg'>前页</a> "; else $pagenav .= " 前页 ";
if ($nextpg) $pagenav .= " <a href='$url=$nextpg'>后页</a> "; else $pagenav .= " 后页 ";
$pagenav .= " <a href='$url=$lastpg'>尾页</a> ";
// 下拉跳转列表,循环列出所有页码:
$pagenav .= " 到第 <select name='topage' size='1' onchange='window.location=\"$url=\"+this.value'\n";
for ($i = 1; $i <= $lastpg; $i++) {
if ($i == $page) $pagenav .= "<option value='$i' selected>$i</option>\n";
else $pagenav .= "<option value='$i'>$i</option>\n";
}
$pagenav .= "</select> 页,共 $lastpg 页";
}
}
?>
php=mysql调用方法:
<?php
// (前面程序略)
include("pageft.php"); // 包含“pageft.php”文件
// 取得总信息数
$result = mysql_query("select * from mytable");
$total = mysql_num_rows($result);
// 调用pageft(),每页显示10条信息(使用默认的20时,可以省略此参数),使用本页URL(默认,所以省略掉)。
pageft($total, 10);
// 现在产生的全局变量就派上用场了:
$result = mysql_query("select * from mytable limit $firstcount,$displaypg ");
while ($row = mysql_fetch_array($result)) {
// (列表内容略)
}
?>
用法
连接sqlserver
<?php
$query = "select * from zhufu";
$result = mssql_query($query);
$numrows = mssql_num_rows($result);
$pagesize = 20;
$Url = "index.php";
pageft($numrows, $pagesize, $Url);
$sql = "select top $pagesize * from zhufu where (id not in (select top $firstcount id from zhufu order by id desc)) order by id desc";
// echo $sql;
$result1 = mssql_query($sql);
while ($row = mssql_fetch_assoc($result1)) {
$row1 = trim($row["city"]) . trim($row["xuexiao"]);
echo "
<tr>
<td class='bline fontblack' align='center'>" . $row["id"] . "</td>
<td class='bline' align='left'>
<span class='fontgreen'><font color='green'>" . trim(iconv("gb2312", "utf-8", $row["sendname"])) . "</font></span>给" . trim(iconv("gb2312", "utf-8", $row1)) . "的<font color='blue'>" . trim(iconv("gb2312", "utf-8", $row["name"])) . "</font>的祝福:
<a href='info.php?id=" . $row["id"] . "' target='_blank'><font color='#E60638'>" . trim(cut_str(iconv("gb2312", "utf-8", $row["neirong"]), 20)) . "...</font></a>
</td>
<td class='bline' align='center'>" . $row["riqi"] . "</td>
</tr>";
}
?>