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

從零打造 PHP 論壇系統:資料庫設計與架構篇

     編輯:PHP 綜合知識

開發背景

這是一位 PHP 初學者在接觸語言不到一個月、無完整規劃的情況下,花費兩天半時間開發的論壇系統。雖然代碼存在許多隱憂(重複代碼、缺乏驗證、安全性不足),但核心功能在 Windows 98 + Apache + PHP + MySQL 環境下可正常運作。本文整理其資料庫結構與連線設計,作為初學者參考與反面教材。

資料庫結構設計

1. 使用者資料表 useinfo

欄位型別說明
usenamevarchar(8)使用者帳號(主鍵)
usepassvarchar(8)密碼(明文儲存,極度不安全)
usenivarchar(30)暱稱
useoicqvarchar(12)OICQ 號碼
usesexint(1)性別
useageint(2)年齡
usezyvarchar(4)職業
useaddrvarchar(20)地址
usemailvarchar(40)Email
usewebvarchar(50)個人網站
useqmvarchar(240)簽名檔
useattrint(1)權限:1=會員, 2=版主, 3=管理員, 4=站長
useinfint(1)資料公開:1=否, 2=是
useidint(5) auto_increment流水號(主鍵)
usebqint(1)表情符號代碼
regdatedatetime註冊時間
enddatevarchar(22)最後上線時間
ftnumint(4)發文數
usetychar(1)保留欄位

2. 論壇主題表 foxbbs

欄位型別說明
idint(5) auto_increment主題流水號(主鍵)
usenamevarchar(20)發文者帳號
ftbqint(1)主題表情
titlevarchar(40)主題標題
ftdatevarchar(22)發文時間
mesnamevarchar(15)內容檔名(格式:YYYYMMDDHHMMSS)
djnumint(4)點擊數
hfnumint(3)回覆數
hfdatevarchar(24)最後回覆時間
hfnamevarchar(20)回覆內容檔名
hfusenamevarchar(20)最後回覆者
ipvarchar(15)發文者 IP
lockesint(1)鎖定狀態:1=已鎖

混合儲存策略:MySQL + 文字檔

考慮到當時資料庫空間有限,採用「主題元資料存 MySQL,大量文字內容存文字檔」的混合架構:

  • 主題內容:存為 foxbbs/YYYYMMDDHHMMSS.fox
  • 回覆內容:存為 foxbbs/YYYYMMDDHHMMSS.bbs
  • 檔名採用系統時間(精確到秒),理論上可避免衝突

缺點:檔案系統操作效率低、難以備份遷移、無法善用資料庫索引與全文搜尋。現代架構建議直接使用 TEXT 或 LONGTEXT 欄位,或引入 Elasticsearch 等搜尋引擎。

資料庫連線檔 linkfox.inc.php

<?php
$dbhostname = "lfox";
$dbusername = "root";
$dbpassword = "root";
$dbName = "flyfox";

mysql_connect($dbhostname, $dbusername, $dbpassword) 
    or die("Unable to connect to database");
@mysql_select_db($dbName) or die("Unable to select database");
?>

嚴重安全性問題

  1. Root 帳號直連:使用 root/root 空密碼連線,生產環境絕對禁止。
  2. 錯誤訊息外洩:die() 直接輸出資料庫錯誤,可能洩露結構資訊。
  3. 無預備語句:所有查詢皆為字串拼接,極易遭受 SQL Injection 攻擊。
  4. 密碼明文儲存:usepass 未加密,資料庫外洩即導致帳號全失陷。

現代化重構建議

  • 改用 PDO + 預備語句 統一資料存取層
  • 密碼採用 password_hash() / password_verify() 雜湊儲存
  • 引入 資料庫遷移工具(如 Phinx)管理 Schema 版本
  • 將大型文字內容直接存入 LONGTEXT,或使用物件儲存(S3/MinIO)
  • 實作 RBAC 權限模型 取代單一 useattr 數值
  • 加入 CSRF Token、XSS 過濾、速率限制 等防護機制

結語

這個專案雖然代碼品質不高,但完整展示了「從無到有」建構動態網站的基本流程:資料庫設計、連線封裝、CRUD 操作、分頁、排序、Cookie 認證、檔案上傳等。對初學者而言,閱讀並重構這類「燒燙傷」代碼,往往比照著完美教學範例更能深刻理解 Web 開發的坑點與最佳實務。

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