Google ReCAPTCHA для html формы с php

в последнее время ситуация со спамом на моем сайте вышла из-под контроля, и я решил, что мне действительно нужно что-то с этим делать. Google reCAPTCHA, кажется, лучший способ отсортировать людей от роботов.

У меня нет большого опыта в PHP, что делает его трудным для меня, чтобы завершить реализацию.

HTML СТОРОНА МОЕЙ ФОРМЫ:

<div class="col-lg-6 no-gap contact-form">
            <header class="sec-heading">
                <br>
              <h2>Contact</h2>
              <span class="subheading">SUBHEADING</span>
            </header>

            <form action="assets/contact-form/contact-form.php" method="POST" class="form-ajax wow fadeInUp" data-wow-duration="1s" data-wow-delay=".1s">

              <!-- Name -->
              <div class="form-group">
                <input type="text" name="name" id="name-contact-1" class="form-control validate-locally" placeholder="Write your name">
                <label for="name-contact-1">Name</label>
                <span class="pull-right alert-error"></span>
              </div>

              <!-- Email -->
              <div class="form-group">
                <input type="email" name="email" id="email-contact-1" class="form-control validate-locally" placeholder="Your email">
                <label for="email-contact-1">Email</label>
                <span class="pull-right alert-error"></span>
              </div>

            <!-- Select -->
            <div class="form-group">
              <select class="form-control" id="select-form" name="select" id="select">

                <option id="optiona">Option A</option>
                <option id="optionb">Option B</option>
                <option id="optionc">Option C</option>
                <option id="optiond">Option D</option>
              </select>
              <label for="select-form">Your choice</label>
            </div>

             <!-- Select -->
            <div class="form-group">
              <select class="form-control" id="select-form" name="select1" id="select1">
                <option value="" disabled selected>Choose.. </option> 
                <option id="option1">Option 1</option>
                <option id="option2">Option 2</option>
                <option id="option3">Option 3</option>
                <option id="option4">Option 4</option>
              </select>
              <label for="select-form">Options</label>
            </div>


              <!-- Message -->
              <div class="form-group">
                <textarea class="form-control" name="message" id="message-contact-1" rows="5" placeholder="Your message"></textarea>
                <label for="message-contact-1">Message</label>
              </div>
             <div class="form-group">
              <div class="g-recaptcha" data-sitekey="---SECRET CODE FOR reCAPTCHA---"></div> 
              </div>
              <br>

              <input type="submit" name="submit" class="btn pull-right" value="Send message">

              <!-- Ajax Message -->
              <div class="ajax-message col-md-12 no-gap"></div>

            </form>

PHP СТОРОНА МОЕЙ ФОРМЫ:

 <?php 
    if(isset($_POST['email'])) {



    $email_to = "my@email.com";

    $email_subject = "Message recieved from form";





    function died($error) {


        echo '<div class="alert alert-danger alert-dismissible wow fadeInUp" role="alert">
          <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
          <strong>Oops! Something seems to be incorrect. Please check for errors:</strong><br>';

        echo $error."<br />";

        echo '</div>';

        die();

    }





        if(!isset($_POST['name']) ||

        !isset($_POST['email']) ||



        !isset($_POST['message'])) {

        died('Oops! Something seems to be incorrect. Please check for errors. ');       

    }



    $name = $_POST['name']; // required

    $email_from = $_POST['email']; // required

    $telephone = $_POST['phone']; // not required

    $message = $_POST['message']; // required

    $select = $_POST['select']; // required

    $select1 = $_POST['select1']; // required




    $error_message = "";

    $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}$/';

  if(!preg_match($email_exp,$email_from)) {

    $error_message .= 'The email adress you entered is invalid<br />';

  }

  if(strlen($name) < 2) {
  $error_message .= 'The name you have entered seems to be invalid<br />';

 }

    if(strlen($message) < 2) {

    $error_message .= 'The message you entered seems to be invalid<br />';

  }

    if(strlen($error_message) > 0) {

    died($error_message);

  }

    $email_message = "A message was recieved: <br>nn";



    function clean_string($string) {

      $bad = array("content-type","bcc:","to:","cc:","href");

      return str_replace($bad,"",$string);

    }

    $email_message .= "<br><b>Name:</b> ".clean_string($name)."n";

    $email_message .= "<br><b>Email:</b> ".clean_string($email_from)."n";

    $email_message .= "<br><b>Options1:</b> ".clean_string($select)."n";

    $email_message .= "<br><b>Options2:</b> ".clean_string($select1)."n";

    $email_message .= "<br><b>Message:</b> ".clean_string($message)."n";


$headers = 'From: '.$email_from."rn".
$headers = 'Content-type: text/html; charset=utf-8' . "rn";

'Reply-To: '.$email_from."rn" .

'X-Mailer: PHP/' . phpversion();

@mail($email_to, $email_subject, $email_message, $headers);  
 ?>

 <div class="alert alert-success alert-dismissible wow fadeInUp" role="alert">
   <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
   Thank you! Your message has been sent!
 </div>

 <?php } ?>

Newb как я, я пытался следовать учебники о том, как сделать эту работу, поэтому я пытался реализовать функцию в верхней части файла php, который выглядел как:

    <?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify',
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => [
        'secret' => 'SECRET CODE FROM GOOGLE',
        'response' => $_POST['g-recaptcha-response'],

        ],
]);

$response = json_decode(curl_exec($curl));

if (!$response->success) {

Но я, кажется, не могу заставить его работать вообще, и я не знаю, как разработать «}else{» часть, которая должна генерировать сообщение об ошибке.

Может ли кто-то с большим опытом помочь мне?

Спасибо!,

1 ответ

  1. Самый грязный метод заключается в том, чтобы обернуть ваш фактический код электронной почты с кодом che recaptcha-check. Сначала переместите функцию Die () за пределы if {..} оператор. Эту функцию можно использовать как очень простой обработчик ошибок.

    <?php
    //recaptcha test
    $curl = curl_init();
    curl_setopt_array($curl, [
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify',
        CURLOPT_POST => 1,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_FOLLOWLOCATION => 1,
        CURLOPT_POSTFIELDS => [
            'secret' => 'SECRET CODE FROM GOOGLE',
            'response' => $_POST['g-recaptcha-response'],
            ],
    ]);
    $response = json_decode(curl_exec($curl));
    
    //UPDATE: if your check pass, go on
    if ($response->success) {
        //your actual code.
    } else {
        died("Recaptcha missing.");
    }
    ?>