PHP在线考试发布系统实战指南

admin 2025-01-13 796 0

在这个数字化时代,在线教育已成为主流,而一个高效、稳定的在线考试发布系统则是教育平台的核心组件。本文将带你一步步用PHP构建一个简易但功能完备的在线考试发布系统。

PHP在线考试发布系统实战指南

项目准备

首先,确保你的开发环境已安装以下工具:

  • PHP 7.4或更高版本
  • MySQL数据库
  • Web服务器(如Apache或Nginx)

1. 数据库设计

在MySQL中创建一个名为online_exam的数据库,并设计以下表结构:

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

CREATE TABLE exams (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(100) NOT NULL,
    description TEXT,
    created_by INT,
    FOREIGN KEY (created_by) REFERENCES users(id)
);

CREATE TABLE questions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    exam_id INT,
    question_text TEXT NOT NULL,
    FOREIGN KEY (exam_id) REFERENCES exams(id)
);

CREATE TABLE options (
    id INT AUTO_INCREMENT PRIMARY KEY,
    question_id INT,
    option_text TEXT NOT NULL,
    is_correct BOOLEAN NOT NULL,
    FOREIGN KEY (question_id) REFERENCES questions(id)
);

2. 项目结构

在项目根目录下创建以下文件夹和文件:

/project
    /includes
        - db.php
    /pages
        - index.php
        - login.php
        - dashboard.php
        - create_exam.php
        - take_exam.php
    /assets
        - style.css
    - index.php

核心功能实现

3. 数据库连接

includes/db.php中配置数据库连接:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "online_exam";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
?>

4. 用户登录

login.php中实现用户登录功能:

<?php
include 'includes/db.php';

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];

    $sql = "SELECT * FROM users WHERE username='$username'";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        $user = $result->fetch_assoc();
        if (password_verify($password, $user['password'])) {
            session_start();
            $_SESSION['user_id'] = $user['id'];
            $_SESSION['role'] = $user['role'];
            header('Location: dashboard.php');
        } else {
            $error = "Invalid password";
        }
    } else {
        $error = "User not found";
    }
}
?>

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="assets/style.css">
</head>
<body>
    <h2>Login</h2>
    <form method="post">
        <label>Username:</label>
        <input type="text" name="username" required><br>
        <label>Password:</label>
        <input type="password" name="password" required><br>
        <button type="submit">Login</button>
    </form>
    <?php if (isset($error)) echo "<p>$error</p>"; ?>
</body>
</html>

5. 考试创建

create_exam.php中实现考试创建功能:


<?php
include 'includes/db.php';
session_start();

if ($_SESSION['role'] != 'teacher') {
    header('Location: dashboard.php');
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $title = $_POST['title'];
    $description = $_POST['description'];

    $sql = "INSERT INTO exams (title, description, created_by) VALUES ('$title', '$description', {$_SESSION['user_id']})";
    if ($conn->query($sql) === TRUE) {
        $exam_id = $conn->insert_id;
        header("Location: add_questions.php?exam_id=$exam_id");
    } else {
        $error = "Error: " . $sql . "<br>" . $conn->error;
    }
}
?>

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="assets/style.css">
</head>
<body>
    <h2>Create Exam</h2>
    <form method="post">
        <label>Title:</label>
        <input type="text" name="

评论(0)