查询条件分页,分页中带走查询

parameter 属性赋值

诸如要找出用户表中状态为 1 (status=1) 何况电子富含 163
的用户,当提交表单时(注意表单是 GET 格局提交),产生的 U途乐L
地址大致如下:

在寻觅操作(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 页)为:

能够瞥见分页链接中早已包括了供给搜索的 status=1&email=163
条件。当然,实际深入分析后的地点应该是:

那是因为 ThinkPHP 分页类对 U科雷傲L
的管理还非常不足完美变成的。要对此张开创新,参看《ThinkPHP
定制分页风格及U君越L》。

询问条件分页

CURD(创建[Create]、更新[Updata]、读取[Read]、删除[Delete]),定义了用来拍卖数据的为主原子操作。

传入 parameter 参数

带走查询条件的分页关键正是安装分页类的 parameter 属性值。除了上例中给
parameter 属性赋值外,也能够间接在实例化类的时候将 parameter
参数字传送入,二种艺术结果是同样的:

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

在上一小节《ThinkPHP分页详解及分页应用实例》文中只陈说了日常查询分页的援引,其询问参数是相对坚固的。比非常多场合下,分页还有大概会带走查询条件,而那时查询往往是不稳固的。比如常见的检索,须要依照用户查询的根本字来开始展览寻觅,在找出结果太多时,就须要将寻觅结果开始展览客观分页。

CUEnclaveD在切切实实的施用中不用一定使用create、updata、read、delete字样的方式,但是她们成就的效劳是毫发不爽的。

提示

上述例子只是用来陈述分页中指点查询条件的应用,由此未对搜索的关键字张开垦展安全管理。实际应用中在举办询问从前,应对用户输入的关键词做安全性方面包车型客车拍卖。


ThinkPHP
分页能够很轻便的落实对不定点查询参数的补助。具体贯彻是给分页类的
parameter
本性赋值或然间接实例化分页类时传入查询参数。上面以例子来证实。
parameter 属性赋值
举例说要物色用户表中状态为 1
(status=1) 况且电子满含 163 的用户,当提交表单时(注意表单是 GET
方式提交),产生的 URubiconL
地方差不离如下:

例如:

ThinkPHP就是行使add、save、select和delete方法表示模型的CULX570D操作。

在寻找操作(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();
}

CUMuranoD的Create操作平常会由此表单来交给数据,首先,大家在项目标Tpl/Form目录上边创立三个add.html模板文件,内容为:

在页面的分页链接中,能够见见位置(如第 2
页)为:

<FORM method=”post” action=”_URL_/insert”>

标题:<input
type=”text” name=”title”><br/>

能够瞥见分页链接中早就包括了需求探寻的。
status=1&email=163
规格。当然,实际分析后的地方应该是:

内容:<textarea
name=”content” rows=”5” cols=”45”></textarea><br/>

<input type=”submit” value=”提交”>

那是因为
ThinkPHP 分页类对 U君越L
的管理还相当不足完善形成的。要对此张开考订,参看《ThinkPHP
定制分页风格及UWranglerL》。
传入 parameter
参数

</form>

教导查询条件的分页关键便是设置分页类的 parameter 属性值。除了上例中给
parameter
属性赋值外,也足以直接在实例化类的时候将 parameter
参数字传送入,二种方法结果是一致的:

在档案的次序的Action目录上面成立二个FormAction.class.php文件,一时半刻只供给定义FormAction类,没有供给增多任何操作方法,代码如下:

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

Class FormAction extends Action {}

提示

接下来,访问:http://localhost/app/index.php/Form/add

上述例子只是用来说述分页中带走查询条件的使用,因而未对寻找的第一字打开实行安全处理。实际行使中在伸开查询从前,应对用户输入的重视词做安全性方面包车型大巴管理。

 

注意:

大家并未在调节器里面定义add操作方法,不过很令人瞩目,访谈是例行的。

原因:

因为ThinkPHP在未曾找到相应操作方法的图景下,会检讨是或不是存在对应的模板文件,由于大家有照看的add模板文件,所以调节器就间接渲染该模板文件输出了。

之所以说对于从未别的实际逻辑的操作方法,我们只须求一直定义对应的沙盘文件就行了。

 

表单管理:

Class FormAction extends Action {

public function insert(){

$Form = D(‘Form’);

If($Form -> create()){

  $result = $form->add();

If($result){

$this -> success(‘操作成功!’);

}else{

$this -> error(‘写入错误!’);

}

}else{

$this -> error($Form -> getError());

}

}

}

一经您的主键是自增类型的话,add方法的再次来到值就是该主键的值。

不是自增主键的话,再次来到值表示插入数据的个数。要是回去false则意味写入出错。

 

二、模型

建think_form表:

CREATE TABLE IF NOT EXISTS ‘think_form’ (

‘id’ smallint(4) unsigned NOT NULL AUTO_INCREMENT,

‘title’ varchar(255)  NOT NULL,

‘content’ varchar(255) NOT NULL,

‘create_time’ int(11) unsigned NOT NULL,

PRIMARY KEY (‘id’)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

注意:D函数和M函数不相同,须要有相应的模型类。

创制模型类:

模型名的概念标准:模型名+Model.class.php(模型名的定义采纳驼峰法並且首字母大写)

大家在品种的Lib/Model目录上边创设FormModel.class.php文件,加多代码如下:

Class FormModel extends Model {

//定义自动验证

Protected $_validate = array(

Array(‘title’,’require’,’标题必须’),

);

//完毕机关完结

Protected $_auto = array(

Array(‘create_time’,’time’,1,’function’),

);

}

要害用来表单的活动验证和自行达成。

一经采用D函数实例化模型类,一般供给相应三个数据模型类,并且create方法会自动把表单提交的数量开始展览自动验证和到位(假如有定义的话)。

 

万一证实成功,就代表数据对象已经打响成立,但当下只是保存在内部存款和储蓄器中,直到大家调用add方法写入数据到数据库。那样就做到了八个完全的Create操作,所以能够看看ThinkPHP在创立数量的长河中利用了两步:

率先步,create方法成立数量对象,

第二步,使用add方法把当下的数据对象写入数据库

自然能够完全抢先第一步,直接开始展览第二步,可是如此的预管理有几个优势:

1、无论表单有多复杂,create方法都能够用一行代码轻巧创立数量对象,

2、在写入数据此前,能够对数码实行求证和互补;

指标:确定保证写入数据库的数据安全和有效性。

功效:验证完结不输入标题就径直付出表单的话,系统会提交标题必须那样的提示消息。

 

假设您的数目完全部都以当中操作写入并不是透过表单的话(约等于说能够尽管相信数据的南迦巴瓦峰),那么能够一贯利用add方法,如:

$Form = D(‘Form’);

$data[‘title’] = ‘ThinkPHP’;

$data[‘content’] = ‘表单内容’;

$Form->add($data);

也足以支撑对象方式操作:

$Form = D(‘Form’);

$Form -> title = “ThinkPHP”;

$Form -> content = “表单内容”;

$Form -> add();

目的格局操作的时候,add方法没有必要传入数据,会自动识别当前的多少对象赋值。

 

三、读取数据

大家得以经过find方法得到贰个纯净数据,定义read操作方法如下:

Public function read($id=0){

$Form = M(‘Form’);

//读取数据

$data = $Form -> find($id);

If($data){

$this->data = $data;//模板变量赋值

}else{

$this->error(‘数据失实’);

}

$this->display();

}

read操作方法有贰个参数$id,表示大家得以接受U陆风X8L里面包车型大巴id变量(

那边用M方法而从未用D方法,是因为find方法是基础模型类Model中的方法,

因此并没有要求浪费耗费去实例化FormModel类(固然已经定义了FormModel类)。

咱俩平日使用find方法读取有个别数据,这里运用了A福睿斯情势来操作,所以未有传到查询条件,

Find($id)表示读取主键为$id值的数量,find方法的再次回到值是三个之类格式的数组:

 

 

Array(

‘id’      =>   5,

‘title’     =>  ‘测验标题’,

‘content’  =>  ‘测量试验内容 ’,

‘status’   =>  1,

接下来大家得以在模板中输出数据,增添几个read模板文件,

<table>

<tr>

<td>id;</td>

<td>{$data.title}</td>

</tr>

<tr>

<td>标题:</td>

<td>{$data.title}</td>

</tr>

<tr>

<td>内容:</td>

<td>{$data.content}</td>

</tr>

</table>

拜会路线:http://localhost/app/index.php/Form/read/id/1

查询有个别字段能够选取getField方法:

$Form = M(“Form”);

//获取标题

$title = $Form -> where(‘id=3’)->getField(‘title’);

四、更新数据

对数码进行立异,加多三个编辑表单的模板文件edit.html,如下:

<FORM method=”post” action=”_URL_/update”>

标题:<input
type=”text” name=”title” value=”{$vo.title}”><br/>

内容:<textarea
 name=”content” rows=”5” cols=”45”>{$vo,content}}</textarea>

<br/>

<input type=”hidden” name=”id” value=”{$vo.id}”>

<input type=”submit” value=”提交”>

</FORM>

因是立异数据所以只对模板进行变量赋值,所以,咱们此次供给在FormAction类增添三个操作方法:

Public function edit($id=0){

$Form = M(‘Form’);

$this -> vo = $Form -> find($id);

$this -> display();

}

Public function update(){

$Form = D(‘Form’);

If($Form->create()){

$result = $Form->save();

If($result){

$this -> success(‘操作成功!’);

}else{

$this -> error(‘写入错误!’);

}

}else{

$this->error($Form->getError());

}

}

数量的翻新操作在ThinkPHP使用save方法实行保存更新数据,

Create方法创设表单提交数据。

立异典型实在正是表的主键,那就是我们在编写制定页面要把主键的值作为隐蔽字段一起提交的原因。

不注重表单提交的立异操作

 

$Form = M(“Form”);

// 要修改的多寡对象属性赋值

$data[‘id’] = 5;

$data[‘title’] = “ThinkPHP”;

$data[‘content’] = ‘ThinkPHP3.1版本公布’;

$Form -> save($data); //依照法规保存修改的数码

Save方法会自动识别数据对象中的主健字段,并作为创新标准。

 

体现传入更新典型:

$Form = M(“Form”);

//要修改的数码对象属性赋值

$data[‘title’] = ‘ThinkPHP’;

$data[‘content’] = ‘ThinkPHP3.1版本公布’;

$Form -> where(‘id=5’)->save($data); //依据法则保存修改的多少

能够改成靶子格局来操作:

$Form = M(“Form”);

//要修改的多寡对象属性赋值

$Form->title = ’ThinkPHP’;

$Form->content = “ThinkPHP3.1版本公布”;

$Form->where(‘id=5’)->save();//依照规范保存修改的数额

数据对象赋值的不二秘籍,save方法不供给传入数据,会自动识别。

Save方法的重临值是潜濡默化的记录数,假若回到false则意味着更新出错。

 

稍许时候,我们只必要修改有个别字段的值,就足以选用setField方法,而无需每趟都调用save方法。

$Form = M(“Form”);

//更改title值

$Form -> where(‘id=5’) -> setField(‘title’,’ThinkPHP’);

美高梅开户网址,对此总计字段,系统还提供了进一步便于的setInc和setDec方法。

例如:

$user = M(“user”);  //实例化User对象

$User -> where(‘id=5’)->setInc(‘score’,3); //用户的积分加3

$User ->where(‘id=5’)->setInc(‘score’); //用户的积分加1

$User->where(‘id=5’)->setDec(‘score’,5); //用户的积分减5

$User->where(‘id=5’)->setDec(‘score’); //用户的积分减1

五、删除数据

剔除数据很简单,只供给调用delete方法,比方:

$Form=M(‘Form’);

$Form -> delete(5);

表示删除主键为5的多寡,delete方法能够去除单个数据,也能够去除八个数据,那有赖于删除条件,比方:

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

$User -> where(‘id=5’)->delete(); //删除id为5的用户数量

$User -> delete(‘1,2,5’); //删除主键为1,2和5的用户数量

$User -> where(‘status=0’)->delete(); //删除全体境况为0的用户数量

Delete方法的重返值是去除的记录数,假如再次来到值是false则表示SQL出错,重临值要是为0代表不曾去除任何数据。

六、总结

Create方法:创立数量

Add方法: 添扩充少

Save方法:   保存数据

Delete方法:删除数据

get菲尔德方法:获取单个音讯字段

setField方法:设置单个音信字段

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图