0

I have trouble, how to save array value in database, Each time I enter data only the last data stored in the database. here is my code :

Controller :

function tambah_rm($id)
{
    $this->load->helper('form');
    $this->load->library('form_validation');

    $data['title'] = 'Tambah Detail Rekam Medis';

    $this->form_validation->set_rules('tgl_berobat', 'tgl_berobat', 'required');
    $this->form_validation->set_rules('anamnesa', 'anamnesa', 'required');
    $this->form_validation->set_rules('diagnosa', 'diagnosa', 'required');
    $this->form_validation->set_rules('therapi', 'therapi', 'required');
    $this->form_validation->set_rules('keterangan', 'keterangan', 'required');

    if ($this->form_validation->run() === FALSE)
    {
        $data['obat']=$this->m_pasien->get_obat();
        $data['header']=$this->m_pasien->header_pasien($id)->row_array();
        $this->template->load('template','v_tambahRM',$data);

    }
    else
    {
        $this->m_pasien->tambahrm($data);
        redirect('pasien');
    }
}

My Model :

function tambahrm() 
{
    $this->load->helper('url');
    $username = trim($this->session->userdata('id_user'));
    $data = array(
        'tgl_berobat' => $this->input->post('tgl_berobat'),
        'anamnesa' => $this->input->post('anamnesa'),
        'diagnosa' => $this->input->post('diagnosa'),
        'therapi' => $this->input->post('therapi'),
        'keterangan' => $this->input->post('keterangan'),
        'id_user' => $username,
        'id_pasien' => $this->input->post('id_pasien'),
    );

    if ($id == 0) {
        return $this->db->insert('tbl_riwayat', $data);
    } else {
        $this->db->where('id', $id);
        return $this->db->update('tbl_riwayat', $data);
    }
}

function get_obat() 
{
    $data_obat = array();
    $this->db->select('nama_obat');
    $this->db->from('tbl_obat');
    $query = $this->db->get();

    if ($query->num_rows() > 0) {
        foreach ($query->result_array() as $row) {
            $data_obat[] = $row;
        }
    }
    return $data_obat;
}

View

<div class="form-group m-b-20">
            <div class="col-xs-12">
                <label for="therapi">Therapi</label>
                <select class=" form-control js-example-basic-multiple" multiple="multiple" name="diagnosa">
                      <?php
                        foreach($obat as $option)
                        {
                            ?>
                            <option value="<?=$option['nama_obat']?>"><?=$option['nama_obat']?></option>
                            <?php
                        }
                        ?>
                    </select>
            </div>
        </div>

And this is a screenshoot of data stored in the database, which I put yellow color is the last data I input in multiple select field. enter image description here

1
  • You can't stick an array in a column. That is non-relational. You could convert the array into a comma delimited string but that would be incorrect database design and could have consequences later for the app, like inability to find rows by a single value. Commented Jul 22, 2017 at 18:04

2 Answers 2

1
Php have multiple option to convert array into string some of the option you can try are listed below.
implode() /explode()
json_encode() / json_decode()
serialize() / unserialize()


Above answer telling you how to convert array into serialized . So i  only mention other two option in my answer.

to convert the array into a string and back:
#Option one
function tambahrm() 
{
    $this->load->helper('url');
    $username = trim($this->session->userdata('id_user'));
    $data = array(
        'tgl_berobat' => $this->input->post('tgl_berobat'),
        'anamnesa' => $this->input->post('anamnesa'),
        'diagnosa' => json_encode($this->input->post('diagnosa')),
        'therapi' => $this->input->post('therapi'),
        'keterangan' => $this->input->post('keterangan'),
        'id_user' => $username,
        'id_pasien' => $this->input->post('id_pasien'),
    );

    if ($id == 0) {
        return $this->db->insert('tbl_riwayat', $data);
    } else {
        $this->db->where('id', $id);
        return $this->db->update('tbl_riwayat', $data);
    }
}

function get_obat() 
{
    $data_obat = array();
    $this->db->select('nama_obat');
    $this->db->from('tbl_obat');
    $query = $this->db->get();

    if ($query->num_rows() > 0) {
        foreach ($query->result_array() as $row) {
            $row['diagnosa'] = json_decode($row['diagnosa'],true);
            $data_obat[] = $row;
        }
    }
    return $data_obat;
}


#option two

function tambahrm() 
{
    $this->load->helper('url');
    $username = trim($this->session->userdata('id_user'));
    $data = array(
        'tgl_berobat' => $this->input->post('tgl_berobat'),
        'anamnesa' => $this->input->post('anamnesa'),
        'diagnosa' => implode(",",$this->input->post('diagnosa')),
        'therapi' => $this->input->post('therapi'),
        'keterangan' => $this->input->post('keterangan'),
        'id_user' => $username,
        'id_pasien' => $this->input->post('id_pasien'),
    );

    if ($id == 0) {
        return $this->db->insert('tbl_riwayat', $data);
    } else {
        $this->db->where('id', $id);
        return $this->db->update('tbl_riwayat', $data);
    }
}

function get_obat() 
{
    $data_obat = array();
    $this->db->select('nama_obat');
    $this->db->from('tbl_obat');
    $query = $this->db->get();

    if ($query->num_rows() > 0) {
        foreach ($query->result_array() as $row) {
            $row['diagnosa'] = explode(",",$row['diagnosa']);
            $data_obat[] = $row;
        }
    }
    return $data_obat;
}

First option using explode and implode and second option is using json_encode and decode.

you can use any option according to your requirement. But i personally suggest you json encode or serialized  pick from this two as they do not change key index of any type of array .
Sign up to request clarification or add additional context in comments.

Comments

0

You can use

  • json_encode() / json_decode()
  • serialize() / unserialize()

to convert the array into a serialized string and back:

function tambahrm() 
{
    $this->load->helper('url');
    $username = trim($this->session->userdata('id_user'));
    $data = array(
        'tgl_berobat' => $this->input->post('tgl_berobat'),
        'anamnesa' => $this->input->post('anamnesa'),
        'diagnosa' => json_encode($this->input->post('diagnosa')),
        'therapi' => $this->input->post('therapi'),
        'keterangan' => $this->input->post('keterangan'),
        'id_user' => $username,
        'id_pasien' => $this->input->post('id_pasien'),
    );

    if ($id == 0) {
        return $this->db->insert('tbl_riwayat', $data);
    } else {
        $this->db->where('id', $id);
        return $this->db->update('tbl_riwayat', $data);
    }
}

function get_obat() 
{
    $data_obat = array();
    $this->db->select('nama_obat');
    $this->db->from('tbl_obat');
    $query = $this->db->get();

    if ($query->num_rows() > 0) {
        foreach ($query->result_array() as $row) {
            $row['diagnosa'] = json_decode($row['diagnosa']) ?: null;
            $data_obat[] = $row;
        }
    }
    return $data_obat;
}

For reference, see:

Comments

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.