2016-10-09 6 views
0

Hallo Ich versuche Google Recaptcha auf meinem Kontaktformular zu installieren. Recaptcha wird angezeigt, aber im Moment wird das Formular gesendet, auch wenn Captcha nicht versucht wird.Kontaktformular Einreichung unabhängig von Recaptcha

Ich habe den Code unten geschrieben, wäre jede Hilfe dankbar :)

<?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._%-][email protected][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

Dieser Thread geben Ihnen einen guten Vorsprung, [http://stackoverflow.com/a/35250609/5517143](http://stackoverflow .com/a/35250609/5517143) –

+0

Danke, ich habe meine Dateien mit dem Code von dort aktualisiert. Es wird zwar gut angezeigt, aber das Formular wird auch dann noch ordnungsgemäß übermittelt, wenn das Captcha nicht versucht wird. – SideB

+0

Ja, weil es serverseitige Validierung ist. Bitte [bearbeiten] (http://stackoverflow.com/posts/39945525/edit) Ihre Frage und teilen Sie Ihren Code. –

Antwort

0

Spaziergang durch den Code sorgfältig, sowohl die äußersten if Blöcke heißt if(isset($_POST['email'])){ ... und if(isset($_POST['g-recaptcha-response'])... wird unabhängig arbeiten. Sie müssen if(isset($_POST['email'])){ ... Block innerhalb if(isset($_POST['g-recaptcha-response'])... Block platzieren, wie folgt aus:

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._%-][email protected][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."; 
} 
+0

Danke, das funktioniert :) – SideB

+0

@SideB Froh kann ich helfen. ;-) Bitte * akzeptiere * die Antwort, wenn es dein Problem gelöst hat. [Wie akzeptiere ich die Antwort zu Stack Overflow?] (Http://meta.stackexchange.com/a/5235) –

Verwandte Themen