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

php mvc 实现

PHP MVC 实现方法 MVC(Model-View-Controller)是一种设计模式,用于分离应用程序的逻辑、数据和界面。以下是实现PHP MVC框架的关键步骤。 目录结构 创建以下目录结构…

php实现推送消息推送消息

php实现推送消息推送消息

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

php数据库实现

php数据库实现

PHP 连接 MySQL 数据库 使用 mysqli 扩展连接 MySQL 数据库: <?php $servername = "localhost"; $username = "usernam…

php 链表实现

php 链表实现

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

php下载文件实现

php下载文件实现

PHP 下载文件实现方法 使用 header() 函数强制下载 设置合适的 HTTP 头信息,强制浏览器下载文件而非直接打开。 $file_path = '/path/to/file.pdf'; $…

php实现投票

php实现投票

PHP实现投票功能 数据库设计 创建数据库表存储投票数据,例如: CREATE TABLE `votes` ( `id` int(11) NOT NULL AUTO_INCREMENT,…