Pokusné stránky kroužku

Podadresáře studentů

Program na další hodiny

Úkol – generátor formulářů

Jak jsem už mnohokrát říkal, programátoři vyznávají pravidlo Don't Repeat Yourself. Když jste ale doposud dělali formuláře, tak jste stále dokola opakovali všechny ty triviální činnosti, které se při zobrazení a zpracování formulářů musí udělat. Každý obalit HTML kódem tabulky, naprogramovat chování každého prvku, šoupat daty sem a tam,... Je to spousta repetivní práce, která je náchylná k triviálním chybám, že ani nezbyde čas udělat nějaké zajímavější funkce. Pojďme to vyřešit nějak chytřeji.

Nechceme-li se opakovat, musíme při tvorbě každého formuláře říci jen minimum informací, jen to, co je pro daný formulář unikátní a čím se liší od ostatních:

Generátor by tedy měl umět následující:

Úkol – tabulka výsledků

Tenhle úkol je pro vás všechny dohromady, tedy očekávám, že společně naprogramujete jedno řešení a že na tom zapracujete nějak průběžně. Poraďte se spolu a vytvořte tabulku výsledků loňské Technoplanety, jako je na stránce http://technoplaneta.cz/2013/tymy/ a snažte se ji vytvořit co nejvěrněji, jen bez ikonek.

Týmy jsou hodnoceny podle třech kritérií. Primární pro seřazení je počet správných řešení šifer. To je první z čísel hodnocení v tabulce. Teprve když se toto kritérium shoduje, rozhoduje počet šifer vyřešených před nápovědou, neboli počet nápověd. V tabulce je uvedené jako počet nápověd a tedy čím více, tím níže. Nápovědy se vydávají zpravidla po týdnu od začátku kola, ale někdy kvůli velikonocům bývají posuny. Každopádně datum nápovědy je u každého kola uvedeno v tabulce kol. Když se i toto kritérium shoduje, pak rozhodne třetí kritérium a to je součet celých dní, kolik řešení každé šifry trvalo zaokrouhleno nahoru (tj. každá šifra alespoň jeden den) sečtené s počtem chyb, kterých se týmy dopustily.

V tabulce je pak ke každé šifře pro každý tým ještě uvedeno barevné číslo značící počet pokusů o vyřešení šifry. Barva je pak podle toho, zda poslední pokus byl úspěšný nebo ne. Nezapomeňte ani na tooltipy, které se objevují nad těmito výsledky. Výsledky sestavte třeba jen pro základní kategorii, veteráni mohou zůstat mimo.

A až to budete mít, tak si zjistěte průměrný čas, za který dokážete odbavit stránku s tabulkou výsledků. Myslím, že pak budete mít trochu námětů k přemýšlení.

Úkol – vlastní databázová vrstva


Geek&Poke (licence)

V současné době používáte mysqli přímo a tak položení dotazu a získání řádku s výsledkem zabere několik řádků v programu. A řádky to mohou být poměrně dlouhé, protože téměř každou vstupní proměnnou musíte ošetřit pomocí real_escape_string a před to se musí furt psát něco jako $GLOBALS['mysqli']-> atp. A to už nemluvíme o tom, že se o případné chybě v dotazu nic nedozvíte, protože neošetřujete SQL chyby, to by bylo zase pár řádků navíc.

Pojďte si trošku šetřit svůj čas i nervy. Naprogramujte si databázovou vrstvu, která vás odstíní od přímé práce s mysqli objektem. Měla by mít následující vlastnosti:

Příklad použití:

    /* Vkládání s automatickým ošetřením. */
    query("INSERT INTO lide SET jmeno = ?, prijmeni = ?, vek = ?", $jmeno, $prijmeni, $vek);

    /* Vypsání víceřádkového výsledku z databáze. */
    $result = query("SELECT jmeno, prijmeni, vek FROM lide WHERE vek >= ?", $minimalni_vek);
    while($row = $result->fetch_assoc())
    {
        echo "jmeno: ".htmlspecialchars($row['jmeno']).", prijmeni: ".htmlspecialchars($row['prijmeni']).", vek: ".htmlspecialchars($row['vek'])."<br>";
    }

    /* Získání jediného řádku z výsledku, fetch se provede automaticky uvnitř funkce. */
    $row = query_row("SELECT MIN(vek) AS minimum, MAX(vek) AS maximum, AVG(vek) AS prumer FROM lide");
    echo "minimum: ".$row['minimum'].", max: ".$row['maximum'].", prumer: ".$row['prumer']."<br>";

    /* Získání jediné buňky z výsledku, dostaneme rovnou hodnotu. */
    $pocet = query_cell("SELECT COUNT(*) FROM lide");
    echo "celkem: $pocet lidi";
    

XKCD

Doporučená literatura

OWASP Top Ten

Přehled nejrozšířenějších typů zranitelností webových aplikací se stručným vysvětlením principu a obrany proti nim.

Cliff Stoll: Kukaččí vejce

Elektronická verze známé knihy, ve které autor popisuje pravdivé události, které se mu staly, když neznámý útočník napadl velké servery v Berkley. Kniha připomíná detektivní román a je psána velmi čtivou formou. Popisuje honbu za neznámým kyberzločincem.