Który z kodów PHP sprawi, że zostanie wyświetlona sformatowana data oraz czas ostatnich odwiedzin użytkownika witryny, natomiast podczas pierwszej wizyty nic się nie wyświetli?Kod 1.
echo date('d.m.Y, H:i', $_COOKIE['c1']); setcookie('c1', time());Kod 2.
if(isset($_COOKIE['c1'])) echo date('d.m.Y, H:i', $_COOKIE['c1']); setcookie('c1', time(), time() + 30 * 86400);Kod 3.
echo date($_COOKIE['c1']); setcookie('c1', time(), time() + 30 * 86400);Kod 4.
setcookie('c1', time(), time() + 30 * 86400);
A. Kod 4.
B. Kod 2.
C. Kod 3.
D. Kod 1.
Opracowane na podstawie zadania CKE, czerwiec 2023 (arkusz EE.09-SG-23.06): W arkuszu kod 2 miał date($_COOKIE['c1']), co wypisuje sam znacznik czasu zamiast daty. Dodano format 'd.m.Y, H:i'.
Poprawna jest odpowiedź: Kod 2. Ten fragment najpierw sprawdza isset($_COOKIE['c1']), czyli ustala, czy przeglądarka przesłała już ciasteczko z poprzedniej wizyty. Jeśli ciasteczko istnieje, jego wartość jest traktowana jako znacznik czasu Unix zapisany wcześniej przez time(), a funkcja date('d.m.Y, H:i', ...) formatuje go jako dzień, miesiąc, rok, godzinę i minutę. Podczas pierwszej wizyty warunek nie jest spełniony, więc echo się nie wykona i nic nie zostanie wyświetlone. Następnie setcookie('c1', time(), time() + 30 * 86400) zapisuje aktualny czas na 30 dni. Reguła do zapamiętania: odczyt z $_COOKIE dotyczy danych przesłanych w bieżącym żądaniu, a setcookie przygotowuje ciasteczko dla kolejnych żądań.
W tym zadaniu trzeba rozdzielić dwie czynności: odczyt ciasteczka z poprzedniego żądania i zapis nowej wartości na przyszłość. Kod 1 używa date('d.m.Y, H:i', $_COOKIE['c1']) bez sprawdzenia isset($_COOKIE['c1']). Taki zapis mógłby być trafny tylko wtedy, gdy istnieje pewność, że ciasteczko już istnieje; podczas pierwszej wizyty element tablicy nie jest dostępny, więc warunek „nic się nie wyświetli” nie jest poprawnie zabezpieczony. Kod 3 także odczytuje $_COOKIE['c1'] bez kontroli istnienia, a ponadto przekazuje wartość ciasteczka jako format funkcji date(), nie jako drugi argument ze znacznikiem czasu. Miałby sens jedynie przy innym założeniu: gdyby ciasteczko przechowywało format daty. Kod 4 tylko ustawia ciasteczko, więc nadaje się do zapamiętania wizyty, ale nie wyświetli daty ostatnich odwiedzin. Poprawna jest odpowiedź: Kod 2. Typowy błąd myślowy to założenie, że setcookie natychmiast uzupełnia $_COOKIE w tym samym wykonaniu skryptu.