php实现题库系统
数据库设计
题库系统的核心是数据库结构设计。需要创建至少三个表:题目表(questions)、分类表(categories)和用户答题记录表(user_answers)。
questions表结构示例:
CREATE TABLE questions (
id INT AUTO_INCREMENT PRIMARY KEY,
category_id INT,
question_text TEXT,
option_a VARCHAR(255),
option_b VARCHAR(255),
option_c VARCHAR(255),
option_d VARCHAR(255),
correct_answer CHAR(1),
difficulty TINYINT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
题目管理功能
开发后台管理界面实现对题目的CRUD操作。使用PDO预处理语句防止SQL注入。
添加题目示例代码:
function addQuestion($categoryId, $questionText, $options, $correctAnswer) {
$stmt = $pdo->prepare("INSERT INTO questions (...) VALUES (...)");
$stmt->execute([...]);
}
用户答题逻辑
实现随机抽题算法,根据分类和难度系数筛选题目。记录用户答题情况并计算得分。
答题处理示例:
function submitAnswer($userId, $questionId, $selectedAnswer) {
// 验证答案并记录
$correct = checkAnswerCorrect($questionId, $selectedAnswer);
saveUserAnswer($userId, $questionId, $selectedAnswer, $correct);
return $correct;
}
数据统计分析
开发统计功能分析答题数据,包括正确率、分类掌握程度等。使用SQL聚合函数和图表库展示数据。
正确率统计示例:
SELECT COUNT(*) as total,
SUM(CASE WHEN is_correct THEN 1 ELSE 0 END) as correct
FROM user_answers
WHERE user_id = ?
性能优化
对于大型题库,采用分页查询和缓存机制。使用Redis缓存热门题目和统计结果。
分页查询示例:
function getQuestions($categoryId, $page = 1, $perPage = 10) {
$offset = ($page - 1) * $perPage;
$stmt = $pdo->prepare("SELECT * FROM questions WHERE category_id = ? LIMIT ? OFFSET ?");
$stmt->execute([$categoryId, $perPage, $offset]);
return $stmt->fetchAll();
}
安全防护
实施XSS防护和CSRF保护。对用户输入进行过滤,使用HTMLPurifier处理富文本题目。
安全处理示例:
$cleanInput = htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$cleanHtml = $purifier->purify($dirtyHtml);





