Re: php run captcha script on localhost [message #181525 is a reply to message #181513] |
Sun, 19 May 2013 20:16 |
Jerry Stuckle
Messages: 2598 Registered: September 2010
Karma:
|
Senior Member |
|
|
On 5/19/2013 12:23 PM, Paul Klacher wrote:
> 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.
>
You did use phpinfo() in a web page, right? Once changing something in
php.ini, you need to stop and restart the web server, and the PHP does
not necessarily reflect what the web server is using.
>
>>>> (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!"
>
OK, your echo statements indicate you have session_start() at the
beginning of your code, as it should be (or it wouldn't echo the
$_SESSION value properly).
But if the codes don't match, then there's obviously a difference.
White space, maybe? What do you get if you try something like:
echo '"' . $_SESSION['6_letters_code'] . '"';
> echo "<br>\n"; // "\n" will not generate a nl in HTML
> echo '"' . $_POST['6_letters_code2'] . '"';
This will place quote marks around the exact value in each case, showing
if you have any extra white space in either.
> 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
>
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex(at)attglobal(dot)net
==================
|
|
|