Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Wczytanie danych jako tablicy, pętla FOR
Forum PHP.pl > Forum > Przedszkole
awerd95
  1. <?php
  2. $conn = mysql_connect('***', '***', '***');
  3. $zap = "SELECT * FROM `patient` WHERE `month`='".date('n')."' AND `activ`=1";
  4. $go = mysql_query($zap);
  5. $data = mysql_fetch_row($go);
  6. function dni_mies($mies,$rok) {
  7.  
  8. $dni = 31;
  9. while (!checkdate($mies, $dni, $rok)) $dni--;
  10.  
  11.  
  12. return $dni;
  13. }
  14.  
  15.  
  16. function dzien_tyg_nr($mies,$rok) {
  17.  
  18. $dzien = date("w", mktime(0,0,0,$mies,1,$rok));
  19.  
  20.  
  21. return $dzien;
  22. }
  23.  
  24. function dzien_tyg($nr) {
  25.  
  26. $dzien = array(0 => "Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota");
  27.  
  28. return $dzien[$nr];
  29. }
  30.  
  31.  
  32. function miesiac_pl($mies) {
  33.  
  34. $mies_pl = array(1=>"Stycznia", "Lutego", "Marca", "Kwietnia", "Maja", "Czerwieca", "Lipieca", "Sierpnia", "Wrzenia", "PaĽdziernika", "Listopada", "Grudnia");
  35.  
  36. return $mies_pl[$mies];
  37. }
  38.  
  39. ?>
  40.  
  41. <html>
  42. <head>
  43. <title>Kalendarz</title>
  44.  
  45. <meta http-equiv="content-type" content="text/xml; charset=iso-8859-2" />
  46. <meta http-equiv="content-language" content="pl" />
  47.  
  48. <style type="text/css">
  49. #kalendarz {width: 404px; font-family: "Times New Roman"; font-size: 16px;}
  50. #kalendarz p {text-align: right;}
  51. #kalendarz li {display: inline; padding:0px 15px; border: 1px solid #fff; background: #66CCFF;}
  52. #kalendarz .akt {color: #990000; font-weight: bold;}
  53. #kalendarz .hidden {visibility: hidden;}
  54. </style>
  55. </head>
  56. <body>
  57.  
  58. <div id="kalendarz">
  59. <?php
  60. echo '<p>'.dzien_tyg(date("w")).', '.date("d").' '.miesiac_pl(date("n")).' '.date("Y").'</p>';
  61. ?>
  62. <ul>
  63. <li>N&nbsp;</li>
  64. <li>Pn</li>
  65. <li>Wt</li>
  66. <li>Śr</li>
  67. <li>Cz</li>
  68. <li>Pt</li>
  69. <li>Sb</li>
  70. </ul>
  71.  
  72. <ul>
  73. <?php
  74. for($i=0;$i<dzien_tyg_nr(date("n"),date("Y"));$i++){
  75. echo '<li class="hidden">00</li> ';
  76. }
  77.  
  78. for($i=1;$i<dni_mies(date("n"),date("Y")) +1;$i++) {
  79.  
  80. if ($i<10){
  81. $i = '0'.$i;
  82. }
  83. if ($i == $data[7] && date('n') == $data[8] && date('Y') == $data[9]) {
  84. echo '<li class="akt">'.$i.'</li> ';
  85.  
  86. }else{
  87.  
  88. echo '<li>'.$i.'</li> ';
  89. }
  90. }
  91. ?>
  92. </ul>
  93. <div>
  94.  
  95. </body>
  96. </html>


Jak widzicie mam pewien problem, zmienna $data[7] zawiera liczby 21 i 26 ponieważ w bazie są dwa rekordy.
Niestety mi wyświetla tylko 21 ponieważ zmienna $data nie jest w pętli. Czy ktoś wie jak rozwiązać problem?

Demo http://awerd95.nino.pl/Token/1.php
askone
Czegoś nie rozumiem...

W jaki sposób jeden indeks w array może mieć przypisane dwie różne wartości.
Po drugie dlaczego czytasz "*" z bazy, nie lepiej jawnie zdefiniować kolumny które będziesz odczytywał?

Pozdrawiam
awerd95
Chodzi mi aby jakoś wyświetlić wszystkie wpisy z bazy np. jak mam 1 i 2 to chcę aby dzień 1 i 2 danego miesiąca był podświetlony, co do * takie moje skrzywienie, wiem poprawię.
askone
Przyjrzałem się uważniej Twojemu kodowi, i zauważyłem iż zamiast z funkcji mysql_fetch_array korzystasz z funkcji mysql_fetch_row. Różnica jest zasadnicza, gdyż ta pierwsza pobiera wszystkie rekordy z bazy spełniające warunek. Druga pobiera tylko jeden wiersz...

Aby pobrać wszystkie rekordy skorzystaj z funkcji mysql_fetch_array i dodać dużą pętlę, która będzie iterowała po kolejnych wierszach odczytanych z bazy.

Pozdrawiam

ps. Czy mi się tylko wydaje, że części składowe daty trzymasz w osobnych kolumnach??
awerd95
tak, trzymam osobno, zostało mi narzucone z góry, dopisuję kalendarz a tabela już była

Czy zechciał by ktoś pomóc?
askone
Według mnie algorytm powinien wyglądać jakoś tak:
  1. pobranie danych
  2. zapisanie odpowiednio sformatowanych danych w tablicy
  3. każdorazowo przy wyświetlaniu dnia miesiąca sprawdzenie tablicy względem występowania zdarzeń dla tego dnia


Jak zrobić pobranie danych już pisałem. Odnośnie sposobu ich przechowywania w tablicy widzę dwie możliwości:
  1. sklejasz datę do formatu dd_mm_yyyy i dajesz taki tekst jako indeks tablicy
  2. sklejasz datę do formatu dd_mm_yyyy i wrzucasz jako wartość do tablicy


Odpowiednio do zastosowanej metody przechowywania informacji o zdarzeniach korzystasz z funkcji array_key_exists lub in_array.

Po takim sformatowaniu wszystkich pobranych danych przystępujesz do rysowania kalendarza. Wtedy zamiast
  1. if ($i == $data[7] && date('n') == $data[8] && date('Y') == $data[9]) {
  2. echo '<li class="akt">'.$i.'</li> ';
  3. }else{
  4. echo '<li>'.$i.'</li> ';
  5. }


dajesz coś takiego
  1. if(in_array($tablica_z_danymi, $aktualna_data)){
  2. echo '<li class="akt">'.$i.'</li> ';
  3. }else{
  4. echo '<li>'.$i.'</li> ';
  5. }

lub takiego
  1. if(array_key_exists($aktualna_data, $tablica_z_danymi)){
  2. echo '<li class="akt">'.$i.'</li> ';
  3. }else{
  4. echo '<li>'.$i.'</li> ';
  5. }


$aktualna_data zawiera datę w formacie dd_mm_yyyy

Pisane na szybko ale powinno działać wink.gif

Pozdrawiam
awerd95
  1. $zap = "SELECT * FROM `patient` WHERE `month`='".date('n')."' AND `activ`=1";
  2. $go = mysql_query($zap);
  3. while($data = mysql_fetch_array($go)){
  4.  
  5. $tablica_z_danymi[$data['id']] = array('date' => $data[7].'_'.$data[8].'_'.$data[9]);
  6.  
  7. }
  8. var_dump($tablica_z_danymi);
  9. function dni_mies($mies,$rok) {
  10.  
  11. $dni = 31;
  12. while (!checkdate($mies, $dni, $rok)) $dni--;
  13.  
  14.  
  15. return $dni;
  16. }
  17.  
  18.  
  19. function dzien_tyg_nr($mies,$rok) {
  20.  
  21. $dzien = date("w", mktime(0,0,0,$mies,1,$rok));
  22.  
  23.  
  24. return $dzien;
  25. }
  26.  
  27. function dzien_tyg($nr) {
  28.  
  29. $dzien = array(0 => "Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota");
  30.  
  31. return $dzien[$nr];
  32. }
  33.  
  34.  
  35. function miesiac_pl($mies) {
  36.  
  37. $mies_pl = array(1=>"Stycznia", "Lutego", "Marca", "Kwietnia", "Maja", "Czerwieca", "Lipieca", "Sierpnia", "Września", "Października", "Listopada", "Grudnia");
  38.  
  39. return $mies_pl[$mies];
  40. }
  41.  
  42. echo '<p>'.dzien_tyg(date("w")).', '.date("d").' '.miesiac_pl(date("n")).' '.date("Y").'</p>
  43. <ul>
  44. <li class="name">N&nbsp;</li>
  45. <li class="name">Pn</li>
  46. <li class="name">Wt</li>
  47. <li class="name">Śr</li>
  48. <li class="name">Cz</li>
  49. <li class="name">Pt</li>
  50. <li class="name">Sb</li>
  51. </ul>
  52.  
  53. <ul>';
  54.  
  55. for($i=0;$i<dzien_tyg_nr(date("n"),date("Y"));$i++){
  56. echo '<li class="hidden">00</li> ';
  57. }
  58.  
  59. for($i=1;$i<dni_mies(date("n"),date("Y")) +1;$i++) {
  60. if ($i<10){
  61. $i = '0'.$i;
  62. }
  63. if(in_array(date('d_n_Y'), $tablica_z_danymi)){
  64.  
  65. echo '<li class="akt">'.$i.'</li> ';
  66.  
  67. }else{
  68.  
  69. echo '<li>'.$i.'</li> ';
  70.  
  71. }
  72. }
  73.  
  74. echo '</ul>';


Niestety nie działa, jak dam var_dump na $tablica_z_danymi wychodzi
  1. array(2) { [1]=> array(1) { ["date"]=> string(9) "21_2_2011" } [2]=> array(1) { ["date"]=> string(9) "26_2_2011" } }
askone
Troszkę przesadziłeś wink.gif

Zamiast
  1. while($data = mysql_fetch_array($go)){
  2. $tablica_z_danymi[$data['id']] = array('date' => $data[7].'_'.$data[8].'_'.$data[9]);
  3. }


Wrzuć
  1. while($data = mysql_fetch_array($go)){
  2. $tablica_z_danymi[$data['id']] = $data[7].'_'.$data[8].'_'.$data[9];
  3. }


edit:
W tej pętli nie masz generować aktualnej daty, tylko sprawdzać datę dnia który rysujesz....
  1. if(in_array(date('d_n_Y'), $tablica_z_danymi)){
  2. echo '<li class="akt">'.$i.'</li> ';
  3. }else{
  4. echo '<li>'.$i.'</li> ';
  5. }


Pozdrawiam
awerd95
Wielkie dzięki pomogło!
askone
Przeczytaj moją zmodyfikowaną odpowiedź. Masz błąd w kodzie, zauważyłem później...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.