
在 PHP 中遍历数据库结果集渲染多组单选按钮时,需为每道题的选项设置独立的 name 值(如 q1、q2),才能确保各题互不干扰,提交后可准确获取每道题的用户选择。
在 php 中遍历数据库结果集渲染多组单选按钮时,需为每道题的选项设置独立的 `name` 值(如 `q1`、`q2`),才能确保各题互不干扰,提交后可准确获取每道题的用户选择。
要实现每组单选按钮(即每道题目)拥有独立且可区分的 name 属性,关键在于将循环索引动态拼接到 name 属性值中。PHP 支持字符串拼接,可直接在 HTML 输出中嵌入变量,例如 'q'.$index。
以下是一个优化后的完整示例:
<?php
$index = 0;
while ($row = mysqli_fetch_assoc($result)) {
$index++;
$a = htmlspecialchars($row["a"]); // 防止 XSS,推荐始终转义输出
$b = htmlspecialchars($row["b"]);
$c = htmlspecialchars($row["c"]);
$questionId = (int)$row["id"];
$questionText = htmlspecialchars($row["question"]);
echo "<br><h3>Question {$questionId}: {$questionText}</h3>";
echo "<br>A {$a} <input type='radio' name='q{$index}' value='a'><br>";
echo "B {$b} <input type='radio' name='q{$index}' value='b'><br>";
echo "C {$c} <input type='radio' name='q{$index}' value='c'><br>";
}
?>✅ 关键点说明:
- 使用 $index 从 1 开始递增,保证每组 name 唯一(如 q1, q2, q3…);
- 推荐使用 value 属性明确标识选项(如 'a', 'b', 'c'),便于后端统一处理;
- 必须对 $row 中的输出内容调用 htmlspecialchars(),防止恶意 HTML/JS 注入;
- 表单提交后,在接收页可通过 $_POST['q1']、$_POST['q2'] 等逐个读取答案,也可用循环动态访问:
for ($i = 1; $i <= $index; $i++) { $answer = $_POST["q$i"] ?? null; // 注意空值判断 // 处理第 $i 题的答案 }
⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 不要省略 value 属性——否则提交时所有选项值均为默认空字符串,无法区分选择;
- 若题目数量动态变化,建议在循环前统计总数(如 mysqli_num_rows($result))或使用数组式命名(如 name='q[1]'),但需配合更严谨的后端解析逻辑;
- name 属性中避免空格、特殊符号及中文,纯字母+数字组合(如 q1)最安全可靠。
通过这种方式,你既能保持 HTML 表单语义清晰,又能为服务端提供结构化、可预测的数据键名,是构建多题单选表单的标准实践。



















