- Сообщения
- 280
- Реакции
- 46
Всем доброго времени суток!
У меня такая проблема. Есть кораблик. Под ним кнопка "Отправить".
Как сделать, чтобы при нажатии на кнопку - кнопка пропадала, а на ее месте появлялась надпись, которая указывает через сколько времени закончится полет.
К примеру полет длится 6 часов, тогда должно показывать время:
"До конца полета осталось: 359 минут" или "5 часов, 59 минут" с обратным отсчетом при обновлении страницы. А когда время заканчивается - кнопка опять появляется.
Не обязательно чтобы таймер был на месте кнопки - можно под ней. Но тогда чтобы кнопка была не активна.
Я просто начинающий пока в php - буду признателен за вашу помощь или идеи.
У меня такая проблема. Есть кораблик. Под ним кнопка "Отправить".
Как сделать, чтобы при нажатии на кнопку - кнопка пропадала, а на ее месте появлялась надпись, которая указывает через сколько времени закончится полет.
К примеру полет длится 6 часов, тогда должно показывать время:
"До конца полета осталось: 359 минут" или "5 часов, 59 минут" с обратным отсчетом при обновлении страницы. А когда время заканчивается - кнопка опять появляется.
Не обязательно чтобы таймер был на месте кнопки - можно под ней. Но тогда чтобы кнопка была не активна.
Я просто начинающий пока в php - буду признателен за вашу помощь или идеи.
- Сообщения
- 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 билетов кнопка не появится. Думаю дальше сам подумаешь что да как)
- Сообщения
- 280
- Реакции
- 46
Freeman18rus
Участник
- Сообщения
- 26
- Реакции
- 3
- Сообщения
- 322
- Реакции
- 72
А чем тебе не понравилось объяснение в этой теме?skroliks написал(а):Это совсем не то.. Такое я и сам могу сделать. А мне нужен именно счетчик
https://servahoc.ru/threads/vy-uzhe-zabrali-bonus-do-sledujuschego.1310/#post-21381
Freeman18rus
Участник
- Сообщения
- 26
- Реакции
- 3
- Сообщения
- 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 секунд) - должно выполняться действие.. А получается что со старту тайм_а - это большее число (а ни как не ноль). Где я туплю?
$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 секунд) - должно выполняться действие.. А получается что со старту тайм_а - это большее число (а ни как не ноль). Где я туплю?
- Сообщения
- 322
- Реакции
- 72
У тебя при каждом обновлении страницы счетчик сбрасывается? Запрос на обновление времени не спрятан в каких-либо условиях?
В твоих записях time_a - никогда не будет равно нулю.
$time_a = (time() - $user_data["last_sbor_a"]);
Время последнего сбора у тебя не равно текущему времени. Ты обновил в БД время сбора, но в переменной у тебя сохранено время предыдущего сбора.
В твоих записях time_a - никогда не будет равно нулю.
$time_a = (time() - $user_data["last_sbor_a"]);
Время последнего сбора у тебя не равно текущему времени. Ты обновил в БД время сбора, но в переменной у тебя сохранено время предыдущего сбора.
- Сообщения
- 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 секунд не пройдет..
Нужно чтобы после нажатия кнопки запускалось время, по истечении которого произойдет сбор.
Нажимаем на кнопку и:
$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 секунд не пройдет..
- Сообщения
- 322
- Реакции
- 72
И я объясню по-другому.
У тебя в переменной $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, в этом случае срабатывает условие для сбора фруктов.
У тебя в переменной $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
- Сообщения
- 280
- Реакции
- 46
- Сообщения
- 280
- Реакции
- 46
А как можно сделать счетчик, чтобы отсчитывало 20 секунд и только потом осуществлялся сбор без привязки к ласт сбору или тайму после нажатия кнопки?
Т.е. нажал кнопку - пошел там где-то счетчик и пока он не дойдет до 20 - сбора не происходит. 20 сек прошло - сбор и отгрузка + возможность опять все запустить..
Т.е. нажал кнопку - пошел там где-то счетчик и пока он не дойдет до 20 - сбора не происходит. 20 сек прошло - сбор и отгрузка + возможность опять все запустить..
- Сообщения
- 322
- Реакции
- 72
Таким образом ничего не выйдет. Это применяется для получения результатов из последнего SELECT-запроса.Freeman18rus написал(а):Попробуй $user_data = $db->FetchArray(); добавь эту строку чтоб сменилась переменная на "из базы"
Убери эту строчку и после обновления поставь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
$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){ тогда выполняется сбор
Попробуй так
$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){ тогда выполняется сбор
Попробуй так
- Сообщения
- 280
- Реакции
- 46
Freeman18rus
Участник
- Сообщения
- 26
- Реакции
- 3
- Сообщения
- 280
- Реакции
- 46
Вот весь код: (может понятнее будет где ошибся..)
<?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 />";
}
?>
<?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
- Сообщения
- 280
- Реакции
- 46
Если я убираю это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 секунд происходит сбор и можно опять нажимать..