Jumat, 21 Juni 2024

Membuat Form Login dan Register dengan PHP dan MySQLi

Untuk membuat form login dan register, perlu kita persiapkan dahulu database. Berikut script untuk membuat database login.db dan tabel users.

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(255) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL
);


Kemudian buat file dengan nama koneksi.php, dengan script berikut ini.

<?php
$host = "localhost";
$user = "root";
$pass = "";
$dbname = "login";

$conn = mysqli_connect($host, $user, $pass, $dbname);

if (!$conn) {
    die("Koneksi Gagal: " . mysqli_connect_error());
}
?>

Kemudian buat file dengan nama register.php untuk memproses data di bagian server, dengan script berikut ini.

<?php
include 'koneksi.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = mysqli_real_escape_string($conn, $_POST['username']);
    $password = mysqli_real_escape_string($conn, $_POST['password']);
    // Enkripsi password
    $hashed_password = password_hash($password, PASSWORD_DEFAULT);
    // Simpan data pengguna ke database
    $query = "INSERT INTO users (username, password) VALUES (?, ?)";
    $stmt = mysqli_prepare($conn, $query);
    mysqli_stmt_bind_param($stmt, "ss", $username, $hashed_password);
    if (mysqli_stmt_execute($stmt)) {
        echo "Registrasi berhasil!";
    } else {
        echo "Registrasi gagal.";
    }
    mysqli_stmt_close($stmt);
    mysqli_close($conn);
}
?>

Kemudian buat file dengan nama register.html sebagai tampilan form register di browser, dengan script berikut ini. 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Register Form</title>
</head>
<body>
    <h2>Register Form</h2>
    <form action="register.php" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required><br>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required><br>
        <input type="submit" value="Register">
    </form>
</body>
</html>

Kemudian buat file dengan nama login.php sebagai tampilan form register di browser, dengan script berikut ini. 

<?php
include 'koneksi.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = mysqli_real_escape_string($conn, $_POST['username']);
    $password = mysqli_real_escape_string($conn, $_POST['password']);
    // Ambil data user dari database
    $query = "SELECT * FROM users WHERE username = ?";
    $stmt = mysqli_prepare($conn, $query);
    mysqli_stmt_bind_param($stmt, "s", $username);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    if (mysqli_num_rows($result) == 1) {
        $row = mysqli_fetch_assoc($result);
        // Verifikasi password
        if (password_verify($password, $row['password'])) {
            // Password cocok, user berhasil login
            echo "Login berhasil!";
        } else {
            // Password tidak cocok
            echo "Login gagal. Cek kembali username dan password.";
        }
    } else {
        // User tidak ditemukan
        echo "Login gagal. Cek kembali username dan password.";
    }
    mysqli_stmt_close($stmt);
    mysqli_close($conn);
}
?>

Kemudian buat file dengan nama index.php sebagai tampilan form login di browser, dengan script berikut ini. 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login Form</title>
    <style>
        body {
            display: flex;
            align-items: center;
            justify-content: center;
            height: 100vh;
            margin: 0;
            font-family: Arial, sans-serif;
        }
        form {
            width: 300px;
            padding: 20px;
            border: 1px solid #ccc;
            border-radius: 5px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }
        label {
            display: block;
            margin-bottom: 8px;
        }
        input {
            width: 100%;
            padding: 8px;
            margin-bottom: 15px;
            box-sizing: border-box;
        }
        input[type="submit"] {
            background-color: #4CAF50;
            color: white;
            border: none;
            padding: 10px 15px;
            text-align: center;
            text-decoration: none;
            display: inline-block;
            font-size: 16px;
            border-radius: 5px;
            cursor: pointer;
        }
        input[type="submit"]:hover {
            background-color: #45a049;
        }
        .register-btn {
            display: block;
            text-align: center;
            margin-top: 10px;
        }
    </style>
</head>
<body>
    <form action="login.php" method="post">
        <h2>Login Form</h2>
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required>
        <input type="submit" value="Login">
        <a class="register-btn" href="register.html">Register</a>
    </form>
</body>
</html>

Simpan semua file dalam satu folder di htdocs, lalu jalankan file di browser.