🗣 Wd提问: PHP源码答题系统
🤖 Ai回答: 以下是一个简单的PHP答题系统源码示例,包含基本功能:
1、数据库设计(MySQL):
sql
CREATE DATABASE quiz_system;
USE quiz_system;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE questions (
id INT AUTO_INCREMENT PRIMARY KEY,
question_text TEXT NOT NULL,
option_a VARCHAR(255),
option_b VARCHAR(255),
option_c VARCHAR(255),
option_d VARCHAR(255),
correct_answer CHAR(1) NOT NULL,
question_type ENUM('single_choice', 'multiple_choice') DEFAULT 'single_choice'
);
CREATE TABLE exam_results (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
score INT DEFAULT 0,
total_questions INT DEFAULT 0,
exam_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
2、用户注册(register.php):
php
<?php
$conn = new mysqli(localhost, root, , quiz_system);
if ($_SERVER[REQUEST_METHOD] == POST) {
$username = $conn-real_escape_string($_POST['username']);
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$stmt = $conn-prepare(INSERT INTO users (username, password) VALUES (?, ?));
$stmt-bind_param(ss, $username, $password);
if ($stmt-execute()) {
echo 注册成功!;
} else {
echo 注册失败: 、$conn-error;
}
}
?
<form method=post
用户名: <input type=text name=username required<br
密码: <input type=password name=password required<br
<button type=submit注册</button
</form
3、登录系统(login.php):
php
<?php
session_start();
$conn = new mysqli(localhost, root, , quiz_system);
if ($_SERVER[REQUEST_METHOD] == POST) {
$username = $conn-real_escape_string($_POST['username']);
$password = $_POST['password'];
$result = $conn-query(SELECT * FROM users WHERE username='$username');
if ($result-num_rows == 1) {
$user = $result-fetch_assoc();
if (password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
header(Location: exam.php);
} else {
echo 密码错误;
}
} else {
echo 用户不存在;
}
}
?
<form method=post
用户名: <input type=text name=username required<br
密码: <input type=password name=password required<br
<button type=submit登录</button
</form
4、考试页面(exam.php):
php
<?php
session_start();
$conn = new mysqli(localhost, root, , quiz_system);
if (!isset($_SESSION['user_id'])) {
header(Location: login.php);
exit;
}
// 获取5道随机题目
$questions = $conn-query(SELECT * FROM questions ORDER BY RAND() LIMIT 5);
$questionCount = $questions-num_rows;
?
<!DOCTYPE html
<html
<head
<title在线考试</title
</head
<body
<h1在线考试系统</h1
<form method=post action=submit_exam.php
<?php while($row = $questions-fetch_assoc()): ?
<div
<h3<?= htmlspecialchars($row['question_text']) ?</h3
<?php foreach(['A', 'B', 'C', 'D'] as $option): ?
<?php if (!empty($row['option_'.$option])): ?
<label
<input type=<?= $row['question_type'] == 'multiple_choice' ? 'checkbox' : 'radio' ?
name=answers[<?= $row['id'] ?][]
value=<?= $option ?
<?= htmlspecialchars($row['option_'.$option]) ?
</label<br
<?php endif; ?
<?php endforeach; ?
</div
<hr
<?php endwhile; ?
<button type=submit提交试卷</button
</form
</body
</html
5、试卷提交处理(submit_exam.php):
php
<?php
session_start();
$conn = new mysqli(localhost, root, , quiz_system);
if (!isset($_SESSION['user_id'])) {
header(Location: login.php);
exit;
}
$userId = $_SESSION['user_id'];
$score = 0;
$total = 0;
if ($_SERVER[REQUEST_METHOD] == POST) {
$questions = $conn-query(SELECT * FROM questions ORDER BY RAND() LIMIT 5);
while($row = $questions-fetch_assoc()) {
$total++;
$userAnswer = isset($_POST['answers'][$row['id']]) ? $_POST['answers'][$row['id']] : [];
// 处理多选题
if ($row['question_type'] == 'multiple_choice') {
sort($userAnswer);
$correctAnswers = str_split($row['correct_answer']);
sort($correctAnswers);
if ($userAnswer == $correctAnswers) {
$score++;
}
} else {
// 单选题
if (!empty($userAnswer) && $userAnswer[0] == $row['correct_answer']) {
$score++;
}
}
}
// 保存成绩
$stmt = $conn-prepare(INSERT INTO exam_results (user_id, score, total_questions) VALUES (?, ?, ?));
$stmt-bind_param(iii, $userId, $score, $total);
$stmt-execute();
echo 考试完成!你的得分是:$score/$total;
}
?
6、管理后台示例(admin/add_question.php):
php
<?php
$conn = new mysqli(localhost, root, , quiz_system);
if ($_SERVER[REQUEST_METHOD] == POST) {
$question_text = $conn-real_escape_string($_POST['question_text']);
$option_a = $conn-real_escape_string($_POST['option_a']);
$option_b = $conn-real_escape_string($_POST['option_b']);
$option_c = $conn-real_escape_string($_POST['option_c']);
$option_d = $conn-real_escape_string($_POST['option_d']);
$correct_answer = $conn-real_escape_string($_POST['correct_answer']);
$question_type = $conn-real_escape_string($_POST['question_type']);
$stmt = $conn-prepare(INSERT INTO questions (question_text, option_a, option_b, option_c, option_d, correct_answer, question_type) VALUES (?, ?, ?, ?, ?, ?, ?));
$stmt-bind_param(sssssss, $question_text, $option_a, $option_b, $option_c, $option_d, $correct_answer, $question_type);
if ($stmt-execute()) {
echo 题目添加成功!;
} else {
echo 添加失败: 、$conn-error;
}
}
?
<form method=post
<textarea name=question_text required</textarea<br
选项A: <input type=text name=option_a required<br
选项B: <input type=text name=option_b required<br
选项C: <input type=text name=option_c<br
选项D: <input type=text name=option_d<br
正确答案: <input type=text name=correct_answer required placeholder=例如:A或ABCD<br
题型:
<select name=question_type
<option value=single_choice单选</option
<option value=multiple_choice多选</option
</select<br
<button type=submit添加题目</button
</form
7、成绩查看(results.php):
php
<?php
session_start();
$conn = new mysqli(localhost, root, , quiz_system);
if (!isset($_SESSION['user_id'])) {
header(Location: login.php);
exit;
}
$results = $conn-query(SELECT * FROM exam_results WHERE user_id=.$_SESSION['user_id']、ORDER BY exam_date DESC);
?
<table border=1
<tr<th考试时间</th<th总题数</th<th得分</th</tr
<?php while($row = $results-fetch_assoc()): ?
<tr
<td<?= $row['exam_date'] ?</td
<td<?= $row['total_questions'] ?</td
<td<?= $row['score'] ?</td
</tr
<?php endwhile; ?
</table
使用说明:
1、创建数据库并导入上述SQL结构
2、修改数据库连接参数(host/username/password)
3、按需添加更多题目
4、确保服务器支持PHP 7.0+ 和 MySQL
扩展建议:
1、添加防作弊机制
📣 商家广告:





0
IP地址: 123.220.223.199
搜索次数: 7
提问时间: 2025-12-21 07:22:08
本站所有
❓
问答
均由Ai自动分析整理,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
本站由
🟢
豌豆Ai
提供技术支持,使用的最新版:
豌豆Ai站群搜索引擎系统 V.25.10.25
搭建本站。