在这个数字化时代,在线教育已成为主流,而一个高效、稳定的在线考试发布系统则是教育平台的核心组件。本文将带你一步步用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)