当前位置:首页 > PHP

php实现题库答题

2026-02-16 10:16:33PHP

PHP实现题库答题系统

数据库设计

创建数据库表存储题目和答案信息,基本结构如下:

CREATE TABLE questions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    question_text TEXT NOT NULL,
    question_type ENUM('single', 'multiple', 'true_false') NOT NULL,
    difficulty TINYINT DEFAULT 1
);

CREATE TABLE options (
    id INT AUTO_INCREMENT PRIMARY KEY,
    question_id INT NOT NULL,
    option_text TEXT NOT NULL,
    is_correct BOOLEAN DEFAULT false,
    FOREIGN KEY (question_id) REFERENCES questions(id)
);

题目展示功能

通过PHP从数据库随机抽取题目并展示:

$pdo = new PDO('mysql:host=localhost;dbname=quiz_db', 'username', 'password');
$stmt = $pdo->query("SELECT * FROM questions ORDER BY RAND() LIMIT 10");

while ($question = $stmt->fetch()) {
    echo '<div class="question">';
    echo '<h3>'.$question['question_text'].'</h3>';

    $options = $pdo->query("SELECT * FROM options WHERE question_id = ".$question['id']);
    while ($option = $options->fetch()) {
        echo '<input type="radio" name="q'.$question['id'].'" value="'.$option['id'].'">';
        echo '<label>'.$option['option_text'].'</label><br>';
    }
    echo '</div>';
}

答案验证处理

提交后检查用户答案的正确性:

php实现题库答题

$score = 0;
foreach ($_POST as $key => $value) {
    if (strpos($key, 'q') === 0) {
        $questionId = substr($key, 1);
        $optionId = $value;

        $stmt = $pdo->prepare("SELECT is_correct FROM options WHERE id = ?");
        $stmt->execute([$optionId]);
        $isCorrect = $stmt->fetchColumn();

        if ($isCorrect) {
            $score++;
        }
    }
}
echo "您的得分:$score/10";

高级功能实现

添加题目分类和难度筛选:

$category = $_GET['category'] ?? null;
$difficulty = $_GET['difficulty'] ?? null;

$query = "SELECT * FROM questions WHERE 1=1";
if ($category) {
    $query .= " AND category_id = $category";
}
if ($difficulty) {
    $query .= " AND difficulty = $difficulty";
}
$query .= " ORDER BY RAND() LIMIT 10";

安全防护措施

防止SQL注入和使用预处理语句:

php实现题库答题

$stmt = $pdo->prepare("SELECT * FROM questions WHERE category_id = :cat AND difficulty = :diff");
$stmt->execute([
    ':cat' => $category,
    ':diff' => $difficulty
]);

性能优化建议

使用缓存减少数据库查询:

$cacheKey = "questions_{$category}_{$difficulty}";
if (!apcu_exists($cacheKey)) {
    $questions = $pdo->query($query)->fetchAll();
    apcu_store($cacheKey, $questions, 3600);
} else {
    $questions = apcu_fetch($cacheKey);
}

扩展功能

添加用户答题历史记录:

CREATE TABLE user_answers (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    question_id INT NOT NULL,
    option_id INT NOT NULL,
    is_correct BOOLEAN,
    answer_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

标签: 题库php
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

文件上传的基本实现 在PHP中实现文件上传需要使用$_FILES超全局数组处理上传的文件数据。表单必须设置enctype="multipart/form-data"属性,并采用POST方法提交。 创…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php实现文件的下载

php实现文件的下载

PHP 实现文件下载的方法 在 PHP 中实现文件下载功能通常需要设置正确的 HTTP 头信息,并输出文件内容。以下是几种常见的实现方式: 使用 header() 函数强制下载 通过设置 Conte…

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

php 实现锁

php 实现锁

PHP 实现锁的常见方法 文件锁(flock) 利用 flock 函数对文件进行独占锁定,适用于单机环境。 $fp = fopen("lockfile.lock", "w+"); if (f…

php实现验证码的识别

php实现验证码的识别

验证码识别的基本方法 验证码识别通常分为手动实现和第三方工具两种方式。手动实现需要图像处理和机器学习知识,而第三方工具则更快捷。 使用Tesseract OCR识别验证码 Tesseract是一个开…