当前位置:首页 > PHP

php实现在线考试

2026-02-14 02:44:33PHP

实现在线考试系统(PHP)

数据库设计

创建必要的数据库表结构,例如用户表、试题表、考试记录表等。以下为基本表结构示例:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(255) NOT NULL,
    role ENUM('admin', 'student') NOT NULL
);

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

CREATE TABLE exams (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    score INT NOT NULL,
    taken_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

用户认证与登录

实现用户登录功能,区分管理员和学生角色。管理员可管理试题,学生可参加考试。

// 登录验证示例
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];

    $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
    $stmt->execute([$username]);
    $user = $stmt->fetch();

    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['role'] = $user['role'];
        header('Location: dashboard.php');
        exit;
    }
}

试题管理

管理员可添加、编辑、删除试题。

php实现在线考试

// 添加试题示例
if ($_SESSION['role'] === 'admin' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $question = $_POST['question'];
    $option_a = $_POST['option_a'];
    $option_b = $_POST['option_b'];
    $option_c = $_POST['option_c'];
    $option_d = $_POST['option_d'];
    $correct = $_POST['correct_answer'];

    $stmt = $pdo->prepare("INSERT INTO questions (question_text, option_a, option_b, option_c, option_d, correct_answer) VALUES (?, ?, ?, ?, ?, ?)");
    $stmt->execute([$question, $option_a, $option_b, $option_c, $option_d, $correct]);
}

考试功能

随机抽取试题并计算得分。

// 考试页面示例
$stmt = $pdo->query("SELECT * FROM questions ORDER BY RAND() LIMIT 10");
$questions = $stmt->fetchAll();

// 提交答案处理
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $score = 0;
    foreach ($_POST['answers'] as $question_id => $user_answer) {
        $stmt = $pdo->prepare("SELECT correct_answer FROM questions WHERE id = ?");
        $stmt->execute([$question_id]);
        $correct = $stmt->fetchColumn();

        if ($user_answer === $correct) {
            $score += 10;
        }
    }

    $stmt = $pdo->prepare("INSERT INTO exams (user_id, score) VALUES (?, ?)");
    $stmt->execute([$_SESSION['user_id'], $score]);
    header('Location: result.php?score='.$score);
}

考试结果展示

显示考试成绩和历史记录。

php实现在线考试

// 显示成绩示例
$stmt = $pdo->prepare("SELECT * FROM exams WHERE user_id = ? ORDER BY taken_at DESC");
$stmt->execute([$_SESSION['user_id']]);
$exams = $stmt->fetchAll();

foreach ($exams as $exam) {
    echo "得分: {$exam['score']}, 考试时间: {$exam['taken_at']}<br>";
}

安全措施

确保系统安全性,防止作弊和攻击。

// 防止SQL注入
使用预处理语句(如上例所示)

// 防止会话劫持
session_regenerate_id(true);

// 考试时间限制
$_SESSION['exam_start'] = time();
if (time() - $_SESSION['exam_start'] > 3600) {
    die("考试时间已结束");
}

界面设计

使用HTML/CSS创建用户友好的界面,Bootstrap可快速搭建响应式布局。

<!-- 考试界面示例 -->
<form method="post">
    <?php foreach ($questions as $q): ?>
    <div class="question">
        <p><?= htmlspecialchars($q['question_text']) ?></p>
        <input type="radio" name="answers[<?= $q['id'] ?>]" value="A"> <?= htmlspecialchars($q['option_a']) ?><br>
        <input type="radio" name="answers[<?= $q['id'] ?>]" value="B"> <?= htmlspecialchars($q['option_b']) ?><br>
        <input type="radio" name="answers[<?= $q['id'] ?>]" value="C"> <?= htmlspecialchars($q['option_c']) ?><br>
        <input type="radio" name="answers[<?= $q['id'] ?>]" value="D"> <?= htmlspecialchars($q['option_d']) ?><br>
    </div>
    <?php endforeach; ?>
    <button type="submit">提交答案</button>
</form>

该系统实现了基本的在线考试功能,可根据需求扩展计时器、试题分类、多种题型等功能。确保定期备份数据库,并考虑使用框架(如Laravel)提升开发效率和安全性。

标签: 在线考试
分享给朋友:

相关文章

css导航条在线制作

css导航条在线制作

CSS导航条在线制作工具 使用在线工具可以快速生成CSS导航条,无需手动编写代码。以下是一些流行的在线工具: CSS Menu Maker 提供多种导航条样式,包括水平、垂直和下拉菜单。用户可自定义…

在线jquery

在线jquery

jQuery CDN 链接 以下是常用的 jQuery CDN(内容分发网络)链接,可直接在 HTML 文件中引入: jQuery 3.x(最新稳定版) <script src="ht…

Vue在线表格实现

Vue在线表格实现

Vue在线表格实现方案 使用Element UI的el-table组件 Element UI提供了功能强大的表格组件el-table,支持排序、筛选、分页等常见功能。安装Element UI后可直接使…

vue实现文件在线加载

vue实现文件在线加载

实现文件在线加载的基本方法 在Vue中实现文件在线加载,通常需要结合前端文件处理和后端服务支持。以下是几种常见的方法: 使用input标签和FileReader API 在Vue组件中添加input…

实现vue文件在线编辑

实现vue文件在线编辑

实现 Vue 文件在线编辑的方案 基于 Monaco Editor 的解决方案 Monaco Editor 是 VS Code 的底层编辑器,支持语法高亮、代码补全等功能。安装依赖: npm…

vue实现word在线编辑

vue实现word在线编辑

Vue 实现 Word 在线编辑 要实现 Vue 中的 Word 在线编辑功能,通常需要集成第三方库或 API。以下是几种常见的方法: 使用 Office Web 编辑器 Microsoft 提供了…