Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198661
  • 博文数量: 264
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 2740
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-03 13:25
文章分类

全部博文(264)

文章存档

2011年(1)

2009年(263)

我的朋友

分类:

2009-06-03 14:47:19

  1. /** 文件: pdo_page.class.php
  2. ** 版本: 2.0
  3. ** 功能: 使用php数据对象(pdo)实现数据的分页显示
  4. ** 运行环境:
  5. **                ① php版本--5.1以上(包括5.1)
  6. **                ② 打开pdo扩展(默认为关闭)
  7. **                ③ 打开与所使用db相应对应的pdo扩展(默认为关闭)
  8. **
  9. ** DISCLAIMER:
  10. ** Distributed "as is", fell free to modify any part of this code.
  11. ** You can use this for any projects you want, commercial or not.
  12. ** It would be very kind to email me any suggestions you have or bugs you
  13. ** might find.
  14. **
  15. ** 完成时间: 2006-10-15
  16. ** Power By 刘胜蛟 (Email: liushengjiao@163.com/liushengjiao@gmail.com)
  17. **/
  18. class pdo_page{
  19. /* 变量定义部分 begin */

  20.         /* pdo数据源 */
  21.         private $db_driver = '';
  22.         private $db_host = '';
  23.         private $db_user = '';
  24.         private $db_password = '';
  25.         private $db_char = '';
  26.         private $db_name = '';
  27.         private $db_table = '';
  28.         private $db_table_field = '';
  29.         private $db = '';                //数据库连接句柄

  30.         /* 分页显示参数设置 */
  31.         private $page_size = 0;                //每页显示的记录数目
  32.         private $link_num = 0;                //显示页码链接的数目

  33.         private $page = 1;                //页码
  34.         private $records = 0;                //表中记录总数
  35.         private $page_count = 0;        //总页数
  36.         private $pagestring = '';        //前后分页链接字符串
  37.         private $page_link = '';        //页码链接字符串
  38.         private $page_select = '';        //表单跳转页字符串
  39.         private $page_jump = '';        //text筐输入页码跳转

  40. /* 变量定义部分 end */

  41. /* 函数定义(类方法) begin */

  42.         function __construct(){

  43.         }

  44.         /* 设置分页信息 begin */
  45.         public function set($db_driver,
  46.                         $db_host,
  47.                         $db_user,
  48.                         $db_password,
  49.                         $db_name,
  50.                         $db_table,
  51.                         $db_table_field,
  52.                         $page_size,
  53.                         $link_num){
  54.                 /* db参数设置 begin */
  55.                 $this->db_driver = $db_driver;                //db驱动
  56.                 $this->db_host = $db_host;                //dbms地址
  57.                 $this->db_user = $db_user;                //dbms帐户
  58.                 $this->db_password = $db_password;        //dbms密码
  59.                 $this->db_name = $db_name;                //db名称
  60.                 $this->db_table = $db_table;                //表名
  61.                 $this->db_table_field = $db_table_field;//字段数组,
  62.                                                         //将要显示的字段名称
  63.                                                         //写入该数组
  64.                 /* db参数设置 end */

  65.                 /* 分页参数设置 begin */
  66.                 $this->page_size = $page_size;                //每页显示记录的数目
  67.                 $this->link_num = $link_num;                //显示翻页链接的数目
  68.                 /* 分页参数设置 end */
  69.         }
  70.         /* 设置分页信息 end*/
  71.        
  72.         /* 获取分页链接数据 begin */
  73.         public function get(){
  74.                 $page_data[0] = $this->records;                //表中记录的总数
  75.                 $page_data[1] = $this->page_count;        //总页数
  76.                 $page_data[2] = $this->page;                //当前页码
  77.                 $page_data[3] = $this->pagestring;        //'首页'、'上一页'、
  78.                                                         //'下一页'、//'尾页'
  79.                                                         //--链接样式

  80.                 $page_data[4] = $this->page_link;        //[1]、[2]、[3]
  81.                                                         //--链接样式

  82.                 $page_data[5] = $this->page_select;        //表单翻页样式
  83.                 $page_data[6] = $this->page_jump;        //跳转的指定页样式
  84.                 return $page_data;
  85.         }
  86.         /* 获取分页链接数据 end */

  87.         /* 连接数据库 begin */
  88.         private function db_conn(){
  89.                 try{
  90.                         $this->db = new pdo(
  91.                                 "$this->db_driver:dbname=$this->db_name;
  92.                                 host=$this->db_host;charset=$this->db_char",
  93.                                 "$this->db_user",
  94.                                 "$this->db_password"
  95.                         );
  96.                         return $this->db;
  97.                 } catch(pdoexception $e) {
  98.                         die($e->getmessage());
  99.                 }
  100.         }
  101.         /* 连接数据库 end */

  102.         /* 页码处理 begin */
  103.         private function set_page(){
  104.                 if (isset($_REQUEST['page'])) {
  105.                         $this->page = intval($_REQUEST['page']);
  106.                 } else {
  107.                         $this->page = 1;
  108.                 }
  109.         }
  110.         /* 页码处理 end */

  111.         /* 获取db中记录的数目 begin */
  112.         private function get_records(){
  113.                 $sql = "select count(*) from $this->db_table";
  114.                 $stmt = $this->db->prepare($sql);
  115.                 $stmt->execute();
  116.                 while ($f = $stmt->fetch()) {
  117.                         $this->records = $f[0];
  118.                 }
  119.         }
  120.         /* 获取db中记录的数目 end */

  121.         /* 建立翻页链接字符串 begin */
  122.         private function page_link(){
  123.                 /* 前后页链接字符串 begin */
  124.                 if ($this->page == 1) {
  125.                         //首页,无链接
  126.                         $this->pagestring .='第一页|上一页';
  127.                 } else {
  128.                         //不为首页,有链接
  129.                         $this->pagestring .='第一页|
  130.                         page-1).'>上一页';
  131.                        
  132.                 }
  133.                 if ($this->page==$this->page_count || $this->page_count==0) {
  134.                         //末页,无链接
  135.                         $this->pagestring .='下一页|尾页';
  136.                 } else {
  137.                         //非末页,有链接
  138.                         $this->pagestring .='page+1).'>
  139.                         下一页|page_count.'>尾页';
  140.                 }
  141.                 /* 前后页链接字符串 end */

  142.                 /* 页码链接字符串 begin */
  143.                 for ($i=$this->page;$i<=$this->page+$this->link_num-1;$i++) {
  144.                         if ($i<=$this->page_count) {
  145.                                 $this->page_link .= '
  146.                                 ['.$i.'] ';
  147.                                 $last_page = $i;
  148.                         }
  149.                 }
  150.                 if ($i-$this->link_num-1 < 1) {
  151.                                 $front_page = 1;
  152.                 } else {
  153.                                 $front_page = $i - $this->link_num - 1;
  154.                 }
  155.                 if ($last_page == $this->page_count) {
  156.                                 $back_page = $last_page;
  157.                 } else {
  158.                                 $back_page = $last_page+1;
  159.                 }
  160.                 $this->page_link = '<<'.' '.
  161.                         $this->page_link.' '.'>>
  162.                         ';
  163.                 /* 页码链接字符串 end */

  164.                 /* select页码 begin */
  165.                 $this->page_select = "

  166.                        
  167.                         ";
  168.                 /* select页码 end */

  169.                 /* input跳转表单begin */
  170.                 $this->page_jump = "
  171.                         type=text size=1 name=page value=$this->page>
  172.                         type=submit value=go>";
  173.                 /* input跳转表单end */

  174.         }
  175.         /* 建立翻页链接字符串 end */

  176.         /* 获取数据 begin */
  177.         function fetch_data(){
  178.                 if ($this->records) {
  179.                         $sql = "select * from $this->db_table limit ".($this->page-1)*$this->page_size.",$this->page_size";
  180.                         $stmt = $this->db->prepare($sql);
  181.                         $stmt->execute();
  182.                         echo "
    ";
  183.                         /* 取字段名称 begin */
  184.                         $field_count = count($this->db_table_field);
  185.                         for($i = 0;$i < $field_count;$i++){
  186.                                 $field_name = $this->db_table_field[$i];
  187.                                 echo "
  188. ";
  189.                         }
  190.                         echo "
  191. ";
  192.                         /* 取字段名称 end */
  193.                         /* 获取数据 begin */
  194.                         while($f = $stmt->fetch()){
  195.                                 echo "
  196. ";
  197.                                 for($i = 0;$i < $field_count;$i++){
  198.                                         $field_name = $this->db_table_field[$i];
  199.                                         $field_value = $f["$field_name"];
  200.                                         echo "
  201. ";
  202.                                 }
  203.                                 echo "
  204. ";
  205.                         }
  206.                         /* 获取数据 end */
  207.                         echo "
  208. $field_name

  209.                                        
  210. $field_value

  211.                                                
  212. ";
  213.                 }
  214.         }
  215.         /* 获取数据 end */

  216.         /* 建立分页 begin */
  217.         public function create_page(){
  218.                 $this->db_conn();
  219.                 $this->set_page();
  220.                 $this->get_records();
  221.                 $this->page_count = ceil($this->records/$this->page_size);
  222.                 $this->page_link();
  223.                 $this->fetch_data();
  224.         }
  225.         /* 建立分页 end */

  226.         function __destruct(){

  227.         }
  228. /* 函数定义(类方法) end */
  229. }


  230. ///////////////////////////////////////////////////////////////////////////////
  231. /////////////////////////////////example///////////////////////////////////////
  232. /*step1: 建立分页对象
  233. *new pdo_page;
  234. */
  235. $page = new pdo_page;

  236. /*step2: 设置分页参数
  237. *
  238. *⑴设置数据库信息
  239. *pdo_page->set($db_driver,
  240. *                $db_host,
  241. *                $db_user,
  242. *                $db_password,
  243. *                $db_name,
  244. *                $db_table,
  245. *                $db_table_field,
  246. *                $page_size,
  247. *                $link_num);
  248. *参数说明:
  249. *$db_driver--db驱动
  250. *$db_host--dbms地址
  251. *$db_user--dbms帐户
  252. *$db_password--dbms密码
  253. *$db_name--db名称
  254. *$db_table--表名
  255. *$db_table_field--字段数组,将要显示的字段名称写入该数组
  256. *
  257. *⑵设置分页信息
  258. *$page_size--每页显示记录的数目
  259. *$link_num--显示翻页链接的数目
  260. */
  261. $page->set('mysql',
  262.         'localhost',
  263.         'root',
  264.         'goldfish',
  265.         'goldfish',
  266.         'goldfish',
  267.         array('id','name','age'),
  268.         2,
  269.         3);

  270. /*step3: 生成分页
  271. *pdo_page->create_page();
  272. */
  273. $page->create_page();

  274. /*step4: 获取分页数据
  275. *pdo_page->get();
  276. *page_data[0]: 表中记录的总数
  277. *page_data[1]: 总页数
  278. *page_data[2]: 当前页码
  279. *page_data[3]: pagestring,'首页'、'上一页'、'下一页'、'尾页'--链接样式
  280. *page_data[4]: page_link,[1]、[2]、[3]--链接样式
  281. *page_data[5]: page_select,表单翻页样式
  282. *page_data[6]: page_jump,跳转的指定页
  283. */
  284. $page_data = $page->get();

  285. /*step5: 输出分页信息
  286. *翻页链接显示输出begin
  287. */
  288.         echo '
    共有'.$page_data[0].'条记录';        //表中记录的总数
  289.         echo '     ';
  290.         echo '第'.$page_data[2].'页/';
  291.         echo '共'.$page_data[1].'页';                //总页数

  292.         echo '
    '.$page_data[3].'
    ';        //'首页'、'上一页'、
  293.                                                         //'下一页'、'尾页'
  294.                                                         //--链接样式

  295.         echo '
    '.$page_data[4].'
    ';        //[1]、[2]、[3]
  296.                                                         //--链接样式

  297.         echo '
    '.$page_data[5].'
    ';        //表单翻页样式
  298.         echo '
    '.$page_data[6].'
    ';        //跳转的指定页

  299. ?>
阅读(645) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~