PHP Internet programiranje
-
Upload
iziizipapir -
Category
Documents
-
view
276 -
download
20
description
Transcript of PHP Internet programiranje
Internet programiranje PHP
Uvod HTML i JavaScript se izvršavaju na
klijentskoj strani, odnosno na korisničkom računaru
PHP je jedan od programskih jezika za izradu dinamičkih veb strana koji se uglavnom izvršava na serverskoj strani
PHP može da memoriše podatke i koristi ih u kasnijem trenutku
Istorija 1995 - PHP (Personal Home Page) jezik
je započeo Rasmus Lerdorf za potrebe lične veb strane 1995.
1999 - Zeev Suraski i Andi Gutmans su dalje razvili PHP 3 (PHP Hypertext Preprocessor) i Zend kompajler.
2004 - PHP 5 uključuje i objektno programiranje.
Trenutno se radi na PHP 6
Alternative PHP-u Alternative
Python Perl ASP – Active Server Pages JSP – Java Server Pages
LAMP – Linux Apache MySQL PHP (Python, Perl)
Popularnost Na tržištu više od 50% servera su tipa
Apache Najpopularniji programski jezik za
dinamičko programiranje veb strana na serverima Apache je PHP
PHP je uopšte jedan od najpopularnijih programskih jezika
PHP koriste wikipedia.org, yahoo.com, facebook.com itd.
Reference Nije standard www.php.net Jason Gilmore, Beginning PHP and MySQL: From
Novice to Professional, Third Edition (Beginning from Novice to Professional), Apress, March 2008.
Luke Welling, and Laura Thomson Laura (Author) PHP and MySQL Web Development (4th Edition) (Developer's Library), Addison-Wesley Professional, October 2008
www uopšte
Osobine Platformski neutralan Sličan C-u od koga je nastao Integrisanost sa HTML-om Nestruktuiran i nekonzistentan
Generalije Komande se završavaju ; Imena funkcija i klasa nisu osetljiva
na veličinu slova (case insensitive), dok imena promenljivih jesu. Npr. promenljiva $txt se razlikuje od promenljive $TXT, dok su funkcije sort i SORT iste.
Zašta se koristi PHP? Omogućava dinamički HTML sadržaj Vrši obrade na serveru, npr.
prikuplja statistike o posećenosti Obrađuje podatke iz formulara Povezuje korisnike sa bazama
podataka na serveru Implementira autentifikaciju i zaštitu
komunikacije
1. Osnove PHP-a Tag Komentari Prikaz Promenljive i njihovi tipovi Operatori Funkcije Objekti
Izvršavanje koda U okviru HTML koda: <script type=“php">...PHP kod…</script> Ili u eksternom fajlu:<script type=“php" src="phpkod.php"></script> Ali češće se koristi uprošćena sintaksa<?php ...PHP kod…?> odnosno<?php include(phpkod.php) ?>
Za komentar jedne linije - oznaka // ili # :
// komentar u jednoj liniji ...
Za komentar više redova - /* za početak bloka pod komentarom i */ za kraj bloka pod komentarom:
/* komentar u više redova...*/
Komentari
Primer:<?phpecho “<b>Prvi red</b><br /><i>Drugi
red</i>”; ?> Ili:<?phpecho “<b>Prvi red</b><br />”,”<i>Drugi
red</i>”; ?> Rezultat oba primera:Prvi redDrugi red
Prikaz – echo, print
Mogućnosti Može:<?php
if ($expression) { ?> <strong>This is true.</strong> <?php } else { ?> <strong>This is false.</strong> <?php }?>
Preporučivo:<?php
if ($expression) { echo “<strong>This is true.</strong>”;}
else { echo “<strong>This is false.</strong>”; }
Promenljive
Sadrže vrednosti koje program smešta u okviru memorije računara
Promenljivoj se dodeljuje: željeno ime
vrednost
Tip promenljive ne mora da se specificira, određuje ga vrednost promenljive
Imena promenljivih
Sve promenljive počinju sa $
Drugi znak je slovo ili _
Tipovi podataka Skalarni
boolean – logički tip integer – celobrojni tip float – racionalni tip string – znakovni niz
Složeni array - niz object - objekat
Specijalni resource - resurs Null - ništa
Skalarni tipovi podataka Logički tip uzima vrednosti TRUE ili FALSE Celobrojni tip može biti decimalni, oktalni
(počinje sa 0) ili heksadecimalni (počinje sa 0x). Max vrednost zavisi od sistema a može da se odredi konstantnom PHP_INT_MAX
Racionalni tip ima razne oblike, npr.<?php
$a = 1.234; $b = 1.2e3; $c = 7E-10;?>
Znakovni niz - string Mogu biti pod apostrofima (‘ab’) ili navodnicima (“ab”) Kada se koriste apostrofi navodnici se koriste za navodnike u
tekstu i obrnuto Za duži tekst sa navodnicima, može se koristiti <<< sa nekom
promenljivom koja razgraničava tekst:<<<EOTTextEOT; Za duži tekst sa apostrofima<<<‘EOD’TextEOD; Primer:echo <<<EOTPrimer “dužeg” znakovnog niza koji može zauzimati i “veliki broj
redova” i “puno” navodnika itd.EOT;
String - primer Primer:<?php $foo = "foobar";$a=2; echo ‘foo is $foo <br />’;echo “foo is $foo <br />”;Echo ‘a je $a <br />’;Echo “a je $a <br />”; ?> Rezultat:foo is $foo foo is foobar a je $a a je 2
Niz - array Sintaksa definisanja nizaImeNiza=([indeks1=]vrednost1, …) Indeksi mogu biti celi brojevi ili stringovi Primer<?php $arr=array("Aleks" => "9", "Sanja" =>8 , "Mirko" =>6);echo $arr['Aleks'], "<br />";echo “{$arr['Aleks']} <br />";echo $arr["Sanja"];?> Rezultat:998
Multidimenzionalni nizovi Primer:$familije=array(“Simić”=>
array(“Branka”,”Dejan”),”Brusin”=>
array(“Mića”,”Maja”,”Maja”));
Objekat - object Objekti su slični kao kod JavaScript-
a, ali se sintaksa razlikuje Objekti se definišu klasama kojima
pripadaju Klase imaju definisane atribute i
metode Promenljive objekti se dobijaju
instanciranjem klase
Resurs - resource Promenljive tipa resurs su pokazivači na
složene eksterne promenljive Primer su pokazivač na otvoren fajl ili na
vezu sa bazom podataka Promenljive tipa resurs se generišu
različitim funkcijama u zavisnosti od primene
Kompajler automatski briše promenljive tipa resurs koje ne pokazuju na neki resurs
NULL vrednost Vrednost NULL je
tip podataka/vrednost koja se može dodeliti promenljivoj
Pokazuje da promenljiva ne sadrži nikakvu korisnu vrednost
Promenljiva sa vrednošću NULL ima takvu dodeljenu vrednost
Vrednost “null” se dodeljuje promenljivoj kada se želi definisati da promenljiva ne sadrži nikakav podatak
Aritmetički Na nivou bita Relacioni Logički
Operatori
Operator Opis Operator Opis
+ sabiranje += sabiranje dodela
- oduzimanje -= oduzimanje dodela
* množenje *= množenje dodela
/ deljenje /= deljenje dodela
% moduo %= Moduo dodela
++ inkrement -- dekrement
Aritmetički operatori
$a = 1 + 1;$b = $a * 3;$c = $b / 4;$d = $b – $a;$e = -$d;$f = ($g = 4) + 5; echo “a, b, c, d, e, su” , “ ”,$a, “ ” ,$b, “ ”,$c, “ ”,$d, “ ”,$e, “ ”, $f, “ ”,$g; Nakon izvršavanja prethodnog primera dobija se
sledeći tekst na ekranu: a, b, c, d, e, su 2 6 1.5 4 -4 9 4
Aritmetički operatori
Na nivou bita
Operator Upotreba Opis
Logičko I (AND) a & b Rezultatni bit je 1, jedino ako su oba bita 1 u ostalim slučajevima rezultat je 0.
Logičko ILI (OR) a | b Rezultatni bit je 0, jedino ako su oba bita 0 u ostalim slučajevima rezultat je 1.
Logičko eksluzivno ILI (XOR)
a ^ b Rezultatni bit je 1, ako biti imaju različite vrednosti, u suprotnom je 0.
Logičko NE (NOT) ~ a Komplementira bitove operanda a.
Pomeranje ulevo a << b Pomera binarni sadržaj operanda za b mesta ulevo. Prazna mesta popunjava sa vrednošću 0.
Pomeranje udesno sa znakom
a >> b Pomera binarni sadržaj operanda za b mesta ulevo. Prazna mesta popunjava sa vrednošću najstarijeg bita.
Na nivou bita
15 & 9 rezulat 9 (1111 & 1001 = 1001)
15 | 9 rezulat 15 (1111 | 1001 = 1111)
15 ^ 9 rezulat 6 (1111 ^ 1001 = 0110)
Logički operatori
Operator Upotreba Opis
I (&& ili and)
expr1 && expr2 Rezultat je true, jedino ako su oba operanda true, u ostalim slučajevima rezultat je false.
ILI (|| ili or)
expr1 || expr2 Rezultat se dobija false, jedino ako su oba operanda false, u ostalim slučajevima rezultat je true.
NE (!) !expr Rezultat se dobija komplement od vrednosti operanada. Ako je operand true, rezultat je false, ako je operand false, rezultat je true
ILI (xor) expr1 xor expr2 Rezultat je true, ako su operandi različiti, i obrnuto, rezultat je false, ako su operandi isti
Logički$a = true;$b = false; $c = $a || $b; $d = $a && $b;$f = (!$a && $b) || ($a && !$b); $g = !$a;echo " a = ", $a, " <br /> " ;echo " b = ", $b , "<br />" ;echo " c = ", $c , "<br />" ;echo " d = " , $d , "<br />" ;echo " f = " , $f , "<br />" ;echo " g = " , $g; Rezultat izvršavanja prethodnog primera je:a = 1b = c = 1d = f = 1g =
Operatori poređenjaOperator Upotreba Opis
Jednakost (==) Rezultat je true ako su operandi jednaki
$x == $y rezultat je true ako su $x i $y jednaki.
Nejednakost (!= ili <>)
Rezultat je true ako su operandi različiti.
$x ! = $y rezultat je true ako su $x i $y različiti.
Veće (>) Rezultat je true ako je levi operand veći od desnog operanda.
$x > $y ako je $x veće od $y.
Veće ili jednako (>=)
Rezultat je true ako je levi operand veći ili jednak desnom operandu
$x >= $y ako je $x veće ili jednako $y.
Manje (<) Rezultat je true ako je levi operand manji od desnog operanda
$x < $y rezultat je true ako je $x manje od $y.
Manje ili jednako (<=)
Rezultat je true ako je levi operand manji ili jednak desnom operandu
$x <= $y rezultat je true ako je $x manje ili jednako $y.
Jednako bez konverzije tipova (===)
Rezultat je true ako su operandi jednaki bez konverzije podataka
$x === $y rezultat je true ako su $x i $y jednaki bez konverzije podataka
Različito bez konverzije tipova (!==)
Rezultat je true ako su operandi različiti bez konverzije podataka
$x !== $y rezultat je true ako su $x i $y različiti bez konverzije podataka
Operatori poređenja
$a = 4;$b = 1;$c = $a < $b;$d = $a == $b;echo “ c = “, $c, “<br />“ ;echo “ d = “, $d ; Rezultat izvršavanja prethodnog primera
jec = d =
String operator . Pomoću string operatora . spajaju se
dva stringa Primer$a=‘Aleksandra’; $b=‘Smiljanić’;$c=$a. ‘ ‘ . $b;$a.=‘ S’;echo $a, ‘<br />’, $c; RezultatAleksandra SAleksandra Smiljanić
Operator nizova + Pomoću string operatora + spajaju se
dva niza Primer$a=array(0=>1,1=>2,2=>3); $b=array(3=>4,4=>5);$c=$a+$b;echo $c[0],$c[1],$c[3],$c[4]; Rezultat1245
Operator greške @ Pre izraza (funkcija,promenljivih itd.)
može se postaviti operator greške @ Uloga ovog operatora je da ignoriše
greške koje mogu da nastanu pri izračunavanju izraza (uključujući i izvršavanje funkcije itd.)
Operator za izvršni kod Naredba između dva akcenta `` izvršava
naredbe operativnog sistema (npr. kreiranje direktorijuma, listanje direktorijuma itd.)
Funkcioniše kada Apache nije u “Safe mode” i kada funkcija shell_exec nije isključena
“Safe mode” se uključuje a shell_exec isključuje u fajlu php.ini, zatim se Apache restartuje.
Operator za izvršni kod: primer Primer<?php$output = `dir`;echo "<pre>$output</pre>";?> RezultatVolume in drive C has no label. Volume Serial Number is E82B-743B
Directory of C:\Program Files\Apache Software Foundation\Apache2.2\htdocs
04/24/2009 00:36.
04/24/2009 00:36 .. 11/20/2004 14:16 44 index.html 04/19/2009 22:51 21 phpinfo.php 04/24/2009 13:28 58 phpproba.php 3 File(s) 123 bytes 2 Dir(s) 78.881.165.312 bytes free
Operator za izvršni kod: primer Primer<?php$new_dir = "Bob";`mkdir $new_dir`?> Rezultat: otvoren je novi folder u
okviru foldera gde je PHP fajl koji ga kreira
Funkcije
Funkcije predstavljaju grupu naredbi koja se može izvršiti kao pojedinačna jedinica
Funkcije su korisne jer čine program preglednijim i lakšim za ažuriranje
Kao i bilo koji drugi PHP kod, funkcije se moraju definisati u okviru <?php … ?> elementa
Funkcija se sastoji iz deklaracije funkcije i njenog poziva
Deklaracija funkcija Sintaksa za definisanje funkcije je : function imeFunkcije(parametri) {
naredbe;}
Pozivanje funkcije Da bi se izvršila funkcija potrebno ju je
pozvati sa određenog mesta u okviru programa
Funkcija se poziva njenim imenom i specifikacijom argumenata u okvir zagrada
Vrednosti argumenata se prosleđuju odgovarajućim parametrima funkcije u skladu sa deklaracijom funkcije
Mogućnosti Funkcija može biti pozvana
rekurzivno Funkcija može biti definisana
uslovno ili unutar druge funkcije, i onda je deklarisana samo ako je uslov ispunjen odnosno kada je ta druga funkcija pozvana.
Naredba return Služi da bi se vratio rezultat funkcije
pozvanoj naredbi Dodeljuje pozvanoj naredbi vrednost
određenog izraza Tip može biti proizvoljanreturn 8;return p*m;
Opseg važenja promenljive
Prema opsegu važenja promenljive se dele na superglobalne, globalne ili lokalne
Superglobalne promenljive su ugrađene u PHP i važe u bilo kom programu i funkciji
Globalne promenljive se deklarišu izvan funkcije, i može im se pristupiti iz bilo kog dela programa
Lokalne promenljive se deklarišu u okviru funkcije i jedino su dostupne u okviru funkcije u kojoj su deklarisane
Parametri su takođe lokalne promenljive
Argumenti funkcije Argumenti funkcije su izrazi koji su razdvojeni
zarezom Promenljiva, argument, može biti prosleđena
direktno $a ili preko reference &$a. U drugom slučaju može da se menja vrednost argumenta.
Promenljivim, argumentima, se može dodeliti defolt vrednost. Primer:
function birajKafu($tip = “kapućino"){ return “Izabran je $tip.";}
birajKafu(“espreso”);birajKafu();
Ugrađene funkcije Postoji veliki broj funkcija koje su ili ugrađene
po defoltu ili se uključuju kroz ekstenzije i dodatne biblioteke u PHP
Kategorizacija funkcija i potrebne ekstenzije se mogu naći na veb strani http://www.php.net/manual/en/funcref.php
Spisak svih funkcija se mogu naći na veb strani:
http://www.php.net/manual/en/indexes.php
Promenljive funkcije Primer<?php
function fu() { echo “Ovo je fu()<br />";}function bar($arg = ''){ echo “Ovo je bar();
argument je bio '$arg'.<br />";}$funk = 'fu';$funk(); $funk = 'bar';$funk('test'); ?>
Rezultat Ovo je fu() Ovo je bar(); argument je 'test'.
Primer Primer deklaracije funkcije:function calculate($a,$b,$c) {
$d = ($a+$b) * $c;return $d;
} Primer poziva funkcije:$x = calculate(4,5,9);echo "x je ", $x, "<br />“;$y = calculate(($x/3),3,5);echo "y je ", $y; Rezultat primera:x je 81y je 150
Objekti PHP podržava objekte kao strukturu
podataka Objekti se definišu pomoću funkcija Za svaki objekat su vezane osobine i
metode Osobine su promenljive kojima se dodaju
određene vrednosti Metode su funkcije u okviru objekata
kojima mogu da se menjaju njihove osobine
Kreiranje klase i instance objekta Klasa objekta ili prototip se definiše klasom čija
je sintaksaclass mojObjekat {[[deklaracijaOsobine1] osobina1;][[deklaracijaOsobine2] osobina2;…] [[deklaracijaMetode1] metoda1;][[deklaracijaMetode2] metoda2;…]} Instanca objekta se definiše pomoću naredbe
newmojaInstanca=new mojObjekat Osobine klase mogu biti naknadno definisane
Deklaracije osobine Deklaracija osobine može biti
public – može se menjati sa bilo kog mesta direktno
private – može se menjati samo pomoću metode objekta
protected – nepoznata je van objekta final – ne može se menjati u klasama
naslednicima
Deklaracije metode Deklaracija metode može biti
public – može se koristiti van klase pozivanjem metode instance
private – rezultati metoda se koriste samo u okviru objekta
protected – rezultati metoda se koriste samo u okviru objekta ili nekog naslednika
abstract – samo deklarisana u roditeljskoj klasi
final – ne može se menjati u klasama naslednicima
Rad sa osobinama objekata Vrednost osobine instance objekta
se može koristiti na sledeći način: imePromenljive=mojaInstanca->
Osobina1; Vrednost osobine instance objekta
se može promeniti ili naknadno definisati ukoliko nije bila ranije:
mojaInstanca->Osobina1=vrednost1;
Kreiranje objekta sa metodom Primer metoda objekta:class myCircle {public $xcoord; public $ycoord; public $radius; public function _construct ($a,$b,$c){$this->xcoord=$a;$this->ycoord=$b;$this->radius=$c;}public function retArea() {return ( M_PI * $this->radius * $this->radius );} public function retCirc() { return ( M_PI * $this->radius * 2 ); }public function moveBy($xDis,$yDis) { $this->xcoord += $xDis; $this->ycoord += $yDis; }}
Korišćenje metoda Primer korišćenja metoda iz prethodnog primera:var $testCircle = new myCircle(3,4,5);$testCircle->moveBy(2,3); echo ‘Površina kruga je ‘, $testCircle->retArea();echo ‘<br />Obim kruga je ‘, $testCircle->retCirc(); Rezultat prethodnih komandi je:Površina kruga je 78.5398163397 Obim kruga je 31.4159265359
Pozivanje konstanti Ne mora se instancirati objekat da bi se
pozvala konstanta njegove klase Primer<?phpclass Math {const pi = 3.14159;}echo " Math::pi = ".Math::pi;?>
Pozivanje statičkih osobina i metoda Statičke osobine i metode se takođe mogu zvati bez instanciranja objekta Primer<?phpclass Visitor{private static $visitors = 0; function __construct(){self::$visitors++;}static function getVisitors(){return self::$visitors;}}$visits = new Visitor();echo Visitor::getVisitors()."<br />";$visits2 = new Visitor();echo Visitor::getVisitors()."<br />";echo $visits -> getVisitors();?> Rezultat primera:122
Nasleđivanje između klasa Primer:<?php
class SimpleClass{ public $var = 'a default value'; public function displayVar() { echo $this->var;}}
class ExtendClass extends SimpleClass{ function displayVar() {echo "Extending class <br />"; parent::displayVar(); }}$extended = new ExtendClass();$extended->displayVar();?>
Rezultat:Extending class a default value
2. Kontrola toka Ternarni operator Naredba if-else Naredba switch Petlje
for petlja while petlja
Izlazi iz blokova break continue goto
Naredbe include, require
Ternarni operator Sintaksa:logIzraz ? izraz1 : izraz2 gde je izraz log_izraz bilo koji izraz čiji
rezultat je vrednost logičkog tipa. Ako je rezultat izraza true, onda se izvršava izraz1, u suprotnom izraz2.
Primer: $ratio = $denom ==0 ? 0 : $num/$denom
Kontrole toka - if Sintaksa: if (logIzraz) {naredbe1;}
[else {naredbe2;}]
Primer: if ($x == 8) {
$y=$x; }
else { $z=$x;
$y=$y*$x }
Kontrola toka - if Još jedan primer:if ($mesec == 1)
$ime_meseca = “Januar”;else if ($mesec == 2)
$ime_meseca = “Februar”;else if ($mesec == 3)
$ime_meseca = “Mart”;else if ($mesec == 4)
$ime_meseca = “Maj”;else
....else if ($mesec == 12)
$ime_meseca = “Decembar”;
Kontrola toka - switch Sintaksa switch (izraz) { case vr1: naredbe1; [break;] ... case vrN: naredbeN; [break;] [default: naredbeDef;]}
Kontrola toka - switch Primer: switch($mesec) { case 1: $ime_meseca = “Januar”; break; case 3: $ime_meseca = “ Mart”; break; case 5: $ime_meseca = “Maj”; break; case 7: $ime_meseca = “Jul”; break; case 8: $ime_meseca = “Avgust”; break; case 10: $ime_meseca = “Oktobar”; break; case 12: $ime_meseca = “Decembar”; break; case 4: $ime_meseca = “ April ”; break; case 6: $ime_meseca = “Jun”; break; case 9: $ime_meseca = “Septembar”; break; case 11: $ime_meseca = “Novembar”; break; case 2: $ime_meseca = “ Februar ”;}
Petlje - while Sintaksa: [inicijalizacija;]
while(logIzraz){ naredbe; }
Primer:$i=1while($i<=10){ echo $i, "<br />";
i=i+1;}
Petlje - do-while Sintaksa: [inicijalizacija;]
do { naredbe;
} while (logIzraz);
Primer: $i=1;
do { document.write($i+ "<br>"); $i=$i+1;
} while($i<=10)
Petlje - for Sintaksa:for(inicijalizacija; logIzraz; iteracija){ naredbe;}
Primer: for($i=1; $i<=10; $i++){ echo $i, "<br />";}
Petlje - foreach Sintaksa: foreach (izrazNiza as [index=>] vrednost) { naredbe; } Primer:$a = array(1, 2, 3, 17);
foreach ($a as $v) { echo “trenutna vrednost \$a je $v.";}
Kontrola toka - break Primer: {
{ {
echo “pre break-a”; break 2; } echo “ovo neće biti prikazano”; } echo “posle break-a”; }
Rezultat: pre break-a posle break-a
Kontrola toka - break Primer: { {
{ echo “pre break-a”; break 1; } echo “ovo neće biti prikazano”; } echo “posle break-a”; }
Rezultat: pre break-a ovo neće biti prikazano posle break-a
Kontrola toka - continue Takođe može koristiti numerički argument Primer:for($i=0; $i<10; $i++){ echo $i+ “ “; if ($i%2 ==0) continue; echo “<br />“; }
Rezultat: 0 1
2 34 56 78 9
Komanda toka goto Primer:
<?phpgoto a;echo 'Fu'; a:echo 'Bar';?>
Komanda include Primer poziv.php
<?php$boja = ‘zelena';$voce = ‘jabuka';?>test.php<?phpecho “Jedna $boja $voce";
include ‘poziv.php';echo “Jedna $boja $voce"; ?>
Rezultat skripta test.phpJednaJedna zelena jabuka Naredba include_once uključuje fajl samo ako nije bio prethodno
uključen.
Komanda require Komanda require je ista kao
komanda include samo u njenom slučaju ukoliko se fajl ne nađe obustavlja se dalje izvršenje programa.
Komanda require_once uključuje fajl samo ako nije prethodno uključen.
2. PHP funkcije Funkcije nizova Funkcije sa uzorcima za
pretraživanje Funkcije sa stringovima Matematičke funkcije Funkcije sa datumom i vremenom
Funkcija nizova print_r Služi za ispisivanje nizova Primer:$glavniGradovi
=array(“Srbija”=>”Beograd”, “Francuska”=> “Pariz”, “Belgija”=> “Brisel”);
print_r($glavniGradovi); Rezultat:Array ( [Srbija] => Beograd [Francuska] =>
Pariz [Belgija] => Brisel )
Funkcija nizova list Primer:$glavniGradovi = "Beograd|Pariz|Brisel";list($a[0],$a[1],$a[2])=explode("|",
$glavniGradovi);print_r($a); Rezultat:Array ([2] => Brisel [1] => Pariz [0] =>
Beograd )
Brojanje elemenata count(niz[,mod]) – daje broj
elemenata niza, a ako je mod=1 onda broji i elemente podnizova rekurzivno
array_count_values(niz) – za svaku vrednost daje broj pojavljivanja
Dodavanje i oduzimanje elemenata niza Funkcije su
array_push(imeNiza, element) – dodaje vrednost elementa na kraj niza
array_pop(imeNiza) - daje vrednost poslednjeg elementa niza
array_shift(imeNiza) – daje prvi element dok se svi elementi niza pomere za jedan ulevo
Dodavanje i oduzimanje elemenata niza Funkcije su dalje:
array_unshift(imeNiza, element1, [element2…]) – dodaje vrednost elementa na početak niza a ostale elemente pomera za jedan udesno
array_pad(imeNiza, duzinaNiza, element) – dopunjava niz do zadate dužine zadatim elementima
Lociranje elementa u nizu Funkcije su:
in_array(element,imeNiza) – daje TRUE ako je vrednost datog elementa u datom nizu i FALSE u obrnutom slučaju
array_keys(niz[,element]) – daje sve indekse elemenata, odnosno indekse zadate vrednosti
array_values(niz) – daje vrednosti svih elemenata niza
array_search(element,imeNiza) – daje vrednost indeksa zadate vrednosti
Funkcije kretanja po nizu Funkcije:
key(imeNiza) – daje trenutni indeks value(imeNiza) – daje trenutnu vrednost each(imeNiza) – daje trenutni indeks-
vrednost par i pomera pokazivač za jedan
Funkcije kretanja po nizu Funkcije:
reset(imeNiza) – vraća pokazivač na početak niza
next(imeNiza) – vraća vrednost sledećeg elementa u nizu i pomera ga za jedno mesto unapred
prev(imeNiza) – vraća vrednost prethodnog elementa u nizu i pomera ga za jedno mesto unazad
end(imeNiza) – pomera pokazivač na kraj niza
Sortiranje niza Funkcije:
sort(imeNiza[,sortFleg]) – sortira niz. sortFleg može biti SORT_NUMERIC, SORT_REGULAR, SORT_STRING
rsort(imeNiza[,sortFleg]) – sortira niz u opadajućem redosledu
asort(imeNiza[,sortFleg]) – sortira niz zadržavajući index-vrednost parove
Sortiranje niza Funkcije:
usort(imeNiza[,imeFunkcije]) – sortira niz na osnovu zadate funkcije
array_reverse(imeNiza[,fixIndekse]) – obrne redosled elemenata
array_flip (imeNiza) – obrne mesta indeksima i vrednostima
Kombinovanje nizova Funkcije:
array_combine(niz1,niz2) – daje nov niz u kome vrednosti prvog niza postaju indeksi drugog niza
array_merge(niz1,niz2) – daje novi niz spajanjem dva niza
array_slice(niz1,ofset[,duzina]) – daje novi niz kao deo niza date dužine počev od indeksa sa rednim brojem ofset
array_splice(niz1,ofset[,duzina][,niz2) – daje niz u kome je obrisan deo niza date dužine počev od ofseta, i eventualno ga zamenjuje drugim nizom
Kombinovanje nizova Funkcije:
array_intersect(niz1,niz2) – daje niz svih vrednosti koje su zajedničke za dva niza
array_intersect_assoc(niz1,niz2) – daje niz svih parova indeks-vrednost koje su zajedničke za dva niza
array_diff(niz1,niz2[,niz3…]) – daje vrednosti prvog niza koje se ne nalaze u narednim nizovima koji su argumenti funkcije
Pretraživanje pomoću uzoraka Postoji dve vrste uzoraka
POSIX Perl
Perl uzorci su isti kao i kod Javascript-a
Uzorak Uzorak je niz znakova i specijalnih
znakova Sintaksa:imeUzorka = /mustra/atributi; Gde je mustra niz znakova i specijalnih
znakova, a atributi su znakovi koji specificiraju način apliciranja mustre.
Sintaksa mustri: http://www.php.net/manual/en/regexp.reference.php
Specijalni znaci u uzorcima
Karakter Predstavlja
Slovo ili broj Istu vrednost
\0 Specijalni NUL karakter
\t Tab znak
\n Nova linija
\v Vertikalni tab znak
\f Form feed
\r Carriage return
\uxxxxUnicode karakter definisan pomoću heksadecimalnog boja xxxx;
na primer, \u0009 ima isti efekat kao i \t
Specijalni znaci u uzorcimaKarakter Predstavlja pojavljivanje
[...] Bilo kog karaktera od onih koji su navedeni između [ i ].
[^...] Bilo kog karaktera koji nije naveden između [ i ].
. Bilo kog karaktera osim nove linije
\w Bilo kog ASCII definisanog slova, cifre ili _.
\W Bilo kog karaktera koji nije \w.
\d Bilo koje ASCII definisane cifre
\D Bilo kog karaktera koji nije ASCII definisana cifra
\s Blanko znak
\S Koji nije blanko znak
Primeri uzoraka/[abc]/ predstavlja jedno pojavljivanje simbola a ili jedno
pojavljivanje simbola b ili jedno pojavljivanje simbola c.
/[^abc]/ predstavlja karakter koji nije simbol a ili b ili c./\d\d\d\d\d/ Pomoću ovog uzorka se definiše broj koji se
sastoji od 5 cifara
Specijalni znaci u uzorcimaOznaka Značenje
{n,m} Ponavljanje prethodne grupe najmanje n puta, ali najviše
m puta.
{n,} Ponavljanje prethodne grupe n ili više puta.
{n} Ponavljanje prethodne grupe tačno n puta.
?Ponavljanje prethodne grupe jednom ili nijednom. Isto
dejstvo kao i {0,1}.
+Ponavljanje prethodne grupe jednom ili više puta. Isto
dejstvo kao i {1,}.
*Ponavljanje prethodne grupe nijednom ili više puta. Isto
dejstvo kao i {0,}.
|Alternative. Pojavljivanje dela izraza sa desne ili
pojavljivanje izraza sa leve strane.
(...)Grupisanje simbola u jedan objekat nad kojim se mogu
koristiti oznake *, +, ?, |, itd.
^ Pretraga uzorka se obavlja na početku stringa
$ Pretraga uzorka se obavlja na kraju stringa
Primeri uzoraka /\d{2,4}/ // uzorak koji označava 2, 3 ili 4 pojavljivanje
cifara /\w{3}\d?/ // uzorak koji označava tačno tri
pojavljivljavanja slova i opciono jedne cifre, npr. string koji odgovara ovom uzorku je „abc8” ili „qqq”.
/\s+php\s+/ // uzorak koji označava string "java" sa jednim ili više prostora pre ili posle stringa
/["]*/ // uzorak koji označava nula ili više pojavljivanje karaktera navoda
/ab|cd|ef/ // uzorak koji označava pojavljivanje ab ili pojavljivanje cd ili pojavljivanje ef
/\d{3}|[a-z]{4}/ // uzorak koji označava pojavljivanje tri cifre ili 4 mala slova
/((ab|cd)+|ef)/ // uzorak koji označava pojavljivanje stringa „ef” ili pojavljivanje jednom ili više puta stringa „ab” ili pojavljivanje jednom ili više puta stringa „cd”
Atributi uzoraka
Atribut Značenje
iIzvršavanje case-insensitive
ispitivanja.
g
Izvršava globalno ispitivanje, znači pronači će se sva pojavljivanja definisanog uzorka, a neće se ispitivanje zaustaviti posle prvog pronalaska uzorka.
m
Rad sa više linija. ^ označava početak linije ili stringa, a $
predstavlja kraj linije ili stringa.
Funkcije uzorka Funkcije: preg_grep(uzorak,imeNiza) – daje niz sa svim
elementima niza koji u sebi sadrže uzorak preg_match(uzorak,imeNiza,nizUzoraka) – daje
listu uparenih uzoraka u zadatom stringu preg_replace(uzorak,string1,string2) – zadati
uzorak se zamenjuje zamenom u datom stringu preg_replace(uzorak,imeFunkcije,string) – zadati
uzorak se zamenjuje zamenom u datom stringu preg_split(uzorak,string) – stvara niz delova teksta
koji su razdvojeni zadatim uzorkom
Funkcije uzorka - primer Primer:<?php
$delimitedText=“+Jason++++++++++++Columbus+++OH”;$fields=preg_split(“/\+{1,}/”,$delimitedText);
foreach($fields as $field) echo $field.”<br />”;?> Rezultat:JasonColumbusOH
Funkcije upoređenja stringova
Funkcije: strlen(string) – dužina stringa strcmp(string1,string2) – upoređuje dva
stringa, vrednost funkcije je 1{string1>string2} + 1{string2>string1}
strspn(string1,string2) – daje dužinu segmenta u kome se nalaze samo znaci iz drugog stringa
Manipulacija stringovima Funkcije:
strtolower(string) – sva slova se menjaju u mala
strtoupper(string) – sva slova se menjaju u velika
ucfirst(string) – prvo slovo se menja u veliko
Dodavanje i oduzimanje od stringova Funkcije:
ltrim(string1,string2) – oduzimaju se znaci sa leva prvog stringa koji pripadaju drugom stringu
rtrim(string1,string2) – oduzimaju se znaci sa desna prvog stringa koji pripadaju drugom stringu
trim(string1,string2) – oduzimaju se znaci s krajeva prvog stringa koji pripadaju drugom stringu
Str_pad(string1,duzina,string2[,tip]) – dodaje se drugi string prvom stringu dok se ne dopuni do dužine, tip može biti PAD_LEFT,PAD_RIGHT,PAD_BOTH
Još neke funkcije stringova Funkcije:
explode(separator,string) – daje niz delova stringa koji su razgraničeni znakom koji je separator
implode (separator,niz) – obrnuto od explode strpos(string,podstring) – nalazi prvu poziciju
podstringa u stringu strrpos(string,podstring) – nalazi poslednju
poziciju podstringa u stringu substring_count(string,podstring)
Sortiranje niza - primer Primer: <? phpfunction sortirajDatume($a,$b){If ($a=$b) return 0;list($adan,$amesec,$agodina)=explode(‘-’,$a);list($bdan,$bmesec,$bgodina)=explode(‘-’,$b);$amesec=str_pad($amesec,2,’0’,STR_PAD_LEFT);$bmesec=str_pad($bmesec,2,’0’,STR_PAD_LEFT);$adan=str_pad($adan,2,’0’,STR_PAD_LEFT);$bdan=str_pad($bdan,2,’0’,STR_PAD_LEFT);$a=$agodina.$amesec.$adan;$b=$bgodina.$bmesec.$bdan;return ($a > $b ? 1 : -1);}
Sortiranje niza - primer$datumi = array(“7-10-2008”,”6-2-2008”,”30-12-
2007”)sort($datumi);print_r($datumi);echo “<br />”;usort($datumi,”sortirajDatume”);print_r($datumi);} Rezultat:Array ( [0] => 6-2-2008 [1] => 7-10-2008 [2] => 30-12-2007)Array ( [0] => 30-12-2007 [1] => 6-2-2008 [2] => 7-10-2008)
Matematičke funkcije Veliki broj matematičkih funkcija je
na raspolaganju, mogu se naći na:http://www.php.net/manual/en/book.math.php
Datum i vreme Funkcije koje se tiču datuma i
vremena mogu se naći na: http://www.php.net/manual/en/refs.calendar.php
3. PHP u praksi PHP interfejsi preko superglobalnih
promenljivih Obrada podataka iz formulara Aploudovanje fajlova Rad sa fajlovima PHP sesije i kolačići PHP autentifikacija
Superglobalne promenljive Superglobalne promenljive su interfejsi
PHP programa sa spoljnom okolinom preko kojih razmenjuju informacije
Neke važne superglobalne su sledeće: $_SERVER, $_GET, $_POST, $_FILE, $GLOBALS, $_COOKIE, $_SESSION, $_ENV
Superglobalne promenljive (superglobals) se mogu naći na: http://us2.php.net/manual/en/reserved.variables.php
Superglobalna $_SERVER $_SERVER je niz sa informacijama o hostu i
serveru Neki elementi niza $_SERVER
$_SERVER[‘HTTP_REFERER’] – URL veb adrese sa koje se došlo na datu stranu
$_SERVER[‘REMOTE_ADDR’] – klijentova IP adresa $_SERVER[‘REQUEST_URI’] – putanja do zadatog fajla $_SERVER[‘HTTP_USER_AGENT’] – operativni sistem i
brauzer klijenta $_SERVER[‘PHP_SELF’] – skript koji se izvršava,
konstanta __FILE__ jeste fajl koji se trenutno izvršava u okviru zadatog skripta
Superglobalna $_GET $_GET je niz koji sadrži parametre koji su
prosleđeni metodom get Metoda get se koristi kada se ne menja
sadržaj na serveru, i njeni parametri se prosleđuju kroz URL
Primer, ukucajmo proba u polje za pretraživanje na www.naslovi.net:
http://www.naslovi.net/search.php?q=proba Tada je $_GET[‘q’] jednak ‘proba’
Supeglobalna $_POST $_POST je niz parametara koji se prosleđuju kroz metod
post, koristeći atribute name Primer:<html><form action=“http://localhost/upis.php” method=“post”><p> e-meil: <br /> <input type=“text” name=“emeil” />
</p><p> Šifra: <br /> <input type=“password” name=“šifra” />
</p><input type=“submit” name=“upis” value=“Upiši se!” /> </ form></html>
Superglobalna $_POST Primer u fajlu upis.php:<? phpecho $_POST[‘emeil’], “<br />”, $_POST[‘šifra’]?> Rezultat:Aleksačikpogodi Napomena: U fajlu httpd Apache servera je određen defolt
direktorijum za dokumente sledećom naredbom:DocumentRoot "C:/Program Files/Apache Software
Foundation/Apache2.2/htdocs“ Drugi direktorijumi mogu da se odrede ili relativno u
odnosu na defolt direktorijum ili pomoću aliasa, npr:Alias /slike /ftp/pub/slike
Superglobalna $_FILE $_FILE je matrica koja se koristi kod
aploudovanja fajlova. Elementi ove matrice opisuju zadati fajl:
$FILE[nameAtribut][‘name’] – ime fajla koji je aploudovan kroz input tag čiji je name atribut jednak nameAtribut
$FILE[nameAtribut][‘type’] – tip fajla $FILE[nameAtribut][‘size’] – veličina fajla $FILE[nameAtribut][‘tmp_file’] – privremeno
ime fajla
Superglobalna $_FILE Još jedan element ove matrice:
$FILE[nameAtribut][‘error’] – opisuje grešku do koje je došlo pri aploudovanju fajla, može imati sledeće vrednosti:
• UPLOAD_ERR_OK: fajl je uspešno aploudovan• UPLOAD_ERR_INI_SIZE: fajl prelazi maksimalnu
veličinu dozvoljeno parametrom upload_max_filesize specificiranu u php.ini
• UPLOAD_ERR_FORM_SIZE: fajl prelazi max veličinu specificiranu u formularu parametrom MAX_FILE_SIZE
• UPLOAD_ERR_PARTIAL: fajl je samo delimično aploudovan
• UPLOAD_ERR_NO_FILE: fajl nije bio specificiran
Superglobalna $_COOKIE $_COOKIE je niz koji nosi informacije o
kolačićima. Indeksi ovog niza su imena kolačića, a
vrednosti ostali atributi kolačića. Kolačići se setuju funkcijom:setcookie ( ime [, vrednost [, rok [, putanja
[, domen [, zaštita [, httponly ]]]]]] ) Napomena, u php.ini setovatiOutput buffering On
Superglobalna $_SESSION $_SESSION je niz indeksa (ključeva) i
vrednosti koji se vezuje za korisnika. Sesija se generiše pomoću funkcije
start_session() kojom se kolačić sa SID (ID sesije) šalje korisniku.
Prosleđivanje promenljivih od PHP ka JavaScript-u Primer:<?php
$user_id = $_GET["uid"]; ?> <script type=“text/javascript"> var user_id = <?php echo($user_id);?>;
alert("Your user ID is:" + user_id);</script>
Rad sa formularima Primer formulara u jednom fajlu upis2.php:<?php if (isset($_POST["upis"])){echo $_POST[“emeil"], '<br />', $_POST['sifra'];}else {echo <<<EOT<form action="http://localhost/upis2.php" method="post"><p> E-meil: <br /> <input type="text" name=“emeil" /> </p><p> Šifra: <br /> <input type="password" name="sifra"/> </p><input type="submit" name="upis" value="Upiši se!" /> </form>EOT;}?>
Rad sa formularima Rezultat:
Rad sa formularima: PHP i JavaScript
Primer fajla upis3.php:<html><form action="http://localhost/upis3.php" method=post><p> e-meil: <br /> <input type="text" name="emeil" ></p><p> Šifra: <br /> <input type="password" name="sifra"/>
</p><input type="submit" name="upis" value="Upiši se!" /> </form><?php if (isset($_POST["upis"])){ $x='emeil‘;?><script type="text/javascript"> alert ("Emeil je: <?php echo $_POST[$x]; ?>"); </script> <?php } ?></html>
Rad sa formularima: PHP i JavaScript Primer:
Rad sa formularima: izbor opcija
Primer formulara sa listom u fajlu checkbox.php:<?phpecho <<<EOTIzaberite omiljene programske jezike? <br /><form action="checkbox.php" method=post><input type="checkbox" name="jezici[]" value="csharp"/> C# <br /><input type="checkbox" name="jezici[]" value="jscript"/> JavaScript <br /><input type="checkbox" name="jezici[]" value="perl"/> Perl <br /><input type="checkbox" name="jezici[]" value="php"/> PHP <br /><input type="submit" name="upis" value="Pošalji!" /></form>EOT;if (isset($_POST['upis'])){echo "Izabrali ste jezike: <br />"; foreach($_POST['jezici'] AS $jezik) echo "$jezik <br />";}?>
Rad sa formularima: izbor opcija
Konfiguracija za aploudovanje fajlova U php.ini fajlu se mogu
konfigurisati: file_uploads On|Off max_execution_time brojSekundi memory_limit brojMegaBajtaM upload_max_filesize brojMegaBajtaM upload_tmp_dir imeStringa post_max_size brojMegaBajtaM
Aploudovanje fajla Primer fajla aploudFajla.php :<form action="aploudFajla.php" enctype="multipart/form-data" method=post>Broj indeksa: <br /> <input type="text" name=“brojIndeksa" /> <br />Domaći: <br /> <input type="file" name="domaci" /> <br /><p> <input type="submit" name="posalji" value="Pošalji!" /></form>
<?php define ("fajloviDomaci","C:\Program Files\Apache Software Foundation\Apache2.2\
htdocs\domaci\\");if (is_uploaded_file($_FILES['domaci']['tmp_name'])){ if ($_FILES['domaci']['type'] != 'application/pdf'){ echo "<p> Domaći može biti aploudovan samo u *.pdf formatu </p>";} else { $brojIndeksa=$_POST[‘brojIndeksa'];
$rezultat=move_uploaded_file($_FILES['domaci']['tmp_name'],fajloviDomaci.“_$brojIndeksa.pdf");
if ($rezultat==1) echo "<p> Fajl je uspešno aploudovan. </p>";else echo "<p> Fajl nije aploudovan, pokušajte ponovo. </p>";}}?>
Aploudovanje fajla
Fajl _05-132.doc je u folderu domaci
Mime tipovi Tip fajla se može biti bilo koji
mime tip, koji se mogu naći npr. na:
http://www.w3schools.com/media/media_mimeref.asp
Aploudovanje fajlova – sa vremenskim oznakama Primer aploudFajla2.php:<form action="aploudFajla2.php" enctype="multipart/form-data"
accept-charset="utf-8" method=post>Broj indeksa: <br /> <input type="text" name="brojIndeksa" /> <br />Domaći: <br /> <input type="file" name="domaci" /> <br /><p> <input type="submit" name="posalji" value="Pošalji!" /></form>
<?php define ("fajloviDomaci","C:\Program Files\Apache Software Foundation\
Apache2.2\htdocs\domaci\\");
if (is_uploaded_file($_FILES['domaci']['tmp_name'])){ if ($_FILES['domaci']['type'] != 'application/msword'){ echo "<p> Domaći može biti aploudovan samo u *.doc formatu
</p>";} else {
Aploudovanje fajlova – sa vremenskim oznakama Nastavak primera: $datum=date("d-m-y"); if (!is_dir(fajloviDomaci.$datum)) {
mkdir(fajloviDomaci.$datum);} $brojIndeksa=$_POST['brojIndeksa']; $rezultat=move_uploaded_file($_FILES['domaci']
['tmp_name'],fajloviDomaci.$datum."\\"."_$brojIndeksa.doc");
if ($rezultat==1) echo "<p> Fajl je uspešno aploudovan. </p>";else echo "<p> Fajl nije aploudovan, pokušajte ponovo.
</p>";}}?> Rezultat: poslat fajl se nalazi u folderu \domaci\03-05-2009
pod imenom _05-132.doc gde je 05-132 broj indeksa studenta koji je poslao fajl
Rad sa fajlovima Postoji veliki broj funkcija za rad sa
fajlovima, mogu se naći nahttp://www.php.net/manual/en/ref.filesystem.php Najvažnije funkcije:
fopen (imeFajla, mod [,uključiPutanju]) – tipa je resurs na koji se kasnije referiše, mod može biti “w”, “w+”, “r”…
fwrite (refFajla, string) fread (refFajla, brojBajtova) fclose (refFajla)
Funkcije za rad sa fajlovima Primeri:
feof(refFajla) – kraj fajla filesize(imeFajla) rename(imeFajla1,imeFajla2) is_readable(imeFajla) file(imeFajla [,flag]) – pretvara fajl u niz
redova, flag može biti FILE_IGNORE_NEW_LINES, ili FILE_SKIP_EMPTY_LINES
Rad sa kolačićima Sintaksa:setcookie ( ime [, vrednost [, rok [, putanja [,
domen [, zaštita [, httponly ]]]]]] ) ime, vrednost su stringovi rok je rok trajanja kolačića u sekundama putanja je direktorijum odakle se može pristupiti
kolačiću domen je domen odakle se može pristupiti
kolačiću zaštita je TRUE ako se za setovanje kolačića traži
sigurna HTTPS konekcija httponly je TRUE ako se kolačić može menjati
samo kroz HTTP konekciju
Rad sa kolačićima: setovanje U folderu domaci se nalazi fajl kuki.php:<?php $vrednost = ‘Neka vrednost kolačića!';setcookie("testKolačić", $vrednost, time()
+3600, "/domaci/"); /* ističe za sat */echo $_COOKIE["testKolačić"];?>
Rad sa kolačićima: čitanje Primer: U koren (root) direktorijumu (C:\
Program Files\Apache Software Foundation\Apache2.2\htdocs) se nalazi kuki2.php:
<?php echo $_COOKIE["testKolačić"];?> Rezultat: Kada se pokrene kuki.php, a
zatim kuki2.php, na ekranu ništa nije ispisano, jer kuki2.php nije u dozvoljenom direktorijumu (folderu)
Rad sa kolačićima: čitanje Primer: U direktorijumu \domaci (C:\
Program Files\Apache Software Foundation\Apache2.2\htdocs\domaci) se sada nalazi kuki2.php:
<?php echo $_COOKIE["testKolačić"];?> Rezultat: Kada se pokrene kuki.php, a
zatim kuki2.php, na ekranu se pojavi:Neka vrednost kolačića!
Rad sa kolačićima: brisanje Za rok važnosti kolačića se setuje prošli
trenutak:<?php $vrednost = ‘Neka vrednost kolačića!';setcookie("testKolačić", $vrednost, time()-
3600, "/domaci/"); /* isteklo trajanje kolačića */echo $_COOKIE["testKolačić"];?>
Kolačić niz Primer:<?php
setcookie(“kuki[tri]", “kukitri");setcookie(“kuki[dva]", “kukidva");setcookie(“kuki[jedan]", “kukijedan");if (isset($_COOKIE[‘kuki'])) { foreach ($_COOKIE[‘kuki'] as
$indeks => $vrednost) { echo "$indeks : $vrednost <br />\n”};}}
?> Rezultat:tri : kukitridva : kukitrijedan : kukijedan
Konfiguracija sesija Parametri koji mogu da se
konfigurišu u php.ini session.save_handler files|mm|user session.save_path putanja – putanja do
direktorijuma sa fajlovima sesije session.use_cookies 0|1 session.use_only_cookies 0|1 session.name string – po defoltu je
PHPSESSID
Konfiguracija sesija Parametri koji mogu da se
konfigurišu u php.ini session.auto_start 0|1 session.cookie_lifetime brojSekundi – po
defoltu 0 session.cookie_path string session.cookie_domain string session.referer_check string
Konfiguracija sesija Parametri koji mogu da se
konfigurišu u php.ini session.gc_maxlifetime brojSekundi url_rewriter_tags string – po defoltu
a=href, area=href, frame=src, input=src, form=fakeentry
session.use_tran_sid = 0|1
Komande sesija Komande
session_start() – startovanje sesije session_unset() – oslobađanje sve
promenljive pridružene sesiji session_destroy() – uništavanje sesije,
vraća TRUE ako je sesija uspešno uništena
Komande sesija Komande
session_id([string]) – setovanje ili čitanje ID sesije, SID-a:
session_name([string]) – setovanje ili čitanje imena sesije, po defoltu PHPSESSID, koji je ime kolačića čija je vrednost SID
session_get_cookie_params() session_set_cookie_params( rok [, putanja [,
domen [, zaštita [, httponly ]]]]]] ) – ime kolačića je ime sesije, a vrednost je SID
Dodeljivanje i brisanje vrednosti sesija
Dodeljivanje i brisanje vrednosti, primer:<?php
session_start();$_SESSION[‘username’]=“Jovan”;echo “Vaš username je: ” .$_SESSION[‘username’].
“. <br />”; unset($_SESSION[‘username’]); echo “Vaš username je sada: ” .$_SESSION[‘username’]. “.”;?> Rezultat:Vaš username je: Jovan.Vaš username je sada: .
Konfiguracija sesije prosleđene preko URL-a Konfiguracija php.ini fajla, kojom
se isključuju kolačići i uključuje automatsko dopisivanje URL adresa:
session.use_cookies = 0session.use_tran_sid = 1
Primer sesije prosleđene preko URL-a U fajlu sesija.php:<?php session_start();$_SESSION["username"]="Jovan";echo "Vaš username je:" .
$_SESSION["username"].". <br />";echo session_name(), "<br />";echo session_id(), "<br />";?><a href="http://localhost/sesija2.php?<?php
echo SID; ?>"> Link ka drugoj stranici </a>
Primer sesije prosleđene preko URL-a U fajlu sesija2.php:<?php session_start();echo "Vaš username je:“.
$_SESSION["username"].". <br />";echo session_name(), "<br />";echo session_id(), "<br />";?>
Primer sesije prosleđene preko URL-a
Primer sesije prosleđene preko kolačića U fajlu sesija.php:<?php session_name('NovoIme');session_id('jlkfjs624628');session_start();$_SESSION["username"]="Jovan";echo "Vaš username je:" .$_SESSION["username"].". <br />";echo session_name(), "<br />";echo session_id(), "<br />";?><a href="http://localhost/sesija2.php?<?php echo SID; ?
>"> Link ka drugoj stranici </a>
Primer sesije prosleđene preko kolačića U fajlu sesija2.php:<?php session_name('NovoIme');session_id('jlkfjs624628');session_start();echo "Vaš username je:“.
$_SESSION["username"].". <br />";echo session_name(), "<br />";echo session_id(), "<br />";?>
Primer sesije prosleđene preko kolačića
Trajanje sesije prosleđene kolačićima Ukoliko u prethodnom slučaju ukucamo u
brauzer URL fajla http://localhost/sesija2.php, dobićemo isti rezultat u brauzeru. Ukoliko zatvorimo brauzer, i ukucamo isti URL izgubiće se podaci o sesiji, tj. vrednost polja username.
Trajanje kolačića se može produžiti ili konfiguracijom u php.ini fajlu, ili komandom pre session_start():
session_set_cookie_params(rok);
Autentifikacija Autentifikacija se zasniva na HTTP
autentifikaciji opisanoj u IETF RFC2617 Pomoću funkcije header() se šalju
komande brauzeru da treba traži login podatke od korisnika
Podaci koje je korisnik ukucao se nalaze u superglobalnoj promenljivoj $_SERVER ['PHP_AUTH_USER'], i $_SERVER['PHP_AUTH_PW']
Autentifikacija: Primer kada su lozinke u fajlu Fajl koji sadrži korisnička imena i
lozinke je lozinke.txtaleks 12cikpogodipera 3jhkj34milan 89kjlkjalmarija 98nkj32kk
Autentifikacija: Primer kada su lozinke u fajlu Kod koji generiše fajl sa kriptovanim lozinkama<?php $lozinke = file("lozinke.txt");$fl=fopen("sifrovaneLozinke.txt","w");foreach ($lozinke as $login){
list($username,$lozinka)=explode(":",$login); $lozinka=trim($lozinka);
fwrite($fl,$username.":".md5($lozinka)."\n");}fclose($fl);?>
Autentifikacija: Primer kada su lozinke u fajlu Fajl sa kodom za autentifikaciju:<?php $autorizovan = FALSE;$sifLoz = file("sifrovaneLozinke.txt");if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {$sifLoz = file("sifrovaneLozinke.txt");
if (in_array($_SERVER['PHP_AUTH_USER'].":".md5($_SERVER['PHP_AUTH_PW'])."\n", $sifLoz))$autorizovan = TRUE;}
if (! $autorizovan) {header('WWW-Authenticate: Basic Realm');header('HTTP/1.0 401 Neautorizovan');print('Morate dati ispravne login podatke!');exit;}echo "Materijal sa restrikcijama ..."?>
Autentifikacija: Primer kada su lozinke u fajlu
XHTML e-meil podsetnik Primer slanja e-meila:<a href="mailto:[email protected]?subject=Primer
poruke&body=Napišite vaš komentar"> Pošaljite e-mail poruku! </a>
Slanje formulara e-meilom Primer:<html><form method="post" action="mailto: [email protected]">Ime i prezime: <input type="text" name="ime_prez"
value="Unesite ime i prezime" size="30" /> <br />Proizvod: <input type="text" name="proizvod"
value="Unesite proizvod" size="30" /> <br />Adresa: <br /><textarea name="adresa" rows="6" cols="30" >
</textarea><input type="submit" value="Pošalji"></form></html>
Slanje formulara e-meilom
Konfiguracija e-meil servisa U fajlu php.ini
SMTP string – definiše SMTP server, po defoltu localhost
sendmail_from string– definiše e-meil pošaljioca
smtp_port ceoBroj – po defoltu 25
e-mail pomoću PHP Najvažnija funkcija je mail, čija je
sintaksamail (to, subject, poruka [,
dodatnaZaglavlja [, dodatniParametri]])
Jednostavan primer:mail(“[email protected]” , “Kratko”,
“Prvi PHP e-meil”);
e-mail pomoću PHP Primer:$zagl=“From:[email protected]\r\n”;$zagl.=“Bcc:[email protected]”;$zagl.=“Reply-To:[email protected]\r\n”;$zagl.=“Content-Type:text/plain;\r\n
charset=iso-8859-1\r\n”;$primaoci=“[email protected],[email protected]”
; mail($primaoci, “Kratko”, “Drugi PHP e-
meil”,$zagl);
Formular za slanje e-meila Primer formulara za slanje e-meila, u fajlu
emeilform.php<?phpif (isset($_POST['upis'])){$zagl="From:".$_POST['emeilPoš']."\r\n";$zagl.="Content-Type:text/plain;\r\n charset=iso-
8859-2\r\n";$primaoc=$_POST['emeilPrim'];$tema=$_POST['imePrez']; mail($primaoc, $tema, $_POST['poruka'],$zagl);} ?
>
Formular za slanje e-meila Nastavak fajla emeilform.php:<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head> <form method="post" action="emeilForm.php">Ime i prezime: <input type="text" name="imePrez" value="Unesite ime i
prezime" size="30" /> <br />Od: <input type="text" name="emeilPoš" value="Unesite svoj e-meil"
size="30" /> <br />Za: <input type="text" name="emeilPrim" value="Unesite e-meil primaoca" size="30" /> <br />Adresa: <br /><textarea name="poruka" rows="6" cols="30" > Unesite tekst </textarea><input type="submit" name='upis' value="Pošalji"></form></html>
Formular za e-meil
4. PHP i baze podataka Uvod Konfigurisanje privilegija mySQL komande PHP komande za rad sa mySQL
bazama podataka
MySQL
Najpoznatija i najviše korišćena open-sors baza podataka zasnovana na SQL jeziku
Korišćenje ove baze podataka je besplatno MySQL komande su neosetljive na veličinu
slova (case sensitive), ali je praksa se pišu velikim slovima. Promenljive su osetljive na veličinu slova.
Uputstvo za korišćenje MySQL baze se može naći na:
http://dev.mysql.com/doc/refman/5.0/en/index.html
Baze podataka Baze podataka se sastoje iz tabela, koje
se sastoje iz kolona Korisnici mogu pristupati ovim bazama,
tabelama, kolonama u zavisnosti od svojih privilegija koje se prethodno konfigurišu
Pristup može biti radi kreiranja baze, brisanja baze, dodavanja ili menjanja informacija u bazi, i brisanja informacija u bazi
Konfigurisanje MySQL baza podataka i privilegija Može se pristupiti koristeći razne klijente:
mysql klijent podrazumeva šel komandni interfejs, i može da konfiguriše baze podataka i da im pristupa
mysqladmin klijent se fokusira na administrativne komande
MySQL Administrator je GUI klijent razvijen od strane mySQL tima
phpMyAdmin je GUI klijent prilagođen PHP-u
Organizacija privilegija Privilegije se zapravo nalaze u mysql bazi
podataka, koja se sastoji iz sledećih tabela: user – određuje korisnike koji mogu da se loguju na
server sa kog hosta i njihove privilegije db – određuje koji korisnici mogu da pristupe kojim
bazama podataka host – određuje hostove sa kojih se može pristupiti
kojim bazama tables_priv: određuje koji korisnici mogu da pristupe
kojim tabelama date baze columns_priv: određuje koji korisnici mogu da
pristupe kojim kolonama date tabele date baze
mysql tabela userColumn Datatype Null Default
Host char(60) binary No No
User char(16) binary No No
Password char(41) binary No No
Select_priv enum(‘N’, ‘Y’) No N
Insert_priv enum(‘N’, ‘Y’) No N
Update_priv enum(‘N’, ‘Y’) No N
… … … …
mysql tabela dbColumn Datatype Null Default
Host char(60) binary No No
Db char(64) binary No No
User char(16) binary No No
Select_priv enum(‘N’, ‘Y’) No N
Insert_priv enum(‘N’, ‘Y’) No N
Update_priv enum(‘N’, ‘Y’) No N
… … … …
mysql tabela hostColumn Datatype Null Default
Host char(60) binary No No
Db char(64) binary No No
Select_priv enum(‘N’, ‘Y’) No N
Insert_priv enum(‘N’, ‘Y’) No N
Update_priv enum(‘N’, ‘Y’) No N
Delete_priv enum(‘N’, ‘Y’) No N
… … … …
mysql tabela tables_privColumn Datatype Null Default
Host char(60) No No
Db char(64) No No
User Char(16) No No
Table_name char(64) No No
Grantor Char(77) No No
Timestamp timestamp Yes Current timestamp
Table_priv skupPrivilegija No No
Column_priv skupKolona No No
mysql tabela columns_privColumn Datatype Null Default
Host char(60) No No
Db char(64) No No
User Char(16) No No
Table_name char(64) No No
Column_name Char(64) No No
Timestamp timestamp Yes Null
Column_priv skupPrivKolona No No
mysql tabela procs_privColumn Datatype Null Default
Host char(60) No No
Db char(64) No No
User Char(16) No No
Routine_name char(64) No No
Routine_type enum No No
Grantor Char(77) binary No No
Proc_priv skupKolona No No
Timestamp timestamp Yes Null
Kreiranje i brisanje korisnika baze
Korisnik se kreira bez privilegija naredbom:
CREATE USER korisnik1 [IDENTIFIED BY [PASSWORD] ‘lozinka1']
[, korisnik2 [IDENTIFIED BY [PASSWORD] ‘lozinka2']…]
Primer:mysql> CREATE USER aleks@localhost
IDENTIFIED BY “12cikpogodi”; Korisnik se briše komandomDROP USER korisnik1 [, korisnik2…]
Dodeljivanje privilegija korisniku Privilegije se dodeljuju naredbomGRANT tipPrivilegije1 [(listaKolona1)] [,
tipPrivilegije2 [(listaKolona2)] ...]ON {imeTabele | * | *.* | imeBaze.*}TO korisnik1 [IDENTIFIED BY ‘lozinka1'][, korisnik2 [IDENTIFIED BY ‘lozinka2'] ...][REQUIRE {SSL|X509} [ISSUER sertifikacionoTelo]
[SUBJECT tema]][WITH GRANT OPTION] Primermysql GRANT UPDATE ON knjige.* TO ‘marija’@
‘192.168.1.103’;
Oduzimanje privilegija korisniku Privilegije se oduzimaju korisniku
naredbom:REVOKE tipPrivilegije1 [(listaKolona1)] [,
tipPrivilegije2 [(listaKolona2)] ...]ON {imeTabele | * | *.* | imeBaze.*}FROM korisnik1 [, korisnik2 ...] Primer:mysql> REVOKE INSERT ON knjige.*
‘marija’@‘192.168.1.102’;
SELECT dozvoljava korisnicima da selektuju (čitaju) zapise iz tabela.
INSERT dozvoljava korisnicima da upisuju nove zapise u tabelu.
UPDATE dozvoljava korisnicima da menjaju postojeće zapise u tabelama.
DELETE dozvoljava korisnicima da brišu zapise iz tabela
INDEX dozvoljava korisnicima da indeksiraju tabele
Tip korisničkih privilegija
CREATE dozvoljava kreiranje baza ili tabela ALTER dozvoljava korisnicima da
menjaju strukturu baze podataka. Dodavanje novih kolona Promena imena kolona ili tabela Promena tipa podataka u okviru tabela
DROP dozvoljava brisanje baza podataka ili tabela.
Tip korisničkih privilegija
USAGE daje minimalne privilegije. Ova opcija je korisna ako se želi samo kreirati novi korisnik.
Ima i drugih tipova: REPLICATION, REPLICATION SLAVE, SHOW DATABASES.
Kompletna lista na:http://dev.mysql.com/doc/refman/5.0
/en/grant.html
Tip korisničkih privilegija
MySQL komande Najvažnije komande: CREATE,
DROP, SELECT, INSERT, DELETE, UPDATE
Kompletan spisak komandi:http://dev.mysql.com/doc/refman/5.0/en/sql-syntax.html
Kreiranje baze i brisanje baze Baza podataka se kreira jednostavnom
naredbom:CREATE DATABASE imeBaze; Baza podataka se briše naredbomDROP DATABASE imeBaze; U bazu se ulazi naredbomUSE imeBaze Alternativno tabela i kolone se zovu:imeBaze.imeTabele i
imeKolone.imeBaze.imeTabele
Kreiranje tabele CREATE TABLE [IF NOT EXISTS] imeTabele ([PRIMARY KEY (imeKolone1[,imeKolone2…])]imeKolone1 tipKolone1 [atributiKolone1],
[imeKolone1 tipKolone2 [atributiKolone2],…]); Primer:CREATE TABLE zaposleni (id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,ime VARCHAR(25) NOT NULL,prezime VARCHAR(25) NOT NULL,telefon VARCHAR(45) NOT NULL,PRIMARY KEY(id));
Tip i atributi kolona Tipovi kolona mogu biti INT, FLOAT, DOUBLE, INT
UNSIGNED, DATE, TIMESTAMP, CHAR, NATIONAL CHAR CHARACTER SET imeAlfabeta, VARCHAR (dužina)
Kompletna lista tipova se može naći na:http://dev.mysql.com/doc/refman/5.0/en/data-type-overview.html Atributi kolona su: DEFAULT vrednost,
AUTO_INCREMENT, NOT NULL, UNIQUE,... Kompletna lista:
http://dev.mysql.com/doc/refman/5.0/en/create-table.html
Menjanje tabela Tabela se menja komandomALTER TABLE imeTabele [ADD COLUMN|
CHANGE|DROP] [imeKolone1] imekolone2 [,tipKolone2[,atributiKolone2]] [AFTER imekolone3]
Primer:ALTER TABLE zaposleni ADD COLUMN emeil
VARCHAR(20) AFTER telefon;
Čitanje podataka iz baze Sintaksa komandeSELECT izrazKolona1 [,izrazKolona2 …]
[FROM imeTabele1[,imeTabele2…] [GROUP BY {imeKolone3|izrazKolona3}][WHERE uslov]][ORDER BY imeKolone [ASC|
DESC]] Primer:SELECT name, address FROM customers
ORDER BY name ASC
Funkcije koje koriste kolone AVG(imeKolone) daje prosečnu vrednost
kolona COUNT(imeKolone) daje broj ne NULL
vrednosti u okviru kolone COUNT(DISTINCT imeKolone) daje broj
različitih vrednosti u okviru kolone MIN(imeKolone), MAX(column) STD(imeKolone) daje standardnu devijaciju SUM(imeKolone) zbir vrednosti kolona
Korišćenje funkcijaSELECT AVG(cena) FROM kupovine; Korišćenje funkcija i grupisanjaSELECT MIN(cena) FROM kupovineGROUP BY id_kupca;
Primeri čitanja kolona uz pomoć funkcija
Upisivanje podataka u bazu Sintaksa za upisivanje novog zapisa u
tabelu: INSERT INTO tabela VALUES (vrednost1,
vrednost2, ..); Primer:INSERT INTO proizvodi VALUES
('',‘Jabuke',1.23); U primeru za vrednost prve kolone je
korišćen prazan string jer je kolona definisana kao auto_increment.
Brisanje podataka iz baze Opšta sintaksa je:DELETE FROM imeTabele [WHERE
uslov] [ORDER BY ...] [LIMIT broj] Primer:DELETE FROM zaposleni WHERE
zaposleni.ime=‘Marko'
Ažuriranje podataka u bazi Opšta sintaksa je:UPDATE tabela SET imeKolone1=izraz1,imeKolone2=izraz2... [WHERE uslov] [ORDER BY ...] [LIMIT number] ; PrimerUPDATE studenti SET
email=‘[email protected]'WHERE ime=‘Nataša Maksić';
PHP komande za rad sa MySQL bazom Razvijen je skup funkcija za rad sa MySQL
bazama, od kojih su najvažnije: mysql_connect, mysql_close, mysql_create_db,mysql_list_dbs, mysql_list_tables, mysql_select_db, mysql_query, mysql_db_query, ...
Kompletna lista se može naći na stranicihttp://www.php.net/manual/en/book.mysql.php
Sintaksamysql_connect(host[,korisnik[,lozinka]]) mysql_close([link]) Primer:$l=mysql_connect(“localhost”, “aleks”,
“12cikpogodi”);mysql_close($l);
Uspostavljanje i raskidanje veze sa bazom
Kreiranje, brisanje i ispisivanje baza Sintaksa kreiranja i brisanja baza:mysql_create_db (baza [, link])mysql_drop_db(baza[, link]) Sintaksa za ispisivanje baza i tabela:mysql_list_dbs([link]) mysql_list_tables(baza[, link])
Rad sa bazama Sintaksa funkcija:mysql_select_db(baza [, link]) mysql_query (upit, [, link]) mysql_db_query (baza, upit [, link])
Brisanje iz baze pomoću PHP-a Primer:<?php if isset(($_POST[‘submit’])){
$linkID=mysql_connect(“localhost”, “webuser”, “secret”);mysql_select_db(‘products’);foreach ($count=0; $count<count($_POST[‘rowid’]); $count+
+){$rowID=$_POST[‘rowID’][$count];$query=“DELETE FROM product WHERE rowid=‘$rowid’”;$result=mysql_query($query);}if ($result) echo “Podaci ubačeni!”mysql_close();}?>
Upis u bazu pomoću PHP-a Primer:<?php if isset(($_POST[‘submit’])){$linkID=mysql_connect(“localhost”, “webuser”, “secret”);mysql_select_db(‘company’);$productid=$_POST[‘productid’];$name=$_POST[‘name’];$price=$_POST[‘price’];$query=“INSERT INTO product SET productid=‘productid’,
name=‘$name’ price=‘$price’”;$result=mysql_query($query);If ($result) echo “Podaci ubačeni!”mysql_close();}?>