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

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 ?>.&nbsp <?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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:24:29