首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

PHP 實戰:分數錄入、總統測驗與會員編輯

     編輯:MySQL 資料庫相關知識

專案背景

本章實作三個 PHP 腳本,分別服務「學分保存方案」與「歷史同盟」網站:

  1. score_entry.php:測驗/考試分數錄入與修改。
  2. pres_quiz.php:美國總統出生地隨機測驗(互動式)。
  3. edit_member.php:會員線上編輯個人資料(含密碼驗證)。

核心技術:多用途頁面與狀態傳遞

PHP 自動將 URL 參數(?action=value)與表單欄位(name="field")轉為同名變數($action、$field)。陣列欄位(name="score[123]")自動轉為 $score[123]。腳本主架構:

switch ($action) {
  case 'DISPLAY_EVENTS': display_events(); break;
  case 'SOLICIT_EVENT': solicit_event_info(); break;
  case 'ADD_EVENT': add_new_event(); break;
  case 'DISPLAY_SCORES': display_scores(); break;
  case 'ENTER_SCORES': enter_scores(); break;
}

函式內需 global $PHP_SELF 取得自身 URL 產生連結/表單遞交目標。

分數錄入流程(score_entry.php)

  1. 事件列表(display_events()):查詢 event 表,每列顯示 ID、日期、類型,ID 為連結帶 ?action=DISPLAY_SCORES&event_id=...。
  2. 新增事件(solicit_event_info() → add_new_event()):表單輸入日期、單選按鈕選類型(測驗/考試),送出後寫入 event 表,回列表頁。
  3. 分數編輯頁(display_scores()):LEFT JOIN student + score 確保無分數學生也顯示空白欄位。輸入框命名 score[student_id],送出時 PHP 自動建立 $score 陣列。
  4. 寫入分數(enter_scores()):遍歷 $score,空值執行 DELETE,非空值驗證整數後 REPLACE INTO score(兼具新增/更新)。

缺點:無任何認證機制,任何人可修改分數。後續會員編輯腳本示範簡易密碼保護。

總統測驗(pres_quiz.php)

  • 利用 MySQL 3.23 ORDER BY RAND() 隨機抽取一位總統:SELECT name, birth_place FROM president ORDER BY RAND() LIMIT 1。
  • 再抽 4 個不同出生地作為干擾選項:SELECT birth_place FROM president WHERE birth_place != ? ORDER BY RAND() LIMIT 4。
  • 表單隱藏欄位(name、place、choice)保存正確答案與選項組合,遞交時比對 $response 與 $place。
  • 正確 → 顯示新題;錯誤 → 重顯同題並提示。

會員線上編輯(edit_member.php)

  1. 建立 member_pass(member_id, password) 表,密碼存 MD5 雜湊:INSERT ... VALUES (id, MD5(RAND()))。另加管理員帳號 member_id=0, password='secret'。
  2. 首次造訪顯示登入表單(會員 ID + 密碼)。
  3. 遞交後 check_pass() 查詢比對 MD5,或管理員密碼通吃。
  4. 驗證通過 → display_entry() 顯示編輯表單:ID、到期日(一般會員唯讀,管理員可編輯)等欄位。密碼以隱藏欄位帶入下一步。
  5. 再次遞交 → update_entry() 重新驗證密碼,處理空值轉 NULL(到期日 NULL 代表終身會員),依欄位中繼資料(mysql_fetch_field() + IS_NOT_NULL())決定是否插入 NULL 或空字串。

安全提醒:密碼明文傳輸(HTTP),生產環境應改用 HTTPS + 雜湊挑戰或 PHPLIB 等完整認證庫。

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