INF.03 Kurs 📖 Składnia
0%
Zaloguj Kup kurs · 49,99 zł
🚀 Moduł 0 · Start

Jak HTML, CSS, PHP, SQL i JS łączą się w jedną stronę

Na egzaminie piszesz w czterech językach naraz: HTML, CSS, SQL i PHP (albo JavaScript). Początkujący najczęściej gubią się nie w samych językach, tylko w tym, jak one się ze sobą łączą. Dlaczego CSS „nie działa”? Skąd PHP wie, jaka jest baza? Kto wywołuje funkcję JavaScript?

W tej lekcji zbudujemy jedną malutką stronę, w której jest wszystko. Przy każdym połączeniu zobaczysz, co je tworzy i co je psuje. Nie musisz jeszcze rozumieć każdego znacznika – to przyjdzie w kolejnych lekcjach. Chodzi o mapę całości.

Cztery pliki, cztery role

Strona „Lista gier” składa się z czterech plików w jednym folderze C:\xampp\htdocs\gry\:

Tekst
gry\
 ├─ index.php     ← HTML (szkielet) + PHP (pobiera dane z bazy)
 ├─ styl.css      ← wygląd
 ├─ logo.png      ← obraz
 └─ (baza danych „sklep” siedzi w MariaDB, nie w folderze!)
Plik / miejsceJęzykRola w jednym zdaniu
index.phpHTMLmówi, co jest na stronie
index.phpPHPprzynosi dane z bazy i wkleja je do HTML
styl.cssCSSmówi, jak to wygląda
baza sklepSQLprzechowuje dane w tabelach
(opcjonalnie)JavaScriptreaguje na kliknięcia już w przeglądarce

Połączenie 1: HTML → CSS

HTML
<link rel="stylesheet" href="styl.css">
📖 W tym przykładzie:<link>href

To jedno zdanie w <head> łączy dwa pliki. Przeglądarka czyta HTML, trafia na tę linijkę i osobno pobiera plik styl.css.

  • rel="stylesheet" – „to, co podaję, jest arkuszem stylów” (a nie np. ikoną),
  • href="styl.css" – gdzie jest plik. Sama nazwa = „leży w tym samym folderze co strona”.

Co psuje to połączenie:

BłądCo się dzieje
href="Styl.css", a plik nazywa się styl.cssna serwerze z Linuksem plik nie zostanie znaleziony (na Windows przejdzie – i potem jest niespodzianka)
plik zapisany jako styl.css.txt (ukryte rozszerzenia)przeglądarka nie znajduje pliku – strona bez kolorów
<link> w <body> zamiast w <head>zwykle zadziała, ale to błąd struktury – na egzaminie możesz stracić punkt
href="C:\Users\Jan\Desktop\styl.css"działa tylko na Twoim komputerze. Zawsze pisz ścieżki względne (sama nazwa albo css/styl.css)

Jak CSS „trafia” w elementy? Przez selektory. W HTML jest <h1>, w CSS piszesz h1 { color: red; } – przeglądarka dopasowuje jedno do drugiego po nazwie. To samo z klasą (class="cena" ↔ .cena) i z id (id="menu" ↔ #menu). Jeśli nazwa w HTML i w CSS różni się choćby jedną literą – styl się nie zastosuje i nie będzie żadnego komunikatu o błędzie.

Połączenie 2: PHP → baza danych

PHP
$polaczenie = mysqli_connect('localhost', 'root', '', 'sklep');
📖 W tym przykładzie:mysqli_connect()

PHP nie wie sam z siebie, gdzie jest baza. Mówisz mu to czterema informacjami:

ArgumentWartość na egzaminieDlaczego
serwer'localhost'baza działa na tym samym komputerze
użytkownik'root'główne konto administratora MariaDB w XAMPP
hasło'' (pusty tekst)w XAMPP root domyślnie nie ma hasła
nazwa bazy'sklep'ta, którą utworzyłeś w phpMyAdmin – dokładnie ta sama nazwa

Wynik (połączenie) zapisujemy do zmiennej $polaczenie, bo każde zapytanie musi wiedzieć, którym połączeniem ma pójść.

Co psuje to połączenie: wyłączony MySQL w XAMPP, literówka w nazwie bazy (sklepp), baza utworzona pod inną nazwą niż w arkuszu. Komunikat: „mysqli_connect(): Unknown database” albo „No connection could be made”.

Połączenie 3: zapytanie SQL → wiersze w PHP

PHP
$wynik = mysqli_query($polaczenie, "SELECT nazwa, cena FROM gry;");
while ($wiersz = mysqli_fetch_array($wynik)) {
    echo "<li>{$wiersz['nazwa']} – {$wiersz['cena']} zł</li>";
}

Tu łączą się trzy języki w trzech linijkach:

  1. SQL w cudzysłowie – PHP go nie rozumie, tylko przekazuje do bazy jak list w kopercie.
  2. Baza odsyła wynik – coś jak tabelkę. PHP wyciąga z niej po jednym wierszu (mysqli_fetch_array), dopóki są.
  3. HTML w echo – PHP „dokleja” go do strony. $wiersz['nazwa'] to wartość kolumny nazwa – nazwa w nawiasie musi być identyczna z nazwą kolumny w SELECT.
ℹ️ Najważniejsze zdanie tej lekcji

PHP produkuje tekst HTML. Przeglądarka nigdy nie widzi PHP ani SQL – dostaje gotowe <li>Wiedźmin – 99 zł</li>. Dlatego gdy coś nie działa, wciśnij Ctrl+U (źródło strony) i zobacz, jaki HTML naprawdę wyszedł.

Połączenie 4: HTML → JavaScript

HTML
<button onclick="policz()">Policz</button>
<p id="wynik"></p>

<script>
function policz() {
    document.getElementById("wynik").innerHTML = 2 + 2;
}
</script>

Co psuje to połączenie: różna wielkość liter (Policz() vs policz), id w HTML inne niż w getElementById, skrypt umieszczony nad elementem, którego szuka (przeglądarka czyta od góry – elementu jeszcze nie ma). Błędy pokazuje F12 → Console.

Cała strona razem

PHP
<!DOCTYPE html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <title>Lista gier</title>
    <link rel="stylesheet" href="styl.css">              <!-- połączenie 1 -->
</head>
<body>
    <img src="logo.png" alt="Logo sklepu">              <!-- obraz z folderu -->
    <h1>Nasze gry</h1>
    <ul>
<?php
$polaczenie = mysqli_connect('localhost', 'root', '', 'sklep');      // połączenie 2
$wynik = mysqli_query($polaczenie, "SELECT nazwa, cena FROM gry;");  // połączenie 3
while ($wiersz = mysqli_fetch_array($wynik)) {
    echo "<li>{$wiersz['nazwa']} – {$wiersz['cena']} zł</li>";
}
mysqli_close($polaczenie);
?>
    </ul>
    <button onclick="policz()">Ile to 2 + 2?</button>    <!-- połączenie 4 -->
    <p id="wynik"></p>
    <script>
        function policz() {
            document.getElementById("wynik").innerHTML = 2 + 2;
        }
    </script>
</body>
</html>

Kolejność wydarzeń – od kliknięcia do ekranu

Tekst
1. Wpisujesz http://localhost/gry/index.php
2. Apache znajduje C:\xampp\htdocs\gry\index.php
3. Bo plik kończy się na .php → oddaje go PHP
4. PHP idzie od góry: HTML przepisuje bez zmian,
   kod <?php ... ?> wykonuje:
     • łączy się z MariaDB
     • wysyła SELECT, dostaje 3 gry
     • wypisuje 3 × <li>
5. Do przeglądarki wraca czysty HTML (bez ani jednej linijki PHP)
6. Przeglądarka czyta HTML, widzi <link> → pobiera styl.css,
   widzi <img> → pobiera logo.png
7. Rysuje stronę z kolorami
8. Klikasz przycisk → JavaScript liczy 2 + 2 i wpisuje 4
   (serwer już w tym nie uczestniczy!)

Diagnoza: co nie działa → gdzie szukać

ObjawKtóre połączenieSprawdź
strona bez kolorówHTML → CSSnazwa pliku w href, rozszerzenie .css, F12 → Network (czerwony 404)
widać kod <?php albo pobiera się plikserwerczy adres to http://localhost/…, czy Apache jest zielony
błąd Unknown databasePHP → bazanazwa bazy w mysqli_connect, czy MySQL działa
lista pusta, brak błędówSQL → PHPuruchom to samo zapytanie w phpMyAdmin – czy zwraca wiersze?
Undefined array key "Nazwa"SQL → PHPwielkość liter: kolumna nazwa ≠ Nazwa
przycisk nic nie robiHTML → JSF12 → Console, nazwa funkcji, id
obrazek „rozbity”HTML → pliknazwa i rozszerzenie pliku w src, czy plik jest w folderze
krzaczki zamiast ą, ękodowanie<meta charset="UTF-8">, plik zapisany w UTF-8, baza z polskim porównywaniem
✍️ Sprawdź, czy rozumiesz połączenia
  1. Który plik pobiera przeglądarka jako pierwszy: index.php czy styl.css? Dlaczego?
  2. Czy JavaScript może sam wysłać zapytanie SELECT do bazy w XAMPP?
  3. W HTML jest <p class="Cena">, a w CSS .cena { color: red; }. Czy cena będzie czerwona?
  4. PHP wypisał pustą listę, ale bez błędów. Co sprawdzisz najpierw?
Odpowiedzi
  1. index.php – dopiero czytając HTML, przeglądarka dowiaduje się, że potrzebuje styl.css.
  2. Nie (w zadaniach INF.03). Z bazą rozmawia tylko PHP na serwerze. JavaScript działa w przeglądarce, która do bazy nie ma dostępu.
  3. Nie. Nazwy klas rozróżniają wielkość liter: Cena ≠ cena.
  4. Wkleję to samo zapytanie do phpMyAdmin (zakładka SQL). Jeśli tam też jest 0 wierszy – błąd jest w warunku WHERE albo w danych, a nie w PHP.

Sprawdź się

Zaznacz odpowiedzi i kliknij „Sprawdź wynik”. Przy każdej błędnej odpowiedzi zobaczysz, dlaczego jest zła i która jest poprawna.

Podoba Ci się ta lekcja?

Tak wygląda cały kurs. Pełna wersja to 62 lekcji + 4 egzaminy próbne z rozwiązaniami.

Kup pełny kurs · 49,99 zł
Chcesz przejść kurs od nowa? Wyczyść zaznaczone lekcje i pasek postępu (dotyczy tylko tej przeglądarki).