この質問は以前に尋ねられました: 新しいGoogle ReCaptchaは「g-recaptcha-response」を投稿/受信しません -しかし、適切な答えはありませんでした。
私は彼とまったく同じ設定をしていますが、コードはここで失敗します:
if(!$captcha){
exit;
}
そう $captcha=$_POST['g-recaptcha-response']
は空のようです。
チェックボックスサーバー側php を使用した新しいgoogle recaptcha =ここでの2番目の答えも機能しないようです。
なぜこれが起こるのか誰にも分かりますか?
この問題が発生し、フォームがテーブル内にあるため、DOMでフォームが途中で閉じていることがわかりました。 ReCaptchaはdisplay:none g-recaptcha-responseテキストエリアを設定し、後でキャプチャを完了するとデータを入力します。 divが含まれているフォームの子を探しているようで、最初に作成したg-recaptcha-responseを見つけることができませんでした。テーブルの周りにフォームを配置すると、その後は正常に機能しました。
今日、同僚のウェブサイトでこの同じ問題(g-recaptcha-response
が送信時に価値がなかった)がありました。タグ<form
は、開始タグ<table
(td内ではなく、<table
の直後)の直後に誤ってネストされていることがわかりました。
これが問題の原因でした。
_form
をラップするようにタグtable
を移動した後、g-recaptcha-response
の値が送信後にサーバー側に正しくポストされました。
フォームをユーザーに表示するの部分に次のものがあるかどうかを確認します。
の間に <form>
および</form>
:
<div class="g-recaptcha" data-sitekey="your_public_key"></div>
終了前</head>
鬼ごっこ:
<script src='https://www.google.com/recaptcha/api.js'></script>
フォームがメソッドとしてpost
を使用していることを確認してください...
<form method="post" ...>
これらが正しい場合、少なくともいくつかの$_POST['grecaptcha-response']
はあなたの方法で来ているはずです。結果のクライアント側のhtmlコードで最初にそれらを確認します(多くのブラウザでは、ユーザー側のフォームを見ながらStrg
+ U
を押すことで)-サーバー側のコードではなく-知識。ただし、これらすべてがクライアントでも適切に配置されている場合、これは難しいものになります^^
Googleは、開始タグと終了タグを<table>
や<div>
などの他のDOM要素の外側に配置することを望んでいるようです。まったく同じ問題が発生しましたが、現在は解決されています。あなたの移動...
<div class="g-recaptcha" data-sitekey="abcd1234etc."></div>
... anyまたはtagの外側にコーディングすれば機能します。 Googleがフォームを見つけられず、フォームの値を挿入できないようです。
ちょうど同じ問題がありました。問題を引き起こす<table>
タグではありませんでしたが、問題を引き起こす<div>
タグでした。
私のフォームは、フォームの一般的なレイアウトをフォーマットするために使用されるメイン<div>
内にありました。 <form>
タグは、フォームレイアウトに使用していたメイン<div>
内にある必要はありません。フォームレイアウト<form>
タグの直前に<div>
タグを移動し、完全に機能し始めました。
最初にrecaptchaが設定されているかどうかを確認します
if(!isset($_POST['g-recaptcha-response']) ){
die ("Error: Not valid recaptcha on form");
}
簡単なデバッグについては、こちらもご覧ください simple PHP tutorial .
ReCaptcha v3を使用している場合、フォームにIDを添付してg-recaptcha-responseを明示的に定義する必要があります。
ReCaptcha v2を使用している場合は、recaptchacontainerをフォームに入れてください。
上記のどれも私にとってはうまくいきませんでした。 _react-google-recaptcha
_を使用しています。そして、事前にrecaptchaRef.current.execute()
Promiseを待つ/解決しなければならないようです。
約束を解決することなく、それは半分の時間で機能し、それが私がrecaptchaRef.current.getValue()
を呼び出すときです。そうでなければ、空の値を返します。
はい、エラーは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"
完璧な解決策は、独自のg-recaptcha-response入力を作成しないことです。Googleが応答を入力し、さらに別のg-recaptcha-response textareaを作成するためです。しかし、その後、応答値でそれを埋めません