Načrtovanje in razvoj spletnih aplikacij

POST in GET

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 $_GET ali $_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 GET uporabimo, kadar želimo pridobivati podatke ali sestaviti povezavo s parametri.
  • Metodo POST uporabimo, 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 funkcijo filter_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 GET se 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.