php实现选课
实现选课系统的关键步骤
数据库设计 创建学生表(students)、课程表(courses)和选课关系表(student_courses)。学生表存储学生信息,课程表存储课程信息,选课关系表记录学生与课程的关联。
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
CREATE TABLE courses (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
credit INT
);
CREATE TABLE student_courses (
student_id INT,
course_id INT,
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
);
连接数据库 使用PDO或MySQLi连接数据库。以下是PDO连接示例:
$dsn = 'mysql:host=localhost;dbname=course_selection';
$username = 'username';
$password = 'password';
try {
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
选课功能实现 创建选课表单和处理逻辑。表单显示可选课程列表,提交后处理选课请求。
// 显示可选课程
$stmt = $pdo->query("SELECT * FROM courses");
$courses = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 处理选课提交
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['course_id'])) {
$studentId = $_SESSION['student_id']; // 假设学生已登录
$courseId = $_POST['course_id'];
try {
$stmt = $pdo->prepare("INSERT INTO student_courses (student_id, course_id) VALUES (?, ?)");
$stmt->execute([$studentId, $courseId]);
echo "选课成功";
} catch (PDOException $e) {
echo "选课失败: " . $e->getMessage();
}
}
选课记录查询 查询学生已选课程,展示选课结果。
$studentId = $_SESSION['student_id'];
$stmt = $pdo->prepare("
SELECT c.*
FROM courses c
JOIN student_courses sc ON c.id = sc.course_id
WHERE sc.student_id = ?
");
$stmt->execute([$studentId]);
$selectedCourses = $stmt->fetchAll(PDO::FETCH_ASSOC);
退课功能实现 添加退课选项,允许学生取消已选课程。
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['drop_course_id'])) {
$studentId = $_SESSION['student_id'];
$courseId = $_POST['drop_course_id'];
try {
$stmt = $pdo->prepare("DELETE FROM student_courses WHERE student_id = ? AND course_id = ?");
$stmt->execute([$studentId, $courseId]);
echo "退课成功";
} catch (PDOException $e) {
echo "退课失败: " . $e->getMessage();
}
}
安全注意事项
使用预处理语句防止SQL注入。对用户输入进行验证和过滤。实现用户认证确保只有登录学生能选课。考虑添加选课时间限制和学分上限等业务规则。







