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

PHP开发LMS系统时foreach循环内$_SESSION值被覆盖传值错误问题

问题根因

你的$_SESSION赋值逻辑写在PHP循环里,PHP作为服务端语言会先执行完页面所有PHP代码,才会把生成的HTML页面返回给用户浏览器,所以循环跑完后$_SESSION['className']一定会被最后一次循环的班级名覆盖,和你点击哪个卡片完全无关。


解决方案1:GET参数传递(快速实现)

直接把点击对应的班级标识通过URL参数传递给跳转页:

  1. 修改卡片的跳转逻辑,把班级名编码后加入URL参数,同时删除循环内冗余的SESSION赋值代码:
foreach($datas as $data){ ?>
   <div style="background-color: #3B4FDF; border-radius: 3%; width: 30%; height: 220px; margin-right: 5%; cursor: pointer;" onclick="location.href='classAdmin_list.php?class_name=<?= urlencode($data['class_name']) ?>'">
     <p style="font-size: 1.5vw; color: white; position: relative; left: 7%; top: 0%;"> <?= $data['class_name'] ?> </p>
     <p style="font-size: 1vw; color: white; position: relative; left: 75%; top:  -25%;"> <?= $data['class_code'] ?> </p>
     <p style="font-size: 1vw; color: white; position: relative; left: 7%; top: 17%;"> <?= $data['school'] ?> </p>
     <img src="foto/balll.png" alt="ball" style="opacity: 0.5; width: 22%; height: 100px; position: relative; left: 75%; top: -30%;">
  </div>
<?php } ?>
  1. 修改跳转页classAdmin_list.php的班级名取值逻辑,加htmlspecialchars防止XSS攻击:
<p>
      Class <span><?= htmlspecialchars($_GET['class_name']) ?></span>
</p>

解决方案2:传班级ID(更安全规范)

如果班级名存在特殊字符、或者担心用户随意修改URL参数伪造班级名,更推荐传递班级唯一ID:

  • 跳转链接改为classAdmin_list.php?class_id=<?= $data['class_id'] ?>
  • 跳转页接收到class_id后,到数据库查询对应的班级名称再输出,既安全又能避免参数乱码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:15:04