這是一位 PHP 初學者在接觸語言不到一個月、無完整規劃的情況下,花費兩天半時間開發的論壇系統。雖然代碼存在許多隱憂(重複代碼、缺乏驗證、安全性不足),但核心功能在 Windows 98 + Apache + PHP + MySQL 環境下可正常運作。本文整理其資料庫結構與連線設計,作為初學者參考與反面教材。
useinfo| 欄位 | 型別 | 說明 |
|---|---|---|
| usename | varchar(8) | 使用者帳號(主鍵) |
| usepass | varchar(8) | 密碼(明文儲存,極度不安全) |
| useni | varchar(30) | 暱稱 |
| useoicq | varchar(12) | OICQ 號碼 |
| usesex | int(1) | 性別 |
| useage | int(2) | 年齡 |
| usezy | varchar(4) | 職業 |
| useaddr | varchar(20) | 地址 |
| usemail | varchar(40) | |
| useweb | varchar(50) | 個人網站 |
| useqm | varchar(240) | 簽名檔 |
| useattr | int(1) | 權限:1=會員, 2=版主, 3=管理員, 4=站長 |
| useinf | int(1) | 資料公開:1=否, 2=是 |
| useid | int(5) auto_increment | 流水號(主鍵) |
| usebq | int(1) | 表情符號代碼 |
| regdate | datetime | 註冊時間 |
| enddate | varchar(22) | 最後上線時間 |
| ftnum | int(4) | 發文數 |
| usety | char(1) | 保留欄位 |
foxbbs| 欄位 | 型別 | 說明 |
|---|---|---|
| id | int(5) auto_increment | 主題流水號(主鍵) |
| usename | varchar(20) | 發文者帳號 |
| ftbq | int(1) | 主題表情 |
| title | varchar(40) | 主題標題 |
| ftdate | varchar(22) | 發文時間 |
| mesname | varchar(15) | 內容檔名(格式:YYYYMMDDHHMMSS) |
| djnum | int(4) | 點擊數 |
| hfnum | int(3) | 回覆數 |
| hfdate | varchar(24) | 最後回覆時間 |
| hfname | varchar(20) | 回覆內容檔名 |
| hfusename | varchar(20) | 最後回覆者 |
| ip | varchar(15) | 發文者 IP |
| lockes | int(1) | 鎖定狀態:1=已鎖 |
考慮到當時資料庫空間有限,採用「主題元資料存 MySQL,大量文字內容存文字檔」的混合架構:
foxbbs/YYYYMMDDHHMMSS.foxfoxbbs/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");
?>
die() 直接輸出資料庫錯誤,可能洩露結構資訊。usepass 未加密,資料庫外洩即導致帳號全失陷。password_hash() / password_verify() 雜湊儲存LONGTEXT,或使用物件儲存(S3/MinIO)useattr 數值這個專案雖然代碼品質不高,但完整展示了「從無到有」建構動態網站的基本流程:資料庫設計、連線封裝、CRUD 操作、分頁、排序、Cookie 認證、檔案上傳等。對初學者而言,閱讀並重構這類「燒燙傷」代碼,往往比照著完美教學範例更能深刻理解 Web 開發的坑點與最佳實務。