当前位置:首页 > 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中配置正确的数据库凭据。

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 "选课成功";
        }
    }
}

显示可选课程

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

php选课实现

$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表单供学生选择课程,显示选课结果和错误信息。

<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中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…

php 实现跳转

php 实现跳转

PHP 实现页面跳转的方法 在PHP中,实现页面跳转可以通过多种方式完成,以下是几种常用的方法: 使用header函数 header函数是PHP中最常用的跳转方法,通过发送HTTP头部信息实现跳转…

php实现推送消息推送消息

php实现推送消息推送消息

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

php登陆功能实现

php登陆功能实现

实现PHP登录功能 数据库准备 创建一个用户表存储登录信息,基本字段包括用户名、密码(需加密)等: CREATE TABLE users ( id INT AUTO_INCREMENT P…