Praktik: Membuat halaman login sederhana

From OnnoWiki
Jump to navigation Jump to search

Tujuan Pembelajaran:

  • Memahami cara mengatur lingkungan pengembangan web menggunakan LAMP (Linux, Apache, MySQL, PHP) pada Ubuntu 24.04.
  • Membuat halaman login sederhana dengan PHP dan MySQL.
  • Mengimplementasikan dasar-dasar autentikasi pengguna.

Prasyarat:

  • Komputer dengan sistem operasi Ubuntu 24.04.
  • Akses ke terminal dengan hak akses sudo.
  • Koneksi internet untuk mengunduh paket yang diperlukan.

Langkah 1: Instalasi LAMP Stack

LAMP adalah singkatan dari Linux, Apache, MySQL, dan PHP. Berikut adalah langkah-langkah untuk menginstalnya:

1. Perbarui daftar paket:

sudo apt update

2. Instal Apache:

sudo apt install apache2

Setelah instalasi, verifikasi bahwa Apache berjalan:

sudo systemctl status apache2

Jika berjalan dengan baik, Anda akan melihat status "active (running)".

3. Instal MySQL:

sudo apt install mysql-server

Setelah instalasi, amankan instalasi MySQL dengan:

sudo mysql_secure_installation

Ikuti petunjuk untuk mengatur kata sandi root dan opsi keamanan lainnya.

4. Instal PHP:

sudo apt install php libapache2-mod-php php-mysql

Verifikasi instalasi PHP dengan membuat file `info.php` di direktori root web:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

Kemudian, buka `http://localhost/info.php` di browser Anda untuk melihat informasi PHP.

Langkah 2: Membuat Basis Data dan Tabel Pengguna

1. Masuk ke MySQL:

sudo mysql -u root -p

Masukkan kata sandi root yang telah Anda atur sebelumnya.

2. Buat basis data baru:

CREATE DATABASE login_system;

3. Gunakan basis data tersebut:

USE login_system;


4. Buat tabel `users`:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL
);

Tabel ini akan menyimpan nama pengguna dan kata sandi yang telah di-hash.

Langkah 3: Membuat Formulir Login dengan PHP

1. Buat file `index.php` di direktori root web:

 <?php
 session_start();
 ?>
 <!DOCTYPE html>
 <html>
 <head>
     <title>Login</title>
     <style>
         body {
             font-family: Arial, sans-serif;
             background-color: #f2f2f2;
             display: flex;
             justify-content: center;
             align-items: center;
             height: 100vh;
         }
         .container {
             background-color: #fff;
             padding: 20px;
             border-radius: 5px;
             box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
         }
         input[type="text"], input[type="password"] {
             width: 100%;
             padding: 10px;
             margin: 5px 0 15px 0;
             border: 1px solid #ccc;
             border-radius: 4px;
         }
         button {
             background-color: #4CAF50;
             color: white;
             padding: 10px 15px;
             border: none;
             border-radius: 4px;
             cursor: pointer;
         }
         button:hover {
             background-color: #45a049;
         }
         .error {
             color: red;
         }
     </style>
 </head>
 <body>
      <div class="container">
         <h2>Login</h2>
         <?php
         if (isset($_SESSION['error'])) {
             echo '<p class="error">' . $_SESSION['error'] . '</p>';
             unset($_SESSION['error']);
         }
         ?>
         <form action="login.php" method="post">
             <label for="username">Username</label>
             <input type="text" id="username" name="username" required>
             <label for="password">Password</label>
             <input type="password" id="password" name="password" required>
             <button type="submit">Login</button>
         </form>
     </div>
 </body>
 </html>

Kode di atas membuat formulir login dengan bidang untuk nama pengguna dan kata sandi.

2. Buat file `login.php` untuk memproses login:

 <?php
 session_start();
 
 // Membuat koneksi ke database
 $mysqli = new mysqli("localhost", "root", "", "login_system"); 
 
 // Periksa koneksi
 if ($mysqli->connect_error) {
     die("Koneksi gagal: " . $mysqli->connect_error);
 }
 
 // Periksa apakah metode request adalah POST
 if ($_SERVER["REQUEST_METHOD"] == "POST") {
     // Mencegah SQL Injection dengan prepared statements
     $stmt = $mysqli->prepare("SELECT id, username, password FROM users WHERE username = ?");
     $stmt->bind_param("s", $username);
 
     // Ambil data dari form
     $username = $_POST['username'];
     $password = $_POST['password'];
 
     // Eksekusi statement
     $stmt->execute();
     $result = $stmt->get_result();
 
     // Periksa apakah username ditemukan
     if ($result->num_rows == 1) {
         $user = $result->fetch_assoc();
         // Verifikasi password
         if (password_verify($password, $user['password'])) {
             // Password benar, buat session
             $_SESSION['user_id'] = $user['id'];
             $_SESSION['username'] = $user['username'];
             // Redirect ke halaman dashboard atau halaman lain yang diinginkan
             header("Location: dashboard.php");
             exit();
         } else {
             // Password salah
             $error = "Password yang Anda masukkan salah.";
         }
     } else {
         // Username tidak ditemukan
         $error = "Username tidak ditemukan.";
     } 
 
     // Tutup statement
     $stmt->close();
 }
 
 // Tutup koneksi
 $mysqli->close();
 ?>

Pranala Menarik