Как отправить данные из HTML-формы после проверки recaptcha? - PullRequest
1 голос
/ 03 июня 2019

Я работаю на сайте контактов, где я хочу иметь контактную форму.Я хочу, чтобы он отправлял данные на электронную почту, и я хочу, чтобы это проверялось в recaptcha v3 от Google.

Это моя вторая попытка.В прошлом я делал это успешно, не повторяя.Теперь я использовал этот (https://codeforgeek.com/google-recaptcha-v3-tutorial/) учебник, со следующим результатом:

скрипт под формой

       // when form is submit
    $('#myform').submit(function() {
        // we stoped it
        event.preventDefault();
        var mail = $('#email').val();
        var comment = $("#sprava").val();
        // needs for recaptacha ready
        grecaptcha.ready(function() {
            // do request for recaptcha token
            // response is promise with passed token
            grecaptcha.execute('__SITE-KEY__', {action: 'create_comment'}).then(function(token) {
                // add token to form
                $('#myform').prepend('<input type="hidden" name="g-recaptcha-response" value="' + token + '">');
                    $.post("form.php",{mail: mail, comment: comment, token: token}, function(result) {
                            if(result.success) {
                                    alert('Thanks for message')
                            } else {
                                    alert('An error occured')
                            }
                    });
            });;
        });
  });
  </script>

имена полей формы html "email", "vyber""," sprava "

form.php

<?php
  $mail;$comment;$captcha;
  $mail = filter_input(INPUT_POST, 'mail', FILTER_VALIDATE_EMAIL);
  $comment = filter_input(INPUT_POST, 'comment', FILTER_SANITIZE_STRING);
  $captcha = filter_input(INPUT_POST, 'token', FILTER_SANITIZE_STRING);
  }

  function email_sending(){
    $webmaster_email = "bla@bla.com";
    $sender_email= "blabla@bla.com" ;

    $email_address = $_REQUEST['email'] ;
    $selection = $_REQUEST['vyber'] ;
    $message = $_REQUEST['sprava'];

    $msg =
    "E-mail: " . $email_address . "\r\n" .
    "I'm interested in " . $selection . "\r\n" .
    "Message: " . $message ;


    mail( "$webmaster_email", "You have mail", $msg, $header);
  }

  if($responseKeys["success"]) {
    echo json_encode(array('success' => 'true'));
    email_sending();
  } else {
    echo json_encode(array('success' => 'false'));
  }
?>

Проблема не в части recaptcha, но затем я получаю электронную почту, где данные отсутствуют. (показывает только переменнуюимена, а не фактические значения.) Я мог бы подумать, что это из-за именования в скрипте, так как я не уверен, что писать в объявлении переменных. Я был бы рад получить любую информацию об этой проблеме.

1 Ответ

0 голосов
/ 06 июня 2019

Мне удалось решить эту проблему, изменив код на стороне сервера, как показано ниже, благодаря этому Руководству по рекаптче .

  // Check if form was submitted:
  if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['recaptcha_response'])) {

// Build POST request:
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
$recaptcha_secret = '__SECRET-KEY___';
$recaptcha_response = $_POST['recaptcha_response'];

// Make and decode POST request:
$recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response);
$recaptcha = json_decode($recaptcha);

// Take action based on the score returned:
if ($recaptcha->success == true) {
    // Verified - send email

} else {
    // Not verified - show form error

}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...