Part1:实例

 /**
* 取得上次的过滤条件
* @param string $param_str 参数字符串,由list函数的参数组成
* @return 如果有,返回array('filter' => $filter, 'sql' => $sql);否则返回false
*/
function get_filter($param_str = '')
{
$filterfile = basename(PHP_SELF, '.php');//string basename ( string $path [, string $suffix ] )
                             返回路径中的文件名部分如果文件名是以 suffix 结束的,那这一部分也会被去掉。 
     if ($param_str)
{
$filterfile .= $param_str;
}
if (isset($_GET['uselastfilter']) && isset($_COOKIE['ECSCP']['lastfilterfile'])
&& $_COOKIE['ECSCP']['lastfilterfile'] == sprintf('%X', crc32($filterfile)))
{
return array(
'filter' => unserialize(urldecode($_COOKIE['ECSCP']['lastfilter'])),
'sql' => base64_decode($_COOKIE['ECSCP']['lastfiltersql'])
);
}
else
{
return false;
}
}
 /**
* 保存过滤条件
* @param array $filter 过滤条件
* @param string $sql 查询语句
* @param string $param_str 参数字符串,由list函数的参数组成
*/
function set_filter($filter, $sql, $param_str = '')
{
$filterfile = basename(PHP_SELF, '.php');
if ($param_str)
{
$filterfile .= $param_str;
}
setcookie('ECSCP[lastfilterfile]', sprintf('%X', crc32($filterfile)), time() + 600);
setcookie('ECSCP[lastfilter]', urlencode(serialize($filter)), time() + 600);
setcookie('ECSCP[lastfiltersql]', base64_encode($sql), time() + 600);
}
 /**
* 供货商资源管理
* @param bool $is_pagtion
* @return array $arr
*/
function suppliers_resource_manage($is_pagtion=true)
{
global $db,$ecs;
$result = get_filter();
if ($result === false)
{
$aiax = isset($_GET['is_ajax']) ? $_GET['is_ajax'] : 0;
/* 过滤信息 */
$filter['sort_by'] = empty($_REQUEST['sort_by']) ? 'r.resource_id' : trim($_REQUEST['sort_by']);
$filter['sort_order'] = empty($_REQUEST['sort_order']) ? 'DESC' : trim($_REQUEST['sort_order']);
$filter['resource_id'] = empty($_REQUEST['resource_id']) ? '' : $_REQUEST['resource_id'];
$filter['admin_name'] = empty($_REQUEST['admin_name']) ? '' : trim($_REQUEST['admin_name']);
$filter['resource_name'] = empty($_REQUEST['resource_name']) ? '' : trim($_REQUEST['resource_name']);
$filter['admin_id'] = isset($_REQUEST['admin_id'])?intval($_REQUEST['admin_id']):'-1';
$filter['resource_type'] = empty($_REQUEST['resource_type']) ? '-1' : intval($_REQUEST['resource_type']);
$filter['resource_status'] = empty($_REQUEST['resource_status']) ? '-1' : intval($_REQUEST['resource_status']);
$filter['resource_rank'] = empty($_REQUEST['resource_rank']) ? '-1' : intval($_REQUEST['resource_rank']);
$filter['resource_key'] = empty($_REQUEST['resource_key']) ? '' : trim($_REQUEST['resource_key']);
$filter['menuid'] = 7;
$where = 'WHERE 1 ';
/* 分页大小 */
$filter['page'] = empty($_REQUEST['page']) || (intval($_REQUEST['page']) <= 0) ? 1 : intval($_REQUEST['page']); if (isset($_REQUEST['page_size']) && intval($_REQUEST['page_size']) > 0)
{
$filter['page_size'] = intval($_REQUEST['page_size']);
}
elseif (isset($_COOKIE['ECSCP']['page_size']) && intval($_COOKIE['ECSCP']['page_size']) > 0)
{
$filter['page_size'] = intval($_COOKIE['ECSCP']['page_size']);
}
else {
$filter['page_size'] = 15;
} if(!empty($filter['resource_id']))
{
$resource_id = $filter['resource_id'] == -1 ? 0 : $filter['resource_id'];
$where .= " and r.resource_id='".$resource_id."'";
}
if($filter['resource_name']){
$where .= " AND r.resource_name like '%".mysql_like_quote($filter['resource_name'])."%' ";
}
if($filter['admin_id'] > -1)
{
$where .= " AND r.admin_id = '".$filter['admin_id']."' ";
}
if ($filter['resource_type'] > -1)
{
$where .= " AND r.resource_type = '" . $filter['resource_type'] . "'";
}
if ($filter['resource_status'] > -1)
{
$where .= " AND r.resource_status = '" . $filter['resource_status'] . "'";
}
if ($filter['resource_rank'] > -1)
{
$where .= " AND r.resource_rank = '" . $filter['resource_rank'] . "'";
}
if($filter['resource_key']){
$where .= " AND r.remark like '%".mysql_like_quote($filter['resource_key'])."%' ";
}
/* 记录总数 */
$sql = "SELECT COUNT(r.resource_id) FROM " . $ecs->table('suppliers_resource')." as r
LEFT JOIN ".$ecs->table('admin_user') . " as u
ON u.user_id = r.admin_id " . $where;
$filter['record_count'] = $db->getOne($sql);
$filter['page_count'] = $filter['record_count'] > 0 ? ceil($filter['record_count'] / $filter['page_size']) : 1;
/* 查询 */
$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
LEFT JOIN " . $ecs->table('admin_user') . " as u ON u.user_id = r.admin_id " . $where; $sort_by = $filter['sort_by'];
$sort_order = $filter['sort_order'];
$sql .="GROUP BY r.resource_id ORDER BY " . $sort_by . " " . $sort_order;
if($is_pagtion)
{
$sql .=" LIMIT ".($filter['page'] - 1)*$filter['page_size'].",".$filter['page_size'];
}
set_filter($filter, $sql);
}
else
{
$sql = $result['sql'];
$filter = $result['filter'];
}
$query=$sql; $row = $db->getAll($sql);
/* 格式话数据 */
foreach ($row AS $key => $value)
{
if ($row[$key]['resource_type'] == 1) {
$row[$key]['resource_type'] = '中模';
}elseif ($row[$key]['resource_type'] == 2) {
$row[$key]['resource_type'] = '泳装';
}elseif ($row[$key]['resource_type'] == 3) {
$row[$key]['resource_type'] = '阿里';
}elseif ($row[$key]['resource_type'] == 2) {
$row[$key]['resource_type'] = '17网';
}
if ($row[$key]['resource_status'] == 1) {
$row[$key]['resource_status'] = '已审核';
}elseif ($row[$key]['resource_status'] == 2) {
$row[$key]['resource_status'] = '已弃用';
}
if ($row[$key]['resource_rank'] == 1)
{
$row[$key]['resource_rank'] = 'A';
}elseif ($row[$key]['resource_rank'] == 2) {
$row[$key]['resource_rank'] = 'B';
}elseif ($row[$key]['resource_rank'] == 3) {
$row[$key]['resource_rank'] = 'C';
}
if(strpos($row[$key]['resource_link'], 'http://') === false)
{
if (strpos($row[$key]['resource_link'], 'https://') === false)
{
$row[$key]['resource_link'] = substr_replace($row[$key]['resource_link'], 'http://', 0, 0);
}
}
}
$arr = array('result' => $row, 'filter' => $filter, 'page_count' => $filter['page_count'], 'record_count' => $filter['record_count'],'query'=>$query);
return $arr;
}

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

php分页实例及其原理的更多相关文章

  1. RDIFramework.NET 中多表关联查询分页实例

    RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.该框架以SOA范式作为 ...

  2. php分页实例附代码

    一个典型的PHP分页实例代码分享,学习php的朋友肯定用得到,主要是了解思路: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...

  3. Jsp分页实例---真分页

    网页的分页功能的实现比较简单,实现方法也多种多样. 今天总结一个简单的Jsp真分页实例. 首先,提到分页就要先明确一个概念,何为真分页何谓假分页. 假分页:一次性从数据库读出表的所有数据一次性的返回给 ...

  4. Struts+jdbc+分页 实例

    根据项目里分页实例,带有注解. package org.tarena.netctoss.dao.impl; import java.sql.Connection; import java.sql.Pr ...

  5. oracle分页查询及原理分析(总结)

    oracle分页查询及原理分析(总结) oracle分页查询是开发总为常用的语句之一,一般情况下公司框架会提供只需套用,对于增删改查而言,查是其中最为关键也是最为难的一块,其中就有使用率最高的分页查询 ...

  6. js分页实例

    js分页实例 案例1 1.js_pageusers.html <!DOCTYPE html> <html> <head> <title>js_pageu ...

  7. NHibernate初学三之条件查询(Criteria Queries)与AspNetPager分页实例

    NHibernate除了SQL与HQL两种查询操作外,还有一种就是条件查询Criteria,本文将从网上整理一些Criteria的理论及小实例,最后通过一个结合AspNetPager分页来加深理解,必 ...

  8. CSS 分页实例

    CSS 分页实例 一.简单分页 如果你的网站有很多个页面,你就需要使用分页来为每个页面做导航. 以下实例演示了如何使用 HTML 和 CSS 来创建分页: <!DOCTYPE html> ...

  9. ThinkPHP分页实例

    ThinkPHP分页实例 (2014-09-20 15:34:36)   很多人初学thinkphp时,不太熟悉thinkphp的分页使用方法,现在将自己整理的分页方法分享下,有需要的朋友可以看看. ...

随机推荐

  1. 小白学Linux

    Linux的文件关系: / 根最大的文件夹,存储此台计算机的所有数据 /etc  存放计算机的配置文件 /var/log 存放电脑的日志文件 /home 家的位置 路径:相对路径.绝对路径(从根下开始 ...

  2. Performs the analysis process on a text and return the tokens breakdown of the text

    Analyzeedit Performs the analysis process on a text and return the tokens breakdown of the text. Can ...

  3. 利用PHP的curl批量导出文件

    场景 1.需要从网站中导出大量的文件,包括有图片格式,文档格式等附件内容. 2.分文件夹来导出不同的数据 <?php header("Content-Type:text/html;ch ...

  4. PHP之旅 php数据类型

    1.php中int型,表示八进制或十六进制或者十进制时的不同,八进制前面加0,十六进制前面加0x <?php $dec_int=99; $oct_int=066; $hex_int=0X1a; ...

  5. leetcode-896-单调数列

    题目描述: 如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的. 如果对于所有 i <= j,A[i] ...

  6. Junit 测试exception

    有两种方法: 一.使用ExpectedException 仅在junit4.7以上支持.不仅可以测试捕获到某异常,也可以测试异常message. 使用例子如下: @Rule public Expect ...

  7. Vue 不睡觉教程1-从最土开始

    目标最近在学习vue的过程中发现网上的vue教程总有些不同的问题,有的教程上来只说语法,有的教程上来就用vue-cli来建项目,但是vue-cli是整合了webpack等多个插件的工具,不利于我们学习 ...

  8. angularJs集成百度地图

    app.controller('mapSignController',function($scope,$rootScope,Message, $window,$uibModalInstance){ v ...

  9. c# 抽象类 抽象方法

    抽象类与非抽象类的主要区别: ·抽象类不能直接被实例化 ·抽象类中可以包含抽象成员,但非抽象类中不可以 ·抽象类不能被密封 声明抽象方法时需注意:·抽象方法必须声明在抽象类中 ·声明抽象方法时,不能使 ...

  10. js 数组随机排序

    仅用于个人学习记录 javascript 数组随机排序1.最简洁的方法:function randomsort(a, b) {    return Math.random()>.5 ? -1 : ...