Senin, 22 Desember 2025

proses Login

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:

  1. Analisa kode login lama (biar nyambung)
  2. Struktur folder OOP
  3. Kode OOP (Database + Auth/Login)
  4. Alur login versi OOP (step-by-step)

1️⃣ Analisa singkat kode login lama (punyamu)

Kode kamu saat ini melakukan:

  1. Include koneksi (conn.php)
  2. Ambil input no_hp dan pass
  3. Query ke DB
  4. Cocokkan password (password_verify)
  5. Set session
  6. 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:

  1. 🔐 Middleware login (cek session)
  2. 🔄 Logout OOP
  3. 🧱 BaseModel (biar class makin ringkas)
  4. 🧩 Role admin / user
  5. 🚀 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 💪

0 komentar:

Posting Komentar

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Press Release Distribution