2

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

2
  • Can you explain what you really want? its very unclear, I can't seem to understand it. Commented Dec 21, 2015 at 7:18
  • @Dray I have editted my question. I hope it's clearer than before. Thank you for your respond by the way. Commented Dec 22, 2015 at 10:43

1 Answer 1

1

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

Sign up to request clarification or add additional context in comments.

2 Comments

I got your idea about inserting array of array. I tried it. It didn't generate any error but it didn't work yet though. I think I need to make a view adjustment in my code. This is very useful, thanks!
I know why it didn't work the first time. I recklessly copied your code. There is this tiny thing @Khaer Ansori. You forgot to put the keyword "array" to define the $tempArray variable. Aside of that, your code works perfectly fine! The code should be like this: $tempArray = array(.....); I have edited your answer so people can see the right answer and learn from it. Thanks again, man!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.