PHP随机抽取测验试题后,如何实现Q1、Q2等顺序编号显示?
解决随机抽题后按Q1、Q2顺序显示的问题
我懂你的需求啦——从15道题里随机抽10道,还要让它们按Q1、Q2、Q3这样的顺序编号展示,而不是用数据库里的原始ID。你的代码现在直接用了$id当题号,随机抽取后ID肯定是乱的,所以得自己维护一个递增的计数器来做题号。
另外还有个隐藏的坑:你现在的表单里,name="id"和name="response"都是单个字段,循环输出后只会保留最后一个题的ID和选中的答案,后端根本拿不到10道题的全部数据,这个也得一起改!
下面是修改后的完整代码,我标注了关键改动点:
<form action="includes/backend_quiz.php" method="post"> <?php // 初始化题号计数器,从1开始 $questionNumber = 1; $query = mysqli_query($conn, "SELECT * FROM quiz ORDER BY RAND() LIMIT 10") or die("Could not retrieve data: " . mysqli_error($conn)); if (mysqli_num_rows($query) > 0) { while($row = mysqli_fetch_assoc($query)) { extract($row); ?> <!-- 把单个id改成数组,确保所有抽中的题ID都能提交到后端 --> <input type="hidden" name="question_ids[]" value="<?php echo $id ?>" /> <!-- 用自定义计数器作为题号,实现Q1、Q2的顺序显示 --> <h4>Q<?php echo $questionNumber ?>.  <?php echo $quation; ?></h4><br /> <!-- 把response改成关联数组,绑定对应题的ID,后端能匹配答案和题目 --> <input type="radio" name="responses[<?php echo $id ?>]" value="a" /> <?php echo $opt1;?><br /> <input type="radio" name="responses[<?php echo $id ?>]" value="b" /> <?php echo $opt2;?><br /> <input type="radio" name="responses[<?php echo $id ?>]" value="c" /> <?php echo $opt3;?><br /> <input type="radio" name="responses[<?php echo $id ?>]" value="d" /> <?php echo $opt4;?><br /> <br /> <?php // 每循环一次,计数器自增1 $questionNumber++; } } ?> <input type="submit" name="ans" value="Finish"/> </form>
关键改动说明:
- 题号计数器:新增
$questionNumber变量,初始值为1,每循环一次就自增,这样不管数据库里的试题ID是什么,都能稳定按Q1到Q10的顺序显示题号。 - 表单字段改为数组:
- 把
name="id"改成name="question_ids[]",后端接收时会得到一个包含所有抽中试题ID的数组。 - 把
name="response"改成name="responses[<?php echo $id ?>]",每个选项的name都和对应试题的ID绑定,后端可以通过ID精准匹配用户选择的答案。
- 把
这样修改后,前端就能按Q1、Q2的顺序展示随机抽中的试题,后端也能正确接收所有题的答案啦。
内容的提问来源于stack exchange,提问作者Milind
相关产品推荐
相关产品推荐

