当前位置:首页 > PHP

php实现选课

2026-01-29 19:41:23PHP

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

数据库设计

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

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建立数据库连接:

php实现选课

$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 "课程已满,无法选课";
    }
}

显示可选课程

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

$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实现打印功能的方法 在PHP中实现打印功能可以通过多种方式完成,包括直接输出到浏览器、生成PDF文件、调用打印机接口等。以下是几种常见的方法: 直接输出HTML内容 PHP可以通过echo或…

php实现验证码

php实现验证码

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

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class Tr…

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

php实现socket

php实现socket

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

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…