【问题标题】:Updating Checked Checkboxes using CodeIgniter + MySQL使用 CodeIgniter + MySQL 更新选中的复选框
【发布时间】:2011-02-13 04:19:37
【问题描述】:

我有大约 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. 我丢失了复选框被选中时的所有元数据。

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

谢谢, 蒂姆

【问题讨论】:

    标签: php mysql forms codeigniter checkbox


    【解决方案1】:

    首先,您有两个数据库查询,然后是视图中的一个嵌套循环。最好有一个带有连接语句的查询——比如 JOIN ON projects_processes.process_id = projects_processes_reg.process_id WHERE process_enabled=1 AND project_id=$project_id。

    其次,表单元素的名称只是 progresscheck[] - 您可能应该使用 process_id 显式命名数组编号,以便您可以交叉引用回数据库。

    然后,在发布表单时仅更新已更改的复选框:
    - 重新运行用于生成复选框的新的单个查询
    - 遍历结果,检查 $_POST 数组(或 CI 的 set_value() 函数)是否有更改的值 - 当您发现更改的值时运行更新语句。

    祝你好运!

    ~S

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-26
      • 2020-07-21
      相关资源
      最近更新 更多