ThinkPhp框架:分页查询和补充框架知识

上一篇的随笔写的是基本操作,现在可以做一些高级操作,例如有条件的查询数据,有分页的条件查询数据

一、一个条件的查询数据

查询数据自然是先要显示出数据,然后根据条件进行查询数据

(1)显示出表的数据

这个方法我还是写在了HomeController.class控制器文件中

(1.1)写了一个方法shouye()


1

2

3

4

5

6

7

public function shouye()

{

    $n = M("nation");   //数据库中的表

    $arr = $n->select();  //查询表中的所有数据

    $this->assign("shuju",$arr);  //将二维数组注入变量

    $this->show();  //显示数据

}

(1.2)方法写完了之后,下面就是写显示页面了,这个名字和方法名一致

这里我们用表格来显示一下数据


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<table width="50%" border="1" cellpadding="0" cellspacing="0">

    <tr>

        <td>代号</td>

        <td>名称</td>

        <td>操作</td>

    </tr><br>

    <!--注意:这里的循环没有{}这是和smarty模板的区别-->       

    <foreach name="shuju" item="v" >   <!--参数name是php页面中的注入的名字,item是赋值的量-->

        <tr>

            <td>{$v.code}</td> <!--这就是显示的code列-->

            <td>{$v.name}</td> <!--这是显示的name列-->

            <td>操作</td>

        </tr>

    </foreach>

</table>           

下面运行看下效果:注意地址栏的书写:http://localhost/tp/index.php/Home/Home/shouye

(2)添加查询条件

(2.1)这样的话就要添加查询的文本框和查询按钮了,我们添加在表的前面

这里用表单来写,因为提交嘛,所以用表单进行写


1

2

3

4

5

6

<form action="__ACTION__" method="post">

    <div>

        根据名称查询:<input type="text" name="name" />

        <input type="submit" value="查询"/>

    </div>

</form>       

看下显示效果

(2.2)显示出来之后,就是后面的处理页面了

这个查询和添加、修改的逻辑处理方式还不一样,这里就不用if判断了


1

2

3

4

5

6

7

8

9

10

11

12

13

public function shouye()

{

    $tj = " 1=1 "; //条件恒成立

    if(!empty($_POST["name"]))  //判断传过来的name值是不是空的

    {

        $name = $_POST["name"]; 

        $tj = " Name like ‘%{$name}%‘ "//修改$tj的值

    }

    $n = M("nation");  

    $arr = $n->where($tj)->select();  //因为是tp框架,所以直接可以调用这个条件,用where()方法

    $this->assign("shuju",$arr);

    $this->show();

}       

这样运行一下,然后查看一下结果

查询一下“回”的信息,可以实现这个查询

(2.3)可以在这个查询中添加分页,也就是分页的显示

1.这里我们引用一下以前写过的page分页的类,先把这个page的类放到自己的模块下面,我放在了这里

打开这个类文件,修改一下命名空间如下所示:

然后关闭就可以了。

2.在shouye()方法中调用Page类

  2.1首先要调用这个page类

  2.2这个类要有两个参数:分页的总条数,显示的条数


1

$page = new \Home\shuju\page($zts,2);  //第一个参数:数据总条数;第二个参数是显示几条

  2.3总条数:查询也是要显示总条数


1

$zts = $n->where($tj)->count();  //总条数也要包括查询

  2.4在limit这里要对源文件,进行修改


1

$page->limit;  //LIMIT 10,3

  这样的话会多着个limit,那么在page.class.php源文件中删除就可以

  2.5查询所有条件时加上这个limit($page->limit)方法


1

$arr = $n->where($tj)->limit($page->limit)->select();

  2.6注入变量(将分页的信息显示信息注入)


1

$this->assign("fenye",$page->fpage());  //page的fpage分页的显示信息

看下总的这个shouye()的方法,上面的综合


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

public function shouye()

{

  $tj = " 1=1 ";

  if(!empty($_POST["name"]))

  {

    $name = $_POST["name"];

    $tj = " Name like ‘%{$name}%‘ ";   

  }    

  $n = M("nation");

  $zts = $n->where($tj)->count();  //总条数也要包括查询

        

  $page = new \Home\shuju\page($zts,2);  //第一个参数:数据总条数;第二个参数是显示几条

  //$page->limit;  //LIMIT 10,3

        

  $arr = $n->where($tj)->limit($page->limit)->select();  //这是显示的分页

  $this->assign("shuju",$arr);  //注入变量(总的数据的)

  $this->assign("fenye",$page->fpage());  //注入变量(分页的显示信息)

  $this->show();

}

  2.7在显示页面,显示这个变量


1

<div>{$fenye}</div>

看先运行结果,是有了分页信息

但是这样有个缺陷,就是在查询一个条件时,第一条是显示的总条数是正确的额,但是后面的是错误的,那么就是要修改代码

注意:将数据的传输方式修改(post修改为get)

3.查询的文本框显示默认值

这里在条件恒成立下,定义一个name值为空,然后在注入变量

在显示页面的文本框的中,添加value值是前面注入的变量

注意:

1.看下完整的php页面的代码


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

public function shouye()

{

      $tj = " 1=1 ";

      $name = "";

  if(!empty($_POST["name"]))

  {

    $name = $_POST["name"];

    $tj = " Name like ‘%{$name}%‘ ";   

  }    

  $n = M("nation");

  $zts = $n->where($tj)->count();  //总条数也要包括查询

        

  $page = new \Home\shuju\page($zts,2);  //第一个参数:数据总条数;第二个参数是显示几条

  //$page->limit;  //LIMIT 10,3

        

  $arr = $n->where($tj)->limit($page->limit)->select();  //这是显示的分页

  $this->assign("shuju",$arr);  //注入变量(总的数据的)

  $this->assign("fenye",$page->fpage());  //注入变量(分页的显示信息)

      $this->assign("name",$name);  //将name的值注入变量    

  $this->show();

}

2.显示页面的整体内容


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<form action="__ACTION__" method="get">

     <div>

        根据名称查询:<input type="text" name="name"  value="{$name}"/>

        <input type="submit" value="查询"/>

    </div>

</form>

<br />

<table width="50%" border="1" cellpadding="0" cellspacing="0">

    <tr>

        <td>代号</td>

        <td>名称</td>

        <td>操作</td>

    </tr>

            

    <foreach name="shuju" item="v" >

        <tr>

            <td>{$v.code}</td>

            <td>{$v.name}</td>

            <td>操作</td>

        </tr>

    </foreach>

</table>

        

<div>{$fenye}</div>       

这样总的效果就已经结束了

进行查询后,文本框显示查询的名字,显示的条数也是会变换的

二、数据取值方式

1.写一个方法,来进行数据的传值差别:正常的GET方式取值


1

2

3

4

public function testget()

{

    echo $_GET["name"];

}

在浏览器的地址栏地址中输入:

(1)后面是:?名称="值"

1.没有传值的话是空

http://localhost/tp/index.php/Home/Home/testget

输出就是空的:

2.有值的传值

http://localhost/tp/index.php/Home/Home/testget?name=%22%E4%BD%A0%E5%A5%BD%22

这样就会输出:你好

(2)后面是路径的方式:/名称/值

地址栏中输入:

http://localhost/tp/index.php/Home/Home/testget/name/qqqqqq

输出结果

注意:传多值就是/名字/值/名字/值

2.给方法赋值的方式取值


1

2

3

4

public function testget($code)

{

  echo $code;      

}

 

三、session方法和cookie方法

(1)session方法

1.默认情况下,初始化之后系统会自动启动session,如果不希望系统自动启动session的话,可以设置SESSION_AUTO_START为false,例如:


1

‘SESSION_AUTO_START‘ =>false

关闭自动启动后可以项目的公共文件或者在控制器中通过手动调用session_start或者session(‘[start]‘)启动session。

2.session赋值


1

session(‘name‘,‘value‘);  //设置session

3.session判断


1

2

// 判断名称为name的session值是否已经设置

session(‘?name‘);

4.session管理


1

2

3

4

session(‘[pause]‘); // 暂停session写入

session(‘[start]‘); // 启动session

session(‘[destroy]‘); // 销毁session

session(‘[regenerate]‘); // 重新生成session id

(2)cookie方法

Cookie设置


1

2

cookie(‘name‘,‘value‘);  //设置cookie

cookie(‘name‘,‘value‘,3600); // 指定cookie保存时间

四、模板(三元运算)

模板可以支持三元运算符


1

2

{$status?‘正常‘:‘错误‘}

{$info[‘status‘]?$info[‘msg‘]:$info[‘error‘]}

注意:三元运算符中暂时不支持点语法。

五、AJAX返回

要使用ajax就要引用jQuery了,我们把jQuery拿进来

(1)我放到了Public文件夹下,新建一个js文件夹下

(2)然后就是在显示的页面调出这个js文件


1

<script src="__PUBLIC__/js/jquery-1.11.2.min.js"></script>

(3)看下这个文件是不是引入了

在浏览器的地址栏中输入:http://localhost/tp/index.php/Home/Home/shouye

查看源代码查看是不是引入了

点开之后要是能够出现就是引入成功了

(4)在控制器中写一个方法chuli,让ajax返回这个方法


1

2

3

4

public function chuli()

{

   

}

(5)就要写ajax了


1

2

3

4

5

6

7

8

9

10

<script type="text/javascript">

  $.ajax({

  url:"__CONTROLLER__/chuli",  //处理方法的

  dataType:"TEXT",

  success: function(data){

    //成功之后的输出的信息

    }

            

  })

</script>

(6)在chuli方法页面就要写返回值了


1

2

3

4

public function chuli()

{

    $this->ajaxReturn("hello","eval");   //返回的值,返回值的方式eval就是text方式  

}

 注意:如果是JSON/JSONP格式,会自动编码成JSON字符串,如果是XML方式,会自动编码成XML字符串,如果是EVAL方式的话,只会输出字符串data数据。 

完整的显示页面的代码:


1

2

3

4

5

6

7

8

9

10

<script type="text/javascript">

    $.ajax({

        url:"__CONTROLLER__/chuli",

        dataType:"TEXT",

        success: function(data){

            alert(data);  //返回的信息

            }

            

    })

</script>       

看下效果:

也可以是关联数组的数据,就不写了

六、跳转和重定向

(1)页面跳转

使用方法很简单


1

2

3

4

5

6

7

8

9

10

$User = M(‘User‘); //实例化User对象

$result = $User->add($data);

if($result){  

     //设置成功后跳转页面的地址,默认的返回页面是$_SERVER[‘HTTP_REFERER‘]   

    $this->success(‘新增成功‘, ‘User/list‘);

}

else

{    //错误页面的默认跳转页面是返回前一页,通常不需要设置   

    $this->error(‘新增失败‘);

}

注意:success和error方法的第一个参数表示提示信息,第二个参数表示跳转地址,第三个参数是跳转时间(单位为秒)


1

2

3

4

// 操作完成3秒后跳转到 /Article/index

$this->success(‘操作完成‘,‘/Article/index‘,3);

// 操作失败5秒后跳转到 /Article/error

$this->error(‘操作失败‘,‘/Article/error‘,5);

注意:跳转地址是可选的,success方法的默认跳转地址是$_SERVER["HTTP_REFERER"],error方法的默认跳转地址是javascript:history.back(-1);。  

这就是tp框架的另外的一些知识和操作

时间: 2024-11-10 05:27:47

ThinkPhp框架:分页查询和补充框架知识的相关文章

框架 day49 BOS项目练习3(修复window控件BUG,添加/修改/作废取派员,datagrid使用,分页查询(DetachedCriteria离线),formatter函数)

BOS项目笔记第3天 1.    修复window控件bug 把弹出窗口拖动到浏览器窗口外之后无法再拖动     将提供的outOfBounds.js文件复制到项目中     在需要修复的jsp页面引入js文件,可以阻止控件拖出窗口 <script src="${pageContext.request.contextPath }/js/easyui/outOfBounds.js" type="text/javascript"></script&

框架 day50 BOS项目 4 批量导入(ocupload插件,pinyin4J)/POI解析Excel/Combobox下拉框/分区组合条件分页查询(ajax)/分区数据导出(Excel)

知识点: 批量导入(ocupload插件,pinyin4J /POI解析Excel(apache POI) /区域分页查询 /Combobox下拉框 /分区组合条件分页查询(ajax) /分区数据导出(Excel下载) BOS项目笔记第4天 1.    区域批量导入功能 *Ajax不支持文件上传. *上传并且不刷新上传页面原理: Target到一个0,0,0的隐藏iframe里,造成一个没有刷新的假象 <form target="myIframe" action="ab

Java_Web三大框架之Hibernate+jsp+HQL分页查询

分页查询无处不在.使用Hibernate+jsp+HQL进行分页查询. 第一步:编写房屋实体类和House.hbm.xml映射. /* * 房屋实体类 */ public class House { private int id;//房屋id private HouseType type;//房屋类型 private Users2 user;//用户 private Street street;//街道 private String title;//标题 private String descr

框架学习日志(4):如何通过Ajax进行分页查询并绑定数据?

需求设定 1.在页面中通过Ajax发送请求至程序后端对User表进行分页查询,将数据展示至页面上: 2.要求显示字段:主键.姓名.年龄.出生年份.性别.职位: 3.需要统计总数.可上下翻页.可指定页跳转: User表 Position字段,int型,值范围0-5,依次工作职位:实习生.普通职工.资深职工.团队组长.部门经理.公司经理. 以上为情景设定,接下来进入代码实战. 新建类库,搭建开发流程 User表属于账户管理模块,所以我们将新建的类库取名为Account. 分别在各层建立如下类库.文件

ssh框架中的分页查询

ssh中的分页查询是比较常用的,接下来我用代码来介绍如何实现一个分页查询 首先建立一个Model用来储存查询分页的信息 package com.haiziwang.qrlogin.utils; import java.util.List; public class prospage<T> { private int page; // 当前页数 private int totalCount; // 总记录数 private int totalPage; // 总页数 private int er

SpringBoot2.0系列教程(七)Springboot框架添加PageHelper分页查询功能

Hello大家好,本章我们添加PageHelper分页查询功能.另求各路大神指点,感谢 一:什么是PageHelper PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件 物理分页 支持常见的 12 种数据库.Oracle,MySql,MariaDB,SQLite,DB2,PostgreSQL,SqlServer 等 支持多种分页方式 支持常见的RowBounds(PageRowBounds),PageHelper.startPage 方法调用,Mapper 接口参数调用

dwz框架分页组件使用

dwz框架分页组件应用. <div class="panelBar" >     <div class="pages">         <span>显示</span>         <select name="pageSize" onchange="navTabPageBreak({numPerPage: this.value})">             &l

shopnc框架数据库查询限制30条记录

   shopnc框架数据库查询方法:Model()->table("表名")->select();假如你的表中数据大于30条,你查到的 结果中会只显示30条,解决方法是:查询语句中假如limit方法,即Model()->table("表名")-> limit(false)->select();

PHP--TP框架----把查询到的数据,显示在模型(模板)里面

MainController.class.php <?php namespace Home\Controller; use Think\Controller; class MainController extends Controller { function DB()//造操作方法 { $m = D("Info"); //把数据显示在模型里面 $attr = $m->select();//调用方法查询所有的数据,返回二维数组,把数组注册到模板里 $this->ass