当前位置:首页 > PHP

php选课实现

2026-02-14 15:29:24PHP

PHP选课系统实现

实现一个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;
}

选课功能实现

学生选课接口:

php选课实现

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选课界面:

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

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php 实现登录

php 实现登录

PHP 登录功能实现 使用 PHP 实现登录功能通常需要结合数据库验证和会话管理。以下是一个基本的登录实现流程: 数据库准备 创建用户表存储用户名和密码(建议使用哈希加密): CREATE T…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…