Jeśli dopiero zaczynasz swoją przygodę z PHP, pewnie prędzej czy później spotkasz się z tajemniczymi pojęciami GET i POST. Brzmi jak coś z filmów science fiction, ale spokojnie — to tylko dwa najpopularniejsze sposoby przekazywania danych między przeglądarką a serwerem. W tym artykule pokażę Ci w prosty sposób, jak z nich korzystać, czym się różnią i kiedy lepiej użyć jednego lub drugiego. A na deser — kilka praktycznych przykładów kodu PHP, które możesz od razu przetestować!
Co to są argumenty GET i POST?
Zacznijmy od podstaw. Gdy wpisujesz coś w formularzu na stronie internetowej (np. wyszukiwanie w sklepie lub logowanie), te dane muszą jakoś trafić na serwer, żeby PHP mógł je przetworzyć.
Do tego właśnie służą metody GET i POST.
- GET — dane są przekazywane w adresie URL.
Przykład:https://mojastrona.pl/szukaj.php?fraza=buty&kategoria=sportoweWidzisz? Wszystko, co wpiszesz w formularzu, ląduje po znaku?w adresie strony. - POST — dane są przesyłane „w tle”, w tzw. treści żądania HTTP.
Nie zobaczysz ich w pasku adresu, bo są ukryte — dzięki temu są trochę bezpieczniejsze.
Różnice między GET a POST
Okej, ale skoro oba sposoby robią podobne rzeczy — po co dwa?
Oto najważniejsze różnice między nimi:
| Cecha | GET | POST |
|---|---|---|
| Widoczność danych | Dane widać w adresie URL | Dane są ukryte |
| Bezpieczeństwo | Mniej bezpieczne | Bardziej bezpieczne |
| Długość danych | Ograniczona (ok. 2000 znaków) | Praktycznie bez limitu |
| Buforowanie (cache) | Można buforować (np. w historii przeglądarki) | Nie jest buforowane |
| Typ zastosowania | Linki, filtrowanie, wyszukiwanie | Formularze logowania, wysyłka danych, upload plików |
Proste, prawda?
GET jest jak otwarta pocztówka — każdy może zobaczyć, co na niej napisałeś.
POST to raczej list w kopercie — nie widać, co w środku, dopóki ktoś go nie otworzy.
Jak używać metody GET w PHP?
Czas na praktykę!
Zacznijmy od prostego przykładu, który pokazuje, jak odbierać dane przesłane metodą GET.
Załóżmy, że mamy plik o nazwie get_przyklad.php:
<?php
if (isset($_GET['imie']) && isset($_GET['wiek'])) {
$imie = $_GET['imie'];
$wiek = $_GET['wiek'];
echo "Cześć, $imie! Masz $wiek lat.";
} else {
echo "Nie podano imienia lub wieku!";
}
?>
A teraz, żeby to przetestować, wpisz w przeglądarce coś takiego:
http://localhost/get_przyklad.php?imie=Kasia&wiek=25
I co się stanie?
Zobaczysz na ekranie komunikat:
Cześć, Kasia! Masz 25 lat.
To właśnie magia metody GET — dane trafiają do tablicy $_GET, a Ty możesz z nimi robić, co tylko chcesz.
Tworzymy formularz z metodą GET
Teraz zróbmy to bardziej elegancko — przez formularz HTML.
<form action="get_przyklad.php" method="GET">
<label>Podaj imię:</label>
<input type="text" name="imie" required>
<br>
<label>Podaj wiek:</label>
<input type="number" name="wiek" required>
<br><br>
<button type="submit">Wyślij</button>
</form>
Kiedy klikniesz przycisk „Wyślij”, przeglądarka automatycznie przekieruje Cię na adres np.:
get_przyklad.php?imie=Ola&wiek=19
I gotowe!
Proste, czytelne i szybkie — idealne, jeśli chcesz np. filtrować produkty w sklepie online, generować linki lub robić wyszukiwarki.
Użycie metody POST w PHP
No dobrze, a co z POST-em?
Tu działa to trochę inaczej. Dane nie są widoczne w adresie URL, więc świetnie nadają się np. do logowania, rejestracji, wysyłania wiadomości itp.
Oto przykład prostego formularza logowania:
<form action="post_przyklad.php" method="POST">
<label>Login:</label>
<input type="text" name="login" required>
<br>
<label>Hasło:</label>
<input type="password" name="haslo" required>
<br><br>
<button type="submit">Zaloguj się</button>
</form>
A teraz plik post_przyklad.php:
<?php
if (isset($_POST['login']) && isset($_POST['haslo'])) {
$login = $_POST['login'];
$haslo = $_POST['haslo'];
echo "Próba logowania użytkownika: $login <br>";
// W prawdziwej aplikacji nigdy nie wyświetlaj hasła!
// Tutaj tylko jako przykład.
echo "Hasło (tylko do testów): $haslo";
} else {
echo "Nie podano danych logowania!";
}
?>
Zauważ, że nie ma żadnych danych w adresie strony — czysto i bezpieczniej.
To właśnie przewaga metody POST.
Jak sprawdzić, którą metodą przesłano dane?
Czasami chcesz, żeby ten sam plik obsługiwał zarówno GET, jak i POST.
Na szczęście w PHP można to łatwo sprawdzić za pomocą zmiennej $_SERVER[’REQUEST_METHOD’].
Przykład:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
echo "Dane przyszły metodą POST";
} elseif ($_SERVER['REQUEST_METHOD'] === 'GET') {
echo "Dane przyszły metodą GET";
} else {
echo "Nieznana metoda";
}
?>
Możesz więc używać jednej strony do różnych celów — na przykład GET do wyświetlania formularza i POST do jego obsługi po wysłaniu.
Walidacja danych — dlaczego to takie ważne?
Nie wystarczy tylko odebrać dane — trzeba też upewnić się, że są poprawne.
Wyobraź sobie, że ktoś zamiast liczby wieku wpisze skrypt lub złośliwy kod.
Aby uniknąć problemów, zawsze filtrowuj dane wejściowe!
Oto przykład bezpieczniejszego pobierania danych:
<?php
if (isset($_POST['email'])) {
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
echo "Twój e-mail: " . htmlspecialchars($email);
}
?>
Tutaj:
filter_input()usuwa niepożądane znaki,htmlspecialchars()zapobiega wstrzyknięciu HTML-a (tzw. XSS).
Nigdy nie ufaj danym od użytkownika — nawet jeśli wydają się niewinne.
Przykład praktyczny — formularz kontaktowy z użyciem POST
Zróbmy coś bardziej „życiowego” — prosty formularz kontaktowy.
HTML:
<form action="kontakt.php" method="POST">
<label>Imię:</label>
<input type="text" name="imie" required><br>
<label>E-mail:</label>
<input type="email" name="email" required><br>
<label>Wiadomość:</label>
<textarea name="wiadomosc" required></textarea><br>
<button type="submit">Wyślij wiadomość</button>
</form>
PHP (kontakt.php):
<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$imie = htmlspecialchars($_POST['imie']);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$wiadomosc = htmlspecialchars($_POST['wiadomosc']);
echo "<h3>Dziękujemy, $imie!</h3>";
echo "<p>Twoja wiadomość została wysłana:</p>";
echo "<blockquote>$wiadomosc</blockquote>";
echo "<p>Skontaktujemy się z Tobą na adres: $email</p>";
} else {
echo "Niepoprawna metoda wysyłki formularza.";
}
?>
Ten przykład możesz spokojnie wykorzystać w swoim projekcie.
Oczywiście w prawdziwej aplikacji dodałbyś jeszcze wysyłkę e-maila za pomocą mail() lub biblioteki PHPMailer, ale to już temat na osobny artykuł.
GET i POST w praktyce – kiedy który?
A teraz najczęściej zadawane pytanie:
„Kiedy używać GET, a kiedy POST?”
Odpowiedź jest prosta:
Używaj GET, gdy:
- chcesz przekazać dane widoczne w adresie (np. wyszukiwarka),
- link ma być łatwy do udostępnienia,
- operacja nie zmienia niczego w bazie danych.
Używaj POST, gdy:
- przesyłasz dane poufne (hasła, e-maile, numery),
- zapisujesz coś do bazy (np. rejestracja, komentarze),
- przesyłasz duże ilości danych lub pliki.
Bonus: Łączenie GET i POST w jednym formularzu
Tak, da się to zrobić!
Choć rzadko się to stosuje, czasem warto mieć np. filtr z GET i formularz wysyłający POST.
Przykład:
<form action="filtruj.php?kategoria=sport" method="POST">
<label>Wpisz nazwę produktu:</label>
<input type="text" name="produkt" required>
<button type="submit">Szukaj</button>
</form>
Tutaj adres ma parametr GET (kategoria=sport),
a użytkownik wprowadza dane przez POST (produkt).
W PHP możesz wtedy użyć obu tablic jednocześnie:
<?php $kategoria = $_GET['kategoria'] ?? 'brak'; $produkt = $_POST['produkt'] ?? 'brak'; echo "Wyszukuję: $produkt w kategorii: $kategoria"; ?>
Metody GET i POST to absolutne podstawy pracy z PHP.
Bez nich żadna strona internetowa nie mogłaby przyjmować danych od użytkowników.
Pamiętaj:
- GET – do pobierania i filtrowania danych (widoczne w URL),
- POST – do bezpiecznego przesyłania danych (ukryte w tle),
- zawsze waliduj dane,
- i nie wyświetlaj haseł ani poufnych informacji w wynikach.
Teraz, gdy już wiesz, jak to działa, możesz bez problemu tworzyć formularze, wyszukiwarki, systemy logowania czy panele kontaktowe.
PHP naprawdę nie jest takie straszne — wystarczy trochę praktyki, a zrozumiesz, jak potężne potrafi być to narzędzie.