当前位置:首页 > PHP

php实现答题

2026-01-29 23:26:28PHP

实现答题功能的基本思路

使用PHP实现答题功能通常涉及前端表单提交、后端数据处理和结果展示三个主要部分。以下是一个基础的实现方案:

数据库设计

创建数据库表存储题目和用户答案:

CREATE TABLE questions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    question_text TEXT NOT NULL,
    option_a VARCHAR(255),
    option_b VARCHAR(255),
    option_c VARCHAR(255),
    option_d VARCHAR(255),
    correct_answer CHAR(1)
);

CREATE TABLE user_answers (
    id INT AUTO_INCREMENT PRIMARY KEY,
    question_id INT,
    user_answer CHAR(1),
    FOREIGN KEY (question_id) REFERENCES questions(id)
);

前端表单页面

创建HTML表单供用户答题:

<form action="submit_answers.php" method="post">
    <?php
    // 连接数据库并获取题目
    $pdo = new PDO('mysql:host=localhost;dbname=quiz_db', 'username', 'password');
    $stmt = $pdo->query("SELECT * FROM questions");
    while ($row = $stmt->fetch()) {
        echo '<div class="question">';
        echo '<h3>' . htmlspecialchars($row['question_text']) . '</h3>';
        echo '<input type="radio" name="q'.$row['id'].'" value="A"> ' . htmlspecialchars($row['option_a']) . '<br>';
        echo '<input type="radio" name="q'.$row['id'].'" value="B"> ' . htmlspecialchars($row['option_b']) . '<br>';
        echo '<input type="radio" name="q'.$row['id'].'" value="C"> ' . htmlspecialchars($row['option_c']) . '<br>';
        echo '<input type="radio" name="q'.$row['id'].'" value="D"> ' . htmlspecialchars($row['option_d']) . '<br>';
        echo '</div>';
    }
    ?>
    <button type="submit">提交答案</button>
</form>

答案处理脚本

创建submit_answers.php处理用户提交:

php实现答题

<?php
$pdo = new PDO('mysql:host=localhost;dbname=quiz_db', 'username', 'password');

// 获取所有题目ID
$questionIds = $pdo->query("SELECT id FROM questions")->fetchAll(PDO::FETCH_COLUMN);

$correctCount = 0;
$totalQuestions = count($questionIds);

foreach ($questionIds as $qid) {
    $answerKey = 'q'.$qid;
    if (isset($_POST[$answerKey])) {
        $userAnswer = $_POST[$answerKey];

        // 存储用户答案
        $stmt = $pdo->prepare("INSERT INTO user_answers (question_id, user_answer) VALUES (?, ?)");
        $stmt->execute([$qid, $userAnswer]);

        // 检查答案是否正确
        $correctAnswer = $pdo->query("SELECT correct_answer FROM questions WHERE id = $qid")->fetchColumn();
        if ($userAnswer == $correctAnswer) {
            $correctCount++;
        }
    }
}

// 显示结果
echo "您的得分: $correctCount / $totalQuestions";
?>

安全增强措施

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

$stmt = $pdo->prepare("INSERT INTO user_answers (question_id, user_answer) VALUES (:qid, :answer)");
$stmt->bindParam(':qid', $qid);
$stmt->bindParam(':answer', $userAnswer);
$stmt->execute();

添加CSRF保护:

php实现答题

session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        die('CSRF验证失败');
    }
}

高级功能扩展

实现随机抽题:

$stmt = $pdo->query("SELECT * FROM questions ORDER BY RAND() LIMIT 10");

添加计时功能:

// 前端JavaScript
let timeLeft = 300; // 5分钟
const timer = setInterval(() => {
    timeLeft--;
    document.getElementById('timer').textContent = `剩余时间: ${Math.floor(timeLeft/60)}分${timeLeft%60}秒`;
    if (timeLeft <= 0) {
        clearInterval(timer);
        document.forms[0].submit();
    }
}, 1000);

结果分析展示

生成答题统计报告:

$stmt = $pdo->query("
    SELECT q.id, q.question_text, 
           COUNT(CASE WHEN ua.user_answer = q.correct_answer THEN 1 END) as correct_count,
           COUNT(*) as total_attempts
    FROM questions q
    LEFT JOIN user_answers ua ON q.id = ua.question_id
    GROUP BY q.id
");

while ($row = $stmt->fetch()) {
    $accuracy = $row['total_attempts'] > 0 ? round($row['correct_count']/$row['total_attempts']*100, 2) : 0;
    echo "题目{$row['id']}: {$row['question_text']} - 正确率: {$accuracy}%<br>";
}

这个实现提供了答题系统的基本框架,可以根据具体需求进行扩展和优化。

标签: php
分享给朋友:

相关文章

php实现文件下载

php实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (f…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost'…

php 实现mvc

php 实现mvc

PHP 实现 MVC 架构的方法 MVC(Model-View-Controller)是一种常见的软件设计模式,用于分离业务逻辑、用户界面和用户输入。以下是 PHP 实现 MVC 架构的关键步骤:…

php session 实现购物车

php session 实现购物车

PHP Session 实现购物车的方法 初始化 Session 在 PHP 脚本的最开始调用 session_start() 函数,确保会话已启用。这通常在页面的顶部完成。 session_sta…

php 实现排名

php 实现排名

PHP 实现排名的方法 在 PHP 中实现排名功能通常涉及对数据进行排序、计算排名以及输出结果。以下是几种常见的实现方式: 基本数组排序排名 $scores = [85, 92, 78, 95, 8…