谷歌reCAPTCHA g-recpatcha-response在PHP中没有任何价值

Sam*_*oid 5 html php captcha recaptcha contact-form

ps:我放弃了这个,因为我找不到任何解决方案,并实现了我自己的php验证码,这是一种待遇:) - http://www.the-art-of-web.com/php/captcha/

我花了很多时间和几天试图解决这个问题,但我似乎无法弄明白.我在网上阅读了很多不同的教程和问题.

请记住,我的PHP级别是相当基础的.

我似乎无法在我的php文件中获得'g-recaptcha-response'$ _POST值.

我总结了下面需要的重要代码......

文件1:contact.php

在Head标签之前

<?php 
session_start(); // start php session

// Setup session variables to save the form data
if( isset($_SESSION['contact_form_values']) ){
    extract( $_SESSION['contact_form_values'] );
}

include('contactengine.php');
?>
Run Code Online (Sandbox Code Playgroud)

在头标签

<script src='https://www.google.com/recaptcha/api.js'></script><!-- reCAPTCHA form -->
Run Code Online (Sandbox Code Playgroud)

在Form标签之间Action ="",以便它自己发布包含contactengine.php文件的自身,这样只有当用户点击提交按钮时它才能运行?

<form class="contactform" method="POST" action="">

<div class="g-recaptcha" data-sitekey="6Lc92gkTAAAAAFKjZEOlY0cg9G8ubmlVoC13Xf3T"></div>
Run Code Online (Sandbox Code Playgroud)

文件2:contactengine.php

在此之间

if($_SERVER["REQUEST_METHOD"] == "POST")
Run Code Online (Sandbox Code Playgroud)

我有

if( isset( $_POST['g-recaptcha-response'] ) ){
        $captchaResponse = $_POST['g-recaptcha-response'];
    }
Run Code Online (Sandbox Code Playgroud)

现在这是变量$ captchaResponse没有被填充的点,因为我输出它的值,如下所示:

if( !$captchaResponse ){ // check the POST recaptcha response value
        $resultMsg = 'Please check the captcha form. - '.$captchaResponse;
    }
Run Code Online (Sandbox Code Playgroud)

因此,我在$ resultMsg字符串中没有得到响应代码的可见输出.

我唯一能想到的就是影响它,在contact.php的开头包含contactengine.php文件.并将动作设为="".但这就是教程指导我做的事情.也许不是......

我使用http://www.9lessons.info/2014/12/google-new-recaptcha-using-php-are-you.html作为指南.

非常感谢先进!

Qir*_*rel 2

你快到了!你只需要查询Google的API即可。

if (isset($_POST['g-recaptcha-response'])) {
    $captcha = $_POST['g-recaptcha-response'];
}

if (!$captcha) {
    // Captcha wasn't checked, do something...
    exit;
}

$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=SECRETKEYGOESHERE&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);

if ($response.success == false) {
    // Captcha failed! Do something!
} else {
    // Captcha is valid! Do something else!
}
Run Code Online (Sandbox Code Playgroud)

替换SECRETKEYGOESHERE为您实际的密钥,就可以了!

  • 顺便说一句,他需要为此方法启用 fopen 包装器 - 许多托管解决方案已禁用它们 (2认同)
  • 这个不走运,我正在考虑离开它并找到一个不同的 reCAPTCHA 脚本...... (2认同)