За последние 24 часа нас посетили 20234 программиста и 1671 робот. Сейчас ищут 1378 программистов ...

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

Тема в разделе "Сделайте за меня", создана пользователем antonio21, 22 авг 2016.

  1. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Примеров гугалиард можно нагуглить. Взять толковую книжку по пхп и вот тебе примеры. В мануале толковые примеры.

    Короче. Тема лежит в разделе для слепоглухонемых, поэтому я тебе закидываю запросы, ибо они "за тебя" и придуманы, но адаптацию их к своей инфосистеме - либо сам, либо за деньги. По опубликованному выше - понятно, что у тебя там очень весело.

    Итак. У нас есть таблицы пользователей и соревнований:
    PHP:
    1. --
    2. -- Структура таблицы `competitions`
    3. --
    4.  
    5. CREATE TABLE `competitions` (
    6.   `date_Ymdh` int(11) NOT NULL,
    7.   `user_id` int(10) UNSIGNED NOT NULL,
    8.   `is_winner` smallint(5) UNSIGNED NOT NULL DEFAULT '0'
    9. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    10.  
    11. -- --------------------------------------------------------
    12.  
    13. --
    14. -- Структура таблицы `users`
    15. --
    16.  
    17. CREATE TABLE `users` (
    18.   `id` int(10) UNSIGNED NOT NULL,
    19.   `name` varchar(32) CHARACTER SET utf8 NOT NULL,
    20.   `balance` int(11) NOT NULL
    21. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    22.  
    23. --
    24. -- Индексы сохранённых таблиц
    25. --
    26.  
    27. --
    28. -- Индексы таблицы `competitions`
    29. --
    30. ALTER TABLE `competitions`
    31.   ADD UNIQUE KEY `date_Ymdh_user_id_unq` (`date_Ymdh`,`user_id`) USING BTREE,
    32.   ADD KEY `user_id_idx` (`user_id`) USING BTREE,
    33.   ADD KEY `is_winner_idx` (`is_winner`) USING BTREE;
    34.  
    35. --
    36. -- Индексы таблицы `users`
    37. --
    38. ALTER TABLE `users`
    39.   ADD PRIMARY KEY (`id`),
    40.   ADD UNIQUE KEY `name_unq` (`name`) USING BTREE,
    41.   ADD KEY `balance_idx` (`balance`);
    Вот этим запросом мы определяем является ли юзер платежеспособным (первая колонка) и участником текущего соревнования (вторая колонка):
    PHP:
    1. SELECT
    2.     CASE WHEN
    3.         u.`balance` > 0
    4.     THEN
    5.         1
    6.     ELSE
    7.         0
    8.     END `solvent`,
    9.    
    10.     CASE WHEN
    11.         (
    12.             SELECT
    13.                 `user_id`
    14.             FROM
    15.                 `competitions`
    16.             WHERE
    17.                 `date_YmdH` = DATE_FORMAT(NOW(), '%Y%m%d%H')
    18.                     AND
    19.                 `user_id` = $USER_ID
    20.         )
    21.         IS NOT NULL
    22.     THEN
    23.         1
    24.     ELSE
    25.         0
    26.     END `participant`
    27. FROM `users` u
    28. WHERE u.`id` = $USER_ID
    Вместо $USER_ID подставлять свое великолепное значение идентификатора пользователя. Нужно обязательно учесть такой момент, что юзер может оказаться бомжом, поставив последний балл на участие в соревновании. Тогда пара будет 0-1 и ему надо показать "ты уже участник". Для пары "0-0" нужно сказать, что человек - бомжара. На пару "1-0" - будешь списывать баланс и записывать в участники. То есть, первым делом надо проверять именно признак участия, а платежеспособность - вторым.

    Больше сложных запросов, которые ты не понимаешь - не будет.

    Списание баланса:
    PHP:
    1. UPDATE
    2.     `users`
    3. SET
    4.     `balance` = `balance` - 1
    5. WHERE
    6.     `id` = $USER_ID
    Тут всё просто. Списали рублик с баланса такого-то балбеса.

    Запись хрена моржового на соревнования:
    PHP:
    1. INSERT INTO `competitions` (`date_YmdH`, `user_id`)
    2. VALUES (DATE_FORMAT(NOW(), '%Y%m%d%H'), $USER_ID)
    Тут всё тоже просто. Закидываем в соревновательную таблицу пару год-месяц-день-час+пользователь.

    Выборка кандидатов за прошлый час:
    Код (Text):
    1. SELECT `user_id` FROM `competitions` WHERE `date_YmdH` = DATE_FORMAT(NOW() - INTERVAL 1 HOUR, '%Y%m%d%H')
    Тут ты получаешь список айдишников участников соревнования за прошлый час (и по нему же ты можешь посчитать и их кол-во). Рандомишь, определяешь победителя и...

    Записываешь победителя:
    PHP:
    1. UPDATE `competitions`
    2. SET `is_winner` = 1
    3. WHERE
    4.     `date_YmdH` = DATE_FORMAT(NOW() - INTERVAL 1 HOUR, '%Y%m%d%H')
    5.         AND
    6.     `user_id` = $WINNER_ID
    (просто ставим единичку напротив нужной строки)

    И поздравляешь его капитал:
    PHP:
    1. UPDATE `users`
    2. SET `balance` = `balance` + $TOTAL_COMPETITORS
    3. WHERE `id` = $WINNER_ID
    (просто прибавляем кол-во участников соревнования прошлого часа к балансу пользователя)
     
    denis01 нравится это.
  2. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    Оооо, огромнейшее спасибо!!! Сел разбираться что к чему.
     
  3. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    antonio21 нравится это.
  4. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    Да, конечно!)
     
  5. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    Такс, написал вот так и все равно не работает )) Корректно страница отображается, но в базе ничего не появляется ((
    Как понять в чем дело? Соединение с базой есть, вывожу статус подключения к бд, такие таблицы с такими полями есть, значит что-то коряво написал, прошу посмотреть и подсказать в чем тут дело! Заранее благодарен!

    PHP:
    1. <?php
    2. if ($Module == 'minute' and $_POST['enter']) {
    3. $id = $_SESSION['USER_ID'];
    4. $res = mysql_query("SELECT `user_id` FROM `konkurs` WHERE `user_id` = '$id'");
    5. // если такой записи нет:
    6. if (mysql_num_rows($res) == 0) {
    7. // то все ок, выполняем код программы:
    8. mysql_query("INSERT INTO `konkurs` (user_id, win_id, time_start) VALUES ($id,'', NOW());");  //записываем в таблицу konkurs, id того кто нажал участвовать и время.
    9. // списываем 1 балл, но ОБЯЗАТЕЛЬНО нужно указать у кого:
    10. mysql_query("UPDATE users SET balance = balance - 1 WHERE ‘id’ = '".$id."'");
    11. }
    12. // если вдруг окажется, что в вашей базе несколько пользователей с одинаковым айди, то:
    13. elseif (mysql_num_rows($res) > 1) { echo "Тут несколько пользователей с таким ИД. ";}
    14. // если пользователя с таким айди нет, то:
    15. }
    16.   echo "<pre>";
    17.   print_r($_SESSION);
    18.   echo "</pre>";
    19. ?>
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    antonio21 нравится это.
  7. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    Все получилось, юзер и записывается на участие, не дает много раз записывать, списывает баланс и выдает ошибки если что-то не так.

    1) Теперь как реализовать таймер обратного отсчета?( .JS ?)
    2) Как собирать всех участников за это время?
    3) Как прерывать текущий конкурс и начинать новый?
    4) Определять победителя поздравляем баланс и что дальше делать? Стирать эти данные? Как их составлять-группировать?
    5) Писать в отдельный файл или в БД?

    Есть мысли по этому поводу? Примеры?
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    2)
    Код (Text):
    1. SELECT * FROM `competitions` c WHERE c.`date_YmdH` = DATE_FORMAT(NOW(), '%Y%m%d%H')
    2. JOIN `users` u ON u.`id` = c.`user_id`
    3) нахер его закрывать-открывать если это делает вселенная простым течением времени, неотвратимо переводящим часы на час вперёд каждые 3600 секунд?

    4) ничего не делать. Оставлять. Таблицу [участников] соревнований нетронутой. Потом можешь придумать всякие запросы типа "самый плотный час", "частый победитель", "заядлый участник", "топчик заработка" и тому подобное. Раздел "за меня" вряд ли предполагает, что мы за тебя будем продумывать возможности твоей системы. Тут как бы решают конкретную задачу, если автору по каким-то причинам лениво.

    5) Что писать? Ты и так работаешь с базой. Что тебе в файл записывать?
     
  9. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    То что вы написали отлично, но Вы не написали как тогда определять что прошлый конкурс закончился и снова записывать участника в Новый конкурс?
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    К огромному сожалению, раздел "за меня" не предполагает синтез серого вещества. Когда час изменился - все участники автоматически не могут участвовать в конкурсе за прошлый час, как и в конкурсах любого будущего и прошедшего времени. Зато могут участвовать в конкурсе текущего часа. Вся магия контролируется простыми запросами к СУБД. Не надо ничего сочинять.
     
  11. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    Вы же не написали мне готовый код в разделе который называется "за меня", в связи с этим делаю сам, спрашивая у Вас совета, если можете, то напишите готовый работающий код.
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Да, я не сразу обратил внимания, на то, в каком разделе находиться тема. Готовый код писать лениво было, но и совсем ничего тоже неправильно было написать. Вот и написал запросы, комментарии к ним, идеи.
     
  13. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0

    ВОТ ВОТ...
     
  14. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    Всю голову сломал, не работает и все, посмотри плиз:
    PHP:
    1. <?php
    2.  include_once 'setting.php';
    3.  echo $result;
    4. echo $id;
    5.  
    6. $CONNECT = mysqli_connect(HOST, USER, PASS, DB);
    7. $id = $_SESSION['USER_ID'];
    8. $a = mysqli_query($CONNECT,"SELECT balance FROM users WHERE `id` = '$id' ");
    9. $result = mysqli_query($CONNECT,"SELECT `id_konkurs` FROM `konkurs` WHERE `time_start` <= NOW() AND NOW() <= `time_finish`");
    10. // $b = mysqli_query($CONNECT,"SELECT `user_id` FROM `konkurs` WHERE `id_konkurs` = '$result'");
    11. //нажимаем на кнопку
    12.  
    13. if ($_POST['state']) {
    14.  mysqli_query($CONNECT,"UPDATE `users` SET `balance` = `balance` - 1 WHERE `id` = '$id'");
    15. }
    16. else echo "Пополните баланс";
    17.  
    18. //Если такого айди еще нет, то записываем на участие
    19. if (mysqli_query($b) == 0)  {
    20. mysqli_query($CONNECT,"INSERT INTO konkurs (user_id, time_start, id_konkurs) VALUES ('$id', NOW(), '$result');");
    21. echo "Вы участвуете";
    22. }
    23.  
    24. else echo "Вы уже участвуете";
    25.  
    26. ?>
     
  15. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    Удобнее написал, но не работает, не пойму в чем дело, подключение к базе есть, все поля тоже, может что увидите:
    <form method="POST">
    <input name="enter" type="submit" value="Участвовать"; />
    </form>

    PHP:
    1. <?php
    2.  include_once 'setting.php';
    3. $CONNECT = mysqli_connect(HOST, USER, PASS, DB);
    4. $id = $_SESSION['USER_ID'];
    5.  $a = mysqli_query($CONNECT,"SELECT balance FROM users WHERE `id` = '$id' ");
    6.  $b = mysqli_query($CONNECT,"SELECT `user_id` FROM `konkurs` WHERE `id_konkurs` = '$result'");
    7.  
    8. if ($_POST['enter']) {
    9. $result = mysqli_query($CONNECT,"SELECT `id_konkurs` FROM `konkurs` WHERE `time_start` <= NOW() AND NOW() <= `time_finish`");
    10. echo $result;}
    11.  
    12. else echo "Такого конкурса нет";
    13.  
    14. if  ($a > 0) {
    15. mysqli_query($CONNECT,"UPDATE `users` SET `balance` = `balance` - 1 WHERE `id` = '$id'");
    16. }
    17.  
    18. else echo "Пополните баланс";
    19.  
    20. //Если такого айди еще нет, то записываем на участие
    21. if (mysqli_query($b) == 0)  {
    22. mysqli_query($CONNECT,"INSERT INTO konkurs (win_id, time_start, id_konkurs, time_finish, user_id) VALUES ('0', NOW(), '$result', '0' , '$id');");
    23. echo "Вы участвуете";
    24. }
    25. else
    26. echo "Вы уже участвуете";
    27.  
    28. ?>
     
  16. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    Подскажите плиз что тут не так, хочу получать id_конкуса чтобы потом по нему смотреть есть ли такой айди юзера с таким-то айди конкурса, фото таблицы прикрепил:
    PHP:
    1. $result = mysqli_query($CONNECT,"SELECT `id_konkurs` FROM `konkurs` WHERE `time_start` <= NOW() AND NOW() <= `time_finish`");
     

    Вложения:

  17. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Зачем конкурсу а) собственная таблица, б) собственный уникальный идентификатор?
     
  18. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    Вот вечно ты вопросы задаешь а не помогаешь решение найти ((
     
  19. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    Так и не пойму почему этот код не работает, а именно одна строчка которую ниже распишу:

    PHP:
    1. <?php
    2.  include_once 'setting.php';
    3. $CONNECT = mysqli_connect(HOST, USER, PASS, DB);
    4. $id = $_SESSION['USER_ID'];
    5. $n = date('Y-m-d H:i:s');
    6. $a = mysqli_query($CONNECT,"SELECT balance FROM users WHERE `id` = '$id' ");
    7. $b = mysqli_query($CONNECT,"SELECT `user_id` FROM `konkurs` WHERE `id_konkurs` = '$result'");
    8.  
    9. if ($_POST['enter']) {
    10. $result = mysqli_query($CONNECT,"SELECT `id_konkurs` FROM `konkurs` WHERE `time_start` < '$n' AND '$n' < `time_finish`");
    11. }
    12.  
    13. else echo "Такого конкурса нет";
    14.  
    15. if  ($a > 0) {
    16. mysqli_query($CONNECT,"UPDATE `users` SET `balance` = `balance` - 1 WHERE `id` = '$id'");
    17. }
    18.  
    19. else echo "Пополните баланс";
    20.  
    21. //Если такого айди еще нет, то записываем на участие
    22. if (mysqli_query($b) == 0)  {
    23. mysqli_query($CONNECT,"INSERT INTO konkurs (win_id, time_start, id_konkurs, time_finish, user_id) VALUES ('0', NOW(), '$result', '0' , '$id');");
    24. echo "Вы участвуете";
    25. }
    26. else
    27. echo "Вы уже участвуете";
    28.  
    29. ?>
    Если писать в mysql через phpmyadmin так, то он выводит id текущего конкурса:

    SELECT `id_konkurs` FROM `konkurs` WHERE `time_start` < NOW() AND NOW() < `time_finish`

    Но если я пишу в коде так:

    $result = mysqli_query($CONNECT,"SELECT `id_konkurs` FROM `konkurs` WHERE `time_start` < '$n' AND '$n' < `time_finish`");

    $n = date('Y-m-d H:i:s');

    В общем ни фига не могу получить $result и вывести его, а почему не пойму, а через SQL все ок((

    Подскажите в чем дело, почему так ?
     
  20. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Я тебе вечно задаю правильные вопросы с целью разведать смысл твоих черезжопных решений. Ты обязан был головой подумать перед тем как делать те или иные действия. Ок. У тебя собственная таблица у конкурса и собственный уникальный идентификатор, помимо даты проведения. НАфига? В моей архитектуре всё лишнее убрано, поэтому что оно лишнее и работать будет прекрасно и без этого лишнего. Но у тебя твоя архитектура. Подобными вопросами в стиле НАфига мы сейчас либо выясним что нужно позарез иметь такую замысловатую архитектуру с лишними элементами, блекджеком и шлюхами, либо ты поймешь что не прав и упростишь систему. Ну и вопросы в стиле НАфига очень помогут понять ход твоих мыслей, чтоб если я захочу выложить тебе готовый код - он был под твою замысловатую архитектуру, а не под мою красивую. Ну чтоб тебе портировать было проще.
     
  21. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    Прошу помочь, ни как не могу посчитать участников конкурса, нужно брать точку подсчета кол-ва строк от time_start, чтобы считал не с момента клика пользователя, так как они все в разное время кликают а с time_start(каждую минуту), то есть нужно выбрать строки в которых:

    `last_click` меньше или равен NOW() и не меньше чем time_start *- INTERVAL 1 MINUTE

    как это написать не понимаю, реально сложно, прошу подсказать! Заранее благодарен!
    --- Добавлено ---
    Пишу если так, то выдает все записи:

    SELECT COUNT(*) FROM `bidders` WHERE `last_click` >= `time_start` - INTERVAL 1 MINUTE AND NOW() >= `time_start` - INTERVAL 1 MINUTE
    --- Добавлено ---
    Вопрос решен)))

    SELECT COUNT(*) FROM `bidders` WHERE `time_start` >= NOW() - INTERVAL 1 MINUTE
     
  22. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    А вот и жесть началась, ни как не могу разобраться, прошу помочь, есть два затыка:

    PHP:
    1. <?php  
    2. include_once 'setting.php';
    3. $CONNECT = mysqli_connect(HOST, USER, PASS, DB);
    4. $sql = mysqli_query($CONNECT,"SELECT COUNT(*) FROM `bidders` WHERE `time_start` < NOW() - INTERVAL 1 MINUTE"); ------> ВЫБИРАЕТ ВСЕ СТРОКИ, А НУЖНО ТОЛЬКО ЗА ПРЕДЫДУЩУЮ МИНУТУ, КАК ЭТО РЕАЛИЗОВАТЬ НЕ ПРЕДСТАВЛЯЮ И ПОЧЕМУ НЕ РАБОТАЕТ НЕ ПОНЯТНО, ВСЮ ГОЛОВУ СЛОМАЛ !((
    5.  
    6. $b = mysqli_fetch_array( $sql );
    7. $total = $b[0];
    8.  
    9. $bid = mysqli_query($CONNECT,"SELECT `bidder_id` FROM `bidders` WHERE `time_start` >= NOW() - INTERVAL 1 MINUTE ORDER BY rand()
    10. LIMIT 1");
    11.  
    12. if ($bid > 0) {
    13. mysqli_query($CONNECT,"UPDATE `users` SET `balance` + '$total'  WHERE `id` = '$bid';"); ---И КОД НЕ РАБОТАЕТ ИЗ-ЗА ЭТОЙ СТРОЧКИ, ЧТО НЕ ТАК НЕ ПОЙМУ !(  
    14. echo 'Баланс успешно пополнен на &nbsp;'.$total."Балов";
    15. }
    16. else echo 'Нет участников';
    17.  
    18. ?>
     
  23. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Ты уже три недели висишь в разделе за меня. Может тебе уже пора задуматься о посещении раздела фриланса? Как мы видим, никто особо не взялся помочь тебе прям вот готовым кодом. Потому что кода много. Потому что у тебя система не продумана и будет головняк с интеграцией твоими прямыми руками готового кода. В доказательство тезиса проголовняк приведу тот факт, что тебе уже объемную подсказку дали - алгоритм, готовые запросы, идеи - но ты из этого что-то еще ничего не вывез, хотя там работы на несколько часов. Ты пошел другим путём, без особого обоснования самому себе того, зачем ты что-то так-то делаешь.

    Так вот, за материальную компенсацию затрат человекочасов на общение с твоей задачей - найдутся люди. Я, например, совсем не против разменять твою денюжку на несколько скриптов реализации моей идеи. А потом еще раз разменять твою денюжку на несколько часов интеграции в уже готовую ужасно спланированную систему.
     
  24. antonio21

    antonio21 Новичок

    С нами с:
    22 авг 2016
    Сообщения:
    61
    Симпатии:
    0
    Ganzal ты уже и признался что тебе впадлу и что ты не заметил в какой теме это написано и уже 20 раз рассказал какой ты умный.

    За три недели я многое сделал, учитывая что три недели назад я вообще про php ничего не знал, а сейчас я уже на финишной прямой.

    А если возвращаться к твоим подсказкам и готовым алгоритмам и к моим вопросам, то в целом я пришел к тому что ты писал и даже захватил кусок PDO и если бы я хотел найти фрилансера я бы написал на фриланс. Ближе к телу, вот ты пишешь:

    Выбираем победителя за предыдущий час:
    1. SELECT `user_id` FROM `competitions` WHERE `date_YmdH` = DATE_FORMAT(NOW() - INTERVAL 1 HOUR, '%Y%m%d%H')
    Вот я пишу:

    SELECT COUNT(*) FROM `bidders` WHERE `time_start` < NOW() - INTERVAL 1 MINUTE");

    И твой запрос и мой не выдает пользователей за предыдущий час, а в моем случае за предыдущую минуту и почему так, я не пойму.

    И если так тоже
    SELECT `bidder_id` FROM `bidders` WHERE `time_start` = NOW() - INTERVAL 1 MINUTE");

    Подскажите, как выбрать участников за предыдущую минуту?
     
  25. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Чувак, мой запрос выводит. То что он не работает у тебя - это прямое следствие прямоты твоих рук и правильности архитектуры твоего приложения. Мне что сейчас удалённо какую-то отладку надо сделать для тебя? У меня всё работает как нужно. ЧТО Я ДЕЛАЮ НЕ ТАК?