- JAK JUŻ OGARNIESZ DZIAŁANIE NA BAZACH
PHP - działaj z bazami danych
Samo potrzebne mięso do egzaminu, nic więcej.
- Podstawy składni i struktury PHP
- Zmienne, stałe i operatory
- Instrukcje warunkowe i pętle
- Tablice i funkcje
Twórz dynamiczne aplikacje webowe: obsługa formularzy, zmienne, pętle, funkcje, sesje, połączenie z bazą danych.
Wstęp – czym jest PHP i do czego służy?
PHP (PHP: Hypertext Preprocessor) to język skryptowy uruchamiany po stronie serwera, służący do tworzenia dynamicznych stron internetowych. Dzięki PHP strony mogą reagować na działania użytkownika, obsługiwać formularze, komunikować się z bazami danych, generować treści na podstawie danych czy zarządzać sesjami i plikami. PHP jest szeroko stosowany w systemach zarządzania treścią (CMS), sklepach internetowych, forach, blogach i portalach społecznościowych.
Ciekawostka
PHP został stworzony w 1994 roku przez Rasmusa Lerdorfa jako proste narzędzie do zliczania odwiedzin na jego stronie internetowej – początkowo nazywało się "Personal Home Page". Dziś PHP jest jednym z najpopularniejszych języków programowania na świecie i według różnych szacunków odpowiada za działanie nawet 77–80% wszystkich stron internetowych.
1. Odpalamy Maszynownię (Setup i absolutne podstawy)
Zanim napiszesz choćby linijkę kodu PHP, musisz zrozumieć jedną, kluczową rzecz: Twój komputer nie mówi w języku PHP. Musisz zainstalować mu tłumacza i stworzyć małe, kontrolowane środowisko, które udaje prawdziwy internet.
-
1.1 Twoje Prywatne Centrum Dowodzenia: XAMPP
Teoria: XAMPP to magiczna paczka, która instaluje na Twoim komputerze wszystko, czego potrzebujesz:
- Serwer Apache: Kelner, który przyjmuje żądania od przeglądarki i podaje jej gotowe dania (strony HTML).
- PHP: Kucharz, który na zapleczu (na serwerze) przygotowuje te dania według Twoich przepisów (skryptów
.php). - MariaDB (MySQL): Ogromny, dobrze zorganizowany magazyn (baza danych), w którym trzymasz wszystkie swoje produkty (dane).
Praktyka krok po kroku:
- Zainstaluj XAMPP.
- Uruchom XAMPP Control Panel. Zobaczysz listę modułów. Włącz (Start) dwa najważniejsze: Apache i MySQL. Jeśli świecą się na zielono, jesteś w domu.
- Znajdź folder
htdocsw katalogu, gdzie zainstalowałeś XAMPP. To jest Twój „święty graal”. Wszystkie Twoje projekty muszą mieszkać tutaj. - Dostęp: Stwórz w
htdocsfolder np.mojastrona. Aby zobaczyć swoją stronę, wpisz w przeglądarce adres:http://localhost/mojastrona. - Zarządzanie bazą: Wejdź na
http://localhost/phpmyadmin. To graficzny interfejs do Twojej bazy danych. Tutaj będziesz tworzyć tabele, przeglądać dane i sprawdzać, czy Twoje skrypty nie narobiły bałaganu.
-
1.2 Składnia PHP: Rozmówki Polsko-Serwerowe
Teoria: Kod PHP jest jak tajny agent w przebraniu. Żyje wewnątrz pliku HTML, ale jest zamknięty w specjalnych znacznikach
<?php ... ?>. Wszystko poza nimi to zwykły HTML, który serwer ignoruje i po prostu wysyła do przeglądarki.Praktyka:
<!DOCTYPE html> <html lang="pl"> <head> <title>Test PHP</title> <style> .pogrubiony { font-weight: bold; } </style> </head> <body> <h1>Dane wygenerowane przez serwer</h1> <?php // Zmienne ZAWSZE zaczynają się od $ $nazwa_uzytkownika = "Mistrz Klawiatury"; $poziom = 99; // 'echo' to Twój megafon - drukuje tekst do wynikowego HTML-a echo "<p>Witaj na serwerze, <span class='pogrubiony'>" . $nazwa_uzytkownika . "</span>!</p>"; // Kropka (.) służy do łączenia tekstów (konkatenacji) echo "<p>Twój poziom zaawansowania: " . $poziom . "</p>"; ?> <p>To jest zwykły HTML, PHP już skończył pracę.</p> </body> </html>Wskazówka: W PHP jest różnica między apostrofem (
') a cudzysłowem ("). Tekst w cudzysłowie próbuje interpretować zmienne w środku (echo "Witaj $nazwa_uzytkownika";zadziała), a tekst w apostrofie traktuje wszystko dosłownie (echo 'Witaj $nazwa_uzytkownika';wyświetli nazwę zmiennej, a nie jej wartość).
2. Podstawy Języka PHP – Składamy Zdania
Zanim zaczniemy wydawać skomplikowane polecenia bazie danych, musimy opanować podstawową gramatykę PHP. To fundament, bez którego wszystko inne się posypie.
-
2.1 Zmienne i Typy Danych
Teoria: Zmienne to pojemniki na dane. W PHP nie musisz deklarować ich typu – język sam się domyśli, czy przechowujesz tekst, czy liczbę. Najważniejsze typy to:
- String: Tekst, np.
$imie = "Grażyna"; - Integer: Liczba całkowita, np.
$wiek = 50; - Float (lub double): Liczba zmiennoprzecinkowa, np.
$cena_paczka = 12.99; - Boolean: Wartość logiczna,
truelubfalse, np.$czy_ma_rabat = true; - Array: Tablica, czyli specjalny pojemnik na wiele wartości.
- String: Tekst, np.
-
2.2 Tablice (Array) – Twoja Skrzynka z Narzędziami
Teoria: Tablice w PHP to super-bohaterowie. Mogą być prostą listą (jak w JS), ale ich prawdziwa moc tkwi w tablicach asocjacyjnych, gdzie sam nadajesz nazwy (klucze) swoim „szufladkom”.
- Tablica indeksowana (numerycznie):
$owoce = ["jabłko", "banan", "czereśnia"]; echo "Drugi owoc na liście to: " . $owoce[1]; // banan (liczymy od zera!) - Tablica asocjacyjna (klucz => wartość):
$dane_osobowe = [ "imie" => "Jan", "nazwisko" => "Kowalski", "wiek" => 45 ]; echo $dane_osobowe["imie"] . " ma " . $dane_osobowe["wiek"] . " lat.";
NA EGZAMINIE MUSISZ TO WIEDZIEĆ: Funkcja
mysqli_fetch_assoc(), której używamy do pobierania danych z bazy, zwraca właśnie tablicę asocjacyjną, gdzie kluczami są nazwy kolumn z Twojej tabeli w bazie. - Tablica indeksowana (numerycznie):
-
2.3 Instrukcje Warunkowe (
if,else)Teoria: Logika jest uniwersalna! Działa tak samo jak w JavaScripcie, zmienia się tylko kosmetyka (np. zmienne z
$). Pozwala Twojemu kodowi podejmować decyzje.$punkty = 78; if ($punkty >= 90) { $ocena = "Bardzo dobry"; } elseif ($punkty >= 70) { $ocena = "Dobry"; } elseif ($punkty >= 50) { $ocena = "Dostateczny"; } else { $ocena = "Niedostateczny"; } echo "Twoja ocena końcowa: " . $ocena; -
2.4 Pętle – Zagonimy Serwer do Pracy
Teoria: Pętle pozwalają wykonywać ten sam blok kodu wielokrotnie, oszczędzając nam pisania. W PHP najważniejszą pętlą do pracy z danymi jest
foreach.for– gdy znamy liczbę powtórzeń:for ($i = 1; $i <= 5; $i++) { echo "To jest powtórzenie numer " . $i . "<br>"; }foreach– idealna do przeglądania tablic: Ta pętla jest stworzona do pracy z tablicami. Sama przejdzie przez każdy element i udostępni go w tymczasowej zmiennej.// Przykład z tablicą asocjacyjną $dane_auta = ["marka" => "Audi", "model" => "A4", "rocznik" => 2020]; echo "<ul>"; foreach ($dane_auta as $klucz => $wartosc) { echo "<li><strong>" . ucfirst($klucz) . ":</strong> " . $wartosc . "</li>"; } echo "</ul>";
-
2.5 Funkcje – Twoje Własne Kapsułki z Kodem
Teoria: Jeśli jakiś fragment kodu ma być użyty w kilku miejscach, zamykasz go w funkcji. Dajesz mu nazwę i od tej pory możesz go wywoływać, zamiast kopiować kod.
function oblicz_cene_brutto($cena_netto) { $vat = 0.23; $cena_brutto = $cena_netto * (1 + $vat); return round($cena_brutto, 2); // round() zaokrągla do 2 miejsc po przecinku } $cena_ksiazki_netto = 40.00; $cena_ksiazki_brutto = oblicz_cene_brutto($cena_ksiazki_netto); echo "Cena książki brutto: " . $cena_ksiazki_brutto . " zł"; // Wyświetli: 49.2 zł
3. Uzyskiwanie Audiencji u Króla (Połączenie z Bazą Danych)
Nie możesz tak po prostu wejść do magazynu i zacząć wynosić towary. Musisz mieć przepustkę i wiedzieć, do których drzwi zapukać.
-
3.1 Plik
connect.php– Twój Złoty KluczTeoria: Dane do połączenia (host, user, hasło, nazwa bazy) to tajne informacje. Trzymanie ich w jednym, osobnym pliku ma dwie zalety: 1. Łatwo je zmienić w jednym miejscu. 2. Możesz ten plik dołączać do każdego innego skryptu, który potrzebuje dostępu do bazy – koniec z kopiowaniem tego samego kodu w kółko!
Praktyka (plik
connect.php):<?php // Definiujemy stałe z danymi do połączenia define('DB_HOST', 'localhost'); define('DB_USER', 'root'); define('DB_PASS', ''); define('DB_NAME', 'sklep_inf03'); // Pamiętaj, żeby stworzyć tę bazę w phpMyAdmin! // Tworzymy obiekt połączenia przy użyciu rozszerzenia MySQLi $conn = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); // System wczesnego ostrzegania. Jeśli coś pójdzie nie tak... if (!$conn) { // die() to brutalna komenda. Zatrzymuje CAŁY skrypt i wyrzuca komunikat. // To dobrze, bo nie ma sensu kontynuować, jeśli nie ma połączenia z bazą. die("FATAL ERROR: Nie można połączyć się z bazą danych. Kod błędu: " . mysqli_connect_errno()); } ?>Wskazówka: Użyj komendy
require_once 'connect.php';na początku każdego skryptu, który ma gadać z bazą.require_oncejest lepsze niżinclude, bo jeśli pliku nie znajdzie, zatrzyma skrypt z błędem krytycznym – co jest pożądane w tym przypadku.
4. Inwentaryzacja (SELECT) – „Co macie na stanie?”
Czas wyciągnąć dane z bazy i pokazać je światu.
-
4.1 Wyświetlanie Wszystkiego w Tabeli (Klasyk Egzaminacyjny)
Teoria: Proces jest jak przepis na zupę: przygotuj składniki (SQL), ugotuj (wyślij zapytanie), a potem nakładaj do miseczek (pętla
whilez wyświetlaniem wierszy).Praktyka (plik
lista_produktow.php):<?php require_once 'connect.php'; ?> <!DOCTYPE html> <html> <head> <title>Lista Produktów</title> <style> table, th, td { border: 1px solid black; border-collapse: collapse; padding: 8px; } </style> </head> <body> <h2>Nasze Produkty</h2> <table> <thead> <tr> <th>ID</th> <th>Nazwa Produktu</th> <th>Cena</th> </tr> </thead> <tbody> <?php $sql = "SELECT id, nazwa, cena FROM produkty ORDER BY nazwa ASC"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { // mysqli_fetch_assoc() pobiera JEDEN wiersz i zamienia go na tablicę, gdzie kluczami są nazwy kolumn. // Pętla while wykonuje się tak długo, jak długo są jeszcze jakieś wiersze do pobrania. while ($row = mysqli_fetch_assoc($result)) { echo "<tr>"; echo "<td>" . $row['id'] . "</td>"; echo "<td>" . $row['nazwa'] . "</td>"; echo "<td>" . $row['cena'] . " zł</td>"; echo "</tr>"; } } else { echo "<tr><td colspan='3'>Brak produktów w bazie danych.</td></tr>"; } ?> </tbody> </table> <?php mysqli_close($conn); // Po robocie zawsze zamykaj połączenie! ?> </body> </html> -
4.2 Wyświetlanie Jednego Bohatera (
WHERE)Teoria: Aby zobaczyć szczegóły jednego produktu, musimy go jakoś zidentyfikować, najczęściej po jego unikalnym ID, które przekazujemy w adresie URL (np.
szczegoly.php?id=7). Dane z adresu URL odczytujemy w PHP za pomocą superglobalnej tablicy$_GET.Praktyka (plik
szczegoly.php):<?php require_once 'connect.php'; // Pobieramy ID z adresu URL i RZUTUJEMY je na liczbę całkowitą. // To proste zabezpieczenie, by nikt nie wstrzyknął tam tekstu. $produkt_id = isset($_GET['id']) ? intval($_GET['id']) : 0; if ($produkt_id > 0) { // ... przygotowanie i wykonanie zapytania z WHERE id = $produkt_id ... } else { echo "Nieprawidłowe ID produktu."; } ?>
5. Przyjęcie Dostawy i Remanent (INSERT, UPDATE)
Czas na aktywne zmiany w bazie – dodawanie i modyfikowanie danych.
-
5.1
INSERTi Rytuał Bezpieczeństwa (Prepared Statements)PUŁAPKA EGZAMINACYJNA: Wklejanie zmiennych prosto do zapytania SQL (
INSERT INTO ... VALUES ('$nazwa', '$cena')) to proszenie się o kłopoty. To jak zostawienie otwartych drzwi do magazynu z napisem „ZAPRASZAMY ZŁODZIEI”. Atak SQL Injection polega na tym, że ktoś w polu formularza zamiast imienia wpisze złośliwy kod SQL.NA EGZAMINIE MUSISZ TO WIEDZIEĆ: Prepared Statements (Zapytania Przygotowane) to Twoja tarcza. Proces jest jak tworzenie formularza do wypełnienia:
- Przygotuj (
prepare): Wysyłasz do bazy szablon zapytania ze znakami zapytania?w miejscach na dane. - Podepnij (
bind_param): Mówisz bazie: „pod pierwszy?wstaw tę zmienną (która jest tekstem), a pod drugi?tę (która jest liczbą)”. Baza sama zadba o bezpieczeństwo tych danych. - Wykonaj (
execute): Mówisz „OK, teraz wykonaj przygotowane polecenie”.
- Przygotuj (
-
5.2
UPDATE– Edycja Danych w Dwóch KrokachTeoria: Edycja to taniec. Krok 1: Pokaż, co edytujesz. Krok 2: Zapisz zmiany.
- Krok 1 (plik
edytuj.php?id=X):
- Pobierz dane rekordu o ID=X z bazy (
SELECT ... WHERE id = X). - Stwórz formularz HTML.
- Wypełnij pola formularza pobranymi danymi, używając atrybutu
value.<input type="text" name="nazwa" value="<?php echo $row['nazwa']; ?>"> - Koniecznie dodaj ukryte pole z ID:
<input type="hidden" name="id" value="<?php echo $row['id']; ?>">, żeby skrypt aktualizujący wiedział, który wiersz ma zmienić.
- Pobierz dane rekordu o ID=X z bazy (
- Krok 2 (plik
aktualizuj.php):
- Odbierz dane z formularza (
$_POST['id'],$_POST['nazwa'], itd.). - Użyj zapytania
UPDATE produkty SET nazwa = ?, cena = ? WHERE id = ?. - Wykonaj „rytuał bezpieczeństwa” z
prepare,bind_paramiexecute. - Po sukcesie przekieruj użytkownika (
header('Location: lista_produktow.php');) z powrotem na listę, żeby zobaczył efekty swojej pracy.
- Odbierz dane z formularza (
- Krok 1 (plik
6. Usuwanie (DELETE) – „Wylatujesz!”
To najprostsza, ale i najbardziej niszczycielska operacja.
-
6.1 Jak Bezpiecznie Coś Usunąć?
Teoria: Klauzula
WHEREw zapytaniuDELETEto Twój jedyny hamulec bezpieczeństwa. Jej brak to cyfrowy odpowiednik naciśnięcia przycisku „samozniszczenie” dla całej tabeli.Praktyka (link na liście produktów):
<td> <a href="usun.php?id=<?php echo $row['id']; ?>" onclick="return confirm('Czy na pewno chcesz usunąć ten produkt?');"> Usuń </a> </td>onclick="...": To mały kawałek JavaScriptu.confirm()wyświetla okienko z pytaniem. Jeśli użytkownik kliknie „Anuluj”, funkcja zwrócifalsei przeglądarka nie przejdzie pod wskazany link. Proste, a chroni przed przypadkowymi kliknięciami!- Skrypt
usun.phpwykonuje zapytanieDELETE FROM produkty WHERE id = ?z użyciemprepare,bind_paramiexecute, a na koniec przekierowuje z powrotem na listę.