проверка рекапчи в php - PullRequest
0 голосов
/ 20 мая 2019

У меня есть простая контактная форма .html с добавлением recaptcha, и у меня есть соответствующий файл .php, настроенный для отправки мне информации о заполненных полях формы через мою электронную почту. После отправки формы я перенаправляю пользователя на свою домашнюю страницу. Я пытаюсь выяснить, какой код необходим для добавления проверки recaptcha в файл .php и где, сохраняя при этом уже настроенную функциональность.

HTML-код:

<script src='https://www.google.com/recaptcha/api.js' async defer>
</script>

<form method="post" action="mail.php">
  <input id="name" name="name" placeholder="Name" required />
  <input id="email" name="email" placeholder="Email" type="email" required />
  <textarea id="message" name="message" placeholder="Question/Comment" required></textarea>
  <div class="g-recaptcha" data-sitekey="MY SITE KEY"></div>
  <input class="btn-success formBtn" name="submit" type="submit" />
  <input class="formBtn" type="reset" />
</form>

php код:

<?php 

    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $formcontent="From: $name \n Message: $message";
    $recipient = "MY EMAIL";
    $subject = "Contact Form";
    $mailheader = "From: $email \r\n";
    mail($recipient, $subject, $formcontent, $mailheader) or 
   die("Error!");
   header('Location: /');

?>

1 Ответ

0 голосов
/ 21 мая 2019

Ваш HTML-код выглядит хорошо, вы можете попробовать следующий php-код, чтобы увидеть, работает ли он с вашей формой.также убедитесь, что вы используете ключ reCaptcha v2.

php code

<?php 
if(isset($_REQUEST['submit'])){
  $captcha = $_REQUEST['g-recaptcha-response'];
  $handle = curl_init('https://www.google.com/recaptcha/api/siteverify');
  curl_setopt($handle, CURLOPT_POST, true);
  curl_setopt($handle, CURLOPT_POSTFIELDS, "secret=YOUR_SECRET_KEY&response=$captcha");
  curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
  $response = curl_exec($handle);
  $explodedArr = explode(",",$response);
  $doubleExplodedArr = explode(":",$explodedArr[0]);
  $captchaConfirmation = end($doubleExplodedArr);

  if(trim($captchaConfirmation) == "true") {

    $to ='example@email.com';
    $subject = 'Form';
    $headers = "From: " . $_POST['email'] . "\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
    $message = '';
    $message .= "<strong>First Name:</strong> " .$_POST['name'] ;
    $message .= "<strong>Email:</strong> " . $_POST['email'];
    $message .= "<strong>Message:</strong> " . $_POST['message'] ; 
    $send = mail($to, $subject, $message, $headers);
    if($send) {
      echo "Message Sent. Thank You!";
    } else {
      echo "<script> alert('Message Not Sent. Please try again.";
    }

  } else {
    echo "Captcha entry was wrong. Please try again.";
  }
} 
?>
...