Tablice, stringi, pliki - kolejny projekt > Lekcja 5
Dodawanie i usuwanie zadań
Ostatnia modyfikacja: 01.06.2021
Kolejny krok to dodawanie nowych zadań. Wystarczy, że odczytamy z pliku dane i zamienimy JSONa na tablicę (już to mamy - funkcja readFromFile()
), a następnie dodamy nowy element, zamienimy znów na JSON i zapiszemy. Proste, nie? Też tak myślę.
A więc zróbmy nową funkcję o nazwie add()
, która jako pierwszy argument ma otrzymać treść dodawanego zadania.
<?php
function add(string $text): array
{
$tasks = readFromFile();
$tasks[] = $text;
return $tasks;
}
To wszystko powinno być już dla Ciebie zrozumiałe. Odczytujemy listę zadań, którą dostajemy w formie tablicy, dodajemy nowy element i zwracamy. Brakuje tylko zapisu do pliku. Jako że będzie on używany w przynajmniej dwóch miejscach, (dodawanie i usuwanie) zróbmy kolejną funkcję.
<?php
function saveToFile(array $tasks)
{
$data = json_encode($tasks);
if (file_put_contents(FILENAME, $data) !== false) {
echo 'OK!';
} else {
echo '! Error writing file.';
}
}
Mam nadzieję, że również i ten kod rozumiesz, ale w razie czego krótko wytłumaczę. Najpierw tablicę zamieniamy na JSON przy użyciu funkcji json_encode()
, a następnie przy użyciu file_put_contents()
zapisujemy go do pliku. Warunkiem kontrolnie sprawdzimy, czy zapis się powiódł. A skąd wiedziałem, że właśnie taki warunek jest potrzebny? Oczywiście, że z dokumentacji, cytując:
Return Values
This function returns the number of bytes that were written to the file, or FALSE on failure.
Pozostaje tylko złożyć to w całość w pliku index.php
:
<?php
// switch ...
case 'add':
if (!empty($content)) {
$tasks = add($content);
saveToFile($tasks);
} else {
echo '! Error: Task can\'t be empty.';
}
break;
Dodałem też prosty warunek sprawdzający, czy treść zadania nie jest pusta (i gdyby tak się stało wyświetlający komunikat).
Pozostało jeszcze usuwanie. Założenie jest takie, że będziemy podawali numer zadania, który jest jednocześnie indeksem w tablicy (zwiększonym o jeden podczas wyświetlania na liście).
No więc zróbmy to - utwórzmy funkcję remove()
przyjmującą w argumencie numer zadania do usunięcia. Samo wyrzucenie konkretnego indeksu to żaden problem. Wystarczy użyć unset()
ze wskazaniem czego chcemy się pozbyć.
<?php
function remove(int $number): array
{
$tasks = readFromFile();
unset($tasks[$number - 1]);
return $tasks;
}
Na koniec dodajmy jeszcze, co trzeba w pliku index.php
i…
<?php
// switch ...
case 'remove':
$tasks = remove($content);
saveToFile($tasks);
break;
…gotowe, mamy nasz program!
Rzecz jasna jest to bardzo prosta aplikacja i wiele by tu można dodać. Więcej informacji przy każdym zadaniu (np. data, kategoria, priorytet), zabezpieczenie przed powielaniem, sprawdzenie przed usuwaniem czy dane zadanie istnieje - to tylko kilka z pomysłów, jakie od razu się nasuwają. Nie będziemy się już jednak tym zajmować. Miał to być projekt typowo edukacyjny i mam nadzieję, że ta rola została spełniona.
Komentarze