Logo

PHP - Formularze i superglobalne tablice

Opis: Zostaną omówione formularze oraz superglobalne tablice w języku PHP, w tym mechanizmy przesyłania danych za pomocą $_GET, $_POST i $_REQUEST, wykorzystanie tablic $_SERVER, $_SESSION i $_COOKIE oraz podstawowe metody walidacji danych formularza, takie jak isset i empty, umożliwiające bezpieczne przetwarzanie danych wejściowych użytkownika w aplikacjach webowych.

PHP - Superglobalne tablice $_GET, $_POST, $_REQUEST

W języku PHP dane przesyłane z formularzy HTML lub przez adres URL są dostępne za pomocą tzw. tablic superglobalnych. Są to specjalne zmienne dostępne w każdym miejscu programu.

Najczęściej wykorzystywane to:

  • $_GET - służy do odbierania danych przesyłanych w adresie URL,

  • $_POST - służy do odbierania danych przesyłanych z formularza metodą POST,

  • $_REQUEST - zawiera dane zarówno z $_GET, jak i $_POST (oraz inne, zależnie od konfiguracji).

Każda z tych tablic działa jak tablica asocjacyjna, gdzie kluczem jest nazwa pola formularza lub parametr w URL.

1. $_GET

Dane w metodzie GET są przesyłane bezpośrednio w adresie URL w postaci parametrów. Każdy parametr ma postać:

nazwa=wartość

Parametry są oddzielone znakiem &.

Przykład

Formularz HTML (wysyłanie danych metodą GET)

<form method="GET" action="index.php">
    <input type="text" name="imie" placeholder="Podaj imię">
    <input type="submit" value="Wyślij">
</form>

Kod PHP (odbieranie danych)

<?php
if (isset($_GET['imie'])) {
    $imie = $_GET['imie'];
    echo "Witaj, " . $imie;
}
?>

Jak dane trafiają do adresu URL

Po wpisaniu np. Jan i wysłaniu formularza przeglądarka automatycznie tworzy adres:

http://localhost/index.php?imie=Jan

Elementy tego adresu:

  • index.php - plik, który obsługuje dane,

  • ? - oznacza początek parametrów,

  • imie=Jan - parametr o nazwie imie i wartości Jan.

Dla większej liczby pól:

<input type="text" name="imie">
<input type="number" name="wiek">

adres może wyglądać tak:

http://localhost/index.php?imie=Jan&wiek=20

Wyjaśnienie

Po wysłaniu formularza:

  • dane z pól HTML są zamieniane na parametry w URL,

  • PHP odczytuje je z tablicy $_GET,

  • klucz tablicy odpowiada nazwie pola formularza (name="imie"),

  • wartość to dane wpisane przez użytkownika.

Metoda GET jest prosta i wygodna, ale należy pamiętać, że dane są jawne (widoczne w pasku adresu) i mają ograniczoną długość.

2. $_POST

Dane są przesyłane z formularza HTML metodą POST i nie są widoczne w adresie URL.

Przykład:

<form method="POST">
    <input type="text" name="imie">
    <input type="submit" value="Wyślij">
</form>
<?php
if (isset($_POST['imie'])) {
    $imie = $_POST['imie'];
    echo "Witaj, " . $imie;
}
?>

Wyjaśnienie:

Dane z pola formularza o nazwie imie są przesyłane metodą POST i odczytywane z tablicy $_POST. Funkcja isset() sprawdza, czy dane zostały wysłane.

3. $_REQUEST

Tablica $_REQUEST umożliwia dostęp do danych zarówno z $_GET, jak i $_POST.

Przykład:

<?php
$imie = $_REQUEST['imie'];
echo "Witaj, " . $imie;
?>

Wyjaśnienie:

Niezależnie od sposobu przesłania danych (GET lub POST), wartość imie zostanie odczytana z tablicy $_REQUEST. Jest to rozwiązanie wygodne, ale mniej precyzyjne, ponieważ nie wskazuje jednoznacznie źródła danych.

Podsumowanie

  • $_GET - dane widoczne w URL, łatwe do testowania,

  • $_POST - dane przesyłane w formularzu, bezpieczniejsze dla użytkownika,

  • $_REQUEST - łączy różne źródła danych, ale może być mniej czytelne.

Tablice te stanowią podstawę pracy z formularzami i komunikacji między stroną a użytkownikiem w PHP.

PHP - Tablice $_SERVER, $_SESSION, $_COOKIE

W języku PHP istnieją specjalne tablice zwane superglobalnymi, które umożliwiają dostęp do różnych informacji związanych z działaniem aplikacji. W tym temacie szczególnie istotne są:

  • $_SERVER - zawiera informacje o serwerze i środowisku wykonania,

  • $_SESSION - umożliwia przechowywanie danych użytkownika między kolejnymi żądaniami (sesja),

  • $_COOKIE - pozwala zapisywać dane w przeglądarce użytkownika.

Każda z tych tablic pełni inną rolę i jest wykorzystywana w różnych sytuacjach w aplikacjach webowych.

1. $_SERVER

Tablica $_SERVER zawiera informacje o serwerze, zapytaniu HTTP oraz środowisku, w którym działa aplikacja.

Przykład:

<?php
echo "Adres strony: " . $_SERVER['PHP_SELF'] . "<br>";
echo "Metoda żądania: " . $_SERVER['REQUEST_METHOD'];
?>

Wynik działania:

Adres strony: /index.php
Metoda żądania: GET

Wyjaśnienie:

  • $_SERVER['PHP_SELF'] - zwraca nazwę aktualnie wykonywanego pliku,

  • $_SERVER['REQUEST_METHOD'] - informuje, czy dane zostały przesłane metodą GET lub POST.
    Tablica ta jest przydatna np. do debugowania lub kontroli sposobu przesyłania danych.

2. $_SESSION

Tablica $_SESSION służy do przechowywania danych użytkownika podczas trwania sesji. Dane te są dostępne na różnych stronach, dopóki sesja nie zostanie zakończona.

Przykład:

<?php
session_start();

$_SESSION['imie'] = "Jan";

echo "Zapisano dane w sesji.";
?>
<?php
session_start();

echo "Witaj, " . $_SESSION['imie'];
?>

Wyjaśnienie:

  • session_start() rozpoczyna sesję (jest wymagane przed użyciem $_SESSION),

  • dane zapisane w jednej części aplikacji mogą być odczytane w innej,

  • dane sesji są przechowywane po stronie serwera.

Sesje są często wykorzystywane np. w systemach logowania.

Usuwanie danych z sesji

PHP udostępnia dwie ważne funkcje do zarządzania sesją:

  • session_unset() - usuwa wszystkie zmienne sesyjne,

  • session_destroy() - kończy sesję (usuwa dane sesji na serwerze).

Przykład:

<?php
session_start();

$_SESSION['imie'] = "Jan";

// usunięcie danych sesji
session_unset();

// zniszczenie sesji
session_destroy();

echo "Sesja została zakończona.";
?>

Wyjaśnienie:

  • session_unset() usuwa wszystkie zmienne zapisane w sesji,

  • session_destroy() całkowicie kończy sesję,

  • po wykonaniu tych operacji dane użytkownika nie są już dostępne.

3. $_COOKIE

Tablica $_COOKIE umożliwia dostęp do danych zapisanych w przeglądarce użytkownika w postaci tzw. ciasteczek (cookies).

Składnia funkcji setcookie()

setcookie(nazwa, wartość, wygaśnięcie, ścieżka, domena, zabezpieczenie, tylko_http);

Parametry:

  • nazwa - nazwa ciasteczka,

  • wartość - przechowywana wartość,

  • wygaśnięcie - czas wygaśnięcia (timestamp) (obecny czas plus ilośc sekund) ,

  • ścieżka - dostępność w katalogach (np. /),

  • domena - domena, dla której cookie jest dostępne,

  • zabezpieczenie (secure) - tylko przez HTTPS (true/false),

  • tylko_http (httponly) - dostępne tylko przez HTTP (bez JavaScript).

Przykład z pełną składnią:

<?php
setcookie("imie", "Anna", time() + 3600, "/", "", false, true);

echo "Cookie zostało ustawione.";
?>

Wyjaśnienie:

Ciasteczko "imie" zostaje zapisane na 1 godzinę, dostępne w całej aplikacji (/) i zabezpieczone przed dostępem przez JavaScript (httponly = true).

Usuwanie ciasteczka

Aby usunąć cookie, należy ustawić datę wygaśnięcia w przeszłości:

<?php
setcookie("imie", "", time() - 3600);
echo "Cookie zostało usunięte.";
?>

Wyjaśnienie:

Przeglądarka usuwa ciasteczko, ponieważ jego czas ważności już minął.

Sprawdzenie czy ciasteczko istnieje

<?php
if (isset($_COOKIE['imie'])) {
    echo "Witaj, " . $_COOKIE['imie'];
} else {
    echo "Brak zapisanych danych.";
}
?>

Podsumowanie

  • $_SERVER - informacje o serwerze i zapytaniu,

  • $_SESSION - dane przechowywane po stronie serwera między stronami,

    • session_start() - rozpoczęcie sesji

    • session_unset() - usunięcie zmiennych

    • session_destroy() - zakończenie sesji

  • $_COOKIE - dane zapisywane w przeglądarce użytkownika.

    • setcookie() - tworzenie ciasteczka (z wieloma parametrami)

    • usuwanie przez ustawienie czasu w przeszłości

    • sprawdzanie przez isset()

    • możliwość weryfikacji, czy cookies są włączone

Kiedy używać $_SESSION, a kiedy $_COOKIE?

$_SESSION

Stosuj, gdy:

  • przechowujesz dane wrażliwe (np. identyfikator użytkownika po zalogowaniu),

  • dane mają być dostępne tylko podczas jednej sesji użytkownika,

  • zależy Ci na większym bezpieczeństwie (dane nie są po stronie klienta),

  • pracujesz z systemem logowania lub autoryzacji.

Przykłady użycia:

  • logowanie użytkownika,

  • koszyk zakupowy (tymczasowy),

  • dane sesyjne między podstronami.

$_COOKIE

Stosuj, gdy:

  • chcesz zapamiętać dane na dłużej (nawet po zamknięciu przeglądarki),

  • dane nie są wrażliwe,

  • potrzebujesz przechowywać preferencje użytkownika,

  • chcesz rozpoznać użytkownika przy kolejnej wizycie.

Przykłady użycia:

  • zapamiętanie języka strony,

  • tryb ciemny/jasny,

  • "zapamiętaj mnie" (częściowo, zwykle z tokenem).

PHP - Walidacja danych z formularza (isset, empty)

Walidacja danych z formularza polega na sprawdzeniu poprawności i obecności danych przesłanych przez użytkownika, zanim zostaną one wykorzystane w programie. Jest to bardzo ważny etap, który pozwala uniknąć błędów oraz zwiększa bezpieczeństwo aplikacji.

W PHP do podstawowej walidacji często wykorzystuje się funkcje:

  • isset() - sprawdza, czy zmienna istnieje i ma przypisaną wartość,

  • empty() - sprawdza, czy zmienna jest pusta (np. "", 0, null, false).

1. isset()

Funkcja isset() zwraca true, jeśli zmienna istnieje i nie ma wartości null.

Przykład:

<form method="POST">
    <input type="text" name="imie">
    <input type="submit" value="Wyślij">
</form>
<?php
if (isset($_POST['imie'])) {
    echo "Formularz został wysłany.";
}
?>

Wyjaśnienie:

Funkcja isset() sprawdza, czy pole imie zostało przesłane w formularzu. Dzięki temu wiemy, że użytkownik kliknął przycisk "Wyślij" i dane są dostępne.

2. empty()

Funkcja empty() sprawdza, czy zmienna jest pusta.

Przykład:

<?php
if (empty($_POST['imie'])) {
    echo "Pole imię jest wymagane.";
}
?>

Wyjaśnienie:

Jeśli użytkownik nie wpisze żadnej wartości, empty() zwróci true i wyświetlony zostanie komunikat o błędzie.

3. Połączenie isset() i empty()

Najczęściej obie funkcje stosuje się razem.

Przykład:

<form method="POST">
    <input type="text" name="imie">
    <input type="submit" value="Wyślij">
</form>
<?php
if (isset($_POST['imie'])) {
    if (empty($_POST['imie'])) {
        echo "Pole imię jest wymagane.";
    } else {
        echo "Witaj, " . $_POST['imie'];
    }
}
?>

Wyjaśnienie:

  • isset() sprawdza, czy formularz został wysłany,

  • empty() sprawdza, czy użytkownik wprowadził dane,

  • w zależności od wyniku wyświetlany jest komunikat lub dane użytkownika.

Zadania - Formularze i superglobalne tablice

1. $_GET, $_REQUEST

Utwórz formularz przesyłający imię metodą GET i wyświetl je przy użyciu $_GET oraz $_REQUEST.

Kroki:

  • utwórz formularz HTML z polem imie i metodą GET,

  • po wysłaniu formularza odczytaj dane z $_GET['imie'],

  • wyświetl imię na stronie,

  • odczytaj tę samą wartość z $_REQUEST['imie'],

  • porównaj wyniki (powinny być takie same).

2. $_POST, $_REQUEST

Utwórz formularz przesyłający wiek metodą POST i wyświetl go przy użyciu $_POST oraz $_REQUEST.

Kroki:

  • utwórz formularz HTML z polem wiek i metodą POST,

  • po wysłaniu formularza odczytaj dane z $_POST['wiek'],

  • wyświetl wiek na stronie,

  • odczytaj wartość z $_REQUEST['wiek'],

  • sprawdź, czy wynik jest identyczny.

3. $_SERVER

Wyświetl podstawowe informacje o aktualnym żądaniu i środowisku serwera.

Kroki:

  • użyj $_SERVER['PHP_SELF'], aby wyświetlić nazwę pliku,

  • użyj $_SERVER['REQUEST_METHOD'], aby wyświetlić metodę żądania,

  • opcjonalnie wyświetl $_SERVER['SERVER_NAME'],

  • przedstaw dane w czytelnej formie (w HTML).

4. $_SESSION

Utwórz prosty mechanizm zapamiętywania imienia użytkownika przy użyciu sesji.

Kroki:

  • rozpocznij sesję (session_start()),

  • utwórz formularz do wpisania imienia,

  • zapisz dane do $_SESSION['imie'],

  • wyświetl zapisane imię na stronie,

  • dodaj przycisk lub link do usunięcia sesji (session_destroy()).

5. $_COOKIE

Zapisz imię użytkownika w ciasteczku i wyświetl je po odświeżeniu strony.

Kroki:

  • utwórz formularz do wpisania imienia,

  • użyj setcookie() do zapisania wartości (np. na 1 godzinę),

  • po odświeżeniu strony odczytaj dane z $_COOKIE,

  • wyświetl komunikat powitalny,

  • dodaj opcję usunięcia ciasteczka.

6. Walidacja danych (isset, empty)

Utwórz formularz z polem "login" i sprawdź poprawność wprowadzonych danych.

Kroki:

  • utwórz formularz HTML z polem login,

  • sprawdź, czy formularz został wysłany (isset()),

  • sprawdź, czy pole nie jest puste (empty()),

  • jeśli puste - wyświetl komunikat: "Pole wymagane",

  • jeśli uzupełnione - wyświetl: "Witaj, [login]".