Siap 👍
Kita ubah login prosedural ini ke OOP dengan struktur rapi, profesional, dan mudah dipahami, tapi tetap sederhana supaya nyantol.
Aku akan bagi jadi 4 bagian inti:
- Analisa kode login lama (biar nyambung)
- Struktur folder OOP
- Kode OOP (Database + Auth/Login)
- Alur login versi OOP (step-by-step)
1️⃣ Analisa singkat kode login lama (punyamu)
Kode kamu saat ini melakukan:
- Include koneksi (
conn.php) - Ambil input
no_hpdanpass - Query ke DB
- Cocokkan password (
password_verify) - Set session
- Redirect
👉 Masalah utama:
- Semua logic campur di satu file
- Sulit dirawat
- Tidak reusable
- Tidak scalable
2️⃣ Struktur folder OOP (MINIMAL & IDEAL)
Gunakan ini dulu:
/login-oop
│
├── config/
│ ├── Database.php
│ └── init.php
│
├── models/
│ └── Auth.php
│
├── process/
│ └── login.php
│
└── login.php (form)
3️⃣ KODE OOP (INTI)
📁 config/Database.php
<?php
class Database {
private $host = "localhost";
private $user = "root";
private $pass = "";
private $db = "nama_database";
public $conn;
public function __construct() {
$this->conn = new mysqli(
$this->host,
$this->user,
$this->pass,
$this->db
);
if ($this->conn->connect_error) {
die("Koneksi gagal: " . $this->conn->connect_error);
}
}
}
📌 Kenapa di constructor?
Karena setiap object Database dibuat → langsung terkoneksi
📁 models/Auth.php
<?php
class Auth {
private $conn;
public function __construct($db) {
$this->conn = $db;
}
public function login($no_hp, $password) {
$query = "SELECT * FROM tbl_pendaftar WHERE no_hp = ?";
$stmt = $this->conn->prepare($query);
$stmt->bind_param("s", $no_hp);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows === 1) {
$data = $result->fetch_assoc();
if (password_verify($password, $data['passhash'])) {
$_SESSION['id'] = $data['id'];
$_SESSION['id_daftar'] = $data['id_daftar'];
$_SESSION['nama'] = $data['nama'];
$_SESSION['foto'] = $data['foto'];
return true;
}
}
return false;
}
}
📌 Catatan penting:
- Tidak ada
echo - Tidak ada
header - Fokus logika login saja
📁 config/init.php
<?php
session_start();
date_default_timezone_set('Asia/Jakarta');
require_once __DIR__ . '/Database.php';
require_once __DIR__ . '/../models/Auth.php';
📌 File ini dipanggil di semua file proses
📁 process/login.php
<?php
require_once '../config/init.php';
if (isset($_POST['login'])) {
$no_hp = $_POST['no_hp'];
$pass = $_POST['pass'];
$db = new Database();
$auth = new Auth($db->conn);
if ($auth->login($no_hp, $pass)) {
header("Location: ../user/?page=Home");
exit;
} else {
header("Location: ../login.php?error=1");
exit;
}
}
📌 File ini hanya bertugas:
- Terima input
- Panggil class
- Redirect
4️⃣ Alur login versi OOP (BIAR NANCAP)
🔁 Flow lengkap
FORM LOGIN
↓
process/login.php
↓
Database dibuat
↓
Auth::login()
↓
SELECT user
↓
password_verify()
↓
SESSION dibuat
↓
Redirect
5️⃣ Kenapa versi ini LEBIH KUAT?
✅ Aman (Prepared Statement)
✅ Rapi
✅ Bisa dipakai ulang
✅ Mudah dikembangkan
✅ Standar industri
6️⃣ Kalau mau lanjut (opsional tapi recommended)
Berikut upgrade tahap berikutnya:
- 🔐 Middleware login (cek session)
- 🔄 Logout OOP
- 🧱 BaseModel (biar class makin ringkas)
- 🧩 Role admin / user
- 🚀 MVC mini
Kalau mau, bilang saja:
“lanjut ke logout OOP”
atau
“jelaskan Auth::login baris per baris”
Aku temani sampai bener-bener paham, bukan sekadar jalan 💪
Desember 22, 2025
Posted in: 


0 komentar:
Posting Komentar