Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/22: Рейтинг темы: голосов - 22, средняя оценка - 4.77
4 / 4 / 1
Регистрация: 28.03.2015
Сообщений: 155

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

26.10.2015, 21:46. Показов 4844. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте

задача создать/найти таймер

который не будет привязан к браузеру пользевателя время уменьшалось даже когда сайт не открыт ни у кого

идея: рандомный победитель на побобе как в ВК
-пользеватель нажимает на кнопку участвовать, добавляется в список, когда учасников 2+ начинается отсчет(от 120 сек), рандомно выбирается победитель, и опять заново сколько участвует

спс за помощ
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.10.2015, 21:46
Ответы с готовыми решениями:

Таймер обратного отсчета
У меня проблема, хочу создать таймер обратного отсчета, лично у меня все получилось, создаю таймер не по заданному таймингу, а через базу...

Таймер обратного отсчета
Стоит такая задача есть несколько ссылок у которых необходимо задать разное время их показа к примеру у одно ссылке один раз через каждые...

Таймер обратного отсчета на PHP
Здравствуйте, почитал различные темы на форуме, но ответа для своего случая так и не нашел. Отсюда вопросик: Есть дата наступления...

35
Программист
 Аватар для Arigato
307 / 182 / 176
Регистрация: 05.12.2013
Сообщений: 685
Записей в блоге: 5
27.10.2015, 00:11
Можно использовать cron для запуска скрипта по расписанию, а можно выполнять нужные действия при обращении пользователя к сайту. Все равно раньше того, как пользователь не отправит запрос, он не сможет узнать, что на сервере что-то отработало (выбрали победителя). Так что прекрасно можно выбирать победителя на запрос пользователя, а ему говорить, типа час назад выбрали. Для пользователя никакой разницы.
0
4 / 4 / 1
Регистрация: 28.03.2015
Сообщений: 155
27.10.2015, 00:27  [ТС]
Цитата Сообщение от Arigato Посмотреть сообщение
Можно использовать cron для запуска скрипта по расписанию, а можно выполнять нужные действия при обращении пользователя к сайту. Все равно раньше того, как пользователь не отправит запрос, он не сможет узнать, что на сервере что-то отработало (выбрали победителя). Так что прекрасно можно выбирать победителя на запрос пользователя, а ему говорить, типа час назад выбрали. Для пользователя никакой разницы.
даа крон
на запрос выбирать не очень подходит(сейчас так и выбираю) нужно чтобы все онлайн протекало
0
Программист
 Аватар для Arigato
307 / 182 / 176
Регистрация: 05.12.2013
Сообщений: 685
Записей в блоге: 5
27.10.2015, 00:35
Что такое онлайн? Без запросов никакого онлайн быть не может. То есть пока пользователь запрос не отправит, он и знать не будет, что там происходит. Так что вариант без крона вполне себе жизнеспособный.
0
4 / 4 / 1
Регистрация: 28.03.2015
Сообщений: 155
27.10.2015, 16:16  [ТС]
Цитата Сообщение от Arigato Посмотреть сообщение
Что такое онлайн? Без запросов никакого онлайн быть не может. То есть пока пользователь запрос не отправит, он и знать не будет, что там происходит. Так что вариант без крона вполне себе жизнеспособный.
юзер видит текущее кол-во учасников и время до конца

Добавлено через 15 часов 37 минут
Цитата Сообщение от Arigato Посмотреть сообщение
Что такое онлайн? Без запросов никакого онлайн быть не может. То есть пока пользователь запрос не отправит, он и знать не будет, что там происходит. Так что вариант без крона вполне себе жизнеспособный.
ну да запросы есть, запросом и выбираю рандомно
PHP
1
2
3
$query = "select * from konkur order by rand() limit 1 "; //выбор с БД рандомно
$result = mysql_query($query);
$row = mysql_fetch_array($result);
вот нужно этот запрос и отсрочить и при этом показывать время до окончания(каждую секунду -1)
0
Программист
 Аватар для Arigato
307 / 182 / 176
Регистрация: 05.12.2013
Сообщений: 685
Записей в блоге: 5
27.10.2015, 16:23
Если каждую секунду нужно обновлять инфу на странице, то смотрите в сторону JavaScript и AJAX.
0
4 / 4 / 1
Регистрация: 28.03.2015
Сообщений: 155
27.10.2015, 17:17  [ТС]
Цитата Сообщение от Arigato Посмотреть сообщение
Если каждую секунду нужно обновлять инфу на странице, то смотрите в сторону JavaScript и AJAX.
нужно чтобы время уменьшалось для всех кто на сайте одинаково, можно было даже закрыть браузер
учасники могут зарегестрировватся и закрыть страницу,а время будет уменьшаться(JS на сколько известно работает для каждого отдельно) и по истечению выберется победитель

нужно именно както после того как 2 участвуют, запустить отсчет(виден на сайте 120..119..118..117сек до конца) и по его окончанию выбрать победителя(да еще так чтобы как в лотерее/рулетке была прокрутка например)

возможно обьяснаю непонятно, поэтому - яркий пример - тык(у меня чтото похожее но без шанса и тд) - видео

мне рекомендовали разобратяс в скриптах рулеток (так ак тема сходная)пример но пока не понял каким образом там ведется отсчет и выбирается виннер

Добавлено через 21 минуту
Цитата Сообщение от Arigato Посмотреть сообщение
Если каждую секунду нужно обновлять инфу на странице, то смотрите в сторону JavaScript и AJAX.
вы когдато отвечали в Рулетка - Подайте идею пожайлусто
нечто похожее
0
Программист
 Аватар для Arigato
307 / 182 / 176
Регистрация: 05.12.2013
Сообщений: 685
Записей в блоге: 5
27.10.2015, 18:22
Я вам уже предложил два варианта:
1. Крон.
2. Простой расчет при каждом запросе пользователя.
JS нужен для того, чтобы инфу регулярно в браузере обновлять, а не для самого расчета. Второй вариант, как по мне, лучше. Но решать вам, мне больше нечего предложить.
0
4 / 4 / 1
Регистрация: 28.03.2015
Сообщений: 155
27.10.2015, 18:29  [ТС]
Цитата Сообщение от Arigato Посмотреть сообщение
2. Простой расчет при каждом запросе пользователя.
JS нужен для того, чтобы инфу регулярно в браузере обновлять, а не для самого расчета. Второй вариант, как по мне, лучше. Но решать вам, мне больше нечего предложить.
дело в том что пока не представляю себе как этот расчет сделать
наверное както с временем игратся при каждом входе/обновлении
0
Программист
 Аватар для Arigato
307 / 182 / 176
Регистрация: 05.12.2013
Сообщений: 685
Записей в блоге: 5
27.10.2015, 20:15
Ну как-то так. Можно же подсчитать, сколько времени прошло.
0
4 / 4 / 1
Регистрация: 28.03.2015
Сообщений: 155
27.10.2015, 20:59  [ТС]
Цитата Сообщение от Arigato Посмотреть сообщение
Ну как-то так. Можно же подсчитать, сколько времени прошло.
впринципе сделал незнаю корректно ли:
все в Unix-времени, перевожу уже на странице,вкратце
когда 2+ юзеров,беру текущее время time()+ 120 и заношу в таблицу в БД, с помощью яваскрипта обновляю каждую секу time(), и сравниваю в пхп занесенное время с текущим, если да то начинаю рандомить
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
27.10.2015, 23:11
сложного ничего нет. От сервера (PHP) требуется лишь отдать текущее значение таймера (т.е., оставшееся время) на запрос пользователя (т.е., либо по наличию определенного параметра, либо просто сразу), на JS этот параметр сразу "ловить" как текущее значение, дальше уже просто setInterval. Никакого крона или аякса здесь не требуется.

навскидку, нечто наподобие такого
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
....
$seconds = ..... (количество оставшихся секунд из БД или еще откуда-то)
?>
<div id="time"><?php echo (int) $seconds; ?></div>
<script type="text/javascript">
onload = function() {
    var t = document.getElementById('time')
    setInterval(function() {
        t.innerText = t.innerText * 1 - 1;
    }, 1000)
}
</script>
А отправлять каждую секунду запрос явно не лучшая идея. Либо уже тогда смотрите в сторону websocket/comet и т.п. Но, имхо, это тоже лишнее
1
4 / 4 / 1
Регистрация: 28.03.2015
Сообщений: 155
28.10.2015, 20:19  [ТС]
а как лучше отдать текущее значение(ост время)?

сейчас когда задаю например $seconds = 100; то при перезагрузке опять начинается с 100а

похожее я использовал:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$start_from = 120;//число, с которого начинается отсчет
print '<script language="javascript">
        (function () {
        var writeTo = document.getElementById("container");
        var sec = '.$start_from.';
        var a=setInterval(function() {
        sec--;
    if (sec==0) { writeTo.innerHTML = "<a href=#>Click me</a>";// здесь можно прописать ссылку, текст и т.п.
    clearInterval(a);}
        else writeTo.innerHTML = sec;},1000)})();</script>';
?>
Добавлено через 11 часов 41 минуту
app

Добавлено через 8 часов 36 минут
upp
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
28.10.2015, 22:01
Время храните в БД или еще где, на основе этого и выводите информацию.
Например, можно сделать так: при установке счетчика записываете необходимое время окончания счетчика, запросом наподобие такого (я добавил 2 минуты):
SQL
1
INSERT INTO `table` SET `time` = NOW() + INTERVAL 2 MINUTE
Затем при запросе пользователя извлекаете остаток, соответственно, наподобие такого:
SQL
1
SELECT TIMEDIFF(`time`, NOW())
этот остаток преобразуете в секунды на пыхе (на мускуле тоже можно, но готовых функций я не нашел, я писать функцию нет смысла), например, таким образом:
PHP
1
2
3
$h = $m = $s = 0;
sscanf($time, '%d:%d:%d', $h, $m, $s);
$seconds =  $h * 3600 + $m * 60 + $s;
а дальше уже подставлять это куда вам надо..
0
4 / 4 / 1
Регистрация: 28.03.2015
Сообщений: 155
29.10.2015, 19:24  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
а дальше уже подставлять это куда вам надо.
спасибо за помощ

тоесть если еще использовать ваш пост выше, юзер даже после перезагрузки будет видеть примерно сколько отсчета осталось(каждая перезагрузка, новый запрос) - и не надо каждую секу рефреш
прикольно разрулилось

вопрос по теме(что чо щас есть у меня в скрипте): сейчас кол-во учасников берется с БД и обновляется каждую секу этим(чтобы сразу видеть сколько их):
JavaScript
1
2
3
4
5
<script type="text/javascript">
setInterval(function(){
$("#block").load("all.php #block");
}, 1000);
</script>
думаю что этот вариант не супер возможно по-нагрузке, чтото подскажите, например обнровлять каждые 10 сек для уменьшения нагрузки или чтото другое использовать

Добавлено через 18 часов 54 минуты
с
SQL
1
INSERT INTO `timer` SET `time` = NOW() + INTERVAL 2 MINUTE
и
SQL
1
SELECT TIME FROM timer TIMEDIFF(`time`, NOW())
както не срослось чето не так наверно делаю
но так:
PHP
1
2
3
4
5
6
7
8
$input=time();
$tt=time()+120;
$query44 = "INSERT INTO timer (time) VALUES ('$tt') ";
$result44 = mysql_query($query44);
$result55 = mysql_query("SELECT time FROM timer ",$db); 
$myrow55 = mysql_fetch_array($result55);
$razz = $myrow55['time'];
$raz = $razz - $input;
получилось взять время до окончания

что не выходит - когда =0 то делать рандом, обычным if не хочет(ничего не делает)
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
29.10.2015, 23:24
Цитата Сообщение от 228 Посмотреть сообщение
както не срослось
и что именно не "срослось"? Запросы я проверял..
Цитата Сообщение от 228 Посмотреть сообщение
но так:
Заносить время надо по условию, а не каждый раз заново. Да и вообще, если запись уже существует - то может и нет смысла добавлять новую запись, можно делать UPDATE.
З.Ы. Можно вообще обойтись без использования БД - те же сессии в помощь.
Цитата Сообщение от 228 Посмотреть сообщение
что не выходит - когда =0 то делать рандом, обычным if не хочет(ничего не делает)
ничего не понял
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
30.10.2015, 00:44
Цитата Сообщение от KOPOJI Посмотреть сообщение
но готовых функций я не нашел, я писать функцию нет смысла
UNIX_TIMESTAMP вместо NOW()
делаем
поле TIMESTAMP и по умолчанию CURRENT_TIMESTAMP проверять
UNIX_TIMESTAMP() - fields > 120
Цитата Сообщение от 228 Посмотреть сообщение
$input=time(); $tt=time()+120;
это лишнее все, mysql пусть все считает
заботимся о скорости и нагрузке делаем тип таблицы MEMORY
Цитата Сообщение от KOPOJI Посмотреть сообщение
нет смысла добавлять новую запись, можно делать UPDATE
есть же INSERT… ON DUPLICATE KEY UPDATE чего не использовать
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
30.10.2015, 00:47
Цитата Сообщение от Poznakomlus Посмотреть сообщение
делаем
можно и так, я лишь привел один пример навскидку.
Цитата Сообщение от Poznakomlus Посмотреть сообщение
есть же INSERT… ON DUPLICATE KEY UPDATE чего не использовать
можно и так. Только тогда надо указывать еще id или какое-то другое уникальное поле в запросе - т.к. время априори не может стать уникальным..
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
30.10.2015, 00:51
Цитата Сообщение от KOPOJI Посмотреть сообщение
тогда надо указывать еще id
id пользователя для таймера уникальное
0
4 / 4 / 1
Регистрация: 28.03.2015
Сообщений: 155
30.10.2015, 01:23  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
и что именно не "срослось"? Запросы я проверял..
не заносило
Цитата Сообщение от KOPOJI Посмотреть сообщение
ничего не понял
так чтобы когда таймер кончался выбирался виннер
Цитата Сообщение от KOPOJI Посмотреть сообщение
З.Ы. Можно вообще обойтись без использования БД - те же сессии в помощь.
запоминать же надо
Цитата Сообщение от Poznakomlus Посмотреть сообщение
поле TIMESTAMP и по умолчанию CURRENT_TIMESTAMP проверять
UNIX_TIMESTAMP() - fields > 120
не понял
Цитата Сообщение от Poznakomlus Посмотреть сообщение
это лишнее все, mysql пусть все считает
заботимся о скорости и нагрузке делаем тип таблицы MEMORY
да грузит не моментально, наверно причина этому предыдущие мои запросы к БД(может сама идея с заносом в бд и потом выбором оттуда плохая, ведь сейчас приходится обновлять каждую секунду текущее кол-во учасников,делать рандом,счетчик выграшей и тд и все запросами делаю)
Впринципе спрашивал как подобные(время выходит и...) сайты устроены но никто не ответил
Цитата Сообщение от KOPOJI Посмотреть сообщение
можно и так. Только тогда надо указывать еще id или какое-то другое уникальное поле в запросе - т.к. время априори не может стать уникальным..
Цитата Сообщение от Poznakomlus Посмотреть сообщение
id пользователя для таймера уникальное
до того же как пользователь не добавился в таблицу его ид в ней неизвестен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.10.2015, 01:23
Помогаю со студенческими работами здесь

Таймер обратного отсчета с cookie
Ребята весь интернет перелопатил и ничего не нашёл. Последняя надежда на вас) Я хочу научиться реализовать таймер обратного отсчета на...

Таймер обратного отсчета с редактированием времени
Здравствуйте, пробую написать код таймера на ХТМЛ и ПХП, что бы таймер допустим шел от 3 дней 12 часов и 17 сек до нуля. Но пока он...

Таймер обратного отсчета минуты синхронизация с временем сервера
Добрый вечер! Нужен таймер обратного отсчета, который выводил бы в реал тайме сколько секунд осталось до завершения минуты, отталкиваясь от...

Таймер обратного отсчета с добавлением времени когда угодно
Здарвствуйте, пробую написать код таймера на ХТМЛ и ПХП, что бы таймер допустим шел от 3 дней 12 часов и 17 сек до нуля. Но пока он...

Таймер обратного отсчета с перенаправлением на другой сайт(нужно, чтобы открывался в новой вкладке)
Здравствуйте. Хочу сделать веб страничку, где бы меня перенаправляли на браузерные игры по истечение какого-то времени. Дело в том, что код...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru