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

学生反馈调查循环评分问题:单选按钮无法受控

解决循环展示评分项时单选按钮选择互相干扰的问题

你遇到的核心问题是循环渲染单选按钮时,所有选项的name属性重复,浏览器会把同名的单选按钮视为同一组,导致选中一个选项后,其他问题的选中状态被覆盖,最终出现“选择带入下一个问题”的情况。

结合你提供的代码片段,我给你修改后的解决方案:

1. 修改循环中的单选按钮name属性

关键是给每个问题的单选按钮组设置唯一的name值,建议用问题表的主键(比如id)来区分,这样每个组都是独立的:

<?php 
$q2 = "SELECT * FROM question"; 
$r2 = $conn -> query($q2); 
?> 
<?php while ($row2 = $r2 -> fetch_object()): ?>
  <div class="question-container">
    <p><?php echo htmlspecialchars($row2->question_text); ?></p>
    <!-- 用问题ID拼接唯一的name属性 -->
    <label>
      <input type="radio" name="rating_<?php echo $row2->id; ?>" value="1">
      1
    </label>
    <label>
      <input type="radio" name="rating_<?php echo $row2->id; ?>" value="2">
      2
    </label>
    <label>
      <input type="radio" name="rating_<?php echo $row2->id; ?>" value="3">
      3
    </label>
    <!-- 根据你的评分项数量补充更多选项 -->
  </div>
<?php endwhile; ?>

2. 表单提交后的处理逻辑

当用户提交表单时,你需要遍历所有问题ID,获取对应问题的评分值:

// 先查询所有问题的ID,用于遍历获取评分
$question_ids = $conn->query("SELECT id FROM question");
while ($id_row = $question_ids->fetch_object()) {
    $question_id = $id_row->id;
    // 获取当前问题的评分值,用空合并运算符处理未选择的情况
    $rating = $_POST["rating_$question_id"] ?? null;
    
    // 这里可以将问题ID和评分存入反馈表
    // 示例:使用预处理语句避免SQL注入
    $stmt = $conn->prepare("INSERT INTO student_feedback (question_id, rating) VALUES (?, ?)");
    $stmt->bind_param("ii", $question_id, $rating);
    $stmt->execute();
    $stmt->close();
}

额外提示

  • 用htmlspecialchars()转义问题文本,避免XSS攻击,提升系统安全性。
  • 如果需要默认选中某个选项,可以给对应单选按钮加上checked属性,但要确保每个组只有一个选项带这个属性。

内容的提问来源于stack exchange,提问作者Jerico Borja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:08:33