PHP - aplikacje webowe (INF.03)
Naucz się PHP i połącz go z bazą danych - gotowy na zadanie praktyczne INF.03
Od podstaw PHP do budowy aplikacji webowej z bazą danych. Formularze, walidacja, sesje, PDO, prepared statements i bezpieczeństwo. Z prawdziwym interpreterem PHP w przeglądarce.
Moduły kursu
M1 Wprowadzenie do PHP 5 lekcji
-
Czym jest PHP - język po stronie serwera
Jak działa PHP: przeglądarka → serwer → PHP → HTML. PHP vs JavaScript, cykl życia strony, zastosowania w INF.03.
-
Składnia podstawowa: echo, znaczniki, komentarze
Znaczniki <?php ?>, echo, print, komentarze, średniki. Mieszanie PHP z HTML - dynamiczna strona krok po kroku.
-
Zmienne i typy danych: string, int, float, bool, null
Tworzenie zmiennych w PHP ($), siedem typów danych, var_dump(), gettype(), konwersja typów, konkatenacja stringów.
-
Stałe i zmienne predefiniowane (superglobals)
define(), const, stałe wbudowane PHP. Wprowadzenie do superglobals: $_GET, $_POST, $_SESSION, $_SERVER.
-
Operatory: arytmetyczne, porównania, logiczne (== vs ===)
Wszystkie operatory PHP: arytmetyczne, przypisania, porównania. Kluczowa różnica == vs ===, null coalescing ??, operator trójargumentowy.
M2 Instrukcje sterujące 5 lekcji
-
Instrukcje warunkowe: if, else, elseif
if, else, elseif, zagnieżdżone warunki. Operator trójargumentowy ?:, null coalescing ??, wartości falsy w PHP.
-
switch i match - wielokrotne rozgałęzienie
switch z fall-through i break. match (PHP 8): strict comparison, brak fall-through, zwraca wartość. Kiedy co używać.
-
Pętle while i do-while
while - sprawdza warunek przed iteracją. do-while - wykonuje co najmniej raz. Typowe wzorce, pułapka pętli nieskończonej.
-
Pętle for i foreach - klucz do bazy danych
for z licznikiem, foreach po tablicach. Wzorzec foreach + fetchAll(FETCH_ASSOC). Modyfikacja przez referencję &. Zagnieżdżanie pętli.
-
break i continue - sterowanie pętlą
break - wyjście z pętli. continue - pominięcie iteracji. break/continue z liczbą przy pętlach zagnieżdżonych. Wzorzec wyszukiwania.
M3 Tablice 5 lekcji
-
Tablice indeksowane - tworzenie, dostęp, modyfikacja
Tablica indeksowana: tworzenie [], dostęp przez indeks [0], dodawanie [], count(), unset(). Iteracja foreach i for.
-
Tablice asocjacyjne - klucz => wartość (format PDO)
Tablice z nazwanymi kluczami: ['klucz' => wartość]. Dostęp, isset vs array_key_exists, iteracja foreach z kluczem. Format fetchAll(FETCH_ASSOC).
-
Tablice wielowymiarowe - lista wierszy z bazy
Tablice tablic: [[...], [...]]. Dostęp [0]['klucz'], iteracja zagnieżdżona. Identyczna struktura co fetchAll(FETCH_ASSOC).
-
Funkcje tablicowe: sort, implode, explode, map, filter
sort/rsort/usort, array_push/pop, in_array, array_search, implode/explode, array_map, array_filter, array_unique, array_merge.
-
Wzorce foreach z tablicą asocjacyjną - baza danych w praktyce
Kluczowe wzorce: tabela HTML z fetchAll, grupowanie wyników, obliczenia przy iteracji, alternatywna składnia PHP w HTML, htmlspecialchars.
M4 Funkcje 6 lekcji
-
Funkcje - definiowanie, parametry, return
Definiowanie funkcji, parametry, return. Funkcje zwracające tablice. Deklaracje typów PHP 7+. Hermetyzacja logiki.
-
Parametry domyślne, referencje i named arguments
Parametry domyślne (opcjonalne na końcu), przekazanie przez wartość vs &referencję. Named arguments PHP 8. Variadic ...
-
Zasięg zmiennych: lokalny, globalny, static
Zasięg lokalny funkcji vs globalny. global $x, $GLOBALS. Zmienne statyczne - pamięć między wywołaniami. Stałe nie mają zasięgu.
-
Funkcje anonimowe i arrow functions
Closure: funkcja jako wartość, use do przechwycenia zmiennych. Arrow functions fn=> (PHP 7.4): automatyczne przechwytywanie. Callbacks w usort, array_map, array_filter.
-
Wbudowane funkcje tekstowe: mb_strlen, str_replace, sprintf
mb_strlen/mb_substr/mb_strtolower dla UTF-8, strpos, str_replace, trim, sprintf z formatowaniem, number_format dla cen PLN, htmlspecialchars.
-
Funkcje daty i czasu: date, time, strtotime, DateTime
Unix timestamp, date() z formatami, strtotime(), mktime(). Klasa DateTime i DateTimeImmutable, diff(). Daty z bazy SQL.
M5 Formularze i dane od użytkownika 7 lekcji
-
Metody HTTP: GET vs POST - kiedy która
Różnice GET i POST: widoczność, idempotentność, bezpieczeństwo, długość. Kiedy używać której. http_build_query do bezpiecznych URL.
-
$_GET - odczyt parametrów z URL, paginacja, filtrowanie
Bezpieczny odczyt: ?? i rzutowanie. Biała lista dla sortowania. Paginacja z LIMIT/OFFSET. Filtrowanie listy. Pułapki SQL injection.
-
$_POST - formularze HTML i zapis do bazy
Typy pól (text, select, checkbox, radio, textarea). Self-submitting form. Walidacja, zachowanie wartości po błędzie. PRG pattern. Zapis przez prepared statement.
-
$_REQUEST i $_SERVER - superglobals i info o żądaniu
$_REQUEST: GET+POST+COOKIE, kiedy unikać. $_SERVER: REQUEST_METHOD, REMOTE_ADDR, HTTPS, REQUEST_URI. Prosty router, bezpieczne użycie HTTP_* nagłówków.
-
Przetwarzanie formularza
Kompletny cykl: wyświetlenie, walidacja, zapis. Formularz edycji vs. dodawania, wzorzec PRG.
-
Walidacja i sanityzacja danych
isset/empty (pułapka z "0"), trim, filter_var - email, int, float. htmlspecialchars jako tarcza przed XSS.
-
Błędy walidacji i UX formularzy
Komunikaty przy polach, zachowanie wartości po błędzie, CSS klas .blad, aria-invalid/aria-describedby.
M6 Sesje, cookies, pliki 5 lekcji
-
Sesje - $_SESSION
session_start(), zapis/odczyt $_SESSION, wzorzec logowania, session_regenerate_id(), wylogowanie, flash messages.
-
Ciasteczka - $_COOKIE
setcookie() z tablicą opcji (PHP 7.3+), odczyt $_COOKIE, usuwanie, wzorzec "Zapamiętaj mnie", RODO.
-
include i require
Podział kodu na pliki: include/require/_once, __DIR__, wspólny zasięg zmiennych, guard auth_check.php.
-
Operacje na plikach
file_get_contents, file_put_contents (FILE_APPEND), fgetcsv/fputcsv, fopen/fread, file_exists, pathinfo.
-
Przesyłanie plików - $_FILES
enctype multipart/form-data, struktura $_FILES, kody UPLOAD_ERR_*, bezpieczny upload z finfo i random_bytes.
M7 PHP + baza danych (PDO) 9 lekcji
-
PDO - wprowadzenie
Po co PHP + baza? PDO vs mysqli, architektura PHP↔DB, prepared statements jako ochrona przed SQL Injection.
-
PDO - połączenie z bazą
new PDO(DSN, user, pass), ERRMODE_EXCEPTION, FETCH_ASSOC, try/catch PDOException, singleton getPdo().
-
PDO - SELECT
query() i prepare()+execute(), fetch() vs fetchAll(), tryby FETCH_ASSOC, fetchColumn() dla COUNT/MAX.
-
Prepared statements i SQL Injection
Jak działa atak SQL Injection, parametry ? i :nazwa, bindValue/bindParam, biała lista dla ORDER BY.
-
Wyświetlanie wyników w tabeli HTML
fetchAll() + foreach, htmlspecialchars przy echo, linki edytuj/usuń, filtrowanie, paginacja.
-
INSERT z formularza
Kompletny cykl POST: walidacja, INSERT prepared statement, lastInsertId(), PRG redirect.
-
UPDATE i DELETE
UPDATE z prepared statement, DELETE przez POST, rowCount(), aktualizacja wybranych kolumn, soft delete.
-
Pełny cykl CRUD
Lista, dodaj, edytuj, usuń w jednym pliku PHP - kompletna mini-aplikacja z PRG i komunikatami.
-
Bezpieczeństwo PHP + baza danych
Złote zasady: prepared statements, ERRMODE_EXCEPTION, htmlspecialchars, biała lista, CSRF, uprawnienia DB.
M8 Podstawy programowania obiektowego 4 lekcji
-
Klasy i obiekty
class, new, właściwości, metody, $this - wprowadzenie do OOP. PDO i DateTime jako przykłady klas w praktyce.
-
Konstruktor i modyfikatory dostępu
__construct, constructor promotion (PHP 8), public/private/protected, gettery/settery, static.
-
Dziedziczenie - extends
extends, parent::, polimorfizm, instanceof, klasy abstract, wzmianka o interfejsach i final.
-
Praktyczna klasa Database
Klasa opakowująca PDO: fetchOne/fetchAll/fetchScalar/execute, singleton, repozytorium, transakcja.
M9 Obsługa błędów i dobre praktyki 3 lekcji
-
Wyjątki - try/catch/finally
Hierarchia wyjątków PHP, throw, finally do sprzątania, wiele catch, własne klasy wyjątków, ponowne rzucanie.
-
Raportowanie błędów PHP
Poziomy błędów (E_ALL, E_ERROR...), dev vs prod (display_errors), error_log(), set_error_handler().
-
Dobre praktyki PHP
Separacja logiki od widoku, konwencje nazewnictwa, DRY, null coalescing ??, typowanie, komentarze.
M10 Powtórki egzaminacyjne 3 lekcji
-
Pułapki PHP z arkuszy CKE
Top 10 błędów na egzaminie: == vs ===, brak isset, brak exit, SQL concatenation, brak htmlspecialchars.
-
Mini-arkusze egzaminacyjne
Pięć fragmentów kodu w stylu CKE INF.03 do uzupełnienia z wyjaśnieniami - formularze, CRUD, PDO.
-
Projekt zintegrowany - mini-aplikacja
Kompletna aplikacja To-Do: formularz+walidacja+PDO+wyświetlenie+CRUD - most do zadania praktycznego INF.03.