当前位置:首页 > 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中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…

php 购物车实现

php 购物车实现

数据库设计 购物车功能通常需要设计数据库表存储商品和用户信息。常见的表包括products(商品表)、users(用户表)和cart(购物车表)。cart表通常包含字段:id(主键)、user_id(…

php实现mysql

php实现mysql

PHP 连接 MySQL 的基本方法 PHP 提供了多种方式与 MySQL 数据库进行交互,以下是最常用的几种方法。 使用 MySQLi 扩展 MySQLi 是 MySQL 的改进扩展,支持面向对…

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…

php实现下载

php实现下载

PHP实现文件下载 使用PHP实现文件下载可以通过设置HTTP头部信息强制浏览器下载文件而非直接打开。以下是几种常见的方法: 方法一:直接输出文件内容 $file_path = 'path/to/…