Penanganan Form dan Login Pada PHP

Materi ini membahas tentang penanganan form dan proses login menggunakan PHP native. Dalam pengembangan aplikasi web, form merupakan elemen penting untuk menerima input dari pengguna, seperti data login.

Artikel ini tersedia dalam bahasa lain:
18 November 2025
5 min read
Gambar sampul untuk Penanganan Form dan Login Pada PHP

Gambaran Umum

Materi ini membahas tentang penanganan form dan proses login menggunakan PHP native. Dalam pengembangan aplikasi web, form merupakan elemen penting untuk menerima input dari pengguna, seperti data login. Oleh karena itu, memahami cara kerja form dan bagaimana data ditangani oleh PHP menjadi dasar yang sangat penting. Selain itu, sistem login adalah salah satu fitur keamanan utama dalam aplikasi web. Materi ini akan membimbing peserta untuk memahami alur kerja form login, mulai dari pembuatan tampilan form, pengambilan data input, proses validasi terhadap database, hingga pengelolaan sesi pengguna menggunakan session.

Capaian Pembelajaran

Setelah menyelesaikan materi ini, mahasiswa diharapkan mampu:

  1. Menjelaskan alur kerja form login berbasis web.
  2. Mengimplementasikan sistem login sederhana menggunakan PHP dan MySQL.
  3. Menggunakan session untuk menjaga otentikasi pengguna.
  4. Mengamankan data login menggunakan teknik hashing password.
  5. Menangani form input dan validasi dasar.

Materi Praktikum

Jenis-jenis form

Form inputan dibuat dengan tag-tag HTML. Halaman yang mengandung form murni (tidak ada script php) tidak harus disimpan dalam bentuk php, bisa dalam bentuk html. Untuk merancang sebuah form inputan, setidaknya ada 3 (tiga) hal penting, yaitu:

  1. METHOD Method dari sebuah form menentukan bagaimana data inputan form dikirim. Method ini ada dua macam, yaitu GET dan POST. Method ini menentukan bagaimana data inputan dikirim dan diproses oleh PHP.
  2. ACTION Action dari sebuah form menentukan dimana data inputan dari form diproses. Jika action ini dikosongkan, maka dianggap proses form terjadi di halaman yang sama. Jadi halaman form dan halaman proses bisa saja dipisah atau dijadikan satu.
  3. SUBMIT BUTTON Submit button merupakan sebuah tombol (pada umumnya) yang berfungsi sebagai trigger pengiriman data dari form inputan. Jika tombol ini ditekan, maka data form akan dikirimkan (diproses) di halaman yang sudah ditentukan pada atribut action.

Jenis – jenis method


1. GET

Metode GET digunakan untuk mengirimkan data melalui URL. Data yang dikirimkan dengan metode GET akan muncul secara terbuka di URL, sehingga dapat terlihat oleh user atau tersimpan dalam log server. Beberapa karakter khusus seperti spasi akan diubah menjadi tanda "+" atau "%20"

Contoh dari method GET :

index.php

Blog Image

tampil.php

Blog Image

kemudian jalankan index.php

Blog Image

output yang di hasilkan

Blog Image

<?php

session_start();

include 'koneksi/db.php';

$username = $_POST['username'];

$password = $_POST['password'];

$query = "SELECT * FROM users WHERE username='$username'";

$result = mysqli_query($conn, $query);

$user = mysqli_fetch_assoc($result);

if ($user && password_verify($password, $user['password'])) {

    $_SESSION['user'] = $user['username'];

    header("Location: dashboard.php");

} else {

    echo "Login gagal. Username atau password salah.";

}

?>

2. POST

Metode POST digunakan untuk mengirimkan data secara tersembunyi melalui permintaan HTTP. Data yang dikirimkan dengan metode POST tidak akan muncul di URL, sehingga lebih aman dan lebih cocok untuk mengirim data sensitif seperti kata sandi atau informasi pribadi. Data dikirimkan sebagai bagian dari badan permintaan HTTP dan tidak terlihat oleh pengguna atau tersimpan dalam log server.

Contohnya :

index.php

Blog Image

tampil.php

Blog Image
Blog Image

Hasilnya

Blog Image

Latihan Praktikum

Kita akan membuat bagaimana cara login bekerja pada php native. Berikut Langkah-langkahnya :

1. Struktur Folder

Blog Image

2. Buat file koneksi ke database pada koneksi/db.php


<?php
$host = "localhost";
$user = "root";
$pass
$db = "latihan_login_db";
$conn = mysqli_connect($host, $user, $pass, $db);

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

Setelah itu buatkan table user dengan SQL sebagai berikut :


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

3. Setelah itu, generate password_hash untuk dimasukkan ke dalam database

password_hash.php

<?php

// misalkan password disini menggunakan 12345
$password_hash = password_hash("12345", PASSWORD_DEFAULT);
echo $password_hash;

Lalu jalankan di terminal kalian php password_hash.php

Blog Image

Setelah itu, masukan username dan password_hash yang kita dapatkan ke dalam database.

Blog Image

4. Buat file index.php dengan form login

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">
    <title>Login</title>
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">

</head>

<body class="bg-light">

<div class="container mt-5">
    <div class="row justify-content-center">
        <div class="col-md-4">
            <div class="card shadow-sm rounded-4">
                <div class="card-body">
                    <h3 class="text-center mb-4">Login</h3>
                    <form method="POST" action="login.php">
                        <div class="mb-3">
                            <label for="username" class="form-label">Username</label>
                            <input type="text" name="username" class="form-control" id="username" required>
                        </div>
                        <div class="mb-3">
                            <label for="password" class="form-label">Password</label>
                            <input type="password" name="password" class="form-control" id="password" required>
                        </div>
                        <button type="submit" class="btn btn-primary w-100">Login</button>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
</html>

5. Buat file login.php

<?php

session_start();

include 'koneksi/db.php';

$username = $_POST['username'];

$password = $_POST['password'];

$query = "SELECT * FROM users WHERE username='$username'";

$result = mysqli_query($conn, $query);

$user = mysqli_fetch_assoc($result);

if ($user && password_verify($password, $user['password'])) {

    $_SESSION['user'] = $user['username'];

    header("Location: dashboard.php");

} else {

    echo "Login gagal. Username atau password salah.";

}

?>

session_start():
Digunakan untuk memulai session. Session ini penting agar kita bisa menyimpan data login (seperti username) ke dalam memori server dan digunakan antar halaman.
Misalnya, kalau login berhasil, kita akan menyimpan username ke dalam session.

include 'koneksi/db.php';:
Baris ini menyisipkan file koneksi/db.php yang berisi koneksi ke database MySQL.
Jadi, kita tidak perlu menulis ulang konfigurasi koneksi di file ini.

Ambil data dari form login (method POST):

$_POST['username']: Mengambil data dari input form name="username".

$_POST['password']: Mengambil data dari input form name="password".

Catatan: Di tahap lanjut, kita sebaiknya juga melakukan validasi input atau filter input agar lebih aman (contohnya htmlspecialchars() atau validasi string).

Pengecekan:

if ($user): Cek apakah username ditemukan di database.

password_verify(): Fungsi bawaan PHP untuk membandingkan password yang diinput user ($password) dengan password yang sudah di-hash di database ($user['password']).

Ini adalah cara aman memverifikasi password karena kita tidak membandingkan password secara langsung (plaintext), tetapi lewat hash yang aman.

ika login berhasil:

Simpan username ke dalam session ($_SESSION['user']) agar bisa digunakan di halaman lain (misalnya dashboard.php).

Redirect ke halaman dashboard menggunakan header().

6. Buat file dashboard.php

<?php

session_start();

if (!isset($_SESSION['user'])) {

    header("Location: index.php");

    exit;

}

?>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Dashboard</title>

    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">

</head>

<body>

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">

  <div class="container">

    <a class="navbar-brand" href="#">MyApp</a>

    <div class="d-flex">

      <a href="logout.php" class="btn btn-outline-light">Logout</a>

    </div>

  </div>

</nav>

<div class="container mt-5">

    <div class="alert alert-success rounded-4 shadow-sm" role="alert">

        <h4 class="alert-heading">Selamat Datang, <?php echo htmlspecialchars(_SESSION['user']); ?>!</h4>

        <p>Kamu berhasil login ke dalam sistem. Ini adalah halaman dashboard sederhana.</p>

    </div>

</div>

</body>

</html>

7. Buat file logout.php

<?php

session_start();

session_destroy();

header("Location: index.php");

session_destroy()

  • Baris ini berfungsi untuk menghapus seluruh data session yang tersimpan, termasuk data login seperti $_SESSION['user'].
  • Ini digunakan saat user ingin logout dari sistem.
    Setelah dijalankan, semua informasi yang tersimpan di session akan hilang, artinya user dianggap sudah keluar dari aplikasi

header("Location: index.php");

  • Redirect ke halaman login
  • Setelah session dihapus, user langsung diarahkan ke index.php (halaman login).
  • Ini membuat pengalaman pengguna menjadi jelas: setelah logout, dia langsung kembali ke halaman untuk login lagi.
  • Silahkan Dicoba loginnya dengan menggunakan database

Refrensi

https://pilarsolusi.co.id/pemrograman/perbedaan-antara-metode-get-dan-post-dalam-pemrograman-php/

https://www.malasngoding.com/belajar-php-penanganan-form-pada-php/