...

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



moss2076
11-20-2011, 06:10 PM
Hello,

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:
incorrect-captcha-sol)".

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?

<?php
$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
if(empty($name))
$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*/
require_once('recaptchalib.php');
$privatekey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);

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*/
include('EmailAddressValidator.php');
$validator = new EmailAddressValidator;
if ($validator->check_email_address($email))
/*Email Address Validator End here*/

// code to send email
if(count($errors)==0){

$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>';
}
else
{
echo '<p>Please re-check your form entries.</P>';
}
}

?>

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

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

Many thanks

mlseim
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:
https://www.google.com/#sclient=psy-ab&hl=en&source=hp&q=php+ajax+recaptcha+form&pbx=1&oq=php+ajax+recaptcha+form&aq=f&aqi=&aql=&gs_sm=e&gs_upl=1066l6637l0l6861l23l14l0l6l6l1l350l3676l0.3.7.4l20l0&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=cba57035e452253d&biw=1366&bih=607

moss2076
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 :)

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



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum