使用CodeIgniter + MySQL更新选中的复选框

时间:2010-04-28 04:05:40

标签: php mysql forms codeigniter checkbox

我有大约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.当检查复选框时,我丢失了所有元数据。

所以我想我的问题是,如何仅更新已更改的复选框?

谢谢, 添

1 个答案:

答案 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