Thursday

19-06-2025 Vol 19

login & signup form with html css & javascript

Cara Membuat Formulir Login & Pendaftaran Menggunakan HTML, CSS & JavaScript (Panduan Lengkap)

Formulir login dan pendaftaran adalah fondasi dari sebagian besar aplikasi web modern. Mereka memungkinkan pengguna untuk membuat akun, mengakses fitur pribadi, dan berinteraksi dengan konten. Dalam tutorial ini, kita akan membuat formulir login dan pendaftaran yang fungsional dan menarik secara visual menggunakan HTML untuk struktur, CSS untuk gaya, dan JavaScript untuk validasi dan interaksi.

Daftar Isi

  1. Pendahuluan
    • Mengapa Formulir Login & Pendaftaran Penting?
    • Apa yang Akan Kita Bangun?
    • Prasyarat
  2. HTML: Membangun Struktur Dasar
    • Struktur Dasar HTML
    • Membuat Formulir Pendaftaran
    • Membuat Formulir Login
    • Menautkan Formulir Login dan Pendaftaran
  3. CSS: Menata Gaya Formulir
    • Menambahkan CSS ke Proyek Kita
    • Menata Gaya Kontainer Formulir
    • Menata Gaya Input Fields
    • Menata Gaya Tombol
    • Menambahkan Efek Hover dan Fokus
    • Responsif Desain
  4. JavaScript: Menambahkan Interaksi dan Validasi
    • Menghubungkan JavaScript ke HTML
    • Validasi Formulir Pendaftaran (Client-Side)
      • Memvalidasi Nama Pengguna
      • Memvalidasi Email
      • Memvalidasi Kata Sandi (Kekuatan & Konfirmasi)
    • Validasi Formulir Login (Client-Side)
    • Menampilkan Pesan Kesalahan/Sukses
    • Transisi yang Halus Antara Formulir Login dan Pendaftaran
    • Peningkatan: Menyimpan Data ke LocalStorage (Opsional)
  5. Praktik Terbaik Keamanan
    • Pentingnya Keamanan Formulir
    • Validasi Sisi Server (Penting!)
    • Pencegahan Serangan XSS dan SQL Injection
    • Penggunaan HTTPS
    • Penyimpanan Kata Sandi yang Aman (Hashing dan Salting)
  6. Peningkatan Lanjutan (Opsional)
    • Integrasi dengan API Backend
    • Penggunaan Framework CSS (Bootstrap, Tailwind CSS)
    • Penggunaan Library JavaScript (React, Angular, Vue)
    • Menambahkan Fitur “Lupa Kata Sandi”
    • Otentikasi Dua Faktor (2FA)
  7. Kesimpulan
    • Ringkasan
    • Langkah Selanjutnya

1. Pendahuluan

Mengapa Formulir Login & Pendaftaran Penting?

Formulir login dan pendaftaran adalah gerbang utama bagi pengguna untuk mengakses fitur dan konten yang dipersonalisasi di aplikasi web Anda. Mereka memungkinkan Anda untuk:

  • Membangun Basis Pengguna: Mengumpulkan informasi pengguna untuk personalisasi dan komunikasi.
  • Menyediakan Akses Terbatas: Mengontrol siapa yang dapat mengakses fitur premium atau konten sensitif.
  • Personalisasi Pengalaman: Menyesuaikan konten dan fitur berdasarkan preferensi pengguna.
  • Meningkatkan Keamanan: Melindungi data pengguna dan mencegah akses tidak sah.

Apa yang Akan Kita Bangun?

Dalam tutorial ini, kita akan membangun:

  • Formulir Pendaftaran: Memungkinkan pengguna untuk membuat akun baru dengan nama pengguna, email, dan kata sandi.
  • Formulir Login: Memungkinkan pengguna yang sudah ada untuk masuk dengan email dan kata sandi mereka.
  • Validasi Client-Side: Memastikan bahwa data yang dimasukkan pengguna memenuhi persyaratan sebelum dikirim ke server.
  • Transisi Halus: Memberikan pengalaman pengguna yang mulus saat beralih antara formulir login dan pendaftaran.

Prasyarat

Sebelum memulai, Anda perlu memiliki pemahaman dasar tentang:

  • HTML: Untuk membangun struktur formulir.
  • CSS: Untuk menata gaya formulir.
  • JavaScript: Untuk menambahkan interaksi dan validasi.
  • Text Editor: Seperti VS Code, Sublime Text, atau Atom.
  • Browser Web: Seperti Chrome, Firefox, atau Safari.

2. HTML: Membangun Struktur Dasar

Struktur Dasar HTML

Pertama, buat file HTML baru (misalnya, index.html) dan tambahkan struktur dasar berikut:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Formulir Login & Pendaftaran</title>
<link rel="stylesheet" href="style.css"> <!-- Hubungkan ke file CSS kita -->
</head>
<body>
<div class="container">
<div class="form-wrapper">
<!-- Formulir akan ditambahkan di sini -->
</div>
</div>
<script src="script.js"></script> <!-- Hubungkan ke file JavaScript kita -->
</body>
</html>

Membuat Formulir Pendaftaran

Sekarang, mari kita buat formulir pendaftaran di dalam <div class="form-wrapper">:


<form id="registerForm">
<h2>Daftar</h2>
<div class="input-group">
<label for="registerUsername">Nama Pengguna:</label>
<input type="text" id="registerUsername" name="registerUsername" required>
</div>
<div class="input-group">
<label for="registerEmail">Email:</label>
<input type="email" id="registerEmail" name="registerEmail" required>
</div>
<div class="input-group">
<label for="registerPassword">Kata Sandi:</label>
<input type="password" id="registerPassword" name="registerPassword" required>
</div>
<div class="input-group">
<label for="confirmPassword">Konfirmasi Kata Sandi:</label>
<input type="password" id="confirmPassword" name="confirmPassword" required>
</div>
<button type="submit">Daftar</button>
<p>Sudah punya akun? <a href="#" id="loginLink">Login</a></p>
</form>

Membuat Formulir Login

Selanjutnya, buat formulir login di dalam <div class="form-wrapper">. Kita akan menyembunyikannya secara default dan menampilkannya saat tautan “Login” diklik:


<form id="loginForm" style="display: none;">
<h2>Login</h2>
<div class="input-group">
<label for="loginEmail">Email:</label>
<input type="email" id="loginEmail" name="loginEmail" required>
</div>
<div class="input-group">
<label for="loginPassword">Kata Sandi:</label>
<input type="password" id="loginPassword" name="loginPassword" required>
</div>
<button type="submit">Login</button>
<p>Belum punya akun? <a href="#" id="registerLink">Daftar</a></p>
</form>

Menautkan Formulir Login dan Pendaftaran

Perhatikan atribut id pada setiap formulir dan tautan (“Login” dan “Daftar”). Ini akan kita gunakan di JavaScript untuk mengontrol visibilitas formulir.

3. CSS: Menata Gaya Formulir

Menambahkan CSS ke Proyek Kita

Buat file CSS baru bernama style.css dan hubungkan ke file HTML Anda (seperti yang ditunjukkan di struktur dasar HTML di atas). Kita akan menambahkan gaya di sini.

Menata Gaya Kontainer Formulir

Mari kita mulai dengan menata gaya kontainer utama:


body {
font-family: sans-serif;
background-color: #f0f0f0;
margin: 0;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}

.container {
width: 400px;
background-color: #fff;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
padding: 30px;
}

.form-wrapper {
display: flex;
flex-direction: column;
align-items: center;
}

Menata Gaya Input Fields

Sekarang, mari kita tata gaya input fields:


.input-group {
width: 100%;
margin-bottom: 20px;
}

.input-group label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}

.input-group input {
width: 100%;
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box; /* Penting untuk memastikan padding tidak memperlebar input */
font-size: 16px;
}

.input-group input:focus {
outline: none;
border-color: #4CAF50;
}

Menata Gaya Tombol

Selanjutnya, kita akan menata gaya tombol:


button {
background-color: #4CAF50;
color: white;
padding: 12px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
width: 100%;
}

button:hover {
background-color: #3e8e41;
}

Menambahkan Efek Hover dan Fokus

Kita sudah menambahkan efek :hover untuk tombol. Sekarang, mari tambahkan efek :focus untuk input fields (ini sudah tercakup di atas):

Responsif Desain

Untuk memastikan formulir terlihat bagus di berbagai ukuran layar, kita akan menambahkan beberapa media queries:


@media (max-width: 600px) {
.container {
width: 90%;
padding: 20px;
}
}

4. JavaScript: Menambahkan Interaksi dan Validasi

Menghubungkan JavaScript ke HTML

Buat file JavaScript baru bernama script.js dan hubungkan ke file HTML Anda (seperti yang ditunjukkan di struktur dasar HTML di atas).

Validasi Formulir Pendaftaran (Client-Side)

Kita akan menambahkan validasi client-side untuk memastikan bahwa data yang dimasukkan pengguna memenuhi persyaratan sebelum dikirim ke server. Validasi sisi server *sangat* penting untuk keamanan dan integritas data, tetapi validasi client-side memberikan umpan balik instan kepada pengguna.


document.addEventListener('DOMContentLoaded', function() {
const registerForm = document.getElementById('registerForm');
const loginForm = document.getElementById('loginForm');
const loginLink = document.getElementById('loginLink');
const registerLink = document.getElementById('registerLink');

// Fungsi untuk menampilkan pesan kesalahan
function displayError(element, message) {
const errorElement = document.createElement('p');
errorElement.classList.add('error-message'); // tambahkan class untuk styling
errorElement.textContent = message;
element.parentNode.appendChild(errorElement); // masukkan setelah label
element.classList.add('error'); // tambahkan class untuk styling input
}

// Fungsi untuk menghapus semua pesan kesalahan
function clearErrors(form) {
const errorMessages = form.querySelectorAll('.error-message');
errorMessages.forEach(message => message.remove());
const errorInputs = form.querySelectorAll('.error');
errorInputs.forEach(input => input.classList.remove('error'));
}

registerForm.addEventListener('submit', function(event) {
event.preventDefault(); // Mencegah formulir dikirimkan secara default

clearErrors(registerForm); // Bersihkan pesan kesalahan sebelumnya

const username = document.getElementById('registerUsername').value.trim();
const email = document.getElementById('registerEmail').value.trim();
const password = document.getElementById('registerPassword').value;
const confirmPassword = document.getElementById('confirmPassword').value;

let isValid = true; // Flag untuk melacak apakah formulir valid

// Validasi Nama Pengguna
if (username.length < 3) {
displayError(document.getElementById('registerUsername'), 'Nama pengguna harus minimal 3 karakter.');
isValid = false;
}

// Validasi Email
if (!isValidEmail(email)) {
displayError(document.getElementById('registerEmail'), 'Email tidak valid.');
isValid = false;
}

// Validasi Kata Sandi
if (password.length < 8) {
displayError(document.getElementById('registerPassword'), 'Kata sandi harus minimal 8 karakter.');
isValid = false;
}

if (password !== confirmPassword) {
displayError(document.getElementById('confirmPassword'), 'Kata sandi tidak cocok.');
isValid = false;
}

if (isValid) {
// Formulir valid, kirim ke server atau lakukan tindakan lain
alert('Pendaftaran berhasil!'); // Ganti dengan logika pengiriman formulir yang sebenarnya
registerForm.reset(); // Bersihkan formulir setelah berhasil
}
});

// Fungsi validasi email (sederhana)
function isValidEmail(email) {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);
}

// Event listeners untuk beralih antar formulir
loginLink.addEventListener('click', function(event) {
event.preventDefault();
registerForm.style.display = 'none';
loginForm.style.display = 'block';

});

registerLink.addEventListener('click', function(event) {
event.preventDefault();
loginForm.style.display = 'none';
registerForm.style.display = 'block';
});

});

Memvalidasi Nama Pengguna

Kita memeriksa panjang minimum nama pengguna (misalnya, 3 karakter).

Memvalidasi Email

Kita menggunakan regular expression sederhana untuk memvalidasi format email.

Memvalidasi Kata Sandi (Kekuatan & Konfirmasi)

Kita memeriksa panjang minimum kata sandi (misalnya, 8 karakter) dan memastikan bahwa kata sandi dan konfirmasi kata sandi cocok.

Validasi Formulir Login (Client-Side)

Validasi formulir login serupa dengan validasi formulir pendaftaran, tetapi lebih sederhana:


loginForm.addEventListener('submit', function(event) {
event.preventDefault();

clearErrors(loginForm);

const email = document.getElementById('loginEmail').value.trim();
const password = document.getElementById('loginPassword').value;

let isValid = true;

if (!isValidEmail(email)) {
displayError(document.getElementById('loginEmail'), 'Email tidak valid.');
isValid = false;
}

if (password.length === 0) {
displayError(document.getElementById('loginPassword'), 'Kata sandi tidak boleh kosong.');
isValid = false;
}

if (isValid) {
// Formulir valid, kirim ke server atau lakukan tindakan lain
alert('Login berhasil!'); // Ganti dengan logika pengiriman formulir yang sebenarnya
loginForm.reset();
}
});

Menampilkan Pesan Kesalahan/Sukses

Dalam contoh di atas, kita menggunakan fungsi displayError untuk menampilkan pesan kesalahan di bawah input field yang sesuai. Kita juga menambahkan class `error-message` dan `error` untuk memungkinkan styling pesan kesalahan.

Transisi yang Halus Antara Formulir Login dan Pendaftaran

Tambahkan sedikit JavaScript untuk mengontrol visibilitas formulir login dan pendaftaran saat tautan “Login” dan “Daftar” diklik:

Kode ini sudah termasuk dalam blok kode JavaScript lengkap di atas.

Peningkatan: Menyimpan Data ke LocalStorage (Opsional)

Untuk pengalaman yang lebih baik, Anda dapat menyimpan data pengguna (misalnya, nama pengguna) ke localStorage setelah pendaftaran yang berhasil. Ini memungkinkan Anda untuk menampilkan pesan “Selamat datang, [nama pengguna]!” saat pengguna login berikutnya. PERHATIAN: Jangan pernah menyimpan kata sandi di localStorage.

5. Praktik Terbaik Keamanan

Pentingnya Keamanan Formulir

Keamanan formulir login dan pendaftaran sangat penting untuk melindungi data pengguna dan mencegah akses tidak sah. Berikut adalah beberapa praktik terbaik yang harus Anda ikuti:

Validasi Sisi Server (Penting!)

Validasi client-side hanya untuk kenyamanan pengguna. Validasi sisi server *WAJIB*. Selalu validasi dan sanitasi semua data yang diterima dari formulir di sisi server. Ini membantu mencegah serangan seperti SQL injection dan XSS.

Pencegahan Serangan XSS dan SQL Injection

  • XSS (Cross-Site Scripting): Sanitasi input pengguna untuk mencegah eksekusi skrip berbahaya di browser pengguna lain.
  • SQL Injection: Gunakan parameterized queries atau ORM untuk mencegah penyisipan kode SQL berbahaya ke dalam database Anda.

Penggunaan HTTPS

Selalu gunakan HTTPS untuk mengenkripsi semua komunikasi antara browser pengguna dan server Anda. Ini melindungi data pengguna (termasuk kata sandi) dari intersepsi.

Penyimpanan Kata Sandi yang Aman (Hashing dan Salting)

Jangan pernah menyimpan kata sandi dalam teks biasa. Selalu gunakan fungsi hashing yang kuat (seperti bcrypt atau Argon2) dengan salt unik untuk setiap kata sandi. Salt mencegah serangan rainbow table.

6. Peningkatan Lanjutan (Opsional)

Integrasi dengan API Backend

Setelah Anda memiliki formulir login dan pendaftaran dasar, Anda dapat mengintegrasikannya dengan API backend untuk melakukan otentikasi dan penyimpanan data yang sebenarnya. Backend akan bertanggung jawab untuk validasi sisi server, hashing kata sandi, dan berinteraksi dengan database.

Penggunaan Framework CSS (Bootstrap, Tailwind CSS)

Untuk tata letak dan gaya yang lebih canggih, Anda dapat menggunakan framework CSS seperti Bootstrap atau Tailwind CSS. Framework ini menyediakan komponen dan utilitas yang telah ditentukan sebelumnya yang dapat mempercepat proses pengembangan Anda.

Penggunaan Library JavaScript (React, Angular, Vue)

Untuk aplikasi yang lebih kompleks, Anda dapat menggunakan library JavaScript seperti React, Angular, atau Vue untuk membangun antarmuka pengguna yang dinamis dan interaktif. Library ini menyediakan cara yang terstruktur untuk mengelola state aplikasi dan menangani interaksi pengguna.

Menambahkan Fitur “Lupa Kata Sandi”

Fitur “Lupa Kata Sandi” memungkinkan pengguna untuk mengatur ulang kata sandi mereka jika mereka lupa. Ini biasanya melibatkan pengiriman email dengan tautan pengaturan ulang kata sandi ke alamat email pengguna.

Otentikasi Dua Faktor (2FA)

Otentikasi Dua Faktor menambahkan lapisan keamanan tambahan dengan mengharuskan pengguna untuk memberikan kode verifikasi selain kata sandi mereka. Kode verifikasi ini biasanya dikirim ke ponsel pengguna melalui SMS atau aplikasi otentikasi.

7. Kesimpulan

Ringkasan

Dalam tutorial ini, kita telah mempelajari cara membuat formulir login dan pendaftaran yang fungsional dan menarik secara visual menggunakan HTML, CSS, dan JavaScript. Kita juga telah membahas praktik terbaik keamanan dan beberapa peningkatan lanjutan yang dapat Anda tambahkan ke formulir Anda.

Langkah Selanjutnya

Berikut adalah beberapa langkah selanjutnya yang dapat Anda ambil:

  • Integrasikan formulir Anda dengan API backend.
  • Tambahkan validasi sisi server.
  • Gunakan framework CSS untuk gaya yang lebih canggih.
  • Implementasikan fitur “Lupa Kata Sandi”.
  • Tambahkan otentikasi dua faktor.

“`

omcoding

Leave a Reply

Your email address will not be published. Required fields are marked *