24

我注意到 PHP 似乎只返回选中复选框的值。我想查看复选框列表,而不仅仅是选中复选框的值。有没有办法检测未选中框的变量?

我问是因为我希望能够更新设置。例如,我有几个选项已经被选中,但如果用户决定取消选中某个选项,我需要知道未选中的值,以便我可以更新要禁用的选项。

4

5 回答 5

63

我自己也遇到了这个问题。我通过添加一个hidden具有相同名称的重复字段来解决它。当浏览器发送此信息时,第二个字段会覆盖第一个字段(因此请确保该hidden字段先出现)。

<input type="hidden" name="foo" value="">
<input type="checkbox" name="foo" value="bar">

如果checkbox未选中,您将获得:

$_REQUEST[ 'foo' ] == ""

如果checkbox选中,您会得到:

$_REQUEST[ 'foo' ] == "bar"
于 2009-12-22T03:48:47.547 回答
2

这不是纯粹在 PHP 中可以完成的事情。

浏览器仅在选中复选框时发送有关复选框的信息,如果您还想发送有关未选中复选框的信息,则必须在表单中添加隐藏字段并使用 javascript 来管理它们。

于 2009-12-22T03:40:44.227 回答
1

我自己偶然发现了这个问题,我通过将数据库中的所有值更新为未选中然后仅重新检查 POST 数据中的值对其进行排序,这对我来说很好,但可能不是每个人都喜欢喝茶。

于 2010-06-25T10:46:00.657 回答
0

纯 PHP 实现似乎不可能,但您可以尝试使用 jQuery/AJAX。

于 2009-12-22T03:40:38.297 回答
0

假设您有 3 个要检查的复选框,update_settings 是您的函数的名称,它将复选框名称作为第一个参数,将 bool 值作为第二个参数(激活或不激活)。

采取以下代码段:

$checkboxes = array("checkbox1", "checkbox2", "checkbox3");
foreach($checkboxes as $checkbox){
    $checked = isset($_POST[$checkbox]);
    update_settings($checkbox, $checked);
}

尽管Peter Kovacs解决方案它会起作用,但我认为它不实用,因为您已经可以使用 isset 检查您的变量。

于 2009-12-22T04:06:52.037 回答