douzhulan1815 2015-12-21 02:50
浏览 47
已采纳

插入具有相同文本字段值的多个复选框值(codeigniter)

I'm trying to put values into a MySQL table like this one:

|---sbjct_name---|---level---|

|---------- Physics ----------|----Level 1-----|

|---------- Physics ----------|----Level 2-----|

|---------- Physics ----------|----Level 3-----|

|---------- Calculus ---------|----Level 1-----|

|---------- Calculus ---------|----Level 2-----|

(I don't know how to make table but I guess u get the idea)

Let say I'm going to put "Math" into sbjct_name column alongside with "Level 1", "Level 2", "Level 3" values into the level column.

The basic idea is from this pict (selecting value for a same input text value).

Instead of inserting "Math" multiple times for each level, I'm trying to make it one time submit with checkbox tag. It will be something like this pict (with checkbox).

I don't have any idea how to make this happen (or if it possible in CI).

This is some code from my Controller,

public function add_subject()
{
    $data = array();

    if ($this->input->post('savebttn'))
    {
        $this->form_validation->set_rules('sbjct_name', 'Subject Name', 'trim|required|xss_clean');
        $this->form_validation->set_rules('level', 'Level', '|required|is_natural');
        $this->form_validation->set_error_delimiters('<span class="fielderror">','</span>');

        if ($this->form_validation->run() == FALSE)
        {
            $data['reset'] = FALSE;
        }
        else
        {
           //I don't know what to do here
           //I don't know what to do here
           //I don't know what to do here
           //I don't know what to do here
        }
    }
    $data['level'] = $this->admin_model->get_checkbox_option('level', 'lvl_id', 'lvl_name');
    $data['page'] = 'createsubject';
    $this->load->view('admin/main', $data);
}

This is a checkbox view function in the Model,

public function get_checkbox_option($table, $id, $name, $selected=0)
{
    $query = $this->db->get($table);
    $select= '';
    if ($query->num_rows() > 0)
    {
        foreach ($query->result_array() as $row)
        {
            $selected_option = ($selected == $row[$id]) ? 'selected = "selected" ':' ';
            $select .='<input type="checkbox" name="level" value="'.$row[$id].'" '.$selected_option.'>'.$row[$name].'<br>';
        }
    }
    return $select;
}

This is the form on the View,

    <form action="" method="post" id="createcategoryform">
        <table>
            <tbody>
                <tr>
                    <td><div class="label">Subject Name</div></td>
                    <td><div class="input">
                        <input type="text" name="sbjct_name" size="39" class="ui-corner-all input-text validate[required]">
                        <?=form_error('sbjct_name');?>
                    </div></td>
                </tr>
                <tr>
                    <td><div class="label">Level</div></td>
                    <td><div class="input-text ui-corner-all validate[required]">
                        <?=(isset($level)) ? $level: '';?>
                    </div><?=form_error('level');?></td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td><input type="submit" value="Save" name="savebttn" class="input-button ui-corner-all ui-state-default"></td>
                </tr>
            </tbody>
        </table>
    </form>

I will be grateful if you can give any clue. :D

  • 写回答

1条回答 默认 最新

  • dongtu1357 2015-12-23 07:07
    关注

    first

    make your checkbox as an array so it look like this

    $select .='<input type="checkbox" name="level[]" value="'.$row[$id].'" '.$selected_option.'>'.$row[$name].'<br>';
    

    give attention to the name. yours name="level" and mine name="level[]" , then you can grab all level as one variable

    second

    make your controller like this

    if ($this->form_validation->run() == FALSE)
            {
                $data['reset'] = FALSE;
            }
            else
            {
              // make array container for input batch
              $insertData = array();
              if(!empty($this->input->post('level'))) {
                  foreach($this->input->post('level') as $level) {
                        $tempArray = array(
                          'sbjct_name' => $this->input->post('sbjct_name'),
                          'level' => $level
                        );
    
                        array_push($insertData, $tempArray);
                  }
    
                  // it's better to put this in model
                  // but for example purpose I put it there
                  $this->db->insert_batch('table', $insertData);
    
                  //do what you want to do here
              }
            }
    

    hope you get the point @nasamikhail

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学中在线排序的时间在线排序的在线LPT算法
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧