:::
5-6 檢查帳號密碼
一、引入設定檔
- include() 和 require() 都可以用來引入檔案,但原理不太一樣。
- require() :若引入不到檔案,會導致程式停擺。
- include():若引入不到檔案,僅秀出警告,程式仍繼續運作。
- require_once() 與 include_once() :引入進來的檔案若是相同的,只會引入一次。推薦使用!
- () 不一定要寫,寫成include "xxx.php"; 也可以。
二、判斷是否登入
- 為了讓系統記住登入狀態,我們使用了session,要使用session機制,必須先session_start();
<?php /*引入檔案(初始設定)*/ session_start(); require_once 'config.php'; require_once 'smarty/libs/Smarty.class.php'; $smarty = new Smarty; /*過濾變數*/ $op = isset($_REQUEST['op']) ? filter_var($_REQUEST['op'], FILTER_SANITIZE_SPECIAL_CHARS) : ""; $group = isset($_SESSION['group']) ? $_SESSION['group'] : ''; $name = isset($_SESSION['name']) ? $_SESSION['name'] : '訪客'; $content = "主內容"; /*執行流程*/ switch ($op) { case 'login': $name = isset($_POST['email']) ? filter_var($_POST['email'], FILTER_SANITIZE_SPECIAL_CHARS) : "訪客"; $pass = isset($_POST['pass']) ? $_POST['pass'] : ""; if ($name == $admin_id and $admin_pass == $passwd) { $_SESSION['group'] = 'admin'; $_SESSION['name'] = $name; $content = "登入成功"; } else { $content = "登入失敗"; } header("location:{$_SERVER['PHP_SELF']}"); exit; default: # 取得活動列表 break; } /*輸出結果*/ $smarty->assign('name', $name); $smarty->assign('group', $group); $smarty->assign('content', $content); $smarty->assign('page_title', '活動報名系統'); $smarty->display('index.tpl'); - 整理一下變數,把到時後要傳到樣板的放在上面即可,相當於預設值的感覺。
- 利用 switch 來判斷 $op 變數,隨著 $op 變數值不同,其對應動作也不一樣。登入時就跑login中的部份。
- 利用require_once()引入設定檔。
- 登入時會傳來 name 與 passwd,過濾帳號(因為最後要呈現到畫面上),密碼無須過濾。
- 過濾後,判斷和設定檔的帳密是否一致,若一致,就用$_SESSION['group']記住狀態。順便把名字也記住。
- 其中「==」是比較運算符,「=」則是賦值運算符。
- header() 也是PHP內建的函數,用來設定檔案檔頭。
- header("location: 網址") 的用法則是轉頁(轉向)的語法,但一樣會往下執行,所以,必須用 exit 告知程式到此為止,不再往下執行(因為要轉向了)。
- $content 理論上看不到,不過若是把轉向暫時註解,就可以看到登入成功或失敗。
5-5 用 $op 及 switch 迴圈來做流程控制