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