Q: Inserting multiple images using codeigniter I am trying to upload multiple images where I do inserting data to multiple table at once. When user filling up the form, some data will be inserted into table A first and getting the inserted_id to be inserted into table B. Here is what my coding looked like.
controller
$filesCount = count($_FILES['picture']['name']);      //my input file name = 'picture'

for ($i = 0; $i < $filesCount; $i++) {

    $_FILES['userFile']['name'] = $_FILES['picture']['name'][$i];
    $_FILES['userFile']['type'] = $_FILES['picture']['type'][$i];
    $_FILES['userFile']['tmp_name'] = $_FILES['picture']['tmp_name'][$i];
    $_FILES['userFile']['error'] = $_FILES['picture']['error'][$i];
    $_FILES['userFile']['size'] = $_FILES['picture']['size'][$i];

    $config['upload_path']          = '/uploads/user/test/';
    $config['allowed_types']        = 'gif|jpg|png';
    $config['max_size']             = 0;

    $new_name = uniqueId();
    $config['file_name'] = $new_name;

    $this->load->library('upload', $config);

    if($this->upload->do_upload('userFile')){
        $fileData = $this->upload->data();
        $uploadData[$i]['file_name'] = $fileData['file_name'];
    }
}


if(!empty($uploadData)) {
    $this->Insert_model->setImage($uploadData);

    $isCreate = $this->Insert_model->createImage($uploadData);

}

Insert_model
public function createImage($data = array()){
    $this->db->trans_begin();

    $userInfo = array(
        'user_id'          => $this->getUserId(),     //UserId fetch from session
        'title'            => $this->getTitle(),
        'description'      => $this->getDescription(),
    );

    $this->db->insert('UserInfo', $userInfo);   //Data inserted to table UserInfo first

    $insert_id = $this->db->insert_id();        //And getting the inserted_id

    $data[] = array(
        'user_id'          => $this->getUserId(),
        'title_id'         => $insert_id,            //Insert Inserted id
        'image_name'       => $this->getImage(),
    );

    $this->db->insert_batch('UserImage', $data);     //Insert data to table UserImage

    if ($this->db->trans_status() === FALSE)
    {
        $this->db->trans_rollback();
    }
    else
    {
        $this->db->trans_commit();
        return ($this->db->affected_rows() != 1) ? false : true;
    }

}

Output of data that inserting into table UserImage
Array
(
    [0] => Array
        (
            [file_name] => 5943442cd1380.jpg
        )

    [1] => Array
        (
            [file_name] => 5943442cd1380.png
        )

    [2] => Array
        (
            [user_id] => 2
            [title_id] => 1
            [image_name] => Array
                (
                    [0] => Array
                        (
                            [file_name] => 5943442cd1380.jpg
                        )

                    [1] => Array
                        (
                            [file_name] => 5943442cd1380.png
                        )

                )

        )

)

With the output, data unable to be inserted into second table. 
Expected output would be
Array
(
    [0] => Array
        (
            [user_id] => 2
            [title_id] => 1
            [file_name] => 5943442cd1380.jpg
        )

    [1] => Array
        (
            [user_id] => 2
            [title_id] => 1
            [file_name] => 5943442cd1380.png
        )

)


A: You have to change this part to.
$data[] = array(
    'user_id'          => $this->getUserId(),
    'title_id'         => $insert_id,            //Insert Inserted id
    'image_name'       => $this->getImage(),
);


foreach($data as $row) { // here data is from parameter
    $data1[] = array(
      'user_id'          => $this->getUserId(),
      'title_id'         => $insert_id,            //Insert Inserted id
      'image_name'       => $row['file_name'] // this line is changed
    );
}

$this->db->insert_batch('UserImage', $data1);// variable name is changed. 

