Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: RedIce в Feb 05, 2009, 15:57



Титла: PHP Календар - отделяне на дати
Публикувано от: RedIce в Feb 05, 2009, 15:57
Опитвам се да си направя едно календарче… със задачки и т.т
За целта използвах скрипта от този сайт:

http://www.phpjabbers.com/how-to-make-a-php-calendar-php26.html

До тук ОК... само с COPY/PASTE и календара го имаше.
Наложи се да направя малко промени в кода за да започва календарната седмица от Понеделник. Понеже PHP не ми е от най-силните страни се наложи накрая малко да налучквам но все пак се получи.

Промяната разбира се първо трябваше да се направи в самата таблица (html кода) и след това в края скрипта, където получавам следният код:

Код
GeSHi (PHP):
  1. $timestamp = mktime(0,0,0,$cMonth,7,$cYear);
  2. $maxday = date("t",$timestamp);
  3. $thismonth = getdate ($timestamp);
  4. $startday = $thismonth['wday'];
  5.  
  6. for ($i=0; $i<($maxday+$startday); $i++) {
  7. if(($i % 7) == 0 ) echo "<tr>\n";
  8. if($i < $startday) echo "<td></td>\n";
  9. else echo "<td class='normal'>". ($i - $startday + 1) . "</td>\n";
  10. if(($i % 7) == 6 ) echo "</tr>\n";
  11. }
  12. ?>

До тук всичко е ОК.
Сега проблемът ми е, че искам да мога да маркирам дадени календарни дни като събития. Измислих някаква схема но с нея мога да маркирам само един единствен ден от месеца по следният начин:
Код
GeSHi (PHP):
  1. $timestamp = mktime(0,0,0,$cMonth,7,$cYear);
  2. $maxday = date("t",$timestamp);
  3. $thismonth = getdate ($timestamp);
  4. $startday = $thismonth['wday'];
  5.  
  6. for ($i=0; $i<($maxday+$startday); $i++) {
  7. if(($i % 7) == 0 ) echo "<tr>\n";
  8. if($i < $startday) echo "<td></td>\n";
  9. else 1
  10.  
  11. //тук започва промяната:
  12. {
  13. $countdays = ($i - $startday + 1) ;
  14. if ($countdays == 2){
  15. $class = cat1;
  16. }
  17. else
  18. {
  19. $class = normal;
  20. }
  21. echo "<td class='$class'>". ($i - $startday + 1) . "</td>\n";
  22. if(($i % 7) == 6 ) echo "</tr>\n";
  23. }
  24. }

В този случай ще ми избере 2-рото число от месеца и благодарение на един CSS и промененият клас, ще го загради в квадратче.
Разбира се трябва да отработя момента и със месеците и годините за да няма препокриване :) но мисля, че това няма да е толкова трудно. Но не можах да измисля нищо друго което да ми помогне да избера повече от една дата на месец.

Някакви идеи?


Титла: Re: PHP Календар - отделяне на дати
Публикувано от: VladSun в Feb 05, 2009, 16:43
Скрипта, от който гледаш е ужасен и е написан аматьорски ;)

Никога не ползвай $_SERVER["PHP_SELF"] по този начин. Ето защо:

Код:
calendar.php/"<script>alert('XSS')</script>/?month=4&year=2009

Никога не ползвай $_REQUEST - не се знае, какъв CSRF ще отвориш.

А и нищо не разбрах - какво точно искаш да направиш с тия "маркирания"?



Титла: Re: PHP Календар - отделяне на дати
Публикувано от: VladSun в Feb 05, 2009, 16:44
Нищо ли друго не си хареса:
http://www.google.com/search?client=opera&rls=bg&q=php+calendar&sourceid=opera&ie=utf-8&oe=utf-8
:)


Титла: Re: PHP Календар - отделяне на дати
Публикувано от: vm13 в Feb 05, 2009, 23:14
Вярно, че първо трябва да помислиш как да се справиш с пълните дати, но ето ти насока:

1. Направи си масив, съдържащ дните, които искаш да маркираш:

$special_days = array(1, 5, 22); //първи, пети и 22 ден

2. Промени този ред:
if ($countdays == 2){

на това:
if(in_array($countdays, $special_days)){

Виж този PEAR пакет, може да ти бъде от полза:
http://pear.php.net/package/Calendar



Титла: Re: PHP Календар - отделяне на дати
Публикувано от: RedIce в Feb 07, 2009, 12:09
vm13 мерси :) стана номера... горедоло съм измислил как да си оправя проблема с пълните дати, само остава да седна и да го направя.
Иначе ще поглемда и PEAR пакета после ;)

VladSun - има много готови решения които... тепърва трябва да ги разгадавам как работят за да ги интегрирам в сайта.. мисля, че това ми е идеалният вариант.
Това мислиш ли, че би ми спестило проблемите: htmlspecialchars($_SERVER['PHP_SELF']) ?


Титла: Re: PHP Календар - отделяне на дати
Публикувано от: VladSun в Feb 07, 2009, 12:44
VladSun - има много готови решения които... тепърва трябва да ги разгадавам как работят за да ги интегрирам в сайта.. мисля, че това ми е идеалният вариант.
Това мислиш ли, че би ми спестило проблемите: htmlspecialchars($_SERVER['PHP_SELF']) ?

Най-добре изобщо не ползвай PHP_SELF - ако зададеш на HTML формата action='' това означава, че ще се извика текущия адрес - т.е. същата страница.


Титла: Re: PHP Календар - отделяне на дати
Публикувано от: RedIce в Feb 07, 2009, 13:39
а сега като се замисля... трябва ли ми въобще това :)
наистина ще стане и с action.
Ако вместо $_SERVER["PHP_SELF"] , просто си задам пътят и самият PHP фаил :)
например /path/to/file.php
няма ли да ми реши пак проблема :)?


Титла: Re: PHP Календар - отделяне на дати
Публикувано от: VladSun в Feb 07, 2009, 17:23
а сега като се замисля... трябва ли ми въобще това :)
наистина ще стане и с action.
Ако вместо $_SERVER["PHP_SELF"] , просто си задам пътят и самият PHP фаил :)
например /path/to/file.php
няма ли да ми реши пак проблема :)?

Ако ще задаваш същия път, по-добре остави action-а празен - по-добра "преносимост" на скрипта ще имаш.