There are a lot of good captcha scripts to defend our pages from spammers, however if you're not a good coder (as myself) you'll have problems to implement them into your script...
I'll try to make it short :
PHP Code:
<?
ob_start
();
session_start();
// include the database configuration and
// open connection to database
include 'library/config.php';
include 
'library/opendb.php';

// check if the form is submitted
if(isset($_POST['btnSign']))
{
// get the input from $_POST variable
// trim all input to remove extra spaces
$name    trim($_POST['txtName']);
$email   trim($_POST['txtEmail']);
$url     trim($_POST['txtUrl']);
$message trim($_POST['mtxMessage']);
    
// escape the message ( if it's not already escaped )
    
if(!get_magic_quotes_gpc())
    {
        
$name    addslashes($name);
        
$message addslashes($message);
    }
    
// if the visitor do not enter the url
// set $url to an empty string
    
if ($url == 'http://')
    {
    
$url '';
    }
   
// prepare the query string
$query "INSERT INTO guestbook (name, email, url, message, entry_date) " .
"VALUES ('$name', '$email', '$url', '$message', current_date)";
  
// redirect to current page so if we click the refresh button
// the form won't be resubmitted ( as that would make duplicate entries )
header('Location: ' $_SERVER['REQUEST_URI']);
   
// force to quite the script. if we don't call exit the script may
// continue before the page is redirected
exit;
}
ob_end_flush(); 
?>

<script language="JavaScript">
/*
    This function is called when
    the 'Sign Guestbook' button is pressed
    Output : true if all input are correct, false otherwise
*/
function checkForm()
{
    // Here goes the JS to validate the form
}
</script>


<form method="post" name="guestform" action="forum.php">
<?
if( isset($_POST['submit'])) {
   if( 
$_SESSION['security_code'] == $_POST['security_code'] && !empty($_SESSION['security_code'] ) ) {
        
// Insert you code for processing the form here, e.g emailing the submission, entering it into a database.
// execute the query to insert the input to database
// if query fail the script will terminate         
mysql_query($query) or die('Error, query failed. ' mysql_error());
        unset(
$_SESSION['security_code']);
   } else {
        
// Insert your code for showing an error message here
        
echo 'A biztons&#225gi k&#243d hib&#225s!';
   }
} else {
?>

 <table width="720" border="0" cellpadding="2" cellspacing="1" bgcolor="ffffff">
  <tr>
   <td width="125"><br><p class="form">N&#233v *</p></td> 
   <td><br>
    <input name="txtName" type="text" id="txtName" size="30" maxlength="30"></td>
 </tr>
  <tr> 
   <td><p class="form">Email</p></td>
   <td> 
    <input name="txtEmail" type="text" id="txtEmail" size="30" maxlength="50"></td>
 </tr>
  <tr> 
   <td><p class="form">Weboldal URL</p></td>
   <td> 
    <input name="txtUrl" type="text" id="txtUrl" value="http://" size="30" maxlength="50"></td>
 </tr>
  <tr> 
   <td><p class="form">Beir&#225s *</p></td> 
   <td><textarea name="mtxMessage" cols="70" rows="5" id="mtxMessage"></textarea></td>
 </tr>
  <tr> 
   <td colspan="2"><p class="form">* - nem maradhat &#252resen! </p></td> 
  </tr>    
  <tr>
      <td>
            <img src="CaptchaSecurityImages.php?width=100&height=40&characters=5" /><br />
        <label for="security_code">Security Code: </label><input id="security_code" name="security_code" type="text" /><br />
</td></tr>
  <tr> 
   <td>&nbsp;</td>
   <td> 
    <input name="btnSign" type="submit" id="btnSign" value="Adatok bevitele" onClick="return checkForm();"></td>
 </tr>
</table>
</form>
<?
}
// include the database configuration and
// open connection to database
include 'library/config.php';
include 
'library/opendb.php';

$query   "SELECT COUNT(id) AS numrows FROM guestbook";
$result  mysql_query($query) or die('Error, query failed. ' mysql_error());
$row     mysql_fetch_array($resultMYSQL_ASSOC);
$numrows $row['numrows'];
?>
Hope you can see what's happening behind the scenes cause I lost control. The script accepts input regardless to the security code.
Here's the CaptchaSecurityImages.php :
PHP Code:
<?php
session_start
();

/*
* File: CaptchaSecurityImages.php
* Author: Simon Jarvis
* Copyright: 2006 Simon Jarvis
* Date: 03/08/06
* Updated: 07/02/07
* Requirements: PHP 4/5 with GD and FreeType libraries
* Link: http://www.white-hat-web-design.co.uk/articles/php-captcha.php

* This program is free software; you can redistribute it and/or 
* modify it under the terms of the GNU General Public License 
* as published by the Free Software Foundation; either version 2 
* of the License, or (at your option) any later version.

* This program is distributed in the hope that it will be useful, 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
* GNU General Public License for more details: 
* http://www.gnu.org/licenses/gpl.html
*
*/

class CaptchaSecurityImages {

    var 
$font 'monofont.ttf';

    function 
generateCode($characters) {
        
/* list all possible characters, similar looking characters and vowels have been removed */
        
$possible '23456789bcdfghjkmnpqrstvwxyz';
        
$code '';
        
$i 0;
        while (
$i $characters) { 
            
$code .= substr($possiblemt_rand(0strlen($possible)-1), 1);
            
$i++;
        }
        return 
$code;
    }

    function 
CaptchaSecurityImages($width='120',$height='40',$characters='6') {
        
$code $this->generateCode($characters);
        
/* font size will be 75% of the image height */
        
$font_size $height 0.75;
        
$image = @imagecreate($width$height) or die('Cannot initialize new GD image stream');
        
/* set the colours */
        
$background_color imagecolorallocate($image255255255);
        
$text_color imagecolorallocate($image2040100);
        
$noise_color imagecolorallocate($image100120180);
        
/* generate random dots in background */
        
for( $i=0$i<($width*$height)/3$i++ ) {
            
imagefilledellipse($imagemt_rand(0,$width), mt_rand(0,$height), 11$noise_color);
        }
        
/* generate random lines in background */
        
for( $i=0$i<($width*$height)/150$i++ ) {
            
imageline($imagemt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);
        }
        
/* create textbox and add text */
        
$textbox imagettfbbox($font_size0$this->font$code) or die('Error in imagettfbbox function');
        
$x = ($width $textbox[4])/2;
        
$y = ($height $textbox[5])/2;
        
imagettftext($image$font_size0$x$y$text_color$this->font $code) or die('Error in imagettftext function');
        
/* output captcha image to browser */
        
header('Content-Type: image/jpeg');
        
imagejpeg($image);
        
imagedestroy($image);
        
$_SESSION['security_code'] = $code;
    }

}

$width = isset($_GET['width']) ? $_GET['width'] : '120';
$height = isset($_GET['height']) ? $_GET['height'] : '40';
$characters = isset($_GET['characters']) && $_GET['characters'] > $_GET['characters'] : '6';

$captcha = new CaptchaSecurityImages($width,$height,$characters);

?>
Help is appreciated!!!!!!!!!!!!!!!!!