Rabu, 23 Maret 2011

Membuat form komentar menggunakan captcha

Bagi para newbie-newbie yang baru belajar bikin website, kalian ga salah masuk blog ini, soalnya ane juga newbie http://www.smileycodes.info
Pada tutorial kali ini ane mau berbagi ilmu sedikit ni tentang cara membuat form komentar menggunakan captcha, yaaa walaupun tutorial ini agak mirip sama tutorial om Desrizal, soalnya ane juga belajar dari blognya om Desrizal, tapi codingnya udah ane kembangin lagi loohh http://www.smileycodes.info
Kalo ga percaya ente boleh kasih ane http://www.smileycodes.info klo masih ga percaya juga bandingin aja coding ane sama coding om Desrizal.
Okeh, teorinya seperti ini:
Mengapa menggunakan captcha? Karena kata om Desrizal supaya kita bisa tau yang komentar itu program spam atau manusia.
Karena dengan menggunakan captcha kita bisa memfilter komentar yang ada di website kita.
Biasanya captcha bisa berupa text berformat image akan tetapi supaya lebih menarik kali ini captcha-nya berupa kuis matematika.



Langkah pertama kita buat databasenya misalnya dengan nama comment
CREATE TABLE `comment` (
`id` int(3) NOT NULL auto_increment,
`nama` varchar(30) NOT NULL default '',
`email` varchar(30) default NULL,
`website` varchar(50) default NULL,
`komentar` varchar(250) NOT NULL default '',
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;


Setelah itu buat file dengan nama form-komentar.php
<?php
session_start();
?>
<div style="width:360px;">
<div style="background:#333333; width:350px; padding:5px; text-align:left; color:#ffffff; font-weight:bold;">Komentar</div>
<table border="0" width="360" cellspacing="1">
<?php
include ('config.php');
$tampil = "SELECT * FROM comment ORDER BY id DESC";
$hasil = mysql_query($tampil);
while ($data = mysql_fetch_array($hasil))
{
?>
<tr>
<td align="right" width="70">Nama : </td>
<td align="left"><?=$data['nama'];?></td>
</tr>
<tr>
<td align="right" width="70">Email : </td>
<td align="left"><a href="mailto:<?=$data['email'];?>"><?=$data['email'];?></td> <!-- supaya bisa ngeLink langsung ke Ms.Outlook -->
</tr>
<tr>
<td align="right" width="70">Website : </td>
<td align="left"><a href="<?=$data['website'];?>"><?=$data['website'];?></a></td> <!-- supaya bisa ngeLink langsung ke websitenya -->
</tr>
<tr>
<td align="right" valign="top" width="70">Komentar : </td>
<td align="left"><?=$data['komentar'];?></td>
</tr>
<tr>
<td colspan="2" style="border-bottom:1px solid #0000FF;">
</tr>
<?php
}
?>
</table>
<form action="insert-komentar.php" method="post">
<table border="0" width="360" cellspacing="1">
<tr>
<td align="right">Nama : </td>
<td align="left" colspan="2"><input type="text" name="nama" maxlength="20" size="20"></td>
</tr>
<tr>
<td align="right">Email : </td>
<td align="left" colspan="2"><input type="text" name="email" maxlength="30" size="20"></td>
</tr>
<tr>
<td align="right">Website : </td>
<td align="left" colspan="2"><input type="text" name="website" maxlength="50" size="39" value="http://"></td>
</tr>
<tr>
<td align="right" valign="top">Komentar : </td>
<td align="left" colspan="2"><textarea name="komentar" rows="8" cols="31"></textarea></td>
</tr>
<tr>
<td>&nbsp;</td>
<td align="left"><input type="text" size="3" name="jawaban" style="text-align:center;"></td>
<td align="left" width="210">
<?php
//meng-generate angka random integer antara 20 - 50
$jx = rand(20,50);
//meregisterkan angka tersebut ke session
$_SESSION['captchakuis'] = $jx;
$kx = rand(1,19);
$yx = $jx - $kx;
//mencetak ke halaman
echo "<b><font size='4'> = ".$yx." + ".$kx."</font></b>";
?>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td align="left" colspan="2"><input type="submit"></td>
</tr>
</table>
</form>
</div>


Lalu yang terkahir buat file insert-komentar.php
<?php
session_start();
$host="localhost"; // Host name
$username="root"; // Mysql username
$password="mobius"; // Mysql password
$db_name="belajar"; // Database name

//Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect to server");
mysql_select_db("$db_name")or die("cannot select DB");

//Buat variabel yang didapat dari method post
$nama = $_POST['nama'];
$email = $_POST['email'];
$website = $_POST['website'];
$komentar = $_POST['komentar'];
$jawaban = $_POST['jawaban'];

if(!isset($_SESSION['captchakuis'])){
die("isi form komentar dulu");
}
if($jawaban != $_SESSION['captchakuis']){
unset($_SESSION['captchakuis']);
die("Captcha Salah");
}
unset($_SESSION['captchakuis']);

if ($jawaban) {
$sql = "INSERT INTO comment SET nama='$nama', email='$email', website='$website', komentar='$komentar'";
$result = mysql_query($sql) or die ("Gagal query simpan ".mysql_error());
}
if ($result) {
echo "<meta http-equiv=\"refresh\" content=\"0;URL=form-komentar.php\">"; //supaya setelah mengisi kometarnya dan jawabannya itu benar maka akan kembali lagi ke halaman form-komentar.php
}
?>

Selesai deh..easy kan??

Budayakan komentar atau http://www.smileycodes.info

11 komentar:

  1. wah makasih bro infonya..newbie aja udah mau share ilmu yg bermanfaat..salut dah..terima kasih bro & salam kenal.

    BalasHapus
  2. mau tnya klu mau bkin stu2 tiap posting gmna ya?

    BalasHapus
  3. @boolabundar : salam kenal jg bro..makasih ya :)
    @zheriz : maksudnya "stu2" itu apa? tolong komennya jng disingkat,ane jd susah memahaminya hehe

    BalasHapus
  4. Variabel di session yg menunjukkan captcha kuis itu di buat gimana ? ['captchakuis']

    Itu bukannya memanggil field yg ada di database gan ?
    tapi di table ente ga ada field captchakuis nya, mohon pencerahannya,

    BalasHapus
    Balasan
    1. create suatu session ga harus dari field database gan
      searching dulu deh gan cara buat session di php

      Hapus