2015-07-16 10 views
5

ps: ho rinunciato a questo come ho trovato nessuna soluzione e realizzato il mio captcha php che ha funzionato a meraviglia :) - http://www.the-art-of-web.com/php/captcha/Google reCAPTCHA g-recpatcha-risposta non ha alcun valore in PHP

ho speso molte ore & giorni cercando di risolvere questo problema, ma non riesco a capirlo. Ho letto un sacco di tutorial diversi & domande online.

Solo per tenere a mente, il mio livello PHP è piuttosto semplice.

Non riesco a ottenere il valore $ _POST di 'g-recaptcha-response' nel mio file php.

ho sintetizzato il codice importante necessario al di sotto ...

File 1: contact.php

prima che la testa Tag

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

nella testa Tag

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

Tra i tag Form Action = "" in modo che sia pubblicato su se stesso che ha il file contactengine.php incluso in modo che venga eseguito solo quando l'utente fa clic sul pulsante di invio?

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

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

File 2: contactengine.php

Tra questo

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

ho

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

Ora, questo è il punto in cui il $ captchaResponse variabile non è essere popolata dal momento che visualizzo il valore in questo modo:

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

Pertanto non ottengo alcun output visibile del codice di risposta nella stringa $ resultMsg.

L'unica cosa che potrei pensare è effettuarla, è includere il file contactengine.php all'inizio in contact.php. E avendo l'azione come = "". Ma questo è ciò che il tutorial mi ha guidato a fare. Quindi forse no ...

Ho usato http://www.9lessons.info/2014/12/google-new-recaptcha-using-php-are-you.html come guida.

Grazie mille in anticipo!

+0

collegamento utile possibile: https://developers.google.com/recaptcha/docs/faq –

+0

Utilizza gli strumenti di sviluppo del tuo browser per guardare il traffico di rete, vedere cosa succede dietro le quinte. Inoltre non rilasciare valori POST non filtrati (per evitare attacchi XSS) – m02ph3u5

+0

Grazie a @ m02ph3u5, l'ho appena impostato in questo modo per scopi di debug.Inoltre ho usato gli strumenti di sviluppo in chrome e la risposta è stata restituita in JSON ma è chiamata 'uvresp'. Ho persino provato questo nome in sostituzione di "g-recaptcha-response" e senza fortuna. Continuerò a cercare – Samuroid

risposta

1

Sei quasi arrivato! Hai solo bisogno di interrogare l'API di Google.

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

Sostituire SECRETKEYGOESHERE con la vostra chiave segreta reale, e il gioco è fatto!

+0

Ciao, Spiacente, non l'ho chiarito, ma ho già impostato questa parte. Il valore $ _POST di 'g-recaptcha-response' è falso sull'istruzione di isset per me – Samuroid

+2

btw, avrà bisogno di wrapper fopen abilitati per questo approccio - molte soluzioni ospitate hanno disabilitato – m02ph3u5

+1

Il '$ _POST ['g-recaptcha-response' ] 'sarà vuoto se la casella di controllo non è selezionata. Se è selezionato, si otterrà una lunga stringa come risultato, che verrà interrogato a '$ response' nel mio codice qui sopra. È vuoto quando completi il ​​captcha? – Qirel

Problemi correlati