A | B | C | D | E | F | G | H | I | J | |
---|---|---|---|---|---|---|---|---|---|---|
1 | Část I: povinné | |||||||||
2 | ||||||||||
3 | Skupina | Co | Vysvětlení | |||||||
4 | Registrační formulář | Kontrola dat na straně serveru | Všechny formulářové položky musí být kontrolovány v PHP; klientskou validaci lze obejít. | |||||||
5 | Kontrola dat na straně klienta | Všechny formulářové položky musí být kontrolovány pomocí HTML nebo JS | ||||||||
6 | Povinné položky jsou jasně označeny | |||||||||
7 | Nesprávně vyplněná pole jsou označena a vysvětlena | |||||||||
8 | Po nesprávném odeslání je vrácen k opravě předvyplněn | Všechny formulářové položky (s výjimkou hesel a souborů) jsou předvyplněny zadaným (správným či chybným) obsahem, nesprávně vyplněný obsah je jasně označen, chyba je vysvětlena. | ||||||||
9 | Nahrání obrázku | |||||||||
10 | Ve formuláři existuje nejméně jedna závislost mezi vstupními poli. Tato závislost je kontrolována pomocí JavaScriptu. | V tomto případě nepostačuje triviální ošetření validity jen samotného vstupního pole samostatně. Je třeba kontrolovat hodnoty napříč více poli. Napřílad se zkontroluje, že je heslo ve dvou polích zadáno stejně. | ||||||||
11 | ||||||||||
12 | ||||||||||
13 | Klientské technologie | 100% validní HTML | Dle validátoru na https://validator.w3.org/. Pozor, validovat je nutné všechny stránky - i stránky přístupné jen přihlášeným (pomocí Validate by Direct Input). Validovat je nutné i chybové stránky (například při ošetřování chyb by stránka měla být také validní.) | |||||||
14 | Všechna formulářová pole mají spárovaný <label> | |||||||||
15 | Styly jsou vyčleněny do samostatneho souboru (souborů) | Žádný HTML atribut style | ||||||||
16 | Skripty jsou vyčleněny do souboru (souborů) | Žádné HTML atributy onclick, onsubmit a podobně. Definice funkcí a tříd v odděleném souboru, ve stránce maximálně jejich volání. | ||||||||
17 | Smysluplné styly pro tisk | Použití @media print nebo media="print". Styly pro tisk musí být smysluplné a modifikovat stránku pro přizpůsobení k tisku. | ||||||||
18 | Ajax | Použití fetch nebo XMLHttpRequest pro přenos dat na pozadí. Tato data nejsou statická, ale generovaná serverovou stranou. | ||||||||
19 | ||||||||||
20 | ||||||||||
21 | Serverové technologie | Server-side stránkování | Výpis položek je členěn na menší stránky; na jeho začátku či konci je výčet stránek s možností přejít na další/předchozí a také na n-tou stránku. | |||||||
22 | Existuje výpis uživatelem vložených dat | |||||||||
23 | Existuje možnost editace uživatelem vložených dat | Po přihlášení smí uživatel upravovat jím vložená data | ||||||||
24 | Data na serveru jsou do úložiště (souboru, databáze) vložena tak, jak opravdu napsal uživatel. | Pokud uživatel do formuláře napsal text <ahoj>, bude v souboru uloženo <ahoj> a ne, jak se často stává <ahoj> | ||||||||
25 | Práce obsahuje alespoň uživatelské role v rozsahu: nepřihlášený uživatel, přihlášený uživatel a administrátor | V práci musí být jednotlivé možnosti odstupňovány podle uživatelských rolí. Například: nepřihlášení uživatelé - mohou obsah prohlížet, přihlášení uživatelé mohou přistpívat např komentáře a editovat svoje vlastní komentáře. Administrátor - spravuje veškerý obsah včetně komentářů ostatních, spravuje účty uživatelů, resetuje hesla atp. Pozor: nezbytný bod práce je také možnost povýšení jiného uživatele do role administrátora v uživatelském rozhraní - například ve správě uživatelů. | ||||||||
26 | ||||||||||
27 | Dokumentace | Automaticky generovaná dokumentace | Ve zdrojovém kódu PHP jsou dokumentační komentáře, na jejich základě existuje dokumentace vygenerovaná nástrojem PHPDoc, Doxygen, PHPDocumentor.... V této dokumentaci jsou programátorem vysvětleny významy tříd, metod, funkcí, proměnných. Nejde tedy jen o dokumentaci samotnou, ale o její skutečně smysluplné použití. | |||||||
28 | Zadání úlohy | |||||||||
29 | Produktová dokumentace | Určená pro čtení zadavatelem, obsahuje návod, ukázky UI a podobně | ||||||||
30 | Programátorská dokumentace | Určená pro čtení programátorem, obsahuje popisy algoritmů, strukturu zdrojového kódu a podobně | ||||||||
31 | ||||||||||
32 | ||||||||||
33 | Obecné principy | Datumy jsou v lidsky čitelné podobě. | Například stránky v češtině ukazují datum ve formátu den.měsíc.rok, v angličtině měsic.den.rok nebo měsíc/den/rok. | |||||||
34 | Obsah je rozumně seřazen. | Pokud máme seznam položek, jsou tyto seřazeny podle lidských kriterií. Například abecedně. Řazení podle toho, jak to odpovídá uložení na serverovém úložišti je nepřípustné, protože to pro uživatele obvykle nedává smysl. | ||||||||
35 | ||||||||||
36 | ||||||||||
37 | Část II: zakázané | |||||||||
38 | ||||||||||
39 | Co | Vysvětlení - nápověda jak to dělat | ||||||||
40 | Hesla nesmí být uložena v plaintextu | Použití password_hash nebo ekvivalentu | ||||||||
41 | Aplikace nesmí obsahovat zranitelnosti XSS | Použití htmlspecialchars nebo ekvivalentu při každém výpisu uživatelských dat | ||||||||
42 | Při použití databáze nesmí aplikace obsahovat zranitelnosti SQL Injection | Použití prepared statements, mysql_real_escape_string nebo ekvivalentu při tvorbě SQL dotazů | ||||||||
43 | Stránkování nesmí být realizováno jen v JavaScriptu | Ze serveru smí na klienta dorazit maximálně jedna stránka výpisu | ||||||||
44 | Kód nesmí být duplicitní | Více podobných stránek je realizováno jedním PHP souborem (nikoliv: article-1.php, article-2.php, article-3.php NEBO vypis-page-1.php, vypis-page-2.php, ...) | ||||||||
45 | Reloadem stránky po odeslání formuláře nesmí dojít k opakovanému vložení dat | Použití mechanismu POST-Redirect-GET a ještě lépe v kombinaci s jednorázovým tokenem. | ||||||||
46 | Zákaz použití knihoven a frameworků třetích stran | Jak na klientské, tak na serverové straně. Např. jQuery, Bootstrap, Nette a podobně. Předmět je o základech a chceme, abyste se naučili skutečné principy fungování webu, ne nějakou abstrakci z frameworku. | ||||||||
47 | Obrázky, stejně jako případné další velké soubory, nejsou uloženy v databázi | Velké binární soubory se ukládají rovnou do souborového systému | ||||||||
48 | Práce by neměla při odevzdávání obsahovat velké množství nepoužívaného kódu - například komentované úseky, funkce kódu atp. | V práci by mělo být minimum nadbytečného kódu, který není nezbytný pro samotné fungování práce. | ||||||||
49 | ||||||||||
50 | Část III: další | |||||||||
51 | ||||||||||
52 | Za semestrálku | 22 bodů | ||||||||
53 | Za odevzdání ve zkouškovém období | -3 body | ||||||||
54 | Za každé vrácení (nesplnění požadavků) | -3 bodů | ||||||||
55 | Minimum | 12 bodů | ||||||||
56 | ||||||||||
57 | ||||||||||
58 | ||||||||||
59 | ||||||||||
60 | ||||||||||
61 | ||||||||||
62 | ||||||||||
63 | ||||||||||
64 | ||||||||||
65 | ||||||||||
66 | ||||||||||
67 | ||||||||||
68 | ||||||||||
69 | ||||||||||
70 | ||||||||||
71 | ||||||||||
72 | ||||||||||
73 | ||||||||||
74 | ||||||||||
75 | ||||||||||
76 | ||||||||||
77 | ||||||||||
78 | ||||||||||
79 | ||||||||||
80 | ||||||||||
81 | ||||||||||
82 | ||||||||||
83 | ||||||||||
84 | ||||||||||
85 | ||||||||||
86 | ||||||||||
87 | ||||||||||
88 | ||||||||||
89 | ||||||||||
90 | ||||||||||
91 | ||||||||||
92 | ||||||||||
93 | ||||||||||
94 | ||||||||||
95 |