2015-07-16 27 views
5

ps PHP'de değeri yoktur: Hiçbir çözüm bulduk ve bir tedavi :) çalıştı kendi php captcha'yı uygulandığı şekliyle bu vazgeçti - http://www.the-art-of-web.com/php/captcha/tarihinde reCAPTCHA'nın g-recpatcha-yanıt

ben geçirdim Bu problemi çözmeye çalışırken saatlerce & günler ama bunu anlayamıyorum. Çevrimiçi & soruları çok farklı dersler okudum.

Sadece aklımda tutmak için PHP seviyem oldukça basit.

php dosyamda 'g-recaptcha-response' $ _POST değerini göremiyorum.

aşağıda gerekli olan önemli kod özetledik

...

Dosya 1: contact.php

Önce Baş Etiketler Baş Etiketler

<script src='https://www.google.com/recaptcha/api.js'></script><!-- reCAPTCHA form --> 

In Between

<?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'); 
?> 

Form etiketleri Eylem = "" kendi başına göndereceği şekilde contactengine.php dosyası, yalnızca kullanıcı gönder düğmesini tıkladığında çalışacak şekilde dahil edildi mi?

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

<div class="g-recaptcha" data-sitekey="6Lc92gkTAAAAAFKjZEOlY0cg9G8ubmlVoC13Xf3T"></div> 

Dosya 2: contactengine.php Arasında

bu

if($_SERVER["REQUEST_METHOD"] == "POST") 

Ben şimdi bu değişken $ captchaResponse nüfuslu olmak değildir noktasıdır

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

var Bunun değerini şöyle çıkarıyorum:

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

Bu nedenle, $ resultMsg dizesinde yanıt kodunun görünür çıktısını almıyorum.

Düşünebildiğim tek şey onu etkiliyor, contactengine.php dosyasını contact.php dosyasında baştan başlamaktır. Ve eylemi = "" olarak sahip olmak. Ama bu, öğreticinin yapmamı istediği şey. Yani belki de ...

Kılavuz olarak http://www.9lessons.info/2014/12/google-new-recaptcha-using-php-are-you.html kullandım.

Çok teşekkürler!

+0

Yararlı bağlantı: https://developers.google.com/recaptcha/docs/faq –

+0

Ağ trafiğinizi izlemek için tarayıcınızın geliştirme araçlarını kullanın, sahnelerin ardında neler olduğunu görün. Ayrıca, filtrelenmemiş POST değerlerini de çıkış (XSS saldırılarını önlemek için) – m02ph3u5

+0

Teşekkürler @ m02ph3u5, Ben sadece hata ayıklama amaçları için bu gibi ayarlayın.Ayrıca, dev araçlarını kromda kullandım ve yanıt jsonda geri döndü ancak 'uvresp' olarak adlandırılıyor. Bu ismi 'g-recaptcha-response' yerine bile denedim ve şans yok. Bakıyorum, – Samuroid

cevap

1

Neredeyse bitti! Google’ın API'sini sorgulamanız yeterlidir.

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! 
} 

gerçek gizli anahtar ile SECRETKEYGOESHERE değiştirin ve işlem tamam!

+0

Merhaba, Üzgünüm, açıklığa kavuşmadım ama bu bölümü hazırladım. 'G-recaptcha-response' $ _POST değeri, – Samuroid

+2

btw için isset deyiminde false, bu yaklaşım için etkin fopen sarmalayıcılarına ihtiyaç duyacak - birçok barındırılan özümler devre dışı bırakıldı – m02ph3u5

+1

The $ _POST ['g-recaptcha-response' onay kutusu işaretli değilse boş bırakılacaktır. Eğer kontrol edilirse, yukarıdaki kodumda '$ response'da sorgulanacak olan sonuç olarak uzun bir dizge elde edersiniz. Captcha'yı tamamladığınızda boş mu peki? – Qirel