Ditulis oleh : Muhammad Fathir Fatah

Nim : 607052430002

Kelas : D3 TT 48-02

PHP

config.php

<?php
// Menyimpan informasi koneksi ke database
$host = "localhost";      // Alamat server database (biasanya localhost untuk server lokal)
$user = "root";           // Username database (default XAMPP/WAMP adalah 'root')
$password = "";           // Password untuk user database (default kosong)
$database = "login_system"; // Nama database yang digunakan

// Membuat objek koneksi ke database menggunakan MySQLi
$koneksi = new mysqli($host, $user, $password, $database);

// Mengecek apakah koneksi gagal
if ($koneksi->connect_error) {
    // Jika gagal, hentikan program dan tampilkan pesan error
    die("Koneksi gagal: " . $koneksi->connect_error);
}

// Memulai sesi PHP
session_start();
?>

dashboard.php

<?php 
// Mengimpor file konfigurasi (untuk koneksi database dan session)
include 'config.php';

// Mengecek apakah user sudah login
if (!isset($_SESSION['username'])) {
    // Jika belum login, arahkan ke halaman login
    header("Location: login.php");
    exit();
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>Dashboard</title>
    <!-- Menghubungkan dengan file CSS -->
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container">
        <!-- Menampilkan pesan selamat datang beserta username dari session -->
        <h2>Selamat datang, <?php echo htmlspecialchars($_SESSION['username']); ?>!</h2>

        <!-- Tombol untuk logout -->
        <a href="logout.php" class="logout">Logout</a>
    </div>
</body>
</html>

login.php

<?php 
// Mengimpor konfigurasi database dan memulai session
include 'config.php'; 

// Jika user sudah login (session username sudah ada), arahkan ke dashboard
if (isset($_SESSION['username'])) {
    header("Location: dashboard.php");
    exit();
}

// Jika form dikirim dengan metode POST
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Ambil input dari form login
    $username = $_POST['username'];
    $password = $_POST['password'];

    // Siapkan query untuk mengambil data user berdasarkan username
    $stmt = $koneksi->prepare("SELECT id, username, password FROM users WHERE username = ?");
    $stmt->bind_param("s", $username); // Bind parameter untuk mencegah SQL Injection
    $stmt->execute();
    $result = $stmt->get_result();

    // Jika user ditemukan
    if ($result->num_rows == 1) {
        $user = $result->fetch_assoc();

        // Verifikasi password yang dimasukkan dengan password yang ada di database
        if (password_verify($password, $user['password'])) {
            // Jika cocok, simpan informasi user ke session
            $_SESSION['user_id'] = $user['id'];
            $_SESSION['username'] = $user['username'];
            
            // Arahkan ke dashboard
            header("Location: dashboard.php");
            exit();
        } else {
            // Password salah
            $error = "Password salah!";
        }
    } else {
        // Username tidak ditemukan
        $error = "Username tidak ditemukan!";
    }
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
    <!-- Menghubungkan ke file CSS -->
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container">
        <h2>Login</h2>

        <!-- Menampilkan pesan error jika ada -->
        <?php if (isset($error)) echo "<p class='error'>$error</p>"; ?>

        <!-- Form login -->
        <form method="POST">
            <input type="text" name="username" placeholder="Username" required>
            <input type="password" name="password" placeholder="Password" required>
            <button type="submit">Login</button>
        </form>

        <!-- Link untuk mendaftar akun baru -->
        <p>Belum punya akun? <a href="register.php">Daftar di sini</a></p>
    </div>
</body>
</html>

logout.php

<?php
// Mengimpor konfigurasi (terutama untuk memulai session)
include 'config.php';

// Menghapus semua data session
session_unset(); // Menghapus semua variabel session

// Menghancurkan session
session_destroy(); // Mengakhiri sesi saat ini

// Mengarahkan user kembali ke halaman login
header("Location: login.php");
exit();
?>

register.php


<?php include 'config.php'; ?> // Menghubungkan ke file konfigurasi database

<!DOCTYPE html>
<html>
<head>
    <title>Registrasi</title>
    <link rel="stylesheet" href="style.css"> <!-- Menghubungkan ke file CSS untuk tampilan -->
</head>
<body>
    <div class="container">
        <h2>Daftar Akun</h2>
        <?php
        // Memeriksa apakah form telah dikirim melalui metode POST
        if ($_SERVER["REQUEST_METHOD"] == "POST") {
            // Mengambil input dari form dan melakukan sanitasi untuk keamanan
            $username = htmlspecialchars($_POST['username']); // Mencegah serangan XSS
            $email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL); // Validasi format email
            $password = password_hash($_POST['password'], PASSWORD_DEFAULT); // Enkripsi password

            // Menyiapkan query untuk memasukkan data ke dalam database menggunakan prepared statement
            $stmt = $koneksi->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
            $stmt->bind_param("sss", $username, $email, $password); // Mengikat parameter ke dalam query
            
            // Mengeksekusi query dan menampilkan pesan berdasarkan hasilnya
            if ($stmt->execute()) {
                echo "<p class='success'>Registrasi berhasil! Silakan login.</p>";
            } else {
                echo "<p class='error'>Error: " . $stmt->error . "</p>"; // Menampilkan pesan kesalahan jika terjadi error
            }
        }
        ?>
        <!-- Form registrasi -->
        <form method="POST">
            <input type="text" name="username" placeholder="Username" required> <!-- Input untuk username -->
            <input type="email" name="email" placeholder="Email" required> <!-- Input untuk email -->
            <input type="password" name="password" placeholder="Password" required> <!-- Input untuk password -->
            <button type="submit">Daftar</button> <!-- Tombol submit untuk mengirim form -->
        </form>
        <p>Sudah punya akun? <a href="login.php">Login di sini</a></p> <!-- Link menuju halaman login -->
    </div>
</body>
</html>

MySQL

//Membuat database baru untuk sistem login
CREATE DATABASE login_system;

//Menggunakan database yang baru dibuat
USE login_system;

// Membuat tabel users untuk menyimpan data pengguna
CREATE TABLE users (
  id INT PRIMARY KEY AUTO_INCREMENT,    
  username VARCHAR(50) UNIQUE NOT NULL,  
  email VARCHAR(100) UNIQUE NOT NULL,    
  password VARCHAR(255) NOT NULL         
);