nav_dugme codeBlog codeBlog
  • početna Početna stranica
  • Sačuvani članci Sačuvani članci
  • Članci
     (spisak)
  • Kontakt
Povratak na vrh stranice

Info & povezani članci Info o članku - dugme

Info

trejler_sat Datum objave: 09.02.2021.

trejler_dokument Jezici: PHP

trejler_teg_narandzasti Težina: 6/10

PHP
internet
get
web server
localhost
backend
fullstack
teorija

Tema: PHP

Uvod u PHP i backend programiranjePovezivanje skripti sa MySql bazama podatakaTutorijal - Kreiranje forme za prijavu korisnika$_POST - Prosleđivanje podataka preko HTML forme$_SESSION - Direktno prosleđivanje podataka između stranicaTutorijal - Ažuriranje praznih kolona u bazi podataka

Povezani članci

Uvod u web dizajn - 1. deo - Početni koraciPokretanje lokalnog web serveraUvod u relacione baze podataka i SQLUvod u Node.jsUvod u PythonStruktura web adresa i pristup internet stranicamaŠablonske niske u programskim jezicimaHTTP statusni kodoviLokalno skladištenje podataka browsera (sessionStorage, localStorage, cookies)Asinhrono programiranje u JavaScriptuASCII, UNICODE i UTF - Predstavljanje znakova na računarimaGNU/Linux - 1. deo - Uvod
Svi članci
A user interface should be so simple that a beginner in an emergency can understand it within ten seconds.
Ted Nelson

PHP - Prosleđivanje podataka preko URL-a ($_GET)

Facebook LinkedIn Twitter Viber WhatsApp E-mail
zoom_plus zoom_minus bookmark
početna > Članci > Teorija

Uvod

Posle upoznavanja sa osnovama PHP-a, na red dolazi upoznavanje sa različitim tehnikama za prosleđivanje podataka PHP skriptama, odnosno, sa tehnikama za razmenu podataka između skripti koje čine sadržaj sajta.

Korisnički podaci koji završe u PHP skriptama (kao i razni drugi podaci), dostupni su za obradu preko tzv. superglobalnih promenljivih sa kojima ćemo se detaljno upoznati u članku koji je pred nama i kroz nekoliko narednih članaka.

Pojam superglobalne promenljive u PHP-u

Pored promenljivih koje programeri mogu definisati sami (za potrebe izvršavanja PHP skripti), postoje i promenljive koje se u toku izvršavanja skripti generišu automatski.

Da budemo precizni, u pitanju su asocijativni nizovi * čijim elementima skripte mogu pristupati, pre svega zarad čitanja zapisanih podataka, ali (u pojedinim okolnostima), takođe i zarad direktnog upisivanja vrednosti na različite indekse. **

Asocijativni nizovi koje smo prethodno opisali, u PHPu nose zajednički naziv superglobalne promenljive, a najveću upotrebnu vrednost imaju sledeći automatski generisani nizovi:

  • $_GET - podaci prosleđeni preko HTTP metode GET (najčešće putem URL-a)
  • $_POST - podaci prosleđeni preko HTTP metode POST (najčešće putem HTML forme)
  • $_SESSION - podaci koji se čuvaju u okviru sesije u browseru (od trenutka kada se sajt pokrene, sve dok se ne zatvori)
  • $_COOKIE - podaci koji se čuvaju lokalno (na računaru klijenta) u obliku HTTP kukija
  • $_SERVER - podaci o parametrima konekcije (IP adresa koja je korišćena za pristup, naziv servera sa koga je ispraćen link do sajta koji se poziva, naziv browsera i drugi podaci)
  • $_REQUEST - podaci o protokolu koji je korišćen za slanje podataka

* Asocijativni nizovi su nizovi u kojima indeksi nisu nenegativne celobrojne vrednosti, već, niske.

** Na primer, elementi superglobalnih promenljivih $_GET i $_POST mogu se samo čitati, dok superglobalna promenljiva $_SESSION dozvoljava i upis (više o svemu u nastavku i u nekoliko narednih članaka).

Superglobalna promenljiva $_GET

Ukoliko ste pažljivo ispratili članak o strukturi web adresa, primetili ste da se na kraju URL-a može naći i "upit" (praktično: niska koja sadrži dodatne informacije).

U kontekstu diskusije o superglobalnim promenljivama u jeziku PHP, delovi upita (koji 'završe' u PHP skripti), predstavljaju indekse i vrednosti kojima se može pristupati preko superglobalne promenljive $_GET.

U pitanju je način za prenos podataka koji je transparentan - ali samim tim i nesiguran(!), i stoga je potrebno prepoznati koji se podaci smeju, a koji ne smeju prosleđivati preko protokola GET.

Međutim, pre takve diskusije, prvo ćemo sagledati tehnikalije.

Pristup parametrima koji su prosleđeni preko protokola GET

Ako se u adresnu liniju browsera unese sledeći URL ....

		
https://www.enciklopedija.rs/pretraga.php?ime=Ivo&prezime=Andrić
		
	
Slika 1. - URL koji sadrži upit (u daljoj obradi, prosleđenim podacima može se pristupiti preko superglobalne promenljive $_GET).

.... serveru se prosleđuje zahtev za pretragu, nakon čega prosleđeni parametri pretrage postaju dostupni preko superglobalne promenljive $_GET, na sledeći način:

  • indeks"ime" povezuje se sa vrednošću "Ivo"
  • indeks "prezime" povezuje se sa vrednošću "Andrić"

Usput ....

- GET je HTTP protokol za čitanje podataka sa servera.

- Ukoliko back-end komponenta web aplikacije nije izvedena preko PHP-a (tj. ukoliko se putanja u URL-u ne završava sa .php), pravilo za definisanje upita i dalje važi; na primer: https://www.enciklopedija.rs/pretraga?ime=Ivo&prezime=Andrić.

Da bismo isprobali kako sve funkcioniše u praksi, kreiraćemo skriptu pretraga.php, * unećemo sledeći kod ** ....

		
<?php
	$ime     = $_GET['ime'];
	$prezime = $_GET['prezime'];

	echo "Prosledili ste sledeće podatke:<br>";
	echo "Ime: " . $ime . "<br>";
	echo "Prezime: " . $prezime . "<br>";
?>
		
	
Slika 2. - Skripta za obradu podataka koji su prosleđeni preko protokola GET.

.... i pošto pokrenemo skriptu, u browseru će se pojaviti sledeći ispis:

		
Prosledili ste sledeće podatke:
Ime: Ivo
Prezime: Andrić
		
	
Slika 3. - Rezultat izvršavanja prethodno definisane skripte.

Za početak smo naprosto čitali vrednosti preko indeksa i nismo se pitali da li su podaci pod datim indeksom zapravo prosleđeni, međutim, da bismo bili sigurni da su indeksi koji se pozivaju, pravilno definisani, potrebno je koristiti mehanizam provere.

* Podaci koje smo prikazali dostupni su skripti kojoj su direktno prosleđeni preko URL-a (u gornjem primeru, u pitanju je skripta pretraga.php), ali, nisu dostupni ostalim skriptama.

** Ukoliko želite da samostalno isprobavate skripte iz članka, kreirajte zaseban podfolder unutar foldera htdocs i zasebnu datoteku sa prepoznatljivim imenom za svaku skriptu.

Provera ispravnosti parametara - funkcija isset

Ukoliko URL ne sadrži upit, a skripta za obradu ipak pokuša da pristupi superglobalnoj promenljivoj $_GET (odnosno, nekom od indeksa), doći će do greške - što znači da je potrebno da se programski kod iz prethodnog odeljka prepravi (tj. dopuni).

		
<?php
	if (isset($_GET))
	{
		if (isset($_GET['ime']) && isset($_GET['prezime'])) {
			$ime     = $_GET['ime'];
			$prezime = $_GET['prezime'];

			echo "Uneli ste sledeće podatke:<br>";
			echo "Ime: " . $ime . "<br>";
			echo "Prezime: " . $prezime . "<br>";
		}
		else {
			echo "Podaci koji su prosleđeni preko protokola GET ";
			echo "nisu formatirani na odgovarajući način.";
		}
	}
	else {
		echo "Nijedan podatak nije prosleđen preko protokola GET.<br>";
	}
?>
		
	
Slika 4. - Skripta za obradu podataka koji su prosleđeni preko protokola GET, dopunjena if-else grananjem preko koga se proverava da li su podaci pravilno prosleđeni.

Kao što vidimo, prepravke i dopune podrazumevaju provere preko funkcije isset, koja vraća vrednost true ukoliko je promenljiva (koja se predaje kao argument), deklarisana i ima vrednost koja je različita od null.

Višestruko grananje (iz gornjeg bloka), obavlja sledeće zadatke:

  • ukoliko preko protokola GET nije prosleđen nijedan podatak, prvi if iz gornje skripte preći će odmah na false granu i ispisaće poruku o grešci
  • ukoliko postoje podaci koji su prosleđeni preko protokola GET, i pri tom su pravilno formatirani, proradiće deo koda koji smo koristili do sada (true grana unutrašnjeg if-a)
  • ukoliko postoje podaci koji su prosleđeni preko protokola GET, ali nisu pravilno formatirani, biće ispisana odgovarajuća poruka (false grana unutrašnjeg if-a)

Može se reći da je programski kod koji smo prethodno prikazali, suviše 'zvaničan', ali, za početno upoznavanje, 'školski' primer je sasvim prikladan.

Međutim, u svakodnevnim situacijama, ipak je uputno koristiti jednostavnije i praktičnije kodove.

Na primer:

		
<?php
	
	// Prvo treba proveriti da li su podaci (uopšte) prosleđeni.

	// Ukoliko je došlo do greške u prosleđivanju podataka,
	// skripta se može, po potrebi, zaustaviti
	// preko komande exit().

	if (!isset($_GET['ime']) || !isset($_GET['prezime']))
	{
		echo "Greška pri formatiranju upita ";
		echo "koji je prosleđen preko URL-a.";
		exit();
	}

	// Ukoliko su podaci uredno prosleđeni,
	// može se nastaviti sa izvršavanjem komandi.

	$ime     = $_GET['ime'];
	$prezime = $_GET['prezime'];

	echo "Prosledili ste sledeće podatke:<br>";
	echo "Ime: $ime <br>";
	echo "Prezime: $prezime <br>";
?>
		
	
Slika 5. - Skripta za obradu podataka koji su primljeni preko protokola GET, dopunjena uslovom koji prekida izvršavanje skripte ukoliko podaci koji su prosleđeni, nisu u ispravnom formatu.

Umesto relativno "glomazne" if-else strukture, izmenjena skripta koristi jednostavniji mehanizam provere: ukoliko nisu ispunjeni uslovi za nastavak izvršavanja (smatramo da dalje izvršavanje zavisi od prosleđenih podataka) - prekida se dalje izvršavanje.

Ukoliko je sve u redu, nastavlja se izvršavanje.

Sada možemo da se vratimo na najvažnija pitanja.

Kada treba koristiti prenos podataka preko protokola GET?

Podaci koji se prosleđuju preko protokola GET (kao deo URL-a), jasno su vidljivi, i omogućavaju usmeravanje servera na određene sadržaje i pamćenje stranica po potrebi (bookmarks).

Recimo, sledeći upit ....

		
?p=izbor_stapova
		
	
Slika 6. - Upit, kao deo URL-a stranice.

.... koji je deo sledeće adrese ....

		
https://www.skijanje.rs/blog.php?p=izbor_stapova
		
	
Slika 7. - Primer URL-a koji sadrži upit sa prethodne slike.

.... pokrenuće sve neophodne procedure za učitavanje sadržaja koji su vezani za navedeni članak.

Neki drugi upit sa odgovarajućim parametrima, pokrenuo bi otvaranje drugog članka, dok bi upit sa parametrima koji se ne prepoznaju * - doveo do poruke o grešci.

* Na primer, ukoliko članak sa navedenim nazivom ne postoji u bazi i sl.

Kada ne treba koristiti prenos podataka preko protokola GET?

U praktičnom smislu, pitanje iz naslova važnije je od pitanja o tome kada treba koristiti prosleđivanje podataka preko protokola GET.

Budući da su podaci koji se prosleđuju preko URL-a vidljivi (a time nažalost i lako dostupni za zloupotrebu), jasno je da protokol GET nije prikladan izbor za prenos osetljivih informacija (kao što su lozinke za pristup sajtovima, lični podaci i sl).

Velika je greška prosleđivati osetljive podatke preko protokola GET, i stoga se zarad prosleđivanja osetljivih podataka koristi drugi vid prenosa, preko protokola POST (čemu je posvećen naredni članak).

Kratak rezime ....

Da rezimiramo ukratko:

  • prenos preko protokola GET koristi se onda kada je potrebno da informacije koje se šalju, postanu deo URL-a (kao parametri pretrage, indeksi stranica i sl)
  • zbog očigledne "otvorenosti", protokol GET ne sme se koristiti za slanje osetljivih informacija (lozinke, lične informacije i sl)
  • prilikom prijema podataka u PHP skripti za obradu, potrebno je proveriti (preko funkcije isset), da li su podaci pravilno prosleđeni

U sledećem nastavku serijala o PHP-u, govorićemo (kao što smo već najavili), o prosleđivanju podataka preko protokola POST.

Autor članka Nikola Vukićević Za web portal codeblog.rs
Napomena: Tekstovi, slike, web aplikacije i svi ostali sadržaji na sajtu codeblog.rs (osim u slučajevima gde je drugačije navedeno) predstavljaju intelektualnu svojinu autora sajta codeblog.rs i zabranjeno je njihovo korišćenje na drugim sajtovima i štampanim medijima, kao i bilo kakvo drugo korišćenje u komercijalne svrhe, bez eksplicitnog pismenog odobrenja autora.
© 2020-2025. Sva prava zadržana.
Facebook LinkedIn Twitter Viber WhatsApp E-mail
početna > Članci > PHP - Prosleđivanje podataka preko URL-a ($_GET)
codeBlog codeBlog
Sajt posvećen popularizaciji kulture i veštine programiranja.
Napomena: Tekstovi i slike na sajtu codeblog.rs (osim u slučajevima, gde je drugačije navedeno) predstavljaju intelektualnu svojinu autora sajta codeblog.rs i zabranjeno je njihovo korišćenje na drugim sajtovima i štampanim medijima, kao i bilo kakvo drugo korišćenje u komercijalne svrhe, bez eksplicitnog odobrenja autora.
© 2020-2025. Sva prava zadržana.
Facebook - logo
Instagram - logo
LinkedIn - logo
Twitter - logo
E-mail
Naslovna
   •
Uslovi korišćenja
   •
Obaveštenja
   •
FAQ
   •
Kontakt