總結回顧---3
【一】驗證碼
驗證碼全稱: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初始化時為空,所以無法和常規驗證碼一樣直接使用。
字體文件可以在本地找到,控制面板---切換到大圖標,找到字體--列出本地全部字體---復制黑體
補充說明:
①關於中文驗證碼:實際開發時,避免使用中文驗證碼(考慮外企合作);
②需要中文字體的支持,中文字體可以在本地找到或者網上下載復制到中文的文件夾下;
③使用中文驗證碼必須開啟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