PHP - MySQL Login: A Panduan Pemula
Hai there, para pengembang web yang sedang belajar! Hari ini, kita akan memulai sebuah perjalanan menarik ke dunia PHP dan MySQL untuk membuat sebuah sistem login yang sederhana namun kuat. Sebagai seseorang yang telah mengajar hal ini selama tahun tahun, saya bisa katakan kepada Anda bahwa menguasai keterampilan ini seperti membuka pintu rahasia di dunia pengembangan web. Jadi, mari kita roll up our sleeves dan masuk ke dalam!
Memahami Gambaran Umum
Sebelum kita mulai mengoding, mari kitaambil sedikit waktu untuk memahami apa yang kita ingin capai. Bayangkan Anda membangun sebuah rumah kayu. Anda memerlukan dasar yang kuat, dinding, atap, dan cara untuk masuk dan keluar. Sistem login PHP-MySQL kita mirip seperti itu:
- Config.php: Ini adalah dasar kita, untuk menghubungkan kita ke database.
- Login.php: Picturing ini sebagai pintu masuk ke rumah kayu kita.
- Session.php: Ini mencatat siapa yang berada di dalam rumah kayu.
- Welcome.php: interior nyaman tempat pengguna yang berhak tinggal.
- Logout.php: Tanda keluar, menunjukkan pengguna jalan keluar.
Sekarang, mari kita bangun setiap bagian secara bertahap!
Config.php: Menata Dasar
Berkas ini seperti shakenya rahasia antara PHP dan MySQL. Ini tempat kita menyimpan rincian 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 mengatur konstan untuk rincian database kita. -
mysqli_connect()
membuat koneksi ke database MySQL kita. - Jika koneksi gagal, kita gunakan
die()
untuk menghentikan eksekusi dan menampilkan pesan kesalahan.
Tips Pro: 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 magik terjadi. Pengguna memasukkan kredensial mereka, 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 password salah.";
}
}
} else{
$login_err = "Username atau password salah.";
}
} else{
echo "Ups! Ada yang salah. Silakan coba lagi nanti.";
}
mysqli_stmt_close($stmt);
}
mysqli_close($conn);
}
?>
<!DOCTYPE html>
<html lang="en">
<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 hal untuk diterima! Mari kitauraikan ini:
- Kita memulai sesi dan menyertakan berkas konfig.
- Kita memeriksa apakah formulir dikirim menggunakan POST.
- Kita menggunakan pernyataan yang dipersiapkan untuk mencegah SQL injection (sebuah kerentanan keamanan umum).
- Kita memverifikasi kata sandi menggunakan
password_verify()
(selalu hash kata sandi dalam proyek nyata!). - Jika login sukses, kita mengatur variabel sesi dan mengalihkan ke welcome.php.
- Kita juga memiliki formulir HTML sederhana untuk pengguna memasukkan kredensial mereka.
Ingat, dalam aplikasi dunia nyata, Anda ingin menambahkan lebih banyak langkah keamanan dan penanganan kesalahan!
Session.php: Petugas Keselamatan
Berkas ini memeriksa apakah pengguna masuk. Jika tidak, dia 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 apakah pengguna masuk.
- Jika tidak, mengalihkan mereka ke halaman login.
Welcome.php: Area VIP
Ini adalah tempat pengguna akhirnya datang setelah login sukses.
<?php
require_once "session.php";
?>
<!DOCTYPE html>
<html lang="en">
<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 masuk dapat mengakses halaman ini.
- Kita menampilkan pesan selamat datang personal menggunakan username yang disimpan dalam 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 membangun 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 berhak | Menampilkan konten personal |
Logout.php | Mengakhiri sesi pengguna | session_destroy() |
Dan itu saja! Anda baru saja membuat sebuah sistem login PHP-MySQL dasar. Ingat, ini hanya awal. Dalam aplikasi dunia nyata, Anda ingin menambahkan fitur seperti:
- Fitur reset kata sandi
- Pilihan ingat saya
- Penanganan kesalahan yang lebih robust
- Langkah keamanan yang diperkuat
Terus latihan, tetap curiga, dan sebelum Anda tahu, Anda akan membuat aplikasi web kompleks dengan mudah. Selamat berkoding, para ahli web masa depan!
Credits: Image by storyset