这个知识点,就能够经过“登陆”和“注册”的页面来学习这个知识点了
首先先作一个“登陆”功能
1、登陆功能(父类)
(1)登陆的控制器
在个人控制器文件夹中新建一个登录控制器
个人路径是这样的:javascript
而后里面要书写正确才能够,其中要有命名空间,还有继承父类的控制器php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<?php
namespace
Home\Controller;
use
Think\Controller;
class
LoginController
extends
Controller
{
public
function
denglu()
{
if
(
empty
(
$_POST
))
//判断传过来的值是否是空的
{
$this
->show();
//空的显示页面
}
else
{
}
}
}
|
(2)编写登陆的页面 css
个人这个页面我放在了html
这个登陆页面都是写过不少遍了,就不解释了,这里用的仍是表单元素java
1
2
3
4
5
6
7
|
<
form
action="__ACTION__" method="post">
<
div
>用户名:<
input
type="text" name="uid" /></
div
>
<
br
/>
<
div
>密 码:<
input
type="password" name="pwd" /></
div
>
<
input
type="submit" value="登陆" />
</
form
>
|
看下基本的运行页面效果!!注意浏览器的地址栏的书写:http://localhost/tp/index.php/Home/Login/denglujquery
(3)补充php页面中的不然语句ajax
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
else
{
$u
= M(
"user"
);
//造表
$uid
=
$_POST
[
"uid"
];
//接收传出过来得用户名
$pwd
=
$_POST
[
"pwd"
];
//接收传过来的密码
$attr
=
$u
->find(
$uid
);
//查找一条数据
f(
$attr
[
"password"
]==
$pwd
&& !
empty
(
$pwd
))
//判断密码是否是相等还有是否是空的
{
session(
"uid"
,
$uid
);
//session存住用户名
$this
->success(
'登陆成功!'
,U(
'Home/shouye'
));
//跳转页面("提示信息","跳转的页面","时间")
}
else
{
$this
->error(
"登陆失败!"
);
}
}
|
运行看下结果:数据库
1)输入帐号和密码,密码是错误的时浏览器
2)输入帐号和密码,密码是正确的时session
3)时间已过,跳转到首页面
这样有个bug就是,这个首页即便没有登陆也能够查看这个页面,因此咱们要加一个条件,来判断这个没有登陆时,不能走这个页面,也就是返回登陆页面,可是每一个方法都要判断就会显得很繁琐,又不能直接修改原控制器文件,因此,能够在他们之间在建一个控制器文件,做为他们的桥梁
(4)搭建的他们之间的桥梁
(4.1)新建的一个控制器类文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?php
namespace
Home\Controller;
use
Think\Controller;
class
FuController
extends
Controller
{
//若是一个类要实例化,要使用一个构造方法__construct()
public
function
__construct()
{
//调用父类的构造:执行父类以后再用本身的
parent::__construct();
//判断session是否存在
if
(!session(
'?uid'
))
{
$this
->success(
'请先登陆!'
,U(
'Login/denglu'
));
exit
;
}
}
}
|
(4.2)这样以后,将除了Login的控制器外,其余的都要修改为这桥梁控制器类
1
2
3
4
5
|
namespace
Home\Controller;
use
Home\Controller\FuController;
//使用桥梁的控制器类
class
HomeController
extends
FuController
//继承的就不是原类了,而是写的控制器类文件
{
}
|
运行以后查看效果,直接登陆首页的页面,会出现下面的页面
2、注册功能(表单验证)
自动验证是ThinkPHP模型层提供的一种数据验证方法,能够在使用create建立数据对象的时候自动进行数据验证。
其中有两种验证:静态验证和动态验证
(1)静态验证
注意:静态定义方式由于必须定义模型类,因此只能用D函数实例化模型
1.咱们能够在IndexController.class.php类文件中新建一个方法
1
2
3
4
5
6
7
8
9
10
11
|
public
function
zhuce()
{
if
(
empty
(
$_POST
))
{
$this
->show();
}
else
{
//使用后面的验证信息
}
}
|
2.在View文件中新建一个Index文件夹,新建注册的显示页面
注意:若是使用收集表单元素,里面的name要和数据库中的保持一致
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<
form
action="__ACTION__" method="post">
<
div
>用户名:<
input
type="text" name="uid" /></
div
>
<
br
/>
<
div
>密 码:<
input
type="password" name="pwd" /></
div
>
<
br
/>
<
div
>确认密码:<
input
type="password" name="pwd" /></
div
>
<
br
/>
<
div
>姓名:<
input
type="password" name="amen" /></
div
>
<
br
/>
<
div
>性别:<
input
type="password" name="pwd" /></
div
>
<
br
/>
<
div
>年龄:<
input
type="password" name="pwd" /></
div
>
<
input
type="submit" value="注册" />
</
form
>
|
看下运行效果
3.添加表单验证
(1)静态验证
注意:在模型类里面经过$_validate属性定义验证规则。
这里要新建一个模板文件UserModel.class,记得要在Model文件夹中
1
2
3
4
5
6
7
8
9
10
|
<?php
namespace
Home\Model;
use
Think\Model;
class
UserModel
extends
Model
{
//在表单验证的时候,要用这个定义$_validate
protected
$_validate
=
array
(
array
(
'验证字段'
,
'验证规则'
,
'验证码必须!'
),
//这就是验证的条件
);
}
|
再写验证的时候要记住一下几点:
须要验证的表单字段名称,这个字段不必定是数据库字段,也能够是表单的一些辅助字段,例如确认密码和验证码等等。有个别验证规则和字段无关的状况下,验证字段是能够随意设置的,例如expire有效期规则是和表单字段无关的。若是定义了字段映射的话,这里的验证字段名称应该是实际的数据表字段而不是表单字段。
要进行验证的规则,须要结合附加规则,若是在使用正则验证的附加规则状况下,系统还内置了一些经常使用正则验证的规则,能够直接做为验证规则使用,包括:require 字段必须、email 邮箱、url URL地址、currency 货币、number 数字。
用于验证失败后的提示信息定义
包含下面几种状况:
配合验证规则使用,包括下面一些规则:
这里的验证时间须要注意,并不是只有这三种状况,你能够根据业务须要增长其余的验证时间。
4.咱们可让上面的注册页面再一些时候显示验证信息
4.1用户名为空时,提示信息
1
2
3
|
protected
$_validate
=
array
(
array
(
'uid'
,
'require'
,
'用户名不能为空!'
),
//判断用户名是否是空的
);
|
4.2怎么使用这个验证信息,咱们要在IndexController.class.php类文件中编写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public
function
zhuce()
{
if
(
empty
(
$_POST
))
{
$this
->show();
}
else
{
$u
= D(
"user"
);
//造模型对象
$r
=
$u
->create();
//自动验证字段
if
(
$r
)
{
//$u->add(); //添加到数据库
}
else
{
exit
(
$u
->getError());
//显示错误信息
}
}
}
|
4.3运行能够看下结果
这是静态验证,不能出如今文本框的后面,这样能够用动态验证,其余的条件能够根据注意的那几条本身进行练习
(2)动态验证
注意:使用模型类的validate方法动态建立自动验证规则。
总的来讲就是要用ajax来写,给想要显示验证的上添加一个id,便于传值;并且也要引入jQuery文件
1
|
<
script
src="__PUBLIC__/js/jquery-1.11.2.min.js"></
script
>
|
主体中的内容
1
2
|
<
div
>用户名:<
input
type="text" name="uid" id="uid" /></
div
>
<!--给个id名-->
<
span
id="tishi"></
span
>
<!--显示提示的地方-->
|
js的编写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<
script
type="text/javascript">
$("#uid").blur(function(){
var uid = $(this).val();
$.ajax({
url:"__ACTION__",
data:{uid:uid},
type:"POST",
dataType:"TEXT",
success: function(data){
//这里是验证的返回结果
}
})
})
</
script
>
|
方法中的写法(完整的)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public
function
yanzheng()
{
if
(
empty
(
$_POST
))
{
$this
->show();
}
else
{
//定义验证规则
$rules
=
array
(
array
(
'uid'
,
'require'
,
'用户名不能为空!'
),
);
$u
= D(
"user"
);
if
(
$u
->validate(
$rules
)->create())
{
$this
->ajaxReturn(
"OK"
,
"eval"
);
//若是验证成功返回OK
}
else
{
$this
->ajaxReturn(
$u
->getError(),
"eval"
);
//若是不成功,就返回提示信息
}
}
}
|
最后的显示页面中的内容
1
2
3
4
5
6
7
8
9
10
11
12
13
|
success:
function
(data){
//验证经过后的结果
if
(data==
"OK"
)
{
$(
"#tishi"
).html(
"经过"
);
//提示信息
$(
"#tishi"
).css(
"color"
,
"green"
);
//提示的颜色
}
else
{
$(
"#tishi"
).html(data);
//提示的验证信息
$(
"#tishi"
).css(
"color"
,
"red"
);
}
}
|
运行看下提示结果
父级和表单验证就是这样的,熟悉他的使用规则就能够了