這個知識點,就能夠經過「登陸」和「註冊」的頁面來學習這個知識點了
首先先作一個「登陸」功能
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"
);
}
}
|
運行看下提示結果
父級和表單驗證就是這樣的,熟悉他的使用規則就能夠了