Russell
Russell

Reputation: 1804

Inserting Multiple Select Value to database in Codeigniter

I'm trying to input multiple select values in Database. Here is my demo code:

https://jsfiddle.net/wuarv946/

My controller:

public function create()
{
    $data= array(
        'name' => $this->input->post('name'),
        'foods' => $this->input->post('foods')
    );
    $this->food_model->add_food($data);
}

My model:

public function add_food($data)
{
    $this->db->insert('order_items', $data);
}

It only insert the last value of select. How to fix that.

Upvotes: 1

Views: 22418

Answers (7)

Brane
Brane

Reputation: 3339

Inserting without cycle is always a great idea. The right way is to using array of associative arrays and insert them using insert_batch Active Record function.

Here is the example of that:

$data = array(
   array(
      'title' => 'Title Text' ,
      'name' => 'Name Text' ,
      'date' => 'Date'
   ),
   array(
      'title' => 'Title Text 1' ,
      'name' => 'Name Text 1' ,
      'date' => 'Date 1'
   )
);

$this->db->insert_batch('mytable', $data); 

Upvotes: 0

Ilanus
Ilanus

Reputation: 6928

Try to loop your foodlist.

My controller:

public function create()
{
    $food_list = $this->input->post('foods');
    foreach($food_list as $food) {
    $data= array(
        'name' => $this->input->post('name'),
        'foods' => $food
    );
    $this->db->insert('order_items', $data);
    }
}

Upvotes: 3

Amit Rajput
Amit Rajput

Reputation: 2059

There are two mistakes in your form html code.

1) You have not specified form post method so its taking by default "get" method and you are trying to get values using post().

2) You have set the select multiple but did not make its name as array foods[].

Do like below:

<form method="post">
<div class="col-md-6">
<input type="name" placeholder="Enter name" class="form-control">
<select name="foods[]" class="selectpicker" multiple title="Choose Foods" multiple data-max-options="2" data-live-search="true">
  <option value="1">Mustard</option>
  <option value="2">Ketchup</option>
  <option value="3">Relish</option>
</select>
</div>
<button class="btn btn-primary">Submit</button>
</form>

And change controller as below:

public function create()
{
    $foods = $this->input->post('foods');
    $name= $this->input->post('name');
    $data = array();
    foreach( $foods as $key => $value){
      $data[$key]['name']=$name;
      $data[$key]['foods']=$value;
    }

    $this->food_model->add_food($data);

Hope this will clear you and solve your issue.

Upvotes: 1

Amit Visodiya
Amit Visodiya

Reputation: 813

Try this.. Change select dropdown name with name="foods[]" .

<select name="foods[]" class="selectpicker" multiple title="Choose Foods" multiple data-max-options="2" data-live-search="true">
  <option value="1">Mustard</option>
  <option value="2">Ketchup</option>
  <option value="3">Relish</option>
</select>

Controller

public function create()
{
    $data= array(
        'name' => $this->input->post('name'),
        'foods' => implode(",",$this->input->post('foods')) // Store foods with comma separate 
    );
    $this->food_model->add_food($data);
}

Upvotes: 2

Jasbir Singh Sohanpal
Jasbir Singh Sohanpal

Reputation: 181

You need to batch insert e.g

$data = array(
   array(
      'title' => 'My title' ,
      'name' => 'My Name' ,
      'date' => 'My date'
   ),
   array(
      'title' => 'Another title' ,
      'name' => 'Another Name' ,
      'date' => 'Another date'
   )
);

$this->db->insert_batch('mytable', $data);

// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'), ('Another title', 'Another name', 'Another date')

Upvotes: 0

Abdulla Nilam
Abdulla Nilam

Reputation: 38584

Do like this

$this->db->insert_batch('order_items', $data); 

Codeigniter Inserting Data

Upvotes: 0

synan54
synan54

Reputation: 658

change this in select name="foods[]"

try controller like this

public function create()
{
    $foods = $this->input->post('foods');
    $name= $this->input->post('name');
    $data = array();
    foreach( $foods as $k => $v){
      $data[$k]['name']=$name;
      $data[$k]['foods']=$v;
    }

    $this->food_model->add_food($data);
}

Upvotes: 1

Related Questions