2015-06-06 112 views
11

此問題之前已被問到:New Google ReCaptcha not posting/receiving 'g-recaptcha-response' - 但沒有正確的答案。Google ReCaptcha沒有發帖'g-recaptcha-response'

我有完全相同的設立爲他,但代碼失敗在這裏:

if(!$captcha){ 
    exit; 
} 

所以$captcha=$_POST['g-recaptcha-response']似乎是空的。

new google recaptcha with checkbox server side php =這裏的第二個答案似乎也不起作用。

有誰知道爲什麼會發生這種情況?

+0

請確保您的文件的''''''加載了api js,並且沒有javascript錯誤。此外,您可以使用Firebug或Chrome開發工具檢查dom,以查看錶單字段是否存在。 –

+0

這裏同樣的問題,我的回覆是空的。兩篇帖子上的答案都沒有幫助。有沒有阻止迴應的網絡限制? reCAPTCHA網站沒有顯示我的任何數據,但也許我必須等待一天以上。 – mikato

回答

1

檢查是否已在部分通過以下的本,你形式展現給用戶

  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查看用戶表單),而不是您的服務器端代碼 - 使用該知識更容易。如果所有這些都在發生,甚至在客戶端,然而,這將是一個艱難的^^

+0

我發現了「蜜罐」防垃圾郵件機器人的方法,並決定採取這種方式,因爲它更容易。有沒有什麼理由爲什麼我應該使用recaptcha? – frosty

+0

@frosty:有了蜜罐,你只能欺騙非常普通的機器人,如果有人專門針對你,那麼它就毫無價值。你也必須小心使用表單填充(讓瀏覽器填充表單的客戶),這也會被愚弄,而且(好的)用戶可能會被你的站點稱爲垃圾郵件製造者^ ^。如果你沒有問題,這是一個有效的選擇,它將(僅)保護你免受更普遍的垃圾郵件攻擊。但我個人會肯定會推薦recaptcha,這並不複雜。 – Levit

+0

@frosty:如果你已經檢查了這個答案的要點,你只需要在驗證表格時檢查一下recaptcha。請參閱以下答案以獲取隨時可用的功能,然後完成:http://stackoverflow.com/questions/27274157/new-google-recaptcha-with-checkbox-server-side-php/30749288#30749288 – Levit

0

首先檢查是否驗證碼設置

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

也有看看這個simple PHP tutorial進行簡單的調試。

+0

鏈接不再可用。 –

+0

@Jimmy Adaro Wayback機器來拯救! http://web.archive.org/web/20151117185717/http://blog.itslum.com/2015/11/15/google-recaptcha-step-by-step-guide/ – bugfroggy

9

我遇到了這個問題,發現我的表單過早地關閉了DOM,因爲它在表格內。 ReCaptcha設置顯示:無g-recaptcha-response textarea,稍後填寫完成驗證碼後的數據。它似乎尋找div的形式的孩子,因此無法找到它最初創建的g-recaptcha-response。我把表格放在桌子上,在那之後它運行良好。

+0

這對我來說也是。 –

+0

是的! - 壞遺留代碼實現這個W /'

[表內容]
',只是sitched到'
[表內容]
'這個答案饒過我1小時不必要的調試!:) – zanlok

2

今天我在同事的一個網站上有同樣的問題(g-recaptcha-response沒有提交時的價值)。原來的標籤<form錯誤地嵌套在開標籤<table(不在td內,但直接在<table之後)之後。
這是造成這個問題。
移動標籤form後,它包裝了tableg-recaptcha-response的值在提交後正確發佈到服務器端。

+1

我在舊的代碼中有同樣的問題,這是從來沒有我的。我將

標籤的位置更改爲和
標籤的外部,現在它正在工作。謝謝你。 – mpoletto

0

是的,錯誤是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"
1

剛剛有同樣的問題。這不是導致問題的<table>標籤,而是導致該問題的<div>標籤。

我的表單位於用於格式化表單總體佈局的主要<div>之內。 <form>標記不必位於我用於表單佈局的主要<div>之內。我在表單佈局<div>標記之前移動了<form>標記,並且它開始正常工作。

0

Google似乎希望您的打開和關閉標記位於其他DOM元素之外,如<table><div>。我有完全相同的問題,現在已經解決。移動你的...

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

...代碼以外的任何或標籤,它會工作。似乎谷歌無法找到該表單並以其他方式注入其表單值。

0

完美的解決方案是不創建自己的G-reCAPTCHA的響應輸入,因爲谷歌將與響應填充和再還繼續創造另一個G-reCAPTCHA的響應 textarea的,但再不會往裏面與響應值