php实现在线考试
实现在线考试系统(PHP)
数据库设计
创建必要的数据库表结构,例如用户表、试题表、考试记录表等。以下为基本表结构示例:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
role ENUM('admin', 'student') NOT NULL
);
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
);
CREATE TABLE exams (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
score INT NOT NULL,
taken_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
用户认证与登录
实现用户登录功能,区分管理员和学生角色。管理员可管理试题,学生可参加考试。
// 登录验证示例
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
$_SESSION['role'] = $user['role'];
header('Location: dashboard.php');
exit;
}
}
试题管理
管理员可添加、编辑、删除试题。

// 添加试题示例
if ($_SESSION['role'] === 'admin' && $_SERVER['REQUEST_METHOD'] === 'POST') {
$question = $_POST['question'];
$option_a = $_POST['option_a'];
$option_b = $_POST['option_b'];
$option_c = $_POST['option_c'];
$option_d = $_POST['option_d'];
$correct = $_POST['correct_answer'];
$stmt = $pdo->prepare("INSERT INTO questions (question_text, option_a, option_b, option_c, option_d, correct_answer) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->execute([$question, $option_a, $option_b, $option_c, $option_d, $correct]);
}
考试功能
随机抽取试题并计算得分。
// 考试页面示例
$stmt = $pdo->query("SELECT * FROM questions ORDER BY RAND() LIMIT 10");
$questions = $stmt->fetchAll();
// 提交答案处理
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$score = 0;
foreach ($_POST['answers'] as $question_id => $user_answer) {
$stmt = $pdo->prepare("SELECT correct_answer FROM questions WHERE id = ?");
$stmt->execute([$question_id]);
$correct = $stmt->fetchColumn();
if ($user_answer === $correct) {
$score += 10;
}
}
$stmt = $pdo->prepare("INSERT INTO exams (user_id, score) VALUES (?, ?)");
$stmt->execute([$_SESSION['user_id'], $score]);
header('Location: result.php?score='.$score);
}
考试结果展示
显示考试成绩和历史记录。

// 显示成绩示例
$stmt = $pdo->prepare("SELECT * FROM exams WHERE user_id = ? ORDER BY taken_at DESC");
$stmt->execute([$_SESSION['user_id']]);
$exams = $stmt->fetchAll();
foreach ($exams as $exam) {
echo "得分: {$exam['score']}, 考试时间: {$exam['taken_at']}<br>";
}
安全措施
确保系统安全性,防止作弊和攻击。
// 防止SQL注入
使用预处理语句(如上例所示)
// 防止会话劫持
session_regenerate_id(true);
// 考试时间限制
$_SESSION['exam_start'] = time();
if (time() - $_SESSION['exam_start'] > 3600) {
die("考试时间已结束");
}
界面设计
使用HTML/CSS创建用户友好的界面,Bootstrap可快速搭建响应式布局。
<!-- 考试界面示例 -->
<form method="post">
<?php foreach ($questions as $q): ?>
<div class="question">
<p><?= htmlspecialchars($q['question_text']) ?></p>
<input type="radio" name="answers[<?= $q['id'] ?>]" value="A"> <?= htmlspecialchars($q['option_a']) ?><br>
<input type="radio" name="answers[<?= $q['id'] ?>]" value="B"> <?= htmlspecialchars($q['option_b']) ?><br>
<input type="radio" name="answers[<?= $q['id'] ?>]" value="C"> <?= htmlspecialchars($q['option_c']) ?><br>
<input type="radio" name="answers[<?= $q['id'] ?>]" value="D"> <?= htmlspecialchars($q['option_d']) ?><br>
</div>
<?php endforeach; ?>
<button type="submit">提交答案</button>
</form>
该系统实现了基本的在线考试功能,可根据需求扩展计时器、试题分类、多种题型等功能。确保定期备份数据库,并考虑使用框架(如Laravel)提升开发效率和安全性。






