LAB04 - nvbach91/4IZ278-2020-2021-LS GitHub Wiki

Cvičení 04 - File is the path to the dark site.

Povinná četba (na doma)

Náplň cvičení

  • další postupy validace vstupů a jejich čištění i z pohledu bezpečnosti
  • potlačení warningů
  • redirect
  • posílání mailu
  • file system
  • užitečné konstanty
  • kontrola existence souborů
  • výpis obsahu adresáře
  • čtení a zápis dat do souborů
  • načtení CSV záznamů ze souboru do pole
  • výpis informací ze souboru
  • manipulace se soubory

Možná stihneme

Bodovaná samostatná práce na cvičení

  • Naimplementujte registraci uživatele s následujícími funkcionalitami:
    • Validace vstupů, čištění a upozorňování na chybné vstupy
    • Kontrola již existujího uživatele v souboru users.db podle e-mailu (nesmí být tedy stejný e-mail dvakrát)
    • Při neúspěšné registraci vhodně zobrazte upozornění o konkrétní chybě (nevalidní vstupy, již použitý e-mail), formulář zůstane vyplněný jako ve stavu před odesíláním
    • Po úspěšné registraci přesměrujte uživatele na stránku login.php, kde je mu zobrazena hláška o úspěšné registraci (pouze po registraci), a zde se může přihlásit pomocí přihlašovacího formuláře pomocí e-mailu a hesla. Do inputu předvyplňte zaregistrovaný e-mail z registrace
    • Při neúspěšném přihlášení vhodně zobrazte upozornění o konkrétní chybě (neexistující uživatel, špatné heslo, ...)
    • Po úspěšném přihlášení jen vypište hlášku o úspěšném přihlášení
  • Vytvořte stránku /admin/users.php, kde budou zobrazeni všichni zaregistrovaní uživatelé v seznamu
  • U jednoho svého spolužáka se zaregistrujte a zkontrolujte funkčnost jeho řešení

Postup

  • Do složky cv04 si připravte web s registračním formulářem z předchozího cvičení do souboru registration.php
  • Vytvořte prázdný textový soubor users.db, do kterého budete zapisovat údaje z registrace v podobě CSV s oddělovačem např. tabulátor. U tohoto souboru je potřeba přidat PHP právo na zápis (po nahráváni v WinSCP u tohoto souboru vyberte Properties a zaškrtněte W pro Others).

image

  • V formuláři nechte pouze Jméno, E-mail a přidejte dvě pole Heslo a Potvrdit Heslo
  • Naimplementujte validaci těchto vstupů, případně vyhoďte nepotřebné validace z minulého cvičení
  • Naimplementujte funkci fetchUsers() pro načítání záznamů o uživateli ze souboru users.db do asociativního pole s e-maily jako klíče
  • Naimplementujte funkci fetchUser() pro vyhledávání jednoho uživatele podle e-mailu ze souboru users.db, tj. načtěte obsah souboru, proiterujte všechny záznamy a pokud narazíte na určený e-mail, nalezený záznam převeďte do asociativního pole a vraťte ho. Pokud to nic nenajde, vraťte null.
  • Po úspěšné validaci vstupů zavolejte funkci registerNewUser(), kterou si naimplementujte následovně:
    • načtěte obsah souboru users.db do asociativního pole pomocí funcke fetchUsers()
    • zkontrolujte, zda pole neobsahuje e-mail z registrace
      • pokud to obsahuje, vraťte příslušnou zprávu o selhání
      • pokud to neobsahuje, údaje z formuláře naformátujte jako CSV záznam a připište ho do souboru users.db a poté vraťte zprávu o úspěchu
    • po úspěšné registraci pošlete uživateli zprávu ohledně úspěšné registrace pomocí funkce mail() (pozor: server eso.vse.cz nepustí e-maily ven mimo doménu vse.cz)
    • a poté přesměrujte uživatele na stránku login.php s parametrem email
  • Na stránce login.php zjistěte parametr email z GET požadavku a vypište jeho hodnotu do inputu pro e-mail, a podle toho zobrazte hlášku o úspěšné registraci
  • Po odeslání přihlašovacího formuláře zvalidujte vstupy a poté zavolejte funkci authenticate(), kterou si naimplementujte následovně:
    • zavolejte funkci fetchUser()
    • pokud to nic nenašlo vypište upozornění o neexistujícím uživateli
    • pokud to uživatele našlo, porovnejte heslo z db a z formuláře a rozhodněte o výsledku přihlášení, tj. v případě úspěchu vypište zelenou hlášku a v opačném případě vypište červenou hlášku
  • Na stránce /admin/users.php si znovu načtěte všechny uživatele v souboru users.db a pomocí cyklu je všechny vypište do HTML
  • ukázka řešení: https://eso.vse.cz/~nguv03/cv04/
  • 1 bod dostanete až po

Povinný domácí úkol