Membuat Login PHP dan Register PHP versi PDO – Episode 2.2

Berikut adalah rangkuman langkah-langkah untuk membuat fitur login dan register menggunakan PHP dengan PDO (PHP Data Objects). PDO lebih aman daripada mysqli_query() karena mendukung prepared statements, yang melindungi aplikasi Anda dari serangan SQL Injection.

1. Persiapan Database

  • Buat database di MySQL (misalnya db_login).
  • Buat tabel pengguna (users) dengan struktur sebagai berikut:
sqlCopy codeCREATE TABLE users (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  • Kolom password harus di-hash, sehingga menggunakan bcrypt atau algoritma hashing lainnya untuk keamanan.

2. Konfigurasi Koneksi Database dengan PDO

  • Buat file config.php untuk mengatur koneksi ke database menggunakan PDO.
phpCopy code<?php
$host = 'localhost';
$dbname = 'db_login';  // nama database
$username = 'root';    // username database
$password = '';        // password database

try {
    // Membuat koneksi PDO
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    // Menetapkan mode error PDO ke Exception
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo "Koneksi gagal: " . $e->getMessage();
}
?>

3. Fitur Register

  • Buat form register di file register.php:
phpCopy code<form method="post" action="register.php">
    <label for="username">Username:</label>
    <input type="text" name="username" required>
    <label for="email">Email:</label>
    <input type="email" name="email" required>
    <label for="password">Password:</label>
    <input type="password" name="password" required>
    <button type="submit" name="register">Register</button>
</form>
  • Proses penyimpanan data di register.php:
phpCopy code<?php
include('config.php');

if (isset($_POST['register'])) {
    $username = $_POST['username'];
    $email = $_POST['email'];
    $password = $_POST['password'];
    
    // Hash password sebelum disimpan
    $hashed_password = password_hash($password, PASSWORD_DEFAULT);

    try {
        // Menyimpan data ke database menggunakan prepared statement
        $query = "INSERT INTO users (username, email, password) VALUES (:username, :email, :password)";
        $stmt = $pdo->prepare($query);
        $stmt->bindParam(':username', $username);
        $stmt->bindParam(':email', $email);
        $stmt->bindParam(':password', $hashed_password);
        $stmt->execute();
        
        echo "Registration successful!";
    } catch (PDOException $e) {
        echo "Error: " . $e->getMessage();
    }
}
?>

4. Fitur Login

  • Buat form login di file login.php:
phpCopy code<form method="post" action="login.php">
    <label for="username">Username:</label>
    <input type="text" name="username" required>
    <label for="password">Password:</label>
    <input type="password" name="password" required>
    <button type="submit" name="login">Login</button>
</form>
  • Proses verifikasi login di login.php:
phpCopy code<?php
session_start();
include('config.php');

if (isset($_POST['login'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    
    try {
        // Cek apakah username ada dalam database
        $query = "SELECT * FROM users WHERE username = :username";
        $stmt = $pdo->prepare($query);
        $stmt->bindParam(':username', $username);
        $stmt->execute();

        $user = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if ($user) {
            // Verifikasi password menggunakan password_verify
            if (password_verify($password, $user['password'])) {
                $_SESSION['user_id'] = $user['id'];
                $_SESSION['username'] = $user['username'];
                header('Location: dashboard.php'); // Arahkan ke halaman setelah login
            } else {
                echo "Incorrect password!";
            }
        } else {
            echo "Username not found!";
        }
    } catch (PDOException $e) {
        echo "Error: " . $e->getMessage();
    }
}
?>

5. Menyimpan Status Login

  • Setelah login berhasil, Anda dapat menggunakan session untuk menyimpan status login pengguna dan mengaksesnya di halaman lain.
phpCopy code<?php
session_start();

if (isset($_SESSION['username'])) {
    echo "Welcome, " . $_SESSION['username'];
} else {
    echo "Please login first.";
}
?>

6. Logout

  • Untuk logout, cukup gunakan kode berikut di logout.php:
phpCopy code<?php
session_start();
session_destroy();
header('Location: login.php');
exit();
?>

7. Keamanan

  • Prepared Statements: Menggunakan prepared statements dengan PDO mencegah SQL Injection.
  • Password Hashing: Gunakan fungsi password_hash() untuk mengamankan password pengguna. Untuk memverifikasi password, gunakan password_verify().
  • Session Management: Gunakan session untuk mengelola status login dan pastikan sesi diakhiri setelah logout.
  • Validasi Input: Selalu validasi input dari pengguna untuk menghindari potensi masalah keamanan, seperti XSS (Cross-Site Scripting).

Catatan:

  • PDO menyediakan cara yang lebih fleksibel dan aman untuk berinteraksi dengan database dibandingkan dengan menggunakan mysqli_query().
  • Dengan menggunakan prepared statements pada PDO, Anda tidak perlu khawatir tentang SQL Injection, karena parameter query akan secara otomatis disanitasi.
Dengan langkah-langkah di atas, Anda telah berhasil membuat sistem login dan register menggunakan PHP dan PDO dengan aman.

Referensi Lainnya :

  • https://drive.google.com/file/d/1HP8zunG7DmvrpZA8fc8ocQCr2Us5z__L/view?usp=classroom_web&authuser=0
Tags :

Leave a Reply

Your email address will not be published. Required fields are marked *

13 + 10 =

Tutorial Terpopuler

Tutorial Pilihan

Tentang Gurututorku

Gurututorku adalah sebuah kursus online maupun offline yang menyediakan berbagai macam tutorial tentang pemrograman, design, dan multimedia serta artikel teknologi yang tentunya bisa dinikmati dan dipelajari oleh semua orang yang baru ingin belajar dunia IT.

© 2024 – Gurututorku.com | Learning today success tomorrow.