Как написать на php ежечасную акцию?

Antonio21

Новичок
Есть интернет-магазин, на котором настроена авторизация, то есть каждому зарегистрированному пользователю присваивается свой уникальный айди, а так же выдаются балы за покупку. И есть задача каждый час разыгрывать призы, сейчас это балы которые можно обменять на фирменные футболки.

То есть, задача такая: начинаем раунд который длится один час ( собираем id всех кто кликнул на кнопку "участвовать" за этот час и списываем с каждого участника по 1 балу, выводим реал тайм кол-во участников и сколько времени до завершения раунда) после завершения часа, рандомайзером выбираем случайный id и начисляем ему кол-во балов которое равно кол-ву участников этого раунда, выводим сообщение о победе. После, все по новой.

Прошу помочь или подсказать как это реализовать?!
 

WMix

герр M:)ller
Партнер клуба
Запуск задачи (скрипта) по времени, это cron
 

Antonio21

Новичок
Думаю все-таки вывести в отдельную таблицу, например: «konkurs»

И сделать там 24 строки и колонки

[id], [№1-24_conkursa( их будет по кол-ву часов в дне)], [open/close], [date_close], [quantity of participants]

1,7,12 1 1 11:59:55 3

2,9,47 2 0 12:59:55 0



Нажимаем на кнопку «участвовать», то есть: пишем в таблицу «konkurs» ( в строку которая открыта [open/close] имеет «1») id user(а) и +1 в [quantity of participants]



В 11:59:56 кроном обновляю —> отправляю в рандомайзер список айди—> присваиваю [open/close] «0» и присваиваю [open/close] »1» следующей строке в таблице «konkurs», вывожу id победителя и [quantity of participants], перечисляю приз.



Прошу посоветовать верно ли я думаю, я вижу себе это как-то так, но не уверен что это верно.
 

WMix

герр M:)ller
Партнер клуба
Понять этот цифреннобуквенный набор досканально, сложновато, но направление вроде правильное
 

Antonio21

Новичок
Извиняюсь, я только учусь.

Создал две таблицы:
konkurs
`id_konkurs`,`id_users`,`open`,`last`,`quantity user`

И

users
`id`,`login`,`win`,`balance`

Думаю отказаться от привязки ко времени и не писать его в бд, а вызывать кроном каждые (55 минут, для удобства теста каждые 55 секунд)
Что-то типо этого (я только учусь и прошу подсказать где я бред написал и помочь исправить, спасибо за понимание!):

1. Закрываем предыдущий конкурс (если open=1 открыт, open=0 конкурс закрыт):
И ставим "1" конкурсу который был последним в бд, в поле `last` чтобы было легче.

<?php
$update = "UPDATE `konkurs` SET `open` = '0' WHERE `open` = '1';) //закрываем предыдущий конкурс (если open=1 открыт, open=0 конкурс закрыт)

$sql = "INSERT INTO `konkurs` (`last`) VALUES (1)"; //ставим "1" конкурсу который был последним в бд, в поле `last`.

$sql = "SELECT `id_users` FROM `id_konkurs` WHERE `last` ='1'; //выбираем все id последнего конкурса чтобы отпр. в рандомайзер

$winner = "INSERT INTO `konkurs` (`winner`) VALUES (id_user)"; //вписываем в бд id_user который победил

$sql = "INSERT INTO `users` (`win`) WHERE (id_user = $id_user) VALUES (1)"; //присваеваем победу.

$sql = "INSERT INTO `users` (`balance`) WHERE (id_user = $id_user) VALUES (+1)"; прибавляем победителю +1
?>

2. Пишем в бд новый id конкурса прибавляя к нему +1 и пишем в бд что у этого "id_konkurs" open=1:

<?php
$sql = "INSERT INTO `konkurs` (`id_konkurs`, `open`) VALUES (NULL, 1)";
?>

3. запускаем таймер обратного отсчета. только визуалка, функционала в нем нет.


4. Пишем функционал кнопки "Участвовать"

if(isset($_POST['submit'])) { //если была нажата кнопка

if($errors['balance'] == '0' || < "1") // и баланс больше 0, то записываем id участника в таблицу konkurs.

$errors['id_user'] = checkLogin($fields['id_user']) === true ? '' : checkLogin($fields['id_user']); //и этот id еще не участвует

$sql = "INSERT INTO `konkurs` (`id_konkurs`) WHERE `open` = '1' VALUES ($id_user) // то записываем id участника в таблицу konkurs.

$sql = "INSERT INTO `konkurs` (`[quantity user]`) VALUES (+1) //пишем +1 к кол-ву участников

$sql = "UPDATE `users` SET `balance` - '1'; //списываем с юзера -1 бал.
 

antson

Новичок
Партнер клуба
@Antonio21, победителю + кол-во участников
Если время участия не писать в базу, то что будет если крон не сработает ?
номер конкурса можно н-р сделать строкой для понятности. YYYY-MM-DD-HH
все равно тебе быстродействие при выявлении победителя не критично .

в таблицу конкурсов инсертить запись после подведения итога с увеличением баланса победителю
 
Сверху