LAB04 - nvbach91/4IZ278-2020-2021-LS GitHub Wiki
Cvičení 04 - File is the path to the dark site.
Povinná četba (na doma)
- https://github.com/4iz278/cviceni/tree/master/02-retezce-soubory
- https://github.com/4iz278/cviceni/tree/master/03-objekty
- https://github.com/4iz278/cviceni/tree/master/04-objekty-II-validace
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
- rozchození + průvodce https://eso.vse.cz/phpMyAdmin
- opakování SQL
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 souboruregistration.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ěteW
proOthers
).
- 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 souboruusers.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 souboruusers.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ťtenull
. - 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í funckefetchUsers()
- 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čtěte obsah souboru
- 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
- zavolejte funkci
- Na stránce
/admin/users.php
si znovu načtěte všechny uživatele v souboruusers.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
- nahrání programu na GitHub přes PullRequest včetně odkazu https://eso.vse.cz/~xname/cv04/
- jeho schválení viz návod
Povinný domácí úkol
- Zkouknout tento tutoriál SQL - Full course for beginners - https://youtu.be/HXV3zeQKqGY