
本文讲解如何在 php 表单中,根据 mysql 数据库中布尔(tinyint(1) 或 boolean)字段的值,动态设置 html 单选按钮(radio)的默认选中状态,实现数据回显。
在 Web 开发中,编辑已有记录时,常需将数据库中的布尔型字段(如 is_active, is_subscribed)映射为表单中的单选按钮(Yes/No)。与复选框不同,单选按钮需确保有且仅有一个选项被选中,因此不能仅对某个 添加 checked 属性——必须根据数据库值,精准控制对应选项的状态。
✅ 正确做法:服务端动态渲染 checked
假设你已从 MySQL 查询出布尔值并存入 PHP 变量(如 $user_prefers_color = $row['prefers_color'];),该字段为 TINYINT(1) 类型(MySQL 中 BOOLEAN 实际是其别名),值为 1(true)或 0(false)。此时应在 HTML 输出阶段,用 PHP 判断并为对应 radio 添加 checked 属性:
? 关键点:两个 radio 共享 name="colors",确保互斥;value 分别设为 "1" 和 "0",与数据库类型一致;PHP 表达式直接内联在标签中,无需 JavaScript 干预——这是服务端渲染的最佳实践。
⚠️ 注意事项
- 安全前提:务必在使用 $user_prefers_color 前进行数据校验(如 isset($row['prefers_color']) && is_numeric($row['prefers_color'])),避免未定义变量警告或 XSS 风险(此处无用户输入直插,但习惯性防护很重要)。
-
空值处理:若数据库字段允许 NULL,建议先统一转换为布尔值:
$user_prefers_color = !is_null($row['prefers_color']) ? (bool)$row['prefers_color'] : false;
- 不要依赖客户端 JS 初始化:原始示例中的 check()/uncheck() 是演示用途,实际生产中应由 PHP 决定初始状态,JS 仅用于交互增强(如联动显示)。
? 总结
预设单选按钮的核心逻辑是:在 HTML 输出时,由 PHP 根据数据库值决定哪个 标签包含 checked 属性。这比用 JavaScript 在页面加载后操作 DOM 更可靠、更高效,也符合前后端职责分离原则。记住:checked 是布尔属性,只需存在即生效,无需写 checked="checked"(HTML5 中简写即可)。










