Как установить на сайт Google reCAPTCHA V2, jQuery Validate V1.16, Bootstrap 4. Пример. Форма оформления подписки на email рассылку.
Как установить на сайт Google reCAPTCHA V2, jQuery Validate, Bootstrap 4. Пример. Форма оформления подписки на email рассылку.
==========
>Google reCAPTCHA эффективная защита от спама - она проста и понятна для человека и практически непонятна для робота.
Регистрация на сайте Google reCAPTCHA
----------
Для начала необходимо зарегистрироваться на сайте reCAPTCHA, для этого переходим по ссылке на сайт https://www.google.com/recaptcha/admin
После регистрации выбираем вид reCAPTCHA (пример reCAPTCHA V2) для каждой из ни генерируется своя пара ключей Секретный ключ (приватный - для доступа к API) и Ключ (открытый - размещается на странице).
Указываем домен Вашего сайта, принимаем соглашение (Под принимаем, мы имеем ввиду - читаем и принимаем).
Далее в пункте 1.Ключи копируем оба ключа в блокнот (советую Notepad++ https://notepad-plus-plus.org).
Подключаем Bootstrap 4
----------
>Bootstrap - это CSS фреймворк, который изначально создавался для внутреннего использования компанией «Twitter» с рабочим названием «Twitter Blueprint», но в итоге был опубликован в открытый доступ и стал хорошим набором инструментов для front-end разработки под названием «Bootstrap».
>Свободный набор инструментов для создания сайтов и веб-приложений. Включает в себя HTML- и CSS-шаблоны оформления для типографики, веб-форм, кнопок, меток, блоков навигации и прочих компонентов веб-интерфейса, включая JavaScript-расширения.
Для подключения Bootstrap на Ваш сайт есть несколько вариантов, рассмотрим два из них:
1. - скачать дистрибутив на свой сайт (подойдет для разработчиков при написании и отладке сайта в оффлайн);
2. - подключить через CDN (англ. Content Delivery Network или Content Distribution Network - сеть доставки (и дистрибуции) содержимого) - проще говоря, установить ссылку на внешние скрипты и CSS файлы (это подойдет для рабочего сайта, так как вы сэкономите трафик и увеличите скорости загрузки страницы).
Переходим на официальный сайт https://v4-alpha.getbootstrap.com/getting-started/download/. Дальше или качаем дистрибутив (под заголовком Bootstrap CSS and JS) или копируем ссылки CDN (под заголовком).
CDN:
```
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>
```
В разделе Examples https://v4-alpha.getbootstrap.com/examples/ можно выбрать пример страницы и скопировать его код. Пример ниже уже с Bootstrap.
Подключаем jQuery V3.2.1
----------
Для этого переходим на официальный сайт jQuery http://jquery.com/download/.
Уже пресловутые "два путя" из нескольких: скачать или CDN. На странице вы найдете несколько вариантов, я выбрал CDNJS CDN:
```
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script>
```
Подключаем jQuery Validate V1.16
----------
Поучить jQuery Validate V1.16 можно несколькими способами, рассмотрим два из них:
1. Скачать с официального сайта https://jqueryvalidation.org или
2. Подключить через CDN (ссылки CDN также указаны на главной странице):
`https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/jquery.validate.min.js`
Преобразовав получим
```
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/jquery.validate.min.js"></script>
```
Настройка сайта. HTML, PHP.
----------
###Создаем HTML файл, например subscribe.html
Копируем шаблон страницы на Ваш сайт (Обращаем внимание на кодировку файла, в шаблоне указан `utf-8`. Если Вы сохраняете в кодировке Windows, то необходимо `utf-8` на `windows-1251`)
```
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Как установить на сайт Google reCAPTCHA V2, jQuery Validate V1.16, Bootstrap 4. Пример. Форма оформления подписки на email рассылку.</title>
<!-- Bootstrap core CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
<!-- reCAPTCHA -->
<!-- "?hl=ru" - язык reCAPTCHA -->
<script src='https://www.google.com/recaptcha/api.js?hl=ru'></script>
<style>
/* Show it is fixed to the top */
body {
min-height: 75rem;
padding-top: 4.5rem;
}
</style>
</head>
<body>
<nav class="navbar navbar-toggleable-md navbar-inverse fixed-top bg-inverse">
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand" href="#">Project Name</a>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="#">Home </a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link </a>
</li>
</ul>
</div>
</nav>
<div class="container">
<div class="jumbotron">
<h2>Как установить на сайт <br/>Google reCAPTCHA V2, <br/>jQuery Validate V1.16, <br/>Bootstrap 4.</h2>
<p class="lead text-muted">Пример. Форма оформления подписки на email рассылку.</p>
</div>
<div class="form-group">
<div class="form-heading">
<h3 class="form-title">Подписка на email рассылку</h3><br>
</div>
<div class="form-body">
<form id="subscribe_form" name="subscribe_form" method="post" action="subscribe.php" >
<div class="form-group row">
<label for="email" class="col-sm-3 col-md-3 col-lg-3 col-xl-2 col-form-label">
Введите email: </label>
<div class="col-sm-9 col-md-6 col-lg-5 col-xl-4">
<input
name="email"
id="email"
type="email"
class="form-control"
placeholder="name@mail.com"
required
autofocus />
</div>
</div>
<div class="form-group row">
<label for="confirm_email" class="col-sm-3 col-md-3 col-lg-3 col-xl-2 col-form-label">
Подтвердите email: </label>
<div class="col-sm-9 col-md-6 col-lg-5 col-xl-4">
<input
name="confirm_email"
id="confirm_email"
type="email"
class="form-control"
placeholder="name@mail.com"
required />
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-md-3 col-lg-3 col-xl-2">Соглашения: </label>
<div class="col-sm-9 col-md-6 col-lg-5 col-xl-4">
<div class="form-check">
<label class="form-check-label">
<input
type="checkbox"
class="form-check-input"
id="agree_privacy_policy"
name="agree_privacy_policy"
value="agree"
required />
Я согласен(-на) с <a href="privacy_policy.html"/>Политикой конфиденциальности</a>.
</label>
</div>
<div class="form-check">
<label class="form-check-label">
<input
type="checkbox"
class="form-check-input"
id="agree_user_agreement"
name="agree_user_agreement"
value="agree"
required />
Я согласен(-на) с <a href="user_agreement.html"/>условиями Пользовательского соглашения.</a>.
</label>
</div>
</div>
</div>
<div class="form-group row">
<div class="col-sm-3 col-md-3 col-lg-3 col-xl-2"></div>
<div class="g-recaptcha" id="grecaptcha" data-sitekey="reCAPTCHA_Key"></div>
</div>
<div class="form-group row">
<div class="col-sm-3 col-md-3 col-lg-3 col-xl-2"></div>
<input type="hidden" class="hiddenRecaptcha required" name="hiddenRecaptcha" id="hiddenRecaptcha">
</div>
<div class="form-group row">
<div class="col-sm-3 col-md-3 col-lg-3 col-xl-2"></div>
<div class="col-sm-6">
<button
name="btn_subscribe"
value="subscribe"
class="btn btn-primary"
type="submit"
id="btn_subscribe">
Подписаться
</button>
</div>
</div>
</form>
</div>
</div>
</div><!-- /.container -->
<!-- Placed at the end of the document so the pages load faster -->
<!-- jQuery V3.2.1 CDNJS CDN -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<!-- Bootstrap core JavaScript -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>
<!-- jQuery Validate -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/jquery.validate.min.js"></script>
<!-- Скрипт проверки формы с учетом reCAPTCHA -->
<script type="text/javascript">
$(document).ready(function () {
$( "#subscribe_form" ).validate( {
ignore: ".ignore",
onkeyup: false,
onclick: false,
nfocusout: false,
rules: {
email: {
required: true,
email: true
},
confirm_email: {
required: true,
email: true,
equalTo: "#email"
},
agree_privacy_policy: "required",
agree_user_agreement: "required",
hiddenRecaptcha: {
required: function () {
if (grecaptcha.getResponse() == '') {
return true;
} else {
return false;
}
}
}
},
messages: {
hiddenRecaptcha: "Вы не прошли reCAPTCHA!",
confirm_email: {
required: "Пожалуйста, введите адрес электронной почты",
equalTo: "Пожалуйста, введите тот же email, что и выше"
},
email: "Пожалуйста, введите действительный адрес электронной почты",
agree_privacy_policy: "Пожалуйста, примите нашу Политику конфиденциальности",
agree_user_agreement: "Пожалуйста, примите наше Пользовательское соглашение"
},
errorElement: "em",
errorPlacement: function ( error, element ) {
error.addClass( "form-control-feedback" );
element.parents( ".col-sm-5" ).addClass( "has-feedback" );
if ( element.prop( "type" ) === "checkbox" ) {
error.insertAfter( element.parent( "label" ) );
} else {
error.insertAfter( element );
}
if ( !element.next( "span" )[ 0 ] ) {
$( "<span class='fa fa-times form-control-feedback '></span>" ).insertAfter( element );
}
},
success: function ( label, element ) {
if ( !$( element ).next( "span" )[ 0 ] ) {
$( "<span class='fa fa-check form-control-feedback '></span>" ).insertAfter( $( element ) );
}
},
highlight: function ( element, errorClass, validClass ) {
$( element ).parents( ".col-sm-5" ).addClass( "form-control-danger" ).removeClass( "form-control-success" );
$( element ).next( "span" ).addClass( "fa-times" ).removeClass( "fa-check" );
},
unhighlight: function ( element, errorClass, validClass ) {
$( element ).parents( ".col-sm-5" ).addClass( "form-control-success" ).removeClass( "form-control-danger" );
$( element ).next( "span" ).addClass( "fa-check" ).removeClass( "fa-times" );
}
});
});
</script>
</body>
</html>
```
Заменяем в шаблоне `reCAPTCHA_Key` на Ключ который Вы получили на сайте reCAPTCHA.
###Создаем файл PHP subscribe.php
Файл subscribe.php нам необходим я обработки значений посылаемых после заполнения формы подписки, а также для проверки прошел ли подписчик reCAPTCHA.
```
<?php
/**
* Sample PHP code to use reCAPTCHA V2.
*
* @copyright Copyright (c) 2014, Google Inc.
* @link http://www.google.com/recaptcha
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
require_once "recaptchalib.php";
// Register API keys at https://www.google.com/recaptcha/admin
$siteKey = "reCAPTCHA_Key";
$secret = "reCAPTCHA_Private_Key";
// reCAPTCHA supported 40+ languages listed here: https://developers.google.com/recaptcha/docs/language
$lang = "ru";
// The response from reCAPTCHA
$resp = null;
// The error code from reCAPTCHA, if any
$error = null;
$reCaptcha = new ReCaptcha($secret);
// Was there a reCAPTCHA response?
if ($_POST["g-recaptcha-response"]) {
$resp = $reCaptcha->verifyResponse(
$_SERVER["REMOTE_ADDR"],
$_POST["g-recaptcha-response"]
);
}
?>
<html>
<head><title>reCAPTCHA Example</title></head>
<body>
<?php
if ($resp != null && $resp->success) {
echo "You got it!";
}
?>
<form action="?" method="post">
<div class="g-recaptcha" data-sitekey="<?php echo $siteKey;?>"></div>
<script type="text/javascript"
src="https://www.google.com/recaptcha/api.js?hl=<?php echo $lang;?>">
</script>
<br/>
<input type="submit" value="submit" />
</form>
</body>
</html>
```
Заменяем в шаблоне `reCAPTCHA_Key` на Ключ, `reCAPTCHA_Private_Key` на Секретный ключ которые Вы получили на сайте reCAPTCHA.
Заключение
----------
Для быстрого теста достаточно зарегистрироваться на сайте reCAPTCHA, создать два файла subscribe.html и subscribe.php заменив значения `reCAPTCHA_Key` на Ключ, `reCAPTCHA_Private_Key` на Секретный ключ .