php实现题库系统
PHP实现题库系统的基本架构
题库系统的核心功能包括题目管理、分类管理、用户权限控制和答题模块。使用PHP结合MySQL数据库可以高效实现这些功能。
数据库设计需要包含以下主要表:
questions(题目表):存储题目内容、类型、难度等信息categories(分类表):题目分类管理users(用户表):系统用户管理user_answers(用户答题记录):存储用户答题历史
数据库连接与配置
创建数据库连接配置文件config.php:

<?php
$host = 'localhost';
$dbname = 'question_db';
$username = 'root';
$password = '';
try {
$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
题目管理功能实现
创建题目添加表单和处理脚本:
// add_question.php
<form action="process_question.php" method="post">
<select name="type">
<option value="single">单选题</option>
<option value="multiple">多选题</option>
<option value="judge">判断题</option>
</select>
<textarea name="content" placeholder="题目内容"></textarea>
<input type="text" name="option_a" placeholder="选项A">
<input type="text" name="option_b" placeholder="选项B">
<input type="submit" value="添加题目">
</form>
// process_question.php
include 'config.php';
$stmt = $conn->prepare("INSERT INTO questions (type, content, option_a, option_b) VALUES (?, ?, ?, ?)");
$stmt->execute([$_POST['type'], $_POST['content'], $_POST['option_a'], $_POST['option_b']]);
题目展示与答题功能
实现题目随机抽取和答题界面:

// get_questions.php
include 'config.php';
$stmt = $conn->query("SELECT * FROM questions ORDER BY RAND() LIMIT 10");
$questions = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($questions as $q) {
echo '<div class="question">';
echo '<p>'.$q['content'].'</p>';
if($q['type'] == 'single' || $q['type'] == 'multiple') {
echo '<input type="'.($q['type']=='single'?'radio':'checkbox').'" name="q'.$q['id'].'" value="A">'.$q['option_a'];
echo '<input type="'.($q['type']=='single'?'radio':'checkbox').'" name="q'.$q['id'].'" value="B">'.$q['option_b'];
}
echo '</div>';
}
用户答题记录存储
保存用户答题结果到数据库:
// save_answers.php
include 'config.php';
foreach($_POST as $key => $value) {
if(strpos($key, 'q') === 0) {
$qid = substr($key, 1);
$stmt = $conn->prepare("INSERT INTO user_answers (user_id, question_id, answer) VALUES (?, ?, ?)");
$stmt->execute([$_SESSION['user_id'], $qid, $value]);
}
}
安全防护措施
为防止SQL注入和XSS攻击,需要对输入数据进行处理:
function sanitizeInput($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$clean_input = sanitizeInput($_POST['input']);
性能优化建议
对于大型题库系统,可以考虑以下优化方案:
- 使用Redis缓存热门题目
- 实现分页查询避免一次性加载过多题目
- 对数据库表添加适当索引
- 使用预处理语句提高SQL执行效率
完整的题库系统还需要用户认证、题目搜索、统计分析等功能模块,可以根据实际需求逐步扩展。






