当前位置:首页 > PHP

php选课实现

2026-01-29 17:30:09PHP

PHP选课系统实现要点

数据库设计

创建课程表(courses)和学生表(students)是基础。课程表应包含课程ID、名称、容量等字段,学生表包含学号、姓名等信息。需要中间表(student_courses)记录选课关系。

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

CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT,
    student_id VARCHAR(20) UNIQUE NOT NULL,
    name VARCHAR(50) NOT NULL
);

CREATE TABLE student_courses (
    student_id INT,
    course_id INT,
    PRIMARY KEY (student_id, course_id),
    FOREIGN KEY (student_id) REFERENCES students(id),
    FOREIGN KEY (course_id) REFERENCES courses(id)
);

连接数据库

使用PDO或MySQLi扩展连接MySQL数据库。PDO提供更好的安全性和兼容性。

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

try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Connection failed: " . $e->getMessage());
}

选课功能实现

检查课程容量和避免重复选课是关键逻辑。需要事务处理保证数据一致性。

php选课实现

function enrollCourse($studentId, $courseId) {
    global $pdo;

    try {
        $pdo->beginTransaction();

        // 检查是否已选
        $stmt = $pdo->prepare("SELECT COUNT(*) FROM student_courses 
                              WHERE student_id = ? AND course_id = ?");
        $stmt->execute([$studentId, $courseId]);
        if ($stmt->fetchColumn() > 0) {
            throw new Exception("已选过该课程");
        }

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

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

        if ($current >= $capacity) {
            throw new Exception("课程已满");
        }

        // 执行选课
        $stmt = $pdo->prepare("INSERT INTO student_courses (student_id, course_id) VALUES (?, ?)");
        $stmt->execute([$studentId, $courseId]);

        $pdo->commit();
        return true;
    } catch (Exception $e) {
        $pdo->rollBack();
        return $e->getMessage();
    }
}

前端界面

简单的HTML表单可以让学生选择课程。课程列表应从数据库动态获取。

<form action="enroll.php" method="post">
    <select name="course_id">
        <?php
        $stmt = $pdo->query("SELECT id, name FROM courses");
        while ($row = $stmt->fetch()) {
            echo "<option value='{$row['id']}'>{$row['name']}</option>";
        }
        ?>
    </select>
    <input type="hidden" name="student_id" value="1"> <!-- 实际应从会话获取 -->
    <button type="submit">选课</button>
</form>

安全性考虑

防止SQL注入需要使用预处理语句。XSS防护需要对输出进行转义。

php选课实现

// 使用预处理语句防止SQL注入
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);

// 输出转义防止XSS
echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');

用户认证

实现登录系统确保只有注册学生能选课。使用会话管理用户状态。

session_start();

function login($studentId, $password) {
    // 验证学生信息...
    $_SESSION['student_id'] = $studentId;
}

function isLoggedIn() {
    return isset($_SESSION['student_id']);
}

扩展功能

选课系统可添加退课功能、课程查询、冲突检测等。分页显示大量课程数据提升用户体验。

// 分页查询
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10;
$offset = ($page - 1) * $perPage;

$stmt = $pdo->prepare("SELECT * FROM courses LIMIT ? OFFSET ?");
$stmt->bindValue(1, $perPage, PDO::PARAM_INT);
$stmt->bindValue(2, $offset, PDO::PARAM_INT);
$stmt->execute();

以上实现提供了PHP选课系统的基本框架,可根据实际需求进一步扩展和完善。

标签: php
分享给朋友:

相关文章

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form action=…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php实现的分页

php实现的分页

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

php实现推送消息推送消息

php实现推送消息推送消息

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

php 实现面包屑导航

php 实现面包屑导航

实现面包屑导航的方法 面包屑导航(Breadcrumb Navigation)是一种常见的网站导航方式,用于显示用户当前页面的路径。以下是几种在 PHP 中实现面包屑导航的方法。 基于 URL 路径…

php session 实现购物车

php session 实现购物车

PHP Session 实现购物车的方法 初始化 Session 在 PHP 脚本的最开始调用 session_start() 函数,确保会话已启用。这通常在页面的顶部完成。 session_sta…