首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

從零構建 MySQL 論壇(二):用戶註冊、登錄驗證與核心配置

     編輯:PHP 綜合知識

本章概覽

接續上一篇,我們將實現論壇的「入口關卡」——用戶註冊頁面(apply.php)、登錄驗證邏輯(chklogin.php)以及全局配置文件(config.inc.php)。代碼採用 PHP 4/5 早期風格,現代重構建議請見文末。

一、用戶註冊頁面 apply.php

1. 頁面結構

  • 引入公共頭部 header.php、樣式表 css/index.css、背景圖 image/bg.gif。
  • 使用 <table> 佈局(現代建議改用 Flex/Grid + 語義化標籤)。
  • 頂部放置「註冊須知」<textarea>(唯讀),說明權限、積分規則、禁止內容等。

2. 表單字段詳解

字段名類型驗證規則備註
nametext必填,≤16 字符用戶名,紅色邊框提示*
pwd1password必填,≤8 字符密碼
pwd2password必填,與 pwd1 一致確認密碼
emailtext可選,格式驗證用於找回密碼、通知
sexselect可選:秘密/男/女默認「秘密」
realnametext可選,≤16 字符真實姓名
addresstext可選,≤40 字符地址
phonetext可選,≤20 字符電話
homepagetext可選,預填 https://個人主頁
oicqtext可選,≤11 位QQ 號
qmtextarea可選簽名檔

表單提交至 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()。
  • SQL 注入:直接拼接變量,需用預處理語句。
  • Cookie 存儲密碼:極高風險,應改用 Session + HTTPOnly Cookie 存儲 Session ID。
  • 版主判斷:依賴 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());
?>

現代化改造建議

  1. 棄用 mysql_* 函數:改用 PDO 或 mysqli,啟用預處理。
  2. 配置分離:採用 .env + config.php,敏感信息不入版本庫。
  3. 密碼哈希:註冊時 password_hash($pwd, PASSWORD_DEFAULT),登錄時 password_verify()。
  4. 會話管理:session_start(),將用戶 ID 存入 $_SESSION['uid'],Cookie 僅存 session_id 並設 HttpOnly、Secure、SameSite=Lax。
  5. 錯誤處理:統一異常捕獲,友好錯誤頁,開發環境開啟詳細報錯,生產環境記錄日誌。

代碼結構速覽

  • apply.php → 用戶填寫資料 → POST adduser.php
  • chklogin.php → 驗證版主身份 → 寫 Cookie → 跳轉 manage_list.php
  • config.inc.php → 被所有腳本 require,建立 DB 連接

小結

本文展示了早期 PHP 論壇的註冊、登錄與配置實現。雖然代碼風格古老,但業務流程清晰。下一篇將講解 adduser.php 入庫邏輯與後台管理入口 admin.php。建議讀者在練習時同步進行安全重構,養成現代開發習慣。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved