Praktika z aplikačního software - HTML a PHP
(MFF UK - UAS006, UAS009)
Praktika se konají formou samostatné práce a konzultací, uskuteční se k nim dvě nepovinné přednášky a cvičení (2x90 + 2x90 minut). Přednášky proběhnou v rámci předmětu Internet.
HTML
Zápočet bude udělen za složitější dílo obsahující několik provázaných stránek s využitím stylů, obrázků, tabulek, formátování textu, případně rámů, ... Vyžadována je také znalost jazyka (je možné použít editor, ale je nutné vědět, co a proč generuje).
Přehled nejčastějších chyb:
- Obrázky by měly mít definované rozměry, aby stránka při jejich načítání neposkakovala.
- Obrázky s obsahem by měly mít nastaven atribut alt.
- Na stránce s definicí rámů by měl být ve značce <noframes> odkaz na obsah, stejně tak uvnitř značky <iframe> by měl být odkaz na soubor v rámu.
- Když je definován obrázek na pozadí, měla by být definovaná i barva pozadí, aby byl text před načtením obrázku čitelný a aby to nepůsobilo rušivě.
- Když je definována barva pozadí, měly by být definované i barvy textu a odkazů, ne každý má nastaven černý text na bílém pozadí s modrými odkazy.
- Hodnoty atributů by měly být uzavřeny do uvozovek nebo apostrofů, obzvláště pokud jsou nealfanumerické.
- Kolem rovnítek u atributů značek by neměly být mezery.
- Znaky &, < a > se píšou jako HTML-entity &, < a > (se středníkem na konci).
- Stránky by měly fungovat i s vypnutým JavaScriptem - lze používat konstrukce jako <a href="obrazek.jpg" target="obrazek" onclick="return !window.open(this.href, 'obrazek', '');">Obrázek</a> (return false způsobí, že obsluha události nebude pokračovat).
- Je vhodné vyhnout se podtrženému písmu, protože se používá pro odkazy a svádí to ke klikání.
- Obrázky vyměňované po najetí myši by měly být nahrané pomocí JavaScriptu předem, aby se nezačaly stahovat až když se na ně najede.
- Jednotlivé stránky by měly mít nastavený smysluplný titulek. Pomáhá vyhledávačům, zobrazuje se v historii, při tisku a v oblíbených položkách.
- Stránka by neměla být uzavřená do tabulky, jednotlivé objekty je lepší rozmístit pomocí stylů. Jednak tabulky slouží k jinému účelu a jednak prohlížeče zobrazují takové stránky až po jejich kompletním stažení, stránky neuzavřené do tabulek se zobrazují už běžem načítání.
PHP
Zápočet bude udělen za webovou aplikaci využívající databázi s alespoň dvěma provázanými tabulkami. Aplikace by měla umožňovat záznamy z těchto tabulek vypisovat, přidávat, upravovat a mazat. Práci můžete odevzdat ve tvaru zdrojových textů a exportu struktury databáze.
Přehled nejčastějších chyb:
- Připojení k databázi by mělo být centrálně a do všech souborů jenom includnuté, aby se v případě potřeby dalo snadno změnit. Více o problému
- U INSERT INTO se vyplatí používat delší syntaxi INSERT INTO (sloupce) VALUES (hodnoty), protože jednak z toho je na první pohled patrné, co se stane, a jednak to nepřestane fungovat při přidání sloupce do tabulky. Více o problému
- Heslo je lepší do databáze ukládat zahashované - jednak to zvýší bezpečnost a jednak to je slušnější k uživatelům. Např. funkce sha1 vrací vždy 40 znaků a md5 32 znaků. Více o problému
- Všechny hodnoty přicházející zvenku by měly být považované za nedůvěryhodné, a proto by měly být nějak ošetřené. Pokud je zapnutá PHP direktiva magic_quotes_gpc, tak stačí všechny hodnoty vkládané do databáze obalit apostrofy (v MySQL funguje i pro čísla). Více o problému
- Ve víceuživatelském prostředí, kterým web je, se nedá spoléhat na atomicitu operace SELECT+UPDATE. Když je posloupnost operací uživatelů A a B např. A SELECT, B SELECT, A UPDATE, B UPDATE, tak vše projde bez jakékoliv chyby, výsledek je přitom špatně. Dá se to řešit pomocí transakcí, zamykáním tabulek nebo v případě pouhého ověření existence záznamu vyhovujícího podmínce (např. uživatel se stejným loginem) definicí unikátních indexů. Více o problému
- Formulář pro editaci a přidávání záznamů by měl být jen jeden s tím, že pomocí parametru se rozliší, zda jde o editaci záznamu nebo jeho přidání. Dva formuláře přidělávají práci při jejich vytváření a zhoršují spravovatelnost. Více o problému