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: 30.01.2021.

trejler_dokument Jezici: PHP

trejler_teg_narandzasti Težina: 7/10

PHP
internet
get
post
session
web server
localhost
backend
fullstack
teorija

Tema: PHP

$_GET - Prosleđivanje podataka preko URL-a ($_GET)$_POST - Prosleđivanje podataka preko HTML forme$_SESSION - Direktno prosleđivanje podataka između stranicaPovezivanje skripti sa MySql bazama podatakaTutorijal - Kreiranje forme za prijavu korisnikaTutorijal - 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
Sometimes it's better to leave something alone, to pause, and that's very true of programming.
Joyce Wheeler

Uvod u PHP i back-end programiranje

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

Uvod

PHP (skraćeno od "PHP: Hypertext Preprocessor") je skriptni jezik koji se izvršava na strani servera i omogućava: dinamičko kreiranje HTML sadržaja (u skladu sa specifičnim zahtevima klijenta), povezivanje sa bazama podataka, kao i obavljanje drugih pozadinskih zadataka na serveru.

PHP je nastao 1994. ili, bolje rečeno, u pitanju je godina kada je danski programer Rasmus Lerdorf započeo razvoj jednostavnog sistema za kodiranje dinamičkih sadržaja za manje web prezentacije (da ne kažemo, "za lične potrebe", čemu je odgovarao i ondašnji pun naziv jezika - "Personal Home Page").

Međutim, tokom vremena jezik se razvijao (i razvio), i postao je prilično moćan i popularan.

Iako u novije vreme nije u pitanju jedina dostupna serverska tehnologija (ni izdaleka), PHP je često "sledeći prirodan korak" za sve pojedince koji su već savladali HTML, CSS i JavaScript i žele da se posvete izradi ozbiljnijih web aplikacija koje korisnicima ne isporučuju uvek isti sadržaj pri učitavanju određene stranice, već, sadržaj koji nastaje interakcijom korisnika sa serverom (ili u skladu sa drugim potrebama).

U prvom članku o PHP-u, pažnju ćemo posvetiti osnovnim postavkama jezika PHP (a pre toga, i osnovnim principima back-end programiranja); u sledećih nekoliko članaka osvrnućemo se ukratko na različite protokole za razmenu podataka, a potom ćemo (u obliku tutorijala), detaljno obrađivati teme koje se tiču svakodnevnih 'zahvata' na strani servera ....

Što se tiče popularnosti i zastupljenosti, procenjuje se da PHP ("i dalje") predstavlja pozadinsku komponentu na više od dve trećine sajtova (na globalnom nivou), a što se tiče "sposobnosti", jasno je da jezik koji je namenjen kreiranju (samo) "ličnih web stranica" ne bismo preporučivali čitaocima (odnosno, praktično: dugi niz godina unazad, PHP predstavlja tehnologiju preko koje se mogu kreirati krajnje ozbiljni sajtovi).

Front-end, back-end, full-stack

Za početak, pre nego što pređemo na tematiku interpretacije skriptnih jezika na serverima i sam PHP, osvrnućemo se ukratko na sveprisutne pojmove "front-end", "back-end" i "full-stack", i (takođe), na mesto koje jezik PHP zauzima u navedenoj klasifikaciji.

Front-end je termin koji se odnosi na projektovanje i izradu vidljivih delova sajtova (odnosno, računarskih programa i informacionih sistema uopšte).

Drugim rečima, u pitanju je dizajn elemenata sa kojima korisnici direktno dolaze u kontakt, pri čemu se vodi računa o logičnom rasporedu i lakoj dostupnosti upravljačkih grafičkih elemenata (ali, često i tekstualnih), sve u cilju postizanja što boljeg korisničkog iskustva.

S tim u vezi, osvrnimo se i na dve skraćenice koje se često koriste: UI - "User Interface" i UX - "User Experience" (prva skraćenica se odnosi na dizajn i dopadljivost sajta u grafičkom smislu, a druga, na opšte iskustvo korisnika, u smislu brzine odziva, lakog pronalaženja neophodnih funkcionalnih elemenata i sl).

Back-end je termin koji se odnosi na projektovanje i izradu pozadinskih (tj. "nevidljivih") delova sajtova (odnosno programa i informacionih sistema uopšte), i - za razliku od front-end komponenti - u ovom slučaju se ne radi o elementima programa (tj. sajtova) sa kojima se korisnici susreću direktno, već, o procesima koji se tiču pravilne pripreme podataka koji se šalju korisniku, pri čemu se vodi računa o sigurnosti podataka i što efikasnijoj obradi (takođe u cilju postizanja što boljeg korisničkog iskustva).

Shodno navedenom, nije teško zaključiti da su HTML, CSS i JavaScript front-end jezici, PHP je back-end jezik, a izraz full-stack označava kombinaciju front-end i back-end pristupa.

Zarad upoznavanja sa principom funkcionisanja skriptnih jezika koji se izvršavaju na strani servera (i da bismo što bolje razumeli potrebu za takvim pristupom) - napravićemo osvrt na opšte principe učitavanja statičkih i dinamičkih sajtova (i sve izneto razmotrićemo na jednostavnim primerima iz svakodnevne prakse).

Kao što smo nagovestili, PHP nije jedina tehnologija za izradu pozadinskih komponenti sajtova (tj. web aplikacija), ali, upoznavanje sa back-end programiranjem započećemo upravo uz PHP, a širu diskusiju o Node JS-u (ili nekoj od tehnologija koje se zasnivaju na jezicima kao što su Python i Ruby, a u skladu sa mogućnostima, i o "enterprise" rešenjima koja se zasnivaju na jezicima kao što su Java, C#, Go ili Rust), ostavićemo za kasnije.

Osvrnimo se odmah na još jednu lepu osobinu PHP-a (to jest, na jednu od dodatnih mogućnosti): PHP omogućava kombinovanje HTML i PHP kodova u istoj datoteci, što svakako dobro dođe (ali više o tome ćemo pisati pred kraj).

Učitavanje statičkih sajtova

Kao što je poznato od ranije, browseri interpretiraju HTML stranice preko DOM strukture, a sama struktura DOM stabla generiše se pri učitavanju HTML koda, koji (na zahtev klijenta), server šalje klijentu.

Komunikacija između klijenta i servera, pri učitavanju statičke stranice (u ponešto uprošćenom obliku i uz pretpostavku da ne dolazi do grešaka u izvršavanju), ima sledeći tok:

  • klijent (najčešće web browser), pokreće učitavanje HTML stranice, * pozivanjem URL-a
  • server prima zahtev, priprema HTML stranicu ** i vraća klijentu traženi sadržaj u obliku HTML koda
  • browser prima HTML kod, kreira DOM strukturu i prikazuje stranicu u prozoru

Da pomenemo još jednom: u svemu smo podrazumevali da ne dolazi do grešaka u slanju, prijemu i obradi zahteva (budući da su mehanizmi koji se pokreću ukoliko do grešaka dođe, veoma slični, i u slučaju statičkih sajtova, i u slučaju dinamičkih sajtova).

* Posle obrade na serveru, klijent dobija od servera HTML kod i učitava HTML stranicu, međutim ....

** .... na serveru, "pronalaženje stranice" možda obuhvata doslovno pronalaženje HTML datoteke koja se direktno poklapa sa URL-om, a možda podrazumeva korišćenje HTML šablona koji se popunjavaju podacima iz baza podataka i sl (kao što smo već naveli u članku o strukturi web adresa).

Ukoliko učitana stranica nema potrebu za daljom (ili 'detaljnijom') komunikacijom sa serverom, komunikacija između klijenta i servera prestaje (sve dok je klijent eventualno ne inicira ponovo, pozivanjem istog URL-a, u nekom kasnijem trenutku).

Kao primer statičke stranice, zamislićemo galeriju slika poslovnog prostora koju određena firma drži na svom sajtu (pri učitavanju, sve slike se preuzimaju sa servera i prosleđuju klijentu).

Međutim, šta ako u nekom drugom slučaju (na nekom drugom sajtu), pojam galerija slika ne podrazumeva nekoliko slika (koje posetiocu sajta treba da prikažu poslovni prostor, poslovna dostignuća, tim saradnika koji stoje iza poduhvata i sl), već je u pitanju galerija slika u doslovnom značenju - veća kolekcija umetničkih slika (ili fotografija), koje se broje stotinama ili hiljadama?!

Učitavanje dinamičkih sajtova

Pre svega, sasvim je jasno da preuzimanje više stotina slika i prikaz na jednoj HTML stranici, nisu opcije koje dolaze u obzir (u praktičnom smislu), to jest, jasno je da bi učitavanje takvog statičkog sajta bilo u (krajnje povećem (!)) neskladu sa nepisanim pravilima web dizajna, prema kojima je preporučljivo da vreme učitavanja stranice bude manje od dve sekunde.

U praktičnom smislu, funkcionisanje online galerija umetničkih slika podrazumeva da se iz velike kolekcije (koja se čuva na serveru), korisniku preko browsera prikazuje samo određeni podskup slika, a takođe je za očekivati i to da izbor slika vrši sam korisnik.

Na primer, pri učitavanju početne stranice, server bi mogao da isporuči nekoliko (desetina) slika: poslednje slike koje su dodate u kolekciju, najpopularnije ili najbolje ocenjene slike i dr, posle čega korisnik može napraviti 'novi' izbor slika koje će biti prikazane (slike određenog autora, određene tematike, slike iz određenog perioda .... (ili slike koje odgovaraju nekom drugom kriterijumu)).

Sve što smo naveli, podrazumeva pripremu podataka u skladu sa zahtevima klijenta ili drugim specifičnim zahtevima web prezentacije (a ne prosto učitavanje "istog sadržaja svaki put"), i stoga komunikacija između klijenta i servera u takvim okolnostima (i ovoga puta - u ponešto uprošćenom obliku i uz pretpostavku da ne dolazi do grešaka), ima sledeći tok:

  • klijent bira parametre pretrage preko padajućih menija ili drugih prigodnih elemenata (parametri mogu biti: ime i prezime autora, raspon datuma u kome su slike nastale, tematika, rezolucija i sl)
  • serveru se prosleđuje zahtev za učitavanje stranice (zahtev sadrži parametre koji su izabrani u prethodnom koraku)
  • nakon prijema zahteva, na serveru se obavlja obrada (u bazi podataka se traže podaci o slikama koje zadovoljavaju zadate kriterijume)
  • kreira se HTML stranica koja sadrži pronađene slike (tj. kreira se odgovarajući HTML kod sa <img> tagovima), i šalje se nazad klijentu
  • završni deo komunikacije između klijenta i servera, ne razlikuje se mnogo od prethodnog primera: browser prima HTML kod (koji najverovatnije sadrži i reference za povezivanje sa CSS i JS datotekama preko kojih su definisani grafički dizajn i UX elementi stranice), kreira se DOM stablo i prikazuje se stranica sa pronađenim slikama

Sada razumemo šta je svrha skriptnog jezika koji se izvršava na serveru, a pošto je ovaj članak posvećen PHP-u (i uz ogradu da nije baš u pitanju "knjiška definicija"), mogli bismo reći sledeće: PHP interpretator je program koji se izvršava na strani servera, interpretira PHP kod iz datoteka koje sajt koristi, generiše HTML kod shodno ulaznim parametrima, i šalje generisani kod browseru klijenta.

To jeste ono što PHP interpretatori uglavnom rade (na većini sajtova), ali, svakako nije i jedino.

Preko PHP-a se takođe mogu pokretati i skripte koje se direktno izvršavaju na serveru (tako da se dejstvo pokrenutih skripti "ne vidi" u browseru).

Mislimo (na primer), na skripte koje se pokreću u cilju kreiranja i ažuriranja baza podataka, ili na skripte koje se pokreću zarad bekapovanja podataka na serveru (uz kreiranje i brisanje direktorijuma i datoteka i sl), a PHP naravno omogućava i obavljanje mnogih drugih opštih/pozadinskih zadataka u obradi podataka.

Smatramo da je došlo vreme da se posvetimo PHP-u i sve navedeno počnemo da isprobavamo u praksi (s tim da ćemo se prvo podsetiti na nekoliko osnovnih smernica koje se tiču pokretanja lokalnog servera).

Instalacija PHP-a (uz pokretanje lokalnog web servera)

Budući da smo temi pokretanja lokalnog servera posvetili zaseban članak , nećemo se na ovom mestu previše baviti detaljima, ali, osvrnućemo se ponovo na najvažnije postavke: za kreiranje dinamičkih sajtova preko PHP-a (i isprobavanje primera u ovom članku), potreban je web server - softver koji "osluškuje" mrežni saobraćaj usmeren prema računaru na kome je sajt postavljen, tj. pokušaje drugih računara da pristupe instaliranim sajtovima, i (naravno), potrebna je instalacija PHP-a.

Za početak je najpraktičnije koristiti pakete programa kao što su XAMPP i WAMP (pogotovo u slučaju neiskusnijih korisnika). *

Kada su lokalni web server i PHP interpretator pokrenuti (što se dešava manje-više automatski, po pokretanju programa XAMPP ili WAMP), možemo pokrenuti browser i potom, preko adrese localhost, pristupati lokalnim sajtovima.

* Kao i do sada, naša preporuka za korisnike Windows-a je paket programa XAMPP.

Kreiranje PHP skripti i naredba echo

Za početak, kreiraćemo veoma jednostavnu "hello world" skriptu, pri čemu preporučujemo da koristite jednu od sledeće dve strukture direktorijuma i datoteka za čuvanje skripte (adrese preko kojih se u browseru mogu otvarati sajtovi, takođe su prikazane u kodu):

		
D:\xampp\htdocs\sajtovi\01_hello_world\index.php
Adresa za pokretanje:
localhost/sajtovi/01_hello_world/

D:\xampp\htdocs\sajtovi\isprobavanje\01_hello_world.php
Adresa za pokretanje:
localhost/sajtovi/isprobavanje/01_hello_world.php
		
	
Slika 1. - Preporučene strukture direktorijuma i datoteka.

Pretpostavili smo da je paket programa XAMPP instaliran u direktorijum d:\xampp.

U skriptu unesite sledeći kod:

		
<?php
	echo "Dobro došli na lokalni server!";
?>
		
	
Slika 2. - Za početak (kako red nalaže), "hello world" skripta u PHP-u.

Kada se skripta pokrene preko browsera, biće ispisana sledeća poruka:

		
Dobro došli na lokalni server!
		
	
Slika 3. - Rezultat izvršavanja prethodne skripte.

U najpraktičnijem smislu, glavna svrha serverskih jezika tiče se kreiranja HTML sadržaja (koji se prosleđuje do browsera ili drugih klijentskih softvera), što se u slučaju PHP-a postiže upravo preko komande echo.

Preko naredbe echo, znakovne niske se mogu kombinovati sa vrednostima promenljivih, što ćemo videti u sledećem poglavlju, i (takođe), budući da smo spomenuli da komanda može vratiti HTML (ne samo običan tekst), pogledajmo kako se to izvodi na sasvim jednostavan način.

Kreirajte novu PHP datoteku sa nazivom 02_echo_i_html * (ili direktorijum sa istim nazivom u kome će biti datoteka index.php), i unesite sledeći kod:

		
<?php
	echo "<a href='#'>Link 1</a>";
?>
		
	
Slika 4. - Naredba echo koja (ovoga puta) vraća pravi HTML kod.

Kada otvorite stranicu u browseru, biće prikazan link (tj. nije više u pitanju 'običan tekst'), i pri tom je (naravno) moguće kreirati i druge HTML elemente - po istom principu.

* U nastavku, nećemo više navoditi imena datoteka i direktorijuma, ali, preporučujemo da i dalje sve skripte smeštate u zasebne datoteke (i/ili direktorijume) sa prepoznatljivim imenima, zarad preglednosti i lakšeg isprobavanja.

Promenljive u PHP-u

Promenljive u PHP-u imaju sledeća glavna svojstva:

  • označavaju se znakom $ (koji stoji direktno ispred identifikatora)
  • ne podležu strogoj tipizaciji (slično kao u jezicima JavaScript i Python)

Za isprobavanje, kreirajte novu skriptu i unesite sledeći kod:

		
<?php
	$a = 12;           // celobrojna promenljiva
	$f = 54.559;       // decimalna promenljiva
	$c = 'Z';          // znak
	$s = "Dobar dan!"; // niska
	$b = true;         // boolean

	echo "Celobrojna vrednost: "   . $a . "<br>";
	echo "decimalna vrednost: "    . $f . "<br>";
	echo "Znakovna promenljiva: '" . $c . "<br>";

	if ($b) {
		echo "Uslov je zadovoljen.<br>";
		echo "Niska: \"" . $s . "\"<br>";

		// Da bi bilo moguće razlikovati
		// znake navoda koji određuju
		// početak i kraj niske -
		// od znakova navoda koji
		// treba da se pojave u ispisu,
		// koristi se escape sekvenca \"
	}
?>
		
	
Slika 5. - Promenljive u PHP-u.

Prethodna skripta sadrži i određene delove sa kojima se do sada nismo susretali, i stoga ćemo se detaljnije osvrnuti na opšte principe korišćenja promenljivih u PHP-u:

  • promenljive u PHP-u označavaju se uz prefiks $, koji uvek mora stajati uz promenljivu (uz svaku pojavu promenljive u kodu)
  • promenljive (kao što smo već spomenuli), ne podležu tipizaciji, to jest (vrlo slično kao u programskom jeziku JavaScript), tip promenljive se određuje 'dinamički', pri izvršavanju skripte
  • u naredbi echo, kao operator spajanja niski koristi se . (tačka) - što predstavlja jedan od načina za ispis vrednosti promenljivih *
  • takođe, vidimo da se za prelazak u novi red može koristiti HTML tag <br> (break), ** baš kao i kada se piše "običan HTML u običnoj HTML datoteci"
  • kada je potrebno da se u ispisu pojave znaci navoda, koristi se escape sekvenca \" (na taj način, PHP interpretator pravi razliku između navodnika koji treba da se pojave u ispisu, i navodnika koji određuju levu i desnu granicu niske)

* Postoji i praktičniji način koji ćemo opisati u sledećem odeljku.

** Za sam početak, tag <br> poslužiće dobro, ali, pri izradi ozbiljnijih sajtova, upotreba taga <br> se izbegava (baš kao i inače), osim ako zaista nije potrebno napraviti 'prelom' unutar pasusa i sl.

Varijante kombinovanog ispisa

Već smo videli (na delu), osnovni mehanizam konkatenacije (tj. spajanja niski) ....

		
<?php
	echo "Početak niske " . $promenljiva . "ostatak niske";
	echo $promenljiva . "<br>";
?>
		
	
Slika 6. - Spajanje niski i vrednosti promenljivih metodom konkatenacije.

.... međutim, moguće je (a reklo bi se, i mnogo zgodnije), koristiti i drugi pristup, koji podrazumeva da se promenljiva navodi direktno unutar niske:

		
<?php
	echo "Početak niske $promenljiva ostatak niske";
	echo "$promenljiva <br>";
?>
		
	
Slika 7. - Direktno ubacivanje promenljivih u niske.

U jednostavnim primerima kakve prikazujemo u uvodnom članku, koristićemo (ipak) prvi pristup, koji smatramo preglednijim za početno upoznavanje, ali, uskoro ćemo šablonskim niskama posvetiti detaljan članak.

Kontrolne strukture

U programskom jeziku PHP, naredbe grananja i petlje mogu se koristiti upravo onako kako smo navikli i u ostalim "C-olikim" programskim jezicima (što ćemo prikazati kroz nekoliko uobičajenih primera) ....

Grananja (if-else, switch)

Za primer if grananja, uzećemo ugnežđeni if koji proverava da li je uneta vrednost pozitivna, negativna, ili nula:

		
<?php
	$a = 10;

	if ($a > 0) {
		echo "Uneta vrednost je pozitivna.";
	}
	else {
		if ($a < 0) {
			echo "Uneta vrednost je negativna.";
		}
		else {
			echo "Uneta vrednost je nula.";
		}
	}
?>
		
	
Slika 8. - If grananje u PHP-u.

Za switch, primer će biti kod koji proverava da li uneta cifra pripada binarnom brojevnom sistemu:

		
<?php
	$a = 10;

	switch ($a) {
		case 0: echo "Bit je isključen<br>"; break;
		case 1: echo "Bit je uključen<br>";  break;
		default: echo "Uneta vrednost nije binarna cifra"; break;
	}
?>
		
	
Slika 9. - Switch grananje u PHP-u.

(Sve funkcioniše na jednostavan i dobro poznat način.)

Petlje (while, do-while i for)

Osnovna while petlja takođe se zapisuje na poznat način (što ćemo prikazati na primeru skripte za ispis brojeva od 1 do 10):

		
<?php
	$i = 1;

	while ($i <= 10) {
		echo $i . " <br>";
		$i++;
	}
?>
		
	
Slika 10. - While petlja u PHP-u.

Napomenimo još jednom da se znak $ (koji stoji uz promenljive), mora pisati svaki put.

(Spominjemo to jer je u pitanju čuveni "kamen spoticanja" kod mlađih programera, pri početnom upoznavanju sa jezikom). :)

Prisutna je naravno i konstrukcija do-while ....

		
<?php
	$i = 1;

	do {
		echo $i . " <br>";
		$i++;
	}
	while ($i <= 10);
?>
		
	
Slika 11. - Petlja do-while u PHP-u.

.... a rezultujući ispis je isti kao i u prethodnom primeru.

Za kraj odeljka prikazaćemo i for petlju (još jednom, ne zaboravite znak $ ispred naziva svake promenljive):

		
<?php
	for ($i = 1; $i <= 10; ++$i) {
		echo $i . " <br>";
	}
?>
		
	
Slika 12. - For petlja u PHP-u.

(Ispis je isti kao i u prethodna dva slučaja.)

Funkcije u PHP-u

Veći i složeniji delovi koda, koji se često ponavljaju, mogu se zapisati u obliku funkcija (baš kao i u ogromnoj većini drugih programskih jezika).

Funkcije za rešavanje specifičnih zadataka možemo definisati sami, a tipski zadaci se (najčešće) rešavaju korišćenjem ugrađenih funkcija.

Definisanje korisničkih funkcija

Zarad definisanja funkcija u PHP-u, ispred naziva funkcije navodi se rezervisana reč function, a u zagradama se navode parametri.

Za primer ćemo definisati jednostavnu funkciju koja vraća veću od dve unete vrednosti ....

		
<?php
	function maks($a, $b) {
		if ($a >= $b) {
			return $a;
		}
		else {
			return $b;
		}
	}
?>
		
	
Slika 13. - Deklaracija korisničke funkcije u PHP-u.

.... posle čega se funkcija može i poz(i)vati:

		
<?php
	// Definicija iz prethodnog odeljka, u prikazu
	// je izostavljena zarad preglednosti.

	$prvi  = 10;
	$drugi = 12;

	echo "Unete vrednosti su: " . $prvi . " i " . $drugi . "<br>";
	echo "Najveća uneta vrednost: " . maks($prvi, $drugi) . "<br>";
?>
		
	
Slika 14. - Poziv prethodno definisane funkcije.

Kao što smo već nagovestili, za uobičajene/svakodnevne zadatke, uz instalaciju PHP-a dolazi i velika biblioteka sa funkcijama različitih namena ....

Ugrađene funkcije

Pomenućemo u nastavku nekoliko najčešće korišćenih funkcija za obavljanje operacija sa tekstualnim i brojčanim podacima (dok ćemo se sa ostalima upoznavati postepeno, u narednim člancima).

strlen - Provera dužine niske

Za proveru dužine niske koristi se funkcija strlen, pa (primera radi), ako pokrenemo sledeću skriptu ....

		
<?php
	$s = "preraspodela";
	$d = strlen($s);
	echo "Dužina niske\"" . $s . "\" je" . $d . " znakova.<br>";
?>
		
	
Slika 15. - Funkcija strlen koja vraća dužinu niske.

.... dobićemo sledeći ispis:

		
Dužina niske "preraspodela" je 12 znakova.;
		
	
Slika 16. - Rezultat izvršavanja prethodne skripte.

str_replace - Zamena dela niske

Za zamenu određenog tekstualnog obrasca drugom niskom, koristi se funkcija str_replace, koja prima tri argumenta:

  • tekstualni obrazac koji se traži unutar određene niske
  • nisku koja sadrži tekst kojim će biti zamenjen prethodno navedeni tekstualni obrazac (ukoliko bude pronađen)
  • nisku unutar koje se obavlja pretraga, tj. zamena (niska može biti zadata unapred, unutar navodnika, a može se predati i identifikator promenljive koja sadrži nisku)

Uzmimo kao primer sledeću skriptu ....

		
<?php
	$s = "Danas nije baš lep dan.";
	$s = str_replace("nije baš", "je", $s);
	echo $s . "<br>";
?>
		
	
Slika 17. - Funkcija str_replace, koja obavlja zamenu jednog tekstualnog obrasca drugim.

.... koja pri pokretanju proizvodi sledeći ispis:

		
Danas je lep dan.
		
	
Slika 18. - Rezultat izvršavanja prethodne skripte.

Međutim, bitno je primetiti da sledeći kod ....

		
<?php
	$s = "Danas nije baš lep dan.";
	str_replace("nije baš", "je", $s);
?>
		
	
Slika 19. - Primer nepravilne upotrebe funkcije str_replace.

.... neće dovesti do izmene niske $s, jer funkcija str_replace ne vrši direktnu izmenu niske koja je predata kao 3. argument, već kreira i vraća novu nisku (koju je potrebno povezati sa određenom promenljivom zarad dalje obrade).

abs - Apsolutna vrednost broja

Funkcija abs vraća apsolutnu vrednost unetog broja.

Pokretanje sledeće skripte ....

		
<?php
	$a = -17.5;
	echo "Uneti broj: " . $a . "<br>";

	$a = abs($a);

	echo "Apsolutna vrednost unetog broja: " . $a . "<br>";
?>
		
	
Slika 20. - Funkcija abs vraća apsolutnu vrednost unetog broja.

.... proizvodi sledeći ispis:

		
Uneti broj: -17.5
Apsolutna vrednost unetog broja: 17.5
		
	
Slika 21. - Rezultat izvršavanja prethodne skripte.

rand - Generisanje nasumične brojčane vrednosti

Funkcija rand generiše (pseudo)nasumične celobrojne vrednosti.

		
<?php
	$a = rand();
	echo "Nasumična vrednost: " . $a . "<br>";
?>
		
	
Slika 22. - Funkcija rand generiše nasumičnu celobrojnu vrednost.

Kada pokrenemo gornju skriptu, dobićemo sledeći ispis (zapravo, bolje je reći da smo mi 'jednom' dobili takav ispis kada smo pisali članak, a šansa da ponovo dobijemo istovetnu vrednost - ni izdaleka nije velika 🙂):

		
Nasumična vrednost: 424747146
		
	
Slika 23. - Rezultat izvršavanja prethodne skripte.

Ukoliko je potrebno ograničiti raspon mogućih vrednosti koje funkcija rand vraća, navode se dva argumenta koji predstavljaju donju i gornju granicu:

		
<?php
	$a = rand(1, 6);
	echo "Nasumična vrednost (od 1 do 6): " . $a . "<br>";
?>
		
	
Slika 24. - Funkcija rand sa zadatim graničnim vrednostima.

Ovoga puta dobijamo i drugačiji ispis:

		
Nasumična vrednost (od 1 do 6): 4
		
	
Slika 25. - Rezultat izvršavanja prethodne skripte.

(Kao što ste verovatno pretpostavili, primer koji smo videli je simulacija bacanja kocke za igru.)

sqrt - Kvadratni koren broja

Funkcija sqrt vraća kvadratni koren brojčane vrednosti koja se predaje kao argument.

U sledećem primeru ....

		
<?php
	$a = 2;
	$k = sqrt($a);

	echo "Broj: " .            $a . "<br>";
	echo "Kvadratni koren: " . $k . "<br>";
?>
		
	
Slika 26. - Funkcija sqrt vraća kvadratni koren zadate vrednosti.

.... kreira se ispis koji se odnosi na kvadratni koren broja 2:

		
Zadata vrednost: 2
Kvadratni koren zadatog broja: 1.4142135623731
		
	
Slika 27. - Rezultat izvršavanja prethodne skripte.

U nastavku, upoznaćemo se ukratko i sa osnovnim principima korišćenja klasa i objekata (za primer ćemo uzeti vrlo jednostavnu klasu, ali, klasa će biti korektno zapisana i kompletirana).

Biće sasvim dovoljno informacija za početak, ali, "pravo" (to jest, detaljnije) upoznavanje sa tematikom klasa i objekata u PHP-u, ostavićemo za drugu priliku.

Klase i objekti u PHP-u

Upotreba klasa i objekata u PHP-u gotovo se nimalo ne razlikuje u odnosu na druge C-olike OOP jezike, opšti principi su veoma slični (kao i sintaksa), ali, mestimično postoje sitnije razlike. *

Za početak, potrebno je pripremiti klasu (za primer ćemo uzeti jednostavnu klasu koja sadrži podatke o osobama).

		
<?php
	class Osoba
	{
		public $ime, $prezime, $adresa;

		function __construct($ime, $prezime, $datum_rodjenja) {
			$this->ime     = $ime;
			$this->prezime = $prezime;
			$this->adresa  = $adresa;
		}

		function formatiranje_podataka() {
			return $ime . " " . $prezime . ", " . $adresa;
		}

		function ispis_podataka() {
			echo formatiranje_podataka() . "<br>";
		}
	}
?>
		
	
Slika 28. - Definicija klase u PHP-u.

* Navedimo odmah jednu od najočiglednijih 'sitnih razlika': za razliku od većine drugih "C-olikih" jezika, u PHP-u se konstruktor klase definiše preko funkcije koja nosi naziv __construct.

Pošto je klasa Osoba uredno definisana, mogu se kreirati objekti klase, i mogu se pozivati pripadajuće metode ....

		
<?php
	$osoba = new Osoba("Petar", "Petrović", "Topolska 18");
	echo "Podaci o osobi:<br>";
	$osoba->ispis_podataka();
?>
		
	
Slika 29. - Kreiranje objekata preko prethodno definisane klase.

.... pri čemu dobijamo sledeći ispis:

		
Podaci o osobi:
Petar Petrović, Topolska 18
		
	
Slika 30. - Rezultat izvršavanja prethodne skripte.

Budući da su polja klase (ime, prezime i adresa) deklarisana kao javno dostupni elementi klase, prethodna skripta se može dopuniti na sledeći način:

		
<?php
	$osoba = new Osoba("Petar", "Petrović", "Topolska 18");
	echo "Podaci o osobi:<br>";
	$osoba->ispis_podataka();

	// Promena podataka:

	echo "Novi podaci (izmenjena adresa):<br>";
	$osoba->adresa = "Beogradska 24";
	$osoba->ispis_podataka();
?>
		
	
Slika 31. - Izmena podataka preko javnih polja, u objektu koji smo prethodno kreirali.

Pri pokretanju skripte, ovoga puta dobijamo i opširniji ispis:

		
Podaci o osobi:
Petar Petrović, Topolska 18
Novi podaci (izmenjena adresa):
Petar Petrović, Beogradska 24
		
	
Slika 32. - Rezultat izvršavanja prethodne skripte.

Kombinovanje PHP i HTML kodova

Pošto se polako približavamo kraju uvodnog izlaganja o PHP-u, osvrnućemo se na lepu i korisnu ideju (koju smo naveli na početku), koja se tiče toga kako se - unutar jedne ("iste") PHP datoteke - HTML kodovi mogu kombinovati sa PHP kodovima, sa čime ćemo se najlakše upoznati preko jednostavnog primera.

Kreirajte datoteku sa ekstenzijom *.php, unesite sledeći kod (i nakon toga pokrenite sajt preko lokalnog servera):

		
<!DOCTYPE html>

<html>
	<head>
		<title>HTML i PHP</title>
		<meta charset='UTF-8'/>
		<style>
			.ispis {
				font-size:   24pt;
				font-weight: bold;
				color:       blue;
			}
		</style>
	</head>
	
	<body>
		<?php
			$r = rand();

			if ($r % 2 == 0) {
				$s  = "<div class='ispis'>";
				$s .= "Paran broj! :) (" . $r . ")";
				$s .= "</div>";

				echo $s;
			}
			else {
				echo "Neparan broj! :( (" . $r . "<br>";
			}
		?>
	</body>
</html>
		
	
Slika 33. - Kombinovanje PHP koda sa HTML-om, u okviru iste datoteke.

Blok PHP koda (u gornjem primeru), nalazi se unutar HTML tagova, ali, to ni u kom slučaju ne ometa izvršavanje PHP koda, budući da se datoteka interpretira na sledeći način:

  • ekstenzija datoteke je *.php, što znači da će se uključiti PHP interpretator
  • delove datoteke koji nisu uokvireni "PHP zagradama", interpretator će tretirati kao običan HTML
  • kada se pojavi 'otvarajuća PHP zagrada' (niska <?php), interpretator počinje da izvršava PHP kod (što, u gornjem primeru, za krajnji rezultat ima generisanje HTML koda)
  • kada se pojavi 'zatvarajuća PHP zagrada' (niska ?>), interpretator se vraća na tumačenje HTML-a

Prikazani pristup nudi veoma visok nivo fleksibilnosti (što ćemo još bolje moći da sagledamo u narednim člancima).

Pozivanje spoljnih skripti (include, require)

Kada su u pitanju "lepe i korisne ideje", za sam kraj uvodnog članka osvrnućemo se na funkcije koje omogućavaju korišćenje programskog koda iz postojećih datoteka, što predstavlja (kako u PHP-u tako i inače), pristup koji programe i skripte čini znatno preglednijim.

Za uvoz spoljnih datoteka, u PHP-u se mogu koristiti četiri različite funkcije: include, include_once, require i require_once.

Ukoliko za primer uzmemo da skripta funkcije.php ima sledeći sadržaj ....

		
<!-- funkcije.php -->

<?php
	// sadržaj datoteke
	// funkcije.php
	// ----- početak -----
	function da_li_je_deljivo($n1, $n2) {
		return $n1 % $n2 == 0;
	}
	// ------ kraj -------
?>
		
	
Slika 34. - Primer sadržaja datoteke koju ćemo pozivati u drugoj PHP skripti.

.... u drugim skriptama moguće je pozivati komandu include (ili neku od preostale tri funkcije koje smo prethodno naveli) ...

		
<!-- neka_druga_skripta.php -->

<?php
	include("./funkcije.php");

	$a = 12;
	$b = 4;

	if (da_li_je_deljivo($a, $b)) {
		echo "Broj $a deljiv je brojem $b.<br>";
		echo "$a / $b = $(a / b).<br>";
	}
	else {
		echo "Broj $a nije deljiv brojem $b.<br>";
	}
?>
		
	
Slika 35. - Primer korišćenja komande include.

.... što praktično proizvodi isti efekat kao da je sadržaj datoteke funkcije.php 'ručno kopiran' u drugu datoteku (bez PHP zagrada):

		
<!-- neka_druga_skripta.php -->

<?php
	// sadržaj datoteke
	// funkcije.php
	// ----- početak -----
	function da_li_je_deljivo($n1, $n2) {
		return $n1 % $n2 == 0;
	}
	// ------ kraj -------

	$a = 12;
	$b = 4;

	if (da_li_je_deljivo($a, $b)) {
		echo "Broj $a deljiv je brojem $b.<br>";
		echo "$a / $b = $(a / b).<br>";
	}
	else {
		echo "Broj $a nije deljiv brojem $b.<br>";
	}
?>
		
	
Slika 36. - Praktičan efekat upotrebe komande include.

Kao što verovatno i sami pretpostavljate, u gornjem primeru se podrazumevalo da skripta funkcije.php postoji (na navedenoj putanji), međutim, ukoliko skripta koju uvozimo ne postoji - a pri tom se u nastavku pozivamo na delove koda iz navedene skripte - doći će do greške u izvršavanju (glavne) skripte!

U situacijama (kao što je gornji primer), kada izvršavanje ostatka skripte zavisi od uspešnog učitavanja spoljne skripte, potrebno je koristiti funkciju require, koja - u slučaju da je sve u redu sa učitavanjem - radi isto što i funkcija include, ali - ukoliko dođe do greške * - obustavlja dalje izvršavanje skripte.

* Ukoliko dođe do greške, poruka korisniku tipično se prosleđuje preko funkcije die (koja ujedno prekida izvršavanje skripte):

			
<?php
	require("skripta.php") or
	die("Datoteka 'skripta.php' nije pronađena!");
?>
			
		
Slika 37. - Primer upotrebe funkcije die.

Pošto smo na početku naveli četiri 'varijacije' funkcije za uvoz spoljne skripte - pri čemu u sva četiri slučaja postoji pokušaj kopiranja spoljne datoteke, osvrnućemo se na razlike, koje se (najprostije rečeno) mogu podeliti na razlike između funkcija include i require, i razlike između verzija funkcija sa sufiksom ili bez sufiksa _once.

Razliku između funkcija include i require već smo objasnili, ali, napravićemo kratak osvrt i na ovom mestu (zarad preglednosti):

  • include i include_once - izvršavanje funkcije ne dovodi do obustavljanja izvršavanja ostatka skripte ukoliko dođe do greške pri kopiranju sadržaja spoljne skripte
  • require i require_once - izvršavanje funkcije dovodi do obustavljanja izvršavanja ostatka skripte ukoliko dođe do greške pri kopiranju sadržaja spoljne skripte

Razlike između verzija sa sufiksom _once i bez sufiksa su sledeće:

  • include i require - spoljna skripta se kopira bezuslovno
  • include_once i require_once - pre pokušaja kopiranja, proverava se da li je spoljna datoteka već kopirana, i - ako spoljna datoteka jeste kopirana - neće biti kopirana ponovo

Sledeći koraci ....

Posle opšteg uvoda u PHP, bavićemo se (u narednim člancima), tehnikalijama koje se tiču korišćenja PHP-a za pokretanje 'pozadinskih procesa' na web serverima.

Neke od tema biće:

  • prosleđivanje podataka serveru preko URL-a ili HTML forme
  • povezivanje sa MySql bazama podataka
  • kreiranje formi za prijavu korisnika i registraciju korisničkih naloga
  • validacija korisničkog unosa
  • korišćenje nizova, klasa i objekata ....

U sledeća dva članka, bavićemo se verovatno najuobičajenijim zadacima u web programiranju: obradom podataka koji su prosleđeni preko URL-a, i prosleđivanjem podataka serveru preko HTML forme ....

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-2026. Sva prava zadržana.
Facebook LinkedIn Twitter Viber WhatsApp E-mail
početna > Članci > Uvod u PHP i back-end programiranje
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-2026. Sva prava zadržana.
Facebook - logo
Instagram - logo
LinkedIn - logo
Twitter - logo
E-mail
Naslovna
   •
Uslovi korišćenja
   •
Obaveštenja
   •
FAQ
   •
Kontakt