使用JavaScript显示reCAPTCHA并使用PHP进行验证

时间:2013-05-17 05:07:48

标签: php recaptcha shtml

我有一个网站使用SSI作为页面的页眉和页脚。

我已经创建了一个AJAX请求,它将所有表单数据发送到服务器上的脚本,该脚本将验证表单和reCAPTCHA一体化。

我遇到了一个小问题。由于所有文件扩展名都是shtml,我被迫使用纯HTML来显示reCAPTCHA。

PHP验证插件正在投入使用并告诉我“invalid-request-cookie。”

我已经检查并仔细检查了所有密钥,我唯一可以想到的是请求不喜欢我使用HTML来显示reCAPTCHA和用于验证它的PHP插件。< / p>

我已经研究过强迫我的服务器在shtml文件中解析PHP,所以我可以用PHP显示reCAPTCHA,但是由于服务器是GoDaddy IIS7,这似乎是不可能的。

我的问题是双重的:

  1. 我怀疑的确是我的问题吗?

  2. 如果是这样,有什么方法吗?

  3. 这是我的HTML / JavaScript:

        <div id="recaptcha-widget">
            <script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k=public_key_WAS_inserted_here">
                    </script>
                    <noscript>
                <iframe src="http://www.google.com/recaptcha/api/noscript?k=public_key_WAS_inserted_here"
                        height="300" width="500" frameborder="0"></iframe><br>
                <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
                <input type="hidden" name="recaptcha_response_field" value="manual_challenge">
            </noscript>
        </div>
        <p style="padding: 0 45%">
            <input type="submit" value="Submit" id="submit-button">
        </p>
    

    这是我的PHP验证脚本的JavaScript AJAX请求。

        var dataToSend = $('form #contactForm').serialize();
    
        if($('#contactForm #response').hasClass('error') === false){
            jQuery.ajax({
    
                type: 'POST',
                url: '../contact.php',
                data: dataToSend,
                cache: false,
                beforeSend: function(){
                    $('#contactForm #response').show().removeClass().addClass('sending response').html("Sending email.  Please wait...");
                },
                error: function(){
                    $('#contactForm #response').show().removeClass().addClass('error response').html("Internal error.  Please try again.");
                },
                success: function(response){
                    if (response !== "The recaptcha response was invalid.  Please try again."){
                    $('#contactForm #response').show().removeClass().addClass('error response').html(response);
                    } else {
                        $('#contactForm #response').show().removeClass().addClass('success response').html(response);
                    }
                },
                timeout: 20000
    
            });
        }
    

    这是PHP验证脚本。我的服务器上有recaptchalib.php。

        <?php
        require_once('recaptchalib.php');
        $privatekey = "privatekey_WAS_inserted_here";
        $resp = recaptcha_check_answer ($privatekey,
                                        $_SERVER["REMOTE_ADDR"],
                                        $_POST["recaptcha_challenge_field"],
                                        $_POST["recaptcha_response_field"]);
    
        if (!$resp->is_valid) {
        die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
            "(reCAPTCHA said: " . $resp->error . ")");
        } else {
            // My verification on this side.  This part of the if/else never runs.
        }
        ?>
    

    解决:所以我想出了自己的问题。在我的JavaScript中,我没有为recaptcha发送质询和响应字段的实际值。所以我解决了这个问题,reCAPTCHA完美无缺。

0 个答案:

没有答案