ThinkPHP 分页中带入查询(搜索)条件

parameter 属性赋值


例如要检索用户表中状态为 1 (status=1) 并且电子包含 163 的用户,当提交表单时(注意表单是 GET 方式提交),形成的 URL
地址大致如下:

http://www.5idev.com/index.php/Index/search/status/1/email/163

在搜索操作(search)中主要代码如下:

public function search(){
$Dao = M("User");
// 构造查询条件
$condition[‘status‘] = $_GET[‘status‘];
$condition[‘email‘] = array(‘like‘,"%".$_GET[‘email‘]."%");
// 计算总数
$count = $Dao->where($condition)->count();
// 导入分页类
import("ORG.Util.Page");
// 实例化分页类
$p = new Page($count, 10);
// 获取查询参数
$map[‘status‘] = $_GET[‘status‘];
$map[‘email‘] = $_GET[‘email‘];
foreach($map as $key=>$val) {
$p->parameter .= "$key=".urlencode($val)."&";
}
// 分页显示输出
$page = $p->show();

// 当前页数据查询
$list = $Dao->where($condition)->order(‘uid ASC‘)->limit($p->firstRow.‘,‘.$p->listRows)->select();

// 赋值赋值
$this->assign(‘page‘, $page);
$this->assign(‘list‘, $list);

$this->display();
}


在页面的分页链接中,可以看到地址(如第 2 页)为:

http://www.5idev.com/index.php/Index/search/status/1/email/163?status=1&email=163&p=2

可以看见分页链接中已经包含了需要检索的 status=1&email=163 条件。当然,实际解析后的地址应该是:

http://www.5idev.com/index.php/Index/search/status/1/email/163/p/2/

这是因为 ThinkPHP 分页类对 URL 的处理还不够完美造成的。要对此进行改进,参看《ThinkPHP 定制分页风格及URL》。

传入 parameter 参数

带入查询条件的分页关键就是设置分页类的 parameter 属性值。除了上例中给 parameter
属性赋值外,也可以直接在实例化类的时候将 parameter 参数传入,两种方式结果是一致的:

$parameter = ‘status=‘.urlencode($_GET[‘status‘]).‘&email=‘.urlencode($_GET[‘email‘]);
// 实例化分页类时加入 parameter 参数
$p = new Page($count, 10, $parameter);
// 分页显示输出
$page = $p->show();

提示

上述例子只是用于讲述分页中带入查询条件的使用,因此未对检索的关键字进行进行安全处理。实际使用中在进行查询之前,应对用户输入的关键词做安全性方面的处理。

时间: 2024-08-06 18:03:00

ThinkPHP 分页中带入查询(搜索)条件的相关文章

thinkphp分页时保持查询条件

thinkphp 查询数据时需要分页显示时,会出现只有第1页是按查询条件查到的数据,而其他页面都恢复了,我们想要的结果却是:在翻页时,查询条件保持不变. 原因是:在分页跳转的时候,没有将查询条件作为分页参数传递到下一页.原来翻页的时候,存储在REQUEST变量中的参数并未被传递到下一页,因为表单的 method = “post”,而点击进入下一页时,很明显form表单被重置了,所以打印REQUEST变量也是空的. thinkphp RBAC的示例代码中给出了: PHP $p = new Page

ThinkPHP框架中关于查询分页显示的一个小方法

thinkphp框架是一个非常好用的框架.在日常使用中非常方便,其中包含了有分页的方法,我们用的时候往往会自定义的进行一些修改,下面是我自己修改的一个关于分页的小方法. 代码如下: function getPages($comModel,$where="",$order="",$pageSize="",$join="",$field="",$tmp="",$group="&qu

TinkPHP_无刷新分页_未带搜索条件

1)前台显示模板: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Ajax 实现无刷新页面</title> <meta http-equiv="Content-Type" conte

NHibernate之旅(4):探索查询之条件查询(Criteria Query)

本节内容 NHibernate中的查询方法 条件查询(Criteria Query) 1.创建ICriteria实例 2.结果集限制 3.结果集排序 4.一些说明 根据示例查询(Query By Example) 实例分析 结语 上一节,我们介绍了NHibernate查询语言的一种:NHibernate查询语言(HQL,NHibernate Query Language),这一节介绍一下条件查询(Criteria API). NHibernate中的查询方法 在NHibernate中提供了三种查

thinkphp分页参数带空格的问题

问题描述:thinkphp分页中参数如果带有空格,空格会被编码成“+”,那么有些分页数据就没法正常读取. 解决办法:改thinkphp自带Page类中的url方法,用rawurlencode代替urlencode编码. rawurlencode函数:返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数. urlencode函数:返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号

[转]NHibernate之旅(4):探索查询之条件查询(Criteria Query)

本节内容 NHibernate中的查询方法 条件查询(Criteria Query) 1.创建ICriteria实例 2.结果集限制 3.结果集排序 4.一些说明 根据示例查询(Query By Example) 实例分析 结语 上一节,我们介绍了NHibernate查询语言的一种:NHibernate查询语言(HQL,NHibernate Query Language),这一节介绍一下条件查询(Criteria API). NHibernate中的查询方法 在NHibernate中提供了三种查

hibernate中带查询条件的分页

所谓分页,从数据库中分,则是封装一个分页类.利用分页对象进行分页. 但,分页往往带查询条件. 分页类的三个重要数据:[当前页码数],[数据库中的总记录数],[每页显示的数据的条数] 原理:select * from  [表名] where   [字段名]  like   ['%条件%']    limit  [开始查询的索引],[每页显示的数据] 带查询条件的分页分两步 (1)第一步:查询出符合条件的数据的总条数 ---->select count(*) from [表名] where  [字段

【php】thinkphp以post方式查询时分页失效的解决方法

好久没有写博客了,最近说实话有点忙,各个项目都需要改bug.昨天晚上一直没有解决的php项目中的bug,就在刚才终于搞定,在这里还需要感谢博客园大神给的帮助! 具体问题描述 最近遇到一个非常棘手的问题,也是因为刚入手thinkphp.在做项目的过程中,因为需要非常多的查询条件,如果以get方式提交表单的话,会因为url长度限制而报错,所以必须使用post方式提交表单数据,但是在分页的过程中,遇到了问题,因为thinkphp自带的分页是以a标签的形式,进行下一页的,这样查询条件就没有传入后台,导致

springboot+thymeleaf处理带搜索条件的分页问题解决思路

一开始写项目的时候,没用ajax,导致做搜索分页功能的时候废了好大的劲,在这里分享一下处理这个问题的思路. 框架用的springboot,通过thymeleaf模板和前端交互,没有使用ajax,所以数据都是在域对象放的.分页用的springdatajpa的分页,他个其他的分页工具大同小异,优点在于不用在引入新的依赖,直接通过查询得到的就是Page对象,缺点就是springdatajpa自带的分页工具其起始页是从0开始的,这一点比较恶心,哈哈. 主要思路就是把搜索条件和分页的请求地址都在域中定义,