开发者

Session variables not visible in a Jquery posted script?

开发者 https://www.devze.com 2023-03-15 12:59 出处:网络
I\'m trying to implement a captcha into a form. There are three files: the html form. The php captcha image generator.

I'm trying to implement a captcha into a form.

There are three files:

the html form.

The php captcha image generator.

the php captcha checker.

Everythiong is working fine, but I can't seem to retrieve the Session variable, that the captcha script creates, on my captcha checker script.

In the form:

<img src="captcha/captcha.php"></img>
<input type="text" id="CAPTCHA"><p id="caperror"></p>
<p><input name="B1" type="submit" value="Submit" />
</form> 

<script>
$('#contactform').submit(function () {
    var cap = $('#CAPTCHA').val();
    cap = 'CAPTCHA=' + cap;
    $.ajax({
        type: 'POST',
        url: 'captcha/capcheck.php',
        data: cap,
        success: success,
        dataType: "text",
        error: postfail
    });
});

function success(result) {
    if (result == 'true') {
        alert('Correct');
        return true;
    } else {
        alert(result);
        return false;
    }
}

function postfail() {
    alert('post failed');
    return false;
}
</script>

The session Variable ['CAPTCHA'] is generated in the captcha.php script.

I try to retrieve it, and check it im the capcheck.php script with this:

<?php 
session_start();  

if($SESSION['CAPTCHA']) {
echo 'session='.$SESSION['CAPTCHA'];
}
if((isset($POST['CAPTCHA'])) && (isset($SESSION['CAPTCHA']))){
if($_SESSION['CAPTCHA'] != $_POST['CAPTCHA']) {

    echo 'false';


    } else {
    session_destroy();
        echo 'true';
}

}
else{
echo $_POST['CAPTCHA'].'    '. $SESSION['CAPTCHA'];
session_destroy();
}
?>

It is always empty, and I don't know why! I have it implemented without jquery, on a different site, and it works perfectly.

Captcha.php:

    <?php

        session_start();

        /**
         * Send PNG headers to the browser
        **/
        header('content-type: image/png');

        $numbers    = array();
        $numbers[]  = rand(1, 5);
        $numbers[]  = rand(1, 5);

        if(rand(0, 1) == 0) {
            $_op                        = '+'; 
            $code                       = strval($numbers[0]) .' + ' .strval($numbers[1]) .' =';
            $_SESSION['CAPTCHA'] = $numbers[0] + $numbers[1];
        } else {
            $_op                        = '+';  
            $code                       = strval($numbers[0]) .' + ' .strval($numbers[1]) .' =';
            $_SESSION['CAPTCHA'] = $numbers[0] + $numbers[1];
        }
        session_write_close();

        /* Our TTF font file, you may use others */
        $font = dirname(__FILE__) .'/fonts/arial.ttf';

        /* set the width */
        $width  = 16;
        //$width  = (strlen($code) * $width) + 2;   
        $height = 24;

        $code_length = 7;

        $image_height = $height + 2;
        $image_width  = $width * $code_length + 20;

        $im       = imagecreatetruecolor($image_width, $image_height);
        $white  = imagecolorallocate($im, 255, 255, 255);
        imagefill($im, 0, 0, $white);

        /* Some themes */
        $theme   = array();
        $theme[]    = array('CHAR_COLOR' => 
                                array('R' => array(56, 21),
                                        'G' => array(85, 25),
                                        'B' => array(14, 195) 
                                        ),
                               'BG_COLOR' =>
                                array('R' => array(12, 76),
                                        'G' => array(54, 67),
                                        'B' => array(26, 23) 
                                        )
                             );
        $theme[]    = array('CHAR_COLOR' => 
                                array('R' => array(59, 72),
                                        'G' => array(35, 55),
                                        'B' => array(65, 63) 
                                        ),
                               'BG_COLOR' =>
                                array('R' => array(30, 55),
                                        'G' => array(70, 30),
                                        'B' => array(70, 30) 
                                        )
                             );
        $theme[]    = array('CHAR_COLOR' => 
                                array('R' => array(76, 25),
                                        'G' => array(38, 50),
                                        'B' => array(58, 78) 
                                        ),
                                'BG_COLOR' =>
                                array('R' => array(94, 30),
                                        'G' => array(97, 30),
                                        'B' => array(30, 55) 
                                        )
                             );

        $pos_x  = 5;
        $pos_y  = 20;
        $random = rand(0, (count($theme) - 1) );/* Get a random theme */

        /**
         *  Place each character into the image 
        **/
        $angle  = 0;
        $size      = 16;
        for($i = 0, $count = strlen($code); $i < $count; $i++) {

            $color  = imagecolorallocate($im, 
                                                  rand($theme[$random]['CHAR_COLOR']['R'][0], $theme[$random]['CHAR_COLOR']['R'][1]), 
                                                  rand($theme[$random]['CHAR_COLOR']['G'][0], $theme[$random]['CHAR_COLOR']['G'][1]), 
                                                  rand($theme[$random]['CHAR_COLOR']['B'][0], $theme[$random]['CHAR_COLOR']['B'][1])
                                                  );        

            imagettftext($im, $size, $angl开发者_StackOverflow社区e, $pos_x, $pos_y, $color, $font, $code{$i});
            $pos_x  += $width + 1;

        }

        /* Finally show image */
        imagepng($im);  
        imagedestroy($im);  
    ?>


Some of your $POST and $SESSION variables are missing underscores. As mentioned in your comments, this seems the be the issue.

I'd suggest using a text-editor with proper syntax highlighting support for PHP in this case, so errors like these are easily identified.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号