View Full Version : Question about ReCaptcha - display error on form instead of blank page

11-20-2011, 06:10 PM

I have a php "contact.php" form. The code incorporates ReCaptcha php code for a bit of extra security.

If the submit button is pressed without entering the captcha code the form redirects to a blank page and a message is displayed - "The reCAPTCHA
wasn't entered correctly. Go back and try it again.(reCAPTCHA said:

I would much prefer the message to appear on my contact.php form directly below the submit button after it is pressed, instead of on a seperate blank page..

Can this be achieved?

$errors = null;
if (isset($_POST['submit']))
$name = $_POST['name'];
$emailSubject = $_POST['emailSubject'];
$email = $_POST['email'];
$message = $_POST['message'];

/*Check required fields have been filled out*/
$mandate=array($name, $email); // Mandatory fields
$errors['name']="Please Enter Your Name!";
if (empty($email))
$errors['email']= 'Please Enter Your Email Address!';
if(!preg_match("/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/", $email))
$errors['email']='Please check your email address!';
/*End of Check required fields have been filled out*/

/*Re-captcha code starts here - linked to recaptchalib.php*/
$privatekey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$resp = recaptcha_check_answer ($privatekey,

if (!$resp->is_valid) {
die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
"(reCAPTCHA said: " . $resp->error . ")");
/*Re-captcha code ends here*/

/*Email Address Validator Start here - linked to EmailAddressValidator.php*/
$validator = new EmailAddressValidator;
if ($validator->check_email_address($email))
/*Email Address Validator End here*/

// code to send email

$to = 'me@me.com';
$subject = 'Email query from xxxx';
$message = "Email sent from: $email \n $name has sent you a message:- \n $message";
$headers = 'From: me@me.com'. "\r\n" .
'Reply-To: queries@me.com'. "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers) or exit('mail FAIL');
echo '<p>Thank you for emailing me! Your Message has been sent.</p>';
echo '<p>Please re-check your form entries.</P>';


if(!isset($_POST['submit']) || count($errors)){

<form id="tomsform" method="POST" action="<?php echo JRoute::_( 'index.php' );?>">

<p>First Name</p>
<input type="text" name="name" size="19" value="<?php echo (isset($name)) ? $name : '';?>" class="textbox">
if(isset($errors['name'])) echo $errors['name'];
<p>Email Subject</p>
<input type="text" name="emailSubject" size="19" value="<?php echo (isset($emailSubject)) ? $emailSubject : '';?>" class="textbox">
if(isset($errors['emailSubject'])) echo $errors['emailSubject'];
<p>Email Address</p>
<input type="text" name="email" size="19" value="<?php echo (isset($email)) ? $email : '';?>" class="textbox">
if(isset($errors['email'])) echo $errors['email'];
<textarea rows="9" name="message" cols="30" class="textbox"><?php echo (isset($message)) ? $message: '';?></textarea>
<div id="x">
$publickey = "xxxxxxxxxxxxxxxxxxxxxxxxx"; // you got this from the signup page
echo recaptcha_get_html($publickey);

if(isset($errors['captcha'])) echo $errors['captcha'];
<input type="submit" value="Submit" name="submit" class="go">

Many thanks

11-20-2011, 06:30 PM
You could use AJAX (combination of PHP and javascripting).

Otherwise, when you return back to your form, the text boxes
will be empty. So, you'll have to use PHP SESSION variables to
remember the values.

Sorry I don't have an actual script to show ... you might be
able to find a good example via Google ... like this:

11-20-2011, 06:38 PM
I don't want to leave the form if the recaptcha is empty or incorrect. I want the message to appear underneath the recaptcha box on the form.

I'm sure I have seen it done :)

11-20-2011, 08:29 PM
That's what AJAX is ... look at those examples.
They also have demos to look at.