web-dev-qa-db-fra.com

Google ReCaptcha ne publie pas 'g-recaptcha-response'

Cette question a déjà été posée: Nouveau Google ReCaptcha ne publiant pas/ne recevant pas 'g-recaptcha-response' - mais il n'y avait pas de bonne réponse.

J'ai exactement la même configuration que lui, mais le code échoue ici:

if(!$captcha){
   exit;
}

donc $captcha=$_POST['g-recaptcha-response'] semble vide.

nouveau google recaptcha avec case à cocher côté serveur php = La 2ème réponse ici ne semble pas non plus fonctionner.

Est-ce que quelqu'un sait pourquoi cela pourrait arriver?

17
frosty

J'ai rencontré ce problème et j'ai constaté que mon formulaire se fermait prématurément dans le DOM car il se trouvait dans une table. ReCaptcha configure un affichage: aucune zone de texte g-recaptcha-response et remplit plus tard les données lorsque vous terminez le captcha. Il semble chercher des enfants de la forme dans laquelle se trouve le div et n'a donc pas pu trouver la réponse g-recaptcha qu'il avait initialement créée. J'ai mis le formulaire autour de la table et cela a bien fonctionné après cela.

17
Kiwimancy

Aujourd'hui, j'ai eu ce même problème (g-recaptcha-response n'avait aucune valeur lors de la soumission) sur le site Web d'un collègue. Il s'avère que la balise <form a été imbriqué par erreur juste après la balise d'ouverture <table (pas à l'intérieur d'un td, mais directement après <table).
Cela était à l'origine du problème.
Après avoir déplacé la balise form de manière à envelopper le table, la valeur de g-recaptcha-response a été correctement publié côté serveur après l'envoi.

4
zed

Vérifiez si les éléments suivants sont présents dans la partie où vous montrez le formulaire à l'utilisateur:

  1. Entre <form> et </form>:

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

  2. Avant la fermeture </head> tag:

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

  3. Vérifiez que votre formulaire utilise post comme méthode, ...

    <form method="post" ...>

Si ceux-ci sont corrects, au moins certains $_POST['grecaptcha-response'] devrait arriver. Vérifiez d'abord celles du code HTML côté client résultant (dans de nombreux navigateurs en appuyant sur Strg + U tout en regardant le formulaire utilisateur) - plutôt que sur votre code côté serveur - il est plus facile de travailler avec cela connaissance. Si tous ces éléments sont en place, même chez le client, ce sera toutefois difficile ^^

3
Levit

Il semble que Google souhaite que vos balises d'ouverture et de fermeture soient en dehors des autres éléments DOM tels que <table> ou <div>. J'avais exactement le même problème qui est maintenant résolu. Bouger ton...

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

... code à l'extérieur de tout ou balise et cela fonctionnera. Il semble que Google ne puisse pas trouver le formulaire et injecter sa valeur de formulaire autrement.

1
Wittner

Juste eu le même problème. Ce n'était pas un <table> tag à l'origine du problème mais c'était un <div> tag à l'origine du problème.

Mon formulaire faisait partie d'un <div> utilisé pour formater la disposition générale du formulaire. Le <form> la balise ne DOIT PAS être dans le cadre principal <div> J'utilisais pour la mise en page du formulaire. J'ai déplacé le <form> tag juste avant la mise en page de mon formulaire <div> tag et il a commencé à fonctionner parfaitement.

1
integriz

Vérifiez d'abord si recaptcha est défini

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

Jetez également un œil à ceci simple PHP pour un débogage simple.

0
XIMRX

Si vous utilisez reCaptcha v3, vous devez définir explicitement g-recaptcha-response dans votre formulaire en y joignant un ID.

Si vous utilisez reCaptcha v2, assurez-vous simplement de mettre recaptchacontainer avec dans votre formulaire

0
Ravi

Rien de ce qui précède n'a fonctionné pour moi. J'utilise react-google-recaptcha. Et il semble que vous devez attendre/résoudre la promesse recaptchaRef.current.execute() au préalable.

Sans résoudre la promesse, cela a fonctionné la moitié du temps, et c'est là que j'appelle recaptchaRef.current.getValue(). Sinon, il retournerait une valeur vide.

0
Charming Robot

Oui, l'erreur est le DOM

Erreur de code

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

Code OK


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

La solution parfaite est de ne pas créer votre propre entrée g-recaptcha-response car google la remplira avec la réponse et continuera à en créer une autre g-recaptcha-response textarea mais ne le remplira pas avec la valeur de réponse

0
Mr.Nestorjava