
在 PHP 循环中动态生成单选按钮时,需为每组选项设置独立的 name 值,以确保各题互不干扰;可通过字符串拼接将递增变量嵌入 name 属性,如 name='q1'、name='q2',提交后用 $_POST['q1'] 等获取对应答案。
在 php 循环中动态生成单选按钮时,需为每组选项设置独立的 `name` 值,以确保各题互不干扰;可通过字符串拼接将递增变量嵌入 `name` 属性,如 `name='q1'`、`name='q2'`,提交后用 `$_post['q1']` 等获取对应答案。
在构建多题单选表单(如在线测验)时,一个常见误区是所有单选按钮共用相同的 name(例如 name='q'),这会导致用户只能在整个表单中选择唯一一个选项——因为浏览器将所有同名 radio 视为同一组。正确做法是:每道题的 A/B/C 选项共享一个唯一 name,且该 name 随题目序号变化。
实现方式很简单:在循环外初始化计数器,在每次迭代中递增,并通过字符串拼接注入 HTML 的 name 属性:
<?php $name = 0;
while ($row = mysqli_fetch_assoc($result)) {
$name++;
$a = htmlspecialchars($row["a"]);
$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{$name}" value="a"><br>";
echo "B {$b} <input type="radio" name="q{$name}" value="b"><br>";
echo "C {$c} <input type="radio" name="q{$name}" value="c"><br>";
}
?>
✅ 关键要点:
- 使用 q{$name}(或 q{$questionId})作为动态 name,确保每题独立;
- 为 添加 value 属性(如 'a'/'b'/'c'),否则提交时无法区分用户选择;
- 务必对 $row 中的输出内容使用 htmlspecialchars() 进行 XSS 防护;
- 若数据库 id 字段连续可靠,也可直接用 $row["id"] 替代 $name,语义更清晰(如 name='q{$row["id"]}');
表单提交后,在处理页可通过循环获取答案:
for ($i = 1; $i <p>⚠️ 注意:避免 name='q'.$name 写成 name="q'.$name.'"(引号错乱导致语法错误),推荐使用双引号+花括号插值("q{$name}")或更安全的 sprintf('q%d', $name)。</p>










