1

我是 php/codeignitor 的新手,并试图将表单复选框的更改发布到我的数据库。要修改的行由下面的 gl_id 分配。我不知道如何在模型中使用我的 update_checked 函数将 TRUE 发布到 gl_id =x 和 FALSE 的每个字段,用于不在数组中的其余字段。我可以在控制器中使用 $_POST['checked'] 创建和查看检查值数组并将其传递给模型。现在我需要使用这个数组发布到数据库,其中 gl_id = 视图中表单的值。

在视图中

    <h1>Update GL id <?php echo $gl_field['gl_id'];?></h1>
        <label>Stat</label>
            <input type="checkbox" <?php if ($gl_field['stat'] == "TRUE") {echo "checked = checked";} ?>   
            name = "checked[]" id="stat" value= "stat"  /><BR CLEAR="all">
        <label>Exclude</label>
            <input type="checkbox" <?php if ($gl_field['exclude'] == "TRUE") {echo "checked = checked";} ?>  
            name="checked[]" id="exclude" value= "exclude"><BR CLEAR="all">
        <label>Override</label>
            <input type="checkbox" <?php if ($gl_field['override'] == "TRUE") {echo "checked = checked";} ?>          
            name= "checked[]" id= "override" value = "override"/><BR CLEAR="all">

在控制器中

            public function update_table(){
               $this->load->helper('form');
               $this->page_nav_model->update_table();
               $checked_array = $_POST['checked'];
               $this->page_nav_model->update_checked($checked_array);
               $this->load->view('pages/success');
            }

在模型中

    foreach($checked_array as $true){
            echo $true;                             
        }

为了澄清当我将信息拉入上述示例中的表单时,数据库中的所有复选框都设置为“TRUE”,因此它们被选中。如果我取消选中 stat 并单击提交,我可以看到一个包含值的数组(排除、覆盖)。

我感谢任何使我朝着正确方向前进的帮助。

4

3 回答 3

0

如果未选中 HTML 中的复选框,则不会通过 $_POST 发送该值。这在 CodeIgniter 中没有考虑。这就是我处理这个问题的方式。在控制器中:

/**
 * Set post values for unchecked boxes.
 *
 * @access private
 * @return void
 */
private function _section_checkboxes()
{
    if (!$this->input->post('is_active')) {$_POST['is_active'] = 0;}
    // other checkboxes here...
}

/**
 * if form validation passes, run this to edit a section
 *
 * @access public
 * @return void
 */
public function do_edit_section()
{
    $this->_section_checkboxes();
    if ($this->section_model->edit_section($this->input->post()))
    {
        redirect('success_page');
    }
}

在模型中:

/**
 * updates a section with active record, returns success.
 * 
 * @access public
 * @param array $data
 * @return bool
 */
public function edit_section(array $data)
{
    $this->db->where('id', $data['id']);
    return $this->db->update('sections', $data);
}

在视图中,使用表单助手:

<?=form_checkbox(array('name' => 'is_active', 'id' => 'is_active_field', 'value' => '1', 'checked' => (bool)$item->is_active))?>

现在,您未选中的复选框在未选中时设置为 0,在选中时设置为 1。我希望这回答了你的问题。

于 2012-10-11T18:36:56.257 回答
0

所以我仍然需要帮助来对整个项目进行最后的润色,所以我想在这里为任何像我希望控制来自 db 的复选框和来自复选框的 db 的绿色的人发布最终结果。

控制器:

    [function from Tayler and]
    $all_checkbox_fields = array('stat','exclude','override');  
        $checked_array = $_POST['checkbox'];
        $data['checkbox'] = $this->add_values($all_checkbox_fields, $checked_array); 
        $data['gl_id'] = $this->input->post('gl_id');
        $this->page_nav_model->update_checked($data); 
        $this->load->view('pages/success');

模型:

    public function update_checked($data){
        $this->default_db->where('gl_id', $data['gl_id']); 
        $this->default_db->update('oracle_table', $data['checkbox']); 
    }

看法:

    <label>Stat</label>
        <input type="checkbox" <?php if ($gl_field['stat'] == "1") {echo "checked = checked";} ?>   
        name = "checkbox[]" id="stat" value= "stat"/><BR>
    <label>Exclude</label>
        <input type="checkbox" <?php if ($gl_field['exclude'] == "1") {echo "checked = checked";} ?>  
        name="checkbox[]" id="exclude" value= "exclude"/><BR>
    <label>Override</label>
        <input type="checkbox" <?php if ($gl_field['override'] == "1") {echo "checked = checked";} ?>          
        name= "checkbox[]" id= "override" value = "override" ><BR>
于 2012-10-12T20:05:28.420 回答
0

要一次使用 CI 更新您的表,您需要一个这样的数组:

    $data = array(
        'column_1_name' => 'value_to_insert'
        'column_2_name' => 'value_to_insert'
        'column_2_name' => 'value_to_insert'
    );

现在,你有一个像这样的数组 $checked_array = ('stat', 'exclude', 'override') - 有更多或更少的成员。

要创建可以在更新语句中使用的数组(如上面的 $data),您需要做的是创建另一个数组,其中每个列的名称和值等于 1 如果它在 $checked_array 或 0 如果它不在 $checked 数组中。

下面的函数 add_values() 可以为您做到这一点。您必须提供两个参数:

  1. $all_possibilities 是您想要更新为 1 或 0 的每个列名的数组。在这种情况下,它应该看起来像 $all_possibilities = array('stat', 'exclude', 'override');
  2. $selected:这是一个包含实际选中框名称的数组 - 它是 $all_possibilities 的子集(或者如果所有框都被选中,则它是相同的)。

此功能在您的控制器中。

    function add_values($all_possibilities, $selected) {

        $array_for_query = array();
        // this goes through each possible box that can be checked to see if that possibility was actually selected
        foreach($all_possibilities as $array_member) {
            // this checks to see if the current member of $all_possibilities is found in the $selected array
            if (in_array($array_member, $selected)) {
                    // if it is, it adds that as a member of a new query $array_for_query and gives it a value of 1 (true)
                    $array_for_query[$array_member] = 1;
                } else {
                    // if it is not, same as above, but gives it a value of 0
                    $array_for_query[$array_member] = 0;        
                }
        }

        // once all the possibilities have been checked and added to the query array, that array is returned
        return $array_for_query;
    }

现在您可以调用该函数并将两个参数传入。返回的数组分配给 $checked_and_unchecked。

    $data['checked_and_unchecked'] = add_values($possibilities, $checked_array);

确保您还从表单中获取 gl_id。您可以使用视图中的隐藏字段来执行此操作:

    <input type="hidden" name="gl_id" value="<?php echo $gl_field['gl_id'];?>" />

在控制器中,使用

    $data['gl_id'] = $this->input->post('gl_id');

然后您可以将信息传递给您的模型并更新您的表,并传入表的名称和您创建的数组。

    $this->model_name->model_method($data);

然后这将进入模型:

    $this->db->update('table_name', $checked_and_unchecked);
    $this->db->where('gl_id', $gl_id);
于 2012-10-11T22:39:26.987 回答