Доброго времени суток, арбитраны! Сегодня речь пойдет о надоедливом и ужасно портящем статку явлении — о треше. Каждый из вас по-любому сталкивался с неадекватными товарищами, оставляющими пустые заявки либо засылающие дубли пачками. В интырнетах обычно рекомендуют добавлять валидацию полей, маски ввода и прочие крутые ходы, завязанные на применение JS. Я же вам расскажу о своем способе решения проблемы без применения JS.

Принцип действия защиты

Процесс отправки лида в партнерку работает следующим образом:

  1. Юзер попадает на проклу или ленд
  2. Доходит до формы заказа
  3. Заполняет имя и номер
  4. Данные с формы методом POST уходят в обработчик
  5. Обработчик отправляет лид в ПП
  6. Происходит редирект на страницу Спасибо

Как же защититься от треша? Все очень просто! Добавим в обработчик проверку данных перед отправкой в партнерку:

  • Первый уровень защиты: будем проверять на существование имени и номера. Если поля пустые — не дадим обработчику отправить лида;
  • Второй уровень защиты: будем запоминать данные введенные пользователем, и если юзер захочет накидать дублей — не дадим ему это сделать.

Что и куда дописать

Покажу на примере упрощенного кода файла обработчика.

<?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 оживет и предупредит юзера. Аналогично все работает и при дублировании юзером заявки с одинаковым номером телефона.

Вот так просто и легко можно не загаживать себе стату в партнерке дублями и пустыми лидами, от которых вам денег не прибавится, а показатели треша в ПП придут в норму и они вам еще спасибо скажут) Всем профита и космических РОИ…