当前位置:首页 > PHP

php实现在线考试

2026-01-29 04:32:21PHP

PHP实现在线考试系统

数据库设计

在线考试系统需要设计合理的数据库结构。常见表包括用户表、试题表、考试记录表等。

用户表(users)示例结构:

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

试题表(questions)示例结构:

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,
    score INT NOT NULL,
    created_by INT,
    FOREIGN KEY (created_by) REFERENCES users(id)
);

用户认证

实现基于session的用户登录系统:

session_start();

function login($username, $password) {
    // 数据库验证
    $user = $db->query("SELECT * FROM users WHERE username = '$username'");
    if(password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['role'] = $user['role'];
        return true;
    }
    return false;
}

试题管理

管理员或教师可以添加试题:

function addQuestion($data) {
    $stmt = $db->prepare("INSERT INTO questions 
        (question_text, option_a, option_b, option_c, option_d, correct_answer, score, created_by) 
        VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
    $stmt->execute([
        $data['question_text'],
        $data['option_a'],
        $data['option_b'],
        $data['option_c'],
        $data['option_d'],
        $data['correct_answer'],
        $data['score'],
        $_SESSION['user_id']
    ]);
}

考试功能

随机抽取试题生成试卷:

function generateExam($num_questions) {
    $questions = $db->query("SELECT * FROM questions ORDER BY RAND() LIMIT $num_questions");
    return $questions;
}

记录考生答案和计算分数:

function submitExam($answers) {
    $total_score = 0;
    foreach($answers as $qid => $answer) {
        $question = $db->query("SELECT * FROM questions WHERE id = $qid");
        if($question['correct_answer'] == $answer) {
            $total_score += $question['score'];
        }
    }

    $stmt = $db->prepare("INSERT INTO exam_results 
        (user_id, score, submitted_at) VALUES (?, ?, NOW())");
    $stmt->execute([$_SESSION['user_id'], $total_score]);

    return $total_score;
}

安全考虑

  1. 使用预处理语句防止SQL注入
  2. 密码使用password_hash()存储
  3. 重要操作进行权限验证
  4. 考试时间限制处理

前端交互

使用Ajax实现无刷新答题体验:

$('.answer-btn').click(function() {
    var qid = $(this).data('qid');
    var answer = $(this).data('answer');

    $.post('save_answer.php', {
        question_id: qid,
        answer: answer
    }, function(response) {
        // 更新界面
    });
});

计时功能

JavaScript实现考试倒计时:

var examTime = 60 * 30; // 30分钟
var timer = setInterval(function() {
    examTime--;
    var minutes = Math.floor(examTime / 60);
    var seconds = examTime % 60;
    $('#timer').text(minutes + ':' + (seconds < 10 ? '0' : '') + seconds);

    if(examTime <= 0) {
        clearInterval(timer);
        alert('时间到!');
        submitExam();
    }
}, 1000);

以上代码提供了PHP实现在线考试系统的基本框架,可根据实际需求进行扩展和完善。

php实现在线考试

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

相关文章

css导航条在线制作

css导航条在线制作

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

vue实现简历在线编辑

vue实现简历在线编辑

Vue 实现简历在线编辑方案 核心功能设计 使用 Vue 的响应式特性绑定表单数据,结合富文本编辑器或自定义表单组件实现编辑功能。推荐以下技术组合: 数据管理:Vuex 或 Pinia 存储简历数…

css按钮在线制作

css按钮在线制作

CSS按钮在线制作工具推荐 以下是一些常用的在线CSS按钮生成工具,可帮助快速创建自定义样式的按钮: CSS3 Button Generator 网址:https://css3button…

在线制作css图标

在线制作css图标

使用在线工具制作CSS图标 方法1:利用CSS图标生成器(如CSS.gg) 访问 CSS.gg 或其他类似工具,选择需要的图标,直接复制生成的CSS代码。这些工具通常提供纯CSS实现的图标,无需依赖图…

php实现word在线预览

php实现word在线预览

使用PHP实现Word文档在线预览 PHP可以通过多种方式实现Word文档的在线预览,以下是几种常见的方法: 使用Google Docs Viewer Google Docs Viewer提供了一…

php ajax实现在线聊天

php ajax实现在线聊天

实现 PHP AJAX 在线聊天的步骤 环境准备 确保服务器支持 PHP 和 MySQL,创建一个数据库存储聊天消息。示例表结构: CREATE TABLE `chat_messages` (…