Ćwiczenie – Tworzenie raportów i dynamicznych stron w PHP (INF.03)
1. Prosty raport z tabeli
Cel: Uczeń potrafi wygenerować prosty raport z bazy danych.
Opis: Pobieramy wszystkie rekordy z tabeli produkty i wyświetlamy je w tabeli HTML.
<?php
$conn = new mysqli("localhost", "root", "", "sklep");
$sql = "SELECT * FROM produkty";
$result = $conn->query($sql);
echo "<table class='effect-table'>";
echo "<tr><th>ID</th><th>Nazwa</th><th>Cena</th></tr>";
while($row = $result->fetch_assoc()) {
echo "<tr><td>{$row['id']}</td><td>{$row['nazwa']}</td><td>{$row['cena']}</td></tr>";
}
echo "</table>";
?>
| ID | Nazwa | Cena |
| 1 | Laptop | 3200 |
| 2 | Telefon | 1500 |
2. Filtrowanie danych w raporcie
Cel: Uczeń potrafi filtrować raport po nazwie produktu.
Opis: Filtrujemy dane z wykorzystaniem przygotowanych zapytań, aby uniknąć SQL Injection.
<?php
$filter = filter_input(INPUT_GET, 'szukaj', FILTER_SANITIZE_STRING);
$stmt = $conn->prepare("SELECT * FROM produkty WHERE nazwa LIKE ?");
$param = "%".$filter."%";
$stmt->bind_param("s", $param);
$stmt->execute();
$result = $stmt->get_result();
echo "<form method='GET'>Szukaj: <input type='text' name='szukaj'><button type='submit'>Filtruj</button></form>";
echo "<table class='effect-table'><tr><th>ID</th><th>Nazwa</th><th>Cena</th></tr>";
while($row = $result->fetch_assoc()) {
echo "<tr><td>{$row['id']}</td><td>{$row['nazwa']}</td><td>{$row['cena']}</td></tr>";
}
echo "</table>";
?>
| ID | Nazwa | Cena |
| 1 | Laptop | 3200 |
| 2 | Telefon | 1500 |
3. Sortowanie danych
Cel: Uczeń potrafi sortować raport po kolumnach.
Opis: Sortowanie po nazwie lub cenie z filtrowaniem poprawności danych.
<?php
$sort = $_GET['sort'] ?? 'nazwa';
$sort = in_array($sort, ['nazwa','cena']) ? $sort : 'nazwa';
$sql = "SELECT * FROM produkty ORDER BY $sort";
$result = $conn->query($sql);
echo "<a href='?sort=nazwa'>Sortuj wg nazwy</a> | <a href='?sort=cena'>Sortuj wg ceny</a>";
echo "<table class='effect-table'><tr><th>ID</th><th>Nazwa</th><th>Cena</th></tr>";
while($row = $result->fetch_assoc()) {
echo "<tr><td>{$row['id']}</td><td>{$row['nazwa']}</td><td>{$row['cena']}</td></tr>";
}
echo "</table>";
?>
Sortowanie danych pozwala użytkownikowi łatwo przeglądać raporty.
4. Raport z agregacją (SUMA i ŚREDNIA)
Cel: Uczeń potrafi tworzyć raporty z podsumowaniami.
Opis: SUMA i ŚREDNIA wartości dla kolumny cena w tabeli produktów.
<?php
$sql = "SELECT kategoria, COUNT(*) AS liczba, SUM(cena) AS suma, AVG(cena) AS srednia FROM produkty GROUP BY kategoria";
$result = $conn->query($sql);
echo "<table class='effect-table'><tr><th>Kategoria</th><th>Liczba</th><th>Suma</th><th>Średnia</th></tr>";
while($row = $result->fetch_assoc()) {
echo "<tr><td>{$row['kategoria']}</td><td>{$row['liczba']}</td><td>{$row['suma']}</td><td>{$row['srednia']}</td></tr>";
}
echo "</table>";
?>
Podsumowanie danych daje szybki wgląd w wartości i ilości produktów.
5. Zadanie końcowe – Tworzenie pełnego raportu
Polecenie: - Utwórz stronę z raportem produktów,
- Dodaj filtrowanie po nazwie i sortowanie po kolumnach,
- Dodaj podsumowanie SUMA i ŚREDNIA cen produktów,
- Użyj przygotowanych zapytań i filtrowania danych.
Po ukończeniu tego ćwiczenia uczeń potrafi tworzyć dynamiczne raporty w PHP i MySQL w bezpieczny sposób.