2

所以我通常使用TinytInt(1). 在我目前正在开发的网站中,我需要能够存储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' />
4

2 回答 2

0

在 PHP 中,''0都被认为FALSE是布尔上下文,所以如果你尝试测试'' == 0你会发现结果是TRUE. 并且empty()只检查参数是否为 booleanFALSE,因此它并不能真正区分空值$_POST和 a $_POST,其中包含的值恰好评估为FALSE。我的建议是更改单选按钮的值,以便它们永远不会评估为 boolean 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块更改为 simple 。else

于 2013-08-30T21:40:43.737 回答
0

正如其他人所评论的那样,您的代码有 99% 的问题......你需要的是......

if ($_POST["radiobutton"]) { $insertValue = 1; } else { $insertValue = 0; }

or

$insertValue = ($_POST["radiobutton"]) ? 1 : 0;

原因是一个空的单选按钮是一个空的 $POST var 值,它在 mysql 中被解释为 NULL。

于 2013-08-30T20:03:49.260 回答