添加新助学金时出现localhost重定向过多错误的技术求助
解决重定向次数过多的问题
看起来你碰到了典型的无限重定向循环坑,咱们一步步拆解原因和修复方案:
问题根源
你这段代码的逻辑是:当$row['count']为假时,设置错误会话并跳转到financials.php?manage=add&lang=...。但浏览器提示重定向过多,说明每次跳转到目标页面时,这段判断逻辑又被触发了——也就是说$row['count']始终是假值,导致代码反复执行重定向,形成死循环。
具体排查和修复步骤
先确认
$row['count']的有效性
首先得搞清楚这个变量有没有拿到正确的值:- 检查你的数据库查询语句,是不是用了
SELECT COUNT(*) AS count FROM ...这类写法?如果查询结果的别名不是count,那$row['count']就会是null或者不存在,导致!$row['count']永远为真。 - 可以在判断前加一行调试代码:
var_dump($row['count']); die();,看看实际输出的是什么,确认是否符合预期。
- 检查你的数据库查询语句,是不是用了
检查重定向目标页面的执行流程
你跳转到的financials.php?manage=add页面,是不是又执行了这段相同的判断代码?- 如果这段代码是放在
manage=add的分支逻辑里,那每次跳转进来都会触发判断,进而再次重定向,无限循环。这种情况下,你需要调整逻辑:只有在特定场景(比如提交表单时)才执行这个判断,而不是每次加载add页面都跑一遍。
- 如果这段代码是放在
优化错误处理逻辑,避免循环
可以给重定向加个一次性错误标识,防止重复触发:if (!$row['count']) { $_SESSION['error'] = language("financials-card-no-articles-error", $_SESSION['lang']); // 添加参数标记已触发过错误 header('Location: financials.php?manage=add&lang='.$selectedLang.'&error_shown=1'); die(); }然后在
financials.php的manage=add分支里,先判断这个参数是否存在,再显示错误并清除会话:if (isset($_GET['error_shown']) && isset($_SESSION['error'])) { echo '<div class="error-message">'.$_SESSION['error'].'</div>'; unset($_SESSION['error']); // 清除错误会话,避免刷新页面重复显示 }这样就不会反复触发重定向了。
确认会话是否正常开启
别忘了在所有使用$_SESSION的页面顶部加上session_start();,如果会话没开启,$_SESSION['error']无法正确存储,也可能间接导致逻辑异常。
内容的提问来源于stack exchange,提问作者IceBear
相关产品推荐
相关产品推荐

