我有大约8个从我的数据库动态生成的复选框。
这是我控制器中的代码
//Start Get Processes Query
$this->db->select('*');
$this->db->from('projects_processes');
$this->db->where('process_enabled', '1');
$data['getprocesses'] = $this->db->get();
//End Get Processes Query
//Start Get Checked Processes Query
$this->db->select('*');
$this->db->from('projects_processes_reg');
$this->db->where('project_id', $project_id);
$data['getchecked'] = $this->db->get();
//End Get Processes Query
这是我视图中的代码。
<?php if($getprocesses->result_array()) { ?>
<?php foreach($getprocesses->result_array() as $getprocessrow): ?>
<tr>
<td><input <?php if($getchecked->result_array()) { foreach($getchecked->result_array() as $getcheckedrow): if($getprocessrow['process_id'] == $getcheckedrow['process_id']) { echo 'checked'; } endforeach; }?> type="checkbox" name="progresscheck[]" value="<?php echo $getprocessrow['process_id']; ?>"><?php echo $getprocessrow['process_name']; ?><br>
</td>
</tr>
<?php endforeach; ?>
这会在表单中生成复选框,并检查数据库指定的相应复选框。
问题在于更新它们。
到目前为止,我一直在做的只是删除项目的所有复选框条目,然后将所有值重新插入数据库。这很糟糕,因为1.这是缓慢而可怕的。 2.当检查复选框时,我丢失了所有元数据。
所以我想我的问题是,如何仅更新已更改的复选框?
谢谢, 添
答案 0 :(得分:1)
首先,您有两个数据库查询,然后是视图中的嵌套循环。使用连接语句进行一个查询会好得多 - 例如JOIN ON projects_processes.process_id = projects_processes_reg.process_id WHERE process_enabled = 1 AND project_id = $ project_id。
其次,表单元素的名称只是progresscheck [] - 您应该使用process_id明确地命名数组编号,以便可以交叉引用回DB。
然后,仅更新已更改的复选框,表格张贴时:
- 重新运行用于生成复选框的新单个查询
- 遍历结果,检查$ _POST数组(或CI的set_value()函数)是否有更改的值
- 找到更改的值时运行更新语句。
382 4