Sistem Transaksi Barang Sederhana
Bahasa pemrograman web spt PHP mempunyai fasilitas untuk penyimpanan data sementara yaitu SESSION, dan dengan fasilitas ini pula lahir beberapa sistem yang familiar di beberapa aplikasi web seperti Shopping Cart dan Orders System.
Saya coba memberikan sistem transaksi sederhana yang menjadi inti dari kedua sistem yang sy sebutkan diatas. Jadi data yang anda masukan atau anda pilih tidak langsung dimasukkan ke database, namun ditampung sementara di dalam variable SESSION.
Langkah pertama siapkan database anda, sy implementasikan sistem ini di MySQL, jadi copy syntax di bawah ini agar tercipta 1 buah table bernama ‘barang’.
CREATE TABLE `barang` ( `id_barang` char(5) NOT NULL, `nama_barang` varchar(40) NOT NULL, `jumlah` int(5) NOT NULL, PRIMARY KEY (`id_barang`) )
Lalu salin file 2 file di bawah ini sebagai barang.class.php dan session.class.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <? class Barang{ var $table = 'barang'; function Barang(){ mysql_connect('localhost','root',''); mysql_select_db('test'); } function insert($data){ $fields = array(); $values = array(); foreach($data as $key=>$value){ $fields[] = $key; $values[] = "'".$value."'"; } $sql = "INSERT INTO ".$this->table."(".implode(',',$fields).") VALUES(".implode(',',$values).")"; $result = mysql_query($sql) or die(mysql_error()); return $result; } function truncate(){ $result = mysql_query('TRUNCATE TABLE '.$this->table) or die(mysql_error()); return $result; } function get(){ $sql = mysql_query('SELECT * FROM '.$this->table) or die(mysql_error()); $data = array(); if(!$sql || @mysql_num_rows($sql) == 0){ return NULL; }else{ while($row = mysql_fetch_object($sql)){ $data[] = $row; } return $data; } } } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <? @session_start(); // klo session mesti diawali dengan fungsi di ini class StoreSession{ var $name = 'barang'; var $error = ''; function StoreSession(){ if(!isset($_SESSION[$this->name])){ $_SESSION[$this->name] = array(); } } function add($id,$nama,$jumlah){ if(!array_key_exists($id,$_SESSION[$this->name])){ $_SESSION[$this->name][$id] = array('nama'=>$nama,'jumlah'=>$jumlah); }else $_SESSION[$this->name][$id]['jumlah'] += $jumlah; } function get(){ return $_SESSION[$this->name]; } function delete($id=false){ if($id) unset($_SESSION[$this->name][$id]); else unset($_SESSION[$this->name]); } function isNull(){ if(!isset($_SESSION[$this->name])) return true; else return empty($_SESSION[$this->name]); } } ?> |
Class Barang dipakai ketika transaksi sudah selesai dilakukan dan user menekan tombol simpan dan seketika itu semua data yang disimpan sementara akan disimpan di table barang.
Class StoreSession adalah class utama dalam trick penyimpanan barang sementara ini, semua metode seperti menambah, mengedit dan menghapus data ada disini. Data yang disimpan sementara berupa data array 2 dimensi.
Berikut adalah interfacenya dimana user melakukan proses transaksi dan pemilihan barang:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | <? require('session.class.php'); $sess = new StoreSession(); if(isset($_GET['delete'])){ $sess->delete($_GET['delete']); header('Location: ./'); } if(isset($_GET['save'])){ require('barang.class.php'); $cart = $sess->get(); $barang = new Barang(); $barang->truncate(); foreach($cart as $key=>$value){ $post = array( 'id_barang' => $key, 'nama_barang' => $value['nama'], 'jumlah' => $value['jumlah'] ); $barang->insert($post); } $sess->delete(); header('Location: result.php'); } if(isset($_POST['submit'])){ $sess->add($_POST['id_barang'],$_POST['nama_barang'],$_POST['jumlah']); } ?> <html> <head> <title>Data Transaction</title> </head> <body> <form id="form1" name="form1" method="post" action=""> Kode Barang : <input name="id_barang" type="text" id="id_barang" size="5" maxlength="5" /> <br /> Nama Barang : <input name="nama_barang" type="text" id="nama_barang" size="30" /> <br /> Jumlah : <input name="jumlah" type="text" id="jumlah" size="4" maxlength="5" /> <br /> <input name="submit" type="submit" id="submit" value="Submit" /> <input type="reset" name="Submit2" value="Reset" /> </form> <br /> <table border="1" cellspacing="0" cellpadding="0" width="83%"> <tr> <th width="13%" scope="col">ID Barang </th> <th width="54%" scope="col">Nama Barang </th> <th width="12%" scope="col">Jumlah</th> <th width="21%" scope="col">Hapus</th> </tr> <? foreach($sess->get() as $key=>$value): ?> <tr> <td align="center"><?=$key?></td> <td><?=$value['nama']?></td> <td align="center"><?=$value['jumlah']?></td> <td align="center"><a href="?delete=<?=$key?>">Hapus</a></td> </tr> <? endforeach; ?> </table> <? if(!$sess->isNull()): ?> <center><input type="button" value="Save" onClick="document.location='?save=1'" /></center> <? endif; ?> </body> </html> |
Dan ini adalah tampilan dari script diatas:
Pada interface diatas ada tombol save yang ketika ditekan akan menuju file result.php yang dimana file result.php ini yang menjadi interface terakhir dalam proses transaksi, pada file ini pula data yang selama proses transaksi disimpan akan dimasukkan ke dalam database. Berikut adalah source dari result.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <html> <head> <title>Data Result</title> </head> <body> <? require('barang.class.php'); $barang = new Barang(); ?> <table border="1" cellspacing="0" cellpadding="0" width="83%"> <tr> <th width="18%" scope="col">ID Barang </th> <th width="63%" scope="col">Nama Barang </th> <th width="19%" scope="col">Jumlah</th> </tr> <? foreach($barang->get() as $row): ?> <tr> <td align="center"><?=$row->id_barang?></td> <td><?=$row->nama_barang?></td> <td align="center"><?=$row->jumlah?></td> </tr> <? endforeach; ?> </table> </body> </html> |
Untuk melihat demo dari artikel ini di link ini.
Source code lengkap dapat anda download di sini
Catatan: (09-09-2009)
Sebelum melakukan penyimpanan di table barang, data lama di hapus terlebih dahulu memang disengaja karena pada artikel ini saya lebih menonjolkan permainan session dalam transaksi pemesanan barang.
Semoga dapat membantu menambah wawasan anda…. ^_^




Chandra Jatnika

I disagree
Can you give more info?
alow mas chandra script ini ga bs download, mo nanya 1 lagi, klu idbarangan increment gimana ya? otomatis jadi td input manual?
b001 ,b002 dst..
trims byk
sori klo gk bisa download coz file-nya aku upload ke server lama.
nanti ya tak cari2 dulu file mentahannya dan aku upload ke server baru.
utk ID barang increment itu tergantung di aplikasi master barang, klo disini data barang cuma perumpamaan aja, intinya di proses penyimpanan transaksi, anggap saja data barang sudah ada sebelumnya, gitu.
ha ha ha ..
bagus..
gitu doonk.. -_-’
Thanks ya udah merhatiin, kyknya trik di saat nyimpen data blom sempurna deh, udah saya benerin dan dah saya coba-coba dan gak ada error. Sekali lagi thanks atas informasinya
Mas chandra kalau pas savenya kok error ya?
yang demonya juga
Wah responnya Cepet banget adminnya nih
baru kemarin post langsung di benerin. Mantapz
Mas Chandra table barang sistemnya update yah? setiap input barang baru , yang lama langsung terhapus.
Mas chandra gimana kalau mau nambah table misalnya barang1 yang kemudian semua inputan itu di tampung di sana.
Script simpan ke barang1 nya harus di tambah dimana ya mas?
terima kasih
Sebelum melakukan penyimpanan di table barang, data lama di hapus terlebih dahulu memang disengaja karena pada artikel ini saya lebih menonjolkan permainan session dalam transaksi pemesanan barang. (aku dah tambah kalimat ini di catatan kecil bagian paling bawah artikel ini),,, Thanks atas pertanyaannya
mas ikutan nanya nich, kalo transaksi satu barang udah ter record di table, sekali manggil nomernya aja sekalian udah nampak nama nya juga bisa ga. dalam sekali enter dr field nomer barang tersebut… makasih
Itu pake ajax, jadi ketika dimasukan kode barang, ketika event onBlur bisa dikasih fungsi ajax untuk mendapatkan detail dari barang dengan kode tersebut