Я пытаюсь реализовать Googles новый «NoCaptcha» на моем сайте. Пока у меня виджет выглядит нормально, но он не проверяется на моей странице PHP.
Мой код настроен как таковой:
В <head>
<script src='https://www.google.com/recaptcha/api.js'></script>
Сторона клиента:
<form id="contactform" action="bookingverify.php" method="POST"> <input type="text" name="name" size="41"> <!--OTHER FORM INPUTS--> <div class="g-recaptcha" data-sitekey="mypublickey"></div> </form>
Серверная сторона (bookingverify.php)
$captcha; if(isset($_POST['g-recaptcha-response'])){ $captcha=$_POST['g-recaptcha-response']; } if(!$captcha){ echo '<h2>Please check the the captcha form.</h2>'; exit; } $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=myprivatekey&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']); if($response.success==false){ echo '<h2>You are spammer</h2>'; } else{ //SEND MAIL }
,$captcha; if(isset($_POST['g-recaptcha-response'])){ $captcha=$_POST['g-recaptcha-response']; } if(!$captcha){ echo '<h2>Please check the the captcha form.</h2>'; exit; } $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=myprivatekey&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']); if($response.success==false){ echo '<h2>You are spammer</h2>'; } else{ //SEND MAIL }
,$captcha; if(isset($_POST['g-recaptcha-response'])){ $captcha=$_POST['g-recaptcha-response']; } if(!$captcha){ echo '<h2>Please check the the captcha form.</h2>'; exit; } $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=myprivatekey&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']); if($response.success==false){ echo '<h2>You are spammer</h2>'; } else{ //SEND MAIL }
,$captcha; if(isset($_POST['g-recaptcha-response'])){ $captcha=$_POST['g-recaptcha-response']; } if(!$captcha){ echo '<h2>Please check the the captcha form.</h2>'; exit; } $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=myprivatekey&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']); if($response.success==false){ echo '<h2>You are spammer</h2>'; } else{ //SEND MAIL }
,$captcha; if(isset($_POST['g-recaptcha-response'])){ $captcha=$_POST['g-recaptcha-response']; } if(!$captcha){ echo '<h2>Please check the the captcha form.</h2>'; exit; } $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=myprivatekey&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']); if($response.success==false){ echo '<h2>You are spammer</h2>'; } else{ //SEND MAIL }
Я пробовал повторять $_POST['g-recaptcha-response']
но он кажется пустым. Это похоже на то, что переменная не отправляется на php.
Кто-нибудь знает, что я делаю неправильно здесь?
Ваш код работал нормально на моем тестовом сервере с помощью моего личного / открытого ключа. Это кажется тривиальным, но единственное, что я должен был добавить – у вас есть кнопка отправки в ваших других входных формах? Это то, что фактически помещает данные в ваш PHP-скрипт.
<input type="submit"> </form>
В противном случае добавьте var_dump($_POST['g-recaptcha-response']);
на ваш bookingverify.php и посмотреть, что он выводит.
ОК, я не знаю, почему, но я удалил exit;
во втором заявлении IF, и это сработало. Weird.
У меня была аналогичная проблема. Очевидно, если вы не установите флажок, то $ _POST ['g-recaptcha-response'] будет пустым. поэтому просто убедитесь, что вы нажмете его при тестировании