Berikut adalah rangkuman langkah-langkah untuk membuat fitur login dan register menggunakan PHP native dan mysqli_query()
(tanpa menggunakan prepared statements):
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
- Buat file
config.php
untuk mengatur koneksi ke database.
phpCopy code<?php
$host = 'localhost';
$username = 'root'; // username database
$password = ''; // password database
$dbname = 'db_login'; // nama database
// Koneksi ke MySQL
$conn = mysqli_connect($host, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
?>
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 = password_hash($_POST['password'], PASSWORD_DEFAULT); // Hash password
$query = "INSERT INTO users (username, email, password) VALUES ('$username', '$email', '$password')";
if (mysqli_query($conn, $query)) {
echo "Registration successful!";
} else {
echo "Error: " . mysqli_error($conn);
}
}
?>
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'];
$query = "SELECT * FROM users WHERE username = '$username'";
$result = mysqli_query($conn, $query);
if (mysqli_num_rows($result) > 0) {
$user = mysqli_fetch_assoc($result);
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!";
}
}
?>
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
- Validasi Input: Selalu validasi input dari pengguna untuk menghindari serangan seperti SQL Injection dan Cross-Site Scripting (XSS). Meskipun kode ini menggunakan
mysqli_query()
, sebaiknya hindari menggunakan query langsung seperti ini, dan lebih baik menggunakan prepared statements untuk meningkatkan keamanan. - Password Hashing: Gunakan
password_hash()
danpassword_verify()
untuk mengelola password dengan aman. Jangan pernah menyimpan password dalam bentuk teks biasa. - Session Management: Gunakan session untuk mengelola status login dan pastikan sesi diakhiri setelah logout.
Catatan Penting:
Penggunaan mysqli_query()
dalam kode di atas berisiko terhadap serangan SQL Injection jika input dari pengguna tidak dibersihkan dengan benar. Oleh karena itu, sangat disarankan untuk selalu menggunakan prepared statements atau mysqli_real_escape_string() saat menangani input pengguna.
Namun, jika Anda ingin menggunakan mysqli_query()
, pastikan Anda sudah memvalidasi dan membersihkan input dengan hati-hati untuk mengurangi risiko tersebut.
Dengan mengikuti langkah-langkah di atas, Anda dapat membuat sistem login dan register menggunakan PHP native dan mysqli_query()
.
Referensi Lainnya :
- https://drive.google.com/file/d/1HP8zunG7DmvrpZA8fc8ocQCr2Us5z__L/view?usp=classroom_web&authuser=0