Łapka LogoŁapka Infa
🌐
INF.03

Wielki Finał Formularzy (POST i GET)

Tajemnicze tablice globalne. Jak PHP dogaduje się z polami tekstowymi HTMLa z pierwszej lekcji kursu.

Odbieranie Formularzy (POST i GET)

Oto on. Filar egzaminu INF.03. Pamiętasz, jak na pierwszej lekcji budowaliśmy formularze HTML? Ustawialiśmy tam <form method="POST">. Kliknięcie w nim "Wyślij" wysyła pakunek do naszego ukrytego na zapleczu serwera pliku PHP. Ale... jak ten plik ma otworzyć tę paczkę i "wysupłać" wpisane w okienkach dane?

Używając tzw. Superglobalnych Zmiennych! Nazywają się $_POST oraz $_GET.

Tablica $_POST

Większość egzaminów wprost narzuca w treści arkusza: "formularz musi przetworzyć dane metodą POST". Użytkownik wpisał swoje imię, a my teraz musimy to odzyskać.

Pamiętasz z zajęć o formularzach HTML słynny atrybut name="" u każdego okienka? To właśnie ten atrybut służy teraz za "Klucz" w asocjacyjnej tablicy $_POST!

<!-- Czysty HTML: -->
<form action="" method="POST">
    <input type="text" name="imieUzytkownika">
    <button type="submit">Wślij na Backend</button>
</form>

Teraz, w tym samym pliku (lub podanym w action="skrypt.php"), PHP wyłapuje to jedną linijką kodu:

<?php
    // Wyciągnij zawartość z przesyłki i nadaj mu nową lokalną zmienną w PHP.
    // KLUCZ w nawiasach kwadratowych MUST być taki sam jak 'name' w HTML!
    $pobraneImie = $_POST['imieUzytkownika'];
    
    echo "Udało się! Użytkownik to " . $pobraneImie;
?>

isset() - Czy paczka w ogóle do nas dotarła? 🪤

To jest pułapka na 90% punktacji początkujących. Jeśli użytkownik wejdzie na stronę, ładuje ją pustą, prawda? Zatem PHP (odpalane z góry na dół) spróbuje natychmiast odczytać zawartość $_POST['imieUzytkownika']! Ponieważ użytkownik nie zdążył jeszcze nawet dotknąć klawiatury i wysłać pustej formy, PHP wejdzie w szał i wypluje wielki błąd "Undefined array key"!

Aby temu zapobiec, opakowujemy CAŁE pobieranie i dodawanie do bazy w instrukcję isset() (Is Set - "Czy jest w ogóle ustawione / przysłane?").

<?php
    // "JEŚLI paczka POST w ogóle zawiera element o 'name' imieUzytkownika..."
    if (isset($_POST['imieUzytkownika'])) {
        $pobraneImie = $_POST['imieUzytkownika'];
        echo "Witaj " . $pobraneImie;
    }
?>

I tyle! Zawsze buduj z isset(), to chroni Cię przed gniewem sprawdzającego komisji CKE!