2009-08-12 65 views
8

Estoy tratando de agregar un reCAPTCHA a mi sitio, pero sigo recibiendo el error incorrect-captcha-sol cuando presento la respuesta.Necesito ayuda con reCAPTCHA - sigue siendo incorrecto-captcha-sol

¿Alguien me puede decir si estoy en lo cierto al hacer lo siguiente?

Tengo un index.php genérico, que incluye contact.php. En contact.php he insertado el siguiente código:

require_once('recaptchalib.php'); 
$publickey = "XXXX"; 
$privatekey = "XXXX"; 

//the response from reCAPTCHA 
$resp = null; 
//the error code from reCAPTCHA, if any 
$error = null; 

if ($_POST['submit']) { 
    $message = $_POST['message_txt']; 
    $name = $_POST['name_txt']; 
    $email = $_POST['email_txt']; 

$emailBody = $message; 
$to = 'xx'; 
$from = $name.' <'.$email.'>'; 
$subject = 'XX Website Enquiry'; 
$headers = 'From: '.$from; 

$resp = recaptcha_check_answer($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); 

if ($resp->is_valid) { 
    echo 'captcha correct'; 
    if (mail($to,$subject,$emailBody,$headers)) { 
     //echo 'mail sent'; 
     $confirmation = 'sent'; 
    } 
    else { 
     //echo 'mail not sent'; 
     $confirmation = 'error'; 
    } 
} else { 
    # set the error code so that we can display it. You could also use 
    # die ("reCAPTCHA failed"), but using the error message is 
    # more user friendly 

    $error = $resp->error; 

    echo $error; 
} 

}

En mi html insertar el CAPTCHA de la siguiente manera:

<form name="contactForm" method="post" action="index.php?id=contact&action=submit#contact"> 
    <tr><td>Name</td><td><div align="right"> 
     <input type="text" name="name_txt" class="input"> 
     </div></td></tr> 
    <tr><td>Email</td><td><div align="right"> 
     <input type="text" name="email_txt" class="input"> 
    </div></td></tr> 
    <tr><td height="10"></td></tr> 
    <tr><td colspan="2">Message</td></tr> 
    <tr><td colspan="2"><textarea name="message_txt" class="textarea" style="width:200px; height:100px"></textarea></td></tr> 
    <tr><td colspan="2"><?php echo recaptcha_get_html($publickey, $error); ?></td></tr> 
    <tr><td colspan="2" style="padding-top:10px;"><input type="image" src="images/header_06.gif" name="submit" value="submit"></td></tr> 
    </form> 

no puedo ver que estoy haciendo nada malo, pero agradecería cualquier crítica constructiva.

TIA

Respuesta

19

He resuelto esto, es una de las cosas más inusuales que he encontrado, mi sintaxis antes era:

<table> 
<form> 
<tr><td></td></tr> 
</form> 
</table> 

lo cambié a esto:

<form> 
<table> 
<tr><td></td></tr> 
</table> 
</form> 

Debido a este cambio, de repente el recaptcha_response_field y recaptcha_challenge_field están publicando valores en el formulario.

No puedo pensar por qué porque todas mis variables de formulario se publicaron antes del cambio.

Gracias a todos por los punteros.

7

si estás escribiendo el cheque dos veces - una vez por ejemplo de JavaScript y una vez a través de php la segunda fallará como la API sólo permite una solución válida para volver una vez.

Espero que ayude, Josh

0

¿Seguro que está escribiendo en las palabras correctas?

éste es de recaptcha website :

Line 1  "true" or "false". True if the reCAPTCHA was successful 
Line 2 if Line 1 is false, then this string will be an error code. reCAPTCHA can 
    display the error to the user (through the error parameter of api.recaptcha.net/challenge). 
    Implementations should not depend on error code names, 
as they may change in the future. 


    Example: If your response looks like this: 

    false 
    **incorrect-captcha-sol** 

    ... you can add '&error=incorrect-captcha-sol' to the challenge request URL, 
and the user will get an error code. 
5

Eso es porque la forma no puede estar en el exterior del tr ..... tiene que estar en la salida de la tabla ..... la forma no se puede insertar en la tabla, se puede insertar en el td aunque .

2

En mi caso, el error fue establecer la forma sin especificar:

method = "POST"

Salud!

Cuestiones relacionadas