Membuat Form Login dengan PHP dan MySQL: Langkah Aman
Form login dengan PHP menghubungkan input pengguna ke proses pemeriksaan akun di server. Contoh berikut menggunakan PHP dan MySQL, dengan prepared statement untuk pencarian akun dan password_verify() untuk memeriksa kata sandi.
Login berguna saat sebuah website perlu membatasi akses berdasarkan akun. Agar contoh dapat diterapkan dengan aman, kata sandi harus disimpan sebagai hash, bukan teks biasa. Siapkan database terlebih dahulu, lalu ikuti alur dari form sampai sesi pengguna.
Mengenal Tentang PHP

PHP adalah singkatan dari Hypertext Preprocessor dan digunakan untuk membuat halaman web dinamis. Dalam proses login, PHP menerima data dari form, mengakses database, lalu menentukan apakah pengguna boleh masuk. Database menyimpan informasi akun yang diperlukan untuk pemeriksaan tersebut.
Langkah Membuat Menu Login dengan PHP

Contoh ini memakai PHP dengan MySQLi. Buat database dan sesuaikan nama database serta kredensial koneksi dengan lingkungan lokal Anda.
1. Menyiapkan database
Buat tabel untuk menyimpan nama pengguna dan hash kata sandi. Kolom password berukuran 255 karakter agar dapat menampung hash yang dihasilkan fungsi PHP.
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL
);Saat membuat akun, simpan hasil password_hash($password, PASSWORD_DEFAULT) ke kolom password. Jangan menyimpan kata sandi asli.
2. Menghubungkan PHP ke database
Buat file koneksi.php. Ganti nama database dan kredensial di bawah sesuai konfigurasi server. Jangan menampilkan detail koneksi kepada pengunjung jika koneksi gagal.
<?php
$host = "localhost";
$username = "root";
$password = "";
$database = "nama_database"; $conn = new mysqli($host, $username, $password, $database);
if ($conn->connect_error) { die("Koneksi database gagal.");
}
$conn->set_charset("utf8mb4");
?>3. Membuat form login
Simpan form berikut sebagai index.php. Atribut name pada setiap input harus sama dengan nama field yang dibaca oleh file pemroses.
<!DOCTYPE html>
<html lang="id">
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Login</title>
</head>
<body> <h1>Login</h1> <form action="proses_login.php" method="post"> <label for="username">Nama pengguna</label> <input type="text" id="username" name="username" required> <label for="password">Kata sandi</label> <input type="password" id="password" name="password" required> <button type="submit">Masuk</button> </form>
</body>
</html>4. Memproses login
Buat proses_login.php untuk mengambil data dari form. Prepared statement memisahkan perintah SQL dari input pengguna, sedangkan password_verify() membandingkan kata sandi yang dikirim dengan hash di database.
<?php
session_start();
require "koneksi.php"; $username = trim($_POST["username"] ?? "");
$password = $_POST["password"] ?? ""; $stmt = $conn->prepare("SELECT id, username, password FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_assoc(); if ($user && password_verify($password, $user["password"])) { session_regenerate_id(true); $_SESSION["user_id"] = $user["id"]; $_SESSION["username"] = $user["username"]; header("Location: welcome.php"); exit;
} http_response_code(401);
echo "Nama pengguna atau kata sandi salah.";
?>Pesan gagal dibuat sama untuk nama pengguna dan kata sandi agar halaman tidak mengungkap akun mana yang terdaftar. Pada website yang digunakan publik, tambahkan pembatasan percobaan login dan token CSRF sesuai kebutuhan aplikasi.
5. Menampilkan halaman setelah login
Buat welcome.php. Pemeriksaan sesi mencegah pengunjung yang belum login membuka halaman ini secara langsung. Escape nama pengguna sebelum ditampilkan ke halaman.
<?php
session_start(); if (!isset($_SESSION["user_id"])) { header("Location: index.php"); exit;
} $username = htmlspecialchars($_SESSION["username"], ENT_QUOTES, "UTF-8");
?>
<!DOCTYPE html>
<html lang="id">
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Selamat datang</title>
</head>
<body> <h1>Selamat datang, <?php echo $username; ?>!</h1> <p><a href="logout.php">Logout</a></p>
</body>
</html>6. Membuat logout
File logout.php mengakhiri sesi saat pengguna memilih logout, lalu mengarahkan kembali ke form login.
<?php
session_start();
$_SESSION = [];
session_destroy(); header("Location: index.php");
exit;
?>Pentingnya Membuat Menu Login
Login diperlukan ketika website menyediakan halaman atau data yang hanya boleh diakses oleh pengguna tertentu. Namun, tidak semua website membutuhkan akun. Tentukan kebutuhan akses terlebih dahulu agar pengunjung tidak diminta membuat akun tanpa alasan yang jelas.
Manfaat login bergantung pada cara fitur tersebut diterapkan. Beberapa kegunaannya antara lain:

1. Membatasi akses
Login membantu membatasi halaman tertentu untuk pengguna yang sudah terverifikasi. Pengelola tetap perlu memeriksa izin pada setiap halaman yang dilindungi, bukan hanya menyembunyikan tautannya dari menu.
2. Menyediakan pengalaman personal
Setelah pengguna masuk, website dapat menampilkan informasi yang terkait dengan akunnya, seperti preferensi atau riwayat layanan. Data yang dikumpulkan sebaiknya dibatasi pada kebutuhan fitur.
3. Membantu analisis penggunaan
Aktivitas akun dapat membantu pengelola memahami penggunaan fitur. Tetapkan tujuan pencatatan dan perlakukan data pengguna sesuai kebijakan privasi website.
Untuk akun yang membutuhkan perlindungan tambahan, autentikasi dua faktor dapat menjadi lapisan verifikasi lain. Informasi tentang teknologi otentikasi dua faktor dapat membantu memahami konsep tersebut.
Fungsi Menu Login
Menu login menjadi titik awal untuk mengelola akses berbasis akun. Fungsi yang dapat diterapkan meliputi:
- Mengidentifikasi pengguna berdasarkan akun yang terdaftar.
- Membatasi akses ke halaman sesuai status login dan hak akses.
- Mengelola sesi selama pengguna menggunakan website.
- Menampilkan konten berdasarkan informasi akun jika fitur tersebut diperlukan.
- Menyediakan proses logout untuk mengakhiri sesi pengguna.
- Mendukung pencatatan aktivitas sesuai kebutuhan operasional dan kebijakan privasi.
Contoh di atas membentuk alur dasar membuat form login dengan PHP dan MySQL: tabel pengguna menyimpan hash kata sandi, form mengirim input, lalu PHP memeriksa akun dan membuat sesi. Sebelum digunakan di website publik, uji alur login dan logout serta pastikan setiap halaman terbatas memeriksa sesi dan hak akses.
Jika ingin mempelajari pemrograman lebih lanjut, Anda dapat mengenal program belajar dari Coding Studio, termasuk materi PHP dan pengembangan web.
