Re: php run captcha script on localhost [message #181513 is a reply to message #181499] |
Sun, 19 May 2013 16:23 |
Paul Klacher
Messages: 5 Registered: May 2013
Karma:
|
Junior Member |
|
|
Hi Jerry
Thanks for your help.
I have left for a while testing captcha script on localhost and went straight doing test onto the server
But I can't get the script to work at all
In between I have made some of the changes in my php.ini
like
error_reporting = E_ALL
display_errors = on
I checked and it was on.
>>> (These should always be on for a development system while display_errors
should never be on for a production system).
>>> Next, this must be in a separate file called from an img= statement, not
in the code with the rest of your page. What happens when you try
to load the image in your browser directly?
I'll check this after it works online
Below are some html and php extract form file currently online
Running the script online keeps returning
"The captcha code does not match!"
I have added an echo statement for the captcha value and the server value and it displays the same value but it doesn't write to the .txt file (the form is just writing to a text file, not sending an email as the server doesn't allow me to do that... free hosting)
------------------------------------------------------------
index99_comments.html
(the html for the form)
------------------------------------------------------------
<div id="gate_A_resize3_comments"><p id="blackboard"></p>
<form method="POST" name="contact_form" action="index99_.php">
<p>Your Name (Optional)<input type="text" name="name">
> Email Address <input type="text" name="email">
<br />
<p>Message: </p><CENTER>
<textarea name="comments" maxlength="1000" cols="40" rows="12"></textarea></p>
<p><label><img src="index99_test_captcha.php" id='captchaimg' ></label></p>
<p><label for='message'>Enter the code above</label>
<input id="6_letters_code" name="6_letters_code2" type="text"></p>
<p><input type="submit" value="Submit"></center></p>
</form>
</div>
------------------------------------------------------------
index99_.php
------------------------------------------------------------
<?php
$name = $_POST['name'];
$email_from = $_POST['email'];
$comments = $_POST['comments'];
$errors = '';
//Note: the captcha code is compared case insensitively.
//if you want case sensitive match, update the check above to
// strcmp()
if(empty($_SESSION['6_letters_code'] ) || strcasecmp($_SESSION['6_letters_code'], $_POST['6_letters_code2']) != 0){
$errors .= "\n The captcha code does not match!\n";
}
if(!empty($errors)){
echo "Message failed to send \n";
echo "<p class='err'>".nl2br($errors)."</p>";
echo $_SESSION['6_letters_code'];
echo "\n";
echo $_POST['6_letters_code2'];
}
function clean_string($string){
$bad = array("content-type", "bcc:", "to:", "cc", "href");
return str_replace($bad, "", $string);
}
//open the file and choose the mode
if(empty($errors)){
$cmess = "Form details below.\n\n";
$cmess .= "Name : " .clean_string($name)."\n";
$cmess .= "email : " .clean_string($email_from)."\n";
$cmess .= "Comments : ".clean_string($comments)."\n";
$fh = fopen("***", "a");
fwrite($fh, $cmess);
//close the file
fclose($fh);
//header("Location: http://localhost/***");
header("Location: http://***");
}
?>
------------------------------------------------------------
index99_captcha_code_file.php
------------------------------------------------------------
<?php
/*
*
* this code is based on captcha code by Simon Jarvis
* 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
*
* 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
*/
session_start();
//Settings: You can customize the captcha here
$image_width = 120;
$image_height = 40;
$characters_on_image = 6;
$font = './monofont.ttf';
//The characters that can be used in the CAPTCHA code.
//avoid confusing characters (l 1 and i for example)
$possible_letters = '23456789bcdfghjkmnpqrstvwxyz';
$random_dots = 0;
$random_lines = 20;
$captcha_text_color="0x142864";
$captcha_noice_color = "0x142864";
$code = '';
$i = 0;
while ($i < $characters_on_image) {
$code .= substr($possible_letters, mt_rand(0, strlen($possible_letters)-1), 1);
$i++;
}
$font_size = $image_height * 0.75;
$image = imagecreate($image_width, $image_height);
/* setting the background, text and noise colours here */
$background_color = imagecolorallocate($image, 255, 255, 255);
$arr_text_color = hexrgb($captcha_text_color);
$text_color = imagecolorallocate($image, $arr_text_color['red'], $arr_text_color['green'], $arr_text_color['blue']);
$arr_noice_color = hexrgb($captcha_noice_color);
$image_noise_color = imagecolorallocate($image, $arr_noice_color['red'], $arr_noice_color['green'], $arr_noice_color['blue']);
/* generating the dots randomly in background */
for( $i=0; $i<$random_dots; $i++ ) {
imagefilledellipse($image, mt_rand(0,$image_width), mt_rand(0,$image_height), 2, 3, $image_noise_color);
}
/* generating lines randomly in background of image */
for( $i=0; $i<$random_lines; $i++ ) {
imageline($image, mt_rand(0,$image_width), mt_rand(0,$image_height), mt_rand(0,$image_width), mt_rand(0,$image_height), $image_noise_color);
}
/* create a text box and add 6 letters code in it */
$textbox = imagettfbbox($font_size, 0, $font, $code);
$x = ($image_width - $textbox[4])/2;
$y = ($image_height - $textbox[5])/2;
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font , $code);
/* Show captcha image in the page html page */
header('Content-Type: image/jpeg');// defining the image type to be shown in browser widow
imagejpeg($image);//showing the image
imagedestroy($image);//destroying the image instance
$_SESSION['6_letters_code'] = $code;
function hexrgb ($hexstr)
{
$int = hexdec($hexstr);
return array("red" => 0xFF & ($int >> 0x10), "green" => 0xFF & ($int >> 0x8), "blue" => 0xFF & $int);
}
?>
Thanks if you debug/help this out
By the way, I am somehow learning php. I am more a vba programmer... so sorry for php improvisation on syntax.
P
|
|
|