Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][mysql] Przedział daty zaznaczony w kalendarzu, Jak zaznaczyć wszystkie dni z przedziału od do wczytanego z bazy mysql
Kamil Rybczyński
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 1
Dołączył: 21.11.2006
Skąd: Ozorków

Ostrzeżenie: (0%)
-----


Witam,
chcę wykonać kalendarz, który wyświetli mi wszystkie dni z zakresu od - do ( wczytanego z bazy danych ) i zaznaczy to w kalendarzu.
Jak do tej pory udało mi się jedynie zrobić taki kalendarz, który wyświetla w kalendarzu datę początku i datę końca, natomiast nie mam pojęcia jak zrobić aby zaznaczone w kalendarzu były dni pomiędzy tymi datami.

Oto obecny kod:

  1. <?php
  2. include 'config.php';
  3.  
  4. function kalendarz($ile) {
  5. $znacznik = mktime(0, 0, 0, date("m")+$ile, 1);
  6. $iledni  = date("t", $znacznik);
  7. $start = date("w", $znacznik);
  8. $miesiac = date("m", $znacznik);
  9. $rok = date("Y", $znacznik);
  10. $miesiace = array(
  11. "Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec",
  12. "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"
  13. );
  14. $od = date("Y-m-d", mktime(0, 0, 0, $miesiac, 1, $rok));
  15. $do = date("Y-m-d", mktime(0, 0, 0, $miesiac, $iledni, $rok));
  16. $uzytestart = array();
  17. $uzyteend = array();
  18.  
  19. // sprawdzam miesiąc w tabeli:
  20. $wynik = mysql_query("SELECT DATE(terminstart) AS datastart, DATE(terminend) AS dataend FROM klienci WHERE terminstart OR terminend BETWEEN '$od' AND '$do'");
  21. while($wynik and $dane=mysql_fetch_assoc($wynik)) $uzytestart[] = $dane['datastart'] AND $uzyteend[] = $dane['dataend'];
  22.  
  23.  
  24. // rysuję kalendarz
  25. echo "<table border='1' cellspacing='0' cellpadding='2'><tr><td>";
  26. echo "<a href='{$_SERVER["PHP_SELF"]}?ile=".($ile-1)."'><<</a>";
  27. echo "</td><td colspan='5' align='center'>";
  28. echo $miesiace[$miesiac-1]." $rok</td><td align='right'>";
  29. echo "<a href='{$_SERVER["PHP_SELF"]}?ile=".($ile+1)."'>>></a>";
  30. echo "</td></tr>";
  31. echo "<tr style=\"background-color:#d2e767;\"><td>Nd</td><td>Pn</td><td>Wt</td><td>Śr</td>
  32. <td>Cz</td><td>Pt</td><td>So</td></tr>";
  33. echo "<tr align='right'>";
  34. if ($start>0) echo "<td colspan='$start'> </td>";
  35. else $pierwszy=true;
  36. for ($i=1;$i<=$iledni;$i++) {
  37. $dzien = date("w", mktime(0, 0, 0, $miesiac, $i, $rok));
  38. if ($dzien==0 and !$pierwszy) echo "</tr><tr align='right'>";
  39. $pierwszy = false;
  40.  
  41.  
  42. // tu jest wersja dla uzytej i pustej daty:
  43. if ((in_array(date("Y-m-d", mktime(0, 0, 0, $miesiac, $i, $rok)), $uzytestart)) OR (in_array(date("Y-m-d", mktime(0, 0, 0, $miesiac, $i, $rok)), $uzyteend))) {
  44. echo "<td style=\"background-color: #ff0000;\"><b>$i</b></td>"; // uzyta
  45. } else {
  46. echo "<td>$i</td>"; // pusta
  47. }
  48. }
  49. $koniec=7-($start+$iledni)%7;
  50. if ($koniec<>7) echo "<td colspan='$koniec'> </td>";
  51. echo "</tr></table>";
  52. }
  53. kalendarz((int)$_GET["ile"]);
  54. ?>


Z góry bardzo dziękuję za pomoc.

Ten post edytował Kamil Rybczyński 16.02.2008, 10:28:17
Go to the top of the page
+Quote Post
MMX3
post
Post #2





Grupa: Zarejestrowani
Postów: 155
Pomógł: 9
Dołączył: 26.01.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Użyj Googla Luke!

Zapytaj frazą:
mysql date between

Pozdro
Go to the top of the page
+Quote Post
Kamil Rybczyński
post
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 1
Dołączył: 21.11.2006
Skąd: Ozorków

Ostrzeżenie: (0%)
-----


Wydaje mi się, ze dwa zapytania do bazy w jednym małym kalendarzyku to trochę niezbyt oszczędne wyjście.

Jest już between, które zwraca z bazy klientów tych, którzy mają zarezerowane terminy na dany miesiąc.

Czy nie da się jakoś inaczej tego wykonać niż kolejnym zapytaniem do bazy?


Pozdrawiam.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 22:51