Halo Sobat Sederhana, pada artikel kali ini kita akan membahas cara membuat reset password sederhana di PHP. Kadang-kadang kita lupa password akun, dan tidak bisa masuk ke dalam akun tersebut. Oleh karena itu, kita perlu fitur reset password untuk bisa mendapatkan password baru dan masuk ke dalam akun tersebut kembali. Mari kita simak langkah-langkahnya!
1. Membuat Form Reset Password
Langkah pertama yang harus dilakukan adalah membuat form reset password. Form ini akan digunakan untuk memasukkan email pengguna yang lupa password. Berikut adalah contoh kodenya:
Kode | Penjelasan |
---|---|
<form action=”reset_password.php” method=”post”> <label for=”email”>Email:</label> <input type=”email” id=”email” name=”email”> <input type=”submit” value=”Reset Password”> </form> |
Membuat form reset password dengan input email dan tombol submit untuk mengirim email reset password. |
Untuk membuat form ini, kita menggunakan tag <form> dengan atribut action yang mengarah ke script reset_password.php dan method post. Kemudian, kita membuat label dan input email dengan tipe email. Terakhir, kita membuat tombol submit dengan nilai “Reset Password”.
1.1. Mengatur Tampilan Form
Agar tampilan form reset password lebih menarik, kita dapat menambahkan atribut class dan CSS pada tag HTML yang digunakan. Berikut adalah contoh kodenya:
Kode | Penjelasan |
---|---|
<form action=”reset_password.php” method=”post” class=”reset-password-form”> <label for=”email”>Email:</label> <input type=”email” id=”email” name=”email” class=”reset-password-email”> <input type=”submit” value=”Reset Password” class=”reset-password-button”> </form> |
Mengatur tampilan form reset password dengan menambahkan atribut class pada tag HTML dan CSS pada file stylesheet. |
Dalam contoh kode di atas, kita menambahkan atribut class pada tag <form> dan tag <input> untuk email dan tombol submit. Kemudian, kita membuat CSS pada file stylesheet untuk mengatur tampilan form tersebut. Kita dapat menggunakan CSS framework seperti Bootstrap atau Materialize untuk mempermudah pengaturan tampilan form.
2. Memproses Form Reset Password
Setelah membuat form reset password, kita perlu memproses form tersebut untuk mengirim email reset password ke pengguna. Berikut adalah contoh kodenya:
Kode | Penjelasan |
---|---|
<?php if(isset($_POST[‘email’])) { $email = $_POST[‘email’]; // generate unique token $token = bin2hex(random_bytes(32)); // save token to database $sql = “INSERT INTO reset_password_token (email, token, created_at) VALUES (‘$email’, ‘$token’, NOW())”; $result = mysqli_query($conn, $sql); // send email with token $to = $email; $subject = “Reset Password”; $message = “Silakan klik link berikut untuk mereset password Anda: http://www.example.com/reset_password.php?email=” . $email . “&token=” . $token; $headers = “From: noreply@example.com”; mail($to, $subject, $message, $headers); echo “Email reset password telah dikirim ke $email. Silakan cek email Anda dan ikuti petunjuk yang diberikan.”; } ?> |
Memproses form reset password dengan mengambil nilai email dari form, memperoleh token unik, menyimpan token ke database, mengirim email reset password ke pengguna, dan memberikan pesan sukses. |
Dalam contoh kode di atas, kita menggunakan PHP untuk memproses form reset password. Pertama, kita memeriksa apakah ada data yang dikirimkan melalui method post. Jika ada, kita mengambil nilai email dari input email dalam form dan memperoleh token unik dengan menggunakan fungsi random_bytes. Kemudian, kita menyimpan token ke database dan mengirim email reset password ke pengguna dengan menggunakan fungsi mail. Terakhir, kita memberikan pesan sukses bahwa email reset password telah dikirim ke email pengguna.
2.1. Menambahkan Validasi Form
Agar form reset password lebih aman dan terhindar dari serangan XSS dan CSRF, kita perlu menambahkan validasi form. Berikut adalah contoh kodenya:
Kode | Penjelasan |
---|---|
<?php if(isset($_POST[‘email’])) { $email = mysqli_real_escape_string($conn, $_POST[‘email’]); // check if email exists in database $sql = “SELECT * FROM users WHERE email = ‘$email'”; $result = mysqli_query($conn, $sql); if(mysqli_num_rows($result) == 1) { // generate unique token $token = bin2hex(random_bytes(32)); // save token to database $sql = “INSERT INTO reset_password_token (email, token, created_at) VALUES (‘$email’, ‘$token’, NOW())”; $result = mysqli_query($conn, $sql); // send email with token $to = $email; $subject = “Reset Password”; $message = “Silakan klik link berikut untuk mereset password Anda: http://www.example.com/reset_password.php?email=” . $email . “&token=” . $token; $headers = “From: noreply@example.com”; mail($to, $subject, $message, $headers); echo “Email reset password telah dikirim ke $email. Silakan cek email Anda dan ikuti petunjuk yang diberikan.”; } else { echo “Email tidak ditemukan dalam database. Silakan coba lagi.”; } } ?> |
Menambahkan validasi form reset password dengan menghindari serangan XSS dan CSRF, serta memeriksa apakah email pengguna sudah terdaftar dalam database. |
Dalam contoh kode di atas, kita menggunakan mysqli_real_escape_string untuk menghindari serangan XSS. Kemudian, kita memeriksa apakah email pengguna sudah terdaftar dalam database dengan menggunakan mysqli_num_rows. Jika sudah, kita melanjutkan dengan mengirim email reset password seperti pada contoh sebelumnya. Namun, jika tidak, kita memberikan pesan error bahwa email tidak ditemukan dalam database.
3. Membuat Halaman Reset Password
Setelah pengguna menerima email reset password, pengguna dapat mengikuti link dalam email tersebut untuk masuk ke halaman reset password. Berikut adalah contoh kodenya:
Kode | Penjelasan |
---|---|
<?php if(isset($_GET[‘email’]) && isset($_GET[‘token’])) { $email = $_GET[‘email’]; $token = $_GET[‘token’]; // check if email and token exist in database $sql = “SELECT * FROM reset_password_token WHERE email = ‘$email’ AND token = ‘$token’ AND created_at >= DATE_SUB(NOW(), INTERVAL 1 HOUR)”; $result = mysqli_query($conn, $sql); if(mysqli_num_rows($result) == 1) { // display form to reset password ?> <form action=”change_password.php” method=”post”> <input type=”hidden” name=”email” value=”<?php echo $email; ?>”> <input type=”hidden” name=”token” value=”<?php echo $token; ?>”> <label for=”password”>New Password:</label> <input type=”password” id=”password” name=”password” required> <input type=”submit” value=”Reset Password”> </form> <?php } else { echo “Link reset password tidak valid atau telah kadaluwarsa.”; } } else { header(“Location: index.php”); exit(); } ?> |
Membuat halaman reset password dengan mengecek apakah email dan token ada dalam database, serta menampilkan form reset password jika valid. |
Dalam contoh kode di atas, kita menggunakan $_GET untuk mengambil nilai email dan token dari URL. Kemudian, kita memeriksa apakah email dan token ada dalam database serta belum kadaluwarsa dengan menggunakan created_at dan INTERVAL 1 HOUR. Jika valid, kita menampilkan form reset password dengan menggunakan tag <form> dan atribut hidden untuk menyimpan nilai email dan token. Terakhir, kita memberikan pesan error jika link reset password tidak valid atau telah kadaluwarsa.
3.1. Menambahkan Validasi Halaman Reset Password
Agar halaman reset password lebih aman dan terhindar dari serangan XSS dan CSRF, kita perlu menambahkan validasi halaman. Berikut adalah contoh kodenya:
Kode | Penjelasan |
---|---|
<?php if(isset($_GET[‘email’]) && isset($_GET[‘token’])) { $email = mysqli_real_escape_string($conn, $_GET[‘email’]); $token = mysqli_real_escape_string($conn, $_GET[‘token’]); // check if email and token exist in database $sql = “SELECT * FROM reset_password_token WHERE email = ‘$email’ AND token = ‘$token’ AND created_at >= DATE_SUB(NOW(), INTERVAL 1 HOUR)”; $result = mysqli_query($conn, $sql); if(mysqli_num_rows($result) == 1) { // display form to reset password ?> <form action=”change_password.php” method=”post”> <input type=”hidden” name=”email” value=”<?php echo $email; ?>”> <input type=”hidden” name=”token” value=”<?php echo $token; ?>”> <label for=”password”>New Password:</label> <input type=”password” id=”password” name=”password” required> <input type=”submit” value=”Reset Password”> </form> <?php } else { echo “Link reset password tidak valid atau telah kadaluwarsa.”; } } else { header(“Location: index.php”); exit(); } ?> |
Menambahkan validasi halaman reset password dengan menghindari serangan XSS dan CSRF, serta mengecek apakah email dan token ada dalam database. |
Dalam contoh kode di atas, kita menggunakan mysqli_real_escape_string untuk menghindari serangan XSS. Kemudian, kita memeriksa apakah email dan token ada dalam database serta belum kadaluwarsa dengan menggunakan created_at dan INTERVAL 1 HOUR. Jika valid, kita menampilkan form reset password seperti pada contoh sebelumnya. Namun, jika tidak, kita memberikan pesan error bahwa link reset password tidak valid atau telah kadaluwarsa.
4. Mengganti Password Baru
Setelah pengguna memasukkan password baru dan mengirim form, kita perlu memproses form tersebut untuk mengganti password lama dengan password baru. Berikut adalah contoh kodenya:
Kode | Penjelasan |
---|---|
<?php if(isset($_POST[‘email’]) && isset($_POST[‘token’]) && isset($_POST[‘password’])) { $email = $_POST[‘email’]; $token = $_POST[‘token’]; $password = $_POST[‘password’]; // hash password $password_hash = password_hash($password, PASSWORD_DEFAULT); // update password in database $sql = “UPDATE users SET password = ‘$password_hash’ WHERE email = ‘$email'”; $result = mysqli_query($conn, $sql); // delete token from database $sql = “DELETE FROM reset_password_token WHERE email = ‘$email’ AND token = ‘$token'”; $result = mysqli_query($conn, $sql); echo “Password Anda telah berhasil diganti. Silakan login dengan password baru Anda.”; } else { header(“Location: index.php”); exit(); } ?> |
Memproses form reset password dengan mengambil nilai email, token, dan password baru dari form, menghash password baru dan mengupdate password di database. |
Dalam contoh kode di atas, kita menggunakan $_POST untuk mengambil nilai email, token, dan password dari form. Kemudian, kita menghash password baru dengan menggunakan password_hash dan PASSWORD_DEFAULT. Setelah itu, kita mengupdate password di database dengan menggunakan perintah UPDATE dan memeriksa hasilnya dengan mysqli_query. Terakhir, kita menghapus token reset password dari database dengan menggunakan perintah DELETE dan memberikan pesan sukses.
4.1. Menambahkan Validasi Form Mengganti Password
Agar form mengganti password lebih aman dan terhindar dari serangan XSS dan CSRF, kita perlu menambahkan validasi form. Berikut adalah contoh kodenya:
Kode | Penjelasan |
---|---|
<?php
Cara Membuat Reset Password Sederhana di PHP |