Доброго времени суток, арбитраны! Сегодня речь пойдет о надоедливом и ужасно портящем статку явлении — о треше. Каждый из вас по-любому сталкивался с неадекватными товарищами, оставляющими пустые заявки либо засылающие дубли пачками. В интырнетах обычно рекомендуют добавлять валидацию полей, маски ввода и прочие крутые ходы, завязанные на применение JS. Я же вам расскажу о своем способе решения проблемы без применения JS.
Принцип действия защиты
Процесс отправки лида в партнерку работает следующим образом:
- Юзер попадает на проклу или ленд
- Доходит до формы заказа
- Заполняет имя и номер
- Данные с формы методом POST уходят в обработчик
- Обработчик отправляет лид в ПП
- Происходит редирект на страницу Спасибо
Как же защититься от треша? Все очень просто! Добавим в обработчик проверку данных перед отправкой в партнерку:
- Первый уровень защиты: будем проверять на существование имени и номера. Если поля пустые — не дадим обработчику отправить лида;
- Второй уровень защиты: будем запоминать данные введенные пользователем, и если юзер захочет накидать дублей — не дадим ему это сделать.
Что и куда дописать
Покажу на примере упрощенного кода файла обработчика.
<?php
function sendLead($data) {
// здесь базовый код функции засыла лида в ПП
// его я описывать не буду
}
// вызов функции отправки лида
sendLead($_POST);
?>
Любой обработчик состоит из функции отправки лида и последующего ее вызова. При отправке данных с формы в обработчик формируется глобальный массив $_POST, в котором содержатся переменные name и phone. В предыдущих статьях уже разбирал это.
Чтобы не дать скрипту отправить пустого лида (без номера, к примеру), мы допишем простую обработку массива $_POST. Выглядеть это будет вот так:
<?php
function sendLead($data) {
// здесь базовый код функции засыла лида в ПП
// его я описывать не буду
}
// проверяем что лежит в куке name. Изначально там пусто
$nameC = @$_COOKIE["phone"];
// проверяем есть ли в POST номер телефона. Там должен быть номер из формы
$nameP = @$_POST["phone"];
if ( isset( $nameP ) ) // если номер есть в массиве POST
{
// сравниваем его с данными сохраненными в куке и
// если номер отличается - идем дальше
if( $nameP != $nameC )
{
// присваиваем куке phone значение номера телефона юзера
setcookie("phone", $nameP, time() + 3600);
// вызываем функцию отправки лида в ПП
sendLead($_POST);
} else {
// сравниваем его с данными сохраненными в куке и если номер совпадает -
// редиректим обратно на форму ввода имени и номера
// попутно добавляем к ссылке редиректа GET параметр errorDuplicate,
// чтобы на сайте его отловить и выдать предупреждение об ошибке дублирования номера
header( 'Location: index.php?errorDuplicate=errorphone#form_place' );
}
} else {
// если в массиве POST пустой номер телефона - редиректим
// обратно форму ввода имени и номера и опять добавляем метку.
// На этот раз метка будет errorPhone - для ошибки ввода номера
header( 'Location: index.php?errorPhone=errorphone#form_place' );
}
?>
Исчерпывающие комментарии на примере кода не требуют дополнительных разъяснений. А вот то, что нужно воткнуть на проклу, чтобы показывалось сообщение об ошибке — я сейчас расскажу.
Наводим красоту на форме
Находим у себя на прокле (или ленде) форму и добавим в нее парочку span’ов с текстом об ошибках. Должно получиться примерно так:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Нереально конвертящая прокла</title>
<!--
добавляем в head стиль для сообщения об ошибке
-->
<style>
.errorphone {
display: block!important;
color: red;
padding: 10px;
margin-bottom: 15px;
border: 1px solid red;
border-radius: 5px;
text-align: center;
font-size: 16px;
}
</style>
</head>
<body>
<!--
здесть контент проклы
-->
<form class="order-form" action="send.php" method="POST">
<p class="form_title">Форма заказа</p>
<!-- Добавляем span с текстом ошибки при дублировании заказа с тем же номером -->
<span class="<?=@$_GET['errorDuplicate']; ?>" style="display:none;">Дублирование данных</span>
<!-- Добавляем span с текстом ошибки при пустом номере -->
<span class="<?=@$_GET['errorPhone']; ?>" style="display:none;">Введите номер</span>
<input type="text" name="name" placeholder="Ввведите имя" required>
<input type="tel" name="phone" placeholder="+7 900 000 00 00" required>
<button id="sendLead">Заказать</button>
</form>
<!--
здесть продолжается контент проклы
-->
</body>
</html>
Поясню как это работает. К примеру, юзер не ввел номер и смог отправить пустую форму. Наш апгрейдированный обработчик это почует и редиректнет юзера обратно на ввод формы, прилепив к урл-редиректа праметр errorPhone=errorphone. В html-код мы встроили вывод значения метки errorPhone, которое является именем класса стиля нашего span’а с текстом ошибки. По умолчанию span невидимый тк мы ему задали style=display:none; Но если в $_GET[‘errorPhone’] появляется значение, а оно появится тк мы добавили именно этот параметр в урл-редиректа, то магическим образом span оживет и предупредит юзера. Аналогично все работает и при дублировании юзером заявки с одинаковым номером телефона.
Вот так просто и легко можно не загаживать себе стату в партнерке дублями и пустыми лидами, от которых вам денег не прибавится, а показатели треша в ПП придут в норму и они вам еще спасибо скажут) Всем профита и космических РОИ…