php实现选课网页
数据库设计
创建数据库表存储课程和学生信息,例如courses表(含id, name, credit等字段)和students表(含id, name, selected_courses等字段)。使用MySQL可通过以下SQL初始化:
CREATE TABLE courses (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
credit INT,
capacity INT
);
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
selected_courses TEXT -- 存储已选课程ID,如"1,3,5"
);
前端界面构建
使用HTML+CSS创建选课页面,包含课程列表展示和选课按钮。示例课程列表部分代码:

<div class="course-list">
<?php foreach ($courses as $course): ?>
<div class="course-item">
<h3><?php echo $course['name']; ?></h3>
<p>学分: <?php echo $course['credit']; ?></p>
<button onclick="selectCourse(<?php echo $course['id']; ?>)">选课</button>
</div>
<?php endforeach; ?>
</div>
后端逻辑处理
通过PHP处理选课请求,验证课程容量并更新数据库。示例处理代码:
// select_course.php
$courseId = $_POST['course_id'];
$studentId = $_SESSION['student_id'];
// 检查课程容量
$course = $db->query("SELECT capacity FROM courses WHERE id = $courseId")->fetch();
if ($course['capacity'] > 0) {
// 更新学生已选课程
$db->exec("UPDATE students SET selected_courses = CONCAT(selected_courses,',$courseId') WHERE id = $studentId");
// 减少课程容量
$db->exec("UPDATE courses SET capacity = capacity - 1 WHERE id = $courseId");
echo json_encode(['success' => true]);
} else {
echo json_encode(['error' => '课程已满']);
}
会话管理
使用PHP会话跟踪登录状态和学生信息:

session_start();
// 登录验证后设置会话变量
$_SESSION['student_id'] = $studentId;
$_SESSION['student_name'] = $studentName;
选课冲突检查
在选课前通过SQL查询检查时间冲突:
// 假设有course_schedule表存储课程时间
$conflict = $db->query("
SELECT COUNT(*) FROM course_schedule
WHERE course_id IN (SELECT selected_courses FROM students WHERE id = $studentId)
AND time_slot = (SELECT time_slot FROM course_schedule WHERE course_id = $courseId)
")->fetchColumn();
if ($conflict > 0) {
die(json_encode(['error' => '时间冲突']));
}
结果展示
创建已选课程页面,从数据库查询并显示学生已选课程:
$selected = $db->query("
SELECT c.* FROM courses c
JOIN students s ON FIND_IN_SET(c.id, s.selected_courses)
WHERE s.id = $studentId
")->fetchAll();






