接續上一篇,我們將實現論壇的「入口關卡」——用戶註冊頁面(apply.php)、登錄驗證邏輯(chklogin.php)以及全局配置文件(config.inc.php)。代碼採用 PHP 4/5 早期風格,現代重構建議請見文末。
apply.phpheader.php、樣式表 css/index.css、背景圖 image/bg.gif。<table> 佈局(現代建議改用 Flex/Grid + 語義化標籤)。<textarea>(唯讀),說明權限、積分規則、禁止內容等。| 字段名 | 類型 | 驗證規則 | 備註 |
|---|---|---|---|
| name | text | 必填,≤16 字符 | 用戶名,紅色邊框提示* |
| pwd1 | password | 必填,≤8 字符 | 密碼 |
| pwd2 | password | 必填,與 pwd1 一致 | 確認密碼 |
| text | 可選,格式驗證 | 用於找回密碼、通知 | |
| sex | select | 可選:秘密/男/女 | 默認「秘密」 |
| realname | text | 可選,≤16 字符 | 真實姓名 |
| address | text | 可選,≤40 字符 | 地址 |
| phone | text | 可選,≤20 字符 | 電話 |
| homepage | text | 可選,預填 https:// | 個人主頁 |
| oicq | text | 可選,≤11 位 | QQ 號 |
| qm | textarea | 可選 | 簽名檔 |
表單提交至 adduser.php(下一篇講解)。
chklogin.php<?php
require("func.php");
$name = trim($name);
$password = trim($password);
$sql = "SELECT * FROM user WHERE name='$name'";
$sql_result = mysql_query($sql);
$sql_row = mysql_fetch_array($sql_result);
if (($password == $sql_row['password']) && !empty($sql_row['slaveboard'])) {
setcookie("jl_forum[board]", $sql_row['slaveboard']);
setcookie("jl_forum[name]", $name);
setcookie("jl_forum[password]", $password);
redirect2("manage_list.php");
} else {
show_error(4); // 用戶名/密碼錯誤或非版主
}
?>
password_verify()。slaveboard 字段非空,建議改用 RBAC 權限表。config.inc.php<?php
$MYSQL_HOSTNAME = "localhost";
$MYSQL_USERNAME = "root";
$MYSQL_PASSWORD = "";
$DATABASE = "forum";
$pagesize = 25; // 分頁大小
$copyright = "Copyright © 2000, by Edincur, All Rights Reserved<BR>";
$admin_email = "your_email";
$admin_name = "your_admin_name";
$admin_password = "your_password";
$remove_score = 4; // 刪帖扣分
$new_topic_score = 5; // 發帖加分
$re_topic_score = 3; // 回帖加分
mysql_connect($MYSQL_HOSTNAME, $MYSQL_USERNAME, $MYSQL_PASSWORD);
mysql_select_db($DATABASE) or die(mysql_error());
?>
PDO 或 mysqli,啟用預處理。.env + config.php,敏感信息不入版本庫。password_hash($pwd, PASSWORD_DEFAULT),登錄時 password_verify()。session_start(),將用戶 ID 存入 $_SESSION['uid'],Cookie 僅存 session_id 並設 HttpOnly、Secure、SameSite=Lax。apply.php → 用戶填寫資料 → POST adduser.phpchklogin.php → 驗證版主身份 → 寫 Cookie → 跳轉 manage_list.phpconfig.inc.php → 被所有腳本 require,建立 DB 連接本文展示了早期 PHP 論壇的註冊、登錄與配置實現。雖然代碼風格古老,但業務流程清晰。下一篇將講解 adduser.php 入庫邏輯與後台管理入口 admin.php。建議讀者在練習時同步進行安全重構,養成現代開發習慣。