Jump to content

[SOLVED] PHP captcha Help


darkfreaks

Recommended Posts

Hey im trying to figure out why it wont write the numbers to the captcha image here is the code

 

<?php
//Start the session so we can store what the code actually is. 
session_start(); 

//Now lets use md5 to generate a totally random string 
$md5 = md5(microtime() * mktime()); 

/* 
We dont need a 32 character long string so we trim it down to 5 
*/ 
$string = substr($md5,0,5);


/*
Now for the GD stuff, for ease of use lets create 
the image from a background image. 
*/ 

$captcha = imagecreatefrompng("captcha.png");

/* 
Lets set the colours, the colour $line is used to generate lines. 
Using a blue misty colours. The colour codes are in RGB 
*/ 

$black = imagecolorallocate($captcha, 0, 0, 0); 
$line = imagecolorallocate($captcha,233,239,239); 

/* 
Now to make it a little bit harder for any bots to break,  
assuming they can break it so far. Lets add some lines 
in (static lines) to attempt to make the bots life a little harder 
*/ 
imageline($captcha,0,0,39,29,$line); 
imageline($captcha,40,0,64,29,$line);


/* 
Now for the all important writing of the randomly generated string to the image. 
*/ 
imagestring($captcha, 5, 20, 10, $string, $black); 


/* 
Encrypt and store the key inside of a session 
*/ 

$_SESSION['key'] = md5($string); 

/* 
Output the image 
*/ 
header("Content-type: image/png"); 
imagepng($captcha);


?> 

 

Form code

<tr><td valign="center"><img src="http://www.wiccan-gathering.com/lilysgraveyard/addons/Guestbook/captcha.png" border="0"> </td></tr>
<tr>
<td valign="center"><input name="code" type="text" id="code" size="10" /></td></tr>

 

Link to comment
Share on other sites

It's hard to do error reporting with images.

Try commenting out this line:

header("Content-type: image/png");

 

This will let you see if any errors show up.

If not, try simplifying it by seeing if you can get it to print "hi". Then see if you can get it to print a random number. It's possible the problem is with your md5() section, I don't know.

Link to comment
Share on other sites

Oh. Your HTML links to the image, not to the PHP file. Change

<img src="http://www.wiccan-gathering.com/lilysgraveyard/addons/Guestbook/captcha.png" border="0">

 

to:

<img src="http://www.wiccan-gathering.com/lilysgraveyard/addons/Guestbook/guestbook.php" border="0">

 

You'll probably want to add a random number on the end to avoid caching.

Such as

http://www.wiccan-gathering.com/lilysgraveyard/addons/Guestbook/guestbook.php?t=<?php print time(); ?>

Link to comment
Share on other sites

And the problem is? It works there.

Did you add the timestamp like I said? Browsers will cache the image and so you'll only see an old version of it. This has been addressed a lot, I even posted about it this week.

Link to comment
Share on other sites

I'm not going to keep saying it over and over again.

<img src="captcha.php" border="0">

OBVIOUSLY is a broken image. This is the last time I will write it out:

Your image is at:

http://www.wiccan-gathering.com/lilysgraveyard/addons/Guestbook/captcha.php

 

So the HTML must be something like this:

<img src="http://www.wiccan-gathering.com/lilysgraveyard/addons/Guestbook/guestbook.php" border="0">

Since it's in the Guestbook folder.

Also, you'll want to add a random number such as the time.

<img src="http://www.wiccan-gathering.com/lilysgraveyard/addons/Guestbook/guestbook.php?t=<?php print time(); ?>" border="0">

Link to comment
Share on other sites

thanks so much  ;D

 

im sorry if im abit slow.

 

 

im not much with image stuff.

 

anyways one minor thing before i press solve topic,

 

it isnt verifying whether its right or not im assuming that would be the if statements?

 

<?php
//Encrypt the posted code field and then compare with the stored key 
if(md5($_POST['code']) != $_SESSION['key']) 
{ 
  die("Error: You must enter the code correctly"); 
}

}else{
$sql="INSERT INTO guestbook(name, email, comment, datetime)VALUES('$name', '$email', '$comment', '$datetime')";
$result=mysql_query($sql);



mysql_close();
}
?>

Link to comment
Share on other sites

Try this:

if(isset($_POST['submit'])){
   if(md5($_POST['code']) != $_SESSION['key']) { 
      die("Error: You must enter the code correctly"); 
   }else{
      $sql="INSERT INTO guestbook(name, email, comment, datetime)VALUES('$name', '$email', '$comment', '$datetime')";
      $result=mysql_query($sql);
   }
}

 

Assuming your submit button is named "submit" - if not, change that to whatever it is.

 

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.