Metodi GET in POST
Ko uporabnik izpolni obrazec in klikne gumb za pošiljanje, brskalnik podatke pošlje strežniku. V spletnih obrazcih za to najpogosteje uporabljamo metodi GET in POST. Metodo določimo z atributom method v elementu <form>.
V PHP poslane podatke nato preberemo iz ustreznega preddefiniranega polja. Izbira pravilne metode je pomembna, ker vpliva na način pošiljanja podatkov, njihovo vidnost in primernost za posamezne naloge.
Pomni: Če obrazec uporablja method="get", podatke beremo iz $_GET. Če obrazec uporablja method="post", podatke beremo iz $_POST.
Osnovna pravila
- Obrazec mora imeti pravilno nastavljen atribut
method. - Vsak vnosni element, katerega vrednost želimo prebrati v PHP, mora imeti atribut
name. - Podatke moramo prebrati iz pravilnega preddefiniranega polja, torej iz
$_GETali$_POST. - Pred obdelavo je priporočljivo preveriti, ali je bila zahteva res poslana z ustrezno metodo.
- Vhodne podatke je treba preveriti, po potrebi filtrirati in varno obdelati.
Pozor: Če atribut name ni določen, vrednost posameznega elementa ne bo poslana strežniku, zato je v PHP ne bo mogoče prebrati.
Metoda GET
Pri metodi GET se podatki pripnejo URL-naslovu. Zato so vidni v naslovni vrstici brskalnika. Ta metoda je primerna predvsem za zahteve, pri katerih podatke pridobivamo, na primer pri iskanju, filtriranju ali izbiri zapisa.
Ker so podatki zapisani v URL-ju, lahko tak naslov shranimo med zaznamke, kopiramo ali pošljemo drugim.
preveri.php?id=15&naslov=php
Pomni: Metoda GET je primerna za pridobivanje podatkov in za primere, ko želimo, da so parametri vidni v URL-naslovu.
- primer HTML kode:
<form action="obdelaj.php" method="get">
<label for="izdelek">Izdelek:</label>
<select name="izdelek" id="izdelek">
<option value="miska">Miška</option>
<option value="tipkovnica">Tipkovnica</option>
</select>
<label for="vsebina">Iskani niz:</label>
<input name="vsebina" id="vsebina" type="text">
<button type="submit">Pošlji</button>
</form>
- primer PHP kode:
<?php
$izdelek = $_GET['izdelek'] ?? '';
$vsebina = $_GET['vsebina'] ?? '';
?>
Pozor: Metoda GET ni primerna za pošiljanje gesel ali drugih občutljivih podatkov, ker so vrednosti zapisane v URL-naslovu.
Metoda POST
Pri metodi POST se podatki pošljejo v telesu HTTP-zahteve. Običajno niso vidni v URL-naslovu. Ta metoda je primerna predvsem takrat, ko podatke pošiljamo v obdelavo, shranjevanje ali spreminjanje.
Metodo POST zato pogosto uporabljamo pri prijavi, registraciji, pošiljanju sporočil, vnosu podatkov v podatkovno zbirko in pri drugih dejanjih, kjer aplikacija obdeluje uporabniški vnos.
Pomni: Metoda POST je primerna za pošiljanje podatkov, kadar aplikacija nekaj obdela, shrani ali spremeni.
- primer HTML kode:
<form action="obdelaj.php" method="post">
<label for="uporabnik">Uporabniško ime:</label>
<input name="uporabnik" id="uporabnik" type="text">
<label for="geslo">Geslo:</label>
<input name="geslo" id="geslo" type="password">
<button type="submit">Prijava</button>
</form>
- primer PHP kode:
<?php
$uporabnik = $_POST['uporabnik'] ?? '';
$geslo = $_POST['geslo'] ?? '';
?>
Pozor: Tudi pri metodi POST podatki niso samodejno varni. Še vedno jih je treba preveriti, filtrirati in ustrezno obdelati.
Primerjava metod GET in POST
| Lastnost | GET | POST |
|---|---|---|
| Namen | pridobivanje podatkov | pošiljanje podatkov v obdelavo |
| Mesto podatkov | v URL-naslovu | v telesu zahteve |
| Vidnost podatkov | vidni v naslovni vrstici | običajno niso vidni v URL-ju |
| Branje v PHP | $_GET |
$_POST |
| Tipični primeri | iskanje, filtriranje, povezave | prijava, registracija, shranjevanje podatkov |
Pomni: Glavna razlika je v tem, da GET uporabljamo predvsem za pridobivanje podatkov, POST pa za pošiljanje podatkov v obdelavo.
Priporočila za uporabo
- Metodo
GETuporabimo, kadar želimo pridobivati podatke ali sestaviti povezavo s parametri. - Metodo
POSTuporabimo, kadar pošiljamo podatke, ki jih aplikacija obdela, shrani ali spremeni. - Pred branjem podatkov je priporočljivo preveriti metodo zahteve.
- Pri obdelavi vhodov uporabljamo varnejše pristope, na primer operator
??ali funkcijofilter_input(). - Občutljivih podatkov ne pošiljamo z metodo
GET.
Preverjanje metode v sodobnejši PHP kodi
Pred branjem podatkov pogosto preverimo, s katero metodo je bila zahteva poslana. To naredimo s pomočjo $_SERVER['REQUEST_METHOD'].
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$uporabnik = $_POST['uporabnik'] ?? '';
}
?>
V sodobnejši kodi pogosto uporabimo tudi funkcijo filter_input(), ki omogoča bolj urejeno in pregledno branje vhodnih podatkov.
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$uporabnik = filter_input(INPUT_POST, 'uporabnik', FILTER_DEFAULT);
}
?>
Pomni: Preverjanje metode zahteve izboljša preglednost kode in zmanjša možnost napačne obdelave podatkov.
Pozor: Nepreverjeni vhodni podatki lahko povzročijo napake v programu ali varnostne težave, zato jih ne obdelujemo neposredno brez predhodnega preverjanja.
Pogoste napake
- V obrazcu je določena metoda
post, v programu pa se podatki berejo iz polja$_GET. - V obrazcu je določena metoda
get, v programu pa se podatki berejo iz polja$_POST. - Vnosni element nima atributa
name, zato njegova vrednost ni poslana strežniku. - Podatek se bere neposredno brez preverjanja, ali je bil sploh poslan.
- Z metodo
GETse pošiljajo občutljivi podatki. - Program ne preveri, ali je bila zahteva poslana z ustrezno metodo.
- Vhodni podatki se uporabijo brez preverjanja ali filtriranja.
Pozor: Napačna izbira metode ali napačno branje podatkov pogosto povzroči, da program ne deluje pravilno, čeprav je obrazec na prvi pogled sestavljen pravilno.
Sklep
Metodi GET in POST sta osnovna načina pošiljanja podatkov iz obrazcev v PHP. Metodo GET uporabljamo predvsem za pridobivanje podatkov, metodo POST pa za pošiljanje podatkov v obdelavo. Pri delu je pomembno, da izberemo ustrezno metodo, podatke pravilno preberemo ter jih preverimo in varno obdelamo.