Как сделать Google reCaptcha обязательным или обязательным?

У меня есть контактная форма, и я успешно добавил reCAPTCHA v2, но я не могу сделать ее обязательной / обязательной опцией. Итак, в настоящее время, если я нажимаю кнопку отправки, оно отправляет сообщение даже без проверки (без нажатия на «Я не робот»), что делает его бесполезным.

код:

<?php
$page_id = 4;
$page_details = get_page_details($page_id);
ini_set(sendmail_from, "");
require ("class.phpmailer.php");

$mail = new PHPMailer();

if ($_POST["action"] == "sendmail_contact"){
  $from = $_POST["email"];
  $contact_data = mysql_fetch_array(mysql_query("select * from contact_info"));
  $to = $contact_data["email"];
  $check_dir = "contact_files/uploads/folder" . $_SESSION["UID_Contact"];
  $results_array = array();
  if (is_dir($check_dir)){
      if ($handle = opendir($check_dir)){
          while (($file = readdir($handle)) !== FALSE){
              if ($file != "Thumbs.db" and $file != "." and $file != ".."){$results_array[] = $file;}}
closedir($handle);}}
if ($results_array[0] != ""){
      $thumbpath1 = $results_array[0];
      $mail->AddAttachment("$check_dir/$thumbpath1");}   
  if ($results_array[1] != ""){
      $thumbpath2 = $results_array[1];
      $mail->AddAttachment("$check_dir/$thumbpath2");}
  if ($results_array[2] != ""){
      $thumbpath3 = $results_array[2];
      $mail->AddAttachment("$check_dir/$thumbpath3");}
  if ($results_array[3] != ""){
      $thumbpath4 = $results_array[3];
      $mail->AddAttachment("$check_dir/$thumbpath4");}
  $subject = 'Contact Us Page';
  $Message = "";
  $Message.= '<font face = "Verdana" size = "2"><strong>IP : </strong> ' . $ip_address . '</font><br /><br />';
  $Message.= '<font face = "Verdana" size = "2"><strong>Country : </strong> ' . $country . '</font><br /><br />';
  $Message.= '<font face = "Verdana" size = "2"><strong>Heard from : </strong> ' . $_POST["where"] . '</font><br /><br /><br />';
  $Message.= '<font face = "Verdana" size = "2"><strong>Name : </strong> ' . ucfirst($_POST["name"]) . '</font><br /><br />';
  $Message.= '<font face = "Verdana" size = "2"><strong>E-mail : </strong> ' . $_POST["email"] . '</font><br /><br />';
  $Message.= '<font face = "Verdana" size = "2"><strong>Message : </strong> ' . $_POST["details"] . '</font><br /><br />';
  $Message1.= $Message;
  $mail->From = $from;
  $mail->FromName = $from;
  $mail->AddAddress($to);
  $mail->IsHTML(true);
  $mail->Subject = $subject;
  $mail->Body = $Message1;
  $mail->Send();
  header("location: $site_url/contact-thank-you");}
?>
<head>
<script type = "text/javascript">
var $j_123 = jQuery.noConflict();
$j_123(document).ready(function() {
    var validator = $j_123("#contactusfrm").validate({
        rules: {
            name: "required",
            email: {required: true,email: true },
            details: "required"
        },
        messages: {
            name: "<span class=\"alert_contact\">required</span>",
            email: {required: "<span class=\"alert_contact\">required</span>",email: "<span class=\"alert_contact\">invalid</span>" },
            details: "<span class=\"alert_contact\">required</span>"
        }
    });
}); < /script> 

<script src='google.com/recaptcha/api.js'></script>
</head>
<body>
<div class = "content">

<form id = "contactusfrm" name = "contactusfrm" method = "post" action = "url/contact">
<input type = "hidden" name = "action" value = "sendmail_contact"/>

Your Name *<input name = "name" type = "text" class = "textbox" id = "name" title = "Name"/>

Your Email *<input name = "email" type = "text" class = "textbox" id = "email" title = "Email"/>

How did you hear about us?<select name = "where" class = "dropdown" id = "where" title = "How did you hear about us">
<option value = "-">Click to Choose...</option>
<option value = "Google Search"> Google Search </option>
<option value = "Social Media"> Social Media </option>
<option value = "Blog"> Blog </option>
<option value = "Recommendation"> Recommendation </option>
<option value = "Advertisement"> Advertisement </option>
<option value = "Forum"> Forum </option>
<option value = "Other"> Other </option>
</select>

Your Message *<br/><textarea name = "details" class = "textarea" id = "details" title = "Message"></textarea>

<div id = "fileuploader"><div class = "ajax-file-upload">UPLOAD FILE</div></div>
<script  type = "text/javascript">
var $jj = jQuery.noConflict();
$jj(document).ready(function(){
$jj("#fileuploader").uploadFile({
url:"<?php
echo $site_url ?>/contact_files/upload.php",  
fileName:"myfile",
multiple:true,
returnType:"json",
showDelete:true,
deleteCallback:function(data, pd){
for(var i =0; i < data.length; i++){
$jj.post("<?php
echo $site_url ?>/contact_files/delete.php",{op:"delete",name: data[i]},
function(resp,textStatus, jqXHR){});}}});});
</script>

<div class = "g-recaptcha" data-sitekey = "-----key----"></div>

<div class = "bot-cont"><button name = "submit_button" type = "submit" class = "submit_button" value = "SUBMIT MESSAGE">SUBMIT MESSAGE</button></div>

</form>
</div>

<script type = "text/javascript" src = "url/jquery.uploadfile.min.js"></script>
<script type = "text/javascript" src = "ajax.aspnetcdn.com/ajax/jquery.validate/1.8/jquery.validate.min.js"></script>

</body>

Кроме того, в моей форме, когда пользователь успешно отправляет сообщение, он / она будет перенаправлен на другую страницу (страницу с благодарностью), поэтому мне не понадобится какое-либо сообщение с надписью «Успешно».

Мне нужно только сообщение об ошибке с «обязательным» текстом (например, те, которые у меня уже есть для других полей), только когда пользователь пытается отправить без проверки «Я не робот».

Кто-нибудь знает, как заставить это работать нормально?

Вы явно не уделили внимания тому, как работает рекапча. Вот ссылка: developers.google.com/recaptcha/old/docs/php; вы должны удалить вопрос.

Slavic 06.04.2018 04:14

Я хочу использовать reCAPTCHA v2 и ссылку, которую вы дали, я думаю, для старой reCAPTCHA v1, которая больше не поддерживается.

vld1 06.04.2018 14:16
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
854
1

Ответы 1

Вы не проверяете переменную "g-recaptcha-response" при обработке цели. Посмотри на это:

if (isset($_POST['submit']) && !empty($_POST['submit'])):
    if (isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])):
      //your site secret key
      $secret = '9LuDh9kyetYYYYdT0jsVckScsH8Ks3KA';
      //get verify response data
      $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
      $responseData = json_decode($verifyResponse);
      if ($responseData->success):
        //contact form submission code
        $name = !empty($_POST['name'])?$_POST['name']:'';
        $email = !empty($_POST['email'])?$_POST['email']:'';
        $message = !empty($_POST['message'])?$_POST['message']:'';

        $to = '[email protected]';
        $subject = 'New contact form have been submitted';
        $htmlContent = "
            <h1>Contact request details</h1>
            <p><b>Name: </b>".$name."</p>
            <p><b>Email: </b>".$email."</p>
            <p><b>Message: </b>".$message."</p>
        ";
        // Always set content-type when sending HTML email
        $headers = "MIME-Version: 1.0" . "\r\n";
        $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
        // More headers
        $headers .= 'From:'.$name.' <'.$email.'>' . "\r\n";
        //send email
        @mail($to,$subject,$htmlContent,$headers);

        $succMsg = 'Your contact request have submitted successfully.';
      else:
        $errMsg = 'Robot verification failed, please try again.';
      endif;
  else:
    $errMsg = 'Please click on the reCAPTCHA box.';
  endif;
else:
  $errMsg = '';
  $succMsg = '';
endif;

В приведенном выше примере гарантируется, что ответ g-recaptcha-response был передан, проверяется ответ, а затем, если проверка captcha не удалась, отображается ошибка проверки. Используйте этот пример, чтобы изменить свой код, чтобы проверить успешное использование рекапчи.

Привет. Спасибо за код, пробовал, но, к сожалению, не работает. Код очень похож на другие, которые я пробовал раньше. Я начинаю думать, что проблема может быть связана с чем-то еще в моем коде, что не позволяет recaptcha работать должным образом. Кажется, я не могу понять, что именно.

vld1 06.04.2018 14:26

Другие вопросы по теме