Czego się nauczysz?
- Obsługi formularzy z wieloma polami w PHP
- Zapisu i odczytu wiadomości z pliku JSON
- Wyświetlania danych w formacie czatu (odwrócona chronologia)
- Sanityzacji danych wejściowych (ochrona przed XSS)
Stworzysz Prosty czat lokalny - aplikację webową umożliwiającą wymianę wiadomości tekstowych między użytkownikami. Wiadomości są zapisywane do pliku JSON i wyświetlane w formie listy chronologicznej. Użytkownicy podają swoją nazwę (nick) przy wysyłaniu wiadomości, co pozwala na identyfikację autora każdego wpisu.
Czego się nauczysz?
W prawdziwej pracy...
Systemy komunikacji i komentarzy to fundament większości aplikacji webowych - od prostych formularzy kontaktowych po zaawansowane platformy społecznościowe. Umiejętność bezpiecznego zapisywania i wyświetlania treści użytkowników jest kluczowa w pracy każdego programisty webowego.
Wysyłanie wiadomości Użytkownik wpisuje swoją nazwę (nick) oraz treść wiadomości w formularzu. Po zatwierdzeniu wiadomość jest zapisywana do pliku JSON.
Wyświetlanie historii Lista wszystkich wiadomości wyświetlana jest na stronie - najnowsze na górze lub na dole (zależnie od preferencji). Każda wiadomość pokazuje autora, treść i czas wysłania.
Walidacja danych Aplikacja sprawdza, czy nick i treść wiadomości nie są puste, a także czy nie przekraczają maksymalnej długości.
Przykładowa struktura pliku JSON:
{ "messages": [ { "id": 1, "user": "Jan", "message": "Cześć wszystkim!", "created_at": "2026-02-13 10:30:00" }, { "id": 2, "user": "Anna", "message": "Hej Jan, co słychać?", "created_at": "2026-02-13 10:31:15" } ]}Wymagane funkcje:
Przykładowy scenariusz:
Ocena: 3.0Jan otwiera stronę czatu, wpisuje nick “Jan” i wiadomość “Cześć!”. Po kliknięciu “Wyślij” wiadomość pojawia się na liście z datą i godziną. Strona odświeża się i pokazuje wszystkie wiadomości.
Wszystko z wariantu A, plus:
Przykładowy scenariusz:
Ocena: 4.0-5.0Anna dołącza do czatu i widzi ostatnie wiadomości. Pisze odpowiedź, a po wysłaniu otrzymuje komunikat “Wiadomość wysłana!”. Strona automatycznie odświeża się co 10 sekund, pokazując nowe wiadomości od innych.
Wszystko z wariantu B, plus:
Przykładowy scenariusz:
Ocena: 5.0-6.0Marek wraca na stronę - jego nick “Marek” jest już zapamiętany. Chcę zobaczyć tylko wiadomości od Anny, więc wybiera jej nick z filtra. Wpisuje w wyszukiwarkę “projekt” i znajduje wszystkie wiadomości zawierające to słowo.
Sanityzacja wiadomości przed wyświetleniem:
<?php// ZAWSZE escapuj dane użytkownika przy wyświetlaniu!echo htmlspecialchars($message['user'], ENT_QUOTES, 'UTF-8');echo htmlspecialchars($message['message'], ENT_QUOTES, 'UTF-8');?>Dodawanie wiadomości do JSON:
<?php$file = 'messages.json';$data = file_exists($file) ? json_decode(file_get_contents($file), true) : ['messages' => []];
$newMessage = [ 'id' => count($data['messages']) + 1, 'user' => trim($_POST['user']), 'message' => trim($_POST['message']), 'created_at' => date('Y-m-d H:i:s')];
$data['messages'][] = $newMessage;file_put_contents($file, json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));?>Auto-odświeżanie strony (HTML):
<!-- W sekcji <head> --><meta http-equiv="refresh" content="10">Wykorzystaj lekcje!
Cotygodniowe spotkania podczas lekcji to idealny moment, by:
Pracuj iteracyjnie - lepiej mieć działający wariant A niż niedokończony C!