Pernahkah Anda membuat akun dengan situs web, dan diminta untuk memeriksa email Anda dan mengklik melalui tautan verifikasi yang dikirim oleh perusahaan untuk mengaktifkannya? Melakukan hal tersebut sangat mengurangi jumlah akun spam. Dalam pelajaran ini, kita akan belajar bagaimana melakukan hal yang sama! Show
Apa yang Akan Kita Bangun?Kita akan membuat skrip pendaftaran PHP yang bagus dimana pengguna dapat membuat akun untuk mendapatkan akses ke "bagian anggota" dari sebuah situs web. Langkah 1 - Halaman PendaftaranPertama-tama kita membutuhkan halaman sederhana dimana pengunjung kita dapat mendaftarkan akun mereka; jadi itulah hal pertama yang akan kita bangun. index.php - Ini adalah halaman pendaftaran kita dengan formulir dasar. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>NETTUTS > Sign up</title> <link href="css/style.css" type="text/css" rel="stylesheet" /> </head> <body> <!-- start header div --> <div id="header"> <h3>NETTUTS > Sign up</h3> </div> <!-- end header div --> <!-- start wrap div --> <div id="wrap"> <!-- start php code --> <!-- stop php code --> <!-- title and description --> <h3>Signup Form</h3> <p>Please enter your name and email addres to create your account</p> <!-- start sign up form --> <form action="" method="post"> <label for="name">Name:</label> <input type="text" name="name" value="" /> <label for="email">Email:</label> <input type="text" name="email" value="" /> <input type="submit" class="submit_button" value="Sign up" /> </form> <!-- end sign up form --> </div> <!-- end wrap div --> </body> </html>css/style.css - Ini adalah stylesheet untuk index.php dan halaman selanjutnya. /* Global Styles */ *{ padding: 0; /* Reset all padding to 0 */ margin: 0; /* Reset all margin to 0 */ } body{ background: #F9F9F9; /* Set HTML background color */ font: 14px "Lucida Grande"; /* Set global font size & family */ color: #464646; /* Set global text color */ } p{ margin: 10px 0px 10px 0px; /* Add some padding to the top and bottom of the <p> tags */ } /* Header */ #header{ height: 45px; /* Set header height */ background: #464646; /* Set header background color */ } #header h3{ color: #FFFFF3; /* Set header heading(top left title ) color */ padding: 10px; /* Set padding, to center it within the header */ font-weight: normal; /* Set font weight to normal, default it was set to bold */ } /* Wrap */ #wrap{ background: #FFFFFF; /* Set content background to white */ width: 615px; /* Set the width of our content area */ margin: 0 auto; /* Center our content in our browser */ margin-top: 50px; /* Margin top to make some space between the header and the content */ padding: 10px; /* Padding to make some more space for our text */ border: 1px solid #DFDFDF; /* Small border for the finishing touch */ text-align: center; /* Center our content text */ } #wrap h3{ font: italic 22px Georgia; /* Set font for our heading 2 that will be displayed in our wrap */ } /* Form & Input field styles */ form{ margin-top: 10px; /* Make some more distance away from the description text */ } form .submit_button{ background: #F9F9F9; /* Set button background */ border: 1px solid #DFDFDF; /* Small border around our submit button */ padding: 8px; /* Add some more space around our button text */ } input{ font: normal 16px Georgia; /* Set font for our input fields */ border: 1px solid #DFDFDF; /* Small border around our input field */ padding: 8px; /* Add some more space around our text */ }
Seperti yang Anda lihat, saya telah menambahkan komentar ke setiap baris yang menjelaskan apa yang mereka lakukan. Juga, Anda mungkin telah memperhatikan komentar berikut di file index.php: <!-- start php code --> <!-- stop php code -->Kita akan menulis PHP kita antara 2 baris ini! Langkah 2 - Validasi MasukanHal pertama yang akan kita bangun adalah sepotong kode yang akan memvalidasi informasinya. Berikut adalah daftar singkat yang merinci apa yang perlu dilakukan.
Jadi langkah pertama kita adalah memeriksa apakah formulir diajukan, dan field-nya tidak kosong. <!-- start PHP code --> <?php if(isset($_POST['name']) && !empty($_POST['name']) AND isset($_POST['email']) && !empty($_POST['email'])){ // Form Submited } ?> <!-- stop PHP Code -->Waktunya untuk perincian! Kita memulai dengan pernyataan IF dan pertama-tama kita memvalidasi field nama: if( ){ // If statement is true run code between brackets } isset($_POST['name']) // Is the name field being posted; it does not matter whether it's empty or filled. && // This is the same as the AND in our statement; it allows you to check multiple statements. !empty($_POST['name']) // Verify if the field name is not empty isset($_POST['email']) // Is the email field being posted; it does not matter if it's empty or filled. && // This is the same as the AND in our statement; it allows you to check multiple statements. !empty($_POST['email']) // Verify if the field email is not emptyJadi jika Anda mengirimkan formulir sekarang dengan field kosong, tidak ada yang terjadi. Jika Anda mengisi kedua field maka naskah kita akan menjalankan kode di antara tanda kurung. Kita sekarang bisa mencapai data kita melalui variabel lokal kita. Seperti yang Anda lihat, saya juga menambahkan string escape MySQL untuk mencegah injeksi MySQL saat memasukkan data ke dalam database MySQL.
Regular ExpressionsBerikutnya adalah cuplikan kecil yang memeriksa apakah alamat email-nya valid. $name = mysql_escape_string($_POST['name']); $email = mysql_escape_string($_POST['email']); if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)){ // Return Error - Invalid Email }else{ // Return Success - Valid Email } Harap dicatat bahwa saya tidak secara pribadi menulis regular expression ini, ini adalah cuplikan kecil dari php.net. Sekarang di eregi, Anda dapat melihat bahwa memeriksa apakah email berisi karakter dari alfabet, jika ada nomor, atau tanda hubung phantom (_), dan tentu saja persyaratan dasar untuk email (email)'@' dan sebuah (titik)'.' Jika tidak satu pun karakter ini ditemukan, expression mengembalikan "false". Oke, jadi sekarang kita perlu menambahkan beberapa pesan kesalahan dasar. if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)){ // Return Error - Invalid Email $msg = 'The email you have entered is invalid, please try again.'; }else{ // Return Success - Valid Email $msg = 'Your account has been made, <br /> please verify it by clicking the activation link that has been send to your email.'; }Seperti yang Anda lihat, kami telah membuat variabel lokal "$msg", ini memungkinkan kita menampilkan kesalahan atau pesan sukses di manapun pada halaman. Tambahkan ini ke style.css, untuk memberi gaya pesan status kita sedikit. #wrap .statusmsg{ font-size: 12px; /* Set message font size */ padding: 3px; /* Some padding to make some more space for our text */ background: #EDEDED; /* Add a background color to our status message */ border: 1px solid #DFDFDF; /* Add a border arround our status message */ }
Langkah 3 - Membuat Database & Membangun KoneksiSekarang kita perlu membuat koneksi database dan membuat tabel untuk memasukkan data akun. Jadi mari kita pergi ke PHPMyAdmin dan membuat database baru dengan nama registrations dan membuat akun pengguna yang memiliki akses ke database tersebut untuk memasukkan dan memperbarui data. Mari membuat tabel users kita, dengan 5 field:
Jadi sekarang kita harus memasukkan rincian untuk field ini:
Bagi mereka yang tidak ingin memasukkan data ini secara manual, Anda bisa menjalankan kode SQL berikut. CREATE TABLE `users` ( `id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , `username` VARCHAR( 32 ) NOT NULL , `password` VARCHAR( 32 ) NOT NULL , `email` TEXT NOT NULL , `hash` VARCHAR( 32 ) NOT NULL , `active` INT( 1 ) NOT NULL DEFAULT '0' ) ENGINE = MYISAM ;Database kita sudah dibuat, sekarang kita perlu menjalin koneksi dengan menggunakan PHP. Kita akan menulis kode berikut di awal skrip kita tepat di bawah baris berikut: <!-- start PHP code --> <?php // Establish database connectionKita akan menggunakan kode berikut untuk terhubung ke server database dan memilih database registrations. (koneksi MySQL dasar) mysql_connect("localhost", "username", "password") or die(mysql_error()); // Connect to database server(localhost) with username and password. mysql_select_db("registrations") or die(mysql_error()); // Select registrations database.Setelah kita membuat koneksi ke database kita, kita dapat melanjutkan ke langkah berikutnya dan memasukkan rincian akun. Langkah 4 - Memasukkan AkunSekarang saatnya memasukkan rincian akun yang dikirimkan ke database kita dan menghasilkan hash aktivasi. Tuliskan kode berikut di bawah baris ini: // Return Success - Valid Email $msg = 'Your account has been made, <br /> please verify it by clicking the activation link that has been send to your email.';Hash AktivasiDalam database kita, kita membuat field yang disebut hash, hash ini adalah string teks 32 karakter. Kita juga mengirimkan kode ini ke alamat email pengguna. Mereka kemudian bisa mengklik tautan (yang berisi hash) dan kita akan memverifikasi apakah cocok dengan yang ada di database. Mari membuat variabel lokal yang disebut $hash dan menghasilkan hash md5 acak. $hash = md5( rand(0,1000) ); // Generate random 32 character hash and assign it to a local variable. // Example output: f4552671f8909587cf485ea990207f3bApa yang telah kita lakukan? Nah kita menggunakan fungsi PHP "rand" untuk menghasilkan bilangan acak antara 0 dan 1000. Selanjutnya fungsi MD5 kita akan mengubah angka ini menjadi string teks 32 karakter yang akan kita gunakan di email aktivasi kita. Pilihan saya adalah menggunakan MD5, karena menghasilkan hash dari 32 karakter yang aman dan, dalam kasus ini, tidak mungkin untuk dipecahkan. Membuat Kata Sandi RandomHal berikutnya yang perlu dilakukan adalah membuat kata sandi acak untuk anggota kita: $password = rand(1000,5000); // Generate random number between 1000 and 5000 and assign it to a local variable. // Example output: 4568Masukkan informasi berikut ke dalam database kita menggunakan kueri MySQL mysql_query("INSERT INTO users (username, password, email, hash) VALUES( '". mysql_escape_string($name) ."', '". mysql_escape_string(md5($password)) ."', '". mysql_escape_string($email) ."', '". mysql_escape_string($hash) ."') ") or die(mysql_error());Seperti yang Anda lihat, kami memasukkan semua data dengan string escape MySQL di sekitarnya untuk mencegah injeksi MySQL. Untuk pengujian, isi formulir dan periksa apakah data sedang dimasukkan ke dalam database kita.
Langkah 5 - Mengirim Email VerifikasiTepat setelah kita memasukkan informasi ke dalam database kita, kita perlu mengirim email ke pengguna dengan tautan verifikasi. Jadi mari kita gunakan fungsi "mail" PHP untuk melakukan hal itu. Sekarang mari kita rinci pesannya: Thanks for signing up! Your account has been created, you can login with the following credentials after you have activated your account by pressing the url below. ------------------------ Username: '.$name.' Password: '.$password.' ------------------------Pada kode di atas, kita mengirimkan deskripsi singkat kepada pengguna kita yang berisi nama pengguna dan kata sandi -- dengan menggunakan variabel lokal yang kita buat saat data diposkan. Please click this link to activate your account: http://www.yourwebsite.com/verify.php?email='.$email.'&hash='.$hash.'Di bagian kode ini, kita membuat tautan dinamis. Hasilnya akan terlihat seperti ini:
Seperti yang Anda lihat, itu menciptakan url yang solid, yang tidak mungkin ditebak. Ini adalah cara yang sangat aman untuk memverifikasi alamat email pengguna. Langkah 6 - Aktivasi AkunSeperti yang bisa Anda lihat, tautan url kita ke verify.php jadi mari kita buat itu, dengan menggunakan template dasar yang sama seperti yang kita gunakan untuk index.php. Hal pertama yang perlu kita lakukan adalah memeriksa apakah kita memiliki variabel $_GET (email & hash) if(isset($_GET['email']) && !empty($_GET['email']) AND isset($_GET['hash']) && !empty($_GET['hash'])){ // Verify data }else{ // Invalid approach }Untuk membuat sesuatu menjadi sedikit lebih mudah, mari kita menetapkan variabel lokal kita dan menambahkan beberapa pencegahan injeksi MySQL dengan, sekali lagi, menggunakan string escape MySQL. if(isset($_GET['email']) && !empty($_GET['email']) AND isset($_GET['hash']) && !empty($_GET['hash'])){ // Verify data $email = mysql_escape_string($_GET['email']); // Set email variable $hash = mysql_escape_string($_GET['hash']); // Set hash variable }Selanjutnya adalah mengecek data dari url terhadap data di database kita menggunakan kueri MySQL. $search = mysql_query("SELECT email, hash, active FROM users WHERE email='".$email."' AND hash='".$hash."' AND active='0'") or die(mysql_error()); $match = mysql_num_rows($search);Pada kode di atas, kita menggunakan pernyataan select MySQL, dan mengecek apakah email dan hash-nya sesuai. Tapi selain itu, kita mengecek apakah status akunnya "inactive". Akhirnya, kita menggunakan mysql_num_rows untuk menentukan jumlah kecocokan yang ditemukan. Jadi mari kita coba ini. Cukup gunakan echo sederhana untuk mengembalikan hasilnya. $search = mysql_query("SELECT email, hash, active FROM users WHERE email='".$email."' AND hash='".$hash."' AND active='0'") or die(mysql_error()); $match = mysql_num_rows($search); echo $match; // Display how many matches have been found -> remove this when done with testing ;)
Kita memiliki MATCH! Untuk mengubah hasilnya, cukup ganti email dan Anda akan melihat bahwa nomor yang dikembalikan adalah 0. Untuk mengaktifkan akun, kita harus memperbarui field active menjadi 1 dengan menggunakan kueri MySQL. Jadi kita menggunakan istilah pencarian yang sama untuk update seperti yang kita gunakan di kueri select MySQL kita. Kita mengubah active menjadi 1 dimana email, hash dan field active = 0 cocok. Kita juga mengembalikan pesan yang memberitahukan pengguna bahwa akunnya telah diaktifkan. Anda dapat menambahkan pesan seperti yang kami lakukan di sini ke bagian "no match". Jadi kode akhir seharusnya terlihat seperti: mysql_connect("localhost", "tutorial", "password") or die(mysql_error()); // Connect to database server(localhost) with username and password. mysql_select_db("registrations") or die(mysql_error()); // Select registration database. if(isset($_GET['email']) && !empty($_GET['email']) AND isset($_GET['hash']) && !empty($_GET['hash'])){ // Verify data $email = mysql_escape_string($_GET['email']); // Set email variable $hash = mysql_escape_string($_GET['hash']); // Set hash variable $search = mysql_query("SELECT email, hash, active FROM users WHERE email='".$email."' AND hash='".$hash."' AND active='0'") or die(mysql_error()); $match = mysql_num_rows($search); if($match > 0){ // We have a match, activate the account mysql_query("UPDATE users SET active='1' WHERE email='".$email."' AND hash='".$hash."' AND active='0'") or die(mysql_error()); echo '<div class="statusmsg">Your account has been activated, you can now login</div>'; }else{ // No match -> invalid url or account has already been activated. echo '<div class="statusmsg">The url is either invalid or you already have activated your account.</div>'; } }else{ // Invalid approach echo '<div class="statusmsg">Invalid approach, please use the link that has been send to your email.</div>'; }
Jika Anda mengunjungi verify.php tanpa string, kesalahan berikut akan ditampilkan:
Langkah 7 - LoginPada langkah terakhir ini, saya akan menunjukkan cara membuat formulir login dasar dan memeriksa apakah akun sudah diaktifkan. Pertama buat file baru yang disebut login.php dengan template dasar yang kita gunakan sebelumnya, tapi kali ini saya ganti formulirnya menjadi formulir login. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>NETTUTS > Sign up</title> <link href="css/style.css" type="text/css" rel="stylesheet" /> </head> <body> <!-- start header div --> <div id="header"> <h3>NETTUTS > Sign up</h3> </div> <!-- end header div --> <!-- start wrap div --> <div id="wrap"> <!-- start PHP code --> <?php mysql_connect("localhost", "tutorial", "password") or die(mysql_error()); // Connect to database server(localhost) with username and password. mysql_select_db("registrations") or die(mysql_error()); // Select registration database. ?> <!-- stop PHP Code --> <!-- title and description --> <h3>Login Form</h3> <p>Please enter your name and password to login</p> <?php if(isset($msg)){ // Check if $msg is not empty echo '<div class="statusmsg">'.$msg.'</div>'; // Display our message and add a div around it with the class statusmsg } ?> <!-- start sign up form --> <form action="" method="post"> <label for="name">Name:</label> <input type="text" name="name" value="" /> <label for="password">Password:</label> <input type="password" name="password" value="" /> <input type="submit" class="submit_button" value="Sign up" /> </form> <!-- end sign up form --> </div> <!-- end wrap div --> </body> </html>Formulirnya adalah html dasar, dan hampir sama dengan formulir pendaftaran, tidak ada penjelasan lebih lanjut yang diperlukan. Sekarang saatnya menulis kode untuk skrip login, yang akan kita tulis tepat di bawah kode koneksi MySQL. Kita mulai dengan sesuatu yang juga kita lakukan dalam formulir pendaftaran. if(isset($_POST['name']) && !empty($_POST['name']) AND isset($_POST['password']) && !empty($_POST['password'])){ // Both fields are being posted and there not empty }Jadi kita pertama kali memeriksa untuk melihat apakah data sedang diposting, dan kita memastikan bahwa itu tidak kosong. Kita membuat variabel lokal dan mengubah kata sandinya menjadi hash md5 agar sesuai dengan hash kata kunci yang telah kami simpan di database. Kita menulis kueri MySQL yang akan memilih username, password dan informasi aktif dari database kita, jika username dan kata sandi sesuai. Pada kode diatas kita cek apakah login itu sukses atau tidak. TamatDan itulah akhir dari tutorial ini! Saya harap Anda menikmatinya, dan jika Anda melakukannya silakan tinggalkan komentar di bawah ini!
|