Статистика переходов по рекламе: Пример реализации

Andre Kowalsy
118 раз
7 мин чтения
Опубликовано: 10-09-2025
Обновлено: Не обновлялось
Категории: Разработка

В этой статье мы рассмотрим, как можно эффективно организовать учет переходов с помощью PHP и SQL, основываясь на нашем коде. Мы будем использовать таблицу statistics_ads для записи информации о переходах по рекламным объявлениям и добавим улучшения, позволяющие отслеживать больше данных о пользователях.

1. Основная функция для рекомендации

Основной метод suggestedAction отвечает за обработку кликов пользователей на рекламные блоки. Давайте рассмотрим, как она работает:

public function suggestedAction() {
    // Получаем алиас из маршрута
    $alias = $this->route['alias'] ?? '';
    $url = null; // url empty default
    $isProgramClick = 1; // is default program click
    $isRandomClick = 0; // is default random click
    $tableName = 'suggested'; // default table name

    // Запрос для получения URL программы по алиасу
    if (!empty($alias)) {
	// Попробуем получить URL из основной таблицы, если задан alias
        $url = R::getRow('SELECT suggested.id,suggested.program_url FROM suggested WHERE suggested.program_alias = ?', [$alias]);
    }
    // Проверка на пустой URL и попытка получить URL из другого источника
    if (empty($url) && !empty($alias)) {
	// Если не нашли в основной таблице и alias задан, проверяем таблицу popup
        $url = R::getRow('SELECT suggested_popup.id,suggested_popup.program_url FROM suggested_popup WHERE suggested_popup.program_alias = ?', [$alias]);
        if (!empty($url)) $tableName = 'popup';
    }

    // Если все еще нет URL, получаем случайный
    if (empty($url)) {
	// Если ни в одной из таблиц не нашли, выбираем случайный URL из основной таблицы
        $url = R::getRow('SELECT suggested.id,suggested.program_url FROM suggested ORDER BY RAND() LIMIT 1');
        $isProgramClick = 0;
        $isRandomClick = 1;
    }

    // Получаем информацию о переходе
    $programId = $url['id']; // ID программы
    $ipAddress = get_ip(); // Получаем IP-адрес пользователя
    $userAgent = $_SERVER['HTTP_USER_AGENT']; // Получение user agent
    $referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; // Получение реферала

    // Записываем клик по программе
    $this->recordTransition($programId, $ipAddress, $userAgent, $referrer, $isProgramClick, $isRandomClick, $tableName);
    redirect($url['program_url']); // Редирект на URL программы
}
2. Функция записи перехода

Функция recordTransition отвечает за запись переходов и обработку существующих записей:

public function recordTransition($programId, $ip, $userAgent, $referrer, $isProgramClick, $isRandomClick, $tableName) {
    // Проверка существования записи по IP и программному ID
    $existingRecord = R::getRow("SELECT * FROM statistics_ads WHERE guest_ip = ? AND program_id = ? LIMIT 1", [$ip, $programId]);

    $cookieName = 'program_click_' . $programId; // Уникальное имя куки для программы

    if ($existingRecord) {
        // Обновляем данные в зависимости от клика
        if (!isset($_COOKIE[$cookieName])) {
            $this->setProgramClickCookie($programId); // Установка куки для первого клика
        } else {
            if (!empty($isProgramClick) && empty($isRandomClick)) {
                // Увеличиваем program_click, если isProgramClick - 1 (true)
                R::exec("UPDATE statistics_ads SET random_click = random_click + 1 WHERE id = ?", [$existingRecord['id']]);
            } else {
                // Увеличиваем random_click, если isRandomClick - 1 (true)
                R::exec("UPDATE statistics_ads SET program_click = program_click + 1 WHERE id = ?", [$existingRecord['id']]);
            }
        }
    } else {
        // Записываем новый переход
        R::exec("INSERT INTO statistics_ads (program_id, program_click, random_click, referrer, guest_ip, user_agent, table_name) VALUES (?, ?, ?, ?, ?, ?, ?)", [$programId, $isProgramClick, $isRandomClick, $referrer, $ip, $userAgent, $tableName]);
        $this->setProgramClickCookie($programId); // Установка куки для нового клика
    }
}
3. Установка куки

Установка куки для уникального идентификатора программы:

private function setProgramClickCookie($programId) {
    $cookieName = 'program_click_' . $programId; // Уникальное имя куки для каждой программы
    setcookie($cookieName, 'clicked', time() + 3600, '/'); // Хранение куки 1 час
}

В файле function.php (или другом вспомогательном файле) можно создавать пользовательские функции в PHP одна из них будет get_ip();

/*
  Function for determining the client's IP address:
*/
function get_ip()
{
    $value = '';
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
        $value = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $value = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } elseif (!empty($_SERVER['REMOTE_ADDR'])) {
        $value = $_SERVER['REMOTE_ADDR'];
    } return $value;
}

Заключение

Ваша система учета переходов благодаря вышеописанному коду становится более эффективной и гибкой. Мы добавили возможность отслеживания кликов, учитывая IP-адреса и пользовательские агенты, что даст вам дополнительные возможности для анализа рекламных кампаний. Если возникнут вопросы или нужна помощь с доработкой, обращайтесь!