Dataczwartek, 13 sierpnia 2026 Czas18:27:36
← Aplikacje internetowe (PHP)

Lekcja 11. Wyświetlanie danych z bazy na stronie (SELECT)

Średni

Po co się tego uczymy?

To jest dokładnie ten moment, w którym Twoja strona przestaje pokazywać dane "na sztywno" i zaczyna wyświetlać PRAWDZIWY, aktualny katalog filmów wprost z bazy danych — dodasz nowy film przez formularz z Lekcji 10, a od razu pojawi się on na liście, bez zmiany choćby jednej linijki kodu strony.

Teoria

Teraz odwrotny kierunek: pobierzesz dane Z bazy i wyświetlisz je na stronie. To połączenie Lekcji 4 (pętle), Lekcji 5 (tablice asocjacyjne) i Lekcji 9 (połączenie z bazą).

Schemat pracy:
1. Wykonaj zapytanie SELECT przez mysqli_query() — wynik to tzw. "zestaw wyników" (result set), nie same dane.
2. W pętli while pobieraj KOLEJNO każdy wiersz funkcją mysqli_fetch_assoc($wynik) — zwraca ona jeden wiersz jako tablicę asocjacyjną (dokładnie taką, jakiej uczyłeś się w Lekcji 5) ALBO false, gdy wierszy już nie ma.
3. Wewnątrz pętli wypisujesz dane z tego wiersza.

while ($wiersz = mysqli_fetch_assoc($wynik)) { ... } — to bardzo częsty wzorzec: pętla wykonuje się, dopóki funkcja zwraca kolejny wiersz (czyli coś "prawdziwego"), a kończy się, gdy zwróci false.

Przykład z życia

Strona główna serwisu filmowego z katalogiem wszystkich dostępnych tytułów — niezależnie od tego, czy w bazie jest 10 czy 10 000 filmów, ten sam kod PHP z pętlą wyświetli je wszystkie, zawsze aktualne.

Kod (PHP)

<?php
$polaczenie = mysqli_connect("localhost", "root", "", "serwis_filmowy");
if (!$polaczenie) {
    die("Błąd połączenia: " . mysqli_connect_error());
}

$zapytanie = "SELECT tytul, rok_produkcji, gatunek FROM Filmy ORDER BY rok_produkcji DESC";
$wynik = mysqli_query($polaczenie, $zapytanie);

if (mysqli_num_rows($wynik) > ) {
    echo "<ul>";
    while ($wiersz = mysqli_fetch_assoc($wynik)) {
        echo "<li>" . htmlspecialchars($wiersz["tytul"])
             . " (" . $wiersz["rok_produkcji"] . ") - "
             . htmlspecialchars($wiersz["gatunek"]) . "</li>";
    }
    echo "</ul>";
} else {
    echo "Brak filmów w bazie danych.";
}

mysqli_close($polaczenie);

Komentarz i wyjaśnienie kodu

mysqli_num_rows($wynik) sprawdza z góry, ile wierszy zwróciło zapytanie — dzięki temu możemy pokazać komunikat "Brak filmów", zamiast pustej listy. Pętla while ($wiersz = mysqli_fetch_assoc($wynik)) w każdym przebiegu pobiera KOLEJNY wiersz jako tablicę asocjacyjną — $wiersz["tytul"] odpowiada dokładnie nazwie kolumny tytul z tabeli Filmy. htmlspecialchars() na wypisywanych danych chroni przed sytuacją, w której ktoś zapisał w bazie tytuł zawierający znaki HTML — to nawyk, który powinieneś stosować przy KAŻDYM wypisywaniu danych z bazy na stronę.

Ćwiczenie samodzielne

Dodaj do zapytania SELECT warunek WHERE pokazujący tylko filmy z ostatnich 5 lat.

Zadania do pracy własnej

  1. Napisz skrypt wyświetlający listę wszystkich klientów z tabeli Klienci (imię i nazwisko) jako listę HTML.

  2. Napisz skrypt wyświetlający katalog filmów w formie tabeli HTML (

    ) z kolumnami: tytuł, rok, gatunek, ocena — nagłówek tabeli (

    ) na sztywno, wiersze (

    ) z pętli.

  3. Napisz skrypt wyświetlający katalog filmów pogrupowany wizualnie po gatunku: dla każdego gatunku osobny nagłówek

    , a pod nim lista pasujących filmów (podpowiedź: możesz to zrobić dwoma zapytaniami — jedno pobierające listę gatunków, drugie wewnątrz pętli po gatunkach pobierające filmy danego gatunku).

  4. Typowe błędy

    Częsty błąd to pomylenie nazwy klucza w $wiersz[...] z rzeczywistą nazwą kolumny w bazie (wielkość liter ma znaczenie!). Drugi błąd: użycie foreach zamiast while z mysqli_fetch_assoc — $wynik z mysqli_query to nie zwykła tablica, tylko specjalny obiekt wyniku, więc trzeba go "rozpakowywać" pętlą while. Trzeci: zapomnienie sprawdzenia mysqli_num_rows(), przez co pusta baza powoduje wyświetlenie pustej, myloną z błędem listy zamiast czytelnego komunikatu.

    Nawiązanie do egzaminu zawodowego

    To razem z Lekcją 10 stanowi trzon efektu INF.03.5.4.5 ("stosuje biblioteki do obsługi bazy danych") w praktycznym zastosowaniu — wyświetlanie danych z bazy to jeden z najczęściej wymaganych elementów aplikacji internetowej na egzaminie INF.03.