zoukankan      html  css  js  c++  java
  • php分页实例及其原理

    Part1:实例

     1 /**
     2  * 取得上次的过滤条件
     3  * @param   string  $param_str  参数字符串,由list函数的参数组成
     4  * @return  如果有,返回array('filter' => $filter, 'sql' => $sql);否则返回false
     5  */
     6 function get_filter($param_str = '')
     7 {
     8     $filterfile = basename(PHP_SELF, '.php');//string basename ( string $path [, string $suffix ] )
                                 返回路径中的文件名部分
    如果文件名是以 suffix 结束的,那这一部分也会被去掉。 
     9     if ($param_str)
    10     {
    11         $filterfile .= $param_str;
    12     }
    13     if (isset($_GET['uselastfilter']) && isset($_COOKIE['ECSCP']['lastfilterfile'])
    14         && $_COOKIE['ECSCP']['lastfilterfile'] == sprintf('%X', crc32($filterfile)))
    15     {
    16         return array(
    17             'filter' => unserialize(urldecode($_COOKIE['ECSCP']['lastfilter'])),
    18             'sql'    => base64_decode($_COOKIE['ECSCP']['lastfiltersql'])
    19         );
    20     }
    21     else
    22     {
    23         return false;
    24     }
    25 }
     1 /**
     2  * 保存过滤条件
     3  * @param   array   $filter     过滤条件
     4  * @param   string  $sql        查询语句
     5  * @param   string  $param_str  参数字符串,由list函数的参数组成
     6  */
     7 function set_filter($filter, $sql, $param_str = '')
     8 {
     9     $filterfile = basename(PHP_SELF, '.php');
    10     if ($param_str)
    11     {
    12         $filterfile .= $param_str;
    13     }
    14     setcookie('ECSCP[lastfilterfile]', sprintf('%X', crc32($filterfile)), time() + 600);
    15     setcookie('ECSCP[lastfilter]',     urlencode(serialize($filter)), time() + 600);
    16     setcookie('ECSCP[lastfiltersql]',  base64_encode($sql), time() + 600);
    17 }
      1 /**
      2  * 供货商资源管理
      3  * @param    bool    $is_pagtion
      4  * @return    array   $arr
      5  */
      6 function suppliers_resource_manage($is_pagtion=true)
      7 {
      8     global $db,$ecs;
      9     $result = get_filter();
     10     if ($result === false)
     11     {
     12         $aiax = isset($_GET['is_ajax']) ? $_GET['is_ajax'] : 0;
     13         /* 过滤信息 */
     14         $filter['sort_by'] = empty($_REQUEST['sort_by']) ? 'r.resource_id' : trim($_REQUEST['sort_by']);
     15         $filter['sort_order'] = empty($_REQUEST['sort_order']) ? 'DESC' : trim($_REQUEST['sort_order']);
     16         $filter['resource_id'] = empty($_REQUEST['resource_id'])  ? '' : $_REQUEST['resource_id'];
     17         $filter['admin_name'] = empty($_REQUEST['admin_name'])  ? '' : trim($_REQUEST['admin_name']);
     18         $filter['resource_name'] = empty($_REQUEST['resource_name'])  ? '' : trim($_REQUEST['resource_name']);
     19         $filter['admin_id']  = isset($_REQUEST['admin_id'])?intval($_REQUEST['admin_id']):'-1';
     20         $filter['resource_type'] = empty($_REQUEST['resource_type']) ? '-1' : intval($_REQUEST['resource_type']);
     21         $filter['resource_status'] = empty($_REQUEST['resource_status']) ? '-1' : intval($_REQUEST['resource_status']);
     22         $filter['resource_rank'] = empty($_REQUEST['resource_rank']) ? '-1' : intval($_REQUEST['resource_rank']);
     23         $filter['resource_key'] = empty($_REQUEST['resource_key'])  ? '' : trim($_REQUEST['resource_key']);
     24         $filter['menuid'] = 7; 
     25         $where = 'WHERE 1 ';
     26         /* 分页大小 */
     27         $filter['page'] = empty($_REQUEST['page']) || (intval($_REQUEST['page']) <= 0) ? 1 : intval($_REQUEST['page']);
     28 
     29         if (isset($_REQUEST['page_size']) && intval($_REQUEST['page_size']) > 0)
     30         {
     31             $filter['page_size'] = intval($_REQUEST['page_size']);
     32         }
     33         elseif (isset($_COOKIE['ECSCP']['page_size']) && intval($_COOKIE['ECSCP']['page_size']) > 0)
     34         {
     35             $filter['page_size'] = intval($_COOKIE['ECSCP']['page_size']);
     36         }
     37         else
     38 
     39         {
     40             $filter['page_size'] = 15;
     41         }
     42         
     43         if(!empty($filter['resource_id']))
     44         {
     45             $resource_id = $filter['resource_id'] == -1 ? 0 : $filter['resource_id'];
     46             $where .= " and r.resource_id='".$resource_id."'";
     47         }
     48         if($filter['resource_name']){
     49             $where .= " AND r.resource_name like '%".mysql_like_quote($filter['resource_name'])."%' ";
     50         }
     51         if($filter['admin_id'] > -1)
     52         {
     53             $where .= " AND r.admin_id = '".$filter['admin_id']."' ";
     54         }
     55         if ($filter['resource_type'] > -1) 
     56         {
     57             $where .= " AND r.resource_type = '" . $filter['resource_type'] . "'";
     58         }
     59         if ($filter['resource_status'] > -1) 
     60         {
     61             $where .= " AND r.resource_status = '" . $filter['resource_status'] . "'";
     62         }
     63         if ($filter['resource_rank'] > -1) 
     64         {
     65             $where .= " AND r.resource_rank = '" . $filter['resource_rank'] . "'";
     66         }
     67         if($filter['resource_key']){
     68             $where .= " AND r.remark like '%".mysql_like_quote($filter['resource_key'])."%' ";
     69         }
     70         /* 记录总数 */
     71         $sql = "SELECT COUNT(r.resource_id) FROM " . $ecs->table('suppliers_resource')." as r 
     72                     LEFT JOIN ".$ecs->table('admin_user') . " as u
     73                         ON u.user_id = r.admin_id  " . $where;
     74         $filter['record_count']   = $db->getOne($sql);
     75         $filter['page_count']     = $filter['record_count'] > 0 ? ceil($filter['record_count'] / $filter['page_size']) : 1;
     76         /* 查询 */
     77         $sql = "SELECT r.resource_id, u.user_name as admin_name, r.resource_name, r.resource_link, r.resource_type, r.resource_status, r.resource_rank, r.remark, r.add_time FROM " . $ecs->table('suppliers_resource') . " as r 
     78                     LEFT JOIN " . $ecs->table('admin_user') . " as u ON u.user_id = r.admin_id  " . $where;
     79 
     80         $sort_by  = $filter['sort_by'];
     81         $sort_order = $filter['sort_order'];
     82         $sql .="GROUP BY r.resource_id ORDER BY " . $sort_by . " " . $sort_order;
     83         if($is_pagtion)
     84         {
     85             $sql .=" LIMIT ".($filter['page'] - 1)*$filter['page_size'].",".$filter['page_size'];
     86         }
     87         set_filter($filter, $sql);
     88     }
     89     else
     90     {
     91         $sql    = $result['sql'];
     92         $filter = $result['filter'];
     93     }
     94     $query=$sql;
     95 
     96     $row = $db->getAll($sql);
     97     /* 格式话数据 */
     98     foreach ($row AS $key => $value)
     99     {   
    100         if ($row[$key]['resource_type'] == 1) {
    101             $row[$key]['resource_type'] = '中模';
    102         }elseif ($row[$key]['resource_type'] == 2) {
    103             $row[$key]['resource_type'] = '泳装';
    104         }elseif ($row[$key]['resource_type'] == 3) {
    105             $row[$key]['resource_type'] = '阿里';
    106         }elseif ($row[$key]['resource_type'] == 2) {
    107             $row[$key]['resource_type'] = '17网';
    108         }
    109         if ($row[$key]['resource_status'] == 1) {
    110             $row[$key]['resource_status'] = '已审核';
    111         }elseif ($row[$key]['resource_status'] == 2) {
    112             $row[$key]['resource_status'] = '已弃用';
    113         }
    114         if ($row[$key]['resource_rank'] == 1) 
    115         {
    116             $row[$key]['resource_rank'] = 'A';
    117         }elseif ($row[$key]['resource_rank'] == 2) {
    118             $row[$key]['resource_rank'] = 'B';
    119         }elseif ($row[$key]['resource_rank'] == 3) {
    120             $row[$key]['resource_rank'] = 'C';
    121         }
    122         if(strpos($row[$key]['resource_link'], 'http://') === false)
    123         {
    124             if (strpos($row[$key]['resource_link'], 'https://') === false) 
    125             {
    126                 $row[$key]['resource_link'] = substr_replace($row[$key]['resource_link'], 'http://', 0, 0);
    127             }
    128         }
    129     }
    130     $arr = array('result' => $row, 'filter' => $filter, 'page_count' => $filter['page_count'], 'record_count' => $filter['record_count'],'query'=>$query);
    131     return $arr;
    132 } 
    View Code

    Part2:解码编码

    urlencode编码 URL 字符串

    说明

    string urlencode ( string $str )

    此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页。

    参数
      str
      要编码的字符串。
    返回值

    返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 » RFC3896 编码(参见 rawurlencode())不同。 

    urldecode — 解码已编码的 URL 字符串

    说明

      string urldecode ( string $str )

      解码给出的已编码字符串中的任何 %##。 加号('+')被解码成一个空格字符。

    参数

      str
      要解码的字符串。

    返回值

      返回解码后的字符串。

    Warning

        超全局变量 $_GET 和 $_REQUEST 已经被解码了。对 $_GET 或 $_REQUEST 里的元素使用 urldecode() 将会导致不可预计和危险的结果。 

     

    serialize 产生一个可存储的值的表示

    描述

    string serialize ( mixed $value )

    serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。

    这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。

    想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组/对象中的引用也将被存储。

    当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。

    Note:

    在 PHP 3 中,对象属性将被序列化,但是方法则会丢失。PHP 4 打破了此限制,可以同时存储属性和方法。请参见类与对象中的序列化对象部分获取更多信息。 

     unserialize — 从已存储的表示中创建 PHP 的值

    说明

    mixed unserialize ( string $str )

    unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。

    参数
      str
      序列化后的字符串.
      若被解序列化的变量是一个对象,在成功地重新构造对象之后,PHP 会自动地试图去调用 __wakeup() 成员函数(如果存在的话)。

     Noteunserialize_callback_func 指令

    如果在解序列化的时候需要实例化一个未定义类,则可以设置回调函数以供调用(以免得到的是不完整的 object"__PHP_Incomplete_Class")。可通过 php.iniini_set() 或 .htaccess 定义'unserialize_callback_func'。每次实例化一个未定义类时它都会被调用。若要禁止这个特性,只需置空此设定。

    返回值

    返回的是转换之后的值,可为 integerfloatstringarray 或 object

    如果传递的字符串不可解序列化,则返回 FALSE,并产生一个 E_NOTICE。 

    base64_encode使用 MIME base64 对数据进行编码

    说明

    string base64_encode ( string $data )

    使用 base64 对 data 进行编码。

    设计此种编码是为了使二进制数据可以通过非纯 8-bit 的传输层传输,例如电子邮件的主体。

    Base64-encoded 数据要比原始数据多占用 33% 左右的空间。

    参数

      data
      要编码的数据。

    返回值

      编码后的字符串数据, 或者在失败时返回 FALSE

    base64_decode — 对使用 MIME base64 编码的数据进行解码
    说明
      string base64_decode ( string $data [, bool $strict = false ] )
      对 base64 编码的 data 进行解码。
    参数
      data
      编码过的数据。
      strict
      如果输入的数据超出了 base64 字母表,则返回 FALSE
    返回值
      返回原始数据, 或者在失败时返回 FALSE。返回的数据可能是二进制的。

    Part3:分页原理分析

    11

  • 相关阅读:
    CodeForces
    CodeForces
    CodeForces
    【模板】POJ-1511(dijkstra堆优化+链式前向星)
    【模板】POJ-1502(dijkstra)
    P2862 [USACO06JAN]Corral the Cows G
    P2495 [SDOI2011]消耗战
    CF613D Kingdom and its Cities
    P4655 [CEOI2017]Building Bridges
    P3917 异或序列
  • 原文地址:https://www.cnblogs.com/jasonxu19900827/p/7681175.html
Copyright © 2011-2022 走看看