当前位置:首页 > 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实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…

php实现聊天

php实现聊天

实现 PHP 聊天功能的方法 使用 WebSocket 和 PHP 实现实时聊天 WebSocket 是一种全双工通信协议,适合实现实时聊天功能。PHP 可以通过 Ratchet 库实现 WebSo…

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…

php实现一个

php实现一个

PHP 实现一个简单的计算器 创建一个基本的计算器,支持加、减、乘、除运算。以下是一个完整的实现代码示例: <?php $result = ""; if ($_SERVER["REQUEST_…

php实现推送消息推送消息

php实现推送消息推送消息

PHP 实现消息推送的方法 使用 WebSocket 实现实时推送 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适合实现实时消息推送。 安装 Ratchet 库(WebSo…