@olyabolya

Как сделать recaptcha в форме обязательной?

Добрый вечер!
Вставила в форму div с капчей, но форма отправляется даже если эту проверку не пройти. Подскажите, как сделать её обязательной?

Код самой формы:
<form class="row user_request" id="form" name="contact" action="" method="POST" novalidate enctype="multipart/form-data">                
    <input type="hidden" name="page" value="Регистрация ИП - заявка" />
    <div class="inputwrap">
        <label for="name">Ваше имя<sup>*</sup></label>
        <input type="text" id="name" required name="name" class="text-input" />
    </div>

    <div class="inputwrap">
        <label for="phone">Контактный телефон<sup>*</sup></label>
        <input id="phone" type="text" name="phone" class="text-input phonemasked" placeholder="+7 (800) 000-00-00" required />
    </div>
    
    <div class="inputwrap">
        <label for="mail">Электронная почта<sup>*</sup></label>
        <input id="mail" type="email" name="mail" class="text-input" required />
    </div>

    <span class="result_message"></span>

    <div class="inputwrap checkwrap">
        <input type="checkbox" name="check_agreement" id="check_agreement_bottom" required>
        <label for="check_agreement_bottom">
            С <a target="_blank" href="/согласие-на-обработку.htm">условиями</a> обработки персональных данных ознакомлен
            </label>
    <div class="g-recaptcha" data-sitekey="6LeQfnsUAAAAAAe6XhexjDnFscyI93oOL4-FZqwp"></div>
    </div>
    
        <div class="inputwrap" style="float: right;">
        <input type="submit" name="submit" class="button" value="Отправить">
    </div>

</form>


Код проверки формы:
$(document).ready(function() {

// Добавляем маску для поля с номера телефона
$('.phonemasked').each(function(){
  $(this).mask('+7 (999) 999-99-99');
});
$(".user_request").submit(function() {
  if ( !this.checkValidity() )
    alert('Пожалуйста, заполните обязательные поля.');
  else  {
    $.ajax({
      type: "POST",
      url: "/form/mail.php",
      data: $( this ).serialize()
    }).done( function() {
      alert( "Заявка принята! В ближайшее время наш юрист с Вами свяжется." );
      // очищаем поля
      $('#name').val('');
      $('#phone').val('');
      $('#mail').val('');
      $('#city').val('');
      $('#nalog').val('');
      $('#okved').val('');
      $('#participants').val('');
      $('#inn').val('');
    });
  }
  return false;
  });
});


Код обработчика:
<?php

$recepient = "mail@mail.ru";

var_dump($_POST['page']);
$name = trim($_POST["name"]);
$phone = trim($_POST["phone"]);
$mail = trim($_POST["mail"]);

$message = "Имя: $name \nТелефон: $phone \nЭл. почта: $mail \nГород: $city";

$pagetitle = "Новая заявка со страницы " . $_POST['page'];
mail($recepient, $pagetitle, $message, "Content-type: text/plain; charset=\"utf-8\"\n From: $recepient");
  • Вопрос задан
  • 1921 просмотр
Пригласить эксперта
Ответы на вопрос 1
DcFanoiD
@DcFanoiD
Full Stack : web
У вас нет проверки капчи в коде обработчика.
Посмотрите документацию: https://developers.google.com/recaptcha/docs/v3

Проверка в вашем случае может выглядеть так (замените $key на ваш ключ):
if(isset($_POST['g-recaptcha-response'])) {
    
    $captcha = $_POST['g-recaptcha-response'];
    $ip = $_SERVER['REMOTE_ADDR'];
    $key = 'PRIVATE KEY';
    $recaptcha_response = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$key.'&response='.$captcha.'&remoteip='.$ip);
    $data = json_decode($recaptcha_response);

    if(isset($data->success) &&  $data->success === true) {
        //Код если капча пройдена
        $recepient = "mail@mail.ru";
        $name = trim($_POST["name"]);
        $phone = trim($_POST["phone"]);
        $mail = trim($_POST["mail"]);
        $message = "Имя: $name \nТелефон: $phone \nЭл. почта: $mail \nГород: $city";
        $pagetitle = "Новая заявка со страницы " . $_POST['page'];
        mail($recepient, $pagetitle, $message, "Content-type: text/plain; charset=\"utf-8\"\n From: $recepient");
    }
    else {
       //Код, если капча не пройдена
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы