PHP For循环异常求助:循环仅在数组前两个元素间重复
解决PHP循环问答中反复跳回初始问题的bug
Hey,从你描述的现象来看,这个问题大概率是没正确追踪当前的问题进度,或者表单提交的参数没传递对当前问题的索引。你给的代码片段里第一个表单用了name="q0",如果后续表单没对应调整,或者处理提交逻辑时没根据提交的参数推进到下一个问题,就会出现卡在0和1之间循环的情况。
我给你几个具体的排查和修复步骤:
给每个表单加个"身份标识"
每个问题的表单里要带上当前的问题序号,比如加个隐藏域,同时把单选框的name统一(别每个问题用不同的q0、q1,容易混乱):<?php $question = array( 0 => "<form action=\"\" method=\"get\"> Q1<br> <input type=\"hidden\" name=\"current_q\" value=\"0\"> <input type=\"radio\" name=\"answer\" value=\"tr\"> A <br> <input type=\"radio\" name=\"answer\" value=\"fl\"> B <br> <input type=\"submit\" value=\"提交\"> </form>", 1 => "<form action=\"\" method=\"get\"> Q2<br> <input type=\"hidden\" name=\"current_q\" value=\"1\"> <input type=\"radio\" name=\"answer\" value=\"tr\"> C <br> <input type=\"radio\" name=\"answer\" value=\"fl\"> D <br> <input type=\"submit\" value=\"提交\"> </form>", 2 => "<form action=\"\" method=\"get\"> Q3<br> <input type=\"hidden\" name=\"current_q\" value=\"2\"> <input type=\"radio\" name=\"answer\" value=\"tr\"> E <br> <input type=\"radio\" name=\"answer\" value=\"fl\"> F <br> <input type=\"submit\" value=\"提交\"> </form>" ); ?>处理提交后的进度推进逻辑
在页面最顶部加一段逻辑,用来获取当前提交的问题序号,然后计算下一个要显示的问题:<?php // 初始化当前问题索引,默认从第一个开始 $current_q = 0; // 如果有提交的参数,就更新当前索引并推进到下一个问题 if(isset($_GET['current_q'])){ $current_q = intval($_GET['current_q']); // 注意不要超出问题数组的长度,避免报错 if($current_q < count($question)-1){ $current_q++; } else { // 所有问题都答完了,这里可以加个结束提示 echo "所有问题已回答完毕!"; exit; } } // 显示当前要回答的问题 echo $question[$current_q]; ?>检查原代码的表单命名问题
你原代码里第一个单选框用了name="q0",如果第二个问题的单选框还是用q0,PHP获取参数时根本分不清是哪个问题的回答,自然没法正确推进进度。统一用answer作为单选框的name,配合current_q隐藏域来追踪进度,就能解决这个混乱的问题。
这样修改后,每次提交当前问题的回答,页面都会根据current_q的值正确推进到下一个问题,不会再跳回初始问题了。要是还有问题,你可以检查下count($question)是不是正确,或者有没有其他代码不小心重置了$current_q的值。
内容的提问来源于stack exchange,提问作者Lee
相关产品推荐
相关产品推荐

