Jeśli arkusz INF.03 ma skrypt PHP, prawie zawsze chodzi o to samo: połączyć się z bazą, wykonać zapytanie i wypisać wyniki na stronie. Do tego dochodzi czasem formularz, który dodaje rekord albo filtruje dane. Wystarczy opanować jeden wzór i dopasowywać go do kolejnych arkuszy.
Wzór skryptu: cztery kroki
<?php
$polaczenie = mysqli_connect('localhost', 'root', '', 'sklep'); // 1. połączenie
$zapytanie = "SELECT nazwa, cena FROM produkty ORDER BY cena DESC;";
$wynik = mysqli_query($polaczenie, $zapytanie); // 2. zapytanie
while ($wiersz = mysqli_fetch_array($wynik)) { // 3. pętla po wierszach
echo "<p>" . $wiersz['nazwa'] . " – " . $wiersz['cena'] . " zł</p>";
}
mysqli_close($polaczenie); // 4. zamknięcie
?>mysqli_connect– serwerlocalhost, użytkownikroot, puste hasło (domyślnie w XAMPP) i nazwa bazy z arkusza.mysqli_query– wykonuje zapytanie. Najczęściej jest to jedno z zapytań z plikukwerendy.txt.mysqli_fetch_arrayw pętliwhile– pobiera kolejne wiersze. Do kolumn odwołujesz się po nazwie:$wiersz['nazwa'].mysqli_close– zamyka połączenie. Na egzaminie to bardzo często osobne kryterium.
Strona ze skryptem PHP musi mieć rozszerzenie .php i być otwierana przez http://localhost/..., a nie dwuklikiem z dysku. Inaczej PHP się nie wykona.
Gdzie wstawić skrypt
Skrypt umieszcza się w miejscu, gdzie mają pojawić się dane – np. w bloku main, w liście albo w tabeli. HTML dookoła zostaje zwykłym HTML-em:
<main>
<h2>Nasze produkty</h2>
<ul>
<?php
$polaczenie = mysqli_connect('localhost', 'root', '', 'sklep');
$wynik = mysqli_query($polaczenie, "SELECT nazwa, cena FROM produkty;");
while ($wiersz = mysqli_fetch_array($wynik)) {
echo "<li>{$wiersz['nazwa']} – {$wiersz['cena']} zł</li>";
}
mysqli_close($polaczenie);
?>
</ul>
</main>Wypisywanie danych w tabeli i z obrazkiem
Arkusze często wymagają, żeby każdy rekord był osobnym wierszem tabeli albo blokiem z obrazem:
while ($wiersz = mysqli_fetch_array($wynik)) {
echo "<tr><td>{$wiersz['nazwa']}</td><td>{$wiersz['cena']}</td></tr>";
}
while ($wiersz = mysqli_fetch_array($wynik)) {
echo "<div class='produkt'>";
echo "<img src='{$wiersz['zdjecie']}' alt='{$wiersz['nazwa']}'>";
echo "<h3>{$wiersz['nazwa']}</h3>";
echo "</div>";
}Formularz, który dodaje rekord
Typowe polecenie: „po kliknięciu przycisku dane z formularza są dodawane do tabeli”. Formularz wysyła dane metodą POST, a skrypt sprawdza, czy pola przyszły:
<form action="index.php" method="post">
<input type="text" name="nazwa">
<input type="number" name="cena">
<button type="submit">Dodaj</button>
</form>
<?php
if (!empty($_POST['nazwa']) && !empty($_POST['cena'])) {
$polaczenie = mysqli_connect('localhost', 'root', '', 'sklep');
$nazwa = $_POST['nazwa'];
$cena = $_POST['cena'];
mysqli_query($polaczenie, "INSERT INTO produkty (nazwa, cena) VALUES ('$nazwa', $cena);");
mysqli_close($polaczenie);
}
?>Na egzaminie wystarcza prosty zapis jak wyżej. W prawdziwych aplikacjach dane od użytkownika trzeba zabezpieczać przed SQL injection, np. przez zapytania przygotowane (mysqli_prepare).
Najczęstsze błędy w skryptach PHP
| objaw | przyczyna |
|---|---|
| na stronie widać kod PHP | plik ma rozszerzenie .html albo jest otwarty z dysku, nie przez localhost |
Unknown database | literówka w nazwie bazy albo baza nie została zaimportowana |
Uncaught mysqli_sql_exception | błąd w zapytaniu SQL (np. zła nazwa kolumny) – sprawdź je najpierw w phpMyAdmin |
Undefined array key | nazwa kolumny w $wiersz['...'] inna niż w zapytaniu |
| polskie znaki jako krzaczki | brak <meta charset="UTF-8"> w dokumencie |
| nic się nie wypisuje | zapytanie zwraca zero wierszy – sprawdź warunek WHERE |
Każde zapytanie sprawdź najpierw w phpMyAdmin. Jeśli tam działa, a w PHP nie – błąd jest w kodzie PHP, nie w SQL.
Wszystkie funkcje z tego poradnika są wyjaśnione w słowniku składni PHP. O samych zapytaniach przeczytasz w poradniku Kwerendy SQL na INF.03.