TELAH DIBUKA !!!

Toko Ebook Tutorial "RosihanAri.Net"


Free Ebook Tutorial from Rosihan Ari's Blog

Tutorial Javascript | Tutorial PHP Dasar | Tutorial AJAX | Tutorial CSS | Tutorial FPDF | Tutorial Wordpress



Slot iklan tersedia, pasang iklan di atas

Ebook yang direkomendasikan untuk Anda
Ebook Panduan Praktis OOP di PHP

Membuat Kode Transaksi Unik Otomatis Berdasarkan Tanggal


November 26th, 2010 | by rosihanari | Cetak Artikel Cetak Artikel

Dalam artikel kali ini saya akan mencoba menjelaskan cara pembuatan kode transaksi unik yang digenerate secara otomatis berdasarkan tanggal. Biasanya kode transaksi unik berdasarkan tanggal ini digunakan pada transaksi pembayaran atau pembelian barang, misalnya ’201009010001′ dimana 4 digit terdepan menunjukkan tahun transaksi, digit 5 dan 6 menunjukkan bulan transaksi, digit 7-8 menunjukkan tanggal transaksi, sedangkan digit sisanya menunjukkan urutan transaksi yang terjadi pada tanggal tersebut.

Pada prinsipnya, cara membuatnya hampir sama dengan artikel yang pernah saya bahas sebelumnya tentang Generator Unik Incremental Otomatis, namun yang membedakannya di sini hanyalah pada proses penggunaan tanggalnya untuk mengkonstruksi nomor transaksi.

Dalam pembahasan ini, kasus yang kita pilih adalah tentang proses pembayaran (entah pembayaran apa), yang jelas pada proses pembayaran tersebut mula-mula operator diminta memasukkan ID member yang akan membayar. Proses berikutnya adalah memunculkan data identitas member berdasarkan ID member yang dimasukkan tadi dan muncul form isian jumlah uang yang dibayar. Setelah jumlah uang diisi pada form, proses berikutnya adalah memunculkan konfirmasi pembayaran yang didalamnya muncul ID transaksi pembayaran yang menggunakan tanggal transaksi.

Berdasarkan skenario di atas, kita buat dahulu tabel member yang berisi data-data identitas member. Data ini nanti akan diload sewaktu proses pembayaran.

CREATE TABLE `member` (
  `idMember` varchar(10),
  `nama` varchar(30),
  `alamat` varchar(50),
  PRIMARY KEY  (`idMember`)
);

dan berikut ini contoh datanya

INSERT INTO `member` VALUES ('100001', 'MR. A', 'SOLO');
INSERT INTO `member` VALUES ('100002', 'MR. B', 'SOLO');
INSERT INTO `member` VALUES ('100003', 'MR. C', 'SEMARANG');
INSERT INTO `member` VALUES ('100004', 'MR. D', 'YOGYAKARTA');

Selanjutnya kita buat satu buah tabel lagi untuk menyimpan data transaksi pembayaran. Kita buat tabel yang simpel saja sebagai contoh misalnya

CREATE TABLE `transaksi` (
  `idTransaksi` varchar(12),
  `idMember` varchar(10),
  `jumlah` int(11),
  PRIMARY KEY  (`idTransaksi`)
)

di mana field ‘idTransaksi’ untuk menyimpan data ID transaksi, ‘idMember’ terkait dengan ID dari member yang membayar, dan ‘jumlah’ menunjukkan jumlah uang yang dibayar. Karena ‘idTransaksi’ adalah kode unik maka kita set field tsb sebagai primary key.

OK, tabel database yang diperlukan sudah siap, selanjutnya kita buat scriptnya mulai dari form pembayarannya.

bayar.html

<html>
<head>
   <title>Transaksi Pembayaran</title>
</head>
<body>
   <h1>Transaksi Pembayaran</h1>
   <p><a href="bayar.htm">Form Bayar</a></p>
   <hr>
   <form method="post" action="proses.php">
   ID Member </td><td><input type="text" name="id"> <input type="submit" name="submit" value="Submit">
   </form>
</body>
</html>

Tampilan dari form di atas adalah sbb:

Transaksi Pembayaran

Script berikutnya yang kita buat adalah proses.php. Script ini nanti akan mencari data member berdasarkan ID member yang dimasukkan dari form bayar.html. Jika data member yang dicari ada maka akan memunculkan data member, dan jika tidak maka akan memunculkan konfirmasi data member tidak ditemukan.

Oya, sebelumnya kita butuh script untuk koneksi databasenya dulu ya

koneksi.php

<?php
// nama host
$dbhost = '...';
// nama user
$dbuser = '...';
// password user
$dbpass = '...';
// nama database
$dbname = '...';

mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname);
?>

Nah sekarang baru script proses.php nya

proses.php

<?php
// koneksi ke database
include 'koneksi.php';
?>

<html>
<head>
   <title>Transaksi Pembayaran</title>
</head>
<body>
   <h1>Transaksi Pembayaran</h1>
   <p><a href="bayar.htm">Form Bayar</a></p>
   <hr>
<?php
// baca ID member dari form bayar.html
$id = $_POST['id'];
// lakukan query pencarian data member berdasarkan ID
$query = "SELECT * FROM member WHERE idMember = '$id'";
$hasil = mysql_query($query);
if (mysql_num_rows($hasil)>0)
{
// jika ditemukan datanya maka tampilkan
$data  = mysql_fetch_array($hasil);
?>
   <form method="post" action="proses2.php">
   <table>
   <tr><td>ID</td><td>:</td><td><?php echo $id; ?></td></tr>
   <tr><td>Nama</td><td>:</td><td><?php echo $data['nama']; ?></td></tr>
   <tr><td>Alamat</td><td>:</td><td><?php echo $data['alamat']; ?></td></tr>
   <tr><td>Jumlah Bayar</td><td>:</td><td>Rp. <input type="text" name="jumlah"></td></tr>
   </table>
   <input type="hidden" name="id" value="<?php echo $id?>">
   <input type="submit" name="submit" value="Submit">
   </form>
<?php
}
// jika tidak maka tampilkan peringatan
else echo "Nomor ID tidak ditemukan";
?>
</body>
</html>

Tampilan dari script proses.php adalah seperti di bawah ini

Transaksi Pembayaran

OK… script proses.php sudah dibuat, selanjutnya kita buat script proses2.php. Di dalam script ini, akan dilakukan proses penyimpanan data transaksi pembayaran dari member. Sebelum proses penyimpanan data transaksi, terlebih dahulu akan digenerate ID transaksinya secara otomatis. Bagaimana idenya? Idenya adalah pertama baca tanggal hari ini (current date) dalam format YYYYMMDD, gunakan function date('Ymd'). Anda tidak harus menggunakan format YYYYMMDD tapi bisa format DDMMYYYY atau MMDDYYYY.

Setelah itu gunakan query untuk mencari nomor transaksi terakhir yang berawalan tanggal hari ini. Yang menjadi pertanyaan adalah bagaimana cara mencari nomor transaksi terahir? ya… gunakan saja function MAX() pada query nya

SELECT MAX(idTransaksi) FROM transaksi WHERE idTransaksi LIKE 'tanggalharini%'

Query di atas digunakan untuk mencari nomor transaksi terakhir yang berawalan tanggal hari ini.

Setelah idTransaksi terakhir diperoleh, selanjutnya kita baca nomor urut dari idTransaksi terakhir tersebut. Karena nomor urut adalah substring yang terletak dalam string nomor transaksi, maka kita gunakan function substr() untuk membacanya. Nomor urut ini terletak pada digit ke 9 s/d 12. Nah… nomor urut ini nanti selanjutnya kita tambah 1 untuk nomor urut transaksi berikutnya. Ilustrasinya begini, misalkan nomor urut dari id transaksi terakhir adalah 0001 maka nomor urut id transaksi berikutnya adalah 0002. Gunakan function sprintf('%04s', nomorurut) untuk menyatakan nomor urut dalam 4 digit string. Misalkan nomor urutnya adalah 12, maka dengan function tersebut akan dihasilkan ’0012′. Kemudian nomor urut ini kita gabung kembali dengan tanggal hari ini untuk membentuk nomor transaksi yang baru.

Nomor transaksi yang baru sudah digenerate, barulah proses penyimpanan data transaksinya ke dalam tabel transaksi.

OK… berikut ini isi script proses2.php nya

proses2.php

<?php
// koneksi ke database
include 'koneksi.php';

// baca current date
$today = date("Ymd");
?>

<html>
<head>
   <title>Transaksi Pembayaran</title>
</head>
<body>
   <h1>Transaksi Pembayaran</h1>
   <p><a href="bayar.htm">Form Bayar</a></p>
   <hr>
<?php

// baca id member dari form proses.php
$id = $_POST['id'];

// baca jumlah pembayaran dari form proses.php
$jumlah = $_POST['jumlah'];

// cari id transaksi terakhir yang berawalan tanggal hari ini
$query = "SELECT max(idTransaksi) AS last FROM transaksi WHERE idTransaksi LIKE '$today%'";
$hasil = mysql_query($query);
$data  = mysql_fetch_array($hasil);
$lastNoTransaksi = $data['last'];

// baca nomor urut transaksi dari id transaksi terakhir
$lastNoUrut = substr($lastNoTransaksi, 8, 4); 

// nomor urut ditambah 1
$nextNoUrut = $lastNoUrut + 1;

// membuat format nomor transaksi berikutnya
$nextNoTransaksi = $today.sprintf('%04s', $nextNoUrut);

// proses simpan data transaksi dengan nomor transaksi yang baru
$query = "INSERT INTO transaksi (idTransaksi, idMember, jumlah)
          VALUES ('$nextNoTransaksi', '$id', '$jumlah')";
$hasil = mysql_query($query);
if ($hasil)
{
    // jika proses simpan transaksi sukses, maka tampilkan nomor transaksi dan data pembayaran
    $query2 = "SELECT * FROM member WHERE idMember = '$id'";
    $hasil2 = mysql_query($query2);
    $data2  = mysql_fetch_array($hasil2);
?>

   <p>Transaksi Pembayaran Sukses</p>
   <table>
   <tr><td>ID Transaksi</td><td>:</td><td><?php echo $nextNoTransaksi; ?></td></tr>
   <tr><td>ID Member</td><td>:</td><td><?php echo $id; ?></td></tr>
   <tr><td>Nama</td><td>:</td><td><?php echo $data2['nama']; ?></td></tr>
   <tr><td>Alamat</td><td>:</td><td><?php echo $data2['alamat']; ?></td></tr>
   <tr><td>Jumlah Bayar</td><td>:</td><td>Rp. <?php echo $jumlah; ?></td></tr>
   </table>

<?php
}
else echo "Transaksi Gagal";
?>   

</body>
</html>

Tampilan dari script proses2.php adalah seperti di bawah ini

Transaksi Pembayaran

Mudah bukan membuatnya? selamat mencoba dan bereksperimen ya…


Baca Juga Artikel Terkait
Ide Membuat Generator Kode Unik Incremental Otomatis
Membuat Tampilan Data Terurut Berdasarkan Kolom Tabel
Membuat Script PHP untuk Prediksi Tanggal Kelahiran (HPL)
Menentukan Tanggal n Hari Berikutnya dan n Hari Sebelumnya Dari Tanggal Hari Ini
Menghitung Jumlah Hari Minggu Antara Dua Tanggal



Slot iklan tersedia, pasang iklan di atas


Kata kunci: artikel php - script php - tips php - trik php - tutorial php -


Ada 34 komentar dalam artikel ini.



  1. Akhyar says:

    Saya pribadi lebih senang dengan id transaksi yang terkesan acak dan unik. Misalnya angka yang udah jadi itu dienkripsi secara sederhana sehingga user tidak bisa menebak angka itu datang dari mana :P

    • rosihanari says:

      @akhyar: saya pun juga sama dengan Anda mas… artikel di atas merupakan permintaan beberapa pengunjung blog yang ingin diberikan ide untuk kasus di atas.

  2. Budi says:

    Thank mas tutorialnya..bisa dijadikan ide untuk buat toko online.

    kalau saya lebih suka toko online yang orang nggak perlu daftar-daftaran atau masukin ID atau harus login untuk membeli sesuatu, bikin ribet. Jadi langsung datang-beli-checkout

  3. wahh.. makin keren ajah nih om rossi..
    sukses om .. :D

  4. hendry says:

    saya bisa memahami dan bahkan sudah mampu membangun toko web dengan memahami dan mengikuti tutorial dari buku2 anda..namun saya ingin menanyakan kenapa g dibahasa bagaimana menampilakn produk diskon y?jadi klo diskon harga lama dicoret..:D..kan diskon salah satu bagian dari toko online..

  5. anggoro says:

    bang mohon pncerahan….
    sya pnya prmsalahan tp mlenceng jauh dri tema ini..tpi tetep PHP
    masalh tampil data dalam tabel (data dari database).

    biasanya data di tampilkan sprti ini:

    nama | alamt |email
    —————————–
    andi | jakrta |a@yahoo.com
    bima | srbya |bima@gmail.com
    nindi | jogja |xxxx

    permasalhannya, bgamana bang kalo ingin ditmpilkan spti tbel brikut:

    ———————————————–
    nama | andi | bima | nindi
    alamat | jkt | srbya | jogja
    email |a@yahoo.com |bima@gmail.com | xxx

    saya utak atik gak nemu2 bang..mhon bantuan pncerahan..
    trimakasih sebelumnya..tolong reply bang…

    • rosihanari says:

      @anggoro: mungkin idenya begini mas, untuk setiap data pada field ‘nama’ simpan dulu ke sebuah array. Demikian juga untuk alamat dan email. Baru nanti setiap array tersebut ditampilkan secara horisontal. Kalau langsung dibaca dari database lalu ditampilkan agak sulit. Jadi kita butuh suatu array untuk menyimpan masing2 field dulu, baru tampilkan setiap array tsb scr horisontal.

  6. hendry says:

    begini mas,kan ad kalau toko online terkadang memberi diskon tapi harga lama dari produk tersebut di garis dan harga diskon diberi warna merah. :D …maaf kalau sedikit berantakan kata2 nya

    • rosihanari says:

      @hendry: kalo itu mungkin konsepnya buat field di tabel barang yang dijual yang khusus menyimpan harga diskonnya mas, sedangkan harga aslinya disimpan di field yang lain. Dan sebuah field lain lagi untuk menentukan apakah harga yang dipakai harga asli atau harga diskon. Field ini bisa diisi semacam TRUE atau FALSE. Jika TRUE maka yang dipakai adalah harga diskon, sedangkan FALSE yang dipakai harga aslinya.

  7. Agus Wahyudi says:

    menarik.. membantu banget tutor’a kebetulan saya juga da tugas berhubungan dengan tutor diatas..
    klo boleh tanya.. untuk membuat kode_pegawai dengan format “P0001″ untuk query’a bagaimana mana ya :
    1. memanggil kode_pegawai yg terakhir di entry ?
    2. memanggil kode pegawai +1 untuk entry baru, agar tidak manual ?
    terima kasih.. :)

  8. RADITYO BAGUS NIMPUNO says:

    kok muncul
    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\transaksi\proses.php on line 20
    Nomor ID tidak ditemukan
    ada solusi?

  9. anti says:

    mas sebelumnya makasih banyak lo ya
    sudah saya coba dan berhasil

    nah untuk berikutnya transaksi gagal terus
    jadi cuma bisa ngesave transaksi sekali

    gimana ya mas? mohon bantuannya trims