1. 程式人生 > >阿里百秀後臺管理專案筆記 ---- Day01

阿里百秀後臺管理專案筆記 ---- Day01

### 摘要 在此記錄一下阿里百秀專案的教學視訊的學習筆記,部分頁面被我修改了,某些頁面效果會不一樣,基本操作是一致的,好記性不如爛筆頭,加油叭!!! ### step 1 : 整合全部靜態頁面 1. 將靜態頁面全部拷貝到 admin 目錄中。 2. 將副檔名由 .html 改為 .php ,頁面中的 a 連結也需要調整。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201008215745717.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MTAzNjEy,size_16,color_FFFFFF,t_70#pic_center) 3. 調整頁面檔案中的靜態資源路徑,將原本的相對路徑調整為絕對路徑。 在 sublime 工具中選中資料夾 admin 右擊 --> 查詢&&替換 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201008215831613.png#pic_center) ### step 2 : 抽離公共部分 由於每一個頁面中都有一部分程式碼(側邊欄和頭部)是相同的,分散到各個檔案中,不便於維護,所以應該分別抽象到一個公共的檔案中。 1. 在 admin 目錄中建立一個 com (common 的簡稱)的資料夾 2. 在這個目錄裡建立一個 sidebar.php 和 nav.php 文 件 3. 隨便在一個檔案中(eg: index.php)找到側邊欄和頭部的程式碼片段將程式碼抽離出來 *com / sidebar.php* ```html

布頭兒

``` *com/nav.php* ```html ``` 4. 在每一個需要這個模組的頁面中通過 include 載入 sidebar.php ```php ``` 5. 在每一個需要這個模組的頁面中通過 include 載入 nav.php ,載入到 main 中 ```php ``` ### step 3 : 實現側邊欄對應到相應頁面顯示高亮 由於側邊欄在不同頁面時, active class name 出現的位置不盡相同,所以我們需要區分當前 sidebar.php 檔案是 在哪個頁面中載入的,從而明確焦點狀態。 每一個選單項 li <元素: ```php >
儀表盤 ``` 對於有子選單的選單項,有一點例外: ```php
  • > 文章管理
  • ``` *sliderbar.php* ```php //php部分 $current_page = isset($current_page) ? $current_page : ''; ``` ```php //html部分

    布頭兒

    ``` *comments.php* ```php ``` *users.php* ```php ``` *settings.php* ```php ``` ..... 所有需要跳轉頁面顯示高亮狀態的頁面以此類推都加上 $current_pag 變數 ### step 4 : 處理登入頁面 #### 調整HTML頁面 1. 將 login.php 中的登入連線換成 button 按鈕 ```html 登 錄 ``` ```html ``` 2. 往表單元素中新增相應的屬性 method 與 action ```html ``` ```php " > ``` 3. 給郵箱和密碼框新增 name 屬性 ```html ``` ```html ``` #### 處理執行PHP指令碼 1. 專案配置檔案 由於在接下來的開發過程中,肯定有一部分公共的成員,例如資料庫名稱,資料庫主機,資料庫使用者名稱密碼等,這些資料應該放到公共的地方,抽象成一個配置檔案 config.php 放到專案根目錄下。 這個配置檔案採用定義常量的方式定義配置成員: *config.php* ```php ``` ### step 5 : 錯誤訊息的呈現 當驗證郵箱與密碼不匹配時,頁面彈出錯誤資訊 1. 引入 bootstarp 樣式檔案 ```html ``` 2. 判斷資訊是否呈現 *login.php* ```php 錯誤! ``` ### step 6 : 錯誤資訊呈現的動畫效果 1. 官網下載動畫樣式檔案 [https://animate.style/#migration](https://animate.style/#migration) 2. 引入 animate.css 檔案 ```javascript ``` 3. 選擇錯誤資訊呈現的動畫效果 ```html

    Animate.css

    //當選擇任意一個動畫效果時,會發現中有動畫效果的類名新增 ``` 栗子:當點選 rubberBand 這個動畫時,會在class中新增相應的動畫效果的類名 ```javascript animate__animated animate__rubberBand ``` ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201009083205819.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MTAzNjEy,size_16,color_FFFFFF,t_70#pic_center) 4. 在表單中判斷是否加入產生動畫效果的類 ```php " method="post" action="" novalidate autocomplete="off"> //novalidate取消瀏覽器自定義的資訊提示 //autocomplete="off"取消歷史記錄客戶端自動完成功能提示 ``` ### step 7 : 登入功能的實現 **來吧展示:** ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201009180559808.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MTAzNjEy,size_16,color_FFFFFF,t_70#pic_center) ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201009180755151.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MTAzNjEy,size_16,color_FFFFFF,t_70#pic_center) ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201009180350336.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MTAzNjEy,size_16,color_FFFFFF,t_70#pic_center) #### 資料庫連線查詢 1. 連線資料庫 ```php // 連線資料庫 $conn = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME); mysqli_query($conn,'set names utf8'); if(!$conn){ exit('

    連線資料庫失敗

    '); } ``` 2. 根據郵箱查詢使用者 ```php // 根據郵箱查詢使用者資訊,limit 是為了提高查詢效率 $query = mysqli_query($conn, "select * from users where email = '{$email}' limit 1;"); if (!$query) { $GLOBALS['message'] = '登入失敗,請重試!'; return; } ``` 3. 使用者密碼比對 其中,密碼在資料庫中儲存的時候要進行加密,百度搜md5線上加密 網址:[https://md5jiami.51240.com/](https://md5jiami.51240.com/) 將資料庫中的密碼換成自己在 md5 加密的 32位 密文 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201009084446407.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MTAzNjEy,size_16,color_FFFFFF,t_70#pic_center) ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201009084535219.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MTAzNjEy,size_16,color_FFFFFF,t_70#pic_center) *login.php* ```php // 獲取登入使用者 $user = mysqli_fetch_assoc($query); if (!$user) { // 使用者名稱不存在 $GLOBALS['message'] = '郵箱與密碼不匹配'; return; } // 一般密碼是加密儲存的 if ($user['password'] !== md5($password)) { // 密碼不正確 $GLOBALS['message'] = '郵箱與密碼不匹配'; return; } ``` 4. 訪問控制及登陸狀態保持 (用來防止使用者不登陸直接跳轉到其他頁面) ```php // 將使用者資訊存放在session中 $_SESSION['current_login_user'] = $user; header('Location:/admin/'); } ``` 5. 將之前的(1~4步驟)使用者密碼驗證封裝成一個 login 函式, 如果是 POST 提交則處理登入業務邏輯 ```php if ($_SERVER['REQUEST_METHOD'] === 'POST') { login(); } ``` 6. 整合程式碼 *login.php* ```php require_once '../config.php'; // 判斷使用者是否登入,防止使用者不登陸直接跳轉到其他頁面 session_start(); function login(){ if(empty($_POST['email'])){ $GLOBALS['message'] = '請輸入郵箱'; return; } if(empty($_POST['password'])){ $GLOBALS['message'] = '請輸入密碼'; return; } $email = $_POST['email']; $password = $_POST['password']; // 連線資料庫 $conn = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME); //防止頁面出現亂碼(中文顯示帶?問號) mysqli_query($conn,'set names utf8'); if(!$conn){ exit('

    連線資料庫失敗

    '); } $query = mysqli_query($conn, "select * from users where email = '{$email}' limit 1;"); if (!$query) { $GLOBALS['message'] = '登入失敗,請重試!'; return; } // 獲取登入使用者 $user = mysqli_fetch_assoc($query); if (!$user) { // 使用者名稱不存在 $GLOBALS['message'] = '郵箱與密碼不匹配'; return; } // 一般密碼是加密儲存的 if ($user['password'] !== md5($password)) { // 密碼不正確 $GLOBALS['message'] = '郵箱與密碼不匹配'; return; } //假資料 // if($email !== '[email protected]'){ // $GLOBALS['message'] = '密碼與郵箱不匹配'; // return; // } // if($password !== '123'){ // $GLOBALS['message'] = '密碼與郵箱不匹配'; // return; // } // 將使用者資訊存放在session中 $_SESSION['current_login_user'] = $user; header('Location:/admin/'); } if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 如果是 POST 提交則處理登入業務邏輯 login(); } ``` 7. 在每個頁面開頭部分加入session狀態的判斷 栗子: *index.php* ```php session_start(); if(empty($_SESSION['current_login_user'])){ header('Location:/admin/login.php'); } ``` ### step 8 : 封裝公共函式 由於接下來的操作(開發)過程中會有很多需要查詢資料庫和判斷使用者是否登入的地方。如果每次都按照最原始的方法去寫過於麻煩。 我們應該將重複的地方提取出來,封裝一個公共的函式,方便後期呼叫和維護。 *functions.php* ```php query("set names utf8"); mysqli_query($conn,'set names utf8'); if(!$conn){ exit('連線失敗'); } $query = mysqli_query($conn,$sql); if(!$query){ return false; } $result = array(); while ($row = mysqli_fetch_assoc($query)) { $result[] = $row; } mysqli_free_result($query); mysqli_close($conn); return $result; } // 封裝單條資料 function mysql_one ($sql) { $res = mysql_all($sql); return isset($res[0]) ? $res[0] : null; } // 封裝增刪改資料 function mysql_change ($sql) { $conn = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); mysqli_query($conn,'set names utf8'); if (!$conn) { exit('連線失敗'); } $query = mysqli_query($conn, $sql); if (!$query) { // 查詢失敗 return false; } // 對於增刪修改類的操作都是獲取受影響行數 $affected_rows = mysqli_affected_rows($conn); mysqli_close($conn); return $affected_rows