[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос о работе с датой
Rem
Вот, делаю я сайт и, спасибо вашему форуму, всё у меня получается. У меня возник ещё один – скорее всего последний – вопрос, точнее просьба.<br>Я делаю “баню” для сайта, чтобы всякие неугодные мне люди не могли войти на сайт (например, левые юзеры). Для этого используется БД, в которой хранится данные о том, кого забанили, дата окончания бана и кто ж его забанил.<br>С первым и третьим пунктом вопросов не возникло. Но вот со вторым самому разобраться не получается. Чтобы всё было наглядно, вот часть кода формы бана:<br>
 
<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() перед ней?

Спустя 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();
понял ?

Спустя 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 :)

Спустя 34 минуты, 11 секунд (11.10.2006 - 15:12) vasa_c написал(а):
юникс формат это простой int.
Получается при помощи например 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) //с первым апреля
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.