Część 21 kursu PHP INF.03: Finał egzaminacyjny i symulacje arkuszy CKE / EE.09. 16 przekrojowych zadań łączących bazę danych, walidację, sesje, pliki i architekturę aplikacji.
Symulacja arkusza ma ograniczony czas i kilka niezależnych wymagań. Najlepszy plan to podział na etapy: baza, formularz, logika, wyświetlanie, zabezpieczenia.
// Kolejnosc pracy z symulacja
// 1. utworz tabele i wstaw dane startowe
// 2. zrob formularz z wymaganymi polami
// 3. odbierz i sprawdz dane
// 4. zapisz rekord
// 5. pokaz tabele wynikow
// 6. sprawdz polskie znaki i komunikaty
echo 'Etapy zaplanowane';
// Kolejnosc pracy z symulacja
// 1. utworz tabele i wstaw dane startowe
// 2. zrob formularz z wymaganymi polami
// 3. odbierz i sprawdz dane
// 4. zapisz rekord
// 5. pokaz tabele wynikow
// 6. sprawdz polskie znaki i komunikaty
echo 'Etapy zaplanowane';
Jak podzielić pracę?
Poprawna: c) Etapy pozwalają sprawdzać efekt na bieżąco.
W czystym arkuszu PHP zwykle łączy się z bazą i obsługuje formularz. Kluczowe jest poprawne połączenie: host, użytkownik, hasło i nazwa bazy muszą pochodzić z treści zadania.
$pdo = new PDO('mysql:host=localhost;dbname=egzamin;charset=utf8mb4', 'root', '');
$stmt = $pdo->prepare('INSERT INTO zgloszenia (imie, email, klasa) VALUES (?, ?, ?)');
$stmt->execute([$imie, $email, $klasa]);
$lista = $pdo->query('SELECT imie, klasa FROM zgloszenia ORDER BY imie')->fetchAll();
foreach ($lista as $w) {
echo '<tr><td>' . htmlspecialchars($w['imie']) . '</td></tr>';
}
$pdo = new PDO('mysql:host=localhost;dbname=egzamin;charset=utf8mb4', 'root', '');
$stmt = $pdo->prepare('INSERT INTO zgloszenia (imie, email, klasa) VALUES (?, ?, ?)');
$stmt->execute([$imie, $email, $klasa]);
$lista = $pdo->query('SELECT imie, klasa FROM zgloszenia ORDER BY imie')->fetchAll();
foreach ($lista as $w) {
echo '<tr><td>' . htmlspecialchars($w['imie']) . '</td></tr>';
}
Skąd brać dane połączenia?
Poprawna: d) Host, użytkownik i baza są podane w arkuszu.
Część SQL zwykle zaczyna się od struktury: tabela z kluczem głównym i kolumnami o wskazanych typach. Nazwy muszą być zgodne z treścią, nawet jeśli wydają się niezgrabne.
CREATE TABLE zgloszenia (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(50) NOT NULL,
klasa VARCHAR(10) NOT NULL,
data DATE NOT NULL
);
INSERT INTO zgloszenia (imie, klasa, data) VALUES ('Ola', '3TI', '2026-03-04');
SELECT klasa, COUNT(*) AS ile
FROM zgloszenia
GROUP BY klasa
ORDER BY ile DESC;
CREATE TABLE zgloszenia (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(50) NOT NULL,
klasa VARCHAR(10) NOT NULL,
data DATE NOT NULL
);
INSERT INTO zgloszenia (imie, klasa, data) VALUES ('Ola', '3TI', '2026-03-04');
SELECT klasa, COUNT(*) AS ile
FROM zgloszenia
GROUP BY klasa
ORDER BY ile DESC;
Od czego zacząć część SQL?
Poprawna: c) Najpierw powstaje tabela zgodna z opisem.