Nano Hash - криптовалюты, майнинг, программирование

Google ReCaptcha не публикует «g-recaptcha-response»

Этот вопрос задавался раньше: Новая Google ReCaptcha не публикуется/не получает 'g-recaptcha-response' - но правильного ответа не было.

У меня точно такие же настройки, как и у него, но здесь код не работает:

if(!$captcha){
   exit;
}

поэтому $captcha=$_POST['g-recaptcha-response'] кажется пустым.

новая рекапча Google с флажком на стороне сервера php = Второй ответ здесь тоже не работает.

Кто-нибудь знает, почему это могло произойти?

06.06.2015

  • Убедитесь, что API js загружен в <head> вашего документа и что нет ошибок javascript. Кроме того, вы можете проверить дом с помощью Firebug или Chrome Dev Tools, чтобы увидеть, есть ли поле формы. 08.06.2015
  • Та же проблема здесь, мой ответ пуст. Ответы на оба поста не помогли. Может ли быть сетевое ограничение, которое блокирует ответ? Сайт reCAPTCHA еще не показывает никаких данных для меня, но, возможно, мне придется подождать больше суток. 18.03.2017
  • не знаю, поможет ли это вам. но я скачал шаблон начальной загрузки и столкнулся с этим. форма на самом деле не публикуется, есть скрипт js, который сначала проверяет ввод данных, пустые поля и т. д., если все в порядке, он создает запрос POST и публикует его. мне пришлось отредактировать js-скрипт, чтобы включить поле g-recaptcha-response... надеюсь, это поможет :) 04.01.2021

Ответы:


1

Я столкнулся с этой проблемой и обнаружил, что моя форма преждевременно закрывается в DOM, потому что она находится внутри таблицы. ReCaptcha настраивает текстовое поле display:none g-recaptcha-response, а затем заполняет данные, когда вы вводите капчу. Кажется, он ищет дочерние элементы формы, в которой находится div, и поэтому не может найти ответ g-recaptcha, который он изначально создал. Я поставил форму вокруг стола, и после этого она заработала нормально.

08.02.2016
  • Это было и для меня тоже. 25.10.2017
  • Ага! - реализовать это на плохом устаревшем коде с <table><form>[table-contents]</form></table> и просто перейти к <form><table>[table-contents]</table></form> этот ответ избавил меня от 1 часа ненужной отладки! :) 15.02.2018
  • В моем случае я не добавил это в свой тег заголовка <script src='https://www.google.com/recaptcha/api.js'></script> 11.07.2018
  • когда вы даете идентификатор google div, подобный этому #g-recaptcha-response, он также не дает ответа. так что не давайте имя, как это. 23.09.2019
  • Ага, устаревшие сайты, неверный формат HTML 25.06.2021

  • 2

    Убедитесь, что в той части, где вы показываете форму пользователю, присутствует следующее:

    1. Между <form> и </form>:

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

    2. Перед закрывающим тегом </head>:

      <script src='https://www.google.com/recaptcha/api.js'></script>

    3. Убедитесь, что ваша форма использует post в качестве метода,...

      <form method="post" ...>

    Если они верны, по крайней мере, некоторые $_POST['grecaptcha-response'] должны появиться на вашем пути. Сначала проверьте их в полученном HTML-коде на стороне клиента (во многих браузерах нажмите Strg+U при просмотре пользовательской формы), а не в коде на стороне сервера - с этими знаниями легче работать. Если все это есть даже у клиента, это будет непросто ^^

    10.06.2015
  • Я нашел метод приманки для защиты от спам-ботов и решил использовать его, так как он намного проще. Есть ли какая-то причина, по которой я должен вместо этого использовать recaptcha? 10.06.2015
  • @frosty: С приманкой вы можете ТОЛЬКО обмануть очень общих ботов, если кто-то конкретно нацелился на вас, это довольно бесполезно. Кроме того, вы должны быть осторожны с людьми, использующими заполнители форм (клиенты, которые позволяют браузеру заполнять свои формы за них), которые также будут обмануты, и (в хорошем смысле) пользователь может быть удивлен тем, что ваш сайт назовет его спамером ^ ^. Если вас это устраивает, это допустимый вариант, который (только) защитит вас от более общих спам-ботов. Но лично я бы точно порекомендовал рекапчу, это не так уж и сложно. 10.06.2015
  • @frosty: Если вы проверили пункты этого ответа, вам нужно только проверить рекапчу при проверке формы. См. следующий ответ для готовой к использованию функции, и все готово: stackoverflow.com/questions/27274157/ 10.06.2015

  • 3

    Сегодня у меня была такая же проблема (g-recaptcha-response не имел значения при отправке) на веб-сайте коллеги. Выяснилось, что тег <form был по ошибке вложен сразу после открывающего тега <table (не внутри td, а сразу после <table).
    Это и вызывало проблему.
    После перемещения тега form таким образом, чтобы он заворачивал table , значение g-recaptcha-response было правильно отправлено на сервер после отправки.

    04.10.2016
  • У меня была такая же проблема в старом коде, который никогда не был моим. Я изменил положение тегов ‹form› и ‹/form› за пределами тегов ‹table› и ‹/table›, и теперь это работает. Спасибо Зед. 20.04.2017

  • 4

    Просто была такая же проблема. Проблема была не в теге <table>, а в теге <div>.

    Моя форма находилась внутри основного <div>, используемого для форматирования общего макета формы. Тег <form> НЕ ДОЛЖЕН находиться внутри основного <div>, который я использовал для макета формы. Я переместил тег <form> непосредственно перед тегом <div> макета формы, и он начал работать отлично.

    06.04.2017

    5

    Похоже, Google хочет, чтобы открывающий и закрывающий теги находились вне других элементов DOM, таких как <table> или <div>. У меня была точно такая же проблема, которая сейчас решена. Переместите свой ...

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

    ... код за пределами любого или тега, и он будет работать. Похоже, что Google не может найти форму и иначе ввести значение формы.

    18.07.2017

    6

    Да, ошибка DOM

    Ошибка кода

    table width="100%" border="0" cellspacing="0" cellpadding="0" align="center"
    form id="contacto" name="contacto" method="post" action="xxx"
    

    Код ОК

    
    form id="contacto" name="contacto" method="post" action="xxx"
    table width="100%" border="0" cellspacing="0" cellpadding="0" align="center"
    25.01.2017

    7

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

    03.02.2018

    8

    Если вы используете reCaptcha v3, вы должны явно определить g-recaptcha-response в своей форме, прикрепив к нему идентификатор.

    Если вы используете reCaptcha v2, просто не забудьте добавить recaptchacontainer в свою форму.

    06.03.2019

    9

    Ничего из вышеперечисленного не работало для меня. Я использую react-google-recaptcha. И похоже, что вам нужно заранее дождаться/разрешить обещание recaptchaRef.current.execute().

    Без разрешения обещания это работало в половине случаев, и именно тогда я вызываю recaptchaRef.current.getValue(). В противном случае он вернул бы пустое значение.

    20.03.2019

    10

    У меня была такая же проблема на сайте, созданном с помощью темы порто html5. Код javascript, который позаботился о проверке, вручную передал поля, поэтому было необходимо добавить поле g-captcha-response.

    В представлении.contact.js

    // Ajax Submit
    $.ajax({
        type: 'POST',
        url: $form.attr('action'),
        dataType: 'JSON',
        data: {
            name: $form.find('#name').val(),
            email: $form.find('#email').val(),
            subject: $form.find('#subject').val(),
            messaggio: $form.find('#messaggio').val(),
            grecaptcharesponse: $form.find('#g-recaptcha-response').val()
        }
    
    ...
    

    и на странице php измените $_POST['g-recaptcha-response'] with $_POST['grecaptcharesponse']

    18.12.2020

    11

    Сначала проверьте, установлена ​​ли рекапча

    if(!isset($_POST['g-recaptcha-response']) ){
        die ("Error: Not valid recaptcha on form");
    }
    

    Также ознакомьтесь с этим простым руководством по PHP для простой отладки.

    16.11.2015
  • Ссылка больше недоступна. 05.11.2016
  • @Jimmy Adaro Wayback Machine спешит на помощь! http://web.archive.org/web/20151117185717/http://blog.itslum.com/2015/11/15/google-recaptcha-step-by-step-guide/ 05.12.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..