web-dev-qa-db-ja.com

Google ReCaptchaが「g-recaptcha-response」を投稿しない

この質問は以前に尋ねられました: 新しいGoogle ReCaptchaは「g-recaptcha-response」を投稿/受信しません -しかし、適切な答えはありませんでした。

私は彼とまったく同じ設定をしていますが、コードはここで失敗します:

if(!$captcha){
   exit;
}

そう $captcha=$_POST['g-recaptcha-response']は空のようです。

チェックボックスサーバー側php を使用した新しいgoogle recaptcha =ここでの2番目の答えも機能しないようです。

なぜこれが起こるのか誰にも分かりますか?

17
frosty

この問題が発生し、フォームがテーブル内にあるため、DOMでフォームが途中で閉じていることがわかりました。 ReCaptchaはdisplay:none g-recaptcha-responseテキストエリアを設定し、後でキャプチャを完了するとデータを入力します。 divが含まれているフォームの子を探しているようで、最初に作成したg-recaptcha-responseを見つけることができませんでした。テーブルの周りにフォームを配置すると、その後は正常に機能しました。

17
Kiwimancy

今日、同僚のウェブサイトでこの同じ問題(g-recaptcha-responseが送信時に価値がなかった)がありました。タグ<formは、開始タグ<table(td内ではなく、<tableの直後)の直後に誤ってネストされていることがわかりました。
これが問題の原因でした。
_formをラップするようにタグtableを移動した後、g-recaptcha-responseの値が送信後にサーバー側に正しくポストされました。

4
zed

フォームをユーザーに表示するの部分に次のものがあるかどうかを確認します。

  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を押すことで)-サーバー側のコードではなく-知識。ただし、これらすべてがクライアントでも適切に配置されている場合、これは難しいものになります^^

3
Levit

Googleは、開始タグと終了タグを<table><div>などの他のDOM要素の外側に配置することを望んでいるようです。まったく同じ問題が発生しましたが、現在は解決されています。あなたの移動...

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

... anyまたはtagの外側にコーディングすれば機能します。 Googleがフォームを見つけられず、フォームの値を挿入できないようです。

1
Wittner

ちょうど同じ問題がありました。問題を引き起こす<table>タグではありませんでしたが、問題を引き起こす<div>タグでした。

私のフォームは、フォームの一般的なレイアウトをフォーマットするために使用されるメイン<div>内にありました。 <form>タグは、フォームレイアウトに使用していたメイン<div>内にある必要はありません。フォームレイアウト<form>タグの直前に<div>タグを移動し、完全に機能し始めました。

1
integriz

最初にrecaptchaが設定されているかどうかを確認します

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

簡単なデバッグについては、こちらもご覧ください simple PHP tutorial .

0
XIMRX

ReCaptcha v3を使用している場合、フォームにIDを添付してg-recaptcha-responseを明示的に定義する必要があります。

ReCaptcha v2を使用している場合は、recaptchacontainerをフォームに入れてください。

0
Ravi

上記のどれも私にとってはうまくいきませんでした。 _react-google-recaptcha_を使用しています。そして、事前にrecaptchaRef.current.execute() Promiseを待つ/解決しなければならないようです。

約束を解決することなく、それは半分の時間で機能し、それが私がrecaptchaRef.current.getValue()を呼び出すときです。そうでなければ、空の値を返します。

0
Charming Robot

はい、エラーはDOMです

コードエラー

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

コード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

完璧な解決策は、独自のg-recaptcha-response入力を作成しないことです。Googleが応答を入力し、さらに別のg-recaptcha-response textareaを作成するためです。しかし、その後、応答値でそれを埋めません

0
Mr.Nestorjava