About Me

Hai, saya Rosihan Ari Yuana. Saya sehari-hari adalah mengajar di Universitas Sebelas Maret.

Bidang riset saya tentang adaptive learning, computer aided learning, dan datascience

Selain itu, saya juga seorang penulis buku dan blogger.

More about me...

  • Home
  • /
  • PHP
  • /
  • Ide Membuat Buku Tamu dengan Automatic Filtering
PHP

Ide Membuat Buku Tamu dengan Automatic Filtering

Salah satu teman sekaligus member saya (mas yoyok) sedang dipusingkan dengan buku tamunya yang sering kemasukan komentar-komentar spam. Meskipun sudah dilengkapi dengan captcha, tapi masih saja spam itu bisa masuk ke buku tamu. Aduh… cape deh..

Untuk mencegah spam masuk ke dalam buku tamu, ada beberapa teknik yang bisa digunakan. Teknik pertama adalah menggunakan captcha yaitu user sebelum mensubmit komentar buku tamu terlebih dahulu harus mengisi semacam kode yang tertera di halaman tersebut. Biasanya kode ini bersifat random. Teknik penggunaan captcha ini bertujuan untuk memverifikasi apakah pengisi buku tamu merupakan mesin spam ataukah manusia sejati. Anda dapat membaca teknik ini di artikel saya yang lain.

Teknik kedua untuk mencegah spam masuk, yaitu menggunakan filtering. Biasanya, spam-spam nakal berisi komentar yang di dalamnya terdapat hal-hal yang berbau ‘sex’, ‘xxx’, ‘porn’ atau link-link tertentu. Bisa juga teknik automatic filtering ini mencegah buku tamu dari komentar-komentar yang berbau tidak sopan dalam hal ini yang dikirim oleh manusia. Nah.. dengan teknik filtering ini, bila komentar terdapat salah satu atau beberapa kata-kata tersebut maka secara otomatis langsung direject atau ditolak (tidak tersimpan di database).

Anda dapat menggunakan salah satu teknik di atas atau bahkan menggabungkannya menjadi kesatuan. Dengan digabungkannya kedua teknik tersebut, maka diharapkan buku tamu Anda akan lebih terproteksi dari spammer.

Nah.. pada artikel ini khusus akan dibahas bagaimana ide untuk membuat buku tamu dengan automatic filtering.

Pembahasan kita mulai dari membuat struktur tabel untuk menyimpan data buku tamu terlebih dahulu.

CREATE TABLE guestbook (
  id int(11) auto_increment,
  nama varchar(20),
  email varchar(20),
  tanggal date,
  komentar text,
  PRIMARY KEY  (id)
) 

Field ‘id’ digunakan untuk pembeda antar entri buku tamu. Field ini akan bermanfaat bila Anda memberikan fitur untuk mengedit komentar buku tamu yang masuk, atau fitur untuk menghapus komenter. Pengeditan dan penghapusan komentar tersebut berdasarkan ID komentar. Untuk mudahnya, ID komentar ini kita buat menggunakan auto increment.

Field ‘nama’ nantinya akan diisi oleh nama pengisi buku tamu. Field ’email’ terkait dengan alamat email pengisi. Dalam buku tamu nanti akan disimpan pula tanggal pengisian komentar.

Nah… selanjutnya kita buat form isian buku tamu

guestbook.htm


<h1>Guest Book</h1>
<form method="post" action="submit.php">
<table border="0">
  <tr><td>Nama Anda</td><td>:</td><td><input type="text" name="nama" /></td></tr>
  <tr><td>Email Anda</td><td>:</td><td><input type="text" name="email" /></td></tr>
  <tr><td>Komentar</td><td>:</td><td><textarea name="komentar"></textarea></td></tr>
  <tr><td></td><td></td><td><input type="submit" name="submit" value="Submit" /><input type="reset" name="reset" value="Reset" /></td></tr>  
</table>
</form>

Keterangan:
untuk field tanggal, nantinya akan digenerate secara otomatis oleh function yang akan membaca tanggal saat pengisian komentar (recent date).

Form telah dibuat, selanjutnya kita buat script untuk memproses isian buku tamu.

Mmm.. sebelum kita mulai membuat scriptnya, terlebih dahulu harus kita buat konsep dalam pemrosesan isian buku tamu ini.

Hal pertama yang harus kita pikirkan adalah, bagaimana supaya user tidak bisa menuliskan data isian buku tamu menggunakan tag HTML. Lho mengapa demikian? Ya.. karena terkadang ada user nakal yang sengaja menyisipkan tag-tag HTML untuk membuat suasana buku tamu menjadi rusak. Untuk itu, kita harus pikirkan bagaimana supaya bila user menyisipkan tag HTML, tag tersebut tidak terbaca atau tersimpan.

OK.. untuk mewujudkan hal di atas, solusinya adalah kita gunakan function strip_tags(). Function ini akan menghilangkan semua tag HTML dari suatu string yang di dalamnya terdapat tag HTML. Function ini nanti akan kita berikan pada setiap string yang diisikan user baik nama, email maupun komentar.

Selanjutnya kita pikirkan tentang filtering bad wordsnya. Untuk mengimplementasikan hal ini, terlebih dahulu kita buat daftar bad words nya. Daftar ini bisa kita nyatakan dalam bentuk array. Nah… selanjutnya, untuk setiap kata dalam array bad words tersebut kita cek keberadaannya dalam komentar. Bila komentar terdapat minimal sebuah bad word, maka isian buku tamu langsung ditolak.

Mungkin yang menjadi pertanyaan di benak Anda adalah, bagaimana caranya mengecek ada tidaknya sebuah bad word dalam komentar? Hmm… mudah saja kawan. Caranya dengan menggunakan function strpos().

Secara umum function strpos() ini digunakan untuk mengecek keberadaan suatu substring dalam string. Bila subtring tersebut tidak terdapat dalam string, maka akan menghasilkan nilai FALSE.

Trus… bagaimana cara mengimplementasikan strpos() ini terhadap proses filteringnya? OK.. konsepnya adalah, pertama kita asumsikan terlebih dahulu bahwa status komentarnya adalah bersih alias ‘tidak mengandung bad words’.

Selanjutnya kita cek satu-persatu untuk setiap kata dalam daftar bad words yang terletak dalam array. Apabila ditemukan sebuah bad word dalam komentar, maka status komentarnya menjadi ‘ada bad word’. Karena telah ditemukan sebuah bad word dalam komentar, maka boleh kita hentikan proses pencariannya untuk bad word yang lain. Kalaupun dilanjutkan juga tidak apa-apa.

Nah… setelah terindikasi bahwa komentar mengandung bad word, maka data isian tersebut tidak kita simpan ke database.

OK.. we’ve got it… konsep dan ide sudah dapat, sekarang mulai buat scriptnya.

submit.php

<?php

// daftar bad words

$badWords = array("sex","xxx","viagra","http","porn");

// membaca isian buku tamu dengan strip_tags()

$namaPengisi = strip_tags($_POST['nama']);
$emailPengisi = strip_tags($_POST['email']);
$isi = strip_tags($_POST['komentar']);

// membaca tanggal ketika pengisian

$tanggal = date("Y-m-d");

// asumsikan komentarnya tidak mengandung bad word

$status = "tak ada";

// cek keberadaan setiap bad word dalam komentar

for($i = 0; $i <= count($badWords)-1; $i++)
{
   if (!(strpos($isi, $badWords[$i]) == false))
   {
      // jika ditemukan sebuah bad word dalam komentar, maka status menjadi 'ada'
      // proses looping langsung dihentikan

      $status = "ada";
      break;
   }
}

// cek status akhir
// bila status bad word tidak ada, maka data isian tersimpan ke database
// bila ada, maka direject

if ($status == "tak ada")
{
   mysql_connect("localhost", "root", "root");
   mysql_select_db("contoh");
   $query = "INSERT INTO guestbook(nama, email, tanggal, komentar)
             VALUES ('$namaPengisi', '$emailPengisi', '$tanggal', '$isi')";
   $hasil = mysql_query($query);
   
   if ($hasil) echo "Terimakasih telah mengisi buku tamu";
   else echo "Pengisian buku tamu gagal";
}
else
{
   echo "Maaf komentar Anda mengandung kata-kata yang tidak sopan";
}

?>

Gimana mudah bukan membuatnya? Nah… silakan script di atas dikembangkan sendiri ya. Bisa Anda gabung dengan teknik captcha atau menggunakan sistem moderasi sebelum isian buku tamu ditampilkan/dipublish.

Selamat mencoba…

 

Bagikan artikel ini jika bermanfaat !

Saya seorang dosen dan peneliti di Universitas Sebelas Maret. Bidang penelitian saya tentang: adaptive learning, datascience, dan computer aided learning. Selain itu saya juga seorang blogger, serta penulis buku tentang pemrograman, dan matematika.

Leave a Reply