当前位置:首页 > PHP

php选课实现

2026-02-14 15:29:24PHP

PHP选课系统实现

实现一个PHP选课系统需要结合数据库操作、用户认证和前端交互。以下是一个基本的实现方案:

数据库设计

创建必要的数据库表结构:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(255) NOT NULL,
    role ENUM('admin', 'teacher', 'student') NOT NULL
);

CREATE TABLE courses (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    teacher_id INT,
    max_students INT,
    FOREIGN KEY (teacher_id) REFERENCES users(id)
);

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

用户认证系统

实现基本的登录功能:

session_start();

function login($username, $password) {
    $db = new PDO('mysql:host=localhost;dbname=course_system', 'username', 'password');
    $stmt = $db->prepare("SELECT * FROM users WHERE username = ?");
    $stmt->execute([$username]);
    $user = $stmt->fetch();

    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['role'] = $user['role'];
        return true;
    }
    return false;
}

选课功能实现

学生选课接口:

function enrollCourse($studentId, $courseId) {
    $db = new PDO('mysql:host=localhost;dbname=course_system', 'username', 'password');

    // 检查课程是否已满
    $stmt = $db->prepare("SELECT COUNT(*) as count FROM enrollments WHERE course_id = ?");
    $stmt->execute([$courseId]);
    $result = $stmt->fetch();

    $stmt = $db->prepare("SELECT max_students FROM courses WHERE id = ?");
    $stmt->execute([$courseId]);
    $course = $stmt->fetch();

    if ($result['count'] >= $course['max_students']) {
        return "课程已满";
    }

    // 检查是否已选
    $stmt = $db->prepare("SELECT * FROM enrollments WHERE student_id = ? AND course_id = ?");
    $stmt->execute([$studentId, $courseId]);
    if ($stmt->fetch()) {
        return "已选过该课程";
    }

    // 选课
    $stmt = $db->prepare("INSERT INTO enrollments (student_id, course_id) VALUES (?, ?)");
    if ($stmt->execute([$studentId, $courseId])) {
        return "选课成功";
    }
    return "选课失败";
}

课程列表展示

显示可选课程:

function getAvailableCourses() {
    $db = new PDO('mysql:host=localhost;dbname=course_system', 'username', 'password');
    $stmt = $db->query("
        SELECT c.id, c.name, u.username as teacher, 
               c.max_students, COUNT(e.id) as enrolled
        FROM courses c
        LEFT JOIN users u ON c.teacher_id = u.id
        LEFT JOIN enrollments e ON c.id = e.course_id
        GROUP BY c.id
    ");
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

前端交互

简单的HTML选课界面:

php选课实现

<div class="course-list">
    <?php foreach (getAvailableCourses() as $course): ?>
    <div class="course">
        <h3><?= htmlspecialchars($course['name']) ?></h3>
        <p>教师: <?= htmlspecialchars($course['teacher']) ?></p>
        <p>已选人数: <?= $course['enrolled'] ?>/<?= $course['max_students'] ?></p>
        <form method="post" action="enroll.php">
            <input type="hidden" name="course_id" value="<?= $course['id'] ?>">
            <button type="submit">选课</button>
        </form>
    </div>
    <?php endforeach; ?>
</div>

安全注意事项

  • 使用预处理语句防止SQL注入
  • 对输出内容进行HTML转义
  • 密码使用password_hash()存储
  • 实施CSRF防护
  • 限制不同角色的权限

这个基础实现可以进一步扩展,添加课程退选、课程评价、时间冲突检查等功能。根据实际需求,可能需要增加更多的表和字段。

标签: php
分享给朋友:

相关文章

php数组实现

php数组实现

PHP 数组的基本实现 PHP 数组是一种非常灵活的数据结构,可以存储多个值,并且支持多种类型的键(整数或字符串)。PHP 数组实际上是有序映射(ordered map),可以看作是列表(vector…

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,特别适合 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装与配置 下载并安装 PHP,可以从官方 PHP 网站获取最新版…

php 链表实现

php 链表实现

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

php实现多进程

php实现多进程

PHP 实现多进程的方法 PHP 本身是单线程的脚本语言,但可以通过扩展或系统调用来实现多进程操作。以下是几种常见的实现方式: 使用 pcntl 扩展 pcntl(Process Control)是…

php实现视频直播

php实现视频直播

PHP 实现视频直播的基本方法 PHP 本身并不直接处理视频流,但可以作为后端支持视频直播系统的搭建。以下是几种常见的实现方式: 使用第三方流媒体服务 利用现成的流媒体平台(如 Wowza、Red5…

php商城 设计与实现

php商城 设计与实现

PHP商城设计与实现的关键步骤 需求分析与规划 明确商城类型(B2B/B2C)、目标用户群体及核心功能模块。基础功能需包含用户注册登录、商品展示、购物车、订单管理、支付接口集成、后台管理。扩展功能可考…