Jak zaprojektować tabele do frekwencji szkolnej? wiele dat...

1

Problem goni problem, a ja już powoli kończę projekt...

A wiec mam nadzieję, że to już ostatni mój problem.

Tym razem mam problem z zaprojektowaniem tabeli z frekwencja uczniów.

Problem sprawia mi tu duża ilość dni?

Jak ten problem rozwiązać?

Wstawić do tabeli w MySQL wszystkie dni w roku?? A później porównywać tylko z datą dzisiejszą ? I tą dzisiejszą datę np 04-02-2011 podświetlać w tabeli, zeby było wiadomo, ze chodzi o dziś, a reszta dat będzie na zasadzie linków << Poprzedni dzień. Następny dzień >> nie mam pomysłu jak to w ogóle zaprogramować ?

0

następny/poprzedni powinny jedynie zwracać/oznaczać dzień, po którym będziesz filtrował. Do bazy dodajesz wpis, gdy jest on potrzebny, a nie z definicji.
Jeśli zależy ci na tym, aby zmniejszyć ilość danych w bazie to zapisuj tylko tych, których nie było. Wymaga to jednak dodania kolumny dodatkowej dla ucznia, z datą od kiedy uczęszcza na zajęcia, żeby przypadkiem nie było sytuacji, w której ktoś przepisał się do szkoły/klasy w marcu a mu system będzie pokazywał, że już w styczniu chodził.

0

Tutaj bedzie potrzebna jedna tabela MySQL z 4-5 kolumnami: ID uzytkownika (typ INT), data (dzien miesiac i rok oraz czas - typ DATETIME), wartosc (nieobecny, obecny, spozniony itp) oraz pewnie ID przedmiotu (rowniez typ INT).

Jezeli przyjac taka konwencje, to bedziesz mial podana godz. danego przedmiotu oraz jego ID. Zakladamy bowiem, ze dany przedmiot moze odbyc sie kilkukrotnie w ciagu jednego dnia, prawda? (np. dwie godziny j. polskiego w danym dniu).

Zamiast typu DATETIME mozesz uzyc typu DATE. Jednak wowczas musisz zapisywac numer lekcji.

Dzieki temu bedziesz mogl w prosty sposob wyswietlic frekwencje danego ucznia z danego dnia.
Oczywiscie z poziomu fron-endu, najlepiej, aby nauczyciel widzial tylko dany dzien i mogl przewijac dni klikajac na "Poprzedni" i "Nastepny".

0

ok, rozumiem, masz racje i jestem za. Ale problem mam właśnie z datami? jak w odnośniku poprzedni/następny wklepać dni roku ? 2011-02-04, 2011-02-05 etc ??? skąd on ma te daty pobierac? jak je utworzyc?

0

Tutaj przyda Ci sie funkcja date_add(): http://pl2.php.net/manual/en/datetime.add.php

0

dzięki, podsunąłeś mi dobry pomysł, biorę się od razu za prace :)

0

Ok, powolutku i po kolej. Będę niektóre rzeczy konsultował z Wami:

Na razie mam taką tabelę:

CREATE TABLE IF NOT EXISTS `obecnosc` (
  `id_obecnosc` int(3) NOT NULL AUTO_INCREMENT,
  `ID_ucznia` int(3) DEFAULT NULL,
  `ID_przedmiotu` int(3) DEFAULT NULL, 
  `data` DATE DEFAULT NULL,  
  `obecnosc`  ENUM('n', 'u', 's'),
  PRIMARY KEY (`id_obecnosc`),
  FOREIGN KEY(`ID_ucznia`) REFERENCES `uzytkownicy`(`id_uzytkownicy`) ON DELETE CASCADE ON UPDATE CASCADE,
  FOREIGN KEY(`ID_przedmiotu`) REFERENCES `przedmioty`(`id_przedmioty`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB;

Do tego taki formularz (mam nadzieję, że czytelny, te pętle foreach są ze SMARTÓW):
Chyba bez sensu, wrzucę fotę:/

<form id="validacja" action="./panel_w.php?strona=attendance" method="post">
<table border='1'>
	<tr>
		<td>Lp</td>
		<td>Imię i nazwisko<td>
		<td colspan="8">Piątek, 2011-02-04</td>
	</tr>
	{foreach item=uczen from=$uczniowie key=k}
	<tr>
		<td>{$k+1}</td>
		<td>{$uczen.imie} {$uczen.nazwisko}</td>	
		
		<td>
			<input class="wpis" type ="text" size='2' name ="lekcja[]" value='1' /> 
		</td>
		
		<td>
			<input class="wpis" type ="text" size='2' name ="lekcja[]" value='2' /> 
		</td>		
		
		<td>
			<input class="wpis" type ="text" size='2' name ="lekcja[]" value='3' /> 
		</td>
		
		<td>
			<input class="wpis" type ="text" size='2' name ="lekcja[]" value='4' /> 
		</td>		
		
		<td>
			<input class="wpis" type ="text" size='2' name ="lekcja[]" value='5' /> 
		</td>		
		
		<td>
			<input class="wpis" type ="text" size='2' name ="lekcja[]" value='6' /> 
		</td>		
		
		<td>
			<input class="wpis" type ="text" size='2' name ="lekcja[]" value='7' /> 
		</td>		
		
		<td>
			<input class="wpis" type ="text" size='2' name ="lekcja[]" value='8' /> 
		</td>
		
	</tr>
	{/foreach} 
</table>

<div class='boxx'>
<input id="button" name="submit" value="Zapisz" type="submit"> 
</div>

<br>
<br>
<br>

</form>

Jest ok? Zaraz biorę się za zaprojektowanie formularza i kod PHP... jazda, jazda :D

0

http://tinypic.com/view.php?pic=rmkacn&s=7 <-- zrobiłem tabelę, teraz pytanie, jak zmieniać datę? Np po naciśnięciu poprzedni << >> następny ? Skąd on ma pobierać te daty? ;( jak je wstawić do MySQLa? Jak zrobić, żeby do donośników << >> ładowało poprzedni dzień i następną date ?

0

Datę możesz przechowywać np. w ukrytym polu formularza i podczas przeładowania strony brać tę wartość i zmieniać.

0

Na razie zrobiłem tak, że zamiast tego Piątek 2011-02-04 wstawiłem <inputa ... podaj datę :D Bo naprawdę nie wiem jak to obejśc? :O Wydaje mi się, że było by trzeba napisać do tego kalendarz. I te odnośniki po prostu chodziły po dniach w kalendarzu i tak by trafiały daty do tabeli. Chyba, ze ma ktoś inny lepszy pomysł?

0

Kolega wyżej dobrze Ci napisał, jest to jedno z wyjść. Dodajesz dodatkowe pole <input type="hidden" name="data" value="dzisiejsza_data" />

Teraz dodajesz sobie funkcję powiedzmy <<< dzien poprzedni , która od value odejmuje jeden dzień (funkcje daty w php). Z dzień następny >>> robisz tak samo, tylko sprawdzasz czy np. value <= dzien_dzisiejszy, jeśli tak to pokazujesz przycisk , jeśli nie to nie :P

0

albo możesz dodać w url parametr w query stringu
czyli np. strona generuje sie dla dnia 2011-02-03, to dzień popredni to link do tej strony z qs = ?date=2011-02-02
pole ukryte zadziala jesli poprzedni dzien to bedzie przycisk submitujacy formularz, a wg nie na to sensu, nawet nie powinien

0

Ja na razie użyłem jquery, pluginu datapicker, czyli kalendarz, który wstawiłem do <inputa z data. Wychowawca wybiera datę i modyfikuje obecność. I jest git bo pobiera date i sprawdza w bazie czy jest wystawiona jakaś obecność i ją pobiera, dzięki jednemu formularzowi edytuje, usuwam i wstawiam obecność.

Tylko mały problem, z PLUGINEM!!

Jak nacisnę przycisk w formularzu i przeładuje mi stronę, zamiast polskich znaczków mam krzaczki ;(

POMOCY, porszę...

Użyłem dwóch róznych pluginów i efekt ten sam, krzaki zamiast polskich znaków na stronie... ;(
Na stronie są krzaki, a jak sprawdzam w tym samym czasie źródło strony to w źródle są polskie znaki ;O DZIWNE :D ?

0

słowo klucz: "kodowanie znaków"
no dobra to dwa słowa :P

plik php musi być zapisanyw kodowaniu jakie ustawiasz w charset i dane poźniej dociągane, muszą być w tym samym kodowaniu, w bazie najlepiej też mieć to samo kodowanie

1 użytkowników online, w tym zalogowanych: 0, gości: 1