<TR class=TB3new1><TD CLASS=TN2>В бан</TD> <TD class=TN2 align=left><SPAN CLASS=TN1> <SELECT class=FI1 name=ban> <OPTION value=>Ни насколько</OPTION> <OPTION value=1>На час</OPTION> <OPTION value=2>На день</OPTION> <OPTION value=3>На неделю</OPTION> <OPTION value=4>На месяц</OPTION> <OPTION value=5>На год</OPTION> <OPTION value=6>Навсегда</OPTION> </SELECT> </TD></TR><TR class=TB3new1><TD class=TN2>Основание для бана <font color=lime>*</font></TD><TD class=TN2 align=left><INPUT class=FI1 size=40 name=ban_osn></TD></TR>
Насколько можно понять, должно появиться поле с выбором времени, на которое админ хочет забанить юзера. Ну и причина бана конечно же. Как мне сделать так, чтобы заносилось время на час (день, неделю, и т.д.) вперёд в виде date("Y-m-d H:i:s"); только не та дата, которая на данный момент а на день, месяц, год вперёд, ну вы поняли. Не могли бы вы подсказать, как это делается? Я не прошу полный и подробный скрипт, я просто хочу узнать, как это можно реализовать.
Доп. информация:
имя БД: “rdb”
таблица “banned”
поля “nick”, “date”, “by_who”
И как сделать так, что когда время на сервере сравняется с датой окончания бана, то удалить это значение, точнее всё поле?
Спасибо за внимание.
Спустя 6 минут, 6 секунд (9.10.2006 - 17:36) vasa_c написал(а):
Намек:<br>
time() + 7 * 24 * 60 * 60;
Спустя 2 минуты, 4 секунды (9.10.2006 - 17:38) Rem написал(а):
ОК, намёк понял ;)
а как насчёт
а как насчёт
QUOTE
сделать так, что когда время на сервере сравняется с датой окончания бана, то удалить это значение, точнее всё поле?
Спустя 21 минута, 20 секунд (9.10.2006 - 17:59) vasa_c написал(а):
Хранить в базе время окончания бана в unix-формате (т.е. тот же time() + 7 * 24...)<br>Соответственно удаление всех устаревших будет примерно такое:<br>
Можно по крону запускать сценарий, который будет это чистить.
А можно вообще не чистить.
Например приходит пользователь, ищем его в таблице с банами.
Нет там — значит все окей.
Есть — проверяем время окончания,
если еще не вышло — посылаем пользователя,
вышло — удаляем бан из базы, пользователя запускаем.
mysql_query( 'delete from `table` where `time_end`<'.time() );
Можно по крону запускать сценарий, который будет это чистить.
А можно вообще не чистить.
Например приходит пользователь, ищем его в таблице с банами.
Нет там — значит все окей.
Есть — проверяем время окончания,
если еще не вышло — посылаем пользователя,
вышло — удаляем бан из базы, пользователя запускаем.
Спустя 1 час, 34 минуты, 9 секунд (9.10.2006 - 19:34) Rem написал(а):
ага, спасибо.
Только вот я столкнулся с одной неприятной траблой. к date() не применимы функции time(). Что мне делать? Дата записывается на данный момент времени или же сплошные нули. Мож надо вызвать функцию time() перед ней?
Только вот я столкнулся с одной неприятной траблой. к date() не применимы функции time(). Что мне делать? Дата записывается на данный момент времени или же сплошные нули. Мож надо вызвать функцию time() перед ней?
Спустя 18 минут, 29 секунд (9.10.2006 - 19:52) vasa_c написал(а):
Rem, какой date()? пехепешная date? Читай доку — все к ней приминимо.
Спустя 22 часа, 57 минут, 24 секунды (10.10.2006 - 18:49) Rem написал(а):
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->Есть — проверяем время окончания,<br>если еще не вышло — посылаем пользователя,<br>вышло — удаляем бан из базы, пользователя запускаем.<!--QuoteEnd--></div><!--QuoteEEnd--><br>снова небольшая трабла - я не понимаю как это сделать<br>
почему-то не работает. Я конечно понимаю, что сравнивать дату ТАКИМ образом нельзя, поэтому посоветуйте, как можно это сделать???:/
<?php //$date_ban - дата окончания бана в формате Y-m-d H:i:s $d1=date("Y-m-d H:i:s"); if ($d1>$date_ban) { //трём запись и пускаем юзера } else { //оставляем как есть - пусть ждёт } ?>
почему-то не работает. Я конечно понимаю, что сравнивать дату ТАКИМ образом нельзя, поэтому посоветуйте, как можно это сделать???:/
Спустя 38 минут, 17 секунд (10.10.2006 - 19:28) HackAlot написал(а):
у тебя в базе данных как хранятся баны ? такой формат date("Y-m-d H:i:s") ?
тогда ты просто забыл вставить date("Y-m-d H:i:s", time()). а вообще в базе данных напрямую удобней создать поле int(11) ban_day default null , и вносить туда не date(), а просто time();
понял ?
тогда ты просто забыл вставить date("Y-m-d H:i:s", time()). а вообще в базе данных напрямую удобней создать поле int(11) ban_day default null , и вносить туда не date(), а просто time();
понял ?
Спустя 10 часов, 35 минут, 25 секунд (11.10.2006 - 06:03) Rem написал(а):
нет так не работает<br>пришлось сделать по-своему, прочитав мануал заново :)<br><br>
Вывод и сравнение:
ну это так себе, пробник, зато всё работает :)
$year=date("Y")+1; $month=date("m")+1; $day=date("d")+1; $date1= "$year-$month-$day"; $sql = "INSERT INTO test_ban (date) VALUES ('$date1')";
Вывод и сравнение:
<?PHP $md=mysql_connect("localhost", "root"); mysql_select_db("rdb", $md); $sQuery="SELECT * FROM `test_ban` ORDER BY `date` DESC;"; $rRes=mysql_query($sQuery); while ($ma=mysql_fetch_object($rRes)) { if ($i<1) { $date=$ma->date; } $i++; } $datecheck=date("Y-m-d H:i:s"); if ($datecheck>$date) { echo $date; } if ($date>$datecheck) { echo $datecheck; } mysql_close($md); ?>
ну это так себе, пробник, зато всё работает :)
Спустя 5 часов, 11 минут, 12 секунд (11.10.2006 - 11:14) vasa_c написал(а):
Rem, чем же тебя не устраивает юникс-формат?
Спустя 3 часа, 23 минуты, 42 секунды (11.10.2006 - 14:38) Rem написал(а):
да я што то понять как написать алгоритм для него не могу =)
а так всё хранится в БД в формате datetime :)
а так всё хранится в БД в формате datetime :)
Спустя 34 минуты, 11 секунд (11.10.2006 - 15:12) vasa_c написал(а):
юникс формат это простой int.
Получается при помощи например time()
Сравнение двух дат элементарно:
if ( $d1 < $d2 ) print 'd1 раньше d2';
Получение разницы во времени еще элементарней:
$dd = $d2 - $d1;
Получается при помощи например time()
Сравнение двух дат элементарно:
if ( $d1 < $d2 ) print 'd1 раньше d2';
Получение разницы во времени еще элементарней:
$dd = $d2 - $d1;
Спустя 4 часа, 58 минут, 17 секунд (11.10.2006 - 20:10) Rem написал(а):
понятно, но я уже сделал как мне удобней ;)
всем большое спасибо
всем большое спасибо
_____________
tesseract (10:09:16 1/06/2007)
к вопросу о вчерашних скриптостраданиях. Только что кодер знакомый прислал, нашёл в коде программы, написанной уволенным коллегой незадолго до ухода:
#define TRUE FALSE //счастливой отладки <ВЦ>
такого извращённого юмора ещё не встречал
Rouse_ (10:09:56 1/06/2007)
#define true ((rand() % 2) ? true : false) //с первым апреля