You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在评估表单中仅展示学生所选课程的教师姓名与科目

解决方案:仅展示当前登录学生所选课程的教师及科目

问题分析

现有代码存在两个核心问题导致无法实现需求:

  1. 登录验证后的学生信息查询逻辑被错误放置在exit()之后,永远无法执行,导致无法获取当前学生的class_id用于过滤课程。
  2. 原SQL查询未关联学生所属班级,会返回所有未完成评估的教师-课程记录,而非当前学生的对应课程。

修正步骤

1. 修复学生信息获取逻辑

将获取当前学生信息的代码移到exit()语句之前,确保能正确拿到学生的class_id:

<?php
session_start();
require './config.php';//database connection

//prevent access without log in
if (!isset($_SESSION['id']) || (trim ($_SESSION['id']) == '')) {
  header('location: student.php');
  exit();
}
// 修正:将学生信息查询移到exit()之前,确保能执行
$query = mysqli_query($db, "SELECT * FROM `student_list` WHERE school_id='".$_SESSION['id']."'");
$student_row = mysqli_fetch_assoc($query);

2. 修改SQL查询,过滤当前学生的课程

更新查询语句,通过student_list.class_id关联restriction_list.class_id,只返回当前学生所属班级对应的教师和课程,同时保留“未完成评估”的过滤条件:

// 获取当前学生的班级ID
$student_class_id = $student_row['class_id'];

// 修正后的查询语句
$restriction = $db->query("
  SELECT 
    r.id,
    s.id as sid,
    f.id as fid,
    concat(f.Lname,' ',f.Fname,' ',f.Mname) as faculty,
    s.subject_code as subject,
    s.subject_description as description 
  FROM restriction_list r 
  INNER JOIN faculty_list f ON f.id = r.faculty_id 
  INNER JOIN class_list s ON s.id = r.subject_id 
  -- 新增:过滤当前学生所属班级的课程
  WHERE r.class_id = '".$student_class_id."'
  -- 保留原有的未评估过滤条件
  AND r.id NOT IN (SELECT restriction_id from evaluation_list)
");

3. 完整修正后的PHP代码

<?php
session_start();
require './config.php';//database connection

//prevent access without log in
if (!isset($_SESSION['id']) || (trim ($_SESSION['id']) == '')) {
  header('location: student.php');
  exit();
}

// 获取当前登录学生的信息
$query = mysqli_query($db, "SELECT * FROM `student_list` WHERE school_id='".$_SESSION['id']."'");
$student_row = mysqli_fetch_assoc($query);

$rid='';
$faculty_id='';
$subject_id='';
if(isset($_GET['rid']))
$rid = $_GET['rid'];
if(isset($_GET['fid']))
$faculty_id = $_GET['fid'];
if(isset($_GET['sid']))
$subject_id = $_GET['sid'];

// 修正后的查询:仅返回当前学生班级对应的未评估课程
$student_class_id = $student_row['class_id'];
$restriction = $db->query("
  SELECT 
    r.id,
    s.id as sid,
    f.id as fid,
    concat(f.Lname,' ',f.Fname,' ',f.Mname) as faculty,
    s.subject_code as subject,
    s.subject_description as description 
  FROM restriction_list r 
  INNER JOIN faculty_list f ON f.id = r.faculty_id 
  INNER JOIN class_list s ON s.id = r.subject_id 
  WHERE r.class_id = '".$student_class_id."'
  AND r.id NOT IN (SELECT restriction_id from evaluation_list)
");
?>

4. HTML部分无需修改

原有的HTML列表渲染代码可以直接使用,因为它会基于修正后的查询结果展示内容。

关键说明

  • 通过student_list.class_id与restriction_list.class_id关联,确保只加载当前学生班级的课程。
  • 保留了原有的r.id NOT IN (SELECT restriction_id from evaluation_list)条件,避免学生重复评估同一课程。
  • 修正了学生信息查询的位置错误,确保能正确获取当前学生的班级ID。

内容的提问来源于stack exchange,提问作者Ron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 21:17:34