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

PHP MySQLi家长登录无法显示对应学生考勤数据的问题求助

问题分析与解决方案

核心问题在于你查询学生信息的SQL语句没有限定当前登录的家长,导致返回所有学生与家长的关联记录,而fetch_assoc()只会取出第一条结果,所以新家长登录后依然显示第一个注册家长对应的学生信息。

修正步骤

1. 修正学生姓名查询代码

原SQL缺少当前家长的过滤条件,需要加入WHERE parent.id = ?来绑定登录家长的ID,同时用预处理语句避免SQL注入风险:

// for student name display
$qu = "SELECT student.* FROM student INNER JOIN parent ON student.idno = parent.sidno WHERE parent.id = ?";
$stmt = $conn->prepare($qu);
$stmt->bind_param("i", $_SESSION['id']); // 假设parent.id为整数类型
$stmt->execute();
$r1 = $stmt->get_result();
$rws1 = $r1->fetch_assoc();

if ($rws1) {
    $full1 = $rws1['sfname'] . " " . $rws1['slname'];
    echo "Student Name: " . $full1;
} else {
    echo "未找到关联学生信息";
}

2. 修正考勤查询代码

同样需要限定当前家长,先获取对应学生的idno,再基于该ID查询考勤数据:

// view by date (parent can select the date to view student attendance in a table)
if(isset($_POST['viewAttbydate'])){
    // 获取当前家长关联的学生ID
    $que = "SELECT student.idno FROM student INNER JOIN parent ON student.idno = parent.sidno WHERE parent.id = ?";
    $stmt = $conn->prepare($que);
    $stmt->bind_param("i", $_SESSION['id']);
    $stmt->execute();
    $r0 = $stmt->get_result();
    $rws0 = $r0->fetch_assoc();
    
    if ($rws0) {
        $admidno = $rws0['idno'];
        // 示例:查询该学生指定日期的考勤(假设考勤表为attendance,关联student.idno)
        $attQuery = "SELECT * FROM attendance WHERE student_idno = ? AND attendance_date = ?";
        $attStmt = $conn->prepare($attQuery);
        $attStmt->bind_param("is", $admidno, $_POST['att_date']); // 假设日期为字符串类型
        $attStmt->execute();
        $attResult = $attStmt->get_result();
        // 后续处理考勤数据的逻辑...
    } else {
        echo "未找到关联学生信息";
    }
}

额外注意事项

  • 确认家长登录后$_SESSION['id']正确存储了parent表的主键pid
  • 若一个家长可能关联多个学生,需用while循环遍历查询结果,而非仅取第一条
  • 始终坚持使用预处理语句,杜绝SQL注入风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:25:58