Просмотр кода
Название: Для резидента (Реклама в очередь)
Описание: Делал пример алгоритма реализации очередь в рекламе делал для резидента (Если примет) в плане развитии для рекламы Bymas
Добавил: ЯнеЛохматый
Дата: 20 апр 2020, в 17:54 Комментарии (0)
Описание: Делал пример алгоритма реализации очередь в рекламе делал для резидента (Если примет) в плане развитии для рекламы Bymas
<?php
include_once __DIR__ . '/connect.php';
define('TIME', time());
// Раздел для авторизованного пользователя
if (isset($_GET['create'])) {
// Можно менять по своему усмотрение (Так как для реального надо брать с базы $user текушего пользователя)
$user = ['ID' => 1];
$stm = connect()->prepare('SELECT * FROM `ads` WHERE `id_user` = ? LIMIT 2');
$stm->execute([$user['ID']]);
$ads = $stm->fetchAll();
$wait = false;
if ($ads) {
foreach ($ads as $add) {
if ($add['time_start'] > TIME) {
$stm = connect()->prepare('SELECT COUNT(*) FROM `ads` WHERE `id` < ? AND `time_end` > ?');
$stm->execute([$add['id'], TIME]);
$nextCount = $stm->fetchColumn();
$wait = true;
echo '------------------------------------------------';
echo 'Название:', $add['title'], '(Идет очередь)';
echo 'До активации осталось:', $nextCount, 'очередь';
echo 'Время начало показа:', $add['time_start']; // Время можно конвентировать в читаемый вид
echo '------------------------------------------------';
// Тут можно удалить (Так как реклама не стартовала то даем 50% возврат или как удобно)
} elseif ($add['time_end'] > TIME) {
echo '------------------------------------------------';
echo 'Название:', $add['title'], '(Активно)';
echo 'Время окончание показа:', $add['time_end']; // Время можно конвентировать в читаемый вид
echo '------------------------------------------------';
// Тут можно пересоздать рекламу если нет очередь
} else {
echo 'Название:', $add['title'], '(Неактивно)';
// Тут можно удалить (Не даем баллы и монету за удаление) или пересоздать рекламу
}
}
}
if ($wait == false) {
if (isset($_POST['title']) && is_string($_POST['title'])) {
// Делать строгую проверку на название реклам
// И также ограничить длину и много другое
$stm = connect()->prepare('SELECT COUNT(*) FROM `ads` WHERE `time_start` <= :time AND `time_end` > :time LIMIT 10');
$stm->execute(['time' => TIME]);
$active = $stm->fetchColumn();
$time_start = TIME;
if ($active == 10) {
$last = connect()->query('SELECT * FROM `ads` ORDER BY `time_end` DESC LIMIT 1');
$time_start = $last['time_end'];
}
$time_end = $time_start + (60 * 60 * 24); // 1 день (Снимает строго баллы);
$day = 0;
if (isset($_POST['day']) && $_POST['day'] > 0) {
$day = min(6, $_POST['day']);
// Если указано дополнительный день то снимаем именно монету то есть
// 1 день (100 балл) + допольнительный 2 дня (10 монет) а по умолчание допольнительный 0 день
// Реализация снятие баллов и монет можно тут
$time_end + (60 * 60 * 24) * $day; // Учетом 1 неделя это 7 дней (1 для бала а остальное монеты)
}
// С учетом $day снимаем сколько надо монет и 1 дневный снимаем балл для пользователя
$stm = connect()->prepare('INSERT INTO `ads` (`title`, `id_user`, `time_start`, `time_end`)] VALUES (?, ?, ?, ?)');
$stm->execute([$_POST['title'], $user['id'], $time_start, $time_end]);
}
// Форма создания реклам
}
exit;
}
$stm = connect()->prepare('SELECT * FROM `ads` WHERE `time_start` <= :time AND `time_end` > :time LIMIT 10');
$stm->execute(['time' => TIME]);
if ($ads = $stm->fetchAll()) {
echo 'Список активных реклам:';
foreach ($ads as $add) {
echo '<div>', $add['title'], '</div>';
}
} else {
echo 'Нет активных реклам';
}
Добавил: ЯнеЛохматый
Дата: 20 апр 2020, в 17:54 Комментарии (0)