Cara Membuat No Transaksi Otomatis Menggunakan PDO

Dalam pembuatan sebuah aplikasi berbasis website yang dinamis penggunaan sebuah nomor transaksi otomatis pasti akan selalu digunakan hal ini mengingat bahwa penggunaan sebuah no transaksi yang harus unik dan tidak boleh sama dengan no transaksi yang telah digunakan, apalagi jika no transaksi tersebut digunakan sebagai index primary key pada tabel yang terdapat pada database. Dengan menggunakan no transaksi otomatis ini kita tidak perlu report dalam mengisi no transaksinya dan beberapa text box atauf field lainnya saja yang harus di isi secara manual.

https://padsite.blogspot.com/2019/07/cara-membuat-no-transaksi-otomatis-menggunakan-pdo.html

Dalam pembuatan no transaksi secara otomatis ini dapat menggunakan auto increment yang terdapat pada fasilitas database (otomatis di buatkan oleh database), kemudian memanggil dengan kode no terakhir yang digunakan dan fungsi unique yang akan menghasilkan sebuah karakter atau number yang unik.

Dengan menggunakan sebuah fungsi untuk membuat sebuah nomor otomatis ini dapat di buat sesuai dengan yang kita inginkan contohnya banyaknya karakter, huruf dan number yang akan digunakan dalam pembuatan nomor transaksi tersebut atau menggabungkannya menjadi satu fungsi antara gabungan number dan huruf, misalkan dalam sebuah nomor transaksi TRX-001 ini menggunakan kombinasi dimana TRX memberikan keterangan sebuah transaksi misalnya serta 001 merupakan nomor urut transaksi dan masih banyak lagi tentunya untuk penggunaan nomor transaksi ini namun semua itu dharus di buat sesuai dengan kebutuhan untuk aplikasi dan harus memiliki nilai dan arti dari nomor tersebut. Baiklah kita akan melihat beberapa fungsi yang akan kita gunakan untuk membuat nomor transaksi tersebut, perhatikanlah baris kode berikut ini.

    public function _select_Kode_Buku() {
        $stmt = $this->conn->prepare("SELECT MAX(kode_buku) AS kode_terakhir FROM buku WHERE kode_buku");
        $this->conn->beginTransaction();
        $stmt->execute();
        $this->conn->commit();
        $data = $stmt->fetch(PDO::FETCH_ASSOC);
        $last = $data['kode_terakhir'] + 1;
        return $last;
    }

Pada kode sql yang diguanakan untuk mencari nilai terbesar pada tabel buku di atas yang di definisikan sebagai kode terakhir dan pada variable $last kode terakhir tersebut akan ditambah nilainya oleh 1 sehingga nomor yang diguanakan adalah nomor terakhir di tambah satu angka ke depan tentunya hal ini tidak akan menimbulkan duplikat primary key. Setelah membuat fungsi untuk membuat nomor transaksi terakhir selanjutnya anda tinggal menampilkannya pada form yang akan digunakan untuk menambah sebuah data. Berikut kode yang digunakan tersebut.

<input type="text" name="kode_buku" class="form-control" value="<?php echo $kode_buku_terakhir; ?>" readonly >

Untuk menampilkan hasil dari nomor transaksi otomatis terakhir yang telah dibuat tersebut kita tinggal menampilkannya pada value input yang akan digunakan, disini saya menggunakanya pada kode buku. Anda dapat mengaplikasikannya pada tutorial sebelumnya mengenai CRUD buku yang telah dibuat untuk lebih jelasnya anda dapat melihat struktur file dan folder sebelumnya melalui link berikut. Simple validation CRUD PDO, OOP, Mysql dan Bootstrap 4, anda dapat menambahkan kode buku ini pada class buku dan form tambah buku. Untuk lebih jelasnya anda dapat melihat class buku berikut yang sudah ditambahkan fungsi baru untuk membuat nomor transaksi secara otomatis.

Class_Buku.php

<?php

require_once 'db_connection.php';

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of Buku
 *
 * @author Jhon Doe
 */
class Buku {

    //put your code here
    private $conn;

    public function __construct() {
        $database = new Connection();
        $db = $database->db_Connection();
        $this->conn = $db;
    }

    public function _create_Buku($kode_buku, $judul_buku, $pengarang_buku, $penerbit_buku) {
        try {
            $stmt = $this->conn->prepare("INSERT INTO buku(kode_buku, judul_buku, pengarang_buku, penerbit_buku)"
                    . "VALUES(?, ?, ?,?)");
            $stmt->bindparam(1, $kode_buku, PDO::PARAM_STR);
            $stmt->bindparam(2, $judul_buku, PDO::PARAM_STR);
            $stmt->bindparam(3, $pengarang_buku, PDO::PARAM_STR);
            $stmt->bindparam(4, $penerbit_buku, PDO::PARAM_STR);

            $this->conn->beginTransaction();
            $stmt->execute();
            $this->conn->commit();
            return true;
        } catch (PDOException $e) {
            echo $e->getMessage();
            return false;
        }
    }

    public function _retrive_Buku() {
        $stmt = $this->conn->prepare("SELECT * FROM buku");
        $this->conn->beginTransaction();
        $stmt->execute();
        $this->conn->commit();
        while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
            $data[] = $row;
        }
        return $data;
    }

    public function _retrive_Buku_By_kode_buku($kode_buku) {
        $stmt = $this->conn->prepare("SELECT * FROM buku WHERE kode_buku=:id");
        $this->conn->beginTransaction();
        $stmt->execute(array(":id" => $kode_buku));
        $this->conn->commit();
        $row = $stmt->fetch(PDO::FETCH_OBJ);
        return $row;
    }

    public function _update_Buku($kode_buku, $judul_buku, $pengarang_buku, $penerbit_buku) {
        try {
            $stmt = $this->conn->prepare("UPDATE buku SET  judul_buku=:1, pengarang_buku=:2,  penerbit_buku=:3 WHERE kode_buku=:4");
            $stmt->bindParam(":1", $judul_buku, PDO::PARAM_STR);
            $stmt->bindParam(":2", $pengarang_buku, PDO::PARAM_STR);
            $stmt->bindParam(":3", $penerbit_buku, PDO::PARAM_STR);
            $stmt->bindParam(":4", $kode_buku, PDO::PARAM_STR);

            $this->conn->beginTransaction();
            $stmt->execute();
            $this->conn->commit();
            return true;
        } catch (PDOException $e) {
            echo $e->getMessage();
            return false;
        }
    }

    public function _delete_Buku($kode_buku) {
        $stmt = $this->conn->prepare("DELETE FROM buku WHERE kode_buku=:id");
        $stmt->bindparam(":id", $kode_buku);
        $this->conn->beginTransaction();
        $stmt->execute();
        $this->conn->commit();
        return true;
    }

    public function _select_Kode_Buku() {
        $stmt = $this->conn->prepare("SELECT MAX(kode_buku) AS kode_terakhir FROM buku WHERE kode_buku");
        $this->conn->beginTransaction();
        $stmt->execute();
        $this->conn->commit();
        $data = $stmt->fetch(PDO::FETCH_ASSOC);
        $last = $data['kode_terakhir'] + 1;
        return $last;
    }

    public function _selectLast() {
        $today = date("ymd");
        $stmt = $this->conn->prepare("SELECT max(kode_buku) AS kode_terakhir FROM buku WHERE kode_buku LIKE '$today%'");
        $stmt->execute();
        $data = $stmt->fetch(PDO::FETCH_ASSOC);

        $lastNoTransaksi = $data['kode_terakhir'];
        $lastNoUrut = substr($lastNoTransaksi, 8, 4);
        $nextNoUrut = $lastNoUrut + 1;
        $kode_buku = $today . sprintf('%04s', $nextNoUrut);
        return $kode_buku;
    }

    public function _selectTrx() {
        $trx = "TRX-";
        $stmt = $this->conn->prepare("SELECT max(kode_buku) AS kode_terakhir FROM buku WHERE kode_buku LIKE '$trx%'");
        $stmt->execute();
        $data = $stmt->fetch(PDO::FETCH_ASSOC);
        $lastNoTransaksi = $data['kode_terakhir'];
        $lastNoUrut = substr($lastNoTransaksi, 4, 4);
        $nextNoUrut = $lastNoUrut + 1;
        $kode_buku = $trx . sprintf('%04s', $nextNoUrut);
        return $kode_buku;
    }

}

Dan form_create_buku.php yang sudah dimodifikasi sedikit untuk menampilkan nomor transaksi otomatis berikut ini.
  
Form_create_buku.php
 
<!--
/* 
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
-->
<?php
require_once 'header.php';
require_once 'Class_Buku.php';
$buku = new Buku();
$kode_buku_terakhir = $buku->_select_Kode_Buku();
if (isset($_POST['form-submitted'])) {
    $kode_buku = $_POST['kode_buku'];
    $judul_buku = $_POST['judul_buku'];
    $pengarang_buku = $_POST['pengarang_buku'];
    $penerbit_buku = $_POST['penerbit_buku'];
    if (empty($kode_buku)) {
        $error = "Kode Buku masih kosong ...";
    } elseif (empty($judul_buku)) {
        $error = "Judul Buku masih kosong ...";
    } elseif (empty($pengarang_buku)) {
        $error = "Pengarang Buku masih kosong ...";
    } elseif (empty($penerbit_buku)) {
        $error = "Penerbit Buku masih kosong ...";
    } else {
        $buku->_create_Buku($kode_buku, $judul_buku, $pengarang_buku, $penerbit_buku);
        ?>
        <script>
            alert('Data berhasil disimpan ...');
            window.location.href = 'index.php';
        </script>
        <?php
    }
}
?>

<hr>
<?php
if (isset($error)) {
    ?>
    <div class="alert alert-danger">
        <span class="fa fa-info-sign"></span> <strong><?php echo $error; ?></strong>
    </div>
    <?php
}
?>  
<form method="POST" action="">
    <div class="form-group row">
        <label  class="col-sm-3 col-form-label">Kode Buku</label>
        <div class="col-sm-9">
            <input type="text" name="kode_buku" class="form-control" value="<?php echo $kode_buku_terakhir; ?>" readonly >
        </div>
    </div>
    <div class="form-group row">
        <label  class="col-sm-3 col-form-label">Judul Buku</label>
        <div class="col-sm-9">
            <input type="text" name="judul_buku" class="form-control" >
        </div>
    </div>
    <div class="form-group row">
        <label  class="col-sm-3 col-form-label">Pengarang Buku</label>
        <div class="col-sm-9">
            <input type="text" name="pengarang_buku" class="form-control" >
        </div>
    </div>
    <div class="form-group row">
        <label  class="col-sm-3 col-form-label">Penerbit Buku</label>
        <div class="col-sm-9">
            <input type="text" name="penerbit_buku" class="form-control" >
        </div>
    </div>
    <div class="form-group row">
        <label  class="col-sm-3 col-form-label"></label>
        <div class="col-sm-9">
            <button type="submit" class="btn btn-md btn-primary"><span class="fa fa-save"></span> Create</button>
            <a href="index.php" class="btn btn-md btn-secondary">Go Back</a>
        </div>
    </div>
    <input type="hidden" name="form-submitted" value="1" />
</form>
<?php require_once 'footer.php'; ?>

https://padsite.blogspot.com/2019/07/cara-membuat-no-transaksi-otomatis-menggunakan-pdo.html
Selain nomor transaksi secara otomatis sederhana di atas anda juga dapat menggunakan parameter tanggal untuk pembuatan nomor transaksi tersebut dengan menggunakan baris kode-kode berikut yang terdapat pada class buku.

public function _selectLast() {
        $today = date("ymd");
        $stmt = $this->conn->prepare("SELECT max(kode_buku) AS kode_terakhir FROM buku WHERE kode_buku LIKE '$today%'");
        $stmt->execute();
        $data = $stmt->fetch(PDO::FETCH_ASSOC);

        $lastNoTransaksi = $data['kode_terakhir'];
        $lastNoUrut = substr($lastNoTransaksi, 8, 4);
        $nextNoUrut = $lastNoUrut + 1;
        $kode_buku = $today . sprintf('%04s', $nextNoUrut);
        return $kode_buku;
    }


    public function _selectTrx() {
        $trx = "TRX-";
        $stmt = $this->conn->prepare("SELECT max(kode_buku) AS kode_terakhir FROM buku WHERE kode_buku LIKE '$trx%'");
        $stmt->execute();
        $data = $stmt->fetch(PDO::FETCH_ASSOC);

        $lastNoTransaksi = $data['kode_terakhir'];
        $lastNoUrut = substr($lastNoTransaksi, 4, 4);
        $nextNoUrut = $lastNoUrut + 1;
        $kode_buku = $trx . sprintf('%04s', $nextNoUrut);
        return $kode_buku;
    }

Dengan cara membuat nomor transaksi secara otomatis Anda dapat menggunakan nomor transaksi tersebut sesuai dengan kebutuhan dan pilihan yang paling tepat untuk digunakan. Untuk nomor transaksi lainnya silahkan anda explor sendiri sesuai dengan kebutuhan dengan menggunakan kombinasi dari baris kode nomor transaksi sederhana diatas. Jika ada pertanyaan silahkan tinggalkan pada kolom kometar. Terima kasih semoga bermanfaat.

2 Responses to "Cara Membuat No Transaksi Otomatis Menggunakan PDO"

  1. Assalamualaikum, makasih atas bantuan nya bro . Dengan membaca artikel ini saya jadi sangat mudah memahami dan mempelajari cara membuat form yang memiliki detail transaksi ,apalagi bagi pemula untuk pelajar. Sukses terus yaahh. Semoga bermanfaat ,kenalin saya Fariz Al Faiq ,dari STMIK ATMA LUHUR . Jangan lupa kunjungi website kampus kita ya bro (https://www.atmaluhur.ac.id/)

    ReplyDelete
  2. wah, keren loh kak artikel nya udh kemana-mana aku cari enggak Ada yang tepat dan pas. Setelah aku mampir di artikel kkak aku jadi banyak tahu tentang Membuat form yg memiliki detail transaksi. Terimakasih banyak bgt kak, sukses terus yahh semoga artikel nya bermanfaat. Oh iya kenalin aku Sekar Widya Lestari Dari STMIK ATMA LUHUR. Jangan Lupa kunjungi website kampus (https://www.atmaluhur.ac.id/)

    ReplyDelete

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel