![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 11 Dołączył: 20.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Jestem tu nowy więc Witam wszystkich i do rzeczy.
Piszę właśnie stronę na której będzie można przeprowadzać testy i stanąłem w jednym miejscu, mianowicie na rozwiązanie każdego testu jest określona ilość czasu i nie było by tu dużego problemu gdyby nie fakt iż pytania są wyświetlane pojedynczo (stronicowanie) i po każdej udzielonej odpowiedzi skrypt jest przekierowywany do innego pliku gdzie następuje zapis udzielonej odpowiedzi do bazy MySql oraz inkrementacja zmiennych stronicowania i na końcu przekierowanie z powrotem. Mój problem polega na tym, że początkowo użyłem JS do odliczania czasu i przekierowania na stronę z wynikiem gdy on upłynie ale po wprowadzeniu opisanego powyżej rozwiązania to się nie sprawdza bo JS po każdym odświeżeniu strony zaczyna odliczanie od początku. Myślałem nad zapisem aktualnego czasu do zmiennej w sesji przed przekierowanie a potem ponowne jej odczytanie tyle, że nie wiem jak to można zrobić :/ Czy ktoś mi podsunie rozwiązanie tego problemu, a może ktoś ma lepszy pomysł (IMG:style_emoticons/default/questionmark.gif) Poniżej przedstawiam kod źródłowy wspomnianych wcześniej plików. Plik wyświetlający test:
Plik dokonujący zapisu i inkrementacji:
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Problem w tym wypadku polega na tym, że czas startu nie jest równoznaczny z czasem przez Ciebie wybranym. Pamiętaj, że ileś czasu trwa renderowanie strony. Stąd licznik powinien startować dopiero PO jej pełnym wyświetleniu, a więc mogą nastąpić różnice czasu z tego powodu. Z tego co kojarzę to zdarzenie onLoad jest wywoływane w momencie gdy strona zostanie załadowana w pełni, czyli sadzę, że w tym momencie powinien startować licznik czasu na pytanie w teście, ale działo by się to niezależnie od znacznika startu/końca testu w cookie/na serwerze. Nie pamiętam czy było je można stosować do konkretnego elementu, bo wtedy czas wystartowałby po załadowaniu odpowiedniego elementu strony (choćby obrazków testowych). Zawsze bowiem może zajść sytuacja, że user zna odpowiedź na pytanie, zanim strona się załaduje w pełni, wpisze odpowiedź i da "Dalej". W ten sposób mimo faktu, iż licznik pytania nawet nie ruszył, czas całości testu upływa niezależnie od usera na serwerze. Problemem może być wolna strona, gdzie czas ładowania może stanowić dużą część całości testu, zmniejszając możliwy na odpowiedź. Dlatego ogranicz na stronach testu grafikę i wszelkie wodotryski/spowalniacze do niezbędnych. A timestamp startu/końca niech będzie niemożliwy do edycji w żaden sposób (zapis na serwerze) co sprawi, że będzie to miarodajne i uczciwe wobec większości userów. Dlatego to rozwiązanie jest mieszane, gdyż część rzeczy dzieje się po stronie serwera (kontrola całości testu i jego trwania), a część po stronie usera (ograniczony czas lokalny na jedno pytanie). To moim zdaniem najsensowniejsze rozwiązanie problemu.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.10.2025 - 00:57 |