Panduan Lengkap Cara Membuat Website PHP Tanpa Framework dari Nol
Halo semuanya! Senang banget bisa berbagi lagi di sini. Kalau kamu baru memulai perjalanan di dunia web development, pasti sering banget mendengar saran seperti, "Langsung belajar Laravel aja!" atau "Hari gini masa masih pakai PHP native?"
Jujur aja, saran itu nggak sepenuhnya salah, tapi juga nggak sepenuhnya tepat. Belajar framework modern memang penting untuk produktivitas kerja di industri saat ini. Tapi, percaya deh sama aku, belajar cara membuat website PHP tanpa framework adalah fondasi paling berharga yang bisa kamu miliki sebagai seorang developer.
Tanpa memahami cara kerja dasar PHP, kamu bakal kebingungan saat framework yang kamu pakai mengalami error di tingkat bawah (low-level). Nah, di artikel kali ini, kita bakal bahas santai tapi mendalam tentang bagaimana menyusun struktur website PHP native dari nol, mulai dari koneksi databse, routing sederhana, hingga keamanan dasar.
Yuk, siapkan kopi atau teh hangat kamu, dan mari kita koding bareng!
Kenapa Harus Belajar Native PHP Sebelum Pakai Framework?
Sebelum kita masuk ke bagian teknis dan baris kode, mari kita samakan persepsi dulu. Kenapa sih kita perlu repot-repot nulis kode tanpa bantuan framework seperti Laravel atau CodeIgniter?
+-------------------------------------------------------------+
| PEMAHAMAN WEB DEV |
+-------------------------------------------------------------+
| [ Framework (Laravel/CI) ] -> Abstrak & Magic Helper |
| [ Native PHP ] -> Fondasi HTTP, Routing, SQL |
+-------------------------------------------------------------+
1. Memahami Cara Kerja PHP Secara Mendalam
Saat pakai framework, banyak hal ajaib yang terjadi di balik layar (magic methods). Kamu tinggal panggil fungsi A, lalu data tiba-tiba muncul di layar. Tapi, apakah kamu tahu bagaimana data itu diproses dari HTTP request, dikirim ke database, lalu dikembalikan lagi? Dengan membuat website dari nol, kamu akan paham lifecycle aplikasi web secara utuh.
2. Performa Ringan dan Tanpa Overhead
Framework datang dengan ribuan file library yang terkadang tidak semuanya kamu butuhkan. Untuk projek kecil hingga menengah, seperti landing page interaktif atau sistem internal sederhana, PHP native menawarkan performa yang super cepat karena tidak ada overhead dari pemanggilan class yang tidak perlu.
3. Kemudahan Deployment
Deploy website PHP native ke shared hosting murah meriah itu rasanya gampang banget. Kamu cuma perlu unggah file lewat FTP atau File Manager cPanel, sesuaikan koneksi database, dan website langsung berjalan tanpa perlu konfiguarsi CLI yang rumit.
Persiapan Sebelum Mulai Coding
Sebelum membikin kodingan pertama kita, ada beberapa tools dan persipaan awal yang perlu kita sediakan di komputer lokal.
Tools yang Dibutuhkan:
- Web Server & Database Manager: Kamu bisa pakai Laragon (sangat aku rekomendasikan untuk pengguna Windows karena lebih ringan) atau XAMPP.
- Text Editor: Visual Studio Code dengan beberapa ekstensi pendukung seperti PHP Intelephense.
- Web Browser: Google Chrome atau Mozilla Firefox untuk melakukan testing dan debugging.
pastikan service Apache dan MySQL di Laragon atau XAMPP kamu sudah dalam kondisi Running ya!
Langkah-Langkah Membuat Website PHP Tanpa Framework
Dalam tutorial ini, kita tidak hanya akan menumpuk semua kode PHP dan HTML di dalam satu file index.php. Kita bakal menggunakan struktur folder yang rapi dan menerapkan pola arsitektur sederhana mirip MVC (Model-View-Controller) agar kode kita tidak berantakan (spaghetti code).
Langkah 1: Mengatur Struktur Folder Projek yang Rapi
Buat folder baru di dalam direktori htdocs (jika pakai XAMPP) atau www (jika pakai Laragon). Beri nama foldernya toko-native.
Susun struktur folder dan filenya seperti ini:
toko-native/
│
├── config/
│ └── database.php
├── app/
│ ├── controllers/
│ │ └── HomeController.php
│ └── models/
│ └── ProdukModel.php
├── views/
│ ├── layouts/
│ │ ├── header.php
│ │ └── footer.php
│ ├── home.php
│ └── detail.php
├── public/
│ ├── css/
│ │ └── style.css
│ └── js/
├── .htaccess
└── index.php
Dengan struktur di atas, file yang dipanggil langsung oleh publik hanyalah folder utama atau asset di public/, sehingga kode logika aplikasi kita tersimpan lebih aman.
Langkah 2: Membuat Koneksi Database Aman Menggunakan PDO
Jangan lagi memakai ekstensi mysqli_query() secara langsung tanpa prepared statements jika kamu membuat projek baru. Gunakan PDO (PHP Data Objects) karena jauh lebih aman dari serangan SQL Injection dan fleksibel jika suatu saat kamu ingin berganti tipe database (misal dari MySQL ke PostgreSQL).
Buat file di config/database.php dan isi dengan kode berikut:
<?php
// config/database.php
class Database {
private $host = "localhost";
private $db_name = "db_toko_native";
private $username = "root";
private $password = "";
public $conn;
public function getConnection() {
$this->conn = null;
try {
$this->conn = new PDO(
"mysql:host=" . $this->host . ";dbname=" . $this->db_name,
$this->username,
$this->password
);
// Mengatur error mode ke Exception
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Mengatur default fetch mode ke Association Array
$this->conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $exception) {
echo "Koneksi database gagal: " . $exception->getMessage();
}
return $this->conn;
}
}
?>
Langkah 3: Membuat Sistem Routing Sederhana
Salah satu alasan orang malas pakai PHP native adalah URL-nya yang keliatan jelek, misalnya: website.com/index.php?page=detail&id=5. Nah, kita bisa membuat URL yang cantik dan SEO-friendly seperti website.com/detail/5 hanya dengan memanfaatkan .htaccess dan sistem routing sederhana.
Pertama, buat file .htaccess di direktori utama projek kamu:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
Aturan di atas membikin semua request halaman diarahkan ke file index.php sebagai pintu masuk tunggal (Front Controller).
Selanjutnya, isi file index.php di direktori utama:
<?php
// index.php
// Memanggil file konfigurasi
require_once 'config/database.php';
// Mengambil parameter URL
$url = isset($_GET['url']) ? rtrim($_GET['url'], '/') : 'home';
$url = filter_var($url, FILTER_SANITIZE_URL);
$urlParams = explode('/', $url);
// Routing Sederhana
$page = $urlParams[0];
switch ($page) {
case 'home':
require_once 'app/controllers/HomeController.php';
$controller = new HomeController();
$controller->index();
break;
case 'detail':
$id = isset($urlParams[1]) ? $urlParams[1] : null;
require_once 'app/controllers/HomeController.php';
$controller = new HomeController();
$controller->detail($id);
break;
default:
// Tampilkan halaman 404 jika rute tidak ditemukan
http_response_code(404);
echo "<h1>404 - Halaman Tidak Ditemukan</h1>";
break;
}
?>
Langkah 4: Membuat Templating Layout (Header, Footer & Views)
Biar kamu nggak perlu menulis ulang tag <html>, <head>, dan menu navigasi di setiap halman, kita pisahkan bagian header dan footer.
Buat file views/layouts/header.php:
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Toko Online Native PHP</title>
<style>
body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; margin: 0; padding: 0; color: #333; }
header { background: #2c3e50; color: #fff; padding: 1rem 0; text-align: center; }
.container { width: 85%; margin: auto; overflow: hidden; padding: 20px; }
.card { border: 1px solid #ddd; padding: 15px; margin-bottom: 15px; border-radius: 5px; background: #fff; }
footer { background: #2c3e50; color: #fff; text-align: center; padding: 1rem 0; margin-top: 30px; }
</style>
</head>
<body>
<header>
<h1>Warung Digital Indonesia</h1>
</header>
<div class="container">
Buat file views/layouts/footer.php:
</div> <!-- End Container -->
<footer>
<p>© <?php echo date('Y'); ?> Toko Native PHP - Dibuat dengan Cinta</p>
</footer>
</body>
</html>
Langkah 5: Implementasi Model dan Controller (CRUD Basic)
Sekarang mari kita coba buat fitur mengambil data dari databse dan mengeluarkannya ke tampilan view.
Buat file app/models/ProdukModel.php:
<?php
// app/models/ProdukModel.php
class ProdukModel {
private $db;
public function __construct() {
$database = new Database();
$this->db = $database->getConnection();
}
// Mengambil semua data produk
public function getAllProduk() {
$query = "SELECT * FROM produk ORDER BY id DESC";
$stmt = $this->db->prepare($query);
$stmt->execute();
return $stmt->fetchAll();
}
// Mengambil produk berdasarkan ID
public function getProdukById($id) {
$query = "SELECT * FROM produk WHERE id = :id";
$stmt = $this->db->prepare($query);
$stmt->bindParam(':id', $id);
$stmt->execute();
return $stmt->fetch();
}
}
?>
Selanjutnya, buat app/controllers/HomeController.php:
<?php
// app/controllers/HomeController.php
require_once 'app/models/ProdukModel.php';
class HomeController {
private $model;
public function __construct() {
$this->model = new ProdukModel();
}
public function index() {
$produkList = $this->model->getAllProduk();
// Load view
require_once 'views/layouts/header.php';
require_once 'views/home.php';
require_once 'views/layouts/footer.php';
}
public function detail($id) {
if (!$id) {
header('Location: index.php');
exit;
}
$produk = $this->model->getProdukById($id);
require_once 'views/layouts/header.php';
require_once 'views/detail.php';
require_once 'views/layouts/footer.php';
}
}
?>
Dan terakhir untuk tampilan halman utama, isi file views/home.php:
<!-- views/home.php -->
<h2>Daftar Produk Terbaru</h2>
<?php if (!empty($produkList)): ?>
<?php foreach ($produkList as $item): ?>
<div class="card">
<h3><?php echo htmlspecialchars($item['nama_produk']); ?></h3>
<p>Harga: Rp <?php echo number_format($item['harga'], 0, ',', '.'); ?></p>
<a href="detail/<?php echo $item['id']; ?>">Lihat Detail</a>
</div>
<?php endforeach; ?>
<?php else: ?>
<p>Belum ada produk yang tersedia saat ini.</p>
<?php endif; ?>
3 Fitur Keamanan Wajib untuk Website PHP Native
Banyak orang mengira website PHP native itu mudah di-hack. Padahal, yang bikin rentan itu bukan bahasa PHP-nya, melainkan kodingan developer-nya sendiri yang lupa menerapkan standar keamanan.
Berikut 3 hal mendasar yang WAJIB ada di website kamu:
1. Cegah XSS (Cross-Site Scripting)
Selalu gunakan fungsi htmlspecialchars() saat menampilkan data masukan dari user ke layar browser. Ini mencegah peretas memasukkan script JavaScript berbahaya ke dalam database kamu.
// CONTOH SALAH
echo $_POST['user_input'];
// CONTOH BENAR
echo htmlspecialchars($_POST['user_input'], ENT_QUOTES, 'UTF-8');
2. Gunakan Prepared Statements (Anti SQL Injection)
Hindari menggabungkan variabel string langsung ke dalam query SQL.
// CONTOH SALAH (Sangat Berbahaya!)
$query = "SELECT * FROM users WHERE email = '" . $email . "'";
// CONTOH BENAR (Menggunakan PDO Prepared Statement)
$stmt = $db->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute(['email' => $email]);
3. Proteksi Session Hijacking
Jika website kamu menggunakan fitur login, pastikan untuk selalu meregenerasi ID sesi pengguna setelah mereka berhasil verifikasi password.
session_start();
// Setelah verifikasi password sukses:
session_regenerate_id(true);
$_SESSION['user_logged_in'] = true;
Tips Mengelola Website Native PHP Agar Tetap Clean Code
Biar projek PHP kamu nggak gampang jadi sarang monster kode yang susah di-maintain, berikut beberapa tips personal dari aku:
| Tips | Penjelasan Ringkas |
|---|---|
| Gunakan Composer (Autoloading) | Manfaatkan Composer PSR-4 autoloading agar kamu tidak perlu menulis ribuan baris require_once di atas file. |
| Pisahkan Konfigurasi & Environment | Simpan kredensial penting (seperti password database) di file .env, jangan di-hardcode di file PHP. |
| Gunakan Helper Function | Buat fungsi pembantu untuk hal-hal berulang, seperti fungsi sanitasi data, formatting mata uang Rupiah, atau redirect halaman. |
Kapan Waktu yang Tepat Pindah ke Framework Seperti Laravel?
Mungkin kamu bertanya-tanya, "Mbak, kalau native PHP udah serapi ini, kapan dong aku perlu pindah ke Laravel atau CodeIgniter?"
Jawabannya sederhana: pindahlah ketika skala projek dan jumlah tim kamu bertambah.
Framework seperti Laravel sangat bagus dipakai ketika:
- Kamu bekerja dalam tim besar yang butuh standar struktur kode yang seragam.
- Aplikasi membutuhkan fitur kompleks secara cepat (seperti OAuth, queue jobs, automated testing, dan WebSockets).
- Tenggat waktu pengerjaan projek (deadline) sangat mepet.
Namun, kalau projek kamu masih skala kecil, butuh hosting hemat, atau tujuannya untuk mengasah skill dasar logika koding, membuat website PHP tanpa framework tetap menjadi pilihan terbaik.
Kesimpulan
Membuat website PHP tanpa framework memang butuh usaha lebih di awal karena kita harus membangun fondasinya sendiri. Mulai dari urusan routing, koneksi database PDO, hingga keamanan session. Tapi percayalah, proses ini bakal bikin pemahaman logika pemrograman kamu berkembang pesat melebihi teman-teman kamu yang cuma tahu pakai framework tanpa paham dasarnya.
Langkah selanjutnya yang bisa kamu coba:
- Praktikkan struktur kode di atas di komputer lokal kamu.
- Coba tambahkan fitur Form Tambah Produk menggunakan metode HTTP POST.
- Buat fitur sistem Login Admin sederhana dengan proteksi
session.
Semoga tutorial ini membantu dan bermanfaat buat proses belajar kamu ya! Jangan ragu buat terus coba-coba dan jangan takut ketemu error, karena dari error itulah kita belajar jadi developer yang lebih tangguh.
Selamat mencobaa dan happy coding!
