1. 程式人生 > >總結回顧---3

總結回顧---3

jquery script 自動識別 是個 無法使用 定義 php 校驗 serve

【一】驗證碼

驗證碼全稱:captcha(全自動識別機器與人類的圖靈測試),簡單理解就是區分當前操作是人執行的還是機器執行的

常見驗證碼分3種:頁面上圖片形式、短信驗證碼(郵箱驗證可以歸類到短信驗證碼,只是載體不同。一個短信一個郵件)、語音驗證碼(點擊後給手機打電話,機器讀兩遍驗證碼)。

註意:現在流行的刷臉是驗證形式,不是驗證碼

(1)圖片驗證碼

GD庫是php處理圖形的擴展庫,GD庫提供了一系列用來處理圖片的API,使用GD庫可以處理圖片,或者生成圖片,也可以給圖片加水印。

gd操作流程:①畫布;②畫幹擾線、幹擾點、生成驗證碼隨機數畫上去;③保存到session裏;④輸出圖片

(2)驗證碼封裝函數

在ThinkPHP裏系統封裝了驗證碼類:Verify.class.php,文件位置ThinkPHP/Library/Think/Verify.class.php

①加密方式:具體加密流程在文件位置底部

②驗證碼字符集:通過仔細觀察驗證碼字符集可以發現少了許多字符,比如1,9l,g等。因為0和o,g和9等極其相似,所以為了避免頻繁刷新驗證碼,減少服務器負擔,所以將這些容易混淆的字符都去掉了

③驗證碼過期時間:因為驗證碼是存儲在session中的,在規定的時間內若沒有輸入驗證則會失效

④關於裏面設置的字體、背景圖,都在同級文件夾Verify中

⑤方法介紹

1. 構造方法:在實例化時可以傳遞一個數組,用於和其成員屬性config合並,生成新配置

2. check方法:校驗驗證碼,傳遞參數(用戶輸入的驗證碼)

3. entry方法:輸出驗證碼圖片,並保存到session。通過header頭輸出,輸出格式png

4. 除了以上幾個方法(配置、校驗、輸出),其他方法(例如加密驗證碼、繪制背景圖、畫雜點等)均為私密方法,不對外開放

(3)生成驗證碼

包含常規驗證碼和中文驗證碼

1. 常規驗證碼

由數字和大小寫字母組成的驗證碼

註意:①驗證碼黑屏問題:輸出前頭部有Bom;②驗證碼字體控制一般用字體表4.ttf;

2. 中文驗證碼

註意:字體文件夾Verify下的中文字體文件夾zhttfs初始化時為空,所以無法和常規驗證碼一樣直接使用。

字體文件可以在本地找到,控制面板---切換到大圖標,找到字體--列出本地全部字體---復制黑體

常規(中文即可)到中文文件夾zhttfs下。

補充說明:

①關於中文驗證碼:實際開發時,避免使用中文驗證碼(考慮外企合作);

②需要中文字體的支持,中文字體可以在本地找到或者網上下載復制到中文的文件夾下;

③使用中文驗證碼必須開啟php_mbstring擴展(該擴展項在php.ini裏,去掉擴展前的封號;即可,開啟後重啟Apache)

【二】部門管理功能

(1)部門列表展示

分析:

①控制器DeptController.class.php

②方法showList(不要使用list方法,因為list是關鍵詞)

③模板文件:showList.html

下面按步驟編寫

①創建方法showList來展示模板

②將模板文件showList.html復制到View/Dept下(因為控制器為Dept,方法為showList,所以要一一對應)

③修改靜態資源路徑

④修該showList方法,獲取部門數據。並傳遞到模板

⑤模板遍歷讀取數據

註意:1. 模板的if判斷,必須加空格

<if condition="$vol.pid == 0">頂級部門</if>

2.<else />加/

(2)

部門編輯

分析:

控制器:DeptController.class.php

方法:edit(展示模板】處理提交)

模板:edit.html

下面按步驟編寫代碼

(1)編寫edit方法,實現模板展示

(2)修改編輯按鈕,跳頁時帶上id

<td><a href="__CONTROLLER__/edit/id/{$vol.id}">編輯</a></td>

(3)復制模板文件edit.html到指定位置,Admin/View/Dept/edit.html;修改靜態資源路徑

(4)修改edit方法,展示原來數據

(5)處理表單提交頁面

隱藏域:因為系統限制不能執行批量修改,所以修改時必須指定主鍵。所以必須添加一個隱藏域,來傳遞id

jquery提交:

技術分享圖片
<script type="text/javascript">
    $(document).ready(function(){
        $(‘button‘).on(‘click‘,function(){
            $(‘form‘).submit();//提交表單
        })
    })
</script>

(6)數據的保存,修改edit方法後的代碼

【三】部門刪除

分析

控制器:DeptController.class.php

方法:del

模板:刪除不需要模板文件,因為刪除就是個處理數據過程。和登出一樣

說明:有單個刪除,也有批量刪除。而編輯只能單個編輯,不能批量編輯。

(1)修改模板,添加復選框

(2)點擊刪除按鈕,實現刪除

①點擊刪除,獲取復選框的值(jquery實現)。之後到php刪除方法

②編寫del方法,實現刪除

技術分享圖片
        //真刪除---批量和單個刪除
        public function del(){
            //接收參數
            $id  = I(‘get.id‘);
            //模型實例化
            $model = M(‘dept‘);
            //刪除
            $result = $model->delete($id);
            //判斷結果,刪除成功或失敗都會跳轉到列表頁,所以不用加入跳轉鏈接
            if ($result) {
                $this->success(‘刪除成功‘);
            }else{
                $this->error(‘刪除失敗‘);
            }
        }
技術分享圖片

【四】

處理表單信息的提交操作

在控制器deptController.class.php裏add方法判斷是否是POST提交。若是則提交,否則展示

擴展:

1. 方法判斷---------判斷請求是否是post,之前用$_POST判斷,但在ThinkPHP裏系統封裝了幾個比較實用的常量,可以直接用常量來判斷

IS_POST、IS_GET、IS_AJAX、IS_CGI、IS_PUT等

2. 數據接收---------之前用$_POST接收數據,在ThinkPHP裏使用I快速方法來接收數據。I方法可以接收任何類型輸入post、get、request、put等。且系統默認自帶防止SQL

註入的方法(使用PHP內置函數htmlspecialchars,將預定義字符<,>轉化為HTML實體字符)。因為$POST沒有對數據進行過濾,還得手動過濾。所以推薦使用I方法接收數據

自帶過濾效果,防止SQL註入

3.I 快速方法語法:I(‘變量類型.變量名‘,[‘默認值‘],[‘過濾方法‘]),過濾方法可以自定義過濾

接收整個數組:I(‘get‘);

【五】後臺登錄

(1)分析

控制器:PublicController.class.php

模板:login.html

方法:login captacha(驗證碼) checkLogin(驗證登錄)

下面按照步驟一次編寫:

(2)驗證碼

①控制器裏創建captacha,用於創建驗證碼;

②在模板文件login.html輸出驗證碼;

驗證碼:<img src="__CONTROLLER__/captacha">

③添加點擊刷新驗證碼,給圖片綁定點擊事件

驗證碼:<img onclick="this.src=‘__CONTROLLER__/captacha‘" src="__CONTROLLER__/captacha">

這樣只在Chrome下生效,測試後在其他瀏覽器無效。為了兼容其他瀏覽器需要在地址後面加上隨機數,最終代碼

驗證碼:<img onclick="this.src=‘__CONTROLLER__/captacha/t/‘+Math.random()" src="__CONTROLLER__/captacha">

打開瀏覽器測試生效,測試Network,會發現點擊紅藕每次都會發送新的請求,請求不一樣。所以生效

(3)驗證登錄前創建用戶表

表名:sp_user

①創建表,表結構新增模擬數據

②修改模板元素

1. 添加form表單指定提交位置

<form action="{:U(checkLogin)}" method=‘post‘>
代碼塊
</form>

2. 對於登錄按鈕,前端寫好的樣式為

<a href=‘index.html‘ class=‘btn‘>登錄</a>

這裏改為href=‘javascript:;‘,阻止瀏覽器默認行為,防止點擊完就跳頁的行為

3. 利用jquery實現表單提交

$(document).ready(function(){
        $(‘.btn‘).on(‘click‘,function(){
            $(‘form‘).submit();//提交表單
        })
    })

(4)編寫checkLogin方法,驗證用戶登錄

驗證順序,先對驗證碼進行驗證,因為只有驗證碼不會對服務器發送請求。驗證碼正確的話再去驗證用戶名和密碼。

具體註意事項在代碼裏做了介紹

5)修改登錄成功後的用戶名

{$Think.session.username}

模板輸出系統變量----模板讀取session數據,

{$Think.server.script_name} // 輸出$_SERVER[‘SCRIPT_NAME‘]變量
{$Think.session.user_id} // 輸出$_SESSION[‘user_id‘]變量
{$Think.get.pageNumber} // 輸出$_GET[‘pageNumber‘]變量
{$Think.cookie.name}  // 輸出$_COOKIE[‘name‘]變量

支持輸出 $_SERVER$_ENV$_POST$_GET$_REQUEST$_SESSION$_COOKIE變量。

【五】退出

(1)控制器編寫退出方法

技術分享圖片
//退出方法
        public function logout(){
            //清除session
            // session_destroy();原生方法
            session(null);
            //跳轉登錄頁面
            $this->success(‘登出成功‘,U(‘login‘),3);
        }
技術分享圖片

(2)修改跳轉地址,先讓其跳到Public/logout,清空session。然後跳到登錄頁

註意:因為U方法和__PUBLIC、__CONTROLLER__等都是模板常量,只能在模板裏使用。所以js文件裏無法使用這些常量去跳轉路徑。除非將js直接寫到模板文件裏去,例如

技術分享圖片
<script type="text/javascript">
    $(document).ready(function(){
        $(‘.logout‘).on(‘click‘,function(){
            var path= "__CONTROLLER__";
            alert(path);//這裏便會提示出模板常量
        })
    })
</script>
技術分享圖片

或者在js裏寫,/表示從域名後開

域名/入口文件/分組/控制器名/方法名
window.location.href=‘/index.php/Admin/Public/logout‘;

接下來的部門管理在後面文章視頻學習筆錄---ThinkPHP---案例2--部門管理功能

.

總結回顧---3