Hi I'm trying to install Google Recaptcha onto my contact form. Recaptcha is displaying fine but at the moment the form will submit even if Captcha not attempted.
I've posted the code below, would appreciate any help :)
<?php
/* =====================================================
* change this to the email you want the form to send to
* ===================================================== */
$email_to = ";
$email_subject = "Contact Form submitted";
if(isset($_POST['email']))
{
function return_error($error)
{
echo $error;
die();
}
// check for empty required fields
if (!isset($_POST['name']) ||
!isset($_POST['email']) ||
!isset($_POST['message'])
)
{
return_error('Please fill in all required fields.');
}
// form field values
$name = $_POST['name']; // required
$email = $_POST['email']; // required
$contact_number = $_POST['contact_number']; // not required
$message = $_POST['message']; // required
$enquiry = $_POST['enquiry'];
// form validation
$error_message = "";
// name
$name_exp = "/^[a-z0-9 .\-]+$/i";
if (!preg_match($name_exp,$name))
{
$this_error = 'Please enter a valid name.';
$error_message .= ($error_message == "") ? $this_error : "<br/>".$this_error;
}
$email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
if (!preg_match($email_exp,$email))
{
$this_error = 'Please enter a valid email address.';
$error_message .= ($error_message == "") ? $this_error : "<br/>".$this_error;
}
// if there are validation errors
if(strlen($error_message) > 0)
{
return_error($error_message);
}
// prepare email message
$email_message = "Form details below.\n\n";
function clean_string($string)
{
$bad = array("content-type", "bcc:", "to:", "cc:", "href");
return str_replace($bad, "", $string);
}
$email_message .= "Enquiry Type: ".clean_string($enquiry)."\n";
$email_message .= "Name: ".clean_string($name)."\n";
$email_message .= "Email: ".clean_string($email)."\n";
$email_message .= "Contact number: ".clean_string($contact_number)."\n";
$email_message .= "Message: ".clean_string($message)."\n";
// create email headers
$headers = 'From: '.$email."\r\n".
'Reply-To: '.$email."\r\n" .
'X-Mailer: PHP/' . phpversion();
//var_dump($email_to); var_dump($email_subject); var_dump($email_message); var_dump($headers);
if (mail($email_to, $email_subject, $email_message, $headers))
{
echo 'Form submitted successfully.';
}
else
{
echo 'An error occured. Please try again later.';
die();
}
}
else
{
echo 'Please fill in all required fields.';
die();
}
?>
<?php
if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])){
$privatekey = "";
//get verified response data
$param = "https://www.google.com/recaptcha/api/siteverify?secret=".$privatekey."&response=".$_POST['g-recaptcha-response'];
$verifyResponse = file_get_contents($param);
$responseData = json_decode($verifyResponse);
if($responseData->success){
// success
echo "success";
}else{
// failure
echo "failure";
}
}else{
// user didn't enter reCAPTCHA
echo "The reCAPTCHA wasn't entered correctly. Go back and try it again.";
}
?>
答案 0 :(得分:0)
仔细浏览代码,最外面的if
块,if(isset($_POST['email'])){ ...
和if(isset($_POST['g-recaptcha-response'])...
将独立工作。您需要在if(isset($_POST['email'])){ ...
块中放置if(isset($_POST['g-recaptcha-response'])...
块,如下所示:
if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])){
$privatekey = "YOUR_PRIVATE_KEY";
//get verified response data
$param = "https://www.google.com/recaptcha/api/siteverify?secret=".$privatekey."&response=".$_POST['g-recaptcha-response'];
$verifyResponse = file_get_contents($param);
$responseData = json_decode($verifyResponse);
if($responseData->success){
// success
$email_to = '';
$email_subject = "Contact Form submitted";
if(isset($_POST['email'])){
function return_error($error){
echo $error;
die();
}
// check for empty required fields
if (!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['message'])){
return_error('Please fill in all required fields.');
}
// form field values
$name = $_POST['name']; // required
$email = $_POST['email']; // required
$contact_number = $_POST['contact_number']; // not required
$message = $_POST['message']; // required
$enquiry = $_POST['enquiry'];
// form validation
$error_message = "";
// name
$name_exp = "/^[a-z0-9 .\-]+$/i";
if (!preg_match($name_exp,$name)){
$this_error = 'Please enter a valid name.';
$error_message .= ($error_message == "") ? $this_error : "<br/>".$this_error;
}
$email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
if (!preg_match($email_exp,$email)){
$this_error = 'Please enter a valid email address.';
$error_message .= ($error_message == "") ? $this_error : "<br/>".$this_error;
}
// if there are validation errors
if(strlen($error_message) > 0){
return_error($error_message);
}
// prepare email message
$email_message = "Form details below.\n\n";
function clean_string($string){
$bad = array("content-type", "bcc:", "to:", "cc:", "href");
return str_replace($bad, "", $string);
}
$email_message .= "Enquiry Type: ".clean_string($enquiry)."\n";
$email_message .= "Name: ".clean_string($name)."\n";
$email_message .= "Email: ".clean_string($email)."\n";
$email_message .= "Contact number: ".clean_string($contact_number)."\n";
$email_message .= "Message: ".clean_string($message)."\n";
// create email headers
$headers = 'From: '.$email."\r\n".
'Reply-To: '.$email."\r\n" .
'X-Mailer: PHP/' . phpversion();
//var_dump($email_to); var_dump($email_subject); var_dump($email_message); var_dump($headers);
if (mail($email_to, $email_subject, $email_message, $headers)){
echo 'Form submitted successfully.';
}else{
echo 'An error occured. Please try again later.';
die();
}
}else{
echo 'Please fill in all required fields.';
die();
}
}else{
// failure
echo "reCAPTCHA failure";
}
}else{
// user didn't enter reCAPTCHA
echo "The reCAPTCHA wasn't entered correctly. Go back and try it again.";
}