当前位置:首页 > PHP

php选课实现

2026-02-28 14:45:31PHP

PHP 选课系统实现

数据库设计

创建数据库表存储学生、课程和选课记录。学生表(students)包含学号、姓名等字段;课程表(courses)包含课程ID、名称、容量等;选课表(enrollments)关联学生和课程。

CREATE TABLE students (
    student_id INT PRIMARY KEY,
    name VARCHAR(100)
);

CREATE TABLE courses (
    course_id INT PRIMARY KEY,
    name VARCHAR(100),
    capacity INT
);

CREATE TABLE enrollments (
    enrollment_id INT PRIMARY KEY AUTO_INCREMENT,
    student_id INT,
    course_id INT,
    FOREIGN KEY (student_id) REFERENCES students(student_id),
    FOREIGN KEY (course_id) REFERENCES courses(course_id)
);

连接数据库

使用PDO连接MySQL数据库,确保在PHP中配置正确的数据库凭据。

$dsn = 'mysql:host=localhost;dbname=course_selection';
$username = 'username';
$password = 'password';

try {
    $pdo = new PDO($dsn, $username, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

选课功能实现

处理学生选课请求,检查课程容量是否已满,避免重复选课。

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

    // 检查课程容量
    $stmt = $pdo->prepare("SELECT COUNT(*) FROM enrollments WHERE course_id = ?");
    $stmt->execute([$courseId]);
    $enrolledCount = $stmt->fetchColumn();

    $stmt = $pdo->prepare("SELECT capacity FROM courses WHERE course_id = ?");
    $stmt->execute([$courseId]);
    $capacity = $stmt->fetchColumn();

    if ($enrolledCount >= $capacity) {
        echo "课程已满";
    } else {
        // 检查是否已选
        $stmt = $pdo->prepare("SELECT * FROM enrollments WHERE student_id = ? AND course_id = ?");
        $stmt->execute([$studentId, $courseId]);
        if ($stmt->fetch()) {
            echo "已选该课程";
        } else {
            // 插入选课记录
            $stmt = $pdo->prepare("INSERT INTO enrollments (student_id, course_id) VALUES (?, ?)");
            $stmt->execute([$studentId, $courseId]);
            echo "选课成功";
        }
    }
}

显示可选课程

从数据库查询并显示所有可选课程,包括当前选课人数和剩余容量。

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

while ($row = $stmt->fetch()) {
    echo "课程: {$row['name']}, 容量: {$row['capacity']}, 已选: {$row['enrolled']}";
}

安全性考虑

使用预处理语句防止SQL注入,对用户输入进行验证和过滤。

$studentId = filter_input(INPUT_POST, 'student_id', FILTER_VALIDATE_INT);
$courseId = filter_input(INPUT_POST, 'course_id', FILTER_VALIDATE_INT);

if (!$studentId || !$courseId) {
    die("无效输入");
}

用户界面

创建简单的HTML表单供学生选择课程,显示选课结果和错误信息。

php选课实现

<form method="post">
    <input type="hidden" name="student_id" value="123">
    <select name="course_id">
        <?php foreach ($courses as $course): ?>
            <option value="<?= $course['course_id'] ?>"><?= $course['name'] ?></option>
        <?php endforeach; ?>
    </select>
    <button type="submit" name="enroll">选课</button>
</form>

标签: php
分享给朋友:

相关文章

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php实现聊天

php实现聊天

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

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php 实现评论

php 实现评论

实现 PHP 评论功能 数据库设计 创建数据库表存储评论数据,通常包含以下字段: id:评论唯一标识 user_id:用户ID content:评论内容 created_at:评论时间 parent…

php 链表实现

php 链表实现

在 PHP 中实现链表可以通过类来模拟链表节点(Node)和链表(LinkedList)结构。以下是链表的完整实现示例,包含基础操作如插入、删除、遍历等。 链表节点类(Node) 链表的基本单元是节…

php实现apk下载

php实现apk下载

实现APK下载的PHP代码 创建一个简单的PHP脚本来处理APK文件的下载请求,确保文件传输正确且安全。 <?php $file = 'path/to/your/app.apk'; if (f…