Register
27 September 2024 Administrator Dibaca: 918 KaliMembuat Fitur Register di PHP
Berikutnya kita akan membuat fitur registrasi.
Alur kerjanya:
- Input data dari form;
- Filter data yang diinputkan;
- Simpan ke database;
- Kalau berhasil, alihkan ke halaman login.
Mari kita buat.
Silakan buka file register.php, lalu isi dengan kode berikut:
<?php
require_once("config.php");
if(isset($_POST['register'])){
// filter data yang diinputkan
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
// enkripsi password
$password = password_hash($_POST["password"], PASSWORD_DEFAULT);
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
// menyiapkan query
$sql = "INSERT INTO users (name, username, email, password)
VALUES (:name, :username, :email, :password)";
$stmt = $db->prepare($sql);
// bind parameter ke query
$params = array(
":name" => $name,
":username" => $username,
":password" => $password,
":email" => $email
);
// eksekusi query untuk menyimpan ke database
$saved = $stmt->execute($params);
// jika query simpan berhasil, maka user sudah terdaftar
// maka alihkan ke halaman login
if($saved) header("Location: login.php");
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Register Pesbuk</title>
<link rel="stylesheet" href="css/bootstrap.min.css" />
</head>
<body class="bg-light">
<div class="container mt-5">
<div class="row">
<div class="col-md-6">
<p>← <a href="index.php">Home</a>
<h4>Bergabunglah bersama ribuan orang lainnya...</h4>
<p>Sudah punya akun? <a href="login.php">Login di sini</a></p>
<form action="" method="POST">
<div class="form-group">
<label for="name">Nama Lengkap</label>
<input class="form-control" type="text" name="name" placeholder="Nama kamu" />
</div>
<div class="form-group">
<label for="username">Username</label>
<input class="form-control" type="text" name="username" placeholder="Username" />
</div>
<div class="form-group">
<label for="email">Email</label>
<input class="form-control" type="email" name="email" placeholder="Alamat Email" />
</div>
<div class="form-group">
<label for="password">Password</label>
<input class="form-control" type="password" name="password" placeholder="Password" />
</div>
<input type="submit" class="btn btn-success btn-block" name="register" value="Daftar" />
</form>
</div>
<div class="col-md-6">
<img class="img img-responsive" src="img/connect.png" />
</div>
</div>
</div>
</body>
</html>
Penjelasan:
Pertama kita membutuhkan objek $db untuk melakukan query, maka kita impor config.php dengan fungsi require_once().
require_once("config.php");
Setelah itu, baru kita buat kode untuk menyimpan data ke database.
Sebelumnya, kita cek dulu. Apakah tombol Register sudah ditekan atau belum:
if(isset($_POST['register'])){
// ...
}
?>
Selanjutnya melakukan filter dan enkripsi password terhadap data yang diinputkan:
// filter data yang diinputkan
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
// enkripsi password
$password = password_hash($_POST["password"], PASSWORD_DEFAULT);
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
Kenapa harus di-filter dan dienkripsi?
Jangan percaya pada apa yang diinputkan user, bisa saja mereka menginputkan username dan name seperti ini:

Ini salah satu bentuk serangan XSS.
Karena itu, kita harus memfilternya agar skrip yang diinputkan user diubah menjadi karakter yang aman.

Lalu kenapa password harus dienkripsi?
Tujuannya untuk keamanan. Nanti kalau database dicuri, si pencuri tidak akan tahu password dari akun-akun yang sudah terdaftar.
// enkripsi password
$password = password_hash($_POST["password"], PASSWORD_DEFAULT);
Tunggu dulu…
Kenapa password tidak di-filter?
Karena agar user dapat menggunakan simbol untuk membuat password.
Kalau kita filter nanti user tidak bisa membuat password dengan simbol-simbol seperti: &, <, >, %, dll.
Setelah data di-filter, selanjutnya kita buat query dengan objek $db.
$sql = "INSERT INTO users (name, username, email, password)
VALUES (:name, :username, :email, :password)";
$stmt = $db->prepare($sql);
:name, :username, :email, :password adalah placeholder. Tujuannya agar terhindar dari serangan SQL Injection.
Setelah itu, kita bind parameter atau mengisi placeholder dengan nilai yang kita dapatkan dari hasil filter.
// bind parameter ke query
$params = array(
":name" => $name,
":username" => $username,
":password" => $password,
":email" => $email
);
Selanjutnya, kita eksekusi query-nya:
// eksekusi query untuk menyimpan ke database
$saved = $stmt->execute($params);
Eksekusi query akan menghasilkan nilai true jika berhasil.
Sehingga kita bisa membuat sebuah kondisi:
// jika query simpan berhasil, maka user sudah terdaftar
// maka alihkan ke halaman login
if($saved) header("Location: login.php");
Lalu yang terakhir adalah kode untuk form registernya:
<form action="" method="POST">
...
</form>
Atribut action="" artinya data akan dikirim ke file itu sendiri, yaitu: register.php.
Mudah bukan?
Masukkan Komentar Anda
Jajak Pendapat