当前位置:首页 > PHP

PHP实现题库源码

2026-02-27 23:34:45PHP

以下是一个基于PHP的简单题库系统实现方案,包含核心功能和代码示例:

数据库设计

创建MySQL数据库表结构存储题目和答案:

CREATE TABLE `questions` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `question_text` text NOT NULL,
  `question_type` enum('single','multiple','true_false') NOT NULL,
  `difficulty` tinyint(4) DEFAULT 1,
  `category_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE `answers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `question_id` int(11) NOT NULL,
  `answer_text` text NOT NULL,
  `is_correct` tinyint(1) DEFAULT 0,
  PRIMARY KEY (`id`)
);

题目添加功能

实现后台题目添加的表单处理:

// 添加题目处理
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $questionText = $_POST['question_text'];
    $questionType = $_POST['question_type'];

    $stmt = $pdo->prepare("INSERT INTO questions (question_text, question_type) VALUES (?, ?)");
    $stmt->execute([$questionText, $questionType]);
    $questionId = $pdo->lastInsertId();

    // 处理答案选项
    foreach ($_POST['answers'] as $answer) {
        $isCorrect = isset($_POST['correct_answers'][$answer['id']]) ? 1 : 0;
        $stmt = $pdo->prepare("INSERT INTO answers (question_id, answer_text, is_correct) VALUES (?, ?, ?)");
        $stmt->execute([$questionId, $answer['text'], $isCorrect]);
    }
}

题目展示功能

前端展示题目及选项:

// 获取题目列表
$stmt = $pdo->query("SELECT * FROM questions");
$questions = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($questions as $question) {
    echo "<div class='question'>";
    echo "<h3>{$question['question_text']}</h3>";

    // 获取对应答案
    $stmt = $pdo->prepare("SELECT * FROM answers WHERE question_id = ?");
    $stmt->execute([$question['id']]);
    $answers = $stmt->fetchAll();

    foreach ($answers as $answer) {
        echo "<label><input type='radio' name='q{$question['id']}' value='{$answer['id']}'>";
        echo "{$answer['answer_text']}</label><br>";
    }
    echo "</div>";
}

答案验证功能

提交后验证用户答案:

PHP实现题库源码

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $score = 0;
    foreach ($_POST as $key => $userAnswer) {
        if (strpos($key, 'q') === 0) {
            $questionId = substr($key, 1);

            // 获取正确答案
            $stmt = $pdo->prepare("SELECT id FROM answers WHERE question_id = ? AND is_correct = 1");
            $stmt->execute([$questionId]);
            $correctAnswers = $stmt->fetchAll(PDO::FETCH_COLUMN);

            if (in_array($userAnswer, $correctAnswers)) {
                $score++;
            }
        }
    }
    echo "您的得分: {$score}";
}

扩展功能建议

  • 添加分类管理功能
  • 实现题目随机组卷
  • 添加题目难度分析
  • 开发用户答题历史记录
  • 实现题目导入导出功能

系统可采用MVC架构组织代码,建议使用PDO进行数据库操作防止SQL注入。前端可使用Bootstrap等框架优化界面展示效果。

标签: 题库源码
分享给朋友:

相关文章

vue实现登录源码

vue实现登录源码

以下是一个基于 Vue.js 的登录功能实现示例,包含前端代码和关键逻辑说明: 登录页面组件 <template> <div class="login-container"&g…

如何阅读java源码

如何阅读java源码

阅读Java源码的方法 选择合适的源码项目 初学者建议从JDK核心类库(如java.lang、java.util)或知名开源项目(如Spring、Guava)入手。选择文档完善、社区活跃的项目能降低理…

vue实现图片上传源码

vue实现图片上传源码

Vue 图片上传实现源码 以下是一个基于 Vue 的图片上传组件实现,包含前端代码和关键逻辑说明。示例使用 axios 发送请求,并支持预览、限制文件类型和大小等功能。 基础模板结构 <tem…

vue源码的具体实现

vue源码的具体实现

Vue 源码的核心实现 Vue.js 的源码实现主要围绕响应式系统、虚拟 DOM、模板编译和组件化等核心概念展开。以下是关键部分的实现细节: 响应式系统 Vue 2.x 使用 Object.defi…

jquery源码解读

jquery源码解读

jQuery 源码解读指南 jQuery 源码解读需要从核心架构、模块划分、设计模式等角度入手。以下是关键解读方向和方法: 核心架构 jQuery 的核心是一个立即执行的函数表达式(IIFE),创建…

如何读java源码

如何读java源码

理解基础知识 掌握Java核心语法、面向对象编程(OOP)概念、集合框架、多线程等基础知识是阅读源码的前提。熟悉设计模式(如单例、工厂、观察者等)能帮助识别代码中的常见结构。 选择合适的源码项目 从…