当前位置:首页 > PHP

php实现选课

2026-01-29 19:41:23PHP

PHP 实现选课系统的基本方法

数据库设计

创建必要的数据库表来存储课程、学生和选课记录。主要表包括:

  • students:存储学生信息(id, name, email等)
  • courses:存储课程信息(id, name, capacity等)
  • enrollments:存储选课记录(student_id, course_id, enrollment_date)
CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL
);

CREATE TABLE courses (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    capacity INT NOT NULL,
    description TEXT
);

CREATE TABLE enrollments (
    student_id INT,
    course_id INT,
    enrollment_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (student_id, course_id),
    FOREIGN KEY (student_id) REFERENCES students(id),
    FOREIGN KEY (course_id) REFERENCES courses(id)
);

连接数据库

使用PDO或MySQLi建立数据库连接:

$host = 'localhost';
$db   = 'course_selection';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
    throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

选课功能实现

创建选课处理脚本,检查课程容量并插入选课记录:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $studentId = $_POST['student_id'];
    $courseId = $_POST['course_id'];

    // 检查课程是否已满
    $stmt = $pdo->prepare("SELECT COUNT(*) as enrolled, capacity FROM enrollments 
                          JOIN courses ON enrollments.course_id = courses.id 
                          WHERE course_id = ?");
    $stmt->execute([$courseId]);
    $result = $stmt->fetch();

    if ($result['enrolled'] < $result['capacity']) {
        try {
            $stmt = $pdo->prepare("INSERT INTO enrollments (student_id, course_id) VALUES (?, ?)");
            $stmt->execute([$studentId, $courseId]);
            echo "选课成功!";
        } catch (PDOException $e) {
            if ($e->errorInfo[1] == 1062) {
                echo "您已经选修过此课程";
            } else {
                echo "选课失败: " . $e->getMessage();
            }
        }
    } else {
        echo "课程已满,无法选课";
    }
}

显示可选课程

创建页面显示所有可选课程及当前报名情况:

php实现选课

$courses = $pdo->query("
    SELECT c.*, 
           COUNT(e.course_id) as enrolled,
           c.capacity - COUNT(e.course_id) as remaining
    FROM courses c
    LEFT JOIN enrollments e ON c.id = e.course_id
    GROUP BY c.id
")->fetchAll();

foreach ($courses as $course) {
    echo "<div class='course'>";
    echo "<h3>{$course['name']}</h3>";
    echo "<p>{$course['description']}</p>";
    echo "<p>已报名: {$course['enrolled']}/{$course['capacity']}</p>";
    echo "<form method='post'>";
    echo "<input type='hidden' name='student_id' value='1'>";
    echo "<input type='hidden' name='course_id' value='{$course['id']}'>";
    echo "<button type='submit'" . ($course['remaining'] <= 0 ? " disabled" : "") . ">";
    echo $course['remaining'] <= 0 ? "已满" : "选课";
    echo "</button>";
    echo "</form>";
    echo "</div>";
}

安全性考虑

  • 使用预处理语句防止SQL注入
  • 对用户输入进行验证和过滤
  • 实现用户认证系统(登录/注销)
  • 添加CSRF保护令牌

扩展功能

  • 添加退课功能
  • 实现课程时间冲突检查
  • 添加课程评分和评价系统
  • 开发管理员界面管理课程
  • 实现选课时间段限制

以上代码提供了PHP实现选课系统的基本框架,可根据实际需求进行扩展和修改。

标签: php
分享给朋友:

相关文章

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="upload…

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 // 创建…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $image…

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…