Bez bazy danych strona jest tylko ulotką – ładną, ale statyczną. Podłączenie bazy zmienia witrynę w aplikację.
Dynamika: Treść strony (artykuły, produkty) zmienia się bez edycji kodu HTML.
Interakcja: Użytkownik może zostawić ślad (komentarz, zamówienie, konto).
Trwałość: Dane nie znikają po odświeżeniu przeglądarki.
Personalizacja: Wyświetlanie treści dopasowanych do konkretnego użytkownika.
Na egzaminie INF.03 najczęściej korzystamy z proceduralnego podejścia biblioteki mysqli. Rozbijmy standardowy „boilerplate” na czynniki pierwsze:
$conn = mysqli_connect(„localhost”, „root”, „”, „szkola”);
mysqli_connect(): Funkcja otwierająca „tunel” między serwerem PHP a serwerem MySQL.
"localhost": Adres serwera bazy danych (zazwyczaj ten sam, na którym jest strona).
"root": Użytkownik bazy danych (standard w XAMPP).
"": Hasło (domyślnie puste w środowisku lokalnym).
"szkola": Nazwa konkretnej bazy danych, z którą chcemy pracować.
Otwórz folder, w którym zainstalowałeś XAMPP, np.:
Wejdź do folderu:
Tam utwórz np. folder projektu:
W nim umieść plik z połączeniem z bazą, np.:
xampp
└── htdocs
└── moj_projekt
├── index.php
├── db.php ← plik z połączeniem do bazy (można również dopisać kod w pliku index.php)
└── style.css
To zadanie odwzorowuje typową strukturę arkusza egzaminacyjnego.
Krok 1: Przygotowanie bazy (SQL)
Proszę najpierw stworzyć strukturę w phpMyAdmin:
CREATE DATABASE technikum;
USE technikum;
CREATE TABLE uczniowie (
id INT PRIMARY KEY AUTO_INCREMENT,
imie VARCHAR(50),
nazwisko VARCHAR(50),
klasa VARCHAR(10)
);
Krok 2: Kod strony z formularzem i skryptem (index.php):
<!DOCTYPE html>
<html lang=”pl”>
<head>
<meta charset=”UTF-8″>
<title>Rejestracja na zajęcia</title>
</head>
<body>
<h2>Formularz zgłoszeniowy</h2>
<form method=”POST” action=”index.php”>
Imię: <input type=”text” name=”imie”><br>
Nazwisko: <input type=”text” name=”nazwisko”><br>
Klasa: <input type=”text” name=”klasa”><br>
<button type=”submit” name=”wyslij”>Wyślij zgłoszenie</button>
</form>
<?php
if (isset($_POST[’wyslij’])) {
// 1. Połączenie z bazą
$polaczenie = mysqli_connect(„localhost”, „root”, „”, „technikum”);
// 2. Pobranie danych z formularza
$imie = $_POST[’imie’];
$nazwisko = $_POST[’nazwisko’];
$klasa = $_POST[’klasa’];
// 3. Budowa zapytania SQL
$zapytanie = „INSERT INTO uczniowie (imie, nazwisko, klasa)
VALUES (’$imie’, '$nazwisko’, '$klasa’)”;
// 4. Wykonanie zapytania i sprawdzenie wyniku
if (mysqli_query($polaczenie, $zapytanie)) {
echo „<p>Dane zostały zapisane do bazy!</p>”;
} else {
echo „Błąd: ” . mysqli_error($polaczenie);
}
// 5. Zamknięcie połączenia
mysqli_close($polaczenie);
}
?>
</body>
</html>
if (isset($_POST[’wyslij’])) { … }
isset(): Funkcja sprawdzająca, czy zmienna w ogóle istnieje.
$_POST['wyslij']: To odwołanie do przycisku <button name="wyslij">. Skrypt „odpali się” tylko wtedy, gdy użytkownik faktycznie kliknie przycisk. Bez tego PHP próbowałby wysłać puste dane do bazy przy każdym odświeżeniu strony.
Nawiązanie połączenia (Most)
Zanim wyślemy dane, musimy otworzyć połączenie.
$polaczenie = mysqli_connect(„localhost”, „root”, „”, „technikum”);
Wyobraź sobie to jako wybranie numeru telefonu do bazy. Jeśli podasz złe parametry (np. złe hasło), połączenie zostanie odrzucone. Na egzaminie INF.03 parametry są zazwyczaj stałe:
Serwer: localhost
Użytkownik: root
Hasło: (puste)
Odbiór danych z formularza
Tutaj „wyciągamy” to, co zostało wpisane w pola tekstowe HTML:
$imie = $_POST[’imie’];
$nazwisko = $_POST[’nazwisko’];
$klasa = $_POST[’klasa’];
$_POST['imie']: Zmienna superglobalna, która przechowuje wartość z pola <input name="imie">.
Ważne: Nazwa w nawiasie kwadratowym musi być identyczna z atrybutem name w HTML. PHP rozróżnia wielkość liter!
Budowa zapytania SQL (List do bazy)
To najważniejszy i najtrudniejszy etap dla uczniów – połączenie składni PHP ze składnią SQL.
$zapytanie = „INSERT INTO uczniowie (imie, nazwisko, klasa)
VALUES (’$imie’, '$nazwisko’, '$klasa’)”;
INSERT INTO uczniowie (...): Standardowy SQL. Mówimy bazie: „Wstaw do tabeli uczniowie do kolumn imie, nazwisko, klasa…”.
VALUES ('$imie', ...): Tu wstawiamy nasze zmienne z PHP.
Pułapka: Zmienne tekstowe w SQL muszą być w apostrofach (' '). Jeśli o nich zapomnisz, baza zwróci błąd składni.
Wykonanie operacji i weryfikacja
Samo przygotowanie zapytania to tylko napisanie tekstu. Musimy go jeszcze „wysłać” do wykonania.
if (mysqli_query($polaczenie, $zapytanie)) {
echo „<p>Dane zostały zapisane do bazy!</p>”;
} else {
echo „Błąd: ” . mysqli_error($polaczenie);
}
mysqli_query(): Funkcja, która bierze nasze połączenie oraz treść zapytania i próbuje je zrealizować w MySQL. Zwraca true (sukces) lub false (porażka).
mysqli_error(): Jeśli coś pójdzie nie tak (np. literówka w nazwie tabeli), ta funkcja powie nam dokładnie, co „boli” bazę danych. To najlepszy przyjaciel programisty podczas debugowania.
Sprzątanie (Zamknięcie połączenia)
Dobra praktyka programistyczna.
mysqli_close($polaczenie);
Kończymy rozmowę z bazą, aby nie blokować zasobów serwera. Na prostych stronach PHP robi to automatycznie po zakończeniu skryptu, ale na egzaminie warto to dopisać dla pełnej punktacji.
| Miejsce błędu | Przykładowy błędny kod | Dlaczego to nie działa? | Poprawna forma |
| Atrybuty HTML | <input type="text"> | Brak atrybutu name. PHP nie wie, jak odebrać to pole. | <input type="text" name="imie"> |
| Metoda formularza | <form> | Domyślnie formularz używa GET. Dane idą do paska adresu, a nie do $_POST. | <form method="POST"> |
| Pobieranie danych | $imie = $_POST[imie]; | Brak cudzysłowów wewnątrz nawiasu kwadratowego. | $imie = $_POST['imie']; |
| Zapytanie SQL | VALUES ($imie, $wiek) | Brak apostrofów wokół zmiennych tekstowych w SQL. | VALUES ('$imie', $wiek) |
| Logika PHP | if ($polaczenie) | Sprawdzenie połączenia to nie to samo co wykonanie zapytania. | if (mysqli_query($conn, $sql)) |
| Interpunkcja | $a = 5 | Brak średnika na końcu linii w PHP. | $a = 5; |