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

PHP 答題應用介面:隨機抽題、作答記錄與次數控制

     編輯:PHP 綜合知識

完整示範 PHP 答題類應用的取題介面:從 114 題中隨機抽取 5 題、檢查每日作答次數、記錄作答歷史並回傳題目與答案供前端驗證。

核心流程

  1. Session 驗證使用者身份
  2. 以 mt_rand(1,114) 不重複抽取 5 題 ID
  3. 扣減 answer_surplus,不足則回傳錯誤
  4. 預處理語句查詢題目內容(含選項與正確答案)
  5. 寫入 zaszh_answer 記錄本次作答的 5 題 ID,取得 answer_id
  6. 合併題目陣列與 answer_id 回傳 JSON

關鍵程式碼

while (sizeof($question_id) < 5) {
    $num_rand = mt_rand(1, 114);
    if (!in_array($num_rand, $question_id)) $question_id[] = $num_rand;
}

$mysqli->query("UPDATE zaszh_user SET answer_surplus=answer_surplus-1 
    WHERE id={$user_id} AND answer_surplus>0");

$stmt = $mysqli->prepare("SELECT question,A,B,C,D,answer 
    FROM zaszh_question WHERE id IN (?,?,?,?,?)");
$stmt->bind_param('iiiii', ...$question_id);
$stmt->execute();
$stmt->bind_result($question,$A,$B,$C,$D,$answer);
while ($stmt->fetch()) {
    $rows[] = compact('question','A','B','C','D','answer');
}

$stmt = $mysqli->prepare("INSERT INTO zaszh_answer 
    (user_id,question1,question2,question3,question4,question5,create_date) 
    VALUES (?,?,?,?,?,?,UNIX_TIMESTAMP(NOW()))");
$stmt->bind_param('iiiiii', $user_id, ...$question_id);
$stmt->execute();
$answer_id = $stmt->insert_id;

echo json_encode(array_merge($rows, ['answer_id' => $answer_id]));

設計考量

  • 使用預處理語句防止 SQL 注入
  • 題目 ID 範圍固定(1-114),實際應用建議改為查詢有效題目總數
  • 回傳正確答案供前端即時判斷,生產環境建議改為提交答案後由後端驗證
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved