Ide Membuat Buku Tamu dengan Automatic Filtering
April 19th, 2009 | by rosihanari |
Cetak Artikel Ini
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…
Anda ingin mendownload beberapa tool programming 100% gratis?
Silakan download di FREE PROGRAMMING TOOLS.
atau ingin berdonasi untuk pengembangan blog ini cukup dengan $1 via Paypal?
Beberapa artikel terkait
- Membuat Buku Tamu dengan Akun Facebook (Bag 3)
- Membuat Buku Tamu dengan Akun Facebook (Bag 2)
- Membuat Buku Tamu dengan Emoticons
- Membuat Buku Tamu dengan Akun Facebook (Bag 1)
- Membuat Auto Deletion (Hapus Otomatis) Data Dengan Script PHP
- Buku Platinum Matematika untuk SMA
- Ide Membuat Advanced Paging dengan PHP
- Mudahnya Membuat Barcode dengan PHP
- Ide Membuat Program Mengecek Bilangan Prima
- Membuat Kalkulator Berbasis String dengan PHP
Share this article on:
Kata kunci: filtering - guestbook - spam -





Terima kasih mas, atas informasinya yang sangat berarti bagi saya. sekali lagi terima kasih.
Mas artikelnya bagus, sedikitpun tidak ada hal disembunyiin, kalo setiap master ky gini semua orang-orang indonesia cepet maju mas, mudah2an kakinya mas sudah ada di surga.
Mas minta tolong sy lg bikin blog guru, cuman mentok mas, dimana sy pengen ada postingan daftar nilai tinggal ketik nama langsung muncul nilainya, di blog ga bisa ya mas seperti itu? mohon bantuan dan bimbingannya, kalo ada artikel semacam itu mohon dikirim ya mas, atur nuhun
to farid: amin… yaa robbal alamin… blog Anda di mana mas farid? kalo di wordpress.com atau blogspot.com itu tidak bisa dibuat form sendiri karena untuk membuat form dan script processingnya harus kita upload ke server atau utak-atik scriptnya. Tapi kalo blog Anda di self hosting, hal tsb bisa dilakukan.
pak maaf saya ga tahu harus ngirim komentar dimana di situs ini. gini kan dulu pernah ada postingan agar status YM kita bisa keliatan pas online atau off kalo ga salah pake scrip gini.
Nah berarti kita secara tidak langsung conec ke yahoo dong. apakh itu legal bila scrip ini digunakan di web resmi. dan memperlambat proses pembukaan web kita dong bila scrip ini dipasag
to ridwan: iya dengan script tsb maka langsung terhubung ke server Yahoo, demikian pula image yang menunjukkan status online atau offlinenya. Kalau menurut saya script itu legal dan begitu pula imagenya. Dalam TOS YM http://info.yahoo.com/legal/us/yahoo/messenger/messengertos/messengertos-279.html tidak disebutkan larangan dalam menyisipkan image status yang tersambung ke server Yahoo ke dalam web kita.
pak gimana sih cara bikin ato nampilin berita yang ada imagenya. trus posisinya kaya artikel bapak diatas. Jadi gambar disebelah kiri trus beritanya disebelah kanan. diterusin dibawahnya. kaya berita diatas itu lho yang ada gambar x nya. di artikel membuat “buku tamu dengan auto filtering. maksh”
to ridwan: ya gunakan atribut align=”..” saja pada <img src=”..”> contoh:
<img src=”…” align=”left”>
<p>ini adalah paragraf. ini adalah paragraf. ini adalah paragraf. ini adalah paragraf. ini adalah paragraf. ini adalah paragraf. ini adalah paragraf. ini adalah paragraf. ini adalah paragraf. ini adalah paragraf. ini adalah paragraf. ini adalah paragraf. </p>
Tag <img src=”…” align=”left”> digunakan untuk menempatkan image di sebelah kiri dari paragraf.
mas, saya sedang belajar php. yang sedang saya pelajari adalah script tentang pencarian, tp saya selalu gagal mencoba nya. mas bisa kasih contoh tentang script pencarian yang lebih banyal lagi ga! trima kasih.
to abdul: coba baca http://blog.rosihanari.net/ide-membuat-script-php-untuk-pencarian-dengan-multi-kategori/
Assalamu’alaikum……..
mas,bgmn mnmplkn komntar dibuku tamu??
trs bgmn code memoderasi guest book??
sblmnya trmksh,sukses buat mas rosihanari
to teguh: kapan-kapan kalau sempat saya coba bahas mas
ass. pak saya mau tanya. ini ada komentar yang ga harus diartuikel ga sih. biar langsung gitu. jadi nantinya saya ga harus nyari jawaban lewat komentar di artikel ini. oya saya juga mau tanya. misal ni ada tabel dengan field kode, mahasiswa, tahun masuk dan tahun keluar. nah kemudian ada combo box yang isinya nama mahasiswa. jika kita pilih nama mahasiswa otomatis kita dapat 2 variabel yang isinya misal $a=tahunmasuk dan $b=tahun keluar. jadi otomatis gitu. saya juda nyoba buat tapi selalu variabel yang paling atas yang muncul..
jadi gini misal ada nama mhsw A dan B
nah saya pake kondisi gini
if A maka $a=tahunmasuk dari Mhs A, $b=tahunkeluar Mhs A. else $c=tahun masuk Mhs B, $d=tahun keluar Mhs B. tapi selalu yang kebaca nilai variabel selalu dari
mhs A. makasih, maaf terlalu panjang
to ridwan: Sorry… I can’t understand what you mean…
gini pak misal ada tabel dengan tiga field
nama_mhs, tahun_masuk, tahun_keluar
misal isinya
nama_mhs tahun_masuk tahun_keluar
pipit 2003 2007
retno 2002 2005
shinta 2001 2004
nah kita membuat sebuah combobox dimana datanya diambil dari data diats dan value dari combo box diatas adalah nama2 dari mahsiswa diatas.
kemudian bila kita klik salah satu nama diatas. kita akan mendapatkan tahun_masuk dan tahun_keluar dari mahasiswa yang namanya kita klik.yang disimpan dalam 2 variabel. misal $tahunMasuk dan $tahunKeluar. nah itu gimana caranya. Terima kasih
allow bro1 mo nanya kalo ada kat2 kayak gini bisa kena filter gk seX sEx SEX perpaduan huruf besar kecil. kalau semua dimasukin ke array entar jadi banyak banget. oh iya gimana sih java script alert yang disertai dengan nama ketika user berhasil post komentar. misalkan alert nya kayak gini “terimakasih budi sudah mengisi buku tamuku”
allow. aq mo nanya, gimana caranya biar user pas berhail kirim post di buku tamu bisa muncul link delet/hapus dipost yang ia kirim. kalau sesion udah habis maka link delet/hapaus tadi bisa hilang. gimana caranya biar bisa kayak gitu
to bondowoso: hendaknya list kata2 yang disensor dibuat teks besar semua atau kecil semua, lalu semua teks yang dimasukkan dinyatakan ke dalam kapital semua atau kecil semua lalu dibandingkan dengan list kata sensornya. Tapi proses konversi ke huruf kapital atau kecil semua ini hanya untuk proses filtering saja, tidak sampai ke penyimpanannya,.
Mohon maaf, numpang promosi. Saya juga bikin script filter kata-kata kotor. Tapi metodenya dengan menyensor langsung kata-kata kotor tersebut. Di situ menggunakan fungsi preg_replace_callback. Bisa di cek di http://www.iroel.web.id/advance-php-bad-word-filtering-menggunakan-perl-regex-pcre.htm. Sekedar sharing sih, baris ini:
if (!(strpos($isi, $badWords[$i]) == false))
sebaiknya diganti dengan
if (strpos($isi, $badWords[$i]) !== false)
bukan !=, karena khawatirnya klo ada kata yang difilter terletak di awal kalimat (contoh: sex mania, berarti posisi = 0), mungkin tidak terdeteksi. Karena nilai false, 0, null, ” (string kosong) cenderung sama. Makanya perlu diganti dengan !== biar tipe variabelnya juga dicocokkan. Biar list bad wordnya nggak panjang, strpos diganti stripos (versi case insensitive). Lebih baik lagi klo menggunakan fungsi regex perl (golongan fungsi preg_) yang notabene lebih cepat dari fungsi regex posix (golongan fungsi ereg_).
Contoh:
$badWords_new = array();
foreach ($badWords as $word) $badWords_new[] = ‘/(\b)(‘.$word.’)(\b)/i’;
if (preg_match($badWords_new, $isi)) $status = ‘ada’;
Postingan terakhir si iroel di blognya: Advance PHP Bad Word Filtering menggunakan perl regex (PCRE)
to iroel: wah keren idenya. Thanks atas infonya.. dapat jadi referensi lain.
allow rosihanari. met jumapa lagi nich. ni buku tamuku http://dudungwap.co.cc/gb tapi belum ada filter bad words nya.
Pak ari, kalau buat filter form untuk mengatasi inject script html, sql injection, bbcode, dan yang lain-lain yang mudah dan secure pake yang gmana pak??
Terima kasih..
.-= indfyz´s last blog ..Sial lagi…. Sial terus… Please dong ah.. =-.
@indfyz: coba anda cari artikel tentang sql injection di blog ini mas. Saya pernah menulis beberapa artikel terkait hal tsb.
Asalamualikum..
Sebelumnya saya mo berterimakasih utk pak ari.. karena dengan adanya blog ini amat sangat membantu saya dalam belajar php.
mengenai buku tamu, klo bleh saya bertanya..
bagai mana membuat buku tamu dengan menyediakan icon2 yang menghasilkan BBcode sebagai editing teks.
saya sangat membutuhkan’y untuk form input artikel yang sedang saya coba buat. mohon pencerahan..
terima kasih.
wasalamualikum..
@zony: kan di blog ini ada artikel yang berjudul Membuat Buku Tamu dengan Emoticons mas… dipelajari sendiri ya…
tu artkel untuk menampilkan emoticon ya pa.. wah, saya juga perlu itu.. mkasih ya pa.
tpi maf pa..
bukan itu yg saya mksud. mugkin krna saya emang blum mngerti bbcode jdi slah pertanyaa…
yg saya mksd icon2 untuk editing teks, sperti rata kiri/kanan/tengah, bold, bullet.. dll
apa itu mengguakan bbcode or apa ??
terimakasih sblumnya, maf merepotkan.
@zony: oh.. itu pakai script yang namanya Tiny MCE mas.. silakan kunjungi http://tinymce.moxiecode.com/index.php untuk info lengkapnya.
pa ari.. saya ko ga gerti gimana cara menggunakan tiny MCE. kalo boleh saya mohon petunjuk dari bapa..
terimakasih sblumnya
@zony: barangkali artikel yang ada di http://www.ilmuwebsite.com/detil_php_tutorial/38/Instalasi_Word_Processor_tinyMCE_-_WYSIWYG/ bisa membantu Anda.
keren mas.. mas ada gak script buat agar tanda seperti / tidak bisa dikirim ke databe my sql. soalnya komentar saya tergadang ada orang yg iseng mengirim script-script, tolong kirim ke email saya yah.. terima kasih