php选课实现
PHP 选课系统实现
数据库设计
创建数据库表存储学生、课程和选课记录。学生表(students)包含学号、姓名等字段;课程表(courses)包含课程ID、名称、容量等;选课表(enrollments)关联学生和课程。
CREATE TABLE students (
student_id INT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE courses (
course_id INT PRIMARY KEY,
name VARCHAR(100),
capacity INT
);
CREATE TABLE enrollments (
enrollment_id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT,
course_id INT,
FOREIGN KEY (student_id) REFERENCES students(student_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
连接数据库
使用PDO连接MySQL数据库,确保在PHP中配置正确的数据库凭据。

$dsn = 'mysql:host=localhost;dbname=course_selection';
$username = 'username';
$password = 'password';
try {
$pdo = new PDO($dsn, $username, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
选课功能实现
处理学生选课请求,检查课程容量是否已满,避免重复选课。
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['enroll'])) {
$studentId = $_POST['student_id'];
$courseId = $_POST['course_id'];
// 检查课程容量
$stmt = $pdo->prepare("SELECT COUNT(*) FROM enrollments WHERE course_id = ?");
$stmt->execute([$courseId]);
$enrolledCount = $stmt->fetchColumn();
$stmt = $pdo->prepare("SELECT capacity FROM courses WHERE course_id = ?");
$stmt->execute([$courseId]);
$capacity = $stmt->fetchColumn();
if ($enrolledCount >= $capacity) {
echo "课程已满";
} else {
// 检查是否已选
$stmt = $pdo->prepare("SELECT * FROM enrollments WHERE student_id = ? AND course_id = ?");
$stmt->execute([$studentId, $courseId]);
if ($stmt->fetch()) {
echo "已选该课程";
} else {
// 插入选课记录
$stmt = $pdo->prepare("INSERT INTO enrollments (student_id, course_id) VALUES (?, ?)");
$stmt->execute([$studentId, $courseId]);
echo "选课成功";
}
}
}
显示可选课程
从数据库查询并显示所有可选课程,包括当前选课人数和剩余容量。

$stmt = $pdo->query("
SELECT c.course_id, c.name, c.capacity, COUNT(e.enrollment_id) as enrolled
FROM courses c
LEFT JOIN enrollments e ON c.course_id = e.course_id
GROUP BY c.course_id
");
while ($row = $stmt->fetch()) {
echo "课程: {$row['name']}, 容量: {$row['capacity']}, 已选: {$row['enrolled']}";
}
安全性考虑
使用预处理语句防止SQL注入,对用户输入进行验证和过滤。
$studentId = filter_input(INPUT_POST, 'student_id', FILTER_VALIDATE_INT);
$courseId = filter_input(INPUT_POST, 'course_id', FILTER_VALIDATE_INT);
if (!$studentId || !$courseId) {
die("无效输入");
}
用户界面
创建简单的HTML表单供学生选择课程,显示选课结果和错误信息。
<form method="post">
<input type="hidden" name="student_id" value="123">
<select name="course_id">
<?php foreach ($courses as $course): ?>
<option value="<?= $course['course_id'] ?>"><?= $course['name'] ?></option>
<?php endforeach; ?>
</select>
<button type="submit" name="enroll">选课</button>
</form>






