当前位置:首页 > 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队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…

php 实现跳转

php 实现跳转

PHP 实现页面跳转的方法 在PHP中,实现页面跳转可以通过多种方式完成,以下是几种常用的方法: 使用header函数 header函数是PHP中最常用的跳转方法,通过发送HTTP头部信息实现跳转。…

php 线程实现

php 线程实现

PHP 线程实现方法 PHP 本身是单线程语言,但可以通过扩展或库实现多线程功能。以下是几种常见的实现方式: 使用 pthreads 扩展 pthreads 是一个 PHP 扩展,允许在 PHP 中…

php实现注册登录

php实现注册登录

PHP 注册功能实现 创建数据库表(以 MySQL 为例) CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, usern…

php实现支付宝支付

php实现支付宝支付

支付宝支付集成步骤 准备工作 在开始集成支付宝支付前,确保已注册支付宝开放平台账号并完成企业实名认证。创建应用后获取APPID、应用私钥和支付宝公钥。 配置支付宝SDK 通过Composer安装支付…