Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Текстовый календарь


Автор: Aliance 13.9.2005, 23:28
Хочу сделать календарь, куда будут заносится дни рождения (дата+комментарий)
Но он должен выглядеть текстом, например:


Первый 01.01.2005
Второй 02.02.2005
Сотый 30.12.2005



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

В принципе легко, но нужен алгоритм.
Особенно интересует закрашивание розовым.
Как бы придеться читать дату во втором <td> и сравнивать с текущей, так?

Автор: Aliance 14.9.2005, 00:23
Вот, набрасал небольшой эскизик... http://www.jsguide.spb.ru/BK/3.php
Пока только чисто эскиз, даже без дизайна, что уж говорить о серверных скриптах smile

ЗЫ: работать будет все на файлах... БД под такую мелочь заводить не хочу!

Автор: R.M. 14.9.2005, 00:28
Aliance

Сам спросил - сам ответил smile или есть вопрос?

Автор: Aliance 14.9.2005, 01:03
Цитата(Aliance @ 14.9.2005, 00:28)
нужен алгоритм.
Особенно интересует закрашивание розовым.
Как бы придеться читать дату во втором <td> и сравнивать с текущей, так?

^^^

Автор: R.M. 14.9.2005, 01:52
Aliance

Мне кажется без базы будет сложнее сделать

ИМХО создай таблицу в базе а в ней поле дата, пусть туда добавляется дата, дальше сверяй с севодняшней датой если вчера - розовая, если севодня - белая, можно цвета в переменную забить и всё. К сожалению сейчас время мало, не могу написать, подожди завтра наишут smile

Автор: o.s.a. 14.9.2005, 07:43
Цитата(Aliance @ 14.9.2005, 01:28)
Как бы придеться читать дату во втором <td> и сравнивать с текущей, так?

ИМХО, тебе нужно сначала упорядочить даты, выбранные из БД/файла, а затем разделить их на 2 группы: до и после. И выводить одни закрашенными, другие - нет.

Автор: lina 14.9.2005, 09:00
Я бы сделала примерно так, как сказал o.s.a. Данные из файла считываются в массив, массив сортируется, далее находится индекс элемента массива, где дата совпадает с текущей и используются 2 цикла for . Первый for
Код

  ($i=0;$i<=$index;$i++) 
  // выводить даты розовым
 
($i=$index+1;$i<count($masive_name);$i++) 
  // выводить даты белым

Автор: -=Ustas=- 14.9.2005, 11:32
Aliance, в каком формате дату хранишь?

Автор: Mal Hack 14.9.2005, 17:52
Как будет храниться инфа в данном случае не особо принципиально.

Aliance тебе надо полуить массив, отсортировав по дате. Затем циклом по всему массиву сравнивать даты. Старая дата генеришь с одним CSS, больше - с другим, равна - с ьтретьим

Автор: Aliance 14.9.2005, 17:53
o.s.a.
Интересное предложение smile Спасибо, подумаю.

-=Ustas=-
Пока ни в каком, я только думаю над алгоритмом, сам скрипт не пишу.

Цитата
К сожалению сейчас время мало, не могу написать, подожди завтра наишут

Лучше не нужно, используя чужие скрипты я мало чему научусь smile
Добавлено @ 17:54
Mal Hack
Спасибо, до вторника буду делать (не знаю когда время выпадет свободное), ко вторнику выдам результаты...или их отсутствие smile

Автор: PARROT 14.9.2005, 22:36
Вот мои мысли по этому вопросу: (правда немного недоделанные...)
Код

<form method=post>
месяц <input type=text name=mes value=00 size="1" maxlength="2">
день <input type=text name=den value=00 size="1" maxlength="2">
год <input type=text name=god value=1971 size="3" maxlength="4"><br/>
<input type=submit name=send value=отправить>
</form>
<?
if($send){
if($mes>12 || $den>31){
echo $err="Ошибка";
}
        if(!$err){
      $target_date=mktime(0,0,0,date($mes,time()),date($den,time()),date($god,time()));
 echo       $target_date."<br>";
        }
        }

 $now_date=mktime(0,0,0,9,14,2005);
if ($target_date<>$now_date)
        $st="<td style=border:1 solid #444E93 bgcolor=red>Вася</td>";  else $st="<td style=border:1 solid #444E93 bgcolor=blue>Вася</font></td>";
        print "<table width=100><tr>$st</tr></table>";
        ?>

Автор: Aliance 16.9.2005, 12:42
Все, сделал запись в файл. Осталось:
  • чтение из файла
  • проверка на валидность данных
  • дизайн

Автор: Aliance 21.9.2005, 18:07
Все получилось: http://jsguide.spb.ru/BK/3.php
Остался дизайн и регулярные выражения... С ними-то у меня и проблема...
Лучше использовать eregi?

Автор: Mal Hack 21.9.2005, 21:25
Цитата(Aliance @ 21.9.2005, 19:07)
Лучше использовать eregi?

Нет. preg.
А для чего тебе там регулярки-то понадобились?
smile

Автор: Aliance 22.9.2005, 15:20
Цитата(Mal @ 21.9.2005, 22:25)
А для чего тебе там регулярки-то понадобились?

А ты вот глянь последнюю запись, в поле дата там стоит строка, а не дата.
Этого быть не должно smile
Кроме того, нужно теги вырезать... а то создается угроза атаки smile

Автор: Mal Hack 22.9.2005, 16:08
Цитата(Aliance @ 22.9.2005, 16:20)
Кроме того, нужно теги вырезать... а то создается угроза атаки smile

strip_tags();

Цитата(Aliance @ 22.9.2005, 16:20)
А ты вот глянь последнюю запись, в поле дата там стоит строка, а не дата.

А что мешает числом хранить?

Автор: [xoodo] 22.9.2005, 20:16
Цитата(Aliance @ 22.9.2005, 15:20)
Кроме того, нужно теги вырезать... а то создается угроза атаки smile

> htmlspecialchars()
> htmlentities()
> php.net
> пиво

Если ты таки-признаешься, в каком формате хранится дата, то и от второго РЕГа избавимся. Скорее всего.

ЗЫ. Обогнали уже 8))

Автор: Aliance 22.9.2005, 23:12
Цитата(Mal @ 22.9.2005, 17:08)
А что мешает числом хранить?

То, что юзер может ввести туда что угодно. А мне нужно только дд.мм.гггг и никак иначе.

Автор: [xoodo] 28.9.2005, 19:40
Цитата(Aliance @ 22.9.2005, 23:12)
Цитата(Mal @ 22.9.2005, 17:08)
А что мешает числом хранить?

То, что юзер может ввести туда что угодно. А мне нужно только дд.мм.гггг и никак иначе.

php.net > is_numeric()

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)