Hey guys, I have a CAPTCHA script that I got from the web, but it is not working. I have two components. One is the .php for the CAPTCHA and the other is the action page that verifies the CAPTCHA exists. Can you tell if both are correct?

Thank you

PHP script for CAPTCHA. Basically, there is an <img src> tag that is set to CaptchaSecurityImages.php and the contents are:

<?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($possible, mt_rand(0, strlen($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($image, 255, 255, 255);
	$text_color = imagecolorallocate($image, 20, 40, 100);
	$noise_color = imagecolorallocate($image, 100, 120, 180);
	/* generate random dots in background */
	for( $i=0; $i<($width*$height)/3; $i++ ) {
		imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);
	}
	/* generate random lines in background */
	for( $i=0; $i<($width*$height)/150; $i++ ) {
		imageline($image, mt_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_size, 0, $this->font, $code) or die('Error in imagettfbbox function');
	$x = ($width - $textbox[4])/2;
	$y = ($height - $textbox[5])/2;
	imagettftext($image, $font_size, 0, $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'] > 1 ? $_GET['characters'] : '6';

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

?>

In addition, the action page is:

<?php
	session_start();

if(($_SESSION['security_code'] == $_POST['security_code']) && (!empty($_SESSION['security_code'])) ) 

{
   unset($_SESSION['security_code']);

$email=$_REQUEST['email'];
function spamcheck($email)
{
	$email=filter_var($email, FILTER_SANITIZE_EMAIL);
	if(filter_var($email, FILTER_VALIDATE_EMAIL))
		{
			return TRUE;
		}
	else
		{
			return FALSE;
		}
}
if (isset($_REQUEST['email']))
	{
		$mailcheck = spamcheck($_REQUEST['email']);
		if ($mailcheck==FALSE)
			{
				echo "Please enter a correct email address.  Press the Back button to go back.";
			}
		else
			{
				$message = "";//Message starts empty
				while (list($key, $value) = each($_REQUEST)) 
					{ //Populate variables from GET and POST
						${$key} = $value;//this assigns all the variables in GET and POST to their names.
						if (strtolower($key) != "submit" && strtolower($key) != "redirect" && strtolower($key) != "phpsessid")//filter out a couple of ones that shouldn't be included in the email
						$message .= $key . ": " . stripslashes($value) . "\n\r";//add the rest to the $message variable
					}//end Populate Variables
				if(mail($recipient, $subject, $message, 'From: ' . $name . ' <' . $email . '>'))//try sending the mail...
					{
						header("Location: $redirect");//Forward them to the redirect location.
						exit();
					} 
				else 
					{//if the mail didn't send (returned false) report an error.
						?>Sorry, there was an error.  The form was not submitted.  Please click <a href="contactus.php">here</a> to resubmit.
				 <?php 
				 }
			}
      }
}
else 
{
     die("The captcha you entered was incorrect");
}
?>

    EDIT: The issue is that the CAPTCHA image is not showing up in the form (using <img src="CaptchaSecurityImages.php" />. And when I click Submit, the script falls to the die line and gives "The captcha you entered is incorrect."

    But I don't even see the image to know what to type...

      you need 2 files for captcha image to be created:

      'monofont.ttf' (font file ,can be downloaded)
      'CaptchaSecurityImages.php'
      ... they should be in same directory

      To see if any image is created
      make an empty page(html), with only this line:
      <img src="CaptchaSecurityImages.php" />

      If this works, then the problem is somewhere else.
      I can not see anything wrong in the CaptchaSecurityImages.php
      I think it is correct.

        Don't forget to mark this thread resolved using the link on the Thread Tools menu.

          By the way, I think bradgrafelman meant Thread Tools. We are not quite as threatening as we may seem 😃

            laserlight;10949896 wrote:

            By the way, I think bradgrafelman meant Thread Tools. We are not quite as threatening as we may seem 😃

            Says the evil witch! :p

              9 years later

              my form is not validating. Everything shows fine. The problem is that if I put anything or nothing, it still gets validated fine without any errors.

              any suggestions?

                Set it to return false.

                Always. 😃

                And start a new thread, post code using the code tags (or, 3 backticks works in the MarkDown lingo), and give some more detail and maybe someone will be more helpful than I've been so far here. 🙂

                  Write a Reply...