Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych
  • Data rozpoczęcia: 12 czerwca 2026 11:35
  • Data zakończenia: 12 czerwca 2026 11:44

Egzamin zdany!

Wynik: 27/40 punktów (67,5%)

Wymagane minimum: 20 punktów (50%)

Nowe
Analiza przebiegu egzaminu- sprawdź jak rozwiązywałeś pytania
Pochwal się swoim wynikiem!
Szczegółowe wyniki:
Pytanie 1

Który z wymienionych formatów umożliwia zapisanie materiału wideo z towarzyszącą ścieżką dźwiękową?

A. MP4
B. WMA
C. WAV
D. AAC
Odpowiedź MP4 jest poprawna, ponieważ jest to jeden z najpopularniejszych formatów kontenerowych używanych do przechowywania wideo wraz z dźwiękiem. Format MP4 (MPEG-4 Part 14) pozwala na efektywne kodowanie wideo, przy jednoczesnym zachowaniu wysokiej jakości obrazu i dźwięku. Umożliwia on przechowywanie różnorodnych strumieni danych, w tym wideo, audio, a także tekstu, co czyni go bardzo wszechstronnym rozwiązaniem dla twórców multimediów. Przykładowo, format MP4 jest często używany w aplikacjach do strumieniowania wideo, takich jak YouTube, oraz w systemach zarządzania treścią (CMS) do publikacji materiałów wideo w Internecie. Dzięki kompresji zgodnej z kodekiem H.264 dla wideo i AAC dla audio, pliki MP4 są względnie małe, co ułatwia ich przesyłanie i przechowywanie. To czyni format MP4 standardem branżowym w produkcji filmowej, telewizyjnej oraz w aplikacjach mobilnych i webowych.

Pytanie 2

Który ze znaczników HTML NIE służy do formatowania tekstu?

A. <div>
B. <sub>
C. <em>
D. <strong>
Znacznik <div> to uniwersalny pojemnik blokowy - grupuje elementy w sekcję, którą można wspólnie ostylować czy spozycjonować, ale sam w żaden sposób nie zmienia wyglądu tekstu. Pozostałe znaczniki dotyczą właśnie formatowania treści: <em> i <strong> nadają tekstowi znaczenie (i domyślnie kursywę oraz pogrubienie), a <sub> tworzy indeks dolny. Dlatego do formatowania tekstu NIE służy <div>.

Pytanie 3

Tworząc raport w systemie zarządzania relacyjnymi bazami danych, umożliwia się

A. usuwanie danych z tabel
B. analizę wybranych danych
C. dodawanie danych do tabel
D. aktualizowanie danych w tabelach
Analiza wybranych danych w systemie obsługi relacyjnych baz danych jest kluczowym aspektem raportowania. Umożliwia to zrozumienie wzorców i trendów, co jest niezbędne dla podejmowania świadomych decyzji biznesowych. Poprzez odpowiednie zapytania SQL, użytkownicy mogą selektywnie wybierać dane, które są dla nich istotne, a następnie przetwarzać je w celu generowania raportów. Przykładem może być analiza sprzedaży w danym okresie czasu, co pozwala na identyfikację najlepiej sprzedających się produktów. Praktyczne zastosowanie raportów obejmuje również monitoring efektywności działań marketingowych, co jest zgodne z najlepszymi praktykami w dziedzinie zarządzania danymi. W kontekście standardów branżowych, raportowanie powinno opierać się na zasadzie przejrzystości, co oznacza, że użytkownicy powinni mieć łatwy dostęp do zrozumiałych i czytelnych wyników analizy. Umożliwia to nie tylko identyfikację problemów, ale również wykorzystanie danych do prognozowania i planowania przyszłych działań.

Pytanie 4

Jak nazywa się paradygmat, w którym program buduje się z OBIEKTÓW łączących dane i operujące na nich metody?

A. funkcyjne
B. obiektowe
C. strukturalne
D. logiczne
Paradygmat, w którym program buduje się z OBIEKTÓW łączących dane (pola) i operujące na nich metody, to programowanie OBIEKTOWE (OOP). Filary to hermetyzacja, dziedziczenie i polimorfizm, a przykłady języków: Java, C++, PHP. Zapamiętaj: obiektowe = dane i ich zachowania zamknięte w jednym obiekcie.

Pytanie 5

Który element CMS odpowiada bezpośrednio za WYGLĄD strony?

A. widżet (WordPress) / moduł (Joomla!)
B. wtyczka (WordPress) / dodatek (Joomla!)
C. motyw (WordPress) / szablon (Joomla!)
D. kokpit (WordPress) / panel administracyjny (Joomla!)
Pozostałe elementy pełnią inne role. Kokpit i panel administracyjny to interfejs ZARZĄDZANIA. Widżety i moduły to bloki treści w wyznaczonych miejscach. Wtyczki i dodatki rozszerzają FUNKCJE. Za wygląd odpowiada motyw (WordPress) lub szablon (Joomla!).

Pytanie 6

Dla przedstawionego fragmentu kodu

<img src="kwiat.jpg alt="kwiat">
walidator HTML zwróci błąd, ponieważ
A. użyto nieznanego atrybutu alt
B. nie odnaleziono pliku kwiat.jpg
C. nie zamknięto cudzysłowu
D. użyto niewłaściwego znacznika do wyświetlenia grafiki
W kodzie HTML zauważyłem mały błąd - brakuje ci domknięcia cudzysłowu dla atrybutu src. Powinno to wyglądać tak: <img src="kwiat.jpg" alt="kwiat">. No, cudzysłów jest ważny, bo bez niego przeglądarka może mieć problem z odczytaniem, gdzie kończy się wartość atrybutu. To może prowadzić do różnych, nieprzewidzianych efektów przy wyświetlaniu strony. Zasady W3C mówią, że każdy atrybut powinien być poprawnie sformatowany, żeby działało to na różnych przeglądarkach i urządzeniach. Pamiętaj też o atrybucie alt - jest kluczowy dla dostępności. Właściwe użycie cudzysłowów i dbałość o format kodu też wpływają na jego czytelność, a my przecież chcemy pisać jak najlepiej.

Pytanie 7

Kwalifikatory dostępu private, protected i public definiują mechanizm:

A. polimorfizmu
B. przeładowania (overloadingu)
C. hermetyzacji (enkapsulacji)
D. rekurencji
Kwalifikatory private, protected i public sterują widocznością pól i metod klasy, czyli realizują HERMETYZACJĘ (enkapsulację) - ukrywanie wewnętrznych szczegółów i udostępnianie tylko wybranego interfejsu. Dlatego definiują mechanizm hermetyzacji.

Pytanie 8

W ramce przedstawiono kod JavaScript z błędem logicznym. Program powinien wypisywać informację, czy liczby są sobie równe czy nie, lecz nie wykonuje tego. Wskaż odpowiedź, która dotyczy błędu.

var x = 5;
var y = 3;
if (x = y)     document.getElementById("demo").innerHTML = 'zmienne są równe';
else         document.getElementById("demo").innerHTML = 'zmienne się różnią';
A. Przed klauzulą else nie powinno być średnika.
B. Instrukcje wewnątrz sekcji if oraz else powinny być zamienione miejscami.
C. W klauzuli if występuje przypisanie zamiast porównania.
D. Nieprawidłowo zadeklarowano zmienne.
Gratulacje! Poprawnie zauważyłeś, że w klauzuli if występuje przypisanie zamiast porównania. W JavaScript, operatorem przypisania jest pojedynczy znak równości (=), natomiast operatorem porównania jest podwójny (==) lub potrójny znak równości (===). W przypadku prezentowanego kodu, zamiast porównać wartości zmiennych x i y, wartość zmiennej y jest przypisywana do zmiennej x, co prowadzi do błędu logicznego. Jest to typowy błąd, który często występuje, szczególnie u początkujących programistów. W praktyce, aby nie pomylić operatorów, warto zawsze umieszczać wartość stałą po lewej stronie operatora porównania - wtedy próba przypisania wartości stałej zwróci błąd kompilacji. Dodatkowo, niektóre narzędzia do analizy statycznej kodu, takie jak ESLint, mogą pomóc w wykrywaniu tego typu błędów.

Pytanie 9

Jak za pomocą JavaScriptu wyświetlić na stronie bieżącą datę i czas?

A.
echo Date()
B.
innerHTML = Date()
C.
document.write(Date())
D.
echo Date() + Time()
W JavaScripcie aktualną datę i czas zwraca obiekt Date(), a wypisać go na stronie można m.in. metodą document.write(Date()). Zapisuje ona przekazany tekst bezpośrednio do dokumentu. W praktyce częściej używa się przypisania do innerHTML wybranego elementu, ale spośród podanych opcji poprawna jest document.write(Date()).

Pytanie 10

W języku PHP, po wykonaniu poniższego fragmentu kodu, w zmiennej o nazwie Nowy_Napis zostanie zapisany:

$Napis = "ZaWszE SpRaWdZ swoj KoD";
$Nowy_Napis = strtolower($Napis);
A. ZaWszE
B. zAwSZe sPrAwDz SWOJ kOd
C. zawsze sprawdz swoj kod
D. ZAWSZE SPRAWDZ SWOJ KOD
Odpowiedź 'zawsze sprawdz swoj kod' jest poprawna, ponieważ funkcja strtolower() w PHP konwertuje wszystkie znaki w łańcuchu na małe litery. W przypadku podanego kodu, zmienna $Napis zawiera tekst 'ZaWszE SpRaWdZ swoj KoD', który po zastosowaniu funkcji strtolower() przekształca się na 'zawsze sprawdz swoj kod'. Praktyczne zastosowanie tej funkcji jest bardzo istotne w kontekście normalizacji danych wejściowych, szczególnie w aplikacjach internetowych, gdzie wielkość liter może wpływać na sposób przechowywania, wyszukiwania lub porównywania tekstów. Warto również podkreślić, że w przypadku korzystania z baz danych, stosowanie jednolitej konwencji zapisu (np. zawsze małe litery) może zminimalizować ryzyko błędów i niejednoznaczności. Dobrymi praktykami jest także walidacja danych użytkowników oraz przygotowywanie ich do dalszego przetwarzania, co sprzyja lepszej organizacji kodu i efektywności aplikacji.

Pytanie 11

Aby stworzyć relację jeden do wielu, w tabeli po stronie wiele, co należy zdefiniować?

A. klucz podstawowy wskazujący na klucz podstawowy tabeli po stronie jeden
B. klucz obcy wskazujący na klucz obcy tabeli po stronie jeden
C. klucz sztuczny odnoszący się do kluczy podstawowych obu tabel
D. klucz obcy wskazujący na klucz podstawowy tabeli po stronie jeden
W kontekście relacji jeden do wielu w bazach danych, każda z podanych niepoprawnych opcji wprowadza w błąd odnośnie do zasady funkcjonowania kluczy obcych i ich roli w modelowaniu danych. Klucz obcy wskazujący na klucz obcy tabeli po stronie jeden jest konceptualnie błędny, ponieważ klucz obcy zawsze odnosi się do klucza podstawowego innej tabeli, a nie do innego klucza obcego. Taki układ narusza zasady referencyjności i integralności danych, co może prowadzić do trudności w utrzymaniu spójności w bazie. Kolejną niepoprawną opcją jest klucz sztuczny odnoszący się do kluczy podstawowych obu tabel. Klucze sztuczne, choć mogą być użyteczne w pewnych kontekstach, nie powinny być używane jako sposób tworzenia relacji, ponieważ nie odzwierciedlają naturalnych powiązań między danymi. Klucz podstawowy wskazujący na klucz podstawowy tabeli po stronie jeden również jest mylny, ponieważ w relacji jeden do wielu klucz podstawowy tabeli 'jeden' musi być referencjonowany przez klucz obcy w tabeli 'wiele', a nie odwrotnie. Te nieporozumienia mogą prowadzić do błędów projektowych w bazach danych, co w efekcie utrudnia ich rozwój i zarządzanie, szczególnie w dużych systemach, gdzie spójność danych jest kluczowa dla funkcjonowania aplikacji.

Pytanie 12

W przedstawionej definicji stylu CSS, powtarzanie dotyczy

body {
  background-image: url("rysunek.gif");
  background-repeat: repeat-y;
}
A. rysunku umieszczonego w tle strony w poziomie.
B. rysunku umieszczonego znacznikiem img.
C. tła każdego ze znaczników akapitu.
D. rysunku umieszczonego w tle strony w pionie.
Twoja odpowiedź jest na miejscu. To, co mówi 'background-repeat: repeat-y;' w CSS, oznacza, że tło będzie się powtarzać w pionie. Super sprawa, jeśli chcesz, by obraz w tle pokrywał całą wysokość elementu, niezależnie od tego, jak duży on jest. Używa się tego często w projektowaniu stron, żeby stworzyć fajne efekty wizualne, jak na przykład tło, które działa w pasku nawigacyjnym. Warto pamiętać, że powtarzanie tła to zaledwie jedna z wielu opcji, jakie mamy w CSS. Możesz również ustawiać pozycję tła czy jego rozmiar, żeby wszystko wyglądało tak, jak chcesz.

Pytanie 13

Zaproponowany blok ilustruje operację

Ilustracja do pytania
A. wykorzystania wcześniej zdefiniowanej procedury lub funkcji
B. podjęcia decyzji
C. załadowania lub przedstawienia danych
D. realizacji zadania w pętli
Podjęcie decyzji w programowaniu jest kluczowym elementem umożliwiającym dynamiczne i warunkowe działania w aplikacjach. Symbolicznie, blok decyzyjny w diagramie przepływu, takim jak przedstawiony na obrazku, oznacza punkt, w którym program sprawdza określony warunek i w zależności od jego wyniku podejmuje różne ścieżki działania. Jest to często implementowane przy użyciu struktur decyzyjnych takich jak instrukcje if-else w wielu językach programowania. Na przykład w języku Python decyzję można wyrazić jako if temperatura > 30: print('Gorąco') else: print('Chłodno'). Decyzje te pozwalają programowi reagować na zmieniające się warunki i dane wejściowe, co jest niezbędne w tworzeniu interaktywnych aplikacji czy systemów sterowania. Zgodnie z dobrymi praktykami w inżynierii oprogramowania, właściwe stosowanie bloków decyzyjnych sprzyja czytelności kodu i efektywności jego działania. Dodatkowo, w większych projektach często stosuje się wzorce projektowe takie jak stan lub strategia, które opierają się na mechanizmach decyzyjnych, pomagając zarządzać złożonością kodu i poprawiać jego skalowalność.

Pytanie 14

Jakie słowo kluczowe w SQL należy zastosować, aby usunąć powtarzające się rekordy?

A. LIKE
B. GROUP BY
C. DISTINCT
D. ORDER BY
Słowo kluczowe DISTINCT jest używane w języku SQL do eliminowania duplikatów z wyników zapytań. Gdy zastosujemy DISTINCT w zapytaniu SELECT, baza danych zwróci tylko unikalne wiersze, co jest niezwykle przydatne, gdy chcemy uzyskać listę bez powtarzających się wartości. Na przykład, jeśli mamy tabelę 'klienci' z kolumną 'miasto', a nasze zapytanie brzmi: 'SELECT DISTINCT miasto FROM klienci;', wówczas wynik będzie zawierał tylko unikalne nazwy miast, eliminując wszelkie duplikaty. To podejście nie tylko upraszcza analizę danych, ale również poprawia wydajność zapytań w wielu przypadkach, zwłaszcza gdy przetwarzamy duże zbiory danych. Użycie DISTINCT jest zgodne z najlepszymi praktykami w zakresie optymalizacji baz danych, ponieważ pozwala zapobiegać przypadkowemu wprowadzaniu niepotrzebnych danych podczas analizy. Warto także zauważyć, że DISTINCT działa na całym zestawie kolumn w zapytaniu. Oznacza to, że jeśli wybierzemy wiele kolumn z DISTINCT, unikalne wiersze będą określane na podstawie kombinacji wartości we wszystkich tych kolumnach, co daje jeszcze większą kontrolę nad wynikami zapytania.

Pytanie 15

Wskaż stwierdzenie, które nie jest prawdziwe dla następującej definicji funkcji w języku C++?

void zamien( float &x, float &y){
    float tmp;
    tmp = x;
    x = y;
    y = tmp;
}
A. Funkcja nie zwraca wartości.
B. Funkcja posiada dwa parametry.
C. Funkcja odwołuje się do parametrów przez referencję.
D. Funkcja zwraca wartość.
Dobrze zrobione! Wybrałeś właściwą odpowiedź, która pasuje do tego, co mamy w kodzie funkcji w C++. Mówimy tu o funkcji typu 'void', co oznacza, że nie zwraca żadnej wartości. W C++ 'void' oznacza, że nie ma zwracanego typu, ale to nie znaczy, że taka funkcja nic nie robi. Ona może wykonać różne operacje, ale na koniec nie zwraca żadnego wyniku. To jest dość istotne, bo w programowaniu często z takich funkcji korzystamy, kiedy chcemy coś zmienić, a nie potrzebujemy nowej wartości. Fajnie, że zauważyłeś, że ta funkcja ma dwa parametry typu float, które są przekazywane przez referencję. Dzięki temu możemy zmieniać wartości tych zmiennych w funkcji, co jest przydatne w wielu sytuacjach.

Pytanie 16

W przedstawionym kodzie PHP w miejscu kropek powinno zostać umieszczone polecenie:

$zapytanie = mysqli_query($db, "SELECT imie, nazwisko FROM uzytkownik");
$ile = mysqli_num_rows($zapytanie);
for ($i = 0; $i < $ile; $i++)
{
  $wiersz = ....................................;
  echo "$wiersz[0] $wiersz[1]";
}
A. mysqli_query($zapytanie);
B. mysqli_num_fields($zapytanie);
C. mysqli_free_result($zapytanie);
D. mysqli_fetch_row($zapytanie);
W kontekście przedstawionego kodu PHP, prawidłowe uzupełnienie wiersza poleceń to użycie funkcji mysqli_fetch_row($zapytanie). Funkcja ta pobiera jeden wiersz z zestawu wyników zapytania jako tablicę indeksowaną numerycznie. Jest to istotny krok w procesie przetwarzania danych z bazy danych, ponieważ po wykonaniu zapytania SQL, dane muszą być odpowiednio odczytane, aby można je było wykorzystać w aplikacji. Przykładowo, po wykonaniu zapytania, możemy mieć wiele wierszy danych, a mysqli_fetch_row pozwala na iteracyjne pobieranie każdego z nich. W praktyce, stosując tę funkcję w pętli, możemy w prosty sposób zbudować listę lub tabelę, wyświetlając imię i nazwisko każdego użytkownika. Warto również pamiętać, że przy pracy z bazami danych ważne jest, aby uważnie monitorować proces pobierania danych, by uniknąć problemów z pamięcią, a także aby zwolnić zasoby po zakończeniu operacji. W związku z tym, standardową praktyką jest również stosowanie mysqli_free_result($zapytanie) po zakończeniu pracy z danymi, co pozwala na efektywne zarządzanie pamięcią.

Pytanie 17

W CSS, aby ustawić wcięcie pierwszej linii akapitu na 30 pikseli, należy użyć zapisu

A. p {text-indent: 30px;}
B. p {line-height: 30px;}
C. p {line-indent: 30px;}
D. p {text-spacing: 30px;}
Pierwsza z odpowiedzi, p {line-height: 30px;}, odnosi się do interlinii, czyli przestrzeni między poszczególnymi liniami tekstu. Ustawienie line-height na 30 pikseli wpłynie na odległość między liniami, ale nie wprowadzi wcięcia, co jest kluczowe w przypadku tego pytania. Użytkownicy często mylą te właściwości, co prowadzi do nieporozumień w zakresie formatowania tekstu. Druga odpowiedź, p {text-spacing: 30px;}, jest błędna, ponieważ text-spacing nie jest standardową właściwością CSS. CSS nie definiuje takiej właściwości, co może prowadzić do frustracji podczas pracy nad stylizacją dokumentów. W przypadku trzeciej odpowiedzi, p {line-indent: 30px;}, również nie jest to poprawne podejście, gdyż line-indent nie jest uznawane za standardową właściwość CSS, więc jego zastosowanie nie przyniesie oczekiwanych efektów. Typowym błędem jest zakładanie, że każda właściwość związana z tekstem może być zastosowana w podobny sposób, co prowadzi do niepoprawnych wyników. Kluczowe jest zrozumienie różnicy między właściwościami, takimi jak line-height, text-indent i inne, aby skutecznie stylizować tekst na stronach internetowych.

Pytanie 18

W PHP typ float oznacza

A. typ całkowity
B. typ logiczny
C. typ zmiennoprzecinkowy
D. typ łańcuchowy
W języku PHP typ 'float' jest używany do reprezentacji liczb zmiennoprzecinkowych, co oznacza, że może on przechowywać liczby z częścią dziesiętną. Jest to kluczowy element programowania, ponieważ pozwala na bardziej precyzyjne obliczenia, które są niezbędne w wielu zastosowaniach, takich jak obliczenia finansowe czy analizy naukowe. Dzięki użyciu typu float, programiści mogą używać skomplikowanych algorytmów, które wymagają operacji na liczbach niecałkowitych. W praktyce, kiedy potrzebujemy obliczyć ceny z podatkiem lub odsetkami, użycie float pozwala na dokładniejsze wyniki niż w przypadku typów całkowitych. Należy również pamiętać, że przy pracy z typem float warto stosować funkcje takie jak round(), aby uniknąć problemów z precyzją wyników, które mogą wynikać z ograniczeń reprezentacji liczb zmiennoprzecinkowych w pamięci komputera. Warto także zaznaczyć, że zgodnie z dokumentacją PHP, float jest zgodny z standardem IEEE 754, co zapewnia jego szeroką kompatybilność z innymi systemami oraz językami programowania.

Pytanie 19

Co realizuje funkcja COUNT w SQL?

A. zliczanie znaków w polu tekstowym
B. zliczanie rekordów (wierszy) wybranych kwerendą
C. obliczanie średniej w kolumnie
D. obliczanie wartości bezwzględnej
Pozostałe operacje wykonują inne funkcje. Liczbę znaków w polu zwraca LENGTH/LEN, średnią - AVG, a wartość bezwzględną - ABS. Zliczaniem wierszy zajmuje się COUNT.

Pytanie 20

Tabele Klienci oraz Zgloszenia są związane relacją jeden do wielu. Jakie polecenie należy wydać, aby uzyskać tylko opis zgłoszenia oraz odpowiadające mu nazwisko klienta dla zgłoszenia numer 5?

Ilustracja do pytania
A. SELECT opis, nazwisko FROM Zgloszenia JOIN Klienci ON Klienci.id = Zgloszenia.Klienci_id WHERE Klienci.id = 5
B. SELECT opis, nazwisko FROM Zgloszenia JOIN Klienci ON Klienci.id = Zgloszenia.Klienci_id WHERE Zgloszenia.id = 5
C. SELECT opis, nazwisko FROM Zgloszenia JOIN Klienci ON Klienci.id = Zgloszenia.id WHERE Zgloszenia.id = 5
D. SELECT opis, nazwisko FROM Zgloszenia JOIN Klienci WHERE Klienci.id = 5
Ta odpowiedź jest prawidłowa, ponieważ używa poprawnej składni SQL do wykonania zapytania z dwóch tabel powiązanych relacją jeden do wielu. Kluczowym elementem jest użycie klauzuli JOIN, która łączy tabelę Zgloszenia z tabelą Klienci poprzez pole Klienci_id, będące kluczem obcym w tabeli Zgloszenia. Dzięki temu możliwe jest powiązanie odpowiednich rekordów z dwóch tabel. Warunek w klauzuli WHERE Zgloszenia.id = 5 precyzuje, że zapytanie ma zwrócić dane tylko dla zgłoszenia o identyfikatorze 5. Taki sposób pisania zapytań SQL jest zgodny z normami ANSI SQL i jest powszechnie stosowany w systemach zarządzania bazami danych jak MySQL, PostgreSQL czy SQL Server. Korzystanie z JOIN, zwłaszcza z klauzulą ON, jest dobrą praktyką, ponieważ zapewnia czytelność i bezpieczeństwo zapytań. W realnych zastosowaniach, takie zapytania są używane do łączenia danych z różnych źródeł w celu ich analizy lub raportowania. Prawidłowa struktura zapytania ułatwia jego modyfikację i integrację z innymi operacjami bazy danych, co jest niezbędne w zarządzaniu danymi w dużych systemach informatycznych. Zrozumienie mechanizmu JOIN oraz użycie klauzuli WHERE w celu ograniczenia wyników jest kluczowe w efektywnym zarządzaniu i analizie danych w relacyjnych bazach danych.

Pytanie 21

W języku C do reprezentowania liczb zmiennoprzecinkowych używa się typu:

A.
int
B.
char
C.
bool
D.
double
Liczby zmiennoprzecinkowe (z częścią ułamkową) reprezentuje w języku C typ double - oferuje on podwójną precyzję, czyli więcej cyfr znaczących niż float. Oba przechowują liczby rzeczywiste, np. 3.14 czy 2.5e-3, lecz double jest dokładniejszy i częściej domyślny dla literałów z kropką. Dla porównania int trzyma liczby całkowite, więc utraciłby część ułamkową. Dlatego do liczb zmiennoprzecinkowych w C służy typ double.

Pytanie 22

Na podstawie fragmentu dokumentu HTML, określ co należy wpisać w miejsce kropek w odnośniku w menu, aby przenosił on do rozdziału 2.

Fragment menu
<a ...>Rozdział 2</a>

Fragment dalej w dokumencie
<h1 id="r2" name="sekcja2" class="rozdzial2">Rozdział 2<h1>
A. href = "r2"
B. href = "#sekcja2"
C. href = "sekcja2"
D. href = "#r2"
Gratulacje, Twoja odpowiedź jest prawidłowa. Wybrałeś 'href="#r2"', co jest poprawne, ponieważ w HTML, atrybut 'href' w tagu 'a' służy do określenia miejsca docelowego odnośnika. W tym przypadku, miejsce docelowe to identyfikator (id) elementu na tej samej stronie. Przed identyfikatorem umieszcza się znak '#', który informuje przeglądarkę, że ma poszukać elementu z danym 'id' na tej samej stronie. W tym konkretnym przypadku, 'r2' jest identyfikatorem rozdziału 2 na stronie, dlatego 'href="#r2"' skieruje odnośnik do tego rozdziału. W praktyce, używanie identyfikatorów pozwala na tworzenie skomplikowanych stron z wieloma sekcjami, gdzie odsyłacze umożliwiają łatwe i szybkie nawigowanie. To jest zgodne ze standardami i dobrymi praktykami dla tworzenia stron internetowych.

Pytanie 23

Instrukcja SQL przedstawiona w formie graficznej

ALTER TABLE 'miasta'
ADD 'kod' text;
A. dodaje do tabeli kolumnę o nazwie kod typu text
B. zmienia nazwę tabeli miasta na nazwę kod
C. w tabeli miasta zmienia nazwę kolumny kod na nazwę text
D. wprowadza do tabeli dwie kolumny o nazwach: kod i text
Zrozumienie polecenia ALTER TABLE w SQL jest ważne, ale czasem ludzie mają problemy z interpretacją. To polecenie służy do zmiany struktury tabeli, a nie do zmiany nazw kolumn czy tabel. W Twoim przykładzie używasz słowa kluczowego ADD, co wskazuje na dodanie nowego elementu, a nie na zmianę nazwy. Jeśli myślisz, że możesz zmienić nazwę kolumny, to wchodzisz na minę, bo to wymaga innego polecenia, jak RENAME lub ALTER COLUMN w niektórych systemach SQL. Wydaje się, że niektórzy myślą, że każde ALTER TABLE wiąże się z nazwami, ale to nie tak. Dlatego ważne jest, żeby znać składnię, bo błędne użycie poleceń może prowadzić do problemów, jak utrata danych. Jeśli testujesz nowe polecenia w kontrolowanym środowisku, to lepiej zrozumiesz, jak to działa i unikniesz typowych pomyłek w SQL.

Pytanie 24

W SQL warunek ten odpowiada warunkowi liczba >= 10 AND liczba <= 100?

A. liczba BETWEEN 10 AND 100
B. liczba LIKE '10%'
C. liczba IN (10, 100)
D. NOT (liczba < 10 AND liczba > 100)
Odpowiedź 'liczba BETWEEN 10 AND 100' jest prawidłowa, ponieważ odpowiada warunkowi, który sprawdza, czy wartość zmiennej 'liczba' mieści się w przedziale od 10 do 100, włączając oba końce. W SQL konstrukcja 'BETWEEN' jest preferowana, ponieważ jest bardziej czytelna i zrozumiała dla programistów, co sprzyja utrzymaniu kodu. Przykładowe zapytanie SQL używające tego warunku mogłoby wyglądać tak: 'SELECT * FROM tabela WHERE liczba BETWEEN 10 AND 100;'. Zastosowanie 'BETWEEN' unika potencjalnych błędów związanych z używaniem operatorów porównawczych i zapewnia, że obie granice przedziału są respektowane. W praktyce, korzystanie z 'BETWEEN' w zapytaniach SQL jest zgodne z dobrymi praktykami programowania, gdyż poprawia czytelność i ułatwia analizę kodu. Dodatkowo, warto zauważyć, że 'BETWEEN' działa również z datami, co czyni go uniwersalnym narzędziem w SQL.

Pytanie 25

Jaką funkcję agregującą można zastosować, aby uzyskać ilość rekordów?

A. SUM
B. AVG
C. COUNT
D. NUMBER
Funkcja agregująca COUNT jest używana w bazach danych do zwracania liczby rekordów spełniających określone kryteria. Jest to jedna z podstawowych funkcji agregujących, która pozwala na szybkie uzyskanie informacji o objętości danych w tabeli. Na przykład, w zapytaniu SQL, które ma na celu policzenie liczby wszystkich klientów w tabeli "klienci", możemy użyć: SELECT COUNT(*) FROM klienci. Zwróci to całkowitą liczbę rekordów. Funkcja COUNT może być również używana z warunkami, co pozwala na bardziej zaawansowane analizy, takie jak: SELECT COUNT(*) FROM klienci WHERE kraj = 'Polska', co policzy tylko tych klientów, którzy są z Polski. W praktyce, COUNT jest nieoceniony w raportowaniu i analizie danych, umożliwiając analitykom i programistom szybkie zrozumienie struktury danych. Dobra praktyka to zawsze stosować COUNT w kontekście grupowania danych przy użyciu klauzuli GROUP BY, co pozwala na uzyskanie liczby rekordów w poszczególnych grupach.

Pytanie 26

Jaką funkcję w edytorze grafiki rastrowej trzeba wykorzystać, żeby przygotować rysunek do publikacji na stronie tak, aby widoczne było jedynie to, co znajduje się w obrębie ramki?

Ilustracja do pytania
A. Odbicie
B. Skalowanie
C. Perspektywa
D. Kadrowanie
Odbicie w edytorze grafiki rastrowej zmienia kierunek obrazu w pionie lub poziomie co jest użyteczne gdy chcemy uzyskać lustrzane odbicie elementów grafiki. Choć jest to przydatne narzędzie nie spełnia ono funkcji wybiórczego wyświetlania części obrazu tak jak kadrowanie. Skalowanie natomiast polega na zmianie rozmiaru obrazu poprzez zwiększenie lub zmniejszenie jego wymiarów przy jednoczesnym zachowaniu proporcji lub ich modyfikacji. Skalowanie jest istotne w kontekście dostosowywania obrazów do różnych rozdzielczości ekranów i formatów jednak nie eliminuje niechcianych fragmentów obrazu tak jak kadrowanie. Z kolei perspektywa odnosi się do zmiany kąta widzenia obrazu co pozwala na symulowanie widoku z różnych punktów obserwacji. Narzędzie perspektywy umożliwia tworzenie efektów przestrzennych ale nie ogranicza treści obrazu do konkretnego obszaru. Wszystkie te funkcje mają swoje zastosowanie w edycji grafiki lecz żadne z nich nie oferuje możliwości selektywnego wycinania fragmentu obrazu w celu jego dalszego wykorzystania co jest kluczową cechą kadrowania. Kadrowanie pozostaje narzędziem podstawowym do przygotowania obrazów do publikacji gdzie istotne jest skoncentrowanie uwagi odbiorcy na najważniejszych elementach grafiki eliminując zbędne szczegóły.

Pytanie 27

W poniższym zapytaniu SQL, co oznacza symbol gwiazdki w jego wyniku?

SELECT * FROM mieszkancy WHERE imie = 'Anna';
A. pokazanie pola o nazwie '*' (gwiazdka)
B. wyświetlenie wszystkich kolumn z tabeli mieszkancy
C. wyświetlenie wszystkich rekordów z tabeli mieszkancy
D. zignorowanie warunku dotyczącego imienia
W zapytaniu SQL znak gwiazdki (*) nie oznacza wyświetlenia wszystkich rekordów w tabeli, lecz wskazuje, że w wyniku zapytania mamy otrzymać wszystkie kolumny. To ważne rozróżnienie, ponieważ mylenie tych pojęć prowadzi do nieporozumień dotyczących struktury wyników. Każde zapytanie z gwiazdką ograniczone jest jedynie kolumnami nie rekordami. W tym przypadku część WHERE imie = 'Anna' dodatkowo sie mplementuje ograniczenie do konkretnych rekordów co należy do odrębnej części logiki zapytania. Z kolei interpretacja gwiazdki jako pola o nazwie '*' jest błędnym założeniem ponieważ w standardzie SQL nie istnieje możliwość nadania pola o takiej nazwie poprzez użycie gwiazdki. Gdybyśmy chcieli wyświetlić pole o konkretnej nazwie musielibyśmy użyć jego dokładnej nazwy a nie gwiazdki. Interpretacja gwiazdki jako zignorowania warunku WHERE również jest niepoprawna ponieważ WHERE jest integralną częścią zapytania SQL określającą kryteria filtrowania rekordów i działa niezależnie od gwiazdki. Zrozumienie różnic między wyborem kolumn a wyborem rekordów jest kluczowe dla prawidłowego konstruowania zapytań SQL i optymalizacji ich działania w praktycznych zastosowaniach.

Pytanie 28

Aby przy usunięciu rekordu nadrzędnego automatycznie usunęły się powiązane z nim rekordy podrzędne, w definicji klucza obcego dodaje się klauzulę:

A.
ON UPDATE CASCADE
B.
ON DELETE SET NULL
C.
ON DELETE RESTRICT
D.
ON DELETE CASCADE
ON DELETE CASCADE to opcja klucza obcego, która sprawia, że usunięcie rekordu w tabeli nadrzędnej automatycznie usuwa wszystkie powiązane z nim rekordy w tabeli podrzędnej. Zapobiega to pozostawieniu „osieroconych” wierszy wskazujących na nieistniejący rekord. Dodaje się ją w definicji klucza obcego, np. FOREIGN KEY(klient_id) REFERENCES klienci(id) ON DELETE CASCADE. Dlatego poprawna jest klauzula ON DELETE CASCADE.

Pytanie 29

Jakie są właściwe etapy tworzenia bazy danych?

A. Zdefiniowanie celu, stworzenie tabel, utworzenie relacji, normalizacja
B. Zdefiniowanie celu, utworzenie relacji, stworzenie tabel, normalizacja
C. Zdefiniowanie celu, normalizacja, utworzenie relacji, stworzenie tabel
D. Zdefiniowanie celu, normalizacja, stworzenie tabel, utworzenie relacji
W procesie tworzenia bazy danych kluczowym pierwszym krokiem jest określenie celu, który pozwala zrozumieć, jakie dane będą gromadzone oraz jakie operacje będą na nich wykonywane. Następnie przystępuje się do stworzenia tabel, które stanowią fundamentalne elementy bazy danych. Każda tabela powinna odpowiadać określonym kategoriom danych, a ich struktura powinna być dobrze przemyślana, aby umożliwić efektywne przechowywanie, zarządzanie oraz odczytywanie informacji. Po utworzeniu tabel ważne jest, aby zdefiniować relacje między nimi, co umożliwia integrację danych oraz ich logiczne powiązanie. Na końcu procesu następuje normalizacja, która ma na celu eliminację redundancji danych oraz zwiększenie integralności bazy, co przekłada się na jej wydajność. Przykładem może być stworzenie bazy danych dla systemu zarządzania uczelnią, gdzie tabele odpowiadają za studentów, kursy i wykładowców. Właściwe zdefiniowanie relacji pomoże w zrozumieniu, którzy studenci uczą się na jakich kursach, a normalizacja zabezpieczy przed powielaniem danych.

Pytanie 30

Po wydaniu polecenia użytkownik Jacek będzie mógł

GRANT SELECT, INSERT ON baza1.mojaTabela TO 'Jacek'@'localhost';
A. przeglądać dane w tabeli i wstawiać nowe dane.
B. zmieniać strukturę tabeli i wstawiać nowe dane.
C. usuwać tabelę i tworzyć nową.
D. usuwać dane z tabeli i przeglądać dane.
Twoja odpowiedź jest poprawna. Użytkownik Jacek po wydaniu polecenia SQL 'GRANT SELECT, INSERT ON baza1.mojaTabela TO 'Jacek'@'localhost';' zyskuje możliwość przeglądania (SELECT) oraz wstawiania (INSERT) danych do tabeli 'mojaTabela' znajdującej się w bazie danych 'baza1'. Jest to zgodne ze standardami SQL i dobrymi praktykami zarządzania uprawnieniami w systemach baz danych. Uprawnienie SELECT pozwala na odczyt danych z tabeli, co jest niezbędne do analizy danych, a uprawnienie INSERT umożliwia dodawanie nowych rekordów do tabeli, co jest kluczowe dla utrzymywania aktualności danych. Pamiętaj, że kontrola dostępu do danych jest kluczowym elementem zarządzania bazami danych, zarówno pod względem bezpieczeństwa, jak i zgodności z regulacjami prawnymi.

Pytanie 31

Na podstawie filmu wskaż, która cecha dodana do stylu CSS zamieni miejscami bloki aside i nav, pozostawiając w środku blok section?

A. nav { float: left; } aside { float: left; }
B. aside {float: left; }
C. nav { float: right; }
D. nav { float: right; } section { float: right; }
W tym zadaniu kluczowe jest zrozumienie, jak naprawdę działa float, a nie tylko samo skojarzenie, że „left to lewo, right to prawo”. Wiele osób myśli, że wystarczy ustawić jeden element na lewo, drugi na prawo i wszystko magicznie się poukłada. W praktyce przeglądarka trzyma się bardzo konkretnych reguł: najpierw liczy kolejność elementów w HTML, potem dopiero stosuje float i układa je możliwie jak najwyżej i jak najbliżej odpowiedniej krawędzi.

Jeśli nada się float tylko dla aside albo tylko dla nav, to zmienia się ich pozycja, ale układ trzech bloków nie spełni warunku z zadania: aside i nav nie zamienią się miejscami z pozostawieniem section w środku. Przykładowo, samo float: left na aside niczego nie „zamieni”, bo element i tak pojawia się jako pierwszy w kodzie, więc będzie u góry, tylko że „przyklejony” do lewej. Z kolei ustawienie nav na prawą stronę bez odpowiedniego floatowania section prowadzi do sytuacji, gdzie section nadal zachowuje się jak normalny blok, zwykle ląduje pod elementami pływającymi albo obok nich w sposób mało przewidywalny dla początkującego.

Częsty błąd myślowy polega też na tym, że ktoś próbuje wszystkim elementom dać float: left, licząc na to, że przeglądarka „ułoży je po swojemu”. Wtedy jednak wszystkie te bloki ustawiają się w jednym kierunku, w kolejności z HTML, więc nie ma mowy o świadomym „zamienianiu miejsc”. Brak zrozumienia, że float wyjmuje element z normalnego przepływu i wpływa na to, jak kolejne elementy zawijają się wokół niego, prowadzi właśnie do takich błędnych odpowiedzi. Z mojego doświadczenia lepiej jest najpierw narysować sobie prosty schemat: w jakiej kolejności idą znaczniki i które z nich mają pływać w prawo, a które zostać w naturalnym układzie. Dopiero wtedy dobiera się konkretne deklaracje CSS. Takie myślenie przydaje się nie tylko przy float, ale też przy nauce flexboxa czy grida, gdzie kolejność w DOM i własności układu też grają ogromną rolę.

Pytanie 32

Który protokół jest stosowany do przesyłania plików na serwer WWW?

A. POP3
B. DNS
C. FTP
D. DHCP
FTP, czyli File Transfer Protocol, to protokół używany do przesyłania plików między komputerami w sieci, zwłaszcza w kontekście serwerów WWW. Umożliwia on użytkownikom łatwe przesyłanie, pobieranie, a także zarządzanie plikami na serwerze. FTP działa na bazie modelu klient-serwer, gdzie klient nawiązuje połączenie z serwerem i może przesyłać pliki w obie strony. Protokół ten operuje na portach 20 i 21, co czyni go standardem w dziedzinie przesyłania plików. W praktyce, wiele aplikacji klienckich, takich jak FileZilla czy WinSCP, wykorzystuje FTP do zarządzania plikami na serwerach. FTP wspiera różne metody autoryzacji, w tym logowanie anonimowe, co umożliwia użytkownikom dostęp do publicznych zasobów. Warto również zaznaczyć, że istnieją rozszerzenia, takie jak FTPS czy SFTP, które oferują dodatkowe funkcje zabezpieczeń, umożliwiając szyfrowanie danych podczas transferu. W kontekście standardów, FTP jest definiowany w dokumentach RFC 959 oraz RFC 3659, które określają jego działanie oraz interakcje w sieci. Dzięki swojej wszechstronności i niezawodności, FTP pozostaje jednym z najpopularniejszych protokołów do przesyłania plików w Internecie.

Pytanie 33

Które zapytanie policzy WSZYSTKIE wiersze tabeli Koty?

A.
SELECT COUNT(Koty) AS ROWNUM;
B.
SELECT ROWNUM() FROM Koty;
C.
SELECT COUNT(*) FROM Koty;
D.
SELECT COUNT(ROWNUM) FROM Koty;
Tylko jeden zapis jest poprawny. ROWNUM() nie jest standardową funkcją zliczającą wiersze. COUNT(Koty) i COUNT(ROWNUM) odwołują się do nieistniejących nazw zamiast policzyć wiersze (Koty to nazwa tabeli). Wszystkie wiersze liczy SELECT COUNT(*) FROM Koty;.

Pytanie 34

Który wbudowany typ danych może przyjmować tylko dwie wartości?

A. znakowy
B. logiczny
C. tablicowy
D. łańcuchowy
Tylko dwie wartości może przyjąć typ LOGICZNY (boolean): prawdę (true) albo fałsz (false). Używa się go w warunkach i wyrażeniach decyzyjnych. Dlatego dwuwartościowy jest typ logiczny.

Pytanie 35

Jak można dodać zewnętrzny arkusz stylów do dokumentu HTML?

A. <style>
B. <meta>
C. <link>
D. <css>
Dołączenie zewnętrznego arkusza stylów do kodu HTML realizowane jest przy użyciu znacznika <link>, który znajduje się w sekcji <head> dokumentu HTML. Ten znacznik umożliwia przeglądarkom internetowym odnalezienie i załadowanie zewnętrznego pliku CSS, co pozwala na zastosowanie stylów do elementów HTML. Przy użyciu atrybutu 'href' wskazujemy lokalizację arkusza stylów, natomiast atrybut 'rel' definiuje relację między dokumentem HTML a plikiem stylów, zazwyczaj ustawiając go na 'stylesheet'. Przykładowa struktura to: <link rel='stylesheet' href='styles.css'>. Taki sposób organizacji stylów pozwala na lepsze zarządzanie kodem, umożliwia wielokrotne wykorzystanie tych samych stylów w różnych dokumentach oraz przyspiesza ładowanie strony poprzez caching. Użycie zewnętrznych arkuszy stylów jest zgodne z najlepszymi praktykami programowania front-endowego, co wpływa pozytywnie na wydajność oraz SEO, umożliwiając lepszą indeksację przez wyszukiwarki. Dodatkowo, umożliwia to łatwiejsze wprowadzanie zmian w stylach bez potrzeby edytowania każdego pliku HTML z osobna.

Pytanie 36

Który z poniższych zapisów jest selektorem pseudoklasy CSS?

A.
body
B.
td.wyroznienie
C.
a:link
D.
p#wyroznienie
Pseudoklasa w CSS opisuje szczególny STAN lub sytuację elementu i poprzedza ją dwukropek. a:link wybiera odnośniki w stanie nieodwiedzonym - :link to właśnie pseudoklasa. Inne popularne to :hover (po najechaniu), :visited (odwiedzony) czy :focus (aktywny element formularza). Różnią się od zwykłych selektorów klasy (.nazwa) i ID (#nazwa). Dlatego selektorem pseudoklasy jest a:link.

Pytanie 37

Aby poprawić wydajność strony z grafiką o wymiarach 2000 px na 760 px, konieczne jest zmniejszenie jej rozmiarów

A. za pomocą właściwości CSS, podając rozmiar w pikselach
B. za pomocą atrybutów HTML
C. za pomocą właściwości CSS, podając rozmiar w procentach
D. w programie graficznym
Zastosowanie atrybutów HTML do zmiany rozmiaru grafiki, takie jak width i height, nie wpływa na samą wielkość pliku, a jedynie na to, jak obrazek jest prezentowany na stronie. Przykładowo, jeśli zmniejszymy wymiary w HTML, przeglądarka nadal załadowuje pełną wersję grafiki, co może prowadzić do wolniejszego ładowania strony. To podejście jest niewłaściwe, ponieważ nie rozwiązuje problemu optymalizacji pliku, a jedynie maskuje go na poziomie wizualnym. Podobnie, stosowanie właściwości CSS, aby wskazać rozmiar w pikselach lub procentach, również nie zmienia rozmiaru samego pliku, co powoduje, że strona może ładować się dłużej. Użytkownicy mogą być zdezorientowani, myśląc, że zmiana stylów CSS wystarczy do poprawy wydajności strony, podczas gdy w rzeczywistości kluczowe jest skompresowanie i zmniejszenie samego pliku graficznego. Typowym błędem myślowym jest założenie, że zmiana rozmiaru wyświetlania na stronie jest równoważna z optymalizacją pliku. W praktyce zaleca się najpierw zmniejszyć rozmiar grafiki w programie graficznym, a następnie użyć odpowiednich tagów HTML lub CSS do wyświetlenia obrazu w pożądanym rozmiarze. Takie podejście zapewnia rzeczywiste korzyści w zakresie wydajności i szybkości ładowania strony.

Pytanie 38

Jak nazywa się metoda sortowania polegająca na podziale danych na n równych przedziałów (kubełków), posortowaniu ich i scaleniu?

A. sortowanie szybkie
B. sortowanie kubełkowe
C. sortowanie przez wybór
D. sortowanie bąbelkowe
Pozostałe metody działają inaczej. Sortowanie szybkie (quicksort) dzieli dane wokół elementu osiowego, bąbelkowe wielokrotnie zamienia sąsiednie elementy, a przez wybór szuka w każdym kroku najmniejszego elementu. Podział na przedziały-kubełki i ich scalanie to sortowanie kubełkowe.

Pytanie 39

Jakie wyrażenie logiczne w języku PHP weryfikuje, czy zmienna1 znajduje się w jednostronnie domkniętym przedziale <-5, 10)?

A. $zmienna1 >= -5 && $zmienna1 < 10
B. $zmienna1 >= -5 || $zmienna1 < 10
C. $zmienna1 <= -5 && $zmienna1 < 10
D. $zmienna1 <= -5 || $zmienna1 < 10
W analizowanych odpowiedziach pojawia się kilka błędnych koncepcji związanych z użyciem operatorów logicznych oraz interpretacją przedziałów. W przypadku wyrażenia $zmienna1 >= -5 || $zmienna1 < 10, zastosowanie operatora || (OR) prowadzi do sytuacji, w której warunki są połączone w sposób, który nie spełnia wymagań jednostronnie domkniętego przedziału. W praktyce oznacza to, że jeśli zmienna1 jest mniejsza od 10, ale większa od -5, cały warunek zwraca prawdę, co jest niezgodne z zamierzonym przedziałem. Podobny błąd występuje w wyrażeniu $zmienna1 <= -5 || $zmienna1 < 10, gdzie również użycie operatora OR skutkuje tym, że przedział nie jest odpowiednio ograniczony. Ostatnie wyrażenie $zmienna1 <= -5 && $zmienna1 < 10 zawiera dodatkowo błąd związany z interpretacją granicy -5, które nie powinno być włączone w przedział domknięty. Takie błędne rozumienie prowadzi do nieprawidłowego przechwytywania wartości zmiennej, co jest szczególnie istotne w kontekście programowania w PHP, gdzie precyzyjne określenie warunków jest kluczowe dla zapewnienia poprawności działania aplikacji. Zrozumienie różnicy między jednostronnie domkniętym a domkniętym przedziałem jest fundamentem w programowaniu i pozwala uniknąć typowych pułapek podczas implementacji logiki aplikacji. Warto także regularnie przeglądać dokumentację oraz standardy dotyczące operatorskich konstrukcji w PHP, aby utrzymać wysoką jakość kodu.

Pytanie 40

W aplikacji internetowej komunikat powinien pojawiać się tylko wtedy, gdy dany użytkownik jest na stronie po raz pierwszy. Którą funkcję PHP należy w tym celu zastosować?

A. setcookie
B. session_destroy
C. define
D. mysqli_change_user
W tym zadaniu kluczowe jest zrozumienie, jaki mechanizm w PHP pozwala rozpoznać użytkownika pomiędzy kolejnymi wizytami. Chodzi o sytuację, gdy przeglądarka zamyka się, mija trochę czasu, a my nadal chcemy wiedzieć, czy dana osoba już kiedyś była na stronie. Do tego nie wystarczą zwykłe zmienne czy nawet sama sesja, bo sesja zazwyczaj wygasa po pewnym czasie bezczynności i jest przechowywana po stronie serwera. Mechanizm, który naturalnie pasuje do takiego scenariusza, to właśnie cookies, ustawiane funkcją setcookie(). Propozycja define jest związana z definiowaniem stałych w kodzie PHP. To działa tylko w czasie wykonywania skryptu po stronie serwera i nie ma żadnego związku z konkretnym użytkownikiem czy jego przeglądarką. Stała zdefiniowana przez define() istnieje tylko w jednym przebiegu skryptu i znika po zakończeniu wykonania. Nie pozwala więc zapamiętać, że konkretny użytkownik był już kiedyś na stronie. To raczej narzędzie konfiguracyjne, np. do zdefiniowania ścieżek, wersji aplikacji, stałych liczbowych. Często pojawia się też mylne przekonanie, że skoro są sesje, to wystarczy coś zrobić z session_destroy. Ta funkcja służy do niszczenia całej sesji użytkownika (wylogowania, czyszczenia danych sesyjnych), a nie do wykrywania pierwszej wizyty. Co więcej, sesja jest mechanizmem krótkotrwałym i zależnym od identyfikatora sesji, więc do trwałego rozpoznawania „pierwszy raz / kolejny raz” bez logowania to średni pomysł. W standardowych projektach sesja jest używana do przechowywania aktualnego stanu użytkownika, a nie do długotrwałego śledzenia wizyt. mysqli_change_user natomiast dotyczy zupełnie innego obszaru – zmiany użytkownika połączenia z bazą danych MySQL. To operacja na poziomie serwera bazy, kompletnie oderwana od pojęcia „pierwsza wizyta użytkownika na stronie”. Moim zdaniem typowy błąd przy takich pytaniach polega na mieszaniu mechanizmów: programista widzi słowo „user” i od razu myśli o logowaniu do bazy albo sesji, zamiast pomyśleć o tym, jak HTTP i przeglądarka identyfikują użytkownika między wizytami. Według dobrych praktyk webowych, jeśli chcemy prostego rozróżnienia, czy ktoś był już na stronie, to używamy ciasteczek ustawianych setcookie(), a pozostałe wymienione funkcje pełnią zupełnie inne, bardziej lokalne lub serwerowe role.