Przejdź do głównej treści
INF.03-11-24.06-SGCzerwiec 2024 · 46 kroków · ok. 80 min · 40 kryteriów z klucza

Rozwiązanie krok po kroku: Witryna hodowli świnek morskich (Wersja podstawowa)

Rozwiązanie obejmuje bazę hodowla (rasy i świnki morskie z datą urodzenia, miotem, opisem i ceną) z czterema zapytaniami - miesiąc z pola daty, DISTINCT ze złączeniem tabel, warunek na identyfikator rasy i prosty SELECT - potem zdjęcie świnki wykadrowane do 500 × 330 px, stronę peruwianka.php z banerem, menu, blokiem głównym, blokiem prawym i stopką, style w styl.css oraz trzy skrypty PHP: lista numerowana wszystkich ras, dane miotu i opisy świnek z tego miotu. Na końcu powstają dwie kopie strony, american.php i crested.php, które różnią się obrazem i identyfikatorem rasy w zapytaniach.

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ą. Skrypty powstają najpierw w najprostszej postaci, funkcjami z tabeli 1 arkusza (mysqli_query, mysqli_fetch_row), a na końcu zostają przerobione na wersję z prawdziwych projektów: identyfikator rasy w jednej zmiennej, zapytania przygotowane, zabezpieczenie tekstów z bazy i komunikat dla rasy bez świnek.

To jest wersja podstawowa. W zakładce „Nowoczesny kod (grid, PDO)” jest drugi sposób rozwiązania tego samego arkusza: bloki na siatce CSS, dane pobierane przez PDO z zapytaniami przygotowanymi przed HTML-em, a kopie strony różnią się jedną zmienną - obie wersje są zgodne z kluczem.

Baza i zdjęcia pochodzą z prawdziwego archiwum pliki11 (załącznik do arkusza, hasło w treści zadania). Zrzuty wyników zapytań są odtworzone z tej bazy - na egzaminie robisz je sam, z całego ekranu. Podgląd strony od kroków z PHP to wynik prawdziwego uruchomienia kodu z danego kroku w PHP 8.2 na bazie z arkusza.

Jak liczą się punkty. Klucz ma 40 kryteriów (R.1.1 - R.5.10), każde za 1 punkt. Próg zdania części praktycznej to 75%, czyli 30 punktów - można stracić 10 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.

  1. Etap 1: Baza danych

    Kroki 1-7 · po tym etapie masz 6 z 40 kryteriów (pkt)

    Krok 1: Baza danych hodowla

    ok. 2 min
    Polecenie z arkusza

    Utwórz bazę danych o nazwie hodowla, z zestawem polskich znaków (np. utf8_unicode_ci)

    Najpierw rozpakowanie pliki11.zip z pulpitu (hasło @Swinki-MorSkie! - małpa na początku, myślnik, wielkie S w środku i wykrzyknik na końcu) do folderu nazwanego numerem zdającego. W phpMyAdmin: Nowa, nazwa hodowla, porównywanie utf8_unicode_ci.

    Typowe błędy

    Skrypty łączą się z bazą po nazwie - literówka w nazwie bazy zabiera punkty za całą część PHP (R.5.1).

  2. Krok 2: Import tabel z pliku baza.sql

    ok. 2 min
    Polecenie z arkusza

    Do bazy zaimportuj tabele z pliku baza.sql z rozpakowanego archiwum

    Zaznacz bazę hodowla, potem Import → baza.sql → Wykonaj. Powstają dwie tabele z obrazu 1: rasy (13 ras) i swinki (data urodzenia, oznaczenie miotu, opis, imię, cena i klucz obcy rasy_id).

  3. Krok 3: Zrzut ekranu import.png

    Kryteria:

    R.1.1 Wykonano import tabel do bazy danych hodowla 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. Import idzie do PNG, a zrzuty zapytań do JPEG - i tym razem muszą pokazywać także treść wykonanego zapytania (phpMyAdmin wyświetla ją nad wynikiem).

    Typowe błędy

    Wykadrowany zrzut albo zrzut bez paska zadań nie jest oceniany (uwaga w kluczu przy R.1).

  4. Krok 4: Zapytanie 1: świnki urodzone w lipcu

    Kryteria: ,

    R.1.2 Zapisano plik kwerendy.txt zawierający co najmniej jedno zapytanie SQL, wynikające z treści zadania

    R.1.3 Wykonano zapytanie 1 wybierające jedynie pola imie i miot z tabeli swinki dla świnek morskich urodzonych w lipcu. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT imie, miot FROM swinki WHERE data_ur LIKE "%-07-%"; (różne formy wyrażenia regularnego) oraz wynik działania udokumentowano zrzutem, na którym są widoczne dokładnie 3 wiersze z danymi: Ed C4, Tikka C4, Frania C4

    ok. 3 min
    Polecenie z arkusza

    Zapytanie 1: wybierające jedynie pola imie i miot z tabeli swinki dla świnek morskich urodzonych w lipcu

    • SELECT imie, miot,
    • FROM swinki,
    • WHERE MONTH(data_ur) = 7 - funkcja MONTH wyciąga z daty numer miesiąca; lipiec to 7.

    Klucz uznaje też porównanie tekstu daty ze wzorcem, np. data_ur LIKE "%-07-%". Wynik: 3 wiersze - Ed, Tikka, Frania, wszystkie z miotu C4. Zapytania zapisujesz w kwerendy.txt, zrzut z treścią zapytania jako kw1.jpg.

    kwerendy.txt Tekst nowy plik
    -- Zapytanie 1
    SELECT imie, miot FROM swinki WHERE MONTH(data_ur) = 7;
    Podgląd strony po tym kroku
    Podgląd strony po kroku 4
  5. Krok 5: Zapytanie 2: dane miotu rasy peruwianka

    Kryteria:

    R.1.4 Wykonano zapytanie 2 wybierające niepowtarzające się wiersze z datą urodzenia i miotem z tabeli swinki oraz odpowiadającą im nazwą rasy z tabeli rasy dla id rasy równego 1. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON rasy_id = rasy.id WHERE rasy_id=1; (lub rasy.id=1; możliwe również INNER JOIN lub bez JOIN i porównanie kluczy po WHERE) oraz wynik działania udokumentowano zrzutem, na którym jest widoczny dokładnie 1 wiersz: 2022-06-02 I5 peruwianka

    ok. 3 min
    Polecenie z arkusza

    Zapytanie 2: wybierające niepowtarzające się wiersze z datą urodzenia i miotem z tabeli swinki oraz odpowiadającą im nazwą rasy z tabeli rasy dla id rasy równego 1. Należy posłużyć się relacją

    • SELECT DISTINCT data_ur, miot, rasa - DISTINCT usuwa powtórzone wiersze („niepowtarzające się”),
    • FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id - złączenie przez relację z obrazu 1, bo nazwa rasy leży w drugiej tabeli,
    • WHERE rasy.id = 1 - rasa peruwianka.

    Bez DISTINCT wyszłyby 4 identyczne wiersze (cztery świnki z jednego miotu), z nim zostaje dokładnie 1: 2022-06-02, I5, peruwianka. Skrypt 2 wypisze z tego nagłówek z rasą i dane miotu. Zrzut: kw2.jpg.

    Typowe błędy

    Bez DISTINCT zrzut pokazuje 4 wiersze - klucz wymaga dokładnie jednego.

    kwerendy.txt Tekst zmienione: 3 linie
    -- Zapytanie 1
    SELECT imie, miot FROM swinki WHERE MONTH(data_ur) = 7;
    
    -- Zapytanie 2
    SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = 1;
    Podgląd strony po tym kroku
    Podgląd strony po kroku 5
  6. Krok 6: Zapytanie 3: świnki rasy peruwianka

    Kryteria:

    R.1.5 Wykonano zapytanie 3 wybierające jedynie imię, cenę i opis świnek morskich, których id rasy jest równe 1. W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT imie, cena, opis FROM swinki WHERE rasy_id = 1; (lub z zastosowaniem relacji) oraz wynik działania udokumentowano zrzutem, na którym są widoczne dokładnie 4 wiersze, jedynie pola imie, cena, opis dla imion: Cindy, Wendy, Mała, Lola

    ok. 2 min
    Polecenie z arkusza

    Zapytanie 3: wybierające jedynie imię, cenę i opis świnek morskich, których id rasy jest równe 1

    Trzy pola z jednej tabeli i warunek na kluczu obcym rasy_id - złączenie nie jest potrzebne. Wynik: 4 wiersze - Cindy, Wendy, Mała, Lola z długimi opisami. Skrypt 3 zrobi z każdego wiersza nagłówek z imieniem i ceną oraz akapit z opisem. Zrzut: kw3.jpg.

    kwerendy.txt Tekst zmienione: 3 linie
    -- Zapytanie 1
    SELECT imie, miot FROM swinki WHERE MONTH(data_ur) = 7;
    
    -- Zapytanie 2
    SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = 1;
    
    -- Zapytanie 3
    SELECT imie, cena, opis FROM swinki WHERE rasy_id = 1;
    Podgląd strony po tym kroku
    Podgląd strony po kroku 6
  7. Krok 7: Zapytanie 4: wszystkie rasy

    Kryteria:

    R.1.6 Wykonano zapytanie 4 wybierające jedynie rasę z tabeli rasy . W pliku z kwerendami lub na zrzucie istnieje zapis np.: SELECT rasa FROM rasy; oraz wynik działania udokumentowano zrzutem, na którym jest widocznych dokładnie 13 wierszy, jedynie nazwy ras

    ok. 1 min
    Polecenie z arkusza

    Zapytanie 4: wybierające jedynie rasę z tabeli rasy

    Jedno pole bez warunku: 13 wierszy, od peruwianki do skinny. Skrypt 1 zrobi z nich listę numerowaną w bloku prawym. Zrzut: kw4.jpg.

    kwerendy.txt Tekst zmienione: 3 linie
    -- Zapytanie 1
    SELECT imie, miot FROM swinki WHERE MONTH(data_ur) = 7;
    
    -- Zapytanie 2
    SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = 1;
    
    -- Zapytanie 3
    SELECT imie, cena, opis FROM swinki WHERE rasy_id = 1;
    
    -- Zapytanie 4
    SELECT rasa FROM rasy;
    Podgląd strony po tym kroku
    Podgląd strony po kroku 7
  8. Etap 2: Grafika i strona HTML

    Kroki 8-23 · po tym etapie masz 17 z 40 kryteriów (pkt)

    Krok 8: Kadrowanie crested.jpg do 500 × 330 px

    Kryteria:

    R.2.1 Grafikę crested.jpg skadrowano tak, że widoczny jest pysk zwierzęcia oraz wymiar grafiki to dokładnie 500 px szerokości i 330 px wysokości

    ok. 3 min
    Polecenie z arkusza

    Grafikę crested.jpg, wypakowaną z archiwum, należy skadrować tak, aby rozmiar obrazu po kadrowaniu wynosił dokładnie 500 px szerokości na 330 px wysokości. Na skadrowanym obrazie musi być widoczny pysk zwierzęcia. Przykład kadru zaznaczono czarnym prostokątem na obrazie 3.

    Oryginał ma 515 × 640 px. W GIMP-ie narzędzie Kadrowanie z ustawioną stałą wielkością 500 × 330 px; prostokąt przesuwasz tak, by obejmował głowę z uszami - tu od 95 px od góry, jak czarna ramka na obrazie 3. Obraz → Przytnij do zaznaczenia, eksport pod tą samą nazwą. To kadrowanie, nie skalowanie: piksele zostają te same, odcięte są tylko brzegi. Po lewej oryginał z ramką kadru, po prawej wynik.

    Typowe błędy

    Przeskalowanie obrazu do 500 × 330 zamiast kadrowania zniekształca proporcje (świnka robi się „spłaszczona”) - kryterium wymaga kadru.

    Podgląd strony po tym kroku
    Podgląd strony po kroku 8
  9. Krok 9: Plik peruwianka.php w HTML5

    ok. 2 min
    Polecenie z arkusza

    Składa się ze stron o nazwach peruwianka.php, american.php, crested.php zapisanych w języku HTML5

    Najpierw jedna strona, peruwianka.php - dwie pozostałe arkusz każe zrobić na końcu, kopiując gotową i przetestowaną stronę. Rozszerzenie .php, bo dojdą skrypty; na egzaminie plik leży w htdocs XAMPP-a i otwierasz go przez http://localhost/....

    peruwianka.php PHP nowy plik
    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <body>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  10. Krok 10: Język strony

    ok. 1 min
    Polecenie z arkusza

    Ustawiony język zawartości strony na polski

    Atrybut lang="pl" w znaczniku <html>.

    peruwianka.php PHP zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
    </head>
    <body>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  11. Krok 11: Kodowanie polskich znaków

    Kryteria:

    R.2.2 Witrynę internetową zapisano w pliku peruwianka.php oraz zapisano jawnie standard kodowania polskich znaków i deklarację HTML5 <!DOCTYPE HTML> i zadeklarowano język witryny polski np.<HTML lang="pl">. Strona zawiera sekcje head i body

    ok. 1 min
    Polecenie z arkusza

    Jawnie zastosowany właściwy standard kodowania polskich znaków

    <meta charset="UTF-8"> jako pierwszy element <head>. Z deklaracją HTML5, językiem i sekcjami head i body to jedno kryterium klucza.

    peruwianka.php PHP zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  12. Krok 12: Tytuł strony

    Kryteria:

    R.2.3 Nadano tytuł stronie: "Hodowla świnek morskich"

    ok. 1 min
    Polecenie z arkusza

    Tytuł strony widoczny na karcie przeglądarki: „Hodowla świnek morskich”

    <title> w <head>.

    peruwianka.php PHP zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
    </head>
    <body>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  13. Krok 13: Podpięcie arkusza stylów

    Kryteria:

    R.3.6 Strona zawiera działające połączenie z zewnętrznym arkuszem stylów o nazwie styl.css , formatowanie CSS 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 styl.css prawidłowo połączony z kodem strony

    Nazwa pliku: styl.css. Całe formatowanie ma pochodzić z tego pliku - żadnych atrybutów style w HTML-u (R.3.6).

    peruwianka.php PHP zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  14. Krok 14: Bloki: baner, prawy, menu, główny, stopka

    Kryteria:

    R.2.4 Układ strony zdefiniowano dzieląc ją na bloki: banera, menu, główny, prawy oraz stopkę. Zastosowano semantyczne znaczniki sekcji HTML5 zgodnie z ich znaczeniem, w tym do części nagłówkowej - header, stopki - footer, dopuszcza się zagnieżdżenie bloków div w znacznikach semantycznych

    ok. 3 min
    Polecenie z arkusza

    Podział strony na bloki: baner, dwa bloki lewe: blok menu i blok główny, jeden blok prawy, na dole blok stopki. Podział zrealizowany wyłącznie za pomocą semantycznych znaczników sekcji języka HTML5 tak, aby po uruchomieniu w przeglądarce wygląd układu bloków był zgodny z obrazem 2

    Znaczniki semantyczne (R.2.4): baner <header>, menu <nav>, blok główny <main>, blok prawy <aside>, stopka <footer>.

    Kolejność w kodzie jest celowa: <aside> stoi przed menu. Blok prawy ma sięgać od menu aż do stopki, a będzie pływał (float: right) - element pływający zaczyna się na wysokości miejsca, w którym stoi w kodzie, więc postawiony za blokiem głównym zacząłby się dopiero na jego wysokości, poniżej menu.

    peruwianka.php PHP zmienione: 10 linii
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
        </header>
        <aside>
        </aside>
        <nav>
        </nav>
        <main>
        </main>
        <footer>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  15. Krok 15: Baner: nagłówek

    ok. 1 min
    Polecenie z arkusza

    Zawartość banera: nagłówek pierwszego stopnia o treści „Hodowla świnek morskich - zamów świnkowe maluszki”

    Nagłówek <h1> z pełną treścią z arkusza.

    peruwianka.php PHP zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
        </aside>
        <nav>
        </nav>
        <main>
        </main>
        <footer>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  16. Krok 16: Menu: odnośnik do peruwianka.php

    Kryteria:

    R.3.2 Odnośnik o treści "Rasa Peruwianka" inicjuje otwarcie strony peruwianka.php

    ok. 1 min
    Polecenie z arkusza

    Zawartość lewego bloku menu: Odnośnik do pliku peruwianka.php, o treści „Rasa Peruwianka”

    Odnośnik do tej samej strony - w menu powtarza się na wszystkich trzech stronach, więc z american.php i crested.php będzie prowadził z powrotem do peruwianki.

    peruwianka.php PHP zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
        </nav>
        <main>
        </main>
        <footer>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  17. Krok 17: Menu: odnośniki do american.php i crested.php

    Kryteria:

    R.3.3 Odnośnik o treści "Rasa American" inicjuje otwarcie strony american.php lub odnośnik o treści "Rasa Crested" inicjuje otwarcie strony crested.php (kryterium spełnione nawet, gdy pliki nie istnieją)

    ok. 1 min
    Polecenie z arkusza

    Odnośnik do pliku american.php, o treści „Rasa American”. Odnośnik do pliku crested.php, o treści „Rasa Crested”

    Dwa kolejne odnośniki w jednym wierszu menu. Plików american.php i crested.php jeszcze nie ma - klucz uznaje odnośnik nawet wtedy (R.3.3), a pliki powstaną na końcu.

    peruwianka.php PHP zmienione: 2 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
        </main>
        <footer>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  18. Krok 18: Blok prawy: nagłówek

    ok. 1 min
    Polecenie z arkusza

    Zawartość prawego bloku: Nagłówek trzeciego stopnia o treści: „Poznaj wszystkie rasy świnek morskich”

    Nagłówek <h3>.

    peruwianka.php PHP zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
        </main>
        <footer>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  19. Krok 19: Blok prawy: pusta lista numerowana

    Kryteria:

    R.2.6 W prawym bloku umieszczono jedną listę numerowaną, zastosowano znaczniki ol, li (w skrypcie lub HTML)

    ok. 1 min
    Polecenie z arkusza

    Lista numerowana (uporządkowana) wypełniona elementami przez skrypt 1

    Lista uporządkowana to <ol> (numeruje elementy sama). Zostaje pusta - elementy <li> wypisze Skrypt 1 z bazy.

    peruwianka.php PHP zmienione: 2 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
        </main>
        <footer>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  20. Krok 20: Blok główny: zdjęcie

    Kryteria:

    R.2.7 W bloku głównym umieszczono obraz peruwianka.jpg z tekstem alternatywnym: „Świnka morska rasy peruwianka”

    ok. 1 min
    Polecenie z arkusza

    Zawartość lewego bloku głównego: Obraz peruwianka.jpg z tekstem alternatywnym: „Świnka morska rasy peruwianka”

    <img> ze zdjęciem z archiwum i tekstem alternatywnym. Za obrazem stanie wynik Skryptu 2.

    peruwianka.php PHP zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="peruwianka.jpg" alt="Świnka morska rasy peruwianka">
        </main>
        <footer>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  21. Krok 21: Blok główny: linia pozioma

    Kryteria:

    R.2.8 W bloku głównym umieszczono linię poziomą

    ok. 1 min
    Polecenie z arkusza

    Linia pozioma

    Linia pozioma to <hr>. W kodzie zostaje miejsce między obrazem a linią na Skrypt 2.

    peruwianka.php PHP zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="peruwianka.jpg" alt="Świnka morska rasy peruwianka">
            <hr>
        </main>
        <footer>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  22. Krok 22: Blok główny: nagłówek drugiego stopnia

    ok. 1 min
    Polecenie z arkusza

    Nagłówek drugiego stopnia o treści: „Świnki w tym miocie”

    Nagłówek <h2>; pod nim Skrypt 3 wypisze świnki z miotu.

    peruwianka.php PHP zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="peruwianka.jpg" alt="Świnka morska rasy peruwianka">
            <hr>
            <h2>Świnki w tym miocie</h2>
        </main>
        <footer>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  23. Krok 23: Stopka

    Kryteria:

    R.2.5 W banerze zapisano nagłówek h1: "Hodowla świnek morskich - zamów świnkowe maluszki" , w bloku głównym h2: "Świnki w tym miocie" , w bloku prawym h3: "Poznaj wszystkie rasy świnek morskich" oraz w stopce paragraf z numerem zdającego

    ok. 1 min
    Polecenie z arkusza

    Zawartość stopki: Paragraf (akapit) o treści: „Stronę wykonał: ”, dalej wstawiony numer zdającego

    Akapit w <footer>. Na egzaminie po dwukropku wpisujesz swój numer zdającego (PESEL) - tutaj stoi imię i nazwisko autora rozwiązania. Z nagłówkami h1, h2, h3 to kryterium R.2.5.

    peruwianka.php PHP zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="peruwianka.jpg" alt="Świnka morska rasy peruwianka">
            <hr>
            <h2>Świnki w tym miocie</h2>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  24. Etap 3: Styl CSS

    Kroki 24-32 · po tym etapie masz 28 z 40 kryteriów (pkt)

    Krok 24: Plik styl.css: krój Helvetica

    Kryteria:

    R.4.1 Ustawiono domyślne formatowanie wszystkich selektorów (dla *): krój czcionki Helvetica

    ok. 1 min
    Polecenie z arkusza

    Domyślne formatowanie wszystkich selektorów: krój czcionki Helvetica

    Selektor uniwersalny *. Arkusz nie podaje kroju zapasowego, więc wystarczy sama nazwa.

    styl.css CSS nowy plik
    * {
        font-family: Helvetica;
    }
    Podgląd strony po tym kroku (peruwianka.php)
  25. Krok 25: Baner i stopka

    ok. 1 min
    Polecenie z arkusza

    Wspólne dla banera i stopki: kolor tła SaddleBrown, biały kolor czcionki, wyrównanie tekstu do środka, marginesy wewnętrzne 7 px

    Jedna reguła dla dwóch selektorów po przecinku. Marginesy wewnętrzne to padding.

    styl.css CSS zmienione: 6 linii
    * {
        font-family: Helvetica;
    }
    header, footer {
        background-color: SaddleBrown;
        color: white;
        text-align: center;
        padding: 7px;
    }
    Podgląd strony po tym kroku (peruwianka.php)
  26. Krok 26: Blok menu

    ok. 1 min
    Polecenie z arkusza

    Dla lewego bloku menu: kolor tła Peru, szerokość 80%, wysokość 40 px, margines wewnętrzny górny 20 px

    Tylko górny margines wewnętrzny: padding-top. Razem z wysokością blok menu ma 60 px - to ważne przy układzie, bo 60 + 700 px bloku głównego daje dokładnie 760 px bloku prawego.

    styl.css CSS zmienione: 6 linii
    * {
        font-family: Helvetica;
    }
    header, footer {
        background-color: SaddleBrown;
        color: white;
        text-align: center;
        padding: 7px;
    }
    nav {
        background-color: Peru;
        width: 80%;
        height: 40px;
        padding-top: 20px;
    }
    Podgląd strony po tym kroku (peruwianka.php)
  27. Krok 27: Blok główny z paskiem przewijania

    Kryteria:

    R.4.8 Ustawiono paski przewijania dla bloku głównego (overflow:auto lub scroll)

    ok. 2 min
    Polecenie z arkusza

    Dla lewego bloku głównego: szerokość 80%, wysokość 700 px, rozmiar czcionki 120%, paski przewijania pojawiające się tylko, gdy tekst nie mieści się w oknie

    overflow: auto pokazuje pasek przewijania tylko wtedy, gdy treść jest wyższa niż 700 px (scroll pokazywałby go zawsze - klucz uznaje oba).

    styl.css CSS zmienione: 6 linii
    * {
        font-family: Helvetica;
    }
    header, footer {
        background-color: SaddleBrown;
        color: white;
        text-align: center;
        padding: 7px;
    }
    nav {
        background-color: Peru;
        width: 80%;
        height: 40px;
        padding-top: 20px;
    }
    main {
        width: 80%;
        height: 700px;
        font-size: 120%;
        overflow: auto;
    }
    Podgląd strony po tym kroku (peruwianka.php)
  28. Krok 28: Blok prawy

    Kryteria: , ,

    R.4.2 Ustawiono kolor tła SaddleBrown dla banera i stopki oraz Peru dla bloku menu i bloku prawego

    R.4.4 Ustawiono wysokość bloku menu 40px, bloku głównego 700px oraz 760px dla bloku prawego

    R.4.5 Ustawiono szerokość 80% dla bloku głównego i menu oraz 20% dla bloku prawego (width lub grid-template-columns lub flex)

    ok. 1 min
    Polecenie z arkusza

    Dla bloku prawego: kolor tła Peru, biały kolor czcionki, szerokość 20%, wysokość 760 px

    Ta reguła zamyka kryteria kolorów tła (baner, stopka, menu, prawy - R.4.2), wysokości (R.4.4) i szerokości bloków (R.4.5).

    styl.css CSS zmienione: 6 linii
    * {
        font-family: Helvetica;
    }
    header, footer {
        background-color: SaddleBrown;
        color: white;
        text-align: center;
        padding: 7px;
    }
    nav {
        background-color: Peru;
        width: 80%;
        height: 40px;
        padding-top: 20px;
    }
    main {
        width: 80%;
        height: 700px;
        font-size: 120%;
        overflow: auto;
    }
    aside {
        background-color: Peru;
        color: white;
        width: 20%;
        height: 760px;
    }
    Podgląd strony po tym kroku (peruwianka.php)
  29. Krok 29: Odnośniki

    Kryteria: ,

    R.4.3 Ustawiono biały kolor czcionki dla banera, stopki i bloku prawego oraz #DDD dla selektora odnośnika

    R.4.6 Ustawiono cechy tekstu: wyrównanie do środka dla banera i stopki, rozmiar 120% dla bloku głównego i 140% dla odnośnika oraz brak podkreślenia dla odnośnika (text- decoration:none)

    ok. 2 min
    Polecenie z arkusza

    Dla selektora odnośnika: kolor czcionki #DDD, margines wewnętrzny lewy 90 px, rozmiar czcionki 140%, brak podkreślenia

    Selektor znacznika a - uwaga w arkuszu: styl odnośnika wyłącznie selektorem znacznika. #DDD to skrócony zapis jasnoszarego #DDDDDD, brak podkreślenia - text-decoration: none. Biały tekst (baner, stopka, blok prawy) i #DDD odnośników to razem R.4.3, cechy tekstu - R.4.6.

    Typowe błędy

    Reguła nav a albo klasa odnośnika nie spełnia R.4.3 ani R.4.7 - klucz wymaga samego selektora a.

    styl.css CSS zmienione: 6 linii
    * {
        font-family: Helvetica;
    }
    header, footer {
        background-color: SaddleBrown;
        color: white;
        text-align: center;
        padding: 7px;
    }
    nav {
        background-color: Peru;
        width: 80%;
        height: 40px;
        padding-top: 20px;
    }
    main {
        width: 80%;
        height: 700px;
        font-size: 120%;
        overflow: auto;
    }
    aside {
        background-color: Peru;
        color: white;
        width: 20%;
        height: 760px;
    }
    a {
        color: #DDD;
        padding-left: 90px;
        font-size: 140%;
        text-decoration: none;
    }
    Podgląd strony po tym kroku (peruwianka.php)
  30. Krok 30: Kursor na odnośniku

    Kryteria:

    R.4.10 W momencie gdy kursor znajdzie się na odnośniku, jego kolor czcionki zmienia się na biały

    ok. 1 min
    Polecenie z arkusza

    W momencie gdy kursor znajdzie się na odnośniku, jego kolor czcionki zmienia się na biały

    Pseudoklasa :hover - najedź w podglądzie na „Rasa Peruwianka”, jak na obrazie 2.

    styl.css CSS zmienione: 3 linie
    * {
        font-family: Helvetica;
    }
    header, footer {
        background-color: SaddleBrown;
        color: white;
        text-align: center;
        padding: 7px;
    }
    nav {
        background-color: Peru;
        width: 80%;
        height: 40px;
        padding-top: 20px;
    }
    main {
        width: 80%;
        height: 700px;
        font-size: 120%;
        overflow: auto;
    }
    aside {
        background-color: Peru;
        color: white;
        width: 20%;
        height: 760px;
    }
    a {
        color: #DDD;
        padding-left: 90px;
        font-size: 140%;
        text-decoration: none;
    }
    a:hover {
        color: white;
    }
    Podgląd strony po tym kroku (peruwianka.php)
  31. Krok 31: Obraz opływany tekstem

    Kryteria: ,

    R.4.7 Ustawiono marginesy wewnętrzne (padding) dla banera i stopki 7px, górny dla bloku menu 20px, lewy dla odnośnika 90px oraz marginesy zewnętrzne (margin) dla selektora img 30px

    R.4.9 Ustawiono dla obrazu opływanie tekstem po prawej stronie (np. float: left;)

    ok. 1 min
    Polecenie z arkusza

    Dla selektora obrazu: opływanie tekstem po prawej stronie (obraz znajduje się po lewej stronie), marginesy zewnętrzne 30 px

    Obraz po lewej, tekst po prawej - to float: left. Tekst Skryptów 2 i 3 będzie się układał obok zdjęcia, a gdy zejdzie poniżej, zajmie całą szerokość (jak opis Cindy na obrazie 2). Ta reguła kończy marginesy (R.4.7).

    styl.css CSS zmienione: 4 linie
    * {
        font-family: Helvetica;
    }
    header, footer {
        background-color: SaddleBrown;
        color: white;
        text-align: center;
        padding: 7px;
    }
    nav {
        background-color: Peru;
        width: 80%;
        height: 40px;
        padding-top: 20px;
    }
    main {
        width: 80%;
        height: 700px;
        font-size: 120%;
        overflow: auto;
    }
    aside {
        background-color: Peru;
        color: white;
        width: 20%;
        height: 760px;
    }
    a {
        color: #DDD;
        padding-left: 90px;
        font-size: 140%;
        text-decoration: none;
    }
    a:hover {
        color: white;
    }
    img {
        float: left;
        margin: 30px;
    }
    Podgląd strony po tym kroku (peruwianka.php)
  32. Krok 32: Układ bloków zgodny z obrazem 2

    Kryteria:

    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 decydujące o układzie strony, np. float i clear albo display flex albo grid)

    ok. 3 min
    Polecenie z arkusza

    Podział strony na bloki: baner, dwa bloki lewe: blok menu i blok główny, jeden blok prawy, na dole blok stopki. Podział zrealizowany wyłącznie za pomocą semantycznych znaczników sekcji języka HTML5 tak, aby po uruchomieniu w przeglądarce wygląd układu bloków był zgodny z obrazem 2

    Blok prawy pływa w prawo (float: right) i - stojąc w kodzie zaraz za banerem - zaczyna się tuż pod nim. Menu i blok główny pływają w lewo i układają się jeden pod drugim w pozostałych 80% szerokości. Stopka z clear: both schodzi pod wszystkie pływające bloki (R.3.1).

    Typowe błędy

    Bez clear: both stopka wsuwa się pod bloki pływające i ląduje pod banerem - układ jest niezgodny z obrazem 2.

    styl.css CSS zmienione: 9 linii
    * {
        font-family: Helvetica;
    }
    header, footer {
        background-color: SaddleBrown;
        color: white;
        text-align: center;
        padding: 7px;
    }
    nav {
        background-color: Peru;
        width: 80%;
        height: 40px;
        padding-top: 20px;
    }
    main {
        width: 80%;
        height: 700px;
        font-size: 120%;
        overflow: auto;
    }
    aside {
        background-color: Peru;
        color: white;
        width: 20%;
        height: 760px;
    }
    a {
        color: #DDD;
        padding-left: 90px;
        font-size: 140%;
        text-decoration: none;
    }
    a:hover {
        color: white;
    }
    img {
        float: left;
        margin: 30px;
    }
    aside {
        float: right;
    }
    nav, main {
        float: left;
    }
    footer {
        clear: both;
    }
    Podgląd strony po tym kroku (peruwianka.php)
  33. Etap 4: Skrypty PHP

    Kroki 33-41 · po tym etapie masz 38 z 40 kryteriów (pkt)

    Krok 33: Połączenie z bazą i zamknięcie na końcu

    Kryteria: ,

    R.5.1 Skrypt zawiera instrukcje połączenia z serwerem bazy danych i wyboru bazy hodowla

    R.5.2 Ostatnią operacją na bazie jest jej zamknięcie

    ok. 2 min
    Polecenie z arkusza

    Skrypty łączą się z serwerem bazodanowym na localhost, użytkownik root bez hasła, baza danych o nazwie hodowla

    Pierwszym skryptem w kodzie jest Skrypt 1 w bloku prawym (blok prawy stoi przed blokiem głównym), więc tam otwierasz połączenie: mysqli_connect z czterema argumentami łączy się z serwerem i od razu wybiera bazę. Uchwyt w zmiennej $connection posłuży wszystkim skryptom. Na końcu bloku głównego, w miejscu Skryptu 3, stoi na razie samo zamknięcie - arkusz każe zamknąć połączenie na końcu Skryptu 3, czyli jako ostatnią operację na bazie (R.5.1, R.5.2). Od tego kroku podgląd to wynik prawdziwego uruchomienia strony.

    peruwianka.php PHP zmienione: 6 linii
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
                <?php
                    $connection = mysqli_connect("localhost", "root", "", "hodowla");
                ?>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="peruwianka.jpg" alt="Świnka morska rasy peruwianka">
            <hr>
            <h2>Świnki w tym miocie</h2>
            <?php
                mysqli_close($connection);
            ?>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  34. Krok 34: Skrypt 1: zapytanie 4

    Kryteria:

    R.5.3 Skrypt 1 zawiera instrukcje wysyłające do bazy danych zapytanie 4 lub skrypt 2: zapytanie 2 lub skrypt 3: zapytanie 3

    ok. 1 min
    Polecenie z arkusza

    Skrypt 1: Wysyła do bazy danych zapytanie 4

    Treść zapytania w zmiennej $query, mysqli_query wysyła ją do bazy, a w $result zostaje wynik do odczytania wiersz po wierszu. Na stronie jeszcze nic nie widać.

    peruwianka.php PHP zmienione: 2 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
                <?php
                    $connection = mysqli_connect("localhost", "root", "", "hodowla");
                    $query = "SELECT rasa FROM rasy;";
                    $result = mysqli_query($connection, $query);
                ?>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="peruwianka.jpg" alt="Świnka morska rasy peruwianka">
            <hr>
            <h2>Świnki w tym miocie</h2>
            <?php
                mysqli_close($connection);
            ?>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>

    Podgląd strony bez zmian - taki jak po kroku 33.

  35. Krok 35: Skrypt 1: rasy jako elementy listy

    Kryteria: ,

    R.5.4 Skrypt 1 wyświetla w bloku prawym zwrócone zapytaniem rasy świnek morskich

    R.5.9 Skrypt 1 lub 3 zapisano w oparciu o pętlę o liczbie iteracji równej liczbie zwróconych wierszy

    ok. 2 min
    Polecenie z arkusza

    Zwrócone zapytaniem rasy świnek morskich wypisuje jako elementy listy

    Pętla while z mysqli_fetch_row wykonuje się tyle razy, ile wierszy zwróciło zapytanie - tu 13 (R.5.9). Każda rasa trafia do <li>, a ponieważ skrypt stoi wewnątrz <ol>, przeglądarka sama je ponumeruje: 1. peruwianka ... 13. skinny. W bazie rasa „ somali” ma spację na początku - w HTML-u nie jest widoczna.

    peruwianka.php PHP zmienione: 3 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
                <?php
                    $connection = mysqli_connect("localhost", "root", "", "hodowla");
                    $query = "SELECT rasa FROM rasy;";
                    $result = mysqli_query($connection, $query);
                    while ($row = mysqli_fetch_row($result)) {
                        echo "<li>$row[0]</li>";
                    }
                ?>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="peruwianka.jpg" alt="Świnka morska rasy peruwianka">
            <hr>
            <h2>Świnki w tym miocie</h2>
            <?php
                mysqli_close($connection);
            ?>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  36. Krok 36: Skrypt 2: zapytanie 2

    ok. 1 min
    Polecenie z arkusza

    Skrypt 2: Wysyła do bazy danych zapytanie 2

    Skrypt 2 stoi w bloku głównym między zdjęciem a linią poziomą - tam ma pojawić się jego wynik. Połączenie jest już otwarte w Skrypcie 1, więc tylko zapytanie i wynik.

    peruwianka.php PHP zmienione: 4 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
                <?php
                    $connection = mysqli_connect("localhost", "root", "", "hodowla");
                    $query = "SELECT rasa FROM rasy;";
                    $result = mysqli_query($connection, $query);
                    while ($row = mysqli_fetch_row($result)) {
                        echo "<li>$row[0]</li>";
                    }
                ?>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="peruwianka.jpg" alt="Świnka morska rasy peruwianka">
            <?php
                $query = "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = 1;";
                $result = mysqli_query($connection, $query);
            ?>
            <hr>
            <h2>Świnki w tym miocie</h2>
            <?php
                mysqli_close($connection);
            ?>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  37. Krok 37: Skrypt 2: nagłówek z rasą

    Kryteria:

    R.5.5 Skrypt 2 wyświetla w bloku głównym zwróconą zapytaniem rasę świnki morskiej

    ok. 2 min
    Polecenie z arkusza

    Wyświetla dane pobrane z bazy danych, w następujący sposób: W nagłówku drugiego stopnia treść „Rasa: <rasa>”

    Dzięki DISTINCT zapytanie zwraca jeden wiersz, więc wystarczy jedno mysqli_fetch_row bez pętli. Pola są w kolejności z SELECT: $row[0] - data, $row[1] - miot, $row[2] - rasa. Obok zdjęcia pojawia się „Rasa: peruwianka”.

    peruwianka.php PHP zmienione: 2 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
                <?php
                    $connection = mysqli_connect("localhost", "root", "", "hodowla");
                    $query = "SELECT rasa FROM rasy;";
                    $result = mysqli_query($connection, $query);
                    while ($row = mysqli_fetch_row($result)) {
                        echo "<li>$row[0]</li>";
                    }
                ?>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="peruwianka.jpg" alt="Świnka morska rasy peruwianka">
            <?php
                $query = "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = 1;";
                $result = mysqli_query($connection, $query);
                $row = mysqli_fetch_row($result);
                echo "<h2>Rasa: $row[2]</h2>";
            ?>
            <hr>
            <h2>Świnki w tym miocie</h2>
            <?php
                mysqli_close($connection);
            ?>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  38. Krok 38: Skrypt 2: data urodzenia i miot

    Kryteria:

    R.5.6 Skrypt 2 wyświetla zwróconą zapytaniem datę urodzenia i miot

    ok. 1 min
    Polecenie z arkusza

    W paragrafie treść „Data urodzenia: <data-ur>”. W paragrafie treść „Oznaczenie miotu: <miot>”, gdzie dane zapisane w nawiasach <> wybrane zostały z bazy danych

    Dwa akapity z tego samego wiersza: data 2022-06-02 (MariaDB zwraca datę w formacie RRRR-MM-DD, tak jak na obrazie 2) i miot I5.

    peruwianka.php PHP zmienione: 2 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
                <?php
                    $connection = mysqli_connect("localhost", "root", "", "hodowla");
                    $query = "SELECT rasa FROM rasy;";
                    $result = mysqli_query($connection, $query);
                    while ($row = mysqli_fetch_row($result)) {
                        echo "<li>$row[0]</li>";
                    }
                ?>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="peruwianka.jpg" alt="Świnka morska rasy peruwianka">
            <?php
                $query = "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = 1;";
                $result = mysqli_query($connection, $query);
                $row = mysqli_fetch_row($result);
                echo "<h2>Rasa: $row[2]</h2>";
                echo "<p>Data urodzenia: $row[0]</p>";
                echo "<p>Oznaczenie miotu: $row[1]</p>";
            ?>
            <hr>
            <h2>Świnki w tym miocie</h2>
            <?php
                mysqli_close($connection);
            ?>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  39. Krok 39: Skrypt 3: zapytanie 3

    ok. 1 min
    Polecenie z arkusza

    Skrypt 3: Wysyła do bazy danych zapytanie 3

    Zapytanie 3 przed zamknięciem połączenia - po mysqli_close żadne zapytanie już nie przejdzie.

    peruwianka.php PHP zmienione: 2 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
                <?php
                    $connection = mysqli_connect("localhost", "root", "", "hodowla");
                    $query = "SELECT rasa FROM rasy;";
                    $result = mysqli_query($connection, $query);
                    while ($row = mysqli_fetch_row($result)) {
                        echo "<li>$row[0]</li>";
                    }
                ?>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="peruwianka.jpg" alt="Świnka morska rasy peruwianka">
            <?php
                $query = "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = 1;";
                $result = mysqli_query($connection, $query);
                $row = mysqli_fetch_row($result);
                echo "<h2>Rasa: $row[2]</h2>";
                echo "<p>Data urodzenia: $row[0]</p>";
                echo "<p>Oznaczenie miotu: $row[1]</p>";
            ?>
            <hr>
            <h2>Świnki w tym miocie</h2>
            <?php
                $query = "SELECT imie, cena, opis FROM swinki WHERE rasy_id = 1;";
                $result = mysqli_query($connection, $query);
                mysqli_close($connection);
            ?>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>

    Podgląd strony bez zmian - taki jak po kroku 38.

  40. Krok 40: Skrypt 3: imię i cena każdej świnki

    Kryteria:

    R.5.7 Skrypt 3 wyświetla w bloku głównym zwrócone z bazy imię i cenę

    ok. 2 min
    Polecenie z arkusza

    Wyświetla dane pobrane z bazy danych, w następujący sposób: W nagłówku trzeciego stopnia treść „<imie> - <cena> zł”

    Tym razem wierszy jest kilka, więc pętla. W nagłówku <h3> imię i cena: „Cindy - 200 zł”, „Wendy - 200 zł”, „Mała - 250 zł”, „Lola - 200 zł”.

    peruwianka.php PHP zmienione: 3 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
                <?php
                    $connection = mysqli_connect("localhost", "root", "", "hodowla");
                    $query = "SELECT rasa FROM rasy;";
                    $result = mysqli_query($connection, $query);
                    while ($row = mysqli_fetch_row($result)) {
                        echo "<li>$row[0]</li>";
                    }
                ?>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="peruwianka.jpg" alt="Świnka morska rasy peruwianka">
            <?php
                $query = "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = 1;";
                $result = mysqli_query($connection, $query);
                $row = mysqli_fetch_row($result);
                echo "<h2>Rasa: $row[2]</h2>";
                echo "<p>Data urodzenia: $row[0]</p>";
                echo "<p>Oznaczenie miotu: $row[1]</p>";
            ?>
            <hr>
            <h2>Świnki w tym miocie</h2>
            <?php
                $query = "SELECT imie, cena, opis FROM swinki WHERE rasy_id = 1;";
                $result = mysqli_query($connection, $query);
                while ($row = mysqli_fetch_row($result)) {
                    echo "<h3>$row[0] - $row[1] zł</h3>";
                }
                mysqli_close($connection);
            ?>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  41. Krok 41: Skrypt 3: opis w akapicie

    Kryteria: ,

    R.5.8 Skrypt 3 wyświetla zwrócony zapytaniem opis

    R.5.10 Zastosowano znaczące nazewnictwo dla wszystkich zmiennych lub funkcji w języku polskim lub angielskim. Nazwy odzwierciedlają cel zastosowania

    ok. 2 min
    Polecenie z arkusza

    W paragrafie zwrócony zapytaniem opis. Na końcu jest zamykane połączenie z serwerem.

    Opis w akapicie pod nagłówkiem. Pierwszy opis układa się obok zdjęcia, dalsze - na całej szerokości, a blok główny dostaje pasek przewijania, jak na obrazie 2. Połączenie zamyka ostatnia linia skryptu. Nazwy zmiennych mówią, co przechowują: $connection, $query, $result, $row (R.5.10).

    peruwianka.php PHP zmienione: 1 linia
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
                <?php
                    $connection = mysqli_connect("localhost", "root", "", "hodowla");
                    $query = "SELECT rasa FROM rasy;";
                    $result = mysqli_query($connection, $query);
                    while ($row = mysqli_fetch_row($result)) {
                        echo "<li>$row[0]</li>";
                    }
                ?>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="peruwianka.jpg" alt="Świnka morska rasy peruwianka">
            <?php
                $query = "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = 1;";
                $result = mysqli_query($connection, $query);
                $row = mysqli_fetch_row($result);
                echo "<h2>Rasa: $row[2]</h2>";
                echo "<p>Data urodzenia: $row[0]</p>";
                echo "<p>Oznaczenie miotu: $row[1]</p>";
            ?>
            <hr>
            <h2>Świnki w tym miocie</h2>
            <?php
                $query = "SELECT imie, cena, opis FROM swinki WHERE rasy_id = 1;";
                $result = mysqli_query($connection, $query);
                while ($row = mysqli_fetch_row($result)) {
                    echo "<h3>$row[0] - $row[1] zł</h3>";
                    echo "<p>$row[2]</p>";
                }
                mysqli_close($connection);
            ?>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  42. Etap 5: Strony american.php i crested.php

    Kroki 42-43 · po tym etapie masz 40 z 40 kryteriów (pkt)

    Krok 42: Kopia american.php

    Kryteria:

    R.3.4 Na stronie american.php jest widoczny obraz american.jpg z tekstem alternatywnym „Świnka morska rasy american” oraz wyświetlają się informacje dotyczące rasy american

    ok. 3 min
    Polecenie z arkusza

    Należy skopiować dwukrotnie dokument peruwianka.php i zmienić nazwy na american.php i crested.php. Zmiany, których należy dokonać w bloku głównym dokumentu american.php (obraz 4): Obraz: źródło american.jpg, tekst alternatywny „Świnka morska rasy american”. Skrypt 2: w zapytaniu 2 należy zmienić warunek zapytania, id rasy jest równe 6. Skrypt 3: w zapytaniu 3 należy zmienić warunek zapytania, id rasy jest równe 6

    Kopia gotowej i sprawdzonej strony pod nazwą american.php i cztery zmiany w bloku głównym: plik obrazu, tekst alternatywny oraz 1 → 6 w warunkach zapytań 2 i 3. Menu, blok prawy i stopka zostają bez zmian. Podgląd (prawdziwe uruchomienie): rasa american, miot H4 z 2 czerwca, świnki Crejzy, Biała i Lucy - jak na obrazie 4.

    american.php PHP nowy plik
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
                <?php
                    $connection = mysqli_connect("localhost", "root", "", "hodowla");
                    $query = "SELECT rasa FROM rasy;";
                    $result = mysqli_query($connection, $query);
                    while ($row = mysqli_fetch_row($result)) {
                        echo "<li>$row[0]</li>";
                    }
                ?>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="american.jpg" alt="Świnka morska rasy american">
            <?php
                $query = "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = 6;";
                $result = mysqli_query($connection, $query);
                $row = mysqli_fetch_row($result);
                echo "<h2>Rasa: $row[2]</h2>";
                echo "<p>Data urodzenia: $row[0]</p>";
                echo "<p>Oznaczenie miotu: $row[1]</p>";
            ?>
            <hr>
            <h2>Świnki w tym miocie</h2>
            <?php
                $query = "SELECT imie, cena, opis FROM swinki WHERE rasy_id = 6;";
                $result = mysqli_query($connection, $query);
                while ($row = mysqli_fetch_row($result)) {
                    echo "<h3>$row[0] - $row[1] zł</h3>";
                    echo "<p>$row[2]</p>";
                }
                mysqli_close($connection);
            ?>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (american.php)
  43. Krok 43: Kopia crested.php

    Kryteria:

    R.3.5 Na stronie crested.php jest widoczny obraz crested.jpg z tekstem alternatywnym „Świnka morska rasy crested” oraz wyświetlają się informacje dotyczące rasy crested

    ok. 2 min
    Polecenie z arkusza

    Zmiany, których należy dokonać w bloku głównym dokumentu crested.php (obraz 5): Obraz: źródło crested.jpg, tekst alternatywny „Świnka morska rasy crested”. Skrypt 2: w zapytaniu 2 należy zmienić warunek zapytania, id rasy jest równe 7. Skrypt 3: w zapytaniu 3 należy zmienić warunek zapytania, id rasy jest równe 7

    Druga kopia, crested.php: wykadrowane wcześniej zdjęcie crested.jpg, jego tekst alternatywny i identyfikator rasy 7 w obu zapytaniach. Podgląd: miot G3 z 30 czerwca, Bąbelek i Lulu po 150 zł - jak na obrazie 5. Teraz wszystkie trzy odnośniki menu prowadzą do istniejących stron.

    crested.php PHP nowy plik
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
                <?php
                    $connection = mysqli_connect("localhost", "root", "", "hodowla");
                    $query = "SELECT rasa FROM rasy;";
                    $result = mysqli_query($connection, $query);
                    while ($row = mysqli_fetch_row($result)) {
                        echo "<li>$row[0]</li>";
                    }
                ?>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="crested.jpg" alt="Świnka morska rasy crested">
            <?php
                $query = "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = 7;";
                $result = mysqli_query($connection, $query);
                $row = mysqli_fetch_row($result);
                echo "<h2>Rasa: $row[2]</h2>";
                echo "<p>Data urodzenia: $row[0]</p>";
                echo "<p>Oznaczenie miotu: $row[1]</p>";
            ?>
            <hr>
            <h2>Świnki w tym miocie</h2>
            <?php
                $query = "SELECT imie, cena, opis FROM swinki WHERE rasy_id = 7;";
                $result = mysqli_query($connection, $query);
                while ($row = mysqli_fetch_row($result)) {
                    echo "<h3>$row[0] - $row[1] zł</h3>";
                    echo "<p>$row[2]</p>";
                }
                mysqli_close($connection);
            ?>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (crested.php)
  44. Etap 6: Dobre praktyki (poza kluczem)

    Kroki 44-45 · po tym etapie masz 40 z 40 kryteriów (pkt)

    Krok 44: Identyfikator rasy w jednej zmiennej i zapytania przygotowane

    ok. 4 min
    Polecenie z arkusza

    Skrypt 2: w zapytaniu 2 należy zmienić warunek zapytania, id rasy jest równe 6. Skrypt 3: w zapytaniu 3 należy zmienić warunek zapytania, id rasy jest równe 6

    W wersji z egzaminu każda kopia strony różni się w czterech miejscach, a łatwo poprawić jedno zapytanie i zapomnieć o drugim - strona pokaże wtedy rasę american ze świnkami peruwianki. Teraz identyfikator rasy stoi w jednej zmiennej $breedId na początku Skryptu 2, a oba zapytania biorą go przez mysqli_prepare + mysqli_stmt_bind_param. Kopie różnią się już tylko tą linią i obrazem. Przy okazji mysqli_fetch_assoc (pola po nazwach zamiast numerów) i htmlspecialchars przy tekstach z bazy - opis z apostrofem albo znakiem < nie rozbije strony. Na egzaminie wystarczy wersja wcześniejsza - klucz tego nie sprawdza.

    american.php PHP zmienione: 24 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
                <?php
                    $connection = mysqli_connect("localhost", "root", "", "hodowla");
                    $query = "SELECT rasa FROM rasy;";
                    $result = mysqli_query($connection, $query);
                    while ($row = mysqli_fetch_row($result)) {
                        echo "<li>$row[0]</li>";
                    }
                ?>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="american.jpg" alt="Świnka morska rasy american">
            <?php
                $breedId = 6;    // american
                $statement = mysqli_prepare($connection, "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = ?");
                mysqli_stmt_bind_param($statement, "i", $breedId);
                mysqli_stmt_execute($statement);
                $litter = mysqli_fetch_assoc(mysqli_stmt_get_result($statement));
                if ($litter) {
                    echo "<h2>Rasa: " . htmlspecialchars($litter["rasa"]) . "</h2>";
                    echo "<p>Data urodzenia: " . htmlspecialchars($litter["data_ur"]) . "</p>";
                    echo "<p>Oznaczenie miotu: " . htmlspecialchars($litter["miot"]) . "</p>";
                }
                /* Wersja z egzaminu:
                $query = "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = 6;";
                $result = mysqli_query($connection, $query);
                $row = mysqli_fetch_row($result);
                echo "<h2>Rasa: $row[2]</h2>"; ... */
            ?>
            <hr>
            <h2>Świnki w tym miocie</h2>
            <?php
                $statement = mysqli_prepare($connection, "SELECT imie, cena, opis FROM swinki WHERE rasy_id = ?");
                mysqli_stmt_bind_param($statement, "i", $breedId);
                mysqli_stmt_execute($statement);
                $result = mysqli_stmt_get_result($statement);
                while ($pig = mysqli_fetch_assoc($result)) {
                    echo "<h3>" . htmlspecialchars($pig["imie"]) . " - " . $pig["cena"] . " zł</h3>";
                    echo "<p>" . htmlspecialchars($pig["opis"]) . "</p>";
                }
                mysqli_close($connection);
                /* Wersja z egzaminu:
                $query = "SELECT imie, cena, opis FROM swinki WHERE rasy_id = 6;";
                $result = mysqli_query($connection, $query);
                while ($row = mysqli_fetch_row($result)) { echo "<h3>$row[0] - $row[1] zł</h3>"; echo "<p>$row[2]</p>"; }
                mysqli_close($connection); */
            ?>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    crested.php PHP zmienione: 24 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
                <?php
                    $connection = mysqli_connect("localhost", "root", "", "hodowla");
                    $query = "SELECT rasa FROM rasy;";
                    $result = mysqli_query($connection, $query);
                    while ($row = mysqli_fetch_row($result)) {
                        echo "<li>$row[0]</li>";
                    }
                ?>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="crested.jpg" alt="Świnka morska rasy crested">
            <?php
                $breedId = 7;    // crested
                $statement = mysqli_prepare($connection, "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = ?");
                mysqli_stmt_bind_param($statement, "i", $breedId);
                mysqli_stmt_execute($statement);
                $litter = mysqli_fetch_assoc(mysqli_stmt_get_result($statement));
                if ($litter) {
                    echo "<h2>Rasa: " . htmlspecialchars($litter["rasa"]) . "</h2>";
                    echo "<p>Data urodzenia: " . htmlspecialchars($litter["data_ur"]) . "</p>";
                    echo "<p>Oznaczenie miotu: " . htmlspecialchars($litter["miot"]) . "</p>";
                }
                /* Wersja z egzaminu:
                $query = "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = 7;";
                $result = mysqli_query($connection, $query);
                $row = mysqli_fetch_row($result);
                echo "<h2>Rasa: $row[2]</h2>"; ... */
            ?>
            <hr>
            <h2>Świnki w tym miocie</h2>
            <?php
                $statement = mysqli_prepare($connection, "SELECT imie, cena, opis FROM swinki WHERE rasy_id = ?");
                mysqli_stmt_bind_param($statement, "i", $breedId);
                mysqli_stmt_execute($statement);
                $result = mysqli_stmt_get_result($statement);
                while ($pig = mysqli_fetch_assoc($result)) {
                    echo "<h3>" . htmlspecialchars($pig["imie"]) . " - " . $pig["cena"] . " zł</h3>";
                    echo "<p>" . htmlspecialchars($pig["opis"]) . "</p>";
                }
                mysqli_close($connection);
                /* Wersja z egzaminu:
                $query = "SELECT imie, cena, opis FROM swinki WHERE rasy_id = 7;";
                $result = mysqli_query($connection, $query);
                while ($row = mysqli_fetch_row($result)) { echo "<h3>$row[0] - $row[1] zł</h3>"; echo "<p>$row[2]</p>"; }
                mysqli_close($connection); */
            ?>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    peruwianka.php PHP zmienione: 24 linie
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
                <?php
                    $connection = mysqli_connect("localhost", "root", "", "hodowla");
                    $query = "SELECT rasa FROM rasy;";
                    $result = mysqli_query($connection, $query);
                    while ($row = mysqli_fetch_row($result)) {
                        echo "<li>$row[0]</li>";
                    }
                ?>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="peruwianka.jpg" alt="Świnka morska rasy peruwianka">
            <?php
                $breedId = 1;    // jedyna linia, która różni się w american.php (6) i crested.php (7)
                $statement = mysqli_prepare($connection, "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = ?");
                mysqli_stmt_bind_param($statement, "i", $breedId);
                mysqli_stmt_execute($statement);
                $litter = mysqli_fetch_assoc(mysqli_stmt_get_result($statement));
                if ($litter) {
                    echo "<h2>Rasa: " . htmlspecialchars($litter["rasa"]) . "</h2>";
                    echo "<p>Data urodzenia: " . htmlspecialchars($litter["data_ur"]) . "</p>";
                    echo "<p>Oznaczenie miotu: " . htmlspecialchars($litter["miot"]) . "</p>";
                }
                /* Wersja z egzaminu:
                $query = "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = 1;";
                $result = mysqli_query($connection, $query);
                $row = mysqli_fetch_row($result);
                echo "<h2>Rasa: $row[2]</h2>"; ... */
            ?>
            <hr>
            <h2>Świnki w tym miocie</h2>
            <?php
                $statement = mysqli_prepare($connection, "SELECT imie, cena, opis FROM swinki WHERE rasy_id = ?");
                mysqli_stmt_bind_param($statement, "i", $breedId);
                mysqli_stmt_execute($statement);
                $result = mysqli_stmt_get_result($statement);
                while ($pig = mysqli_fetch_assoc($result)) {
                    echo "<h3>" . htmlspecialchars($pig["imie"]) . " - " . $pig["cena"] . " zł</h3>";
                    echo "<p>" . htmlspecialchars($pig["opis"]) . "</p>";
                }
                mysqli_close($connection);
                /* Wersja z egzaminu:
                $query = "SELECT imie, cena, opis FROM swinki WHERE rasy_id = 1;";
                $result = mysqli_query($connection, $query);
                while ($row = mysqli_fetch_row($result)) { echo "<h3>$row[0] - $row[1] zł</h3>"; echo "<p>$row[2]</p>"; }
                mysqli_close($connection); */
            ?>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    Podgląd strony po tym kroku (peruwianka.php)
  45. Krok 45: Rasa bez świnek: komunikat zamiast pustego nagłówka

    ok. 3 min
    Polecenie z arkusza

    Skrypt 2: Wysyła do bazy danych zapytanie 2. Skrypt 3: Wysyła do bazy danych zapytanie 3

    Sprawdzone na prawdziwej bazie: wersja z egzaminu z identyfikatorem rasy 2 (szetlandzka - w tabeli swinki nie ma żadnej) wypisuje pusty nagłówek „Rasa: ”, puste akapity i ostrzeżenie PHP „Trying to access array offset on value of type null”, bo mysqli_fetch_row zwraca null. Teraz Skrypt 2 sprawdza, czy wiersz istnieje, a Skrypt 3 liczy wiersze (mysqli_num_rows, tabela 1 arkusza) i wypisuje komunikat zamiast pustej sekcji. Przy rasach 1, 6 i 7 strona wygląda tak samo jak wcześniej. Na egzaminie wystarczy wersja wcześniejsza - klucz tego nie sprawdza.

    american.php PHP zmienione: 5 linii
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
                <?php
                    $connection = mysqli_connect("localhost", "root", "", "hodowla");
                    $query = "SELECT rasa FROM rasy;";
                    $result = mysqli_query($connection, $query);
                    while ($row = mysqli_fetch_row($result)) {
                        echo "<li>$row[0]</li>";
                    }
                ?>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="american.jpg" alt="Świnka morska rasy american">
            <?php
                $breedId = 6;    // american
                $statement = mysqli_prepare($connection, "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = ?");
                mysqli_stmt_bind_param($statement, "i", $breedId);
                mysqli_stmt_execute($statement);
                $litter = mysqli_fetch_assoc(mysqli_stmt_get_result($statement));
                if ($litter) {
                    echo "<h2>Rasa: " . htmlspecialchars($litter["rasa"]) . "</h2>";
                    echo "<p>Data urodzenia: " . htmlspecialchars($litter["data_ur"]) . "</p>";
                    echo "<p>Oznaczenie miotu: " . htmlspecialchars($litter["miot"]) . "</p>";
                } else {
                    echo "<h2>Brak miotu tej rasy</h2>";
                }
                /* Wersja z egzaminu:
                $query = "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = 6;";
                $result = mysqli_query($connection, $query);
                $row = mysqli_fetch_row($result);
                echo "<h2>Rasa: $row[2]</h2>"; ... */
            ?>
            <hr>
            <h2>Świnki w tym miocie</h2>
            <?php
                $statement = mysqli_prepare($connection, "SELECT imie, cena, opis FROM swinki WHERE rasy_id = ?");
                mysqli_stmt_bind_param($statement, "i", $breedId);
                mysqli_stmt_execute($statement);
                $result = mysqli_stmt_get_result($statement);
                if (mysqli_num_rows($result) == 0) {
                    echo "<p>W tej chwili nie ma świnek tej rasy na sprzedaż.</p>";
                }
                while ($pig = mysqli_fetch_assoc($result)) {
                    echo "<h3>" . htmlspecialchars($pig["imie"]) . " - " . $pig["cena"] . " zł</h3>";
                    echo "<p>" . htmlspecialchars($pig["opis"]) . "</p>";
                }
                mysqli_close($connection);
                /* Wersja z egzaminu:
                $query = "SELECT imie, cena, opis FROM swinki WHERE rasy_id = 6;";
                $result = mysqli_query($connection, $query);
                while ($row = mysqli_fetch_row($result)) { echo "<h3>$row[0] - $row[1] zł</h3>"; echo "<p>$row[2]</p>"; }
                mysqli_close($connection); */
            ?>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    crested.php PHP zmienione: 5 linii
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
                <?php
                    $connection = mysqli_connect("localhost", "root", "", "hodowla");
                    $query = "SELECT rasa FROM rasy;";
                    $result = mysqli_query($connection, $query);
                    while ($row = mysqli_fetch_row($result)) {
                        echo "<li>$row[0]</li>";
                    }
                ?>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="crested.jpg" alt="Świnka morska rasy crested">
            <?php
                $breedId = 7;    // crested
                $statement = mysqli_prepare($connection, "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = ?");
                mysqli_stmt_bind_param($statement, "i", $breedId);
                mysqli_stmt_execute($statement);
                $litter = mysqli_fetch_assoc(mysqli_stmt_get_result($statement));
                if ($litter) {
                    echo "<h2>Rasa: " . htmlspecialchars($litter["rasa"]) . "</h2>";
                    echo "<p>Data urodzenia: " . htmlspecialchars($litter["data_ur"]) . "</p>";
                    echo "<p>Oznaczenie miotu: " . htmlspecialchars($litter["miot"]) . "</p>";
                } else {
                    echo "<h2>Brak miotu tej rasy</h2>";
                }
                /* Wersja z egzaminu:
                $query = "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = 7;";
                $result = mysqli_query($connection, $query);
                $row = mysqli_fetch_row($result);
                echo "<h2>Rasa: $row[2]</h2>"; ... */
            ?>
            <hr>
            <h2>Świnki w tym miocie</h2>
            <?php
                $statement = mysqli_prepare($connection, "SELECT imie, cena, opis FROM swinki WHERE rasy_id = ?");
                mysqli_stmt_bind_param($statement, "i", $breedId);
                mysqli_stmt_execute($statement);
                $result = mysqli_stmt_get_result($statement);
                if (mysqli_num_rows($result) == 0) {
                    echo "<p>W tej chwili nie ma świnek tej rasy na sprzedaż.</p>";
                }
                while ($pig = mysqli_fetch_assoc($result)) {
                    echo "<h3>" . htmlspecialchars($pig["imie"]) . " - " . $pig["cena"] . " zł</h3>";
                    echo "<p>" . htmlspecialchars($pig["opis"]) . "</p>";
                }
                mysqli_close($connection);
                /* Wersja z egzaminu:
                $query = "SELECT imie, cena, opis FROM swinki WHERE rasy_id = 7;";
                $result = mysqli_query($connection, $query);
                while ($row = mysqli_fetch_row($result)) { echo "<h3>$row[0] - $row[1] zł</h3>"; echo "<p>$row[2]</p>"; }
                mysqli_close($connection); */
            ?>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>
    peruwianka.php PHP zmienione: 5 linii
    <!DOCTYPE html>
    <html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Hodowla świnek morskich</title>
        <link rel="stylesheet" href="styl.css">
    </head>
    <body>
        <header>
            <h1>Hodowla świnek morskich - zamów świnkowe maluszki</h1>
        </header>
        <aside>
            <h3>Poznaj wszystkie rasy świnek morskich</h3>
            <ol>
                <?php
                    $connection = mysqli_connect("localhost", "root", "", "hodowla");
                    $query = "SELECT rasa FROM rasy;";
                    $result = mysqli_query($connection, $query);
                    while ($row = mysqli_fetch_row($result)) {
                        echo "<li>$row[0]</li>";
                    }
                ?>
            </ol>
        </aside>
        <nav>
            <a href="peruwianka.php">Rasa Peruwianka</a>
            <a href="american.php">Rasa American</a>
            <a href="crested.php">Rasa Crested</a>
        </nav>
        <main>
            <img src="peruwianka.jpg" alt="Świnka morska rasy peruwianka">
            <?php
                $breedId = 1;    // jedyna linia, która różni się w american.php (6) i crested.php (7)
                $statement = mysqli_prepare($connection, "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = ?");
                mysqli_stmt_bind_param($statement, "i", $breedId);
                mysqli_stmt_execute($statement);
                $litter = mysqli_fetch_assoc(mysqli_stmt_get_result($statement));
                if ($litter) {
                    echo "<h2>Rasa: " . htmlspecialchars($litter["rasa"]) . "</h2>";
                    echo "<p>Data urodzenia: " . htmlspecialchars($litter["data_ur"]) . "</p>";
                    echo "<p>Oznaczenie miotu: " . htmlspecialchars($litter["miot"]) . "</p>";
                } else {
                    echo "<h2>Brak miotu tej rasy</h2>";
                }
                /* Wersja z egzaminu:
                $query = "SELECT DISTINCT data_ur, miot, rasa FROM swinki JOIN rasy ON swinki.rasy_id = rasy.id WHERE rasy.id = 1;";
                $result = mysqli_query($connection, $query);
                $row = mysqli_fetch_row($result);
                echo "<h2>Rasa: $row[2]</h2>"; ... */
            ?>
            <hr>
            <h2>Świnki w tym miocie</h2>
            <?php
                $statement = mysqli_prepare($connection, "SELECT imie, cena, opis FROM swinki WHERE rasy_id = ?");
                mysqli_stmt_bind_param($statement, "i", $breedId);
                mysqli_stmt_execute($statement);
                $result = mysqli_stmt_get_result($statement);
                if (mysqli_num_rows($result) == 0) {
                    echo "<p>W tej chwili nie ma świnek tej rasy na sprzedaż.</p>";
                }
                while ($pig = mysqli_fetch_assoc($result)) {
                    echo "<h3>" . htmlspecialchars($pig["imie"]) . " - " . $pig["cena"] . " zł</h3>";
                    echo "<p>" . htmlspecialchars($pig["opis"]) . "</p>";
                }
                mysqli_close($connection);
                /* Wersja z egzaminu:
                $query = "SELECT imie, cena, opis FROM swinki WHERE rasy_id = 1;";
                $result = mysqli_query($connection, $query);
                while ($row = mysqli_fetch_row($result)) { echo "<h3>$row[0] - $row[1] zł</h3>"; echo "<p>$row[2]</p>"; }
                mysqli_close($connection); */
            ?>
        </main>
        <footer>
            <p>Stronę wykonał: Bartosz Bryniarski</p>
        </footer>
    </body>
    </html>

    Podgląd strony bez zmian - taki jak po kroku 44.

  46. Etap 7: Oddanie pracy

    Krok 46 · po tym etapie masz 40 z 40 kryteriów (pkt)

    Krok 46: Plik przeglądarka.txt i nagranie płyty

    ok. 5 min
    Polecenie z arkusza

    UWAGA: po zakończeniu pracy utwórz plik tekstowy o nazwie przeglądarka.txt. Zapisz w nim nazwę przeglądarki internetowej, w której weryfikowana była poprawność działania witryny. Umieść go w folderze z numerem zdającego. Nagraj płytę z rezultatami pracy.

    W przeglądarka.txt wpisujesz nazwę przeglądarki, w której sprawdzana była strona.

    W folderze z numerem zdającego: american.jpg, american.php, crested.jpg, crested.php, import.png, kw1.jpg - kw4.jpg, kwerendy.txt, peruwianka.jpg, peruwianka.php, przeglądarka.txt, styl.css. Po nagraniu płyty sprawdź jej odczyt i opisz ją numerem zdającego.

    przeglądarka.txt Tekst nowy plik
    Google Chrome

    Podgląd strony bez zmian - taki jak po kroku 44.

Podgląd

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: . 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.