TOP 10 Najtrudniejszych zadan PHP - Egzamin INF.03
Ranking najtrudniejszych zadan z PHP z egzaminow INF.03
#1 -- inf03_2025_06_06 (Trudnosc: 10/10)
Temat: Biblioteka miejska -- system rezerwacji ksiazek
Polecenie z arkusza:
Skrypty lacza sie z serwerem bazodanowym na localhost, uzytkownik root bez hasla, baza danych biblioteka.
- Skrypt 1: wyswietla 20 razy grafike obraz.png. Nalezy zastosowac instrukcje iteracyjna (petle).
- Skrypt 2 w sekcji "Liryka": wysyla do bazy zapytanie 1. Ze zwroconych wierszy generuje kolejne opcje listy rozwijanej (tytul jest trescia opcji, id jest przypisane do atrybutu value). Skrypt 2 do sekcji "Epika" i "Dramat" nalezy powielić i dostosowac.
- Skrypt 3: jezeli dokonano wyboru w liscie rozwijanej liryki -- wysyla zapytanie 5 z wartoscia id wyslana przez formularz, wyswietla paragraf "Ksiazka
zostala zarezerwowana", wysyla zmodyfikowane zapytanie 4 (UPDATE). Skrypt 3 do sekcji "Epika" i "Dramat" nalezy powielić i dostosowac. - Skrypt 4: wysyla zapytanie 2 (JOIN). Kazdy zwrocony wiersz wyswietla w elemencie listy: tytul, id czytelnika i date oddania.
Dlaczego najtrudniejsze: Absolutny rekord -- 3 osobne formularze POST, 9 zapytan SQL, SELECT + UPDATE w jednym procesie, JOIN, petla for generujaca obrazki w headerze. Najdluzszy i najbardziej zlozony plik PHP ze wszystkich egzaminow.
Na co zwrocic uwagę:
- 3 formularze POST na jednej stronie -- kazdy z osobnym
namena buttonie isset($_POST["rezerwujLiryka"])-- rozpoznawanie ktory formularz wyslano- SELECT do pobrania tytulu + UPDATE do zmiany flagi -- dwie operacje po jednym POST
- Dynamiczne generowanie
<option>w petli while - JOIN w sekcji zaleglych ksiazek
- Petla
fordo generowania obrazkow w headerze
#2 -- inf03_2026_01_04 (Trudnosc: 9/10)
Temat: System informacji maturalnej -- 2 pliki PHP
Polecenie z arkusza:
Skrypty lacza sie z serwerem bazodanowym na localhost, uzytkownik root bez hasla, baza danych matura.
- Skrypt 1: w bloku "Przedmioty" wysyla zapytanie 2 i wyswietla dane oddzielone spacja. W bloku "Lata" wysyla zapytanie 3 i wyswietla dane oddzielone spacjami i myslnikiem. W bloku "Najlepszy wynik" wysyla zapytanie 4 i wyswietla dane ze znakiem %. W bloku "Najgorszy wynik" wysyla zmodyfikowane zapytanie 4 (zmiana sortowania na rosnacy).
- Skrypt 2 (index.php): wysyla zapytanie 1. Dla kazdego wiersza definiuje odnosnik -- tresc: "
. ", adres: strona wynik.php z przeslanymi metoda GET parametrami id, imie i nazwisko. - Skrypt 3 (wynik.php): w naglowku wyswietla imie i nazwisko przeslane metoda GET. Wysyla zmodyfikowane zapytanie 5 (dane dla ucznia o id przeslanym GET). Dla kazdego wiersza wyswietla rok i sesje w naglowku trzeciego stopnia, nazwe przedmiotu i punkty w paragrafie.
Dlaczego trudne: Jedyne zadanie z DWOMA plikami PHP ktore wspolpracuja ze soba. Przekazywanie danych przez GET, AVG + GROUP BY, MIN/MAX, 5+ zapytan SQL.
Plik index.php:
Plik wynik.php:
Na co zwrocic uwagę:
- Budowanie linkow z parametrami GET:
wynik.php?id=...&imie=...&nazwisko=... - Odczytywanie GET na drugiej stronie:
$_GET['id'],$_GET['imie'] - AVG + GROUP BY + ORDER BY DESC + LIMIT 1 -- "znajdz najlepsza srednia"
- JOIN miedzy arkusz a wynik po kolumnie symbol
- 2 pliki wspolpracujace -- to jedyne takie zadanie!
#3 -- inf03_2026_01_10 (Trudnosc: 9/10)
Temat: Blog kulinarny -- przepisy z alergenami
Polecenie z arkusza:
Skrypty lacza sie z serwerem bazodanowym na localhost, uzytkownik root bez hasla, baza danych przepisy. Jesli do strony zostala przeslana wartosc metoda GET, zmienna jest inicjowana ta wartoscia. W przeciwnym wypadku, zmienna jest inicjowana wartoscia 7 (dalej nazywana ID).
- Skrypt 1: wysyla zapytanie 2 (zmodyfikowane -- sprawdzana jest zmienna ID). Wyswietla wartosc zwrocona polem rodzaj.
- Skrypt 2: wysyla zapytanie 1 (zmodyfikowane -- sprawdzana jest zmienna ID). Wyswietla naglowek drugiego stopnia z nazwa potrawy. Paragraf o tresci "Trudnosc:
, Kalorie: ", gdzie przyjmuje wartosci: "latwe" dla 1, "srednie" dla 2, "trudne" dla 3. - Skrypt 3: wysyla zapytanie 3 (zmodyfikowane -- sprawdzana jest zmienna ID). Wyswietla oddzielone spacja nazwy wszystkich alergenow zwroconych z bazy.
- Skrypt 4: wysyla zapytanie 4 (zmodyfikowane -- sprawdzana jest zmienna ID). Wyswietla wartosc pola przepis. Pole plik powinno zostac uzyte do ustawienia tla sekcji stylem CSS inline.
Dlaczego trudne: Relacja wiele-do-wielu (3-tabelowy JOIN), strtoupper(), logika warunkowa trudnosci, dynamiczne tlo CSS, nawigacja GET.
Na co zwrocic uwagę:
- 3-tabelowy JOIN: potrawy -> lista_alergenow -> alergeny (wiele-do-wielu)
strtoupper()-- zmiana na wielkie litery- if/elseif/else -- mapowanie liczby na tekst (1='latwe', 2='srednie', 3='trudne')
<?= ... ?>-- skrocony echo w atrybucie HTML- Domyslna wartosc GET:
$id = 7; if (isset($_GET['id'])) $id = $_GET['id']; - 4 osobne zapytania SQL
#4 -- inf03_2024_06_03 (Trudnosc: 9/10)
Temat: Monitoring poziomu rzek z filtrami
Polecenie z arkusza:
Skrypty lacza sie z serwerem bazodanowym na localhost, uzytkownik root bez hasla, baza danych rzeki.
- Skrypt skojarzony z formularzem: po wyslaniu danych z formularza, wyswietla dane w tabeli w zaleznosci od wybranego pola opcji: wszystkie dane wodomierzy (zapytanie 2), dane wodomierzy z przekroczonym stanem ostrzegawczym (zapytanie 3 lub zapytanie 2 z odpowiednim warunkiem), dane wodomierzy z przekroczonym stanem alarmowym (zmodyfikowane zapytanie 3 lub zapytanie 2 z odpowiednim warunkiem).
- Skrypt 2: wysyla do bazy zapytanie 4. Kazdy zwrocony wiersz jest wyswietlany w paragrafie o tresci: ":
", gdzie dane sa pobierane z bazy danych. Na koncu zamykane jest polaczenie z serwerem.
Dlaczego trudne: switch/case z radio buttonami POST, JOIN z porownaniem kolumn (stanWody > stanOstrzegawczy), AVG + GROUP BY, obsluga stanu domyslnego.
Na co zwrocic uwagę:
switch/casez wartosciami radio buttonow -- 3 warianty zapytaniastanWody > stanOstrzegawczy-- porownanie KOLUMN z roznych tabel po JOINie- Stan domyslny:
!isset($_POST['pokaz'])-- co pokazac przy pierwszym ladowaniu $row[0]zamiast$row['nazwa']-- dostep po indeksie (tez dziala!)- AVG + GROUP BY w drugiej sekcji
#5 -- inf03_2024_06_05 (Trudnosc: 8/10)
Temat: Internetowy komis samochodowy
Polecenie z arkusza:
Skrypty lacza sie z serwerem bazodanowym na localhost, uzytkownik root bez hasla, baza danych kupauto.
- Skrypt 1: wysyla zapytanie 2. W pierwszym bloku glownym wyswietla: obraz (zrodlo: pole zdjecie, alt: "oferta dnia"), naglowek h4 "Oferta Dnia: Toyota
", paragraf "Rocznik: , przebieg: , rodzaj paliwa: ", naglowek h4 "Cena: ". - Skrypt 2: wysyla zapytanie 3. Kazdy wiersz wyswietlony w osobnym bloku z obrazem, naglowkiem h4 z marka i modelem, paragrafem z rocznikiem, naglowkiem h4 z cena. Cztery bloki obok siebie.
- Skrypt 3: wysyla zapytanie 1. Zwrocone nazwy marek sa elementami listy rozwijalnej.
- Skrypt 4: po zatwierdzeniu formularza wysyla zmodyfikowane zapytanie 4 (sprawdzana nazwa marki z listy). Kazdy wiersz w osobnym bloku z obrazem, naglowkiem z marka i modelem, naglowkiem z cena.
Dlaczego trudne: 4 rozne zapytania SQL, 2 JOINy, dynamiczny select z bazy, formularz wyszukiwania, generowanie blokow div z obrazkami.
Na co zwrocic uwagę:
- 4 niezalezne zapytania SQL na jednej stronie
- 2x JOIN samochody z markami (oferty + wyszukiwanie)
- Dynamiczny
<select>generowany z bazy - WHERE z kolumna z formularza POST:
WHERE nazwa = '$marka' - Generowanie blokow
<div class='blok'>z danymi i obrazkami
#6 -- inf03_2025_06_09 (Trudnosc: 8/10)
Temat: Serwis remontowy -- 2 formularze na jednej stronie
Polecenie z arkusza:
Skrypty lacza sie z serwerem bazodanowym na localhost, uzytkownik root bez hasla, baza danych remonty.
- Skrypt 1: wykonywany tylko gdy wypelniono formularz. Wysyla zapytanie 2 zmodyfikowane tak, ze w warunku podana jest wartosc wyslana z formularza. Dla kazdego zwroconego wiersza wypisuje paragraf o tresci "
, pracownikow". - Skrypt 2: wysyla zapytanie 3. Kazde zwrocone miasto jest trescia opcji listy rozwijanej.
- Skrypt 3: wykonywany tylko gdy wypelniono formularz. Wysyla zapytanie 4 zmodyfikowane tak, ze w warunku podane sa nazwa miasta i rodzaj remontu wyslane z formularza. Kazde zwrocone imie i cene wypisuje w elementach listy punktowanej, oddzielone znakiem myslnika.
Dlaczego trudne: 2 niezalezne formularze POST (dla klientow i wykonawcow), radio buttony + select, JOIN, DISTINCT + ORDER BY.
Na co zwrocic uwagę:
- 2 formularze POST na jednej stronie -- rozroznianie po
namebuttona - Select dynamiczny z DISTINCT + ORDER BY
- Radio buttony do wyboru typu uslugi
- JOIN klienci z zlecenia + WHERE z dwoma warunkami
- Rozna struktura kazdego formularza (number vs select+radio)
#7 -- inf03_2026_01_07 (Trudnosc: 8/10)
Temat: Serwis pogodowy z warunkowym wyswietlaniem obrazkow
Polecenie z arkusza:
Skrypty lacza sie z serwerem bazodanowym na localhost, uzytkownik root bez hasla, baza danych pogoda.
- Skrypt 1: wysyla zapytanie 3. W pierwszych trzech kolumnach tabeli zapisuje kolejne nazwy miast, krajow i temperatury. Czwarta kolumna wypelniona jest obrazem: slonce.png gdy temperatura powyzej 30°C, deszcz.png gdy ponizej 26°C, chmury.png w innych przypadkach.
- Skrypt 2: wykonywany tylko jezeli zostaly wyslane dane przez klikniecie odnosnika. Wysyla zapytanie 1 zmodyfikowane tak, zeby wybierane byly dane dotyczace wybranego przez uzytkownika miesiaca (w miejscu id miesiaca wstawiona wartosc przeslana metoda GET). Zwrocona temperature wyswietla w naglowku trzeciego stopnia: "
stopni".
Dlaczego trudne: JOIN + warunkowe obrazki (if/elseif/else generuje rozne img w tabeli), nawigacja GET po 12 miesiacach, ROUND(AVG()).
Na co zwrocic uwagę:
- if/elseif/else wewnatrz petli while -- rozne obrazki per wiersz tabeli
- Dynamiczny HTML w komorkach tabeli (img w td)
- GET z 12 linkami nawigacyjnymi (miesiace)
ROUND(AVG(temperatura), 2)-- zaokraglona srednia- JOIN miedzy miejscowosc a pomiary
#8 -- inf03_2025_06_01 (Trudnosc: 8/10)
Temat: Ranking gier komputerowych
Polecenie z arkusza:
Skrypty lacza sie z serwerem bazodanowym na localhost, uzytkownik root bez hasla, baza danych gry.
- Skrypt 1: wysyla zapytanie 3. Zwrocone wiersze sa wyswietlane w elementach listy z sekcji lewej wedlug wzoru: "
". Liczba punktow jest dodatkowo formatowana stylem. - Skrypt 2: wysyla zapytanie 1. Zwrocone wiersze sa wyswietlone w bloku z: obrazem (zrodlo: pole zdjecie, alt: pole nazwa, dymek: pole id), paragrafem z nazwa zdjecia.
- Skrypt 3 (formularz w stopce): jezeli wpisano id do pola edycyjnego, wysyla zapytanie 2 zmodyfikowane tak, ze wybierany jest wiersz o podanym id. Wyswietla w naglowku h2: "
, punktow, zl" oraz opis w paragrafie. - Skrypt 4 (formularz z sekcji prawej): jezeli wypelniono pole nazwa, wysyla zmodyfikowane zapytanie 4 z wartosciami z formularza, liczba punktow wynosi 0.
Dlaczego trudne: 2 formularze POST (dodaj gre + pokaz opis), INSERT, LEFT() w SQL, header("location:") redirect, ORDER BY DESC LIMIT, walidacja !empty.
Na co zwrocic uwagę:
INSERT INTO gry VALUES (NULL, ...)-- NULL na auto_incrementheader("location: gry.php")-- przekierowanie po INSERT (zapobiega podwojnemu wysylaniu)LEFT(opis, 100)-- obciecie tekstu w SQL (nie w PHP!)!empty()-- walidacja czy pole nie jest puste- ORDER BY punkty DESC LIMIT 5 -- top 5
#9 -- inf03_2025_06_07 (Trudnosc: 8/10)
Temat: Biuro turystyczne -- symulacja ceny wycieczki
Polecenie z arkusza:
Skrypty lacza sie z serwerem bazodanowym na localhost, uzytkownik root bez hasla, baza danych wyprawy.
- Skrypt 1: wysyla zapytanie 1. Kazde zwrocone miejsce wycieczki wypisuje jako element listy rozwijanej.
- Skrypt 2: sprawdza, czy z formularza zostaly wyslane dane. Jezeli tak: wysyla zapytanie 2 zmodyfikowane (sprawdzane jest miejsce wycieczki wyslane z formularza). Wylicza wartosc wycieczki na podstawie liczby doroslych i dzieci oraz ceny zwroconej zapytaniem, przy czym dzieci placa polowe ceny. Wyswietla paragraf "W dniu:
" i paragraf " zlotych". - Skrypt 3: wysyla zapytanie 3. Dla kazdego wiersza tworzy blok z klasa CSS wycieczka zawierajacy: obraz, naglowek h2 z nazwa miejsca, paragraf z cena.
Dlaczego trudne: Formularz z 4 polami (select dynamiczny + 2x number + date), obliczenia matematyczne (cena * (dorosli + dzieci/2)), LIKE w SQL.
Na co zwrocic uwagę:
- Obliczenia:
cena * (dorosli + dzieci/2)-- dzieci za polowe ceny - 4 pola formularza: select, 2x number, date
- Pobranie ceny z bazy, obliczenie w PHP, wyswietlenie wyniku
- LIKE '0%' -- filtrowanie po poczatku nazwy pliku
#10 -- inf03_2025_06_04 (Trudnosc: 7/10)
Temat: Firma przewozowa -- lista zadan z dodawaniem i usuwaniem
Polecenie z arkusza:
Skrypty lacza sie z serwerem bazodanowym na localhost, uzytkownik root bez hasla, baza danych przewozy.
- Skrypt 1: wysyla zapytanie 1. Kolejne zwrocone pola zadanie i data sa wyswietlane w kolejnych wierszach tabeli w dwoch pierwszych kolumnach. Trzecia kolumna tabeli zawiera odnosnik o tresci "Usun". Jego wybranie powoduje usuniecie rekordu z bazy za pomoca zmodyfikowanego zapytania 3 (odnosnik dotyczy id_zadania dla wiersza tabeli w ktorym jest umieszczony).
- Skrypt 2: dane pobrane z formularza wstawia do bazy za pomoca zmodyfikowanego zapytania 2. Zadanie jest przypisane do osoby o id rownym 1.
Dlaczego trudne: Jedyne zadanie z obsluga GET i POST na jednej stronie, DELETE przez link GET, INSERT przez formularz POST, header("location:") po obu operacjach.
Na co zwrocic uwagę:
- GET do usuwania: link
przewozy.php?id_zadania=5wywoluje DELETE - POST do dodawania: formularz z polami text i date
header("location: przewozy.php")-- redirect po obu operacjach- Dynamiczne generowanie linkow "Usun" z ID w tabeli
- Mieszanie GET i POST na jednej stronie -- rozne akcje
Podsumowanie
Najtrudniejsze koncepcje PHP na egzaminie INF.03:
- Wiele formularzy POST na jednej stronie (rozroznianie po name buttona)
- 2 pliki PHP wspolpracujace przez GET
- SELECT + UPDATE w jednym procesie (odczyt + zmiana)
- Dynamiczne generowanie selectow z bazy danych
- switch/case z radio buttonami
- JOIN w zapytaniach SQL wewnatrz PHP
- header("location:") -- przekierowanie po INSERT/DELETE
- Obliczenia matematyczne z danymi z bazy i formularza
- Warunkowe generowanie HTML (rozne obrazki per wiersz)
- LEFT() -- obcinanie tekstu w SQL