当前位置:首页 > 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实现考试倒计时:

php实现在线考试

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实现考试系统的基本架构 使用Vue.js构建考试系统需要结合前端框架和后端API。Vue负责用户界面和交互逻辑,后端处理数据存储和业务规则。 核心功能模块设计 用户认证模块 实现登录/注册功…

vue实现线上考试

vue实现线上考试

Vue实现线上考试系统 线上考试系统需要包含用户认证、试题管理、考试计时、自动评分等功能。以下是一个基于Vue的实现方案: 技术栈选择 Vue 3 + Composition API Vue Ro…

vue实现word在线编辑

vue实现word在线编辑

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

在线css导航制作

在线css导航制作

CSS导航制作方法 使用HTML和CSS创建一个简单的在线导航栏,可以通过以下步骤实现。这里提供一个基础的横向导航栏示例。 HTML结构 <nav class="navbar">…

php ajax实现在线聊天

php ajax实现在线聊天

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