1. Pengantar E-Commerce dan PHP
E-Commerce adalah sistem perdagangan elektronik yang memungkinkan penjualan dan pembelian produk secara online. PHP adalah bahasa pemrograman server-side yang sangat populer untuk membangun aplikasi web dinamis, termasuk toko online.
Dalam panduan ini, kita akan membangun toko e-commerce modern menggunakan PHP, MySQL, dan teknologi web pendukung lainnya. Anda akan belajar mulai dari persiapan lingkungan, membuat database, hingga fitur lengkap seperti registrasi, keranjang belanja, dan checkout.
2. Persiapan Lingkungan dan Tools
Sebelum mulai coding, pastikan Anda sudah menyiapkan beberapa tools berikut:
-
Web server lokal seperti XAMPP, WAMP, atau Laragon
-
Editor kode seperti Visual Studio Code atau Sublime Text
-
Browser modern (Chrome, Firefox, Edge)
-
Database MySQL atau MariaDB
-
Pengetahuan dasar PHP dan SQL
Setelah menginstall XAMPP, jalankan Apache dan MySQL. Buat folder proyek di
htdocs
(jika menggunakan XAMPP).
3. Struktur Proyek dan Arsitektur
Struktur folder proyek yang rapi memudahkan pengembangan dan pemeliharaan. Berikut contoh struktur sederhana:
/ecommerce-php
├── assets
│ ├── css
│ ├── js
│ └── images
├── includes
│ ├── db.php
│ ├── header.php
│ └── footer.php
├── admin
│ ├── index.php
│ └── products.php
├── index.php
├── product.php
├── cart.php
├── checkout.php
├── login.php
└── register.php
Arsitektur aplikasi menggunakan pendekatan sederhana dengan PHP procedural dan MySQL sebagai database. Anda bisa mengembangkan ke arsitektur MVC jika sudah lebih mahir.
4. Membuat Database dan Tabel
Buat database bernama
ecommerce_db
dan tabel-tabel utama seperti
users
,
products
,
orders
, dan
order_items
.
CREATE DATABASE ecommerce_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE ecommerce_db;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(150) NOT NULL,
description TEXT,
price DECIMAL(10,2) NOT NULL,
image VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
total DECIMAL(10,2) NOT NULL,
status VARCHAR(50) DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
CREATE TABLE order_items (
id INT AUTO_INCREMENT PRIMARY KEY,
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
FOREIGN KEY (order_id) REFERENCES orders(id),
FOREIGN KEY (product_id) REFERENCES products(id)
);
Anda bisa menjalankan skrip SQL ini di phpMyAdmin atau MySQL CLI.
5. Membuat Koneksi Database dengan PHP
Buat file
includes/db.php
untuk menghubungkan aplikasi dengan database MySQL menggunakan PDO.
<?php
$host = 'localhost';
$db = 'ecommerce_db';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
?>
Gunakan file ini di halaman lain dengan
require 'includes/db.php';
untuk akses database.
6. Membuat Sistem Registrasi dan Login
Sistem registrasi memungkinkan pengguna membuat akun, dan login untuk mengakses fitur toko. Berikut contoh kode sederhana untuk registrasi:
<?php
require 'includes/db.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = trim($_POST['username']);
$email = trim($_POST['email']);
$password = $_POST['password'];
$password_confirm = $_POST['password_confirm'];
if ($password === $password_confirm) {
$hash = password_hash($password, PASSWORD_DEFAULT);
$stmt = $pdo->prepare('INSERT INTO users (username, email, password) VALUES (?, ?, ?)');
try {
$stmt->execute([$username, $email, $hash]);
echo "Registrasi berhasil. Silakan login.";
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
} else {
echo "Password dan konfirmasi tidak cocok.";
}
}
?>
<form method="POST" class="max-w-md mx-auto mt-6 space-y-4">
<input type="text" name="username" placeholder="Username" required class="w-full p-2 border rounded" />
<input type="email" name="email" placeholder="Email" required class="w-full p-2 border rounded" />
<input type="password" name="password" placeholder="Password" required class="w-full p-2 border rounded" />
<input type="password" name="password_confirm" placeholder="Konfirmasi Password" required class="w-full p-2 border rounded" />
<button type="submit" class="w-full bg-indigo-600 text-white p-2 rounded hover:bg-indigo-700">Daftar</button>
</form>
Untuk login, Anda bisa membuat halaman yang memverifikasi username/email dan password menggunakan
password_verify()
.
7. Menampilkan dan Mengelola Produk
Produk adalah inti toko online. Berikut contoh kode untuk menampilkan daftar produk dari database:
<?php
require 'includes/db.php';
$stmt = $pdo->query('SELECT * FROM products ORDER BY created_at DESC');
$products = $stmt->fetchAll();
?>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
<?php foreach ($products as $product): ?>
<div class="bg-white rounded-lg shadow p-4 flex flex-col">
<img src="assets/images/<?= htmlspecialchars($product['image']) ?>" alt="Foto produk <?= htmlspecialchars($product['name']) ?>" class="h-48 object-cover rounded mb-4" />
<h3 class="text-xl font-semibold mb-2"><?= htmlspecialchars($product['name']) ?></h3>
<p class="text-gray-700 flex-grow"><?= nl2br(htmlspecialchars($product['description'])) ?></p>
<div class="mt-4 text-indigo-700 font-bold text-lg">Rp <?= number_format($product['price'], 0, ',', '.') ?></div>
<a href="product.php?id=<?= $product['id'] ?>" class="mt-3 inline-block bg-indigo-600 text-white text-center py-2 rounded hover:bg-indigo-700">Lihat Detail</a>
</div>
<?php endforeach; ?>
</div>
Untuk mengelola produk (tambah, edit, hapus), buat halaman admin dengan form dan fungsi CRUD.
8. Membuat Keranjang Belanja
Keranjang belanja menyimpan produk yang ingin dibeli pengguna. Gunakan session PHP untuk menyimpan data keranjang sementara.
<?php
session_start();
function addToCart($productId, $quantity = 1) {
if (!isset($_SESSION['cart'])) {
$_SESSION['cart'] = [];
}
if (isset($_SESSION['cart'][$productId])) {
$_SESSION['cart'][$productId] += $quantity;
} else {
$_SESSION['cart'][$productId] = $quantity;
}
}
// Contoh menambahkan produk dengan id 5 sebanyak 2 ke keranjang
addToCart(5, 2);
// Menampilkan isi keranjang
if (!empty($_SESSION['cart'])) {
foreach ($_SESSION['cart'] as $id => $qty) {
echo "Produk ID: $id, Jumlah: $qty <br>";
}
} else {
echo "Keranjang belanja kosong.";
}
?>
Buat halaman
cart.php
untuk menampilkan isi keranjang dengan detail produk dan total harga.
9. Proses Checkout dan Pembayaran
Pada halaman checkout, pengguna mengisi data pengiriman dan memilih metode pembayaran. Berikut contoh form checkout sederhana:
<form method="POST" action="process_checkout.php" class="max-w-lg mx-auto space-y-4">
<label>Nama Lengkap</label>
<input type="text" name="fullname" required class="w-full p-2 border rounded" />
<label>Alamat Pengiriman</label>
<textarea name="address" required class="w-full p-2 border rounded"></textarea>
<label>Metode Pembayaran</label>
<select name="payment_method" required class="w-full p-2 border rounded">
<option value="transfer" >Transfer Bank</option>
<option value="cod" >Cash on Delivery (COD)</option>
</select>
<button type="submit" class="w-full bg-indigo-600 text-white p-2 rounded hover:bg-indigo-700">Bayar</button>
</form>
Pada
process_checkout.php
, simpan data order dan order_items ke database, lalu kosongkan keranjang session.
10. Dashboard Admin dan Manajemen Produk
Admin dapat mengelola produk, melihat pesanan, dan mengubah status order. Berikut contoh tampilan dashboard admin sederhana:
Buat halaman
admin/products.php
untuk CRUD produk dengan form input nama, deskripsi, harga, dan upload gambar.
<?php
// Contoh upload gambar produk dan simpan data produk
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = $_POST['name'];
$description = $_POST['description'];
$price = $_POST['price'];
$imageName = null;
if (isset($_FILES['image']) && $_FILES['image']['error'] === 0) {
$imageName = uniqid() . '-' . basename($_FILES['image']['name']);
move_uploaded_file($_FILES['image']['tmp_name'], 'assets/images/' . $imageName);
}
$stmt = $pdo->prepare('INSERT INTO products (name, description, price, image) VALUES (?, ?, ?, ?)');
$stmt->execute([$name, $description, $price, $imageName]);
echo "Produk berhasil ditambahkan.";
}
?>
<form method="POST" enctype="multipart/form-data" class="max-w-md space-y-4">
<input type="text" name="name" placeholder="Nama Produk" required class="w-full p-2 border rounded" />
<textarea name="description" placeholder="Deskripsi Produk" required class="w-full p-2 border rounded"></textarea>
<input type="number" step="0.01" name="price" placeholder="Harga Produk" required class="w-full p-2 border rounded" />
<input type="file" name="image" accept="image/*" class="w-full p-2 border rounded" />
<button type="submit" class="w-full bg-indigo-600 text-white p-2 rounded hover:bg-indigo-700">Tambah Produk</button>
</form>
11. Pengembangan dan Deployment
Setelah aplikasi berjalan baik di lokal, Anda bisa mengembangkan fitur seperti:
-
Integrasi gateway pembayaran (Midtrans, Doku, dll)
-
Fitur pencarian dan filter produk
-
Optimasi keamanan dan validasi input
-
Menggunakan framework PHP seperti Laravel untuk skala besar
-
Deployment ke hosting atau VPS dengan domain sendiri
Untuk deployment, Anda bisa menggunakan layanan hosting yang mendukung PHP dan MySQL, atau cloud server seperti DigitalOcean, AWS, dan lainnya.
12. Sumber Belajar dan Source Code
Berikut beberapa sumber belajar dan repository source code yang bisa Anda gunakan untuk memperdalam dan mempercepat pembuatan toko e-commerce dengan PHP:
Jangan lupa untuk selalu praktik dan bereksperimen dengan kode agar semakin mahir membangun aplikasi e-commerce yang sesuai kebutuhan Anda.