Czego się nauczysz?
- Tworzenia aplikacji CRUD (Create, Read, Update, Delete)
- Pracy z formularzami zawierajacymi pola tekstowe (textarea)
- Wyswietlania listy elementow z linkami do szczegółów
- Zabezpieczania tresci przed atakami XSS
Stworzysz Notatnik tekstowy - aplikacje umozliwiajaca tworzenie, przegladanie i zarzadzanie notatkami. Użytkownik może dodawać nowe notatki z tytułem i trescia, przegladac liste zapisanych notatek, otwierac ich szczegóły oraz edytować lub usuwać istniejace wpisy. Dane sa przechowywane w pliku JSON.
Czego się nauczysz?
W prawdziwej pracy...
Aplikacje do zarzadzania trescia (notatki, artykuły, dokumenty) to podstawa wielu systemow - od prostych narzedzi do notatek (Notion, Evernote), przez CMS-y (WordPress, Drupal), aż po systemy dokumentacji firmowej. Umiejetnosc tworzenia CRUD z obsługa tekstu to fundament web developmentu.
Formularz dodawania notatki Użytkownik wpisuje tytuł notatki i jej tresc (textarea). Po zapisaniu notatka pojawia się na liscie.
Lista notatek Wszystkie notatki sa wyświetlane jako lista z tytułami i datami utworzenia. Klikniecie w tytuł otwiera szczegóły.
Podglad szczegółowy Po kliknieciu w notatke użytkownik widzi pełna tresc wraz z data utworzenia i ostatniej modyfikacji.
Przykładowa struktura pliku JSON:
{ "notes": [ { "id": 1, "title": "Lista zakupow", "content": "Mleko, chleb, jajka, masło", "created_at": "2026-02-13 10:30:00", "updated_at": "2026-02-13 10:30:00" }, { "id": 2, "title": "Pomysły na projekt", "content": "1. Aplikacja do notatek\n2. Kalkulator BMI\n3. Quiz wiedzy", "created_at": "2026-02-13 11:45:00", "updated_at": "2026-02-14 09:15:00" } ]}Wymagane funkcje:
Przykładowy scenariusz:
Ocena: 3.0Użytkownik wpisuje tytuł “Zakupy” i tresc “Mleko, chleb, jajka”. Po kliknieciu “Zapisz” notatka pojawia się na liscie. Klika w tytuł i widzi pełna tresc. Przy pustym tytule widzi komunikat błędu.
Wszystko z wariantu A, plus:
Przykładowy scenariusz:
Ocena: 4.0-5.0Użytkownik klika “Edytuj” przy notatce, zmienia tresc i zapisuje. Data “Ostatnia modyfikacja” aktualizuje się. Może też kliknac “Usun” - pojawia się pytanie “Czy na pewno?” i po potwierdzeniu notatka znika z listy.
Wszystko z wariantu B, plus:
Przykładowy scenariusz:
Ocena: 5.0-6.0Użytkownik wpisuje “zakupy” w wyszukiwarke - widzi tylko notatki zawierajace to słowo. Wybiera kategorie “Osobiste” z filtru. Sortuje po “Ostatnio modyfikowane”. Może wyeksportowac wszystkie notatki do pliku TXT.
Dodawanie notatki:
$data = json_decode(file_get_contents('notes.json'), true) ?? ['notes' => []];
$newNote = [ 'id' => time(), 'title' => htmlspecialchars(trim($_POST['title'])), 'content' => htmlspecialchars(trim($_POST['content'])), 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')];
$data['notes'][] = $newNote;file_put_contents('notes.json', json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));Pobieranie notatki po ID:
$noteId = (int)$_GET['id'];$note = null;
foreach ($data['notes'] as $n) { if ($n['id'] === $noteId) { $note = $n; break; }}
if ($note === null) { die("Notatka nie znaleziona");}Edycja notatki:
$noteId = (int)$_POST['id'];
foreach ($data['notes'] as &$note) { if ($note['id'] === $noteId) { $note['title'] = htmlspecialchars(trim($_POST['title'])); $note['content'] = htmlspecialchars(trim($_POST['content'])); $note['updated_at'] = date('Y-m-d H:i:s'); break; }}
file_put_contents('notes.json', json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));Wyszukiwanie:
$search = strtolower(trim($_GET['search'] ?? ''));
$filtered = array_filter($data['notes'], function($note) use ($search) { if (empty($search)) return true; return strpos(strtolower($note['title']), $search) !== false || strpos(strtolower($note['content']), $search) !== false;});Wykorzystaj lekcje!
Cotygodniowe spotkania podczas lekcji to idealny moment, by:
Pracuj iteracyjnie - lepiej mieć działający wariant A niz niedokonczony C!