0

我目前使用这样的输入更新我的数据库记录

$this->my_model->update($id, $this->input->post()));

(这是在我对所有输入执行验证之后。“模型”还有一个期望的数据白名单。)

问题:如果我正在更新一个复选框,并且它是“未选中”(即“假”) - 那么该字段不会被浏览器“发布”。

例如 - 如果我勾选 checkbox_two - 但未勾选 checkbox_one,$_POST 显示:

[field_one] = "some value"
[field_two] = "some value"
[checkbox_two] = 1

因此,我的模型不会更新该字段 - 因为它不是帖子的一部分。

反过来也不会发生同样的情况——因为“勾选”复选框被发布为“1”——因此被正确更新。

[field_one] = "some value"
[field_two] = "some value"
[checkbox_one] = 1
[checkbox_two] = 1

问题:除了必须始终专门检查每个复选框之外,有没有人有一个优雅的解决方案来处理这个问题?

4

1 回答 1

3
<input type="hidden" name="example" value="FALSE" />
<input type="checkbox" name="example" value="TRUE" />

这种做法既简单又合乎逻辑。如果复选框被选中,$this->input->post('example') == 'TRUE'否则,$this->input->post('example') == 'FALSE'

a 的最新给定值name=""覆盖了先前的值,因此 givin prio checkbox> hidden

编辑:此解决方案等于 Rick Calder 评论中给出的最受好评的答案。不过,我自己也得出了这个结论。

于 2012-11-20T11:28:21.927 回答