#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(), ... }