Проверьте reCAPTCHA V2 в другом файле php, вызываемом методом jquery ajax $.post

#php #jquery #ajax #recaptcha

Вопрос:

Я пытаюсь проверить recpatcha v2 из формы в index.php файл, который отправляется нажатием на элемент div, и ajax вызывает файл test.php и проверяет данные на стороне сервера. Но он показывает предупреждение «Неопределенный индекс g-recpatcha-ответ», так как он не читается во внешнем файле php, т. е. test.php.

Вот код «index.php»

 lt;form method="POST" action="test.php" id="contactform"gt;  lt;table align="center"gt;  lt;trgt;  lt;tdgt;lt;input type="text" id="name" name="name" placeholder="Name" required /gt;  lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;tdgt;lt;input type="email" id="email" name="email" placeholder="Email" required /gt;lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;tdgt;lt;input type="number" id="number" name="number" placeholder="Contact Number (Optional)" /gt;lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;tdgt;  lt;select name="subject" id="subject"gt;  lt;option value="" selected disabledgt;Subjectlt;/optiongt;  lt;option id="w" value="Web Development"gt;Web Developmentlt;/optiongt;  lt;option id="g" value="Graphic Design"gt;Graphic Designlt;/optiongt;  lt;option id="t" value="Technical Support"gt;Technical Supportlt;/optiongt;  lt;option id="v" value="Video Editing"gt;Video Editinglt;/optiongt;  lt;option id="a" value="App Development"gt;App Developmentlt;/optiongt;  lt;option id="s" value="SEO"gt;Search Engine Optimizationlt;/optiongt;  lt;/selectgt;  lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;tdgt;lt;textarea rows="5" cols="30" id="message" name="message" placeholder="Message" requiredgt;lt;/textareagt;  lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;tdgt;lt;div class="g-recaptcha" data-sitekey="6LcKwykdAAAAAMLLZ6eLcOC" id="captcha"gt;lt;/divgt;lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;tdgt;  lt;div type="submit" id="send" class="send" onclick="validate();"gt;Send Messagelt;/divgt;    lt;/tdgt;  lt;/trgt;  lt;/tablegt;  lt;/formgt;  

Код Jquery

 $('#send').click(function()  {  if(sessionStorage.getItem("Error")!="Error")  {  // $('.loader').css("display" , "flex");  $(".loader-wrapper").fadeIn("slow");  $('#contactform').submit(function( event ) {  alert( "Handler for .submit() called." );  event.preventDefault();  });  $.post("test.php", {  request: "send",  name: document.getElementById('name').value,  email: document.getElementById('email').value,  number: document.getElementById('number').value,  subject: document.getElementById('subject').value,  message: document.getElementById('message').value,    },   function(data, status){  //$('.loader').css("display" , "none");  $(".loader-wrapper").fadeOut("slow");  alert("Data: "   data   "nStatus: "   status);  if(data=="Empty")  {  $('#success').text("");  $('#error').text("Please fill out the required fields!");  $('#error').fadeIn("slow").delay(4000).fadeOut("slow");  }  else if(data=="Recieved")  {  document.getElementById('name').value ="";  document.getElementById('email').value ="";  document.getElementById('number').value ="";  document.getElementById('subject').value ="";  document.getElementById('message').value ="";  $('#error').text("");  $('#success').text("Message sent successfully");  $('#success').fadeIn("slow").delay(4000).fadeOut("slow");  }  else  {  $('#success').text("");  $('#error').text("Invalid Captcha! Please Try Again");  $('#error').fadeIn("slow").delay(4000).fadeOut("slow");  }  });  }  });  

Проверка кода PHP-файла «test.php» — (Вызывается методом jquery POST)

 if($request=="send")  {  //User Agent - Detailes  date_default_timezone_set('Asia/Kolkata');  $currentTime = date( 'd-m-Y h:i:s A');    $useragent=$_SERVER["HTTP_USER_AGENT"];  $userip=$_SERVER['REMOTE_ADDR'];     $name = $_POST["name"];  $email = $_POST["email"];  $number = $_POST["number"];  $subject = $_POST["subject"];  $message = $_POST["message"];  if(empty($name) || empty($email) || empty($subject) || empty($message))  {  die("Empty");  }  else  {  $ins = "INSERT INTO `contact` VALUES ('$name','$email','$number','$subject','$message','$currentTime','$userip','$useragent')";   $secret_key = "6LcKwykdAAAAAGFDDnn4O928S";  if (isset($_POST['g-recaptcha-response']))   {    }  $response_key = $_POST['g-recaptcha-response'];  $userip = $_SERVER['REMOTE_ADDR'];  $url = "https://www.google.com/recaptcha/api/siteverify?secret=$secret_keyamp;response=$response_keyamp;remoteip=$userip";   $response = file_get_contents($url);  $response = json_decode($response);    if($response-gt;success)  {  $con-gt;query($ins);  echo "Recieved";  }  else  {  echo "Error";  }  }  }  

Моя цель состоит в том, чтобы отправить форму с надлежащей проверкой капчи без обновления страницы. Поэтому я не использую кнопку «Отправить». Пожалуйста, дайте мне знать, как я могу получить доступ к $_POST[«g-recaptcha-ответ»] в test.php файл

Комментарии:

1. $.post("test.php", {'g-recaptcha-response': grecaptcha.getResponse(), ... }