10.8 會員登入

  會員登入的功能其實是使用 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;
}
?>