我目前用这样的输入更新我的数据库记录
$this->my_model->update($id, $this->input->post()));
(这是在我对所有输入进行验证之后。“模型”还有一个期望的white_list数据。)
问题:如果我要更新复选框,并且它是“未标记”(即“false”) - 则该字段不会被浏览器“发布”。
例如 - 如果我勾选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
问题:除了必须经常专门检查每个复选框外,是否有人有一个优雅的解决方案来解决这个问题?
答案 0 :(得分: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'
。
name=""
的最新给定值会覆盖之前,因此givin prio checkbox
&gt; hidden
。
编辑:此解决方案等于Rick Calder评论中给出的最多评分答案。不过,我自己也得出了这个结论。