Membuat toko online sendiri adalah proyek yang sangat bermanfaat untuk belajar PHP dan MySQL secara menyeluruh — karena mencakup katalog produk, keranjang belanja, dan checkout. Artikel ini membahas cara membuat website toko online sederhana dengan PHP dan MySQL beserta struktur dan kode intinya.
Fitur yang Akan Dibuat
- Menampilkan katalog produk dari database
- Keranjang belanja memakai session
- Proses checkout yang menyimpan pesanan
- Halaman admin untuk mengelola produk (CRUD)

Langkah 1: Struktur Database
Buat database toko lalu jalankan query berikut:
CREATE TABLE produk (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(150) NOT NULL,
harga INT NOT NULL,
stok INT DEFAULT 0,
gambar VARCHAR(255),
deskripsi TEXT
);
CREATE TABLE pesanan (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_pembeli VARCHAR(100),
total INT,
dibuat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE pesanan_item (
id INT AUTO_INCREMENT PRIMARY KEY,
pesanan_id INT,
produk_id INT,
jumlah INT,
subtotal INT
);
Langkah 2: Menampilkan Katalog
File index.php menampilkan semua produk:
<?php
require "koneksi.php";
$produk = $koneksi->query("SELECT * FROM produk WHERE stok > 0");
while ($p = $produk->fetch_assoc()):
?>
<div class="produk">
<h3><?= htmlspecialchars($p["nama"]) ?></h3>
<p>Rp<?= number_format($p["harga"], 0, ",", ".") ?></p>
<a href="keranjang.php?tambah=<?= $p["id"] ?>">+ Keranjang</a>
</div>
<?php endwhile; ?>
Langkah 3: Keranjang Belanja (Session)
Keranjang disimpan di session agar bertahan antar halaman. File keranjang.php:
<?php
session_start();
require "koneksi.php";
// Tambah produk ke keranjang
if (isset($_GET["tambah"])) {
$id = (int) $_GET["tambah"];
$_SESSION["keranjang"][$id] = ($_SESSION["keranjang"][$id] ?? 0) + 1;
header("Location: keranjang.php");
exit;
}
// Tampilkan isi keranjang
$total = 0;
if (!empty($_SESSION["keranjang"])) {
foreach ($_SESSION["keranjang"] as $id => $jumlah) {
$p = $koneksi->query("SELECT * FROM produk WHERE id = " . (int)$id)->fetch_assoc();
$subtotal = $p["harga"] * $jumlah;
$total += $subtotal;
echo $p["nama"] . " x" . $jumlah . " = Rp" . number_format($subtotal) . "<br>";
}
echo "<b>Total: Rp" . number_format($total) . "</b>";
}
?>
Langkah 4: Proses Checkout
Saat checkout, simpan pesanan ke tabel pesanan dan pesanan_item:
<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$nama = trim($_POST["nama"]);
// simpan header pesanan
$stmt = $koneksi->prepare("INSERT INTO pesanan (nama_pembeli, total) VALUES (?, ?)");
$stmt->bind_param("si", $nama, $total);
$stmt->execute();
$pesanan_id = $koneksi->insert_id;
// simpan tiap item
foreach ($_SESSION["keranjang"] as $id => $jumlah) {
$p = $koneksi->query("SELECT harga FROM produk WHERE id = " . (int)$id)->fetch_assoc();
$subtotal = $p["harga"] * $jumlah;
$koneksi->query("INSERT INTO pesanan_item (pesanan_id, produk_id, jumlah, subtotal)
VALUES ($pesanan_id, " . (int)$id . ", $jumlah, $subtotal)");
}
unset($_SESSION["keranjang"]); // kosongkan keranjang
echo "Pesanan berhasil! Terima kasih.";
}
?>
Langkah 5: Halaman Admin
Admin mengelola produk lewat CRUD (lihat tutorial CRUD PHP MySQL) dan sebaiknya dilindungi dengan sistem login agar hanya admin yang bisa mengakses.
Kesalahan Umum
- Keranjang hilang antar halaman — lupa
session_start()di setiap file. - Query rawan injeksi — selalu
(int)untuk id dan prepared statement untuk input. - Stok tidak berkurang — tambahkan
UPDATE produk SET stok = stok - jumlahsaat checkout.
Kesimpulan
Anda telah membuat kerangka toko online PHP dan MySQL: katalog, keranjang berbasis session, dan checkout yang menyimpan pesanan. Untuk pengembangan, tambahkan upload gambar produk, login pelanggan, dan integrasi pembayaran. Proyek ini melatih hampir semua konsep dasar pemrograman web.
Referensi: untuk pendalaman, kunjungi dokumentasi resmi PHP (php.net).

