Ć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>";
?>
  
IDNazwaCena
1Laptop3200
2Telefon1500

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>";
?>
  
IDNazwaCena
1Laptop3200
2Telefon1500

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:
Po ukończeniu tego ćwiczenia uczeń potrafi tworzyć dynamiczne raporty w PHP i MySQL w bezpieczny sposób.