ABCDEFGHIJ
1
Část I: povinné
2
3
SkupinaCoVysvětlení
4
Registrační formulářKontrola dat na straně serveruVšechny formulářové položky musí být kontrolovány v PHP; klientskou validaci lze obejít.
5
Kontrola dat na straně klientaVš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ěnVš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é technologie100% validní HTMLDle 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 tiskPoužití @media print nebo media="print". Styly pro tisk musí být smysluplné a modifikovat stránku pro přizpůsobení k tisku.
18
AjaxPoužití fetch nebo XMLHttpRequest pro přenos dat na pozadí. Tato data nejsou statická, ale generovaná serverovou stranou.
19
20
21
Serverové technologieServer-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 datPo 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á &lt;ahoj&gt;
25
Práce obsahuje alespoň uživatelské role v rozsahu: nepřihlášený uživatel, přihlášený uživatel a administrátorV 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
DokumentaceAutomaticky generovaná dokumentaceVe 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á dokumentaceUrčená pro čtení zadavatelem, obsahuje návod, ukázky UI a podobně
30
Programátorská dokumentaceUrčená pro čtení programátorem, obsahuje popisy algoritmů, strukturu zdrojového kódu a podobně
31
32
33
Obecné principyDatumy 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
CoVysvětlení - nápověda jak to dělat
40
Hesla nesmí být uložena v plaintextuPoužití password_hash nebo ekvivalentu
41
Aplikace nesmí obsahovat zranitelnosti XSSPouž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 InjectionPouž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 JavaScriptuZe 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í datPouž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 stranJak 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áziVelké 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álku22 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
Minimum12 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