append, insert array dan dua tabel codeigniter
Kali ini saya akan membahas tentang bagaimana membuat from inputan meng-array dan menyimpan atau insert dua table dalam satu aksi . untuk phpnya saya menggunakan framework codeigniter .
Kali ini saya untuk tampilannya saya mengguanakan fungsi append dan untuk fungsi insertnya saya menggunakan insert array . sebagai contoh permasalahan kali ini saya menggunakan seperti form pembayaran atau kasir .
kenapa kasir ?? karena dalam form pembayaran pasti ada pencatatan apa saja yang dipesan seorang pembeli yang pastinya pesananya lebih dari satu item .
selanjutnya apa saja yang di butuhkan dalam tutorial kali ini , yaitu :
1. Sebagai tampilannya saya menggunakan bootstrap .
2. Select2 . //enggak begitu penting
3. Jquery mask money
4. jquery-1.10.2.min
5. jquery-ui-1.9.2.custom.min
untuk bahannya bisa browsing sendiri soal sudah banyak yang membahas 5 hal di atas tersebut !!
jika anda sudah selesai dengan bahan-bahan yang di butuh kan dalam tutorial kali ini , kita bahas tabel databasenya. Tabel yang kita butuhkan hanya dua tabel database, yaitu :
1. tabel pemesan
Field | Jenis | panjang |
id_pemesan | Varchar | 15 |
Nama | Varchar | 25 |
Tgl | Date | |
Meja | Int | 10 |
T_item | Int | 20 |
T_bayar | decimal | 20,0 |
2. tabel pesanan
Field | Jenis | panjang |
Id_pemesan | varchar | 15 |
Menu | Varchar | 50 |
Qty | Int | 15 |
Harga | Decimal | 20,0 |
jumlah | decimal | 20,0 |
selanjutnya kita langsung saja ke tutorialnya , sebagai gambaran tampilannya seperti berikut !!
Penjelasan gambar :
Pada bagain form yang di atasnya tabel merupakan yang nantinya di simpan kedalam tabel tb_pemesan dan yang ada di dalam tabel akan tersimpan dalam tabel tb_pesanan . button +baris berfungsi sebagai penambah row yang ada di dalam tabel tersebut .
Kita langsung saja ke condingnya. Pertama-tama kita ke tampilan terlebih dahulu , kita beri nama tampil.php saja. Berikut codingnya :
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="author" content=""> <link href="<?= base_url() ?>assets/fonts/css/font-awesome.min.css" rel="stylesheet"> <link href="<?php echo base_url()?>assets/css/bootstrap.min.css" rel="stylesheet"> <link href="<?php echo base_url(); ?>assets/select2/dist/css/select2.min.css" rel="stylesheet"> <link href="<?php echo base_url()?>assets/css/3-col-portfolio.css" rel="stylesheet"> <script src="<?= base_url() ?>assets/js/jquery-1.10.2.min.js"></script> <script src="<?= base_url() ?>assets/js/jquery.maskMoney.min.js"></script> </head> <body> <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#">Page</a> </div> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> </div> </div> </nav> <div class="container"> <div class="row"> <div class="col-lg-12"> <section class="panel"> <header class="panel-heading"> Data Pesanan </header> <div class="panel-body"> <form class="form-horizontal" method="post" action="<?= site_url("append/append_add") ?>" > <div class="col-lg-12"> <div class="row"> <div class="col-lg-12"> <div class="col-lg-4"> <div class="form-group" style="padding-left:0;"> <label class="col-lg-4">Tanggal </label> <div class="col-lg-5"> <input type="text" name="tgl" class="form-control" value="<?php echo date('d-m-Y'); ?>" readonly> </div> </div> <div class="form-group" style="padding-left:0;"> <label class="col-lg-4">ID Pemesan</label> <div class="col-lg-5" > <input type="text" name="id_pemesan" id="tr" class="form-control" value="<?= $aut; ?>" readonly> </div> </div> </div> <div class="col-lg-6"> <div class="form-group" style="padding-left:0;"> <label class="col-lg-4">nama pemesan</label> <div class="col-lg-6" > <input type="text" name="nama" id="tr" class="form-control"> </div> </div> <div class="form-group"> <label class="col-lg-4">Meja</label> <div class="col-lg-8" > <select name="meja" style="width:174px" class="select2" required="" id="kd"> <option value="" >---Pilih meja---</option> <option value="1">meja 1</option> <option value="2">meja 2</option> <option value="3">meja 3</option> <option value="4">meja 4</option> <option value="5">meja 5</option> <option value="6">meja 6</option> <option value="7">meja 7</option> <option value="8">meja 8</option> </select> </div> </div> </div> </div> </div> </div> <div class="col-lg-12" style="padding-left:0; padding-top:20px"> <table class="table table-bordered table-striped" id="dynamic-table1"> <thead> <tr> <th style="vertical-align: middle; text-align:center">No</th> <th style="vertical-align: middle; text-align:center; width:28%;">Menu</th> <th style="vertical-align: middle; text-align:center; width:15%;">Qty</th> <th style="vertical-align: middle; text-align:center; width:23%;">Harga Satuan (Rp)</th> <th style="vertical-align: middle; text-align:center; width:28%;">Jumlah (Rp)</th> </tr> </thead> <tbody id="tabelDetail" > <?php for ($i = 1; $i <= 1; $i++) { ?> <tr> <td><?= $i ?></td> <td style="padding:5px 5px"><select class="select2 ss" style="width:100%" id="mm" name="menu[]" required> <option value="">---Pilih---</option> <option value="makanan">makanan</option> <option value="minuman">minuman</option> </select></td> <td style="padding:5px 5px"><input type="text" id="qty" name="qty[]" class="form-control qty" style=" text-align:right;" required/></td> <td style="padding:5px 5px"><input type="text" id="hs" name="harga[]" class="form-control harga" style=" text-align:right;" required/></td> <td style="padding:5px 5px"><div id="jj"> <input type="text" id="jml" name="jumlah[]" class="form-control jumlah" style=" text-align:right;" readonly/> </div></td> </tr> <?php } ?> </tbody> <tfoot> <tr> <th colspan="2" style="vertical-align: middle; text-align:center;" >Total Item</th> <th style="text-align:right;padding:5px 5px;padding-top:0px;padding-bottom:0px"><input type="text" style=" text-align:right;" id="t_item" name="item" class="form-control" readonly></th> <th colspan="1" style="vertical-align: middle; text-align:center;" >Total (Rp)</th> <th style="text-align:right;padding:5px 5px;padding-top:0px;padding-bottom:0px"><input type="text" style=" text-align:right;" id="total" name="total" class="form-control" readonly></th> </tr> </tfoot> </table> </div> <button type="button" class="btn btn-primary" id="btn-tambah" style="width:85px;"><i class="fa fa-plus"></i><span> Baris</span></button> <div class="form-group pull-right"> <div class="col-lg-12" style="text-align:right; padding-right:30px;"> <button type="submit" class="btn btn-primary" style="width:85px;">Simpan</button> <a href="<?= site_url('append/')?>"> <button type="button" class="btn btn-primary" style="width:85px;">Batal</button> </a> </div> </div> </form> </div> </section> </div> </div> </div> <script src="<?= base_url() ?>assets/js/jquery-ui-1.9.2.custom.min.js"></script> <script type="text/javascript" src="<?= base_url() ?>assets/select2/dist/js/select2.js"></script> <script src="<?php echo base_url()?>assets/js/bootstrap.min.js"></script> </body> </html> |
Sehabis membuat tampilannya , bagaimana membuat fungsi penambah row yang ada dalam tabelnya. Sebenarnya pertama-tama logikanya kita harus menghitung row yang tabel tersebut terlebih dahulu dengan for. Contoh:
<?php for ($i = 1; $i <= 1; $i++) { ?> <tr> <td><?= $i ?></td> <td style="padding:5px 5px"><select class="select2 ss" style="width:100%" id="mm" name="menu[]" required> <option value="">---Pilih---</option> <option value="makanan">makanan</option> <option value="minuman">minuman</option> </select></td> <td style="padding:5px 5px"><input type="text" id="qty" name="qty[]" class="form-control qty" style=" text-align:right;" required/></td> <td style="padding:5px 5px"><input type="text" id="hs" name="harga[]" class="form-control harga" style=" text-align:right;" required/></td> <td style="padding:5px 5px"><div id="jj"> <input type="text" id="jml" name="jumlah[]" class="form-control jumlah" style=" text-align:right;" readonly/> </div></td> </tr> <?php } ?> |
Baru kita membuat fungsi penambah rownya, berikut scriptnya letakan script tersebut sebelum </body> :
<script> $(document).ready(function(){ $('#btn-tambah').click(function(ev){ //ev.preventDefault(); var tbl = $('#dynamic-table1 tbody'); var lastRow = tbl.find("tr").length +1; var emptyrows = 0; for (i=1; i<lastRow; i++) { if ($("#qty").val() == '' || $("#hs").val() == '') { emptyrows += 1; } if ($("#qty"+i).val() == '' || $("#hs"+i).val() == '') { emptyrows += 1; } } if (emptyrows == 0 ) { var kode=$('#mm').html(); tbl.append( '<tr class="baris">' + '<td>'+lastRow+'</td>' + '<td style="padding:5px 5px"><select id="mm'+lastRow+'" style="width:100%" name="menu[]" required>'+kode+'</select></td>' + '<td style="padding:5px 5px"><input id="qty'+lastRow+'" class="form-control qty" style="text-align:right;" type="text" name="qty[]" required></td>' + '<td style="padding:5px 5px"><input id="hs'+lastRow+'" class="form-control harga" style=" text-align:right;" type="text" name="harga[]" required></td>' + '<td style="padding:5px 5px"><input id="jml'+lastRow+'" class="form-control jumlah" style=" text-align:right;" type="text" name="jumlah[]" readonly></td>' + '<td style="padding:5px 5px"><button type="button" class="btn btn-default btn-xs btn-hapus"><i class="fa fa-times"></i></button></td>' + '</tr>' ); }else{ alert("Silahkan mengisi data pada baris yang tersedia terlebih dahulu, sebelum menambah baris."); } }); }); </script> |
Dari sini kita sudah dapat menbahkan rownya , tetapi belum dapat menghitung antara qty dan harga yang menghasilkan jumlahdan total (Rp) dan total itemnya ataupun menghapus row yang telah ditambahkan. bagaimana caranya berikut codingnya :
$("#hs").keyup(function(){ var qty = $("#qty").val(); var hs = $("#hs").val(); qty = parseFloat(qty.replace(/\,/g,'')); hs = parseFloat(hs.replace(/\,/g,'')); var total=qty*hs; if(!isNaN(hs) && hs.length!=0) { $('#jml').val(formatMoney(total.toFixed(2))); } }); |
Letakan script tersebut tepat di bawah bagain “$(document).ready(function(){ ”. dan letakan script yang ada di bawah berikut tepat ada di atas atau sebelum “}else{”.
$("input[id=hs"+lastRow+"]").keyup(function(){ var qty = $("input[id=qty"+lastRow+"]").val(); var hs = $("input[id=hs"+lastRow+"]").val(); qty = parseFloat(qty.replace(/\,/g,'')); hs = parseFloat(hs.replace(/\,/g,'')); var total=qty*hs; if(!isNaN(hs) && hs.length!=0) { $("input[id=jml"+lastRow+"]").val(formatMoney(total.toFixed(2))); } subtotal() }); |
Dari sini kita sudah dapat menambah row dan mendapatkan jumlah dari qty dan harga , tetapi kita belum mendapatkan fungsi untuk mentotal dari jumlah, mentotal qtynya dan menghapus row yang telah ditambahkan. Selanjut kita akan menbahkan fungsi total qtynya.
#letakan script dibawah tepat di atas atau sebelum “}else{”.
$("input[id=qty"+lastRow+"]").keyup(function(){ itemm() }); |
# letakan script dibawah tepat di setelah atau di bawah “else{...} )};”.
$("input[id=qty]").keyup(function(){ itemm(); }); function itemm(){ var sum=0; $('.qty').each(function(){ var a=this.value; a=a.replace(/\,/g,''); if(!isNaN(a) && a.length!=0) { sum += parseFloat(a); } }); $('#t_item').val(sum); }; |
Setelah kita dapatkan total qtynya , kita ke hapus rownya lalu baru ke total (Rp). Berikut script untuk menghapus rownya :
# letakan script dibawah tepat di setelah atau di bawah “else{...} ”.
$(".btn-hapus").bind("click", hapusRow); |
# letakan script dibawah setelah ataupun sesudah “function itemm”.
function hapusRow() { $(this).parents(".baris").remove(); subtotal(); itemm(); }; |
# letakan script dibawah setelah ataupun sesudah “function itemm”. Jika anda meletakan “function hapusRow” setelah sebelum “function itemm” maka letakan script dibawah setelah “function itemm”.
$("input[id=hs").keyup(function(){ subtotal(); }); function subtotal(){ var sum=0; $('.jumlah').each(function(){ var a=this.value; a=a.replace(/\,/g,''); if(!isNaN(a) && a.length!=0) { sum += parseFloat(a); } }); $('#total').val(formatMoney(sum.toFixed(2))); }; |
Disini kita sudah dapat fungsi semuanya namun kita belum mendapatkan perhitungan yang fixed jadi tambahkan script di bawah ini tepat sebelum “});</script>”.
function formatMoney(number, places, symbol, thousand, decimal) { number = number || 0; places = !isNaN(places = Math.abs(places)) ? places : 2; symbol = symbol !== undefined ? symbol : "$"; thousand = thousand || ","; decimal = decimal || "."; var negative = number < 0 ? "-" : "", i = parseInt(number = Math.abs(+number || 0).toFixed(places), 10) + "", j = (j = i.length) > 3 ? j % 3 : 0; return negative + (j ? i.substr(0, j) + thousand : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousand) + (places ? decimal + Math.abs(number - i).toFixed(places).slice(2) : ""); } |
Jika anda binggu dengan peletakan script-script diatas berikut merupakan kumpulan script-scriptnya , oh iya kita belum menjalankan script select2 dan jqurrey mask moneynya . kita langsung kescript lengkapnya saja:
<script> $(document).ready(function(){ $('.select2').select2(); $('#qty').maskMoney({thousands:',', decimal:'.', precision:0}); $('#hs').maskMoney({thousands:',', decimal:'.', precision:2}); $("#hs").keyup(function(){ var qty = $("#qty").val(); var hs = $("#hs").val(); qty = parseFloat(qty.replace(/\,/g,'')); hs = parseFloat(hs.replace(/\,/g,'')); var total=qty*hs; if(!isNaN(hs) && hs.length!=0) { $('#jml').val(formatMoney(total.toFixed(2))); } }); $('#btn-tambah').click(function(ev){ //ev.preventDefault(); var tbl = $('#dynamic-table1 tbody'); var lastRow = tbl.find("tr").length +1; var emptyrows = 0; for (i=1; i<lastRow; i++) { if ($("#qty").val() == '' || $("#hs").val() == '') { emptyrows += 1; } if ($("#qty"+i).val() == '' || $("#hs"+i).val() == '') { emptyrows += 1; } } if (emptyrows == 0 ) { var kode=$('#mm').html(); tbl.append( '<tr class="baris">' + '<td>'+lastRow+'</td>' + '<td style="padding:5px 5px"><select id="mm'+lastRow+'" style="width:100%" name="menu[]" required>'+kode+'</select></td>' + '<td style="padding:5px 5px"><input id="qty'+lastRow+'" class="form-control qty" style="text-align:right;" type="text" name="qty[]" required></td>' + '<td style="padding:5px 5px"><input id="hs'+lastRow+'" class="form-control harga" style=" text-align:right;" type="text" name="harga[]" required></td>' + '<td style="padding:5px 5px"><input id="jml'+lastRow+'" class="form-control jumlah" style=" text-align:right;" type="text" name="jumlah[]" readonly></td>' + '<td style="padding:5px 5px"><button type="button" class="btn btn-default btn-xs btn-hapus"><i class="fa fa-times"></i></button></td>' + '</tr>' ); $('select[id=mm'+lastRow+']').select2(); $("input[id=qty"+lastRow+"]").maskMoney({thousands:',', decimal:'.', precision:0}); $("input[id=hs"+lastRow+"]").maskMoney({thousands:',', decimal:'.', precision:2}); $("input[id=hs"+lastRow+"]").keyup(function(){ var qty = $("input[id=qty"+lastRow+"]").val(); var hs = $("input[id=hs"+lastRow+"]").val(); qty = parseFloat(qty.replace(/\,/g,'')); hs = parseFloat(hs.replace(/\,/g,'')); var total=qty*hs; if(!isNaN(hs) && hs.length!=0) { $("input[id=jml"+lastRow+"]").val(formatMoney(total.toFixed(2))); } subtotal() }); $("input[id=qty"+lastRow+"]").keyup(function(){ itemm() }); }else{ alert("Silahkan mengisi data pada baris yang tersedia terlebih dahulu, sebelum menambah baris."); } $(".btn-hapus").bind("click", hapusRow); }); $("input[id=hs").keyup(function(){ subtotal(); }); $("input[id=qty]").keyup(function(){ itemm(); }); function hapusRow() { $(this).parents(".baris").remove(); subtotal(); itemm(); }; function subtotal(){ var sum=0; $('.jumlah').each(function(){ var a=this.value; a=a.replace(/\,/g,''); if(!isNaN(a) && a.length!=0) { sum += parseFloat(a); } }); $('#total').val(formatMoney(sum.toFixed(2))); }; function itemm(){ var sum=0; $('.qty').each(function(){ var a=this.value; a=a.replace(/\,/g,''); if(!isNaN(a) && a.length!=0) { sum += parseFloat(a); } }); $('#t_item').val(sum); }; function formatMoney(number, places, symbol, thousand, decimal) { number = number || 0; places = !isNaN(places = Math.abs(places)) ? places : 2; symbol = symbol !== undefined ? symbol : "$"; thousand = thousand || ","; decimal = decimal || "."; var negative = number < 0 ? "-" : "", i = parseInt(number = Math.abs(+number || 0).toFixed(places), 10) + "", j = (j = i.length) > 3 ? j % 3 : 0; return negative + (j ? i.substr(0, j) + thousand : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousand) + (places ? decimal + Math.abs(number - i).toFixed(places).slice(2) : ""); } }); </script> |
Dari view sudah selesai , selanjutnya kita ke controllernya beri nama controllernya append.php . langsung copy saja coding berikut !!
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Append extends CI_Controller{ function __construct(){ parent::__construct(); $this->load->model('m_append'); } public function index(){ $data['aut']=$this->m_append->nootomatis(); $this->load->view('tampil', $data); } public function append_add(){ $tgl = date("Y-m-d",strtotime($this->input->post('tgl'))); $data=array( "tgl"=>$tgl, "id_pemesan"=>$this->input->post('id_pemesan'), "nama"=>$this->input->post('nama'), "meja"=>$this->input->post('meja'), "t_item"=>str_replace(",","",$this->input->post('item')), "t_bayar"=>str_replace(",","",$this->input->post('total')) ); $this->db->insert('tb_pemesan',$data); $data1 = array(); foreach($_POST['menu'] as $key => $val){ $data1=array( "id_pemesan"=>$this->input->post('id_pemesan'), "menu"=>$_POST['menu'][$key], "qty"=>str_replace(",","",$_POST['qty'][$key]), "harga"=>str_replace(",","",$_POST['harga'][$key]), "jumlah"=>str_replace(",","",$_POST['jumlah'][$key]) ); $this->db->insert('tb_pesanan',$data1); } redirect('append/'); } } |
Catatan:
- model” m_append” sebenarnya tidak begitu penting karena hanya berfungsi sebagai id_pemesan automatis saja .
- “foreach($_POST['menu']as $key=> $val)” pada bagian ini harus di isi yang sebagai acuan array nya.
Kita langsung saja buat modelnya , berikut scriptnya :
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class M_append extends CI_Model { function nootomatis() { $today1=date('ym'); $today2='HB-'.$today1; $query=mysql_query("select max(id_pemesan) as last from tb_pemesan where id_pemesan like '%$today2%'"); $data=mysql_fetch_array($query); $lastNoFaktur=$data['last']; $lastNoUrut=substr($lastNoFaktur,7,12); $nextNoUrut=$lastNoUrut+1; $nextNoKunjungan='HB-'.$today1.sprintf('%05s',$nextNoUrut); return $nextNoKunjungan; } } |
silah kan mencoba !!
Atau anda binggung bisa langsung download saja tutorial ini!!
Share via Facebook / Twitter / Google Plus to see Link Download
Tweet
Tweet
mantap
ReplyDelete