EDIT: Я использую reCaptcha 2.0, не следует ли использовать recaptchalib.php?
Live DEMO http://josiahbertoli.com/
Я получаю следующую ошибку при отправке формы (игнорируйте пустые значения для полей ввода) (с кодом отладки):
ошибка
_POST: ========= Array ( [first_name] => [last_name] => [email] => [subject] => [comments] => [g-recaptcha-response] => big-long-value ) =========
Правило reCAPTCHA введено неправильно. Вернитесь назад и попробуйте еще раз. (ReCAPTCHA сказал:) `
Как настроена моя веб-страница:
HTML
<form id="query-form" action="wp-content/themes/portfolio/submit-form.php" method="post" name="myForm"> <input id="first_name" name="first_name" size="35" type="text" placeholder="eg John" /> <input id="last_name" name="last_name" size="35" type="text" placeholder="eg Smith" /> <input id="email" name="email" size="35" type="text" placeholder="eg example@domain.com" /> <input id="subject" name="subject" size="35" type="text" placeholder="eg Feedback" /> <textarea id="comments" name="comments"></textarea> <div class="g-recaptcha" data-sitekey="6Le8WxcTAAAAAGqymotU9wtOBFEmWgjM3j2kqTcB"></div> <input type="submit" value="Submit" /> </form>
Отправить метод POST для вызова действия submit-form.php, который выглядит следующим образом
PHP
<?php require_once('recaptchalib.php'); $privatekey = "the-key-that-i-put-in"; echo "<pre> _POST: =========\n"; print_r($_POST); echo "\n=========\n</pre>"; $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); $resp = null; if (!$resp->is_valid) { // What happens when the CAPTCHA was entered incorrectly die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." . "(reCAPTCHA said: " . $resp->error . ")"); } else { // Your code here to handle a successful verification include '../../../../process.php'; } ?>
Спасибо за ваши ответы, я ценю это.
Для отображения виджета reCAPTCHA вам не нужен какой-либо файл библиотеки, вам просто нужно включить необходимый ресурс JavaScript, например:
<html> <head> <title>reCAPTCHA demo: Simple page</title> <script src="https://www.google.com/recaptcha/api.js" async defer></script> </head> <body> <form action="?" method="POST"> <div class="g-recaptcha" data-sitekey="your_site_key"></div> <br/> <input type="submit" value="Submit"> </form> </body> </html>
Вот ссылка:
Теперь приходит ответ вашего пользователя. Поскольку вы используете Google reCAPTCHA V2, вы должны получить ответ пользователя, используя параметр POST g-recaptcha-response .
Вот ссылка:
Таким образом, ваш код должен выглядеть следующим образом:
<?php if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])){ $privatekey = "YOUR_PRIVATE_KEY"; //get verified response data $param = "https://www.google.com/recaptcha/api/siteverify?secret=".$privatekey."&response=".$_POST['g-recaptcha-response']; $verifyResponse = file_get_contents($param); $responseData = json_decode($verifyResponse); if($responseData->success){ // success echo "success"; }else{ // failure echo "failure"; } }else{ // user didn't enter reCAPTCHA echo "The reCAPTCHA wasn't entered correctly. Go back and try it again."; } ?>