我通常使用
TinytInt(1)
在 MyIASM MySQL 数据库中存储布尔值。 在我当前正在开发的网站中,我需要能够存储1, 0 or NULL
。 该字段是通过 PHP 表单中的单选按钮填充的。
当我在表单中选择“是”(值为 1)时,它会被准确存储。 然而,当我选择“否”(值为 0)时,它会存储为 NULL。
如果用户既不选择“是”也不选择“否”,我想保留 NULL。
知道为什么“否”(0)值没有按预期存储吗?
这是基本的 HTML:
Yes <input type='radio' name='video_transfer_dvd_question' value='1' />
No <input type='radio' name='video_transfer_dvd_question' value='0' />
在 PHP 中,
''
和 0
都被视为布尔上下文中的 FALSE
,因此,如果您尝试测试 '' == 0
,您会发现结果是 TRUE
。并且 empty()
仅检查参数是否为布尔值 FALSE
,因此它并不能真正区分空 $_POST
和包含碰巧计算为 $_POST
的值的 FALSE
。我的建议是更改单选按钮的值,这样它们就不会评估为布尔值 FALSE
,例如:
Yes <input type='radio' name='video_transfer_dvd_question' value='yes' />
No <input type='radio' name='video_transfer_dvd_question' value='no' />
当您测试响应并选择发送到 MySQL 的值时,这会让事情变得更加明确:
if (empty($_POST['button'])) {
$value = NULL;
} elseif ($_POST['button'] == 'no') {
$value = 0;
} elseif ($_POST['button'] == 'yes') {
$value = 1;
}
您也可以使用
!$_POST['button']
代替 empty($_POST['button'])
,但是 如果未设置 $_POST['button']
,则会生成警告,您可能不希望发生这种情况。
您还可以将最后一个
elseif
块更改为简单的 else
,如果您没有理由期望对此单选按钮的可能响应会发生变化并且不关心是否明确。
正如其他人评论的那样,你的代码 99% 存在问题......你需要的是......
if ($_POST["radiobutton"]) { $insertValue = 1; } else { $insertValue = 0; }
or
$insertValue = ($_POST["radiobutton"]) ? 1 : 0;
原因是空的单选按钮是空的 $POST var 值,它在 mysql 中被解释为 NULL。