Cara Membuat Aplikasi Kasir (POS) Sederhana dengan PHP dan MySQL

Aplikasi kasir atau POS (Point of Sale) adalah proyek favorit untuk belajar karena melibatkan transaksi, perhitungan, dan manajemen stok. Artikel ini membahas cara membuat aplikasi kasir sederhana dengan PHP dan MySQL beserta kode intinya.

Fitur yang Akan Dibuat

  • Daftar produk dengan harga dan stok
  • Input penjualan (pilih produk & jumlah)
  • Hitung total belanja dan kembalian
  • Simpan transaksi & kurangi stok otomatis
  • Cetak struk sederhana

Langkah 1: Struktur Database

CREATE TABLE produk (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nama VARCHAR(150) NOT NULL,
    harga INT NOT NULL,
    stok INT DEFAULT 0
);

CREATE TABLE transaksi (
    id INT AUTO_INCREMENT PRIMARY KEY,
    total INT,
    bayar INT,
    kembalian INT,
    waktu TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE detail_transaksi (
    id INT AUTO_INCREMENT PRIMARY KEY,
    transaksi_id INT,
    produk_id INT,
    jumlah INT,
    subtotal INT
);

Langkah 2: Menampilkan Produk & Keranjang

Kasir memilih produk yang ditambahkan ke keranjang (session), mirip toko online:

<?php
session_start();
require "koneksi.php";

if (isset($_GET["tambah"])) {
    $id = (int) $_GET["tambah"];
    $_SESSION["keranjang"][$id] = ($_SESSION["keranjang"][$id] ?? 0) + 1;
}

$total = 0;
foreach (($_SESSION["keranjang"] ?? []) as $id => $jml) {
    $p = $koneksi->query("SELECT * FROM produk WHERE id=" . (int)$id)->fetch_assoc();
    $sub = $p["harga"] * $jml;
    $total += $sub;
    echo "{$p['nama']} x{$jml} = Rp" . number_format($sub) . "<br>";
}
echo "<b>TOTAL: Rp" . number_format($total) . "</b>";
?>

Langkah 3: Proses Bayar & Simpan Transaksi

Saat kasir memproses pembayaran, hitung kembalian, simpan transaksi, kurangi stok:

<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $bayar = (int) $_POST["bayar"];
    $kembalian = $bayar - $total;

    if ($kembalian < 0) {
        die("Uang bayar kurang!");
    }

    // simpan header transaksi
    $stmt = $koneksi->prepare("INSERT INTO transaksi (total, bayar, kembalian) VALUES (?, ?, ?)");
    $stmt->bind_param("iii", $total, $bayar, $kembalian);
    $stmt->execute();
    $tid = $koneksi->insert_id;

    // simpan detail + kurangi stok
    foreach ($_SESSION["keranjang"] as $id => $jml) {
        $p = $koneksi->query("SELECT harga FROM produk WHERE id=" . (int)$id)->fetch_assoc();
        $sub = $p["harga"] * $jml;
        $koneksi->query("INSERT INTO detail_transaksi (transaksi_id, produk_id, jumlah, subtotal)
                         VALUES ($tid, " . (int)$id . ", $jml, $sub)");
        $koneksi->query("UPDATE produk SET stok = stok - $jml WHERE id=" . (int)$id);
    }
    unset($_SESSION["keranjang"]);
    echo "Transaksi berhasil! Kembalian: Rp" . number_format($kembalian);
}
?>

Langkah 4: Cetak Struk

Struk cukup halaman HTML sederhana yang menampilkan detail transaksi, lalu panggil window.print() lewat JavaScript:

<button onclick="window.print()">Cetak Struk</button>

Kesalahan Umum

  • Stok minus — validasi jumlah tidak melebihi stok sebelum menyimpan.
  • Kembalian salah — pastikan tipe data integer dan cek bayar >= total.
  • Data tidak konsisten — untuk aplikasi nyata, gunakan transaksi database (BEGIN/COMMIT) agar simpan transaksi + kurangi stok berjalan atomik.

Kesimpulan

Anda telah membuat aplikasi kasir PHP dan MySQL dengan input penjualan, perhitungan total & kembalian, penyimpanan transaksi, dan pengurangan stok otomatis. Untuk pengembangan, tambahkan laporan penjualan harian, login petugas, dan barcode scanner.

Referensi: untuk pendalaman, kunjungi dokumentasi resmi PHP (php.net).

Baca Juga

Ali Akbar

Software Developer yang fokus mengembangkan aplikasi berbasis Web dan Desktop. Senang mempelajari teknologi baru terutama di bidang web design dan web development.

View all posts by Ali Akbar →

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *