會員登入的功能其實是使用 SELECT 指令搭配 WHERE 子句去查詢資料表裡是否有與輸入的帳號和密碼相同的記錄,若有,則登入成功,並使用一個或多個 SESSION 來記錄使用者名稱、權限…等等,相對的,若查詢不到,表示帳號或密碼有誤,登入失敗。我們已經準備好 login.php 的表單了,以下是它的程式碼,請跟著本文的指示操作:
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post"> <table> <tr><td colspan="2">會員登入</td></tr> <tr><td>帳號</td><td><input type="text" name="Username"/></td></tr> <tr><td>密碼</td><td><input type="password" name="Password"/> </td></tr> <tr><td colspan="2"><input type="submit" value="登入"/></td></tr> </table> </form>
請在網頁原始碼的最上端加入以下程式碼。
<?php if (isset($_POST['Username'])) { foreach ($_POST as $value) if (empty($value)) die('<p style="color: red;">請填寫所有欄位</p>'); require_once 'lib_mysql.php'; $db = new Mysql; $db -> init('localhost', 'root', 'root', 'web_announce', '', 'utf8mb4_general_ci'); $value = $db -> checkValues($_POST); $value = "uUsername=$value[Username] AND uPassword=$value[Password]"; $result = $db -> select('*', 'user', $value); if ($result -> num_rows) { $result -> free(); session_start(); session_regenerate_id(true); $_SESSION['LoginUser'] = $_POST['Username']; header("Refresh: 0; url=index.php"); exit; } else { $result -> free(); header("Refresh: 0; url=$_SERVER[REQUEST_URI]"); exit; } } ?>
思考:如何作出會員分級制度,僅讓已登入的使用者發佈、編輯、刪除訊息?
參考解答:在網頁程式的一開始,先判斷登入狀態,若未登入則跳轉至登入頁面。
參考解答:在網頁程式的一開始,先判斷登入狀態,若未登入則跳轉至登入頁面。
<?php session_start(); if (!isset($_SESSION['LoginUser']) || $_SESSION['LoginUser'] == "") { header("Refresh: 0; url=login.php"); exit; } ?>