Problémy aplikace On-line testů a jejich řešení. Autor: Ing. Lukáš Trombik



Podobné dokumenty
Webová aplikace Znalostní testy online UŽIVATELSKÁ PŘÍRUČKA

Internet cvičení. ZS 2009/10, Cvičení 3., Tomáš Pop. DISTRIBUTED SYSTEMS RESEARCH GROUP

Protokol HTTP 4IZ228 tvorba webových stránek a aplikací

MS Excel makra a VBA

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Evidence požadavků uživatelů bytů a nebytových prostor

PHP tutoriál (základy PHP snadno a rychle)

Formuláře. Aby nám mohli uživatelé něco hezného napsat třeba co si o nás myslí!

Sada 1 - PHP. 09. Formuláře

WNC::WebNucleatCreator

3 Makra Příklad 4 Access Ve vytvořené databázi potřebuje sekretářka společnosti Naše zahrada zautomatizovat některé úkony pomocí maker.

OVLÁDÁNÍ PROGRAMU Obsah

MS SQL Server 2008 Management Studio Tutoriál

Internet cvičení. ZS 2009/10, Cvičení 4., PHP. Tomáš Pop. DISTRIBUTED SYSTEMS RESEARCH GROUP

Internetové prohlížeče

Popis rozšířujících funkcí JScriptu

Uživatelský manuál. Aplikace GraphViewer. Vytvořil: Viktor Dlouhý

Vstupní požadavky, doporučení a metodické pokyny

ZSF web a intranet manuál

Koláčky, sezení. Martin Klíma

Základy HTML, URL, HTTP, druhy skriptování, formuláře

Elektronické podání žádosti o udělení výjimky pro použití konvenčních osiv v ekologickém zemědělství prostřednictvím Portálu farmáře MZe

Elektronické podání žádosti o udělení výjimky pro použití konvenčních osiv v ekologickém zemědělství prostřednictvím Portálu farmáře MZe

Obsah. při vyšetření pacienta. GDT souboru do programu COSMED Omnia GDT souboru z programu COSMED Omnia a zobrazení výsledků měření v programu MEDICUS

INOVACE PŘEDMĚTŮ ICT. MODUL 11: PROGRAMOVÁNÍ WEBOVÝCH APLIKLACÍ Metodika

Webová stránka. Matěj Klenka

WebmMenu slouží pro editaci a management položek menu. Pro další informace si prosím vyberte jedno z následujících témat:

Manuál k e-learningovému vzdělávacímu modulu 1 MODUL HIGH-TECH POTRAVINY. Popularizace zdraví Po.Zdrav (CZ.1.07/3.1.00/ )

Připojení ke vzdálené aplikaci Target 2100

Formuláře. Internetové publikování. Formuláře - příklad

Další nutný soubor je laydiv.js, ve kterém jsou uloženy funkce pro zobrazování virů na ploše a funkce pro odkaz na Teachers Guide.

3 Makra Příklad 4 Access Ve vytvořené databázi potřebuje sekretářka společnosti Naše zahrada zautomatizovat některé úkony pomocí maker.

1 Administrace systému Moduly Skupiny atributů Atributy Hodnoty atributů... 4

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Systémové elektrické instalace KNX/EIB (16. část) Ing. Josef Kunc

Aplikace a služba Money Dnes Publisher v deseti krocích

Web-Exam. Průvodce lektora administrační částí

ČERV. Hra Červ je psána pomocí příkazů Javascriptu a standardních příkazů HTML.

ČNHP. Příručka pro pacienty. Institut biostatistiky a analýz. Vytvořil:

PHP a Large Objecty v PostgreSQL

Průvodce instalací modulu Offline VetShop verze 3.4

Pravidla a plánování

Elektronická třídnice

Programování v jazyce JavaScript

Windows 10 (5. třída)

Úvodem 9. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10. Než začneme 11

VAŠE NOVÁ APLIKACE NISSAN GROUP EPC PŘÍRUČKA ZAČÍNÁME

Po prvním spuštění Chrome Vás prohlížeč vyzve, aby jste zadali své přihlašovací údaje do účtu Google. Proč to udělat? Máte několik výhod:

Windows 8.1 (5. třída)

INFORMAČNÍ SYSTÉMY NA WEBU

Software602 FormApps Server

Ovládání ústředny Visonic přes mobilní telefon

Programujeme v softwaru Statistica - příklady

PALSTAT s.r.o. systémy řízení jakosti PALSTAT CAQ verze Kontakty 08/ Obsah

Návrh a tvorba WWW stránek 1/8. Formuláře

Registr práv a povinností

Program Půjčovna sportovních potřeb

Uživatelský návod pro zpracování geometrických plánů na webu

Administrační rozhraní Drupalu

První přihlášení do CMS. Po přihlášení

1 Webový server, instalace PHP a MySQL 13

Uživatelská příručka 6.A6. (obr.1.)

Studijní průvodce e-learningovými kurzy

Zabezpečení webové vrstvy a EJB projektu Část nastavení specifická pro Glassfish, část dána Java EE

Programování v jazyce JavaScript

Technologické postupy práce s aktovkou IS MPP

On-line dražební systém EDEN návod k použití

43 HTML šablony. Záložka Šablony v systému

Rezervační systém Tvorba WWW stránek

Uživatelská dokumentace

STATISTICA Téma 1. Práce s datovým souborem

Modul Ankety verze 1.11 pro redakční systém Marwel 2.8 a 2.7

aneb velice zjednodušené vysvětlení základních funkcí a možností systému Vypracoval: Tomáš Dluhoš tomas.d@centrum.cz

SMTPServer - Příručka

Choose a building block. Znalostní báze Kleos. Kleos 6.5 (březen 2019)

Synchronizace kontaktů z ESO9 do MS Outlook

Printris. Hra Printris je psána pomocí příkazů Javascriptu a standardních příkazů HTML.

Návod pro použití aplikace crisp [vyjádření]

APS Web Panel. Rozšiřující webový modul pro APS Administrator. Webové rozhraní pro vybrané funkce programového balíku APS Administrator

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

Podrobný postup pro doložení příloh k Finančnímu zdraví žadatele prostřednictvím Portálu Farmáře

Uživatelský manuál k prodejní aplikaci věrnostního systému Nestlé

1 Přesun síťového serveru

language="javascript">... </script>.

Popis a ovládání. Aplikace 602XML Filler

Obrázek 1: Struktura programu z hlediska zapojení

Práce se souborem EU peníze středním školám Didaktický učební materiál

PŘÍRUČKA ZAČÍNÁME IDENTIFIKOVAT VOZIDLO. Obrazovka Identifi kovat vozidlo je první obrazovka, kterou uvidíte při přihlášení k systému Microcat.

Návod k práci s programem MMPI-2

AKUTNÍ LEUKEMIE KLINICKÝ REGISTR. Uživatelský manuál k registru

Úvod...1 Instalace...1 Popis funkcí...2 Hlavní obrazovka...2 Menu...3 Práce s aplikací - příklad...5

Aplikace objednávání svozů

EIS JASU CS. Název souboru: Dokumentace EIS - Dokumentace EIS - Kontrola odběratelů v ISIR 1_7

1. Obsah. 2. Úvod. 1. Obsah Úvod Přihlášení Přizpůsobení prostoru Sdílení fotografií Moduly...

4. Nastavení programu

Návod k obsluze portálu pro obchodníky

Svolávací systém Uživatelský manuál

Aktuální výběr, nad kterým je kurzor myši

Gymnázium Jana Pivečky a Střední odborná škola Slavičín. III/2 - Inovace a zkvalitnění výuky prostřednictvím ICT. Informační a komunikační technologie

Transkript:

Problémy aplikace On-line testů a jejich řešení Autor: Ing. Lukáš Trombik Vydalo Gymnázium Františka Živného v rámci projektu číslo 0560P 2005

Uvedení do problematiky Tvorba aplikace On-line testu se sebou nese i spoustu úskalí, s kterými je potřeba počítat. Mám zde namysli ošetření dané aplikace, zejména formulářů. Ty, mimo bezesporých výhod, v sobě skrývají i spoustu nešvaru, které je potřeba ošetřit a docílit toho, že IS On-line testů bude ukazovat vždy korektní výsledky, které odpovídají znalostem daného uživatele. Nebudu zde popisovat práci s formuláři jako takovými a jejich následné ověření. Vše je popsáno na řadě veřejných serverů, které se věnují tvorbě www stránek. Omezím se výhradně na ošetření výsledného skriptu, tj. formuláře jenž zobrazuje náhodně vygenerované otázky a po jeho odeslání se danému uživateli zobrazí výsledná statistika. Hlavním problémem těchto aplikací je možnost, po zodpovězení daných otázek a následném vyhodnocení, vrátit se zpět do výchozího stavu a dané otázky poopravit a znovu vyhodnotit. Tím daný uživatel může vylepšit své celkové skóre a danou statistiku. Tento problém není řešen takřka na žádném webu, který se věnuje on-line aplikacím! Na druhou stranu je třeba říci, že ani mé řešení není stoprocentní, jen snižuje pravděpodobnost podvodu. Pro lepší pochopení zde přikládám ukázku daného problému. 1. Výchozí stav bezprostředně po vygenerování otázek.

2. Stav po zodpovězení otázek. Pro ilustraci jsem úmyslně zadal u všech otázek špatné odpovědi. 3. Stav, kdy jsem poopravil již vygenerované a vyhodnocené otázky a dal znovu vyhodnotit.

Řešení daných problémů 1. Odfiltrování tlačítka Vyhodnotit Pokud vyhodnocení na dané otázky provádíte ve stejném skriptu, na stejné stránce, na které rovněž zobrazujete vygenerované otázky, je potřeba zabránit opětovnému stisku odesílacího tlačítka formuláře. Jednou z možnosti je skrytí, přesněji zneviditelnění tohoto tlačítka ihned po jeho stisknutí nebo při vyhodnocení. Stačí nastavit danému tlačítku vlastnost visibility, která určuje zda daný prvek bude viditelný či nikoliv. <input type="submit" id="odeslat" class="odeslat" value="vyhodnotit"> <style type="text/css" media="all">.odeslat {visibility:hidden; </style> Nevýhody: například v prohlížeči Opera můžeme vypnout kaskádové styly. 2. Odfiltrování pravého tlačítka myši Jednou z možností, jak zabránit alespoň úzké skupině uživatelů, vrátit se k výchozímu stavu a dané otázky znovu poopravit je odfiltrování pravého tlačítka myši. Tím zakážeme i možnost používat místní nabídky v dané aplikaci. Nejlepší možnost, jak toho dosáhnout je přidat skript pro filtraci jako atribut či vlastnost těla dané stránky. Například tímto způsobem: <body onmousedown="if((event.button == 2) (event.button==3)) alert('nepovolená operace!')"> Další možností je tento skript: <script language="javascript"> <!-- var message="nepovolená operace!"; function clickie4(){ if (event.button==2){ alert(message);

return false; function clickns4(e){ if (document.layers document.getelementbyid&&!document.all){if (e.which==2 e.which==3){alert(message);return false; if (document.layers){ document.captureevents(event.mousedown); document.onmousedown=clickns4; else if (document.all&&!document.getelementbyid){ document.onmousedown=clickie4; document.oncontextmenu=new Function("alert(message);return false;") // --> </script> Oba výše uvedené způsoby řešení jsou totožné a vedou ke stejnému cílu. Druhy zmiňovaný je o něco preciznější s ohledem na různé variace prohlížečů. Výsledek: Nevýhody: uživatel může mít zakázané spouštění jazyka Javascript.

3. Přesměrování koncových otázek do nového okna, nové stránky Další možností, jak je možné snadno se vrátit se do předešlého stavu, je použít navigační lištu v daném prohlížeči. Proto se nabízí možnost přesměrovat vygenerované otázky do nového okna, na které budou uplatněna určitá omezení - restrikce. Novému oknu zakážeme určité volby, hlavně výše uvedenou navigační lištu. Restrikce uplatněny pro nové okno: toolbar=no (označuje panel nástrojů - zpět, vpřed, atd.) location=no (vstupní pole adresy) menubar=no (nabídka soubor, úpravy, atd.) directories=no (speciální panel odkazů) Další vlastnosti se týkají především umístění okna a jeho velikosti. Například volby: scrollbars=yes, resizable=yes, status=yes, top=0, left=0,... Výsledek: Okno bez navigační lišty a hlavního menu.

4. Ošetření klávesy backspace I přes všechna vylepšení, existuje jednoduchý recept, jak se vrátit do předešlého stavu, tím je klávesa backspace. Ta umí jednak vymazat znak před kurzorem a ve formulářích plní funkci návratu do předešlého stavu. Kdyby se jednalo o jakýkoliv jiný znak či snad číslo, bylo by možné jej snadno odfiltrovat. Při každém stisku klávesy se nám totiž generuje kód, podle kterého poznáme, která klávesa byla stisknuta. Viz například tento skript, kterým snadno odfiltrujeme čísla. function IsDigit(c) { return ((c >= 48) && (c <= 57)); function IsSpecial(c){ return (((c >= 0) && (c <= 31)) (c == 46) ); function checkonlynumber(e) { var code; if (!e) var e = window.event; if (e.keycode) code = e.keycode; else if (e.which) code = e.which; if (!((IsDigit(code)) (IsSpecial(code)))) { e.returnvalue = false; return false; e.returnvalue = true; return true; <input type="text" name ="cislo" onkeypress="return checkonlynumber(event)" /> U klávesy backspace tomu tak není a není ji možné tímto způsobem odchytit. Takže danou klávesu musíme nechat dál plnit její činnost a je třeba postupovat jinak. Existuje zde více řešení, která vedou k ošetření daného problému. Já zvolil práci se session proměnnými. Nebudu se zde příliš rozepisovat, jak se s takovými superglobálními proměnnými pracuje. Vysvětlení se spoustou řešení je na webu. Jen zde zdůrazním vlastnosti, které v sobě session nesou. Vlastnosti: každému novému uživateli se přiřadí unikátní identifikátor (tzv. session-id) o předává se s každým požadavkem pomocí cookie nebo parametrů v URL, resp. skrytých polí ve formuláři o session-id je konstruováno tak, aby bylo těžko odhadnutelné (většinou náhodné číslo + hashovací funkce MD5 nebo SHA) pro každé session-id má webový server vyhrazen prostor pro ukládání dat (proměnných) o sdílená paměť o soubory o databáze S daných vlastností vyplývá, že běžné globální proměnné jsou platné jen během jednoho klientského dotazu, jednoho běhu skriptu, poté se jejich hodnota nenávratně ztrácí. Zatímco

session proměnné byly implementovány tak, že uchovávají svou hodnotu napříč různými dotazy uživatele po celou dobu existence příslušné session. Session proměnnou může být jakákoliv globální proměnná, kterou programátor zaregistruje do aktuální session. Systém sám na počátku zpracování každého dalšího dotazu obnoví její hodnotu a stejně tak na konci zpracování ji opět uloží. Práce se session je i celkem jednoduchá. Bezprostředně po vyhodnocení daného testu si zaregistruji a nastavím danou session. session_start(); $_SESSION['vyplneno'] = 1; Při dalším vyhodnocení si překontroluji jestli už daná session proměnná není nastavena a pokud ano vypíšu hlášku a znepřístupním test. if($_session['vyplneno'] == 1){ echo 'Tento test jste již vyplnil'; exit; Do rodičovské stránky, tj. stránky, kde vybírám počet otázek ještě před samotným nalosováním otázek, vložím následující kód, kterým uvolním danou session. session_start(); if (isset($_session['vyplneno'])) { unset($_session['vyplneno']); Tím bych měl vyřešen problém s klávesou backspace, případně s jiným pokusem o návrat do již zodpovězeného testu, pokud bych počítal s tím, že uživatel si nebude chtít daný test zopakovat. Problém však může nastat, pokud se u jednoho počítače střídá více uživatelů nebo si daný uživatel chce stejný test, byť s jinými otázkami opětovně udělat. Session proměnné, jak už jsem poznamenal, uchovávají svou hodnotu napříč různými dotazy uživatele po celou dobu existence příslušné session, tzn. pokud ji sami nezrušíme, tak je platná po celou dobu, kdy pracujeme s daným prohlížečem. Museli bychom tak, zavřít okno prohlížeče a znovu jej otevřít, tím se nám zaregistruje nová session s jiným identifikátorem. Že se o to postará uživatel, na to spoléhat nelze. Musíme se o to postarat sami. Řešení není nikterak složité. Postačí, když si vytvoříme pomocnou proměnnou, která bude vždy nabývat jiné hodnoty a bude platná jen v koncovém okně s vygenerovanými otázkami, tzn. při opětovném výběru daného testu se nám proměnná a tím i daná session naplní vždy novou - různou hodnotou. V rodičovské stránce, tj. stránce, kde vybírám počet otázek vytvořím proměnnou, která bude nabývat vždy náhodných hodnot user=user+math.random() (například user19, user1250,...) Bezprostředně po vyhodnocení daného testu si zaregistruji a nastavím danou session na hodnotu pomocné proměnné, tj. například user19, user1250, atd. session_start(); $_SESSION['vyplneno'] = $user;

Při dalším vyhodnocení si překontroluji jestli už daná session proměnná není nastavena a pokud ano vypíši hlášku a znepřístupním test. session_start(); if($_session['vyplneno'] == $user){ echo 'Tento test jste již vyplnil'; exit; Pomocná proměnná je vždy platná jen v koncovém okně a pokud si například daný test chceme zopakovat, tak se nám hodnota proměnné přepíše vždy novou hodnotou a zaregistrovaná globální proměnná - session nám zanikne se zavřením okna prohlížeče. Takže nemusíme ručně nikde nic promazávat, tj. výhoda oproti variantě ukládat nějaké pomocné hodnoty do databáze či textového souboru, kde bychom dodatečné promazávání museli řešit. Výsledek: Závěr Jak už jsem v úvodu uvedl plnohodnotné vyřešení daného problému není. Je to jako mnohokrát řešený problém se zamezením vícenásobného hlasování v nějaké anketě. Stoprocentně to vyřešit nelze, jen je možné výše uvedenými či dalšími způsoby snížit pravděpodobnost, že se to někomu povede obejít.