当前位置:首页 > 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的用户登录系统:

php实现在线考试

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']
    ]);
}

考试功能

随机抽取试题生成试卷:

php实现在线考试

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实现在线考试系统的基本框架,可根据实际需求进行扩展和完善。

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

相关文章

Vue在线表格实现

Vue在线表格实现

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

vue在线对话咋实现

vue在线对话咋实现

实现 Vue 在线对话功能 使用 WebSocket 实现实时通信 WebSocket 是一种全双工通信协议,适合实时对话场景。Vue 中可以结合 socket.io-client 库实现。 安装依…

php实现文档在线预览

php实现文档在线预览

PHP实现文档在线预览的方法 使用PHP实现文档在线预览可以通过多种方式完成,具体方法取决于文档类型和需求。以下是几种常见的方法: 使用Google Docs Viewer Google Docs…

php实现在线交流功能

php实现在线交流功能

使用PHP实现在线交流功能 在线交流功能通常涉及即时消息传递、用户状态管理和数据存储。PHP结合前端技术可以实现这一功能。 基于AJAX的轮询实现 创建基本的数据库表结构存储消息数据: CREAT…

js实现在线即时聊天

js实现在线即时聊天

使用WebSocket实现即时聊天 WebSocket是一种在单个TCP连接上进行全双工通信的协议,适合实时聊天应用。 // 客户端代码 const socket = new WebSocket('…