php实现选课
PHP实现选课系统的基本方法
创建一个基于PHP的选课系统需要结合数据库操作、用户验证和前端交互。以下是关键实现步骤:
数据库设计 创建必要的数据库表,例如:

students(学生信息)courses(课程信息)enrollments(选课记录)
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
email VARCHAR(100) UNIQUE,
password VARCHAR(255)
);
CREATE TABLE courses (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
teacher VARCHAR(100),
credit INT,
capacity INT
);
CREATE TABLE enrollments (
id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT,
course_id INT,
enrollment_date DATETIME,
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
);
用户认证系统 实现学生登录功能,使用PHP的session机制:
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$email = $_POST['email'];
$password = $_POST['password'];
// 验证用户
$stmt = $pdo->prepare("SELECT * FROM students WHERE email = ?");
$stmt->execute([$email]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
header("Location: dashboard.php");
}
}
课程列表展示 从数据库获取课程信息并显示:

$stmt = $pdo->query("SELECT * FROM courses");
$courses = $stmt->fetchAll();
foreach ($courses as $course) {
echo "<div class='course'>";
echo "<h3>{$course['name']}</h3>";
echo "<p>教师: {$course['teacher']}</p>";
echo "<p>学分: {$course['credit']}</p>";
echo "<a href='enroll.php?course_id={$course['id']}'>选课</a>";
echo "</div>";
}
选课功能实现 处理选课请求并更新数据库:
if (isset($_GET['course_id']) && isset($_SESSION['user_id'])) {
$courseId = $_GET['course_id'];
$studentId = $_SESSION['user_id'];
// 检查是否已选
$stmt = $pdo->prepare("SELECT * FROM enrollments WHERE student_id = ? AND course_id = ?");
$stmt->execute([$studentId, $courseId]);
if ($stmt->rowCount() == 0) {
// 检查课程容量
$stmt = $pdo->prepare("SELECT COUNT(*) FROM enrollments WHERE course_id = ?");
$stmt->execute([$courseId]);
$enrolled = $stmt->fetchColumn();
$stmt = $pdo->prepare("SELECT capacity FROM courses WHERE id = ?");
$stmt->execute([$courseId]);
$capacity = $stmt->fetchColumn();
if ($enrolled < $capacity) {
// 添加选课记录
$stmt = $pdo->prepare("INSERT INTO enrollments (student_id, course_id, enrollment_date) VALUES (?, ?, NOW())");
$stmt->execute([$studentId, $courseId]);
echo "选课成功";
} else {
echo "课程已满";
}
} else {
echo "已选该课程";
}
}
选课结果查询 显示学生已选课程:
$stmt = $pdo->prepare("
SELECT c.* FROM courses c
JOIN enrollments e ON c.id = e.course_id
WHERE e.student_id = ?
");
$stmt->execute([$_SESSION['user_id']]);
$enrolledCourses = $stmt->fetchAll();
foreach ($enrolledCourses as $course) {
echo "<div>{$course['name']} - {$course['teacher']}</div>";
}
系统安全注意事项
- 使用预处理语句防止SQL注入
- 对用户输入进行验证和过滤
- 密码使用password_hash()加密存储
- 重要操作需要验证用户权限
- 使用HTTPS保护数据传输
扩展功能建议
- 添加课程搜索功能
- 实现退课功能
- 添加课程时间冲突检测
- 开发教师管理界面
- 添加选课时间限制功能
- 实现选课结果导出
以上代码示例展示了PHP选课系统的核心功能实现,实际开发中需要根据具体需求进行调整和完善。






