INF.03-02-23.01-SGStyczeń 2023 · 39 kroków · ok. 66 min · 33 kryteria z klucza
Rozwiązanie krok po kroku: Witryna pensjonatu z cennikiem (Wersja podstawowa)
Witryna pensjonatu „Pod dobrym humorem” to baza wynajem (pokoje i rezerwacje) z pięcioma zapytaniami - wszystkie wiersze, warunek na liczbie, SUM, UPDATE z warunkiem i CREATE USER z hasłem - trzy zdjęcia pokoi przerobione z BMP na JPEG 300 × 300 w odcieniach szarości oraz trzy strony. index.html ma baner, trzy bloki z odnośnikami i zdjęciami oraz stopkę; cennik.php różni się od niej tylko blokiem środkowym, w którym skrypt PHP wypisuje tabelę cen pokoi; kalkulator.html to strona w budowie. Wspólny arkusz stylów styl2.css daje blokom cień (box-shadow), a odnośnikom zmianę koloru pod kursorem.
Kroki idą zdanie po zdaniu za treścią arkusza - przy każdym jest polecenie z arkusza, a kod pokazuje dokładnie te linie, które je spełniają. Skrypt jest najpierw napisany najprościej, funkcjami z tabeli 1 arkusza (mysqli_query, mysqli_fetch_row), a na końcu przerobiony na wersję z prawdziwych projektów.
To jest wersja podstawowa. W zakładce „Nowoczesny kod (grid, PDO)” jest drugi sposób rozwiązania tego samego arkusza: trzy bloki w siatce CSS wewnątrz znacznika <main>, kolory w zmiennych CSS, a cennik pobierany przez PDO na górze pliku cennik.php i wypisywany pętlą foreach z htmlspecialchars oraz komunikatem, gdy bazy nie da się odczytać - obie wersje są zgodne z kluczem.
Baza i zdjęcia pochodzą z prawdziwego archiwum zad2 (załącznik do arkusza, hasło w treści zadania). Zapytania i zrzuty są policzone na MariaDB 10.4 - tej samej, która jest w XAMPP; konto najemca zostało sprawdzone prawdziwym logowaniem. Podgląd strony cennik.php od kroków z PHP to wynik prawdziwego uruchomienia kodu w PHP 8.2 (klucz każe sprawdzać w XAMPP 8.1.2 - zachowanie tych funkcji jest w obu wersjach takie samo).
Jak liczą się punkty. Klucz ma 33 kryteria (R.1.1 - R.5.4), każde za 1 punkt. Próg zdania części praktycznej to 75%, czyli 25 punktów - można stracić 8 kryteriów i nadal zdać. Przy każdym kroku jest napisane, które kryteria spełnia; egzaminator ocenia spełnienie kryteriów z klucza, nie zgodność z tym kodem.
Suwak i strzałki obok niego - albo ←→ na klawiaturze - przechodzą krok po kroku; wyjaśnienie, pliki i podgląd zmieniają się razem z krokiem.
Lista „Etap” przenosi od razu do wybranego etapu.
„Rozwiązuję samodzielnie” chowa rozwiązanie kroku - najpierw własna próba, potem odsłonięcie.
„Tryb prezentacji” pokazuje same kroki, bez menu strony - na rzutnik.
Etap 1: Baza danych
Kroki 1-8 · po tym etapie masz 7 z 33 kryteriów (pkt)
Krok 1: Baza danych wynajem
ok. 2 min
Polecenie z arkusza
Utwórz bazę danych o nazwie wynajem
Najpierw archiwum zad2.zip z pulpitu (hasło MN52dc%% - z dwoma znakami procentu na końcu) i folder z numerem zdającego, do którego trafiają wynajem.sql i trzy zdjęcia BMP. W phpMyAdmin: Nowa, nazwa wynajem. Arkusz nie podaje porównywania - wybierasz np. utf8_polish_ci. Tabel z wynajem.sql to nie zmienia: obie mają zestaw utf8mb4 zapisany we własnej definicji, a porównywanie bazy dziedziczą tylko tabele zakładane później bez własnego ustawienia.
Typowe błędy
Nazwa bazy musi brzmieć dokładnie wynajem - skrypt łączy się z bazą po nazwie (R.5.1).
Krok 2: Import tabel z pliku wynajem.sql
ok. 2 min
Polecenie z arkusza
Do bazy wynajem zaimportuj tabele z pliku wynajem.sql z rozpakowanego archiwum
Przy zaznaczonej bazie wynajem: Import → wynajem.sql → Wykonaj. Dwie tabele z obrazu 1: pokoje (3 rodzaje pokoi z ceną) i rezerwacje (10 rezerwacji: numer pokoju id_pok, liczba dni liczba_dn i sezon „lato” albo „zima”). Pole id_pok jest kluczem obcym wskazującym pokój.
Krok 3: Zrzut ekranu import.png
Kryteria:
R.1.1 Wykonano import tabel do bazy danych wynajem czynność udokumentowano plikiem o nazwie import w formacie PNG
ok. 2 min
Polecenie z arkusza
Wykonaj zrzut ekranu po imporcie. Zrzut zapisz w formacie PNG i nazwij import. Nie kadruj zrzutu. Powinien on obejmować cały ekran monitora, z widocznym paskiem zadań. Na zrzucie powinny być widoczne elementy wskazujące na poprawnie wykonany import tabel.
Print Screen, wklejenie do edytora grafiki i zapis jako import.png. Uwaga na formaty: import idzie do PNG, a zrzuty zapytań do JPEG.
Typowe błędy
Wykadrowany zrzut albo zrzut bez paska zadań nie jest oceniany (uwaga w kluczu przy R.1).
Krok 4: Zapytanie 1: wszystkie pokoje
Kryteria: ,
R.1.2 Zapisano plik kwerendy.txt zawierający co najmniej jedno zapytanie SQL, wynikające z treści zadania
R.1.3 Utworzono zapytanie 1 wybierające wszystkie wiersze z tabeli pokoje . W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT * FROM pokoje; oraz wynik działania udokumentowano zrzutem, na którym widoczne są wszystkie dane z tabeli: trzy rekordy z polami id, nazwa, cena
ok. 1 min
Polecenie z arkusza
Zapytanie 1: wybierające wszystkie wiersze z tabeli pokoje
SELECT * - wszystkie pola,
FROM pokoje - bez warunku, więc wszystkie wiersze.
Wynik: trzy pokoje z polami id, nazwa, cena - jak w kluczu. Z tego zapytania powstanie skrypt cennika. Zapytania trafiają do kwerendy.txt, zrzut wyniku do kw1.jpg.
kwerendy.txtTekstnowy plik
-- Zapytanie 1SELECT * FROM pokoje;
Podgląd strony po tym kroku
Krok 5: Zapytanie 2: rezerwacje dłuższe niż tydzień
Kryteria:
R.1.4 Utworzono zapytanie 2 wybierające z tabeli rezerwacje jedynie id pokoju oraz sezon dla rezerwacji o liczbie dni przekraczającej tydzień. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT id_pok, sezon FROM rezerwacje WHERE liczba_dn > 7; oraz wynik działania udokumentowano zrzutem, na którym widoczne są dokładnie 3 rekordy z danymi: 1, lato; 3, zima; 1, zima
ok. 2 min
Polecenie z arkusza
Zapytanie 2: wybierające z tabeli rezerwacje jedynie id pokoju oraz sezon dla rezerwacji o liczbie dni przekraczającej tydzień
SELECT id_pok, sezon - numer pokoju (nie numer rezerwacji) i sezon,
FROM rezerwacje,
WHERE liczba_dn > 7 - „przekraczającej tydzień” to więcej niż 7 dni.
Wynik: 3 wiersze - 1, lato; 3, zima; 1, zima - jak w kluczu. Zrzut: kw2.jpg.
Typowe błędy
liczba_dn >= 7 nic tu nie zmienia w wyniku (nie ma rezerwacji na 7 dni), ale nie jest tym, o co prosi arkusz - tydzień „przekroczony” to od 8 dni.
kwerendy.txtTekstzmienione: 3 linie
-- Zapytanie 1SELECT * FROM pokoje;-- Zapytanie 2SELECT id_pok, sezon FROM rezerwacje WHERE liczba_dn > 7;
Podgląd strony po tym kroku
Krok 6: Zapytanie 3: suma dni rezerwacji zimą
Kryteria:
R.1.5 Utworzono zapytanie 3 liczące sumę dni rezerwacji zimą. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT SUM(liczba_dn) FROM rezerwacje WHERE sezon = "zima"; oraz wynik działania udokumentowano zrzutem, na którym widoczna jest wartość 25 lub 27
ok. 2 min
Polecenie z arkusza
Zapytanie 3: liczące sumę dni rezerwacji zimą
SELECT SUM(liczba_dn) - funkcja agregująca dodaje wartości pola ze wszystkich wybranych wierszy,
FROM rezerwacje,
WHERE sezon = 'zima' - tylko rezerwacje zimowe (2 + 6 + 9 + 8 dni).
Wynik: 25. Klucz uznaje też 27 - tyle wychodzi, gdy zapytanie 3 zostanie wykonane już po zapytaniu 4, które dwudniową rezerwację zimową wydłuża do 4 dni (sprawdzone). Zrzut: kw3.jpg.
kwerendy.txtTekstzmienione: 3 linie
-- Zapytanie 1SELECT * FROM pokoje;-- Zapytanie 2SELECT id_pok, sezon FROM rezerwacje WHERE liczba_dn > 7;-- Zapytanie 3SELECT SUM(liczba_dn) FROM rezerwacje WHERE sezon = 'zima';
Podgląd strony po tym kroku
Krok 7: Zapytanie 4: minimum 4 dni rezerwacji
Kryteria:
R.1.6 Utworzono zapytanie 4 aktualizujące liczbę dni rezerwacji, dla rekordów, w których liczba dni jest mniejsza od 4 liczba ta jest ustawiana na 4. W pliku z kwerendami lub na zrzucie istnieje zapis np.: UPDATE rezerwacje SET liczba_dn = 4 WHERE liczba_dn < 4; oraz wynik działania udokumentowano zrzutem, na którym widoczny jest komunikat o poprawnej aktualizacji lub tabela ze zaktualizowanymi danymi
ok. 2 min
Polecenie z arkusza
Zapytanie 4: aktualizujące liczbę dni rezerwacji. Minimalna liczba dni rezerwacji to 4, dla rekordów, w których liczba dni jest mniejsza od 4 liczba ta jest zmieniana na 4
UPDATE rezerwacje - zmiana istniejących wierszy,
SET liczba_dn = 4 - nowa wartość,
WHERE liczba_dn < 4 - tylko krótsze rezerwacje; bez warunku wszystkie rezerwacje dostałyby 4 dni.
Komunikat: „3 wiersze zmienione” (rezerwacje na 2, 3 i 3 dni). Zrzut kw4.jpg pokazuje komunikat i tabelę po zmianie.
Typowe błędy
UPDATE bez WHERE zmienia wszystkie wiersze i nie da się tego cofnąć przyciskiem - wtedy trzeba usunąć tabele i zaimportować bazę od nowa.
kwerendy.txtTekstzmienione: 3 linie
-- Zapytanie 1SELECT * FROM pokoje;-- Zapytanie 2SELECT id_pok, sezon FROM rezerwacje WHERE liczba_dn > 7;-- Zapytanie 3SELECT SUM(liczba_dn) FROM rezerwacje WHERE sezon = 'zima';-- Zapytanie 4UPDATE rezerwacje SET liczba_dn = 4 WHERE liczba_dn < 4;
Podgląd strony po tym kroku
Krok 8: Zapytanie 5: użytkownik najemca z hasłem
Kryteria:
R.1.7 Utworzono zapytanie 5 tworzące użytkownika najemca z hasłem n@JEM1@! W pliku z kwerendami lub na zrzucie istnieje zapis z jawnie zapisanym hasłem np.: CREATE USER najemca IDENTIFIED BY "n@JEM1@!"; oraz wynik działania udokumentowano zrzutem, na którym widoczny jest komunikat o poprawnym dodaniu użytkownika lub dodany użytkownik widoczny jest na liście
ok. 2 min
Polecenie z arkusza
Zapytanie 5: tworzące użytkownika najemca z hasłem n@JEM1@!
CREATE USER 'najemca'@'localhost' - nazwa konta i host, z którego może się logować (tu ten sam komputer),
IDENTIFIED BY 'n@JEM1@!' - hasło zapisane jawnie w zapytaniu, jak wymaga klucz.
Klucz uznaje też zapis bez hosta (CREATE USER najemca IDENTIFIED BY 'n@JEM1@!'), który tworzy konto 'najemca'@'%' - logowanie z dowolnego komputera. Sprawdzone logowanie nowym kontem: działa, ale konto nie ma jeszcze żadnych uprawnień - próba wejścia do bazy wynajem kończy się błędem 1044 „Access denied”. Arkusz o uprawnienia nie prosi. Zrzut kw5.jpg pokazuje komunikat i konto na liście użytkowników.
Typowe błędy
Hasło musi być dokładnie n@JEM1@! - wielkość liter ma znaczenie, a znak ! na końcu łatwo zgubić.
kwerendy.txtTekstzmienione: 3 linie
-- Zapytanie 1SELECT * FROM pokoje;-- Zapytanie 2SELECT id_pok, sezon FROM rezerwacje WHERE liczba_dn > 7;-- Zapytanie 3SELECT SUM(liczba_dn) FROM rezerwacje WHERE sezon = 'zima';-- Zapytanie 4UPDATE rezerwacje SET liczba_dn = 4 WHERE liczba_dn < 4;-- Zapytanie 5CREATE USER 'najemca'@'localhost' IDENTIFIED BY 'n@JEM1@!';
Podgląd strony po tym kroku
Etap 2: Grafika i strony HTML
Kroki 9-25 · po tym etapie masz 17 z 33 kryteriów (pkt)
R.2.1 Przynajmniej jeden obraz 1 , 2 lub 3 zapisano w formacie JPEG w odcieniach szarości i dokładnych wymiarach 300 px na 300 px
ok. 5 min
Polecenie z arkusza
Obrazy 1.bmp, 2.bmp, 3.bmp należy przeskalować bez zachowania proporcji do wymiarów 300 px na 300 px oraz zapisać w odcieniach szarości i w formacie JPEG
Dla każdego z trzech plików w GIMP-ie: Obraz → Skaluj obraz, rozłączony łańcuch między szerokością a wysokością (to jest „bez zachowania proporcji”), 300 i 300. Zdjęcia 1 i 2 mają 3872 × 2592 px, a 3 - 1632 × 1224 px, więc po skalowaniu są ściśnięte w poziomie - tak ma być. Potem Obraz → Tryb → Odcienie szarości i Plik → Wyeksportuj jako1.jpg (2.jpg, 3.jpg). Format zmienia się przez rozszerzenie przy eksporcie - zwykłe Zapisz utworzyłoby plik GIMP-a .xcf. Wynikowe pliki ważą po kilkanaście kilobajtów zamiast 30 MB.
Typowe błędy
Zmiana samego rozszerzenia nazwy w Eksploratorze (1.bmp na 1.jpg) nie zmienia formatu pliku - klucz wymaga JPEG.
Podgląd strony po tym kroku
Krok 10: Plik index.html w HTML5
ok. 1 min
Polecenie z arkusza
Zapisane w języku HTML 5
Deklaracja <!DOCTYPE html> i szkielet strony głównej. Najpierw powstaje cała strona index.html; cennik.php będzie jej kopią z innym blokiem środkowym.
R.3.5 Strona zawiera działające połączenie z zewnętrznym arkuszem stylów o nazwie styl2 , formatowanie pochodzi jedynie z tego arkusza Uwaga: kryterium to nie jest spełnione również, gdy zdający źle przypisał co najmniej jeden selektor do bloku (np. kropka zamiast #)
ok. 1 min
Polecenie z arkusza
Arkusz stylów w pliku o nazwie styl2.css prawidłowo połączony z kodem strony
Nazwa pliku: styl2.css - z cyfrą 2. Całe formatowanie ma pochodzić z tego pliku - żadnych atrybutów style w HTML-u.
Typowe błędy
Klucz odbiera R.3.5 także wtedy, gdy choć jeden selektor nie trafia w blok (np. kropka zamiast #).
R.2.4 Układ strony zdefiniowano dzieląc ją na bloki: baner, lewy, środkowy, prawy i stopka. Zastosowano znaczniki sekcji
ok. 2 min
Polecenie z arkusza
Podział strony na bloki: baner, poniżej obok siebie blok lewy, środkowy i prawy, na dole stopka. Podział zrealizowany za pomocą znaczników sekcji tak, aby po uruchomieniu w przeglądarce wygląd układu bloków był zgodny z obrazem 2
Baner to <header>, stopka <footer>, a trzy bloki - trzy <section>. Wszystkie trzy wyglądają tak samo (ten sam kolor, wymiary i cień), więc nie potrzebują identyfikatorów - w CSS wystarczy selektor section. Obok siebie postawi je arkusz stylów.
R.2.5 W banerze zapisano nagłówek h1: "Pensjonat pod dobrym humorem" oraz paragraf w stopce
ok. 1 min
Polecenie z arkusza
Zawartość stopki: akapit (paragraf) o treści: „Stronę opracował: ”, dalej wstawiony numer zdającego
Akapit <p> w <footer>. Na egzaminie w miejscu imienia i nazwiska wpisuje się numer zdającego, czyli PESEL; w tym rozwiązaniu stoi tam „Bartosz Bryniarski”. Z nagłówkiem <h1> w banerze to kryterium R.2.5.
R.2.7 Na stronie głównej w blokach lewym, środkowym i prawym umieszczono trzy grafiki o nazwach 1 , 2 , 3 (w formacie BMP lub JPEG) i tekście alternatywnym "pokoje"
ok. 1 min
Polecenie z arkusza
Obraz 2.jpg z tekstem alternatywnym „pokoje”
Trzecie zdjęcie - na stronie głównej są już wszystkie trzy obrazy z tekstem „pokoje” (R.2.7).
Krok 24: cennik.php: kopia strony z tabelą zamiast zdjęcia
Kryteria:
R.2.2 Witrynę internetową zapisano w plikach index.html i cennik.php oraz zapisano jawnie standard kodowania polskich znaków i deklarację HTML5 <!DOCTYPE HTML> i zadeklarowano język witryny: polski, np. <html lang="pl">
ok. 2 min
Polecenie z arkusza
Strony index.html i cennik.php różnią się jedynie blokiem środkowym
Plik index.html zapisany pod nazwą cennik.php; w bloku środkowym zostaje odnośnik CENNIK, a zdjęcie 2.jpg zastępuje pusta tabela <table> - wiersze dopisze skrypt. Rozszerzenie .php jest potrzebne, żeby serwer wykonał skrypt; strona działa tylko otwarta przez http://localhost/.... Witryna jest już zapisana w obu plikach, z deklaracją HTML5, kodowaniem i językiem (R.2.2).
R.3.4 Po wybraniu odnośnika KALKULATOR otwiera się strona kalkulator.html
ok. 1 min
Polecenie z arkusza
Na stronie kalkulator.html należy jedynie zapisać „strona w trakcie budowy”
Najkrótsza poprawna strona HTML5 z jednym akapitem. Po tym kroku działa odnośnik KALKULATOR - klucz sprawdza tylko, czy otwiera się kalkulator.html (R.3.4).
kalkulator.htmlHTMLnowy plik
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <title>Wynajem pokoi</title></head><body> <p>strona w trakcie budowy</p></body></html>
Podgląd strony po tym kroku (kalkulator.html)
Etap 3: Styl CSS
Kroki 26-33 · po tym etapie masz 28 z 33 kryteriów (pkt)
Krok 26: Krój czcionki i wyśrodkowanie dla wszystkich elementów
Kryteria:
R.4.1 Ustawiono domyślne formatowanie wszystkich selektorów (*): krój czcionki Garamond, wyrównanie tekstu do środka
ok. 1 min
Polecenie z arkusza
Ustawione domyślne wartości dla wszystkich selektorów stylu CSS: krój czcionki Garamond, wyrównanie tekstu do środka
Selektor uniwersalny *. Wyśrodkowanie dotyczy też obrazów i tabeli w blokach, bo text-align działa na elementy w linii tekstu.
styl2.cssCSSnowy plik
* {font-family: Garamond;text-align: center;}
Podgląd strony po tym kroku (index.html)
Krok 27: Ciało strony: kolor tła
ok. 1 min
Polecenie z arkusza
Dla selektora ciała strony: kolor tła Lavender
Selektor body. Lavender (lawendowy) to nazwa koloru z listy CSS - bez # i cudzysłowu.
R.3.1 Układ bloków po uruchomieniu strony w przeglądarce jest zgodny z obrazem 2 w arkuszu (prawidłowo zastosowano właściwości CSS układające bloki na stronie, np. float i clear albo display flex albo grid). Dopuszcza się zachodzenie obrazów na stopkę.
ok. 2 min
Polecenie z arkusza
Podział strony na bloki: baner, poniżej obok siebie blok lewy, środkowy i prawy, na dole stopka. Podział zrealizowany za pomocą znaczników sekcji tak, aby po uruchomieniu w przeglądarce wygląd układu bloków był zgodny z obrazem 2
Trzy <section> z float: left stają obok siebie, a stopka z clear: both - pod nimi. Każdy blok zajmuje 30% szerokości plus 2 × 15 px marginesu, czyli razem 90% + 90 px: mieszczą się obok siebie w oknie szerszym niż 900 px, a w węższym trzeci blok spadnie niżej. Klucz dopuszcza, żeby obrazy zachodziły na stopkę.
R.4.3 Ustawiono biały kolor czcionki dla banera i stopki oraz Indigo dla selektora a
R.4.6 Ustawiono marginesy wewnętrzne (padding) 10px dla banera, stopki i odnośnika, oraz padding-top: 40px i marginesy zewnętrzne (margin) 15px dla dla bloków lewego, środkowego i prawego
R.4.8 Ustawiono cechy dla odnośnika: rozmiar czcionki 150%, czcionka pogrubiona
Selektor znacznika a. Margines wewnętrzny będzie widać dopiero pod kursorem - wtedy odnośnik dostaje tło, a padding robi z niego prostokąt wokół napisu, jak przy CENNIK na obrazie 2. Wszystkie kolory czcionek i marginesy wewnętrzne z arkusza są ustawione (R.4.3, R.4.6).
Krok 33: Obraz i tabela: obramowanie, szerokość, marginesy
Kryteria: ,
R.4.4 Ustawiono szerokość 30% dla bloków lewego, środkowego i prawego (width lub grid- template-columns lub flex) oraz 80% dla selektorów table i img
R.4.7 Ustawiono obramowanie dla obrazu i tabeli: linia ciągła 1px oraz marginesy zewnętrzne (margin) górny i dolny 40 px, lewy i prawy auto
ok. 2 min
Polecenie z arkusza
Wspólne dla selektora obrazu i tabeli: obramowanie linią ciągłą o szerokości 1 px, szerokość 80%, marginesy zewnętrzne górny i dolny 40 px, lewy i prawy automatycznie wyliczany przez przeglądarkę
Selektory znaczników img i table po przecinku. Arkusz nie podaje koloru obramowania - bez koloru przeglądarka bierze kolor tekstu. margin: 40px auto - pierwsza wartość to górny i dolny margines, druga lewy i prawy. auto wyśrodkowuje tabelę (element blokowy), a obraz jest wyśrodkowany przez text-align z pierwszej reguły. Zdjęcia 300 × 300 zmniejszają się do 80% szerokości bloku.
Kroki 34-36 · po tym etapie masz 33 z 33 kryteriów (pkt)
Krok 34: Połączenie z bazą i zamknięcie
Kryteria: ,
R.5.1 Skrypt zawiera działające połączenie z serwerem bazy danych i wybór bazy wynajem
R.5.2 Ostatnią operacją na bazie jest jej zamknięcie (zgodne ze składnią)
ok. 2 min
Polecenie z arkusza
Skrypt łączy się z serwerem bazy danych na localhost, użytkownik root bez hasła, baza danych o nazwie wynajem
Skrypt stoi wewnątrz tabeli - to, co wypisze, znajdzie się między <table> a </table>. mysqli_connect z czterema argumentami łączy się z serwerem i od razu wybiera bazę; uchwyt trafia do zmiennej $connection. Druga linia już teraz zamyka połączenie - kolejne instrukcje będą dopisywane nad nią, więc zamknięcie zostanie ostatnią operacją na bazie (R.5.2). Od tego kroku podgląd to wynik prawdziwego uruchomienia cennik.php.
R.5.4 Skrypt wyświetla dane zwrócone zapytaniem, tak że każdy wiersz jest wpisywany do kolejnych wierszy tabeli z wykorzystaniem pętli
R.2.6 Na stronie cennika umieszczono w bloku środkowym tabelę z trzema kolumnami, zastosowano znaczniki <table>, <tr> i <td> (w HTML lub skrypcie)
ok. 3 min
Polecenie z arkusza
Dane z każdego zwróconego zapytaniem wiersza wypisywane są w kolejnym wierszu tabeli
mysqli_fetch_row oddaje kolejny wiersz jako tablicę numerowaną od zera w kolejności kolumn tabeli: $row[0] - id, $row[1] - nazwa, $row[2] - cena. Po ostatnim wierszu zwraca null i pętla while się kończy. Każdy pokój to jeden wiersz <tr> z trzema komórkami <td> - tabela ma trzy kolumny, jak na obrazie 3.
Kroki 37-38 · po tym etapie masz 33 z 33 kryteriów (pkt)
Krok 37: Kolumny po nazwach i htmlspecialchars
ok. 2 min
Polecenie z arkusza
Dane z każdego zwróconego zapytaniem wiersza wypisywane są w kolejnym wierszu tabeli
Przy SELECT * numer kolumny zależy od kolejności pól w tabeli - wystarczy, że ktoś doda w phpMyAdmin pole przed ceną, i $row[2] przestaje być ceną. mysqli_fetch_assoc oddaje wiersz z kluczami takimi jak nazwy kolumn ($room["cena"]). Nazwa pokoju to tekst z bazy, więc przed wypisaniem przechodzi przez htmlspecialchars - znak < albo & w nazwie nie rozbije tabeli. Na egzaminie wystarczy wersja wcześniejsza - klucz tego nie sprawdza.
Wersja egzaminacyjna sprawdzona na pustej tabeli pokoje: strona pokazuje w bloku środkowym samo obramowanie tabeli bez treści i użytkownik nie wie, czy cennik się nie wczytał, czy pensjonat nie ma pokoi. mysqli_num_rows (funkcja z tabeli 1 arkusza) zwraca liczbę wierszy wyniku - przy zerze skrypt wypisuje wiersz z komunikatem. Podgląd: pełny cennik, bo w bazie są pokoje; komunikat pokazuje się tylko przy pustej tabeli (sprawdzone). Na egzaminie wystarczy wersja wcześniejsza - klucz tego nie sprawdza.
Krok 39 · po tym etapie masz 33 z 33 kryteriów (pkt)
Krok 39: Plik przeglądarka.txt i nagranie płyty
ok. 5 min
Polecenie z arkusza
Po zakończeniu pracy utwórz w folderze z numerem, którym został podpisany arkusz, plik tekstowy o nazwie przeglądarka.txt. Zapisz w nim nazwę przeglądarki internetowej, w której weryfikowana była poprawność działania witryny. Nagraj płytę z rezultatami pracy.
W przeglądarka.txt wystarczy nazwa przeglądarki, w której była sprawdzana strona.
W folderze: 1.jpg, 2.jpg, 3.jpg, cennik.php, index.html, kalkulator.html, kw1.jpg - kw5.jpg, kwerendy.txt, przeglądarka.txt, styl2.css i import.png. Pliki BMP z archiwum nie są potrzebne. Po nagraniu płyty trzeba sprawdzić jej odczyt i opisać ją numerem zdającego.
Symulacja ekranu w przeglądarce - w Android Studio / Visual Studio wygląd może się nieco różnić.
To jedno z możliwych rozwiązań. Egzaminator ocenia spełnienie kryteriów z klucza odpowiedzi, a nie zgodność z tym kodem - inna, poprawna droga też daje punkty.
Autor rozwiązania: Bartosz Bryniarski. Licencja CC BY-NC 4.0 - kopiowanie i przeróbki do celów niekomercyjnych, z podaniem autora i źródła (link do tej strony) (zasady wykorzystania). Treść arkusza i klucza oceniania pochodzi z CKE.