INF.03 · Bazy danych i SQL
Formularze i raporty: dane widziane oczami użytkownika
Sekretariat szkoły wypełnia formularz „nowy uczeń”, a w tle wykonuje się INSERT. Dyrektor otwiera „raport frekwencji”, a w tle działa gotowe zapytanie SELECT z GROUP BY. Użytkownicy nie znają SQL-a, a mimo to z niego korzystają. Dziś zobaczysz, jak połączyć wszystko, czego się nauczyłeś, w narzędzia dla ludzi: formularze i widoki.
- około 35 minut
- widoki (VIEW) · formularze HTML
- bazy: sklep_muzyczny, apteka, FitZone
Po tej lekcji: zapiszesz raport jako widok, wyjaśnisz, czym widok różni się od tabeli, i napiszesz bezpieczny formularz, który dodaje dane do bazy.
1 · Trzy pojęcia
Kto wprowadza, kto czyta, kto zapamiętuje
Te trzy pojęcia dopełniają się. Formularz wprowadza dane, raport je zestawia, a widok zapisuje zapytanie raportu na stałe.
Formularzwejście
Interfejs, przez który użytkownik wpisuje dane. W tle trafiają do bazy poleceniem INSERT albo UPDATE.
Na przykład formularz „nowy uczeń”.
Raportwyjście
Zestawienie danych z bazy, zwykle wynik gotowego SELECT (często z JOIN i GROUP BY) w czytelnej formie.
Na przykład raport sprzedaży według produktów.
Widok (VIEW)zapisane zapytanie
Zapytanie zapisane w bazie pod nazwą. Wygląda jak tabela, ale nie przechowuje własnych danych.
Na przykład RaportSprzedazy.
2 · Sprawdź na danych
Widok zawsze pokazuje aktualny stan
To widok z raportem sprzedaży na prawdziwych zamówieniach ze sklepu muzycznego. Dodaj zamówienie i zobacz, że raport sam się zmienia. Potem spróbuj wpisać dane bezpośrednio do widoku.
Widok za każdym razem wykonuje zapisane zapytanie od nowa. Dlatego zawsze jest aktualny, ale nie możesz do niego swobodnie zapisywać danych jak do zwykłej tabeli.
3 · Raport w SQL
CREATE VIEW i odczyt jak z tabeli
Raport sprzedaży zapisujesz raz, a potem odpytujesz go tak, jak zwykłą tabelę. Nie musisz pamiętać ani przepisywać długiego zapytania.
CREATE VIEW RaportSprzedazy AS
SELECT p.nazwa,
SUM(z.ilosc) AS sztuk_sprzedanych,
SUM(z.ilosc * p.cena) AS wartosc
FROM Zamowienia z
JOIN Produkty p ON z.id_produktu = p.id_produktu
GROUP BY p.nazwa;
SELECT * FROM RaportSprzedazy ORDER BY wartosc DESC LIMIT 3;
CREATE VIEW ... ASzapisuje zapytanie pod nazwą. Same dane zostają w tabelach źródłowych.SELECT * FROM RaportSprzedazywykonuje zapisane zapytanie na aktualnych danych.- Aliasy
ASnadają kolumnom raportu czytelne nagłówki.
| nazwa | sztuk_sprzedanych | wartosc |
|---|---|---|
| Gitara elektryczna | 2 | 4399.98 |
| Kolumna aktywna | 3 | 3597.00 |
| Keyboard edukacyjny | 1 | 1299.50 |
4 · Formularz
Formularz HTML i polecenie, które za nim stoi
Formularz HTML jest tylko „powierzchnią”. Po kliknięciu „Zapisz” dane trafiają do skryptu po stronie serwera (na przykład w PHP), który dopiero wykonuje INSERT. Skrypt musi traktować wpisane dane jako dane, a nie jako fragment polecenia SQL.
<form method="post" action="zapisz_klienta.php">
<label>Imię <input name="imie" required></label>
<label>Nazwisko <input name="nazwisko" required></label>
<label>Miasto <input name="miasto" required></label>
<label>E-mail <input name="email" type="email"></label>
<button>Zapisz</button>
</form>
requireditype="email"to wstępna kontrola w przeglądarce. Nie zastępuje sprawdzania danych po stronie serwera, bo ktoś może wysłać dane bez formularza.- Skrypt
zapisz_klienta.phpodbiera pola i wykonujeINSERT INTO Klienci (imie, nazwisko, miasto, email) VALUES (?, ?, ?, ?)z parametrami.
5 · Zanim się pomylisz
Cztery pomyłki w formularzach i raportach
Rozwiń każdą z nich.
Wklejanie danych użytkownika do SQL
$sql = "INSERT INTO Klienci (imie) VALUES ('" . $_POST['imie'] . "')";Ktoś wpisze w polu imię fragment polecenia SQL i zmieni jego działanie (to atak SQL injection).
$stmt = $pdo->prepare("INSERT INTO Klienci (imie) VALUES (?)");
$stmt->execute([$_POST['imie']]);Zapytanie z parametrami oddziela polecenie od danych.
Traktowanie widoku jak zwykłej tabeli
INSERT INTO RaportSprzedazy (nazwa) VALUES ('Mysz');Błąd: The target table RaportSprzedazy of the INSERT is not insertable-into. Widok z GROUP BY nie przechowuje danych.
INSERT INTO Zamowienia (id_klienta, id_produktu, ilosc, data_zamowienia)
VALUES (1, 4, 5, '2026-03-11');Dane dopisujesz do tabel źródłowych, a widok pokaże je sam.
Formularz bez walidacji po stronie serwera
Sprawdzam tylko `required` w HTML.Kto wyśle żądanie z pominięciem formularza, zapisze błędne dane (pusty e-mail, zbyt długi tekst).
Serwer ponownie sprawdza każde pole, a baza pilnuje `NOT NULL`, `UNIQUE` i `CHECK`.Walidacja w przeglądarce to wygoda, a walidacja na serwerze i w bazie to bezpieczeństwo.
Wiele prawie identycznych widoków
RaportSprzedazy2025, RaportSprzedazy2026, RaportSprzedazyMarzec…Trudno je utrzymać. Zmiana wymaga poprawiania każdego z osobna.
Jedno zapytanie z parametrem (rok, miesiąc) po stronie aplikacji.Jedno uniwersalne zapytanie jest łatwiejsze do utrzymania niż wiele kopii.
6 · Sprawdź sam siebie
Zanim oddasz raport lub formularz
Ta lekcja łączy SELECT, JOIN i GROUP BY w narzędzia, z których użytkownik końcowy korzysta bez znajomości SQL-a.
Podsumowanie
Co warto zapamiętać
- Formularz wprowadza dane (
INSERT,UPDATE), raport je zestawia (SELECT). - Widok to zapisane zapytanie. Nie przechowuje danych i zawsze pokazuje aktualny stan.
- Do widoku z
GROUP BYnie zapiszesz danych. Zapisujesz je do tabel źródłowych. - Dane z formularza przekazuj do bazy jako parametry, a nie doklejaj do tekstu SQL.
- Walidacja w przeglądarce nie zastępuje walidacji na serwerze.
Dalej na swoim koncie
Rozgrzewki, quiz i zadania są w biurku ucznia.
Teoria jest otwarta dla wszystkich. Żeby rozwiązywać zadania, zapisywać szkice i widzieć swój postęp, zaloguj się.
Zaloguj się →