Berikut adalah rangkuman langkah-langkah untuk membuat fitur login dan register menggunakan PHP dengan PDO (PHP Data Objects). PDO lebih aman daripada mysqli_query()
karena mendukung prepared statements, yang melindungi aplikasi Anda dari serangan SQL Injection.
1. Persiapan Database
- Buat database di MySQL (misalnya
db_login
). - Buat tabel pengguna (
users
) dengan struktur sebagai berikut:
sqlCopy codeCREATE TABLE users (
id INT(11) AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
- Kolom
password
harus di-hash, sehingga menggunakanbcrypt
atau algoritma hashing lainnya untuk keamanan.
2. Konfigurasi Koneksi Database dengan PDO
- Buat file
config.php
untuk mengatur koneksi ke database menggunakan PDO.
phpCopy code<?php
$host = 'localhost';
$dbname = 'db_login'; // nama database
$username = 'root'; // username database
$password = ''; // password database
try {
// Membuat koneksi PDO
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
// Menetapkan mode error PDO ke Exception
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "Koneksi gagal: " . $e->getMessage();
}
?>
3. Fitur Register
- Buat form register di file
register.php
:
phpCopy code<form method="post" action="register.php">
<label for="username">Username:</label>
<input type="text" name="username" required>
<label for="email">Email:</label>
<input type="email" name="email" required>
<label for="password">Password:</label>
<input type="password" name="password" required>
<button type="submit" name="register">Register</button>
</form>
- Proses penyimpanan data di
register.php
:
phpCopy code<?php
include('config.php');
if (isset($_POST['register'])) {
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
// Hash password sebelum disimpan
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
try {
// Menyimpan data ke database menggunakan prepared statement
$query = "INSERT INTO users (username, email, password) VALUES (:username, :email, :password)";
$stmt = $pdo->prepare($query);
$stmt->bindParam(':username', $username);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':password', $hashed_password);
$stmt->execute();
echo "Registration successful!";
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
}
?>
4. Fitur Login
- Buat form login di file
login.php
:
phpCopy code<form method="post" action="login.php">
<label for="username">Username:</label>
<input type="text" name="username" required>
<label for="password">Password:</label>
<input type="password" name="password" required>
<button type="submit" name="login">Login</button>
</form>
- Proses verifikasi login di
login.php
:
phpCopy code<?php
session_start();
include('config.php');
if (isset($_POST['login'])) {
$username = $_POST['username'];
$password = $_POST['password'];
try {
// Cek apakah username ada dalam database
$query = "SELECT * FROM users WHERE username = :username";
$stmt = $pdo->prepare($query);
$stmt->bindParam(':username', $username);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if ($user) {
// Verifikasi password menggunakan password_verify
if (password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
header('Location: dashboard.php'); // Arahkan ke halaman setelah login
} else {
echo "Incorrect password!";
}
} else {
echo "Username not found!";
}
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
}
?>
5. Menyimpan Status Login
- Setelah login berhasil, Anda dapat menggunakan session untuk menyimpan status login pengguna dan mengaksesnya di halaman lain.
phpCopy code<?php
session_start();
if (isset($_SESSION['username'])) {
echo "Welcome, " . $_SESSION['username'];
} else {
echo "Please login first.";
}
?>
6. Logout
- Untuk logout, cukup gunakan kode berikut di
logout.php
:
phpCopy code<?php
session_start();
session_destroy();
header('Location: login.php');
exit();
?>
7. Keamanan
- Prepared Statements: Menggunakan prepared statements dengan PDO mencegah SQL Injection.
- Password Hashing: Gunakan fungsi
password_hash()
untuk mengamankan password pengguna. Untuk memverifikasi password, gunakanpassword_verify()
. - Session Management: Gunakan session untuk mengelola status login dan pastikan sesi diakhiri setelah logout.
- Validasi Input: Selalu validasi input dari pengguna untuk menghindari potensi masalah keamanan, seperti XSS (Cross-Site Scripting).
Catatan:
- PDO menyediakan cara yang lebih fleksibel dan aman untuk berinteraksi dengan database dibandingkan dengan menggunakan
mysqli_query()
. - Dengan menggunakan prepared statements pada PDO, Anda tidak perlu khawatir tentang SQL Injection, karena parameter query akan secara otomatis disanitasi.
Dengan langkah-langkah di atas, Anda telah berhasil membuat sistem login dan register menggunakan PHP dan PDO dengan aman.
Referensi Lainnya :
- https://drive.google.com/file/d/1HP8zunG7DmvrpZA8fc8ocQCr2Us5z__L/view?usp=classroom_web&authuser=0