简体   繁体   中英

how to convert array value to string and save to database

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. 在此处输入图片说明

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 .

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:

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM