Отсчет времени до сбора

  • Автор темы skroliks
  • Дата начала
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
Всем доброго времени суток!
У меня такая проблема. Есть кораблик. Под ним кнопка "Отправить".

Как сделать, чтобы при нажатии на кнопку - кнопка пропадала, а на ее месте появлялась надпись, которая указывает через сколько времени закончится полет.
К примеру полет длится 6 часов, тогда должно показывать время:
"До конца полета осталось: 359 минут" или "5 часов, 59 минут" с обратным отсчетом при обновлении страницы. А когда время заканчивается - кнопка опять появляется.

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

Я просто начинающий пока в php - буду признателен за вашу помощь или идеи.
 
irakli_666
Евгений
Участник
Сообщения
135
Реакции
75
skroliks написал(а):
Всем доброго времени суток!
У меня такая проблема. Есть кораблик. Под ним кнопка "Отправить".

Как сделать, чтобы при нажатии на кнопку - кнопка пропадала, а на ее месте появлялась надпись, которая указывает через сколько времени закончится полет.
К примеру полет длится 6 часов, тогда должно показывать время:
"До конца полета осталось: 359 минут" или "5 часов, 59 минут" с обратным отсчетом при обновлении страницы. А когда время заканчивается - кнопка опять появляется.

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

Я просто начинающий пока в php - буду признателен за вашу помощь или идеи.

<?PHP if(200 <= $medal){ ?><center><form action="" method="post">
<input type="submit" name="bilet" value="Получить приз" style="height: 35px; margin-top:10px;">
</form></center><?PHP } ?>

Вот код из бонус лото. Там пока не наберется 200 билетов кнопка не появится. Думаю дальше сам подумаешь что да как)
 
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
Это совсем не то.. Такое я и сам могу сделать. А мне нужен именно счетчик :(
 
Freeman18rus
Участник
Сообщения
26
Реакции
3
попробуй вытащить из скрипта ежедневного бонуса, там кнопка пропадает, где то я видел с таймером
 
Последнее редактирование:
Freeman18rus
Участник
Сообщения
26
Реакции
3
меня тоже интересует чтоб он отсчитывал время в реальном времени, чтоб тикали часы, так возможно я видел
 
Последнее редактирование:
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
В общем сделал так - после нажатия на кнопку - начинает идти время до сбора. Время сбора поставил (чтобы быстрее проверять можно было) 20 секунд. Получается:
$db->Query("UPDATE db_users_b SET last_sbor_a = '".time()."' WHERE id = '$usid' LIMIT 1");
$time_a = (time() - $user_data["last_sbor_a"]);

Сделал для проверки чтобы сразу выводило время:
echo "<center><font color = 'red'><b>Осталось времени: {$time_a}</b></font></center><BR />";

if ($time_a >= 20){
тогда выполняется сбор

Оно мне выводит не понятное число тайм_а :(. Ведь по сути что мы делаем - ставим ласт сбор равное текущему времени. Переменной тайм_а присваиваем значение в виде (текущее время минус время сбора). По логике, тайм_а начинается с ноля (по скольку ласт сбор и текущее время в начале совпадают) и когда доходит до 20 (через 20 секунд) - должно выполняться действие.. А получается что со старту тайм_а - это большее число (а ни как не ноль). Где я туплю? :(
 
MegaGoblin
PHP, JS, AJAX, CSS, HTML
Участник
Сообщения
322
Реакции
72
У тебя при каждом обновлении страницы счетчик сбрасывается? Запрос на обновление времени не спрятан в каких-либо условиях?
В твоих записях time_a - никогда не будет равно нулю.

$time_a = (time() - $user_data["last_sbor_a"]);

Время последнего сбора у тебя не равно текущему времени. Ты обновил в БД время сбора, но в переменной у тебя сохранено время предыдущего сбора.
 
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
Ладно, обьясню по другому. Все та же задача - сбор плодов через определенное время.
Нужно чтобы после нажатия кнопки запускалось время, по истечении которого произойдет сбор.
Нажимаем на кнопку и:
$db->Query("UPDATE db_users_b SET last_sbor_a = '".time()."' WHERE id = '$usid' LIMIT 1"); - // last_sbor - это время нажатия на кнопку.
$time_a = (time() - $user_data["last_sbor_a"]);
По идее $time_a равняется (текущее время минус время нажатия кнопки). Т.е. в секунду нажатия кнопки оно должно равняться нулю. И дальше увеличивается по мере прошествия времени. При достижении определенного значения (как в примере - 20 секунд) if ($time_a >= 20){ - должен происходить сбор. А не получается, по скольку тайм изначально не ноль, а какое-то число :(

Перед этим, после нажатия на кнопку я поставил такое:
$sbor_a = (20 - (time() - $user_data["last_sbor_a"]));
if ($sbor_a <=0){

И вывод, если время еще не прошло:
} else echo "<center><font color = 'red'><b>До следующего сбора осталось: {$sbor_a} секунд! </b></font></center><BR />";
И все работает! Т.е. пока 20 секунд не пройдет - при нажатии на кнопку высвечивает, что еще нельзя.

Мне нужно, чтобы после нажатия кнопки шло время (пусть будет те же 20 секунд), а только потом осуществлялся сбор и отгрузка на склад.
А получается, что сбор происходит сразу после нажатия (а не через 20 секунд) и я просто не могу делать следующий сбор пока 20 секунд не пройдет..
 
MegaGoblin
PHP, JS, AJAX, CSS, HTML
Участник
Сообщения
322
Реакции
72
  • #10
И я объясню по-другому.

У тебя в переменной $user_data["last_sbor_a"] хранится время последнего сбора.

Ты хочешь собрать фрукты (т/е/ нажать на кнопку) - ты это делаешь, выполняется запрос
$db->Query("UPDATE db_users_b SET last_sbor_a = '".time()."' WHERE id = '$usid' LIMIT 1");
** В БД обновилось время сбора **

Потом ты хочешь организовать счетчик
$time_a = (time() - $user_data["last_sbor_a"]);

Но ты не учел то, что ты обновил время сбора лишь в БД, а в переменной $user_data["last_sbor_a"] у тебя было сохранено другое время. Это время ты не обновлял. Получается там осталось вермя последнего предыдущего сбора.

И получается что у тебя $user_data["last_sbor_a"]) < time(), а следовательно $time_a всегда будет больше нуля. Если он больше нуля, то может быть и больше 20, в этом случае срабатывает условие для сбора фруктов.
 
Freeman18rus
Участник
Сообщения
26
Реакции
3
  • #11
Попробуй $user_data = $db->FetchArray(); добавь эту строку чтоб сменилась переменная на "из базы"
 
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
  • #12
Добавил.. Теперь после нажатия кнопки меня матюгает, мол:
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\startrade.com\classes\_class.db.php on line 182
 
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
  • #13
А как можно сделать счетчик, чтобы отсчитывало 20 секунд и только потом осуществлялся сбор без привязки к ласт сбору или тайму после нажатия кнопки?
Т.е. нажал кнопку - пошел там где-то счетчик и пока он не дойдет до 20 - сбора не происходит. 20 сек прошло - сбор и отгрузка + возможность опять все запустить..
 
MegaGoblin
PHP, JS, AJAX, CSS, HTML
Участник
Сообщения
322
Реакции
72
  • #14
Freeman18rus написал(а):
Попробуй $user_data = $db->FetchArray(); добавь эту строку чтоб сменилась переменная на "из базы"
Таким образом ничего не выйдет. Это применяется для получения результатов из последнего SELECT-запроса.

skroliks написал(а):
Добавил.. Теперь после нажатия кнопки меня матюгает, мол:
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\startrade.com\classes\_class.db.php on line 182
Убери эту строчку и после обновления поставь
$user_data["last_sbor_a"] = time();

skroliks написал(а):
А как можно сделать счетчик, чтобы отсчитывало 20 секунд и только потом осуществлялся сбор без привязки к ласт сбору или тайму после нажатия кнопки?
Т.е. нажал кнопку - пошел там где-то счетчик и пока он не дойдет до 20 - сбора не происходит. 20 сек прошло - сбор и отгрузка + возможность опять все запустить..
Все равно тебе надо будет проверять время, без этого никуда
 
Freeman18rus
Участник
Сообщения
26
Реакции
3
  • #15
$db->Query("UPDATE db_users_b SET last_sbor_a = '".time()."' WHERE id = '$usid' LIMIT 1");//обновляем время посл.сбора
$db->Query("SELECT * FROM db_users_b WHERE id = '$usid' LIMIT 1");// выбираем данные для переменной
$user_data = $db->FetchArray();//заносим в переменную
$time_a = (time() - $user_data["last_sbor_a"]);
echo "<center><font color = 'red'><b>Осталось времени: {$time_a}</b></font></center><BR />";
if ($time_a >= 20){ тогда выполняется сбор
Попробуй так
 
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
  • #16
Сделал. Ошибку не выводит. Только ресурсы теперь не собираются ни сразу ни после 20 секунд :(
Но time_a теперь равняется нулю после нажатия кнопки.
 
Freeman18rus
Участник
Сообщения
26
Реакции
3
  • #17
Выложи что получилось
 
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
  • #18
Вот весь код: (может понятнее будет где ошибся..)

<?PHP
# Сколько привезут корабли
$mesto_a = (($user_data["a_t"]*$sonfig_site["a_in_h"]));

# Запуск кораблей
if(isset($_POST["item_a"])){

$sbor_a = (20 - (time() - $user_data["last_sbor_a"]));

if ($sbor_a <=0){

if ($user_data["a_t"] > 0){

if ($mesto_a <= $canput){

$db->Query("UPDATE db_users_b SET last_sbor_a = '".time()."' WHERE id = '$usid' LIMIT 1");

$db->Query("UPDATE db_users_b SET reis_a_t = '$hangar_a' WHERE id = '$usid' LIMIT 1");

echo "<center><font color = 'red'><b>Корабли успешно отправлены в рейс! До возврата: 20 секунд! </b></font></center><BR />";

$db->Query("SELECT * FROM db_users_b WHERE id = '$usid' LIMIT 1");
$user_data = $db->FetchArray();
$time_a = (time() - $user_data["last_sbor_a"]);

if ($time_a >= 20){

# Добавляем привезенные ресурсы на склад
$res_a = ($sonfig_site["a_in_h"]*$user_data["a_t"]);
$db->Query("UPDATE db_users_b SET a_b = a_b + '$res_a' WHERE id = '$usid' LIMIT 1");

$db->Query("SELECT * FROM db_users_b WHERE id = '$usid' LIMIT 1");
$user_data = $db->FetchArray();


}

} else echo "<center><font color = 'red'><b>На складе не хватает места!</b></font></center><BR />";

} else echo "<center><font color = 'red'><b>У вас нет кораблей данного типа для отправки</b></font></center><BR />";

} else echo "<center><font color = 'red'><b>Корабли еще не вернулись из рейса! До возврата: {$sbor_a} секунд! </b></font></center><BR />";

}

?>
 
Freeman18rus
Участник
Сообщения
26
Реакции
3
  • #19
Если это весь код то так работать не будет
 
skroliks
PHP, MySQL, CSS
Участник
Сообщения
280
Реакции
46
  • #20
Freeman18rus написал(а):
Если это весь код то так работать не будет
Если я убираю это
$db->Query("SELECT * FROM db_users_b WHERE id = '$usid' LIMIT 1");
$user_data = $db->FetchArray();
$time_a = (time() - $user_data["last_sbor_a"]);
if ($time_a >= 20){

то все работает, только ресурсы собираются сразу, но если нажимаю опять на кнопку - пока 20 секунд не пройдет то отправить снова не могу.. Т.е. мне нужно просто чтобы после нажатия кнопки считалось еще время (20 секунд) до того, как соберутся ресурсы.
В общем алгоритм такой:
Нажал на кнопку - если не прошло 20 секунд, то пишет что надо подождать n секунд - по прошествии 20 секунд происходит сбор и можно опять нажимать..
 
Сверху