sekali lagi thanks buat mas rosihan ari atas tutorial web yang
sangat bermanfaat bagi ane, dan semoga ini juga bisa bermanfaat juga bagi
orang lain, di artikel yang dibuat mas rosihan ari ini menjelaskan bagaiman
membuat fasilitas lost password atau lupa password. berikut artikel yang
ane copy langsung dari blog nya mas rosihan ari. disimaka aja langsung
ya..
Password hilang atau lupa barangkali sering dialami oleh user
untuk proses autentifikasi. Oleh karena itu, biasanya suatu sistem yang menggunakan
autentifikasi user memfasilitasi usernya denngan fitur ‘Lost Password’. Dengan
adanya fasilitas itu, user dapat memperoleh kembali password yang hilang
tersebut. Dalam tutorial kali ini, akan dibahas mengenai cara pembuatan
fasilitas lost password ini dengan script PHP.
Pada dasarnya, mekanisme proses lost password ini adalah
mengirimkan password baru ke user yang kehilangan passwordnya melalui email.
Mengapa yang dikirim password yang baru? Ya… hal ini karena password yang lama
si user telah dienkripsi di dalam database, sehingga dibutuhkan script untuk
mendekrip password terenkripsi tersebut sebelum dikirim via email. Tentu hal
ini akan sangat merepotkan si programmer. Nah… bagaimana bentuk password yang
baru tersebut? Biasanya password baru tersebut bersifat random (dalam 4-8 digit
karakter). Dengan demikian proses lost password sama halnya mereset password
user dengan yang baru dan mengirimkannya via email.
Mengingat password baru ini dikirimkan ke user via email, maka
perlu kita buat field untuk memasukkan email user ketika proses registrasi.
OK.. kita mulai membuat scriptnya ya.
Mula-mula kita siapkan terlebih dahulu tabel untuk keperluan
penyimpanan data user (termasuk emailnya)
view sourceprint?
1.CREATE TABLE user (
2.username varchar(30),
3.password varchar(32),
4.email varchar(100),
5.PRIMARY KEY (username)
6.)
Selanjutnya, kita buat form untuk registrasi user baru.
register.htm
view sourceprint?
01.<form action="submit.php" method="post">
02.<table border="0">
03.<tbody>
04.<tr>
05.<td>Masukkan
Username</td>
06.<td>
07.<input name="username" type="text" /></td>
08.</tr>
09.<tr>
10.<td>Masukkan
E-mail</td>
11.<td>
12.<input style="background-color: #ffffa0;" name="email"type="text" /></td>
13.</tr>
14.<tr>
15.<td>Masukkan
Password</td>
16.<td>
17.<input name="pass1" type="password" /></td>
18.</tr>
19.<tr>
20.<td>Ulangi
Password</td>
21.<td>
22.<input name="pass2" type="password" /></td>
23.</tr>
24.<tr>
25.<td></td>
26.<td>
27.<input name="Submit" type="submit" value="Submit" /></td>
28.</tr>
29.</tbody></table>
30.</form>
Untuk mengolah form register user di atas, kita buat pula
scriptnya.
submit.php
view sourceprint?
01.<?php
02.$username = $_POST['username'];
03.$password1 = $_POST['pass1'];
04.$password2 = $_POST['pass2'];
05.$email = $_POST['email'];
06.
07.// cek kesamaan password
08.if ($password1 == $password2)
09.{
10.mysql_connect("namahost", "dbuser", "dbpass");
11.mysql_select_db("dbname");
12.
13.// perlu dibuat sebarang
pengacak
14.$pengacak = "NDJS3289JSKS190JISJI";
15.
16.// mengenkripsi password
dengan md5() dan pengacak
17.$password1 = md5($pengacak . md5($password1)
. $pengacak);
18.
19.// menyimpan username
dan password terenkripsi ke database
20.$query = "INSERT INTO user VALUES('$username', '$password1',
'$email')";
21.$hasil = mysql_query($query);
22.
23.// menampilkan status
pendaftaran
24.if ($hasil) echo "User sudah
berhasil terdaftar";
25.else echo "Username sudah ada
yang memiliki";
26.
27.}
28.else echo "Password yang dimasukkan
tidak sama";
29.
30.?>
Apabila Anda perhatikan, maka pada prinsipnya script pengolah
form registrasi ini sama dengan script pada pembahasan tentang autentifikasi user yang
telah saya tulis sebelumnya. Bedanya hanyalah pada ada tidaknya email. Namun
secara umum proses autentifikasi boleh juga kok ada emailnya, malah lebih baik
jika ada. Oya… jangan lupa untuk mengenkripsi password dengan md5() dan
pengacak.
Selanjutnya kita bikin form login user.
login.htm
view sourceprint?
01.<form action="..." method="post">
02.<table border="0">
03.<tbody>
04.<tr>
05.<td>Masukkan
Username</td>
06.<td>
07.<input name="username" type="text" /></td>
08.</tr>
09.<tr>
10.<td>Masukkan Password</td>
11.<td>
12.<input name="pass" type="password" /></td>
13.</tr>
14.<tr>
15.<td></td>
16.<td>
17.<input name="Submit" type="submit" value="Submit" /></td>
18.</tr>
19.<tr>
20.<td><a href="lostpassword.htm">Lost
Password</a></td>
21.<td></td>
22.</tr>
23.</tbody></table>
24.</form>
Nah… perhatikan pada form di atas. Pada bagian bawah form, kita
tempatkan link untuk lost passwordnya. Sebagai catatan, untuk script pengolah
login (bagian action), sengaja tidak saya tulis karena pada prinsipnya sama
dengan proses autentifikasiyang
telah saya tulis sebelumnya. Dalam hal ini kita hanya fokus ke lost passwordnya
saja. OK?
Sekarang, kita buat form untuk lost password. Dalam form ini,
user diminta memasukkan usernamenya.
lostpassword.htm
view sourceprint?
01.<form action="kirimpassword.php" method="post">
02.<table border="0">
03.<tbody>
04.<tr>
05.<td>Masukkan
Username Anda</td>
06.<td>
07.<input name="username" type="text" /></td>
08.</tr>
09.<tr>
10.<td></td>
11.<td>
12.<input name="Submit" type="submit" value="Submit" /></td>
13.</tr>
14.</tbody></table>
15.</form>
Mengingat untuk lost password ini dibutuhkan username, maka
harus ada jaminan bahwa username ini unik (tidak boleh ada username yang sama).
Oleh karena itu untuk mengantisipasi adanya beberapa username yang sama, kita
buat field ‘username’ ini menjadi primary key di tabelnya. Nah… hal ini sudah
kita buat ketika membuat tabelnya bukan? So… don’t worry.
Form untuk lost password sudah dibuat, berikutnya kita buat
script pengolah lost passwordnya.
kirimpassword.php
view sourceprint?
01.<?php
02.
03.mysql_connect("namahost", "dbuser", "dbpass");
04.mysql_select_db("dbname");
05.
06.$username = $_POST['username'];
07.
08.function randomPassword()
09.{
10.// function untuk
membuat password random 6 digit karakter
11.
12.$digit = 6;
13.$karakter = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";
14.
15.srand((double)microtime()*1000000);
16.$i = 0;
17.$pass = "";
18.while ($i <= $digit-1)
19.{
20.$num = rand() % 32;
21.$tmp = substr($karakter,$num,1);
22.$pass = $pass.$tmp;
23.$i++;
24.}
25.return $pass;
26.}
27.
28.// membuat password baru
secara random -> memanggil function randomPassword
29.$newPassword = randomPassword();
30.
31.// perlu dibuat sebarang
pengacak
32.$pengacak = "NDJS3289JSKS190JISJI";
33.
34.// mengenkripsi password
dengan md5() dan pengacak
35.$newPasswordEnkrip = md5($pengacak . md5($newPassword)
.$pengacak);
36.
37.// mencari alamat email
si user
38.$query = "SELECT * FROM user WHERE username =
'$username'";
39.$hasil = mysql_query($query);
40.$data = mysql_fetch_array($hasil);
41.$alamatEmail = $data['email'];
42.
43.// title atau subject
email
44.$title = "New Password";
45.
46.// isi pesan email disertai
password
47.$pesan = "Username Anda : ".$username.". \nPassword
Anda yang baru adalah ".$newPassword;
48.
49.// header email berisi
alamat pengirim
50.$header = "From: admin@situsku.com";
51.
52.// mengirim email
53.$kirimEmail = mail($alamatEmail, $title, $pesan, $header);
54.
55.// cek status pengiriman
email
56.if ($kirimEmail) {
57.
58.// update password baru
ke database (jika pengiriman email sukses)
59.$query = "UPDATE user SET password = '$newPasswordEnkrip' WHERE
username = '$username'";
60.$hasil = mysql_query($query);
61.
62.if ($hasil) echo "Password baru
telah direset dan sudah dikirim ke email Anda";
63.}
64.else echo "Pengiriman
password baru ke email gagal";
65.
66.?>
Perhatikan pada function pengacak password pada script di atas.
Dalam daftar karakter ($karakter = “ABCDEFGHJKLMNPQRSTUVWXYZ23456789″) yang
digunakan untuk membuat random password tidak ada huruf I, O serta angka 1 dan
0. Ini sengaja saya buat karena menghindari keambiguan dalam membaca. Kadang
orang salah membaca angka 1 dan huruf I, begitu pula angka 0 dan huruf O.
Nah… password baru yang dikirm ke email user adalah password
random yang dihasilkan function randomPassword().
Oya, perhatikan pula pada proses update password baru ke
database. Apabila kita perhatikan, maka proses update ini dilakukan setelah
pengiriman email sukses. Mengapa demikian? Ya… bagaimana seandainya pengiriman
email gagal, tapi password yang baru sudah terupdate di database? Tentu si user
bingung
Satu lagi yang penting, gunakan pengacak enkripsi yang sama
ketika pada proses registrasi user dan juga pada waktu proses login. Jika tidak
sama.. hmmm… repot, karena user nantinya gak bisa login.