PHP - MySQL Login: A Guide for Beginners

Hai teman-teman pengembang web yang bersemangat! Hari ini, kita akan memulai perjalanan yang menarik ke dunia PHP dan MySQL untuk membuat sistem login yang sederhana tapi kuat. Sebagai seseorang yang telah mengajar hal ini selama tahun tahun, saya bisa katakan bahwa menguasai keterampilan ini seperti membuka pintu rahasia di dunia pengembangan web. Jadi, mari kita roll up our sleeves dan masuk ke dalam!

PHP - MySQL Login

Mengenal Gambaran Umum

Sebelum kita mulai mengoding, mari kitaambil sedikit waktu untuk memahami apa yang kita ingin capai. Bayangkan Anda sedang membangun sebuah rumah kayu. Anda memerlukan dasar yang kuat, dinding, atap, dan cara untuk masuk dan keluar. Sistem login PHP-MySQL kita mirip dengan ini:

  • Config.php: Ini adalah dasar kita, untuk menghubungkan kita ke database.
  • Login.php: Pensehat pintu ke rumah kayu kita.
  • Session.php: Ini mencatat siapa yang dalam rumah kayu.
  • Welcome.php: interior nyaman tempat pengguna resmi berada.
  • Logout.php: Tanda keluar, menunjukkan pengguna jalan keluar.

Sekarang, mari kita bangun setiap bagian langkah demi langkah!

Config.php: Menyusun Dasar

Berkas ini seperti salam rahasia antara PHP dan MySQL. Ini tempat kita menyimpan detail koneksi database kita.

<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'login_demo');

$conn = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);

if($conn === false){
die("ERROR: Tidak dapat terhubung. " . mysqli_connect_error());
}
?>

Mari kitauraikan ini:

  • Kita menggunakan define() untuk menetapkan konstanta untuk detail database kita.
  • mysqli_connect() mengatur koneksi ke database MySQL kita.
  • Jika koneksi gagal, kita gunakan die() untuk menghentikan eksekusi dan menampilkan pesan kesalahan.

Tips Profesional: Jangan pernah berbagi kredensial database Anda yang sebenarnya! Contoh ini menggunakan nilai default, tetapi dalam proyek nyata, simpan ini secara rahasia!

Login.php: Penjaga Gerbang

Ini adalah tempat magis terjadi. Pengguna memasukkan kredensialnya, dan kita memeriksa apakah mereka diizinkan masuk.

<?php
session_start();
require_once "config.php";

if($_SERVER["REQUEST_METHOD"] == "POST"){
$username = trim($_POST["username"]);
$password = trim($_POST["password"]);

$sql = "SELECT id, username, password FROM users WHERE username = ?";

if($stmt = mysqli_prepare($conn, $sql)){
mysqli_stmt_bind_param($stmt, "s", $param_username);
$param_username = $username;

if(mysqli_stmt_execute($stmt)){
mysqli_stmt_store_result($stmt);

if(mysqli_stmt_num_rows($stmt) == 1){
mysqli_stmt_bind_result($stmt, $id, $username, $hashed_password);
if(mysqli_stmt_fetch($stmt)){
if(password_verify($password, $hashed_password)){
session_start();
$_SESSION["loggedin"] = true;
$_SESSION["id"] = $id;
$_SESSION["username"] = $username;
header("location: welcome.php");
} else{
$login_err = "Username atau kata sandi salah.";
}
}
} else{
$login_err = "Username atau kata sandi salah.";
}
} else{
echo "Ups! Ada yang salah. Silakan coba lagi nanti.";
}
mysqli_stmt_close($stmt);
}
mysqli_close($conn);
}
?>

<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h2>Login</h2>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div>
<label>Username</label>
<input type="text" name="username" required>
</div>
<div>
<label>Password</label>
<input type="password" name="password" required>
</div>
<div>
<input type="submit" value="Login">
</div>
</form>
</body>
</html>

Wah, itu banyak sekali! Mari kitauraikan ini:

  • Kita memulai sesi dan menyertakan berkas config.
  • Kita memeriksa jika formulir dikirim menggunakan POST.
  • Kita menggunakan pernyataan yang dipersiapkan untuk mencegah SQL injection (kerentanan keamanan umum).
  • Kita memverifikasi kata sandi menggunakan password_verify() (selalu hash kata sandi dalam proyek nyata!).
  • Jika login sukses, kita menetapkan variabel sesi dan mengalihkan ke welcome.php.
  • Kita juga memiliki formulir HTML sederhana untuk pengguna memasukkan kredensialnya.

Ingat, dalam aplikasi dunia nyata, Anda ingin menambahkan lebih banyak langkah keamanan dan penanganan kesalahan!

Session.php: Penjaga Pintu

Berkas ini memeriksa jika pengguna sudah login. Jika tidak, ia mengirim mereka kembali ke halaman login.

<?php
session_start();

if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: login.php");
exit;
}
?>

Pendek dan manis! Kode ini:

  • Memulai sesi.
  • Memeriksa jika pengguna sudah login.
  • Jika tidak, mengalihkan mereka ke halaman login.

Welcome.php: Area VIP

Ini adalah tempat pengguna akhirnya berada setelah login sukses.

<?php
require_once "session.php";
?>

<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Welcome</title>
</head>
<body>
<h1>Hai, <b><?php echo htmlspecialchars($_SESSION["username"]); ?></b>. Selamat datang ke situs kami.</h1>
<p>
<a href="logout.php">Keluar</a>
</p>
</body>
</html>

Ini apa yang terjadi:

  • Kita menyertakan session.php untuk memastikan hanya pengguna yang login dapat mengakses halaman ini.
  • Kita menampilkan pesan selamat datang personal dengan menggunakan username yang disimpan di sesi.
  • Kita menyediakan tautan untuk keluar.

Logout.php: Pintu Keluar

Akhirnya, kita butuh cara untuk pengguna keluar secara aman.

<?php
session_start();
$_SESSION = array();
session_destroy();
header("location: login.php");
exit;
?>

Skrip ini:

  • Memulai sesi.
  • Menghapus semua variabel sesi.
  • Menghancurkan sesi.
  • Mengalihkan pengguna kembali ke halaman login.

Menggabungkan Semua

Sekarang kita telah membuat semua bagian, mari kita ringkaskan bagaimana mereka bekerja bersama:

Berkas Tujuan Fungsi Kunci
Config.php Koneksi database mysqli_connect()
Login.php Autentikasi pengguna mysqli_prepare(), password_verify()
Session.php Manajemen sesi session_start(), $_SESSION pemeriksaan
Welcome.php Halaman pengguna resmi Menampilkan konten personal
Logout.php Mengakhiri sesi pengguna session_destroy()

Dan begitu juga! Anda baru saja membuat sistem login PHP-MySQL dasar. Ingat, ini hanya awal. Dalam aplikasi dunia nyata, Anda ingin menambahkan fitur seperti:

  • Fungsi reset kata sandi
  • Pilihan ingat saya
  • Penanganan kesalahan yang lebih robust
  • Langkah keamanan yang ditingkatkan

Terus latih, tetap ciek, dan sebelum Anda mengetahui, Anda akan membuat aplikasi web kompleks dengan mudah. Selamat coding, para ahli web masa depan!

Credits: Image by storyset