Kalian tentu pernah berbelanja barang di toko - toko swalayan di tempat anda, coba perhatikan program yang untuk input datanya, setiap brang yang telah di scan barcode secara otomatis akan menambahkan 1 baris data yang akan disimpan. Untuk artikel kali ini kita akan sedikit belajar bagaimana sih teknik penyimpanan seperti itu, tentu dengan model yang lebih sederhana tidak seperti pada swalayan yang dapat menghitung diskon - barang yang rumit pada barang - barang tertentu.

Multiple save yang akan kita buat ini menggunakan framework Codeigniter, mengapa codeigniter? karena kita akan memanfaatkan fungsi yang ada di codeigniter yang akan mempercepat penulisan code - code yang akan kalian buat. Kenapa tidka menggunakan Framework lain misal yii, zend, zimfoni dll, karena di Indonesia mungkin framework yang paling banyak digunakan ya Codeiginiter (menurut saya mudah digunakan). OK kita langsung ke penerapannya.

Masih pada Class bawaan codeigniter (Wellcome.php) kita memanfaatkan itu, Buat 2 fungsi untuk menampilkan dan menyimpan data yang akan kita buat.

taruh setelah fungsi index,

public function multi_save(){
    $this->load->view('multiple_save'); // panggil view multiple_save
}

public function create_data(){
    $this->load->helper(array('form', 'url')); // load helper form dan url
    $this->load->library('form_validation'); // digunakan untuk proses validasi yg di input
    $this->load->database(); // panggil object database
    // Proses pemvalidasian data yg di input
    $this->form_validation->set_rules('nama', 'nama', 'required|trim|xss_clean');
    $this->form_validation->set_rules('nama_product[]', 'barang', 'required|trim|xss_clean');
    $this->form_validation->set_rules('qty[]', 'qty', 'required|trim|xss_clean');
    $this->form_validation->set_rules('diskon[]', 'diskon', 'required|trim|xss_clean');
    $this->form_validation->set_rules('harga[]', 'harga', 'required|trim|xss_clean');
   
    if ($this->form_validation->run() == FALSE){
        echo validation_errors(); // tampilkan apabila ada error
    }else{
        $result = array();
        foreach($_POST['nama_product'] AS $key => $val){
            $result[] = array(
                 "nama_pembeli" => $_POST['nama']
                ,"nama_product" => $_POST['nama_product'][$key]
                ,"qty"          => $_POST['qty'][$key]
                ,"diskon"       => $_POST['diskon'][$key]
                ,"harga"        => $_POST['harga'][$key]
            );
        }           
       
        $res = $this->db->insert_batch('tbl_pembelian', $result); // fungsi dari codeigniter untuk menyimpan multi array
       
        if($res){
            echo "berhasil di input";
        }else{
            echo "gagal di input";
        }
    }
}

Sebelumnya kalian buat terlebih dahulu databasenya beri nama dln_multisave buat tabel seperti dibawah ini.

CREATE TABLE IF NOT EXISTS `tbl_pembelian` (
  `nama_pembeli` varchar(70) NOT NULL,
  `nama_product` varchar(75) NOT NULL,
  `qty` smallint(6) NOT NULL,
  `diskon` decimal(10,0) NOT NULL,
  `harga` decimal(10,0) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

kemudian buat satu file untuk tampilan untuk data dengan nama multiple_view.php taruh pada folder view isi seperti dibawah

<html>
<head>
    <title>http://www.iso.web.id Multi Save</title>
    <style>
        table{background-color:#CCC;}
        tr:nth-child(odd){background-color:#FFF;}
        td{padding:3px;}
        input{border:1px solid #000;}
    </style>
</head>
<body>
    <?php $this->load->helper('url');?> // panggil helper url untuk fungsi base_url();
    <form action="<?php echo base_url();?>?c=welcome&m=create_data" method="post"> // proses penyimpanan diarahkan ke fungsi create_data
        <table name="tb_pembeli" id="tb_pembeli">
            <tbody>
                <tr>
                    <td>Nama</td>
                    <td>:</td>
                    <td><input type="text" name="nama" id="name" /></td>
                </tr>
            </tbody>
        </table>
        <table name="tb_product" id="tb_product">
            <thead>
                <tr>
                    <th>Nama Barang</th>
                    <th>Qty</th>
                    <th>Diskon</th>
                    <th>Harga</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td><input type="text" name="nama_product[]" size="35" value="" /></td>
                    <td><input type="text" name="qty[]" size="10" value="" /></td>
                    <td><input type="text" name="diskon[]" size="15" value="0" /></td>
                    <td><input type="text" name="harga[]" size="20" value="" /></td>
                </tr>
                <tr>
                    <td><input type="text" name="nama_product[]" size="35" value="" /></td>
                    <td><input type="text" name="qty[]" size="10" value="" /></td>
                    <td><input type="text" name="diskon[]" size="15" value="0" /></td>
                    <td><input type="text" name="harga[]" size="20" value="" /></td>
                </tr>
                <tr>
                    <td><input type="text" name="nama_product[]" size="35" value="" /></td>
                    <td><input type="text" name="qty[]" size="10" value="" /></td>
                    <td><input type="text" name="diskon[]" size="15" value="0" /></td>
                    <td><input type="text" name="harga[]" size="20" value="" /></td>
                </tr>
            </tbody>
        </table>
        <input type="submit" name="submit" value="Submit" />
        <input type="reset" name="clear" value="Clear" />
    </form>
    <a href="http://www.iso.web.id">http://www.iso.web.id</a>
</body>
</html>

Dari code -  code diatas sudah dapat mewakili untuk proses multiple save, kenapa tidak langsung disimpan saat proses perulangan? (lihat contoh dibawah) 

$result = array();
foreach($_POST['nama_product'] AS $key => $val){
    $result = array(
         "nama_pembeli" => $_POST['nama']
        ,"nama_product" => $_POST['nama_product'][$key]
        ,"qty"          => $_POST['qty'][$key]
        ,"diskon"       => $_POST['diskon'][$key]
        ,"harga"        => $_POST['harga'][$key]
    );
    $res = $this->db->insert('tbl_pembelian',$result);
}

Memang teknik seperti itu bisa digunakan tapi kurang bagus dalam hal return (hasil pengembalian dari fungsi) mengapa? misalkan kita mempunyai 10 record yang akandi simpan pada waktu proses penyimpanan entah karena apa record no. 5 mengalami error secara otomatis proses perulangan akan tetap berjalan sampai penyimpana record ke 10, pada recored ke 10 data berhasil di simpan secara otomatis return mengembalikan TRUE yang artinya berhasil disimpan. lain halnya dengan insert_batch mengapa? karena fungsi ini memang didesign untuk multiple save (peyimpanan banyak record) apa bila ada 1 record yang error otomatis semua juga error yang akan mengembalikan FALSE.

Multiple save tidak hanya digunakan pada pertokoan saja melainkan diprogram - program lain juga pasti ada tergantung kebutuan.

 

Semoga bermanfaat.