I am trying to add a reCAPTCHA to my site, but keep getting incorrect-captcha-sol
error when I submit the answer.
Can anyone tell me if I am correct in doing the following?
I have a generic index.php, which includes contact.php. In contact.php I have inserted the following code:
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;
}
}
In my html I inserted the CAPTCHA like this:
<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>
I cannot see that I am doing anything wrong, but would appreciate any constructive criticism.
TIA
in root directory from the script set php.ini with this:
allow_url_fopen = On
That's because the form cannot be on the outside of the tr.....it has to be on the outisde of table.....form cannot be inserted into table, it can be inserted into the td though.
if you are posting the check twice - eg once from javascript and once via php the second one will fail as the API only allows a solution to return valid once.
Hope that helps, Josh
In my case, the error was to set the form without specifying:
method="POST"
Cheers!
I have solved this, it is one of the most unusual things I have come across, my syntax was previously:
I changed it to this:
Because of this switch, suddenly the
recaptcha_response_field
andrecaptcha_challenge_field
are posting values back to the form.I cannot think why this because all MY form variables got posted back before the switch.
Thanks all for the pointers.
Are you sure you are typing in correct words?
this one is from recaptcha website :