Serwis używa plików cookies do analizy ruchu i poprawy działania. Szczegóły
EE.09-07-22.01-SGStyczeń 2022 · 33 kroki · ok. 70 min · 33 kryteria z klucza
Rozwiązanie krok po kroku: Galeria zdjęć z ciekawych miejsc (Wersja podstawowa)
Galeria zdjęć z ciekawych miejsc: baza podroze z tabelami samolotów, odlotów i przylotów (samolot ma wiele lotów - relacja 1..n), cztery zapytania - przyloty bez statusu, odloty boeingów 787 (JOIN), rejsy z „LX” w numerze (LIKE) i zmiana nazwy linii (UPDATE). Do tego zdjęcie przeskalowane do szerokości 350 px, strona galeria.html z dużym zdjęciem, paskiem miniatur, tabelką i ikoną „Polub nas”, style w styl7.css oraz skrypt w JavaScript: kliknięcie miniatury pokazuje ją w bloku głównym, a kliknięcie serca przełącza je między pustym a pełnym.
To arkusz EE.09 ze stycznia 2022 - kwalifikacji formuły 2017, którą zastąpiła INF.03. 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 napisany najprościej, polami i zdarzeniami z tabeli 1 arkusza (onclick, src, indexOf). Strona nie ma PHP, więc podgląd od kroku z HTML-em to działająca strona - miniatury można klikać.
To jest wersja podstawowa. W zakładce „Nowoczesny kod (flex, addEventListener)” jest drugi sposób rozwiązania tego samego arkusza: semantyczne znaczniki z układem flex, zmienne CSS i skrypt w osobnym pliku, podpięty przez addEventListener - obie wersje są zgodne z kluczem.
Baza i zdjęcia pochodzą z oryginalnego archiwum CKE pliki7 (załącznik do pobrania na stronie arkusza, hasło w treści zadania). Zapytania i zrzuty są policzone na MariaDB 10.4, a działanie skryptu sprawdzone w Chrome.
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 (75% z 33 to 24,75, zaokrąglone w górę) - można stracić 8 kryteriów i nadal zdać. Przełączanie ikony serca arkusz wymaga, ale klucz go nie punktuje. Przy każdym kroku jest napisane, które kryteria spełnia.
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-7 · po tym etapie masz 6 z 33 kryteriów (pkt)
Krok 1: Folder zdającego i archiwum pliki7
ok. 2 min
Polecenie z arkusza
Należy utworzyć folder o nazwie odpowiadającej numerowi PESEL zdającego lub w przypadku jego braku innemu numerowi, którym został podpisany arkusz. Archiwum należy rozpakować do tego folderu. Wszystkie wykonane w czasie egzaminu pliki w tym zrzuty ekranu, pliki strony, stylów należy umieścić w tym folderze.
Na pulpicie tworzysz folder nazwany numerem PESEL - w tym rozwiązaniu w jego miejscu stoi imię i nazwisko autora, Bartosz Bryniarski. Archiwum pliki7.zip rozpakowujesz do tego folderu, podając hasło {Ciekaw3Zdjecia} (z nawiasami klamrowymi i cyfrą 3 zamiast „e”). W środku są: podroze.sql, pięć zdjęć (lanzarotte.jpg, pekin.jpg, serengeti.jpg, tajlandia.jpg, wenecja.jpg) i dwie ikony serca: icon-off.png i icon-on.png.
Krok 2: XAMPP i pusta baza podroze
ok. 2 min
Polecenie z arkusza
Uruchom usługi MySQL i Apache za pomocą XAMPP Control Panel. Za pomocą narzędzia phpMyAdmin wykonaj podane operacje na bazie danych: Utwórz bazę danych o nazwie podroze
W XAMPP Control PanelStart przy Apache i MySQL, potem http://localhost/phpmyadmin, Nowa, nazwa podroze (bez polskich liter), Utwórz. Strona tego zadania nie łączy się z bazą - baza służy tylko do czterech zapytań.
Krok 3: Import pliku podroze.sql i zrzut egzamin.jpg
Kryteria:
R.1.1 Wykonano import tabel do bazy podroze , czynność udokumentowano plikiem o nazwie egzamin w formacie JPEG
ok. 3 min
Polecenie z arkusza
Do bazy podroze zaimportuj plik podroze.sql z rozpakowanego archiwum. Wykonaj zrzut ekranu po imporcie. Zrzut zapisz w folderze z numerem PESEL lub w przypadku jego braku w folderze z innym numerem, którym został podpisany arkusz, w formacie JPEG o nazwie egzamin. 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
Zaznacz bazę podroze, karta Import, Wybierz plik → podroze.sql, Wykonaj. Plik tworzy trzy tabele: samoloty (4 wiersze), odloty (10) i przyloty (8). Każdy lot ma kolumnę samoloty_id - numer samolotu, który go obsługuje. Na zrzucie widać zielony komunikat o sukcesie i trzy tabele w lewym panelu.
Zrzut całego ekranu z paskiem zadań zapisujesz jako egzamin.jpg.
Typowe błędy
Zrzut importu ma być w JPEG, a zrzuty zapytań w PNG.
Podgląd strony po tym kroku
Krok 4: Zapytanie 1: przyloty bez statusu lotu
Kryteria: ,
R.1.2 Zapisano plik tekstowy o nazwie kwerendy zawierający co najmniej jedno zapytanie SQL, wynikające z treści zadania
R.1.3 Utworzono zapytanie 1 wybierające pola kierunek i czas z tabeli przyloty dla lotów, które nie mają wpisu w polu status_lotu. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT kierunek, czas FROM przyloty WHERE status_lotu = ""; oraz wynik działania zapytania udokumentowano zrzutem, na którym widoczne są jedynie kolumny kierunek i czas, jedynie rekordy dla miast: Wiedeń, Berlin, Hamburg, Monachium, Zurych
ok. 3 min
Polecenie z arkusza
Zapisz i wykonaj zapytania SQL działające na bazie podroze. Zapytania zapisz w pliku kwerendy.txt, w folderze z numerem PESEL lub w przypadku jego braku w folderze z innym numerem, którym został podpisany arkusz. Wykonaj zrzuty ekranu przedstawiające wyniki działania kwerend. Zrzuty zapisz w formacie PNG i nadaj im nazwy kw1, kw2, kw3, kw4. Zrzuty powinny obejmować cały ekran monitora z widocznym paskiem zadań. Zapytanie 1: wybierające pola kierunek i czas z tabeli przyloty dla lotów, które nie mają wpisu w polu status_lotu
SELECT kierunek, czas - tylko dwie kolumny,
FROM przyloty,
WHERE status_lotu = '' - pole z pustym napisem.
„Brak wpisu” w tej bazie to pusty napis, a nie NULL - sprawdzone: żaden z 8 przylotów nie ma w tej kolumnie NULL, a pięć ma ''. Dlatego działa = '', a IS NULL zwróciłoby pusty wynik. Wynik: Wieden, Berlin, Hamburg, Monachium, Zurych z godzinami (w bazie „Wieden” bez „ń” - tabela ma kodowanie latin1). Zapytanie kopiujesz do nowego pliku kwerendy.txt, zrzut - do kw1.png.
Typowe błędy
Na egzaminie dobrze jest najpierw obejrzeć dane: SELECT * FROM przyloty pokaże, czy puste pola to NULL (phpMyAdmin pisze wtedy kursywą NULL), czy puste napisy. Bezpieczny warunek na oba przypadki: WHERE status_lotu = '' OR status_lotu IS NULL.
kwerendy.txtTekstnowy plik
-- Zapytanie 1SELECT kierunek, czas FROM przyloty WHERE status_lotu = '';
Podgląd strony po tym kroku
Krok 5: Zapytanie 2: odloty samolotów Boening 787
Kryteria:
R.1.4 Utworzono zapytanie 2 wybierające pola kierunek i dzien z tabeli odloty dla lotów obsługiwanych samolotem typu boening 787. Zapytanie wykorzystuje relację, w klauzuli warunku jest sprawdzany typ samolotu. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT kierunek, dzien FROM odloty JOIN samoloty ON odloty.samoloty_id = samoloty.id WHERE samoloty.typ = "boening 787"; możliwe również INNER JOIN lub przyrównanie kluczy w warunku oraz wynik działania zapytania udokumentowano zrzutem, na którym widoczne są jedynie kolumny kierunek i dzień dla: Neapol, ALICANTE, Londyn LT, Malta, Wiedeń
ok. 4 min
Polecenie z arkusza
Zapytanie 2: wybierające pola kierunek i dzien z tabeli odloty dla lotów obsługiwanych samolotem typu Boening 787. Zapytanie wykorzystuje relację, w klauzuli warunku jest sprawdzany typ samolotu
Typ samolotu jest w tabeli samoloty, a loty w odloty - łączy je relacja przez samoloty_id:
SELECT kierunek, dzien,
FROM odloty JOIN samoloty ON odloty.samoloty_id = samoloty.id - do każdego odlotu jego samolot,
WHERE samoloty.typ = 'Boening 787' - warunek na typie samolotu.
Typ wpisujesz dokładnie tak, jak w bazie i w arkuszu: „Boening” (poprawnie producent nazywa się Boeing, ale zapytanie porównuje napisy, a w tabeli jest literówka). Boeingi 787 to samoloty nr 1 i 3, a ich odloty to Neapol, ALICANTE, Londyn LT, Malta, Wieden - wszystkie 25 lipca 2019. Zrzut: kw2.png.
Typowe błędy
WHERE typ = 'Boeing 787' (poprawna pisownia) zwróci pusty wynik - baza ma „Boening”.
kwerendy.txtTekstzmienione: 5 linii
-- Zapytanie 1SELECT kierunek, czas FROM przyloty WHERE status_lotu = '';-- Zapytanie 2SELECT kierunek, dzienFROM odloty JOIN samoloty ON odloty.samoloty_id = samoloty.idWHERE samoloty.typ = 'Boening 787';
Podgląd strony po tym kroku
Krok 6: Zapytanie 3: rejsy z „LX” w numerze
Kryteria:
R.1.5 Utworzono zapytanie 3 wybierające numer rejsu i kierunek z tabeli przyloty dla rejsów, których numer zawiera w dowolnym miejscu ciąg znaków LX. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT nr_rejsu, kierunek FROM przyloty WHERE nr_rejsu LIKE "%LX%"; oraz wynik działania zapytania udokumentowano zrzutem, na którym widoczne są jedynie kolumny nr_rejsu i kierunek, jedynie dla lotów: LX3447, LX5473, LX5728
ok. 2 min
Polecenie z arkusza
Zapytanie 3: wybierające numer rejsu i kierunek z tabeli przyloty dla rejsów, których numer zawiera w dowolnym miejscu ciąg znaków LX
SELECT nr_rejsu, kierunek FROM przyloty,
WHERE nr_rejsu LIKE '%LX%' - LIKE porównuje z wzorcem, a % oznacza dowolny ciąg znaków (także pusty). %LX% to „LX gdziekolwiek”: na początku, w środku albo na końcu.
Wynik: LX3447, LX5473, LX5728 (rejsy linii SWISS, której kod to LX). Zrzut: kw3.png.
Typowe błędy
LIKE 'LX%' szuka tylko numerów zaczynających się od LX - tu wynik byłby ten sam, ale arkusz każe szukać „w dowolnym miejscu”, a klucz ocenia zapytanie uniwersalne.
kwerendy.txtTekstzmienione: 3 linie
-- Zapytanie 1SELECT kierunek, czas FROM przyloty WHERE status_lotu = '';-- Zapytanie 2SELECT kierunek, dzienFROM odloty JOIN samoloty ON odloty.samoloty_id = samoloty.idWHERE samoloty.typ = 'Boening 787';-- Zapytanie 3SELECT nr_rejsu, kierunek FROM przyloty WHERE nr_rejsu LIKE '%LX%';
Podgląd strony po tym kroku
Krok 7: Zapytanie 4: linia SWISS zmienia nazwę na SWISS2
Kryteria:
R.1.6 Utworzono zapytanie 4 uaktualniające pole linie w tabeli samoloty . Firma SWISS zmieniła swoją nazwę na SWISS2. W pliku z kwerendami lub na zrzucie istnieje zapis np.: UPDATE samoloty SET linie="SWISS2" WHERE linie = "SWISS"; oraz wynik działania zapytania udokumentowano zrzutem, na którym widoczny jest efekt poprawnie wykonanego zapytania
ok. 2 min
Polecenie z arkusza
Zapytanie 4: uaktualniające pole linie w tabeli samoloty. Firma SWISS zmieniła swoją nazwę na SWISS2
UPDATE samoloty - zmiana danych w tabeli,
SET linie = 'SWISS2' - nowa wartość kolumny,
WHERE linie = 'SWISS' - tylko w wierszach starej nazwy.
phpMyAdmin odpowiada „Zmieniono rekordów: 1” - linie SWISS ma jeden samolot (nr 3). Zrzut: kw4.png; kwerendy.txt ma komplet czterech zapytań.
Typowe błędy
Bez WHERE zapytanie zmieni nazwę linii we wszystkich samolotach - patrz krok w etapie dobrych praktyk.
kwerendy.txtTekstzmienione: 3 linie
-- Zapytanie 1SELECT kierunek, czas FROM przyloty WHERE status_lotu = '';-- Zapytanie 2SELECT kierunek, dzienFROM odloty JOIN samoloty ON odloty.samoloty_id = samoloty.idWHERE samoloty.typ = 'Boening 787';-- Zapytanie 3SELECT nr_rejsu, kierunek FROM przyloty WHERE nr_rejsu LIKE '%LX%';-- Zapytanie 4UPDATE samoloty SET linie = 'SWISS2' WHERE linie = 'SWISS';
Podgląd strony po tym kroku
Etap 2: Grafika i strona HTML
Kroki 8-20 · po tym etapie masz 18 z 33 kryteriów (pkt)
Krok 8: Grafika: serengeti.jpg o szerokości 350 px
Kryteria:
R.2.1 Plik serengeti.jpg jest przeskalowany z zachowaniem proporcji do szerokości dokładnie 350 px odpowiadająca temu wysokość wynosi 233 px ±5 px
ok. 3 min
Polecenie z arkusza
Plik serengeti.jpg, wypakowany z archiwum należy przeskalować z zachowaniem proporcji tak, aby szerokość wynosiła dokładnie 350 px i zapisać obraz pod tą samą nazwą. Pozostałych obrazów nie należy modyfikować.
Oryginał ma 400 × 267 px, pozostałe zdjęcia - 350 px szerokości. W GIMP-ie Obraz → Skaluj obraz, łańcuch złączony, szerokość 350 - wysokość zmieni się sama na 234 px (267 × 350 / 400 = 233,6). Klucz przyjmuje 233 ± 5 px. Plik → Nadpisz serengeti.jpg.
Po skalowaniu wszystkie miniatury mają tę samą szerokość, więc przy wspólnej wysokości z CSS układają się w równy pasek.
Podgląd strony po tym kroku
Krok 9: Plik galeria.html
Kryteria:
R.2.2 Witrynę internetową zapisano w pliku HTML o nazwie galeria
ok. 2 min
Polecenie z arkusza
Składa się ze strony o nazwie galeria.html
Plik galeria.html w folderze zdającego, obok zdjęć. Strona nie potrzebuje PHP - można ją otworzyć prosto z dysku.
R.3.4 Strona zawiera działające połączenie z zewnętrznym arkuszem stylów o nazwie styl7.css , formatowanie pochodzi jedynie z tego arkusza Uwaga: kryterium to nie jest spełnione również, gdy źle przypisano co najmniej jeden selektor do bloku (np. kropka zamiast #)
ok. 1 min
Polecenie z arkusza
Arkusz stylów w pliku o nazwie styl7.css prawidłowo połączony z kodem strony
<link rel="stylesheet" href="styl7.css"> w <head>. Plik stylów powstanie po HTML-u.
Typowe błędy
Klucz uznaje R.3.4 tylko wtedy, gdy każdy selektor trafia w swój blok - kropka zamiast # przy identyfikatorze odbiera punkt.
Krok 13: Bloki: baner, główny, lewy, prawy i stopka
Kryteria:
R.2.5 Wygląd strony zdefiniowano dzieląc ją na bloki: baner, główny, bloki lewy i prawy, stopka. Zastosowano znaczniki sekcji
ok. 2 min
Polecenie z arkusza
Podział strony na bloki: baner, główny, poniżej obok siebie lewy i prawy, poniżej stopka. Podział zrealizowany za pomocą znaczników sekcji tak, aby wygląd układu bloków strony po uruchomieniu w przeglądarce, był zgodny z Obrazem 2
Cztery znaczniki <section> z identyfikatorami banner, main, left i right oraz <footer> - w kolejności z góry na dół. Obok siebie ustawi blok lewy i prawy CSS (R.2.5).
R.2.8 W bloku lewym umieszczono 5 zdjęć zgodnych z obrazem 2 w arkuszu egzaminacyjnym. Ich teksty alternatywne są takie same jak nazwa pliku (mogą być bez rozszerzenia lub z)
ok. 3 min
Polecenie z arkusza
Zawartość bloku lewego: Nagłówek trzeciego stopnia o treści „Przeglądaj zdjęcia”. 5 zdjęć JPG o nazwach kolejno: lanzarotte, pekin, serengeti, wenecja, tajlandia oraz tekście alternatywnym takim jak nazwa zdjęcia
<h3> i pięć obrazów w kolejności z arkusza (tajlandia jest ostatnia, choć alfabetycznie byłaby przed wenecją). Tekst alternatywny każdego to nazwa zdjęcia bez rozszerzenia (R.2.8).
Wszystkie miniatury mają tę samą klasę thumb - CSS nada im wspólną wysokość, a klucz wprost uznaje za błąd ten sam identyfikator przy kilku obrazach: identyfikator musi być na stronie jednoznaczny.
R.2.9 W bloku prawym umieszczono tabelę o dwóch wierszach i trzech kolumnach, zastosowano znaczniki <table>, <tr>, <td> wraz z ich zamknięciami
ok. 3 min
Polecenie z arkusza
Zawartość bloku prawego: Nagłówek trzeciego stopnia o treści „Obrazy w naszej galerii”. Tabela o dwóch wierszach i trzech kolumnach i wartościach: Wiersz pierwszy: Europa, Azja, Afryka. Wiersz drugi: 2, 2, 1
<h3>, a pod nim tabela: <table>, dwa wiersze <tr>, w każdym trzy komórki <td> - wszystkie znaczniki z zamknięciami (R.2.9). Liczby to zdjęcia z każdego kontynentu: Europa - Lanzarote i Wenecja, Azja - Pekin i Tajlandia, Afryka - Serengeti.
Komórki pierwszego wiersza można zapisać jako nagłówki <th>, ale arkusz mówi o dwóch zwykłych wierszach, a klucz sprawdza <td>.
Krok 18: Blok prawy: akapit „Polub nas” z ikoną serca
Kryteria: ,
R.2.6 Zapisano: w banerze nagłówek h2: "Galeria miejsc ciekawych", w bloku lewym nagłówek h3: "Przeglądaj zdjęcia", w bloku prawym nagłówek h3: "Obrazy w naszej galerii" oraz paragraf
R.2.7 W bloku głównym po uruchomieniu strony wstawiono zdjęcie lanzarotte.jpg z tekstem alternatywnym "galeria" oraz w bloku prawym umieszczono obraz icon-off.png
ok. 1 min
Polecenie z arkusza
Paragraf (akapit) zawierający treść „Polub nas” i obraz icon-off.png
Akapit z tekstem i obrazem pustego serca icon-off.png (50 × 50 px). Identyfikator like przyda się skryptowi, który będzie podmieniał ikonę. Nagłówki <h2> i dwa <h3> oraz ten akapit dają R.2.6, a obraz w bloku głównym i ikona w bloku prawym - R.2.7.
R.3.2 Wybranie odnośnika "Odkryj więcej zdjęć" inicjuje otwarcie strony https://pixabay.com
R.3.3 Odnośnik otwiera się w osobnej karcie przeglądarki
ok. 1 min
Polecenie z arkusza
Odnośnik do adresu https://pixabay.com o treści „Odkryj więcej zdjęć”, odnośnik otwiera się w osobnej karcie przeglądarki
<a href="https://pixabay.com"> z treścią z arkusza (R.3.2). Osobną kartę otwiera atrybut target="_blank" (R.3.3). Adres jest pełny, z https:// - bez protokołu przeglądarka szukałaby pliku pixabay.com w folderze strony.
Zawartość stopki: napis o treści „Autor: ”, dalej wstawiony numer PESEL zdającego lub w przypadku jego braku inny numer, którym został podpisany arkusz
Na egzaminie po dwukropku wpisujesz swój numer PESEL. W tym rozwiązaniu w jego miejscu stoi imię i nazwisko autora: Bartosz Bryniarski.
Dla banera i stopki: kolor RGB tła 70, 130, 180; biały kolor czcionki, wysokość 30 px, wyrównanie tekstu do środka
Kolor RGB zapisuje się funkcją rgb(70, 130, 180) - trzy składowe od 0 do 255: czerwona, zielona, niebieska (to kolor SteelBlue). Wspólna reguła dla banera i stopki.
#banner h2 { margin: 0 } - nagłówek ma domyślne marginesy, które w 30-pikselowym banerze zepchnęłyby napis w dół i odsłoniły białą szczelinę nad banerem. Na obrazie 2 napis mieści się w pasku.
Krok 24: Blok lewy i prawy: tło, kolor, wysokość, szerokość
Kryteria: , , ,
R.4.2 Ustawiono kolor tła rgb(70, 130, 180) dla banera, stopki, bloku lewego i prawego oraz rgb(176, 196, 222) dla bloku głównego
R.4.3 Ustawiono biały kolor czcionki dla bloków banera, lewego, prawego i stopki
R.4.4 Ustawiono wysokość 30px dla banera i stopki oraz 300px dla bloku lewego i prawego
R.4.5 Ustawiono szerokość bloku lewego 80% oraz prawego 20%
ok. 2 min
Polecenie z arkusza
Dla bloku lewego: kolor RGB tła 70, 130, 180; biały kolor czcionki, wysokość 300 px, szerokość 80%. Dla bloku prawego: kolor RGB tła 70, 130, 180; biały kolor czcionki, wysokość 300 px, szerokość 20%
Dwie reguły z tymi samymi cechami i różną szerokością. Komplet: tła wszystkich bloków (R.4.2), biały tekst banera, bloków i stopki (R.4.3), wysokości 30 i 300 px (R.4.4), szerokości 80% i 20% (R.4.5).
Tabela w bloku prawym dziedziczy biały kolor tekstu w Chrome (arkusz zaznacza, że czarny tekst tabeli w innej przeglądarce też jest poprawny).
R.3.1 Układ bloków po uruchomieniu strony w przeglądarce jest zgodny z Obrazem 2 w arkuszu egzaminacyjnym (prawidłowo zastosowano właściwości CSS układające bloki na stronie, np. float i clear albo display flex albo grid)
ok. 2 min
Polecenie z arkusza
Podział zrealizowany za pomocą znaczników sekcji tak, aby wygląd układu bloków strony po uruchomieniu w przeglądarce, był zgodny z Obrazem 2
Baner i blok główny to zwykłe bloki na całą szerokość. Pod nimi blok lewy i prawy z float: left stają obok siebie (80% + 20%), a stopka z clear: both schodzi pod oba (R.3.1).
R.4.8 Ustawiono styl zdjęcia w bloku głównym: marginesy wewnętrzne (padding) 3px, obramowanie linią kreskowaną w kolorze niebieskim (dowolny odcień) grubości 1px, zaokrąglenie rogów obrazu o 10px
ok. 2 min
Polecenie z arkusza
Dla zdjęcia w bloku głównym: marginesy wewnętrzne 3 px, obramowanie linią kreskowaną w kolorze niebieskim grubości 1 px, zakrzywienie rogów obrazu o 10 px
padding: 3px - odstęp między zdjęciem a ramką,
border: 1px dashed blue - linia kreskowana to dashed (kropkowana to dotted),
Krok 27: Miniatury: wysokość 40% i biała ramka pod kursorem
Kryteria: ,
R.4.9 Ustawiono styl dla wszystkich zdjęć w bloku lewym: wysokość 40% (np. za pomocą klasy, dodanie tego samego id do wszystkich zdjęć jest błędem)
R.4.10 Gdy kursor myszy znajdzie się na obrazie miniatury pojawia się obramowanie linią ciągłą koloru białego i grubości 1px (np. za pomocą pseudoklasy hover)
ok. 2 min
Polecenie z arkusza
Dla wszystkich zdjęć w bloku lewym: wysokość 40%, gdy mysz znajdzie się na obrazie pojawia się obramowanie linią ciągłą koloru białego i grubości 1px, co widać na Obrazie 2 (trzecia miniatura)
Selektor klasy .thumb obejmuje wszystkie pięć miniatur (R.4.9). Wysokość w procentach liczy się od wysokości rodzica - blok lewy ma 300 px, więc miniatura ma 120 px, a szerokość dopasowuje się proporcjonalnie (ok. 180 px).
:hover dokłada ramkę tylko wtedy, gdy kursor jest nad obrazem (R.4.10). Ramka ma 1 px, więc najechana miniatura minimalnie się powiększa - na obrazie 2 tak samo.
Typowe błędy
height: 40% działa tylko dlatego, że blok lewy ma ustaloną wysokość. Bez niej procent nie ma od czego się liczyć i miniatury zostałyby w pełnym rozmiarze.
Kroki 28-30 · po tym etapie masz 33 z 33 kryteriów (pkt)
Krok 28: Funkcja pokazująca miniaturę w bloku głównym
Kryteria: ,
R.5.1 Przynajmniej jeden skrypt napisano w języku JavaScript oraz zawiera on przynajmniej jedną instrukcję poprawną składniowo
R.5.2 Dla przynajmniej jednego zdarzenia kliknięcia obrazu przypisano do niego funkcję JavaScript (może być pusta)
ok. 3 min
Polecenie z arkusza
Skrypt: Obsługuje akcje wywoływane kliknięciem na zdjęciach z bloku lewego za pomocą języka JavaScript. Po kliknięciu na dowolnej miniaturze jest ona wyświetlona w bloku głównym (zamiast lanzarotte.jpg)
Skrypt stoi w znaczniku <script> na końcu <body>. Funkcja show(thumbnail) dostaje klikniętą miniaturę i przepisuje jej adres obrazu (src) do dużego zdjęcia #big - przeglądarka od razu wczytuje nowy plik.
Pierwsza miniatura dostaje atrybut onclick="show(this)". Słowo this w atrybucie zdarzenia oznacza element, na którym zdarzenie zaszło - funkcja wie, którą miniaturę kliknięto. Skrypt w JavaScript (R.5.1) i funkcja przypisana do kliknięcia obrazu (R.5.2) już są; pozostałe miniatury - w następnym kroku.
R.5.3 Po kliknięciu na przynajmniej jednej miniaturze, odpowiadający jej obraz jest wyświetlany w bloku głównym
R.5.4 Kliknięcie jest obsłużone zgodnie z R.5.3 dla każdej z pięciu miniatur
ok. 2 min
Polecenie z arkusza
Po kliknięciu na dowolnej miniaturze jest ona wyświetlona w bloku głównym (zamiast lanzarotte.jpg)
To samo onclick="show(this)" przy pozostałych czterech miniaturach - jedna funkcja obsługuje wszystkie, bo this za każdym razem wskazuje inny obraz. Sprawdzone w Chrome: kliknięcie każdej z pięciu miniatur pokazuje jej zdjęcie w bloku głównym (R.5.3, R.5.4), a kliknięcie pierwszej wraca do Lanzarote.
Kliknij miniatury w podglądzie. Tekst alternatywny dużego zdjęcia zostaje „galeria” - arkusz go nie zmienia.
Typowe błędy
Pięć osobnych funkcji (showPekin(), showSerengeti()…) też zdobędzie punkty, ale każde nowe zdjęcie wymagałoby nowej funkcji.
Po kliknięciu ikony icon-off.jpg jest ona podmieniana na ikonę icon-on.jpg. Po ponownym kliknięciu – powraca do icon-off.jpg i tak na zmianę – realizowane za pomocą funkcji.
Funkcja toggleLike przypięta do kliknięcia ikony:
indexOf('icon-off') (metoda napisu z tabeli 1) zwraca pozycję szukanego tekstu w adresie obrazu albo -1, gdy go nie ma. Przeglądarka trzyma w src pełny adres (file:///…/icon-off.png), więc szuka się fragmentu, a nie porównuje całości,
jeśli teraz jest puste serce - ustaw pełne, w przeciwnym razie - puste.
Sprawdzone w Chrome: kolejne kliknięcia dają icon-on, icon-off, icon-on. Klucz nie ma kryterium dla serca, ale arkusz go wymaga.
⚠️ Rozbieżność w arkuszu: część o skrypcie podaje nazwy icon-off.jpg i icon-on.jpg, a część o witrynie i archiwum pliki7 - icon-off.png i icon-on.png. W skrypcie są nazwy plików, które naprawdę są w archiwum: .png. Z .jpg serce zamieniłoby się w ikonę uszkodzonego obrazu.
Kroki 31-32 · po tym etapie masz 33 z 33 kryteriów (pkt)
Krok 31: Zabezpieczenie: odnośnik do obcej strony w nowej karcie
ok. 2 min
Polecenie z arkusza
Odnośnik do adresu https://pixabay.com o treści „Odkryj więcej zdjęć”, odnośnik otwiera się w osobnej karcie przeglądarki
Strona otwarta przez target="_blank" dostawała kiedyś dostęp do karty, z której ją otwarto (window.opener) - i mogła po cichu podmienić ją na fałszywą stronę logowania, zanim użytkownik wróci (atak tabnabbing). Obecne przeglądarki (Chrome od wersji 88, Firefox od 79, Safari od 12.1) przy _blank same tego dostępu nie dają, ale jawny atrybut nie zależy od wersji przeglądarki:
noopener - otwarta strona nie dostaje window.opener,
noreferrer - przeglądarka nie wysyła obcej stronie adresu, z którego przyszedł użytkownik.
Odnośnik działa tak samo i nadal otwiera się w nowej karcie. Na egzaminie wystarczy wersja wcześniejsza - klucz tego nie sprawdza.
Krok 32: UPDATE zawsze z WHERE - sprawdzone na bazie
ok. 2 min
Polecenie z arkusza
Zapytanie 4: uaktualniające pole linie w tabeli samoloty. Firma SWISS zmieniła swoją nazwę na SWISS2
UPDATE bez WHERE nie pyta o potwierdzenie i zmienia każdy wiersz tabeli. Sprawdzone na bazie z archiwum: UPDATE samoloty SET linie = 'SWISS2'; - „Zmieniono rekordów: 4”, a RYANAIR, WIZZAIR i LUFTHANSA też nazywają się teraz SWISS2 (zrzut obok). Nie ma przycisku „cofnij”.
Zwyczaje, które przed tym chronią:
najpierw SELECT z tym samym warunkiem - SELECT * FROM samoloty WHERE linie = 'SWISS'; pokazuje dokładnie te wiersze, które zmieni UPDATE,
przy ważnych danych transakcja: START TRANSACTION;, UPDATE …;, sprawdzenie wyniku i dopiero wtedy COMMIT; (albo ROLLBACK;, gdy liczba zmienionych rekordów się nie zgadza),
konto, którym łączy się strona, nie dostaje uprawnień UPDATE do tabel, których nie zmienia.
Na egzaminie wystarczy zapytanie z kroku 7 - a gdyby phpMyAdmin pokazał więcej niż 1 zmieniony rekord, trzeba ponownie zaimportować bazę, żeby zrzut i dane się zgadzały.
kwerendy.txtTekstzmienione: 0 linii
-- Zapytanie 1SELECT kierunek, czas FROM przyloty WHERE status_lotu = '';-- Zapytanie 2SELECT kierunek, dzienFROM odloty JOIN samoloty ON odloty.samoloty_id = samoloty.idWHERE samoloty.typ = 'Boening 787';-- Zapytanie 3SELECT nr_rejsu, kierunek FROM przyloty WHERE nr_rejsu LIKE '%LX%';-- Zapytanie 4UPDATE samoloty SET linie = 'SWISS2' WHERE linie = 'SWISS';
Podgląd strony po tym kroku (galeria.html)
Etap 6: Oddanie pracy
Krok 33 · po tym etapie masz 33 z 33 kryteriów (pkt)
Krok 33: Plik przeglądarka.txt i nagranie płyty
ok. 5 min
Polecenie z arkusza
Po zakończeniu pracy utwórz, w folderze z numerem PESEL lub w przypadku jego braku w folderze z innym numerem, którym został podpisany arkusz, plik tekstowy o nazwie przeglądarka.txt. Zapisz w nim nazwę przeglądarki internetowej, w której weryfikowałeś poprawność działania witryny. Nagraj płytę z rezultatami pracy.
W przeglądarka.txt wpisujesz nazwę przeglądarki, w której sprawdzasz stronę.
W folderze z numerem zdającego muszą być: egzamin.jpg, galeria.html, icon-off.png, icon-on.png, kw1.png - kw4.png, kwerendy.txt, lanzarotte.jpg, pekin.jpg, przeglądarka.txt, serengeti.jpg, styl7.css, tajlandia.jpg i wenecja.jpg. Nagraj płytę, sprawdź jej odczyt w obecności przewodniczącego zespołu nadzorującego i opisz ją numerem zdającego.
przeglądarka.txtTekstnowy plik
Google Chrome
Podgląd strony po tym kroku (galeria.html)
Podgląd
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.