Professional Documents
Culture Documents
PHP Zasto PHP
PHP Zasto PHP
Zato PHP?
Web-based, f ilij i k i iki i t f j j d W bb d familijarni korisniki interfejs, jednostavna i t t integracija ij sa drugim web-baziranim sistemima Aktuelno, dizajniran da se jednostavno prilagodi najsavremenijim dizajnima programskih jezika. jezika Portabl, tako da moe da se izvrava na bilo kom sistemu. Objektno-orijentisan, kao i veina popularnih jezika (Java, C++) koji se koriste za savremene aplikacije. aplikacije Konvencionalan, ukljuuje mnoge mone i korisne mogunosti, podrava vie razliitih programerskih stilova Korien, Korien PHP je u velikoj meri u upotrebi danas u Internet programiranju (ukljuujui i neke od najpopularnijih dinamikih web sajtova), postoji veliki broj ne-trivijalnih primera i besplatnih resursa Open-source, Open-source (Microsoft)
Source: Netcraft
Preduslovi
PHP je dizajniran tako da p j j pomae p g programerima da razvijaju dinamike i podacima voene Web stranice PHP na jednostavan nain pristupa MySQL, kao i drugim open source bazama podataka, kao to j je PostgreSQL. g Q MySQL mora da bude instaliran zajedno sa funkcionalnim Web serverom, ali to je u co a eb se e o , a jednostavan korak u podeavanju PHP okruenja
Preduslovi
PHP je skript j j p jezik na serverskoj strani Web aplikacije j p j koji se integrie u okviru HTML dokumenata Takoe, mogue je ubacivati HTMLkod u PHP skript PHP skript se parsira i interpretira na serverskoj strani Web aplikacije PHP budunost je obeavajua, jer je popularan kod Web programera i dizajnera, a moan je i jednostavan za korienje
Malo istorije
Rasmus Lerdorf
Novi parser p
PHP4
PHP
Moe se izvravati bez Web servera
Ni malo zabavno Ni malo praktino p
Windows OS
http://httpd.apache.org/docs-2.0/platform/windows.html http://www.mysql.com/doc/en/Windows_prepare_environment.ht
ml http://www.php.net/downloads.php
WAMP Indigo
http://www.wampserver.com/ http://www.indigostar.com/indigoperl.htm http://easyphp.org/telechargements.php3
EasyPHP
PHP proizvodi
Zato to je PHP open-source proizvod, moe se izvriti download sa j p p zvaninog PHP Web sajta, www.php.net, u okviru koga postoji i deo FAQ (frequently asked questions), arhiva mailing liste, i razliiti lanci koji opisuju PHP proizvode PHP ima dosta built-in konekcija koje dozvoljavaju interakciju sa bilo kojom back-end bazom podataka, gde Web aplikacija smeta podataka
PHP proizvodi
Prvi deo Web aplikacija, jo se naziva i Prezentacioni nivo, je ono to korisnik vidi MySQL je najee koriena back-end baza p podataka za organizaciju Web sadraja zato to je g j j j besplatna (open source), podrava veliki broj korisnika i platformi, i poseduje moan i jednostavan SQL interfejs j U velikom broju sluajeva ne koristi se samo PHP Uobiajeno je da je potrebna baza podataka koja sadri informacije za dinamiki Web sadraj
output
Static St ti HTML
Tipovi podataka Ti i d t k
Tip podataka Opis
Celobrojne veliine Realni brojevi Tekst koji se nalazi izmeu jednostrukih ('') ili ( ) dvostrukih ("") navodnika. Moe imati vrednost true ili false. Grupa elemenata istog tipa. Grupa povezanih podataka i metoda. Eksterni izvor podataka. Bez vrednosti.
Rezultat i R lt t primera
grupni i
Ili klasni tipovi kompleksniji Sastavljeni od drugih tipova (primitivnih ili klasnih tipova) Mogunost vie vrednosti Pi Primer:
Array Object
Tipovi podataka
integer Celobrojne veliine Pozitivne ili negativne Dodatni brojni sistemi
Oktalni: 0755 // poinju 0 Hex: 0xFF // poinju 0x
floating point Racionalni brojevi, pozitivni i negativni Postoji decimalna taka dva formata
Brojevi sa decimalnom takom, 514.061 Eksponent i mantisa, 5.14061E2, to je 5.14061 5 14061 x 102
Referiu se sa int f boolean Dve vrednosti true ili false Koriste se kod raznih upita (if, while) Referiu se sa bool
Tipovi podataka Ti i d t k
string j niz k kt je i karaktera
esto korien tip podataka
Imena ifre, adrese istorija ... Imena, ifre adrese, istorija,
Deklaracija stringova
V d Vrednost stringa se moe d kl i ti na 3 naina t ti deklarisati i
Apostrofa
Primer 1;
N Navodnika d ik
Primer 2;
Pomonih dokumenata
<<< When_Will_It_End h ill d It was a dark and stormy night, my son said, Dad, tell me a story so I said, It was a dark and stormy night, my son said, Dad, tell me a story so I said, It was a dark and stormy night, my son said, Dad, tell me a story so I said, When_Will_It_End
Echo
Naredba echo se koristi za jednostavan izlaz h
echo hello; echo hello, goodbye; echo (hello);
echo nema povratnu vrednost Moe daprima vie argumenata odvojenih zarezom
Mogu se koristiti i ()
echo(hello); p int(hello) print(hello);
Printf()
N db printf() se k i ti za k Naredba i f() koristi kompleksnije l k ij formatirane izlaze printf( This printf(This prints 2 decimal places %.2f, 3.1415927);
This prints 2 decimal places 3.14
Printf() je funkcija, iji je prvi argument string koji opisuje eljeni format, a preostali argumenti su vrednosti koje se unose u okviru specificiranog formata (svi lanovi koji poinju sa %)
Izrazi
N d promenljivama se mogu Nad lji izvravati odreene operacije
echo 1+2; echo 3*2; echo Big . .Fred; printf(5/3 is about %3d, 5/3);
+,-,.,*,/,%
Promenljiva
Prostor za podatke (kao kutija za stvari)
Dan
30.3 30 3
$ime I Imenovana lokacija za smetanje podataka l k ij t j d t k Promenljiva definie samo jedan tip podatka
$god
Na primer samo integer, samo floating point, ili samo character Ako je promenljiva skalarnog tipa moe sadriti samo jednu skalarnu vrednost Promenljiva sloenog tipa moe sadrati vie skalarnih vrednosti
Pravo znaenje Dodeljuje se vrednost izraza na desnoj strani promenljivoj na levoj strani. Promenljive se mogu p j j j g pojavljivati i na desnoj strani j jednakosti:
$count = 10;//inicijalizacija promenljive count $count = $count - 1;// decrement count Nova vrednost promenljivenew value of count je 9
Osnovne operacije
$add = $a + 1 1; $mult = $a * 2; $str = $s. Fred;
PHP izvrava operacija sa promenljivama razliitog tipa tako to konvertuje promenljive u isti tip po odreenim pravilima
$whatIsThis = 1.2 + Fred . 0777 * true;
Kreiranje promenljive
P Promenljiva se d kl i prvi put k d j j se lji deklarie i t kada joj dodeljuje vrednost Pomou deklaracije promenljive rezervie se prostor u memoriji i specificira tip podatka koji e biti smeten u toj memorijskoj lokaciji:
$a = 1.1 // deklaracija i inicijalizacija realnog broja $a = true // deklaracija i inicijalizacija boolean promenljve $a = fat stuff // deklaracija i inicijalizacija string promenljive
Default Vrednosti D f lt V d ti
Promenljive imaju default vrednosti $a = $a + 1; // $a=0 po default $s = $s."Fred"; // default $s=""
Preporuka je da se ne koriste default vrednosti, ve da se eksplicitno navode inicijalne i i ij l vrednosti promenljivih d ti lji ih $a = 0; $s = ""; $b = false;
Imena promenljivih
Pravila Preporuka - moraju se potovati - trebalo bi potovati Sva imena moraju koristiti Koristiti imena koja opisuju tano ista pravila znaenje p p j promenljive j Ne smeju poinjati sa cifrom Prvi simbol promenljive treba da bude malo slovo Mogu sadrati samo brojeve, slova, donju crtu Svaka sledea re unutar imena (_) i neke specijalne poinje velikim slovom (eggsPerBasket umesto karaktere eggsperbasket) Imena su case-sensitive (ThisName i thisName du Koristii donju crtu ( ) za blanko (_) imena dve razliite znake promenljive) Konstante pisati velikim slovima Bez blanko znakova!
NULL
Null je specijalan tip sa znaenjem bez bez vrednosti" Moe se koristiti da bi se inicijalizovala promenljiva
$a = NULL;
String
Ni k kt Niz karaktera, na primer abc123$%! i b 123$%!
U PHP se naziva string
Specijalni karakteri
Specijalni karakteri su karakteri koji nisu vidljivi veimaju specijalno znaenje
\n nova linija (nema isto znaenje kao u okviru HTMLa b ) HTML <br>) \t tab \$ karakter $ $ \\ karakter \
Primer:
echo "I need more \$ b t th h d but they \\' d \\'ed the budget\n"; I need more $ but they \'ed the budget
Razlike
Nain na koji je deklarisan string odreuje njegove osobine
Specijalni karakteri (n.p. \n ) se prepoznaju Izrauna se vrednost promenljivih
print_r(), var_dump() i t () d ()
Tip i vrednost promenljivih se moe prikazati pomou funkcija print_r(), var_dump() O funkcije mogu veoma d pomognu pri Ove f k ij da i proveri rada programa print_r() prikazuje samo vrednost i t () var_dump() prikazuje i tip i vrednost
Izrazi I i
Izrazi su I ra i s PHP naredbe koje vraaju odreen vrednost raaj odreenu rednost
$numberOfBaskets = 5; $eggsPerBasket = 8; $totalEggs = $numberOfBaskets * $eggsPerBasket; $check = ($totalEggs = $numberOfBaskets * $eggsPerBasket) / 40;
Operatori O t i
O Operatori k i t operande d bi i ili t i koriste d da izvrili odreene operacije
P t j unarni, bi Postoje i binarni i t i ternarni operatori, i t i koji koriste 1, 2, ili 3 operanda respektivno.
Unarni: $endOfFile++, !is string() $endOfFile , !is_string() Binarni: 2 * 3, $a % 3, $a = 40, $a > 3, $a == 5, $a || $b
Konkatenacija stringova
Operator . se koristi za sabiranje (konkatenaciju) stringova:
$name = "Mondo"; $greeting = "Hi there!"; "Hi, echo $greeting . $name . "Welcome"; Na ekranu e se pojaviti: Hi, there!MondoWelcome Ili: $greeting . " " . $name . " Welcome"; Dobija se rezultat: Hi, there! Mondo Welcome
Ovo je primer kada se prestaje sa izraunavanjem izraza im se dobije rezultat Mogu se koristiti & i | da se u svakom sluaju izrauna ceo izraz
Tabele istinitosti
&& ( d) (and)
Value of A Value of B true true false f l false true false true t false A && B true false false f l false Value of A true true false false !A false true
|| (or)
Value of A Value of B true false true false A || B true true true false
! (not)
true false
Prioritet operatora
Izrazi se izvravaju po odreenom prioritetu
Da li je 2 + 3 * 4 jednako 5*4 ili 2 + 12?
Ne moraju se koristiti zagrade ako je samo pomou prioriteta dobijeno korektno izraunavanje
Prioritet P i it t
Primer: $score < $min/2 10 || $score > 90 Operator deljenja ima najvii prioritet: $score < ($min/2) 10 || $score > 90 Oduzimanje je sledee po prioritetu: $score < (($min/2) 10) || $score > 90 Operatori < i > imaju isti prioritet, pa e se izvriti istovremeno: ($score < (($min/2) 10)) || ($score > 90) Dobijeni izraz je potpuno popunjen zagradama i identian je zagradama, originalu. On samo pokazuje redosled kako e se delovi izraza izraunati.
Prioritet
Najvii i it t N j ii prioritet the unary operators: ++, --, and ! the binary arithmetic operators: * / % *, /, the binary arithmetic operators: +, the boolean operators: <, >, =<, >= p , , , the boolean operators: ==, != the boolean operator & the boolean operator | the boolean operator && the boolean operator || Najnii prioritet
2 * ($salary + $bonus) 2 * ($salary + $bonus) 1/($time + 3 * $mass) ($a - 7) / ($t + 9 * $v) 1/($time + (3 *$mass)) ($a - 7) / ($t +( 9 * $v))
Konverzija tipova
Konverzija je proces prebacivanja vrednosti iz jednog tipa podatka u drugi. Nekada je korisno upotrebiti ovu funkciju. Konverzija menja samo dobijenu vrednost a ne i tip vrednost, promenljive nad kojom se primenjuje Na primer: $n $ = 5 0 5.0; $x = (int) $n; U primeru $n je realni broj, naredba (int) $n konvertuje njegovu vrednost u i t i sada j $ ti k t j j d t int, d je $x tipa integer. Treba voditi rauna kada se sloeniji tip konvertuje u prostiji tiji $n = (int) 5.2345; // rezultat je 5
Inkrement i dekrement I k t d k t
Ovi O i operatori se k i t k skraena notacija za operacije t i koriste kao k t ij ij sabiranja i oduzimanja Operacije inkrementa (i dekrementa) se mogu izvriti pre ili posle korienja vrednosti promenljive ++$count preinkrement $ $count++ postinkrement p --$count predekrement $count postdekrement Ove O operacije se mogu i iti i nad promenljivama k j nisu ti ij izvriti d lji koje i tipa integer $var = a; $var++; // $var je sada b
Inkrement/Dekrement primeri
Inicijalizacija: $n = 3; $m = 4; Kolika je vrednost promenljive m u sledeim primerima? (a) $result = $n * ++$m; (b) $result = $n * $m++; (c) $result = $n * --$m; $m; (d) $result = $n * $m--;
if naredba a edba
I i sledeu naredbu ako j uslov true ili j Izvri l d db k je l je preskoi ako je uslov false Si t k Sintaksa:
if (Boolean_Izraz) Naredbe ako je true; sledeca_naredba; uvek se izvrava
Primer
if ($eggsPerBasket < 12) echo Less than a dozen eggs p gg per basket; $totalEggs = $numberOfEggs * $eggsPerBasket; echo You have a total of $totalEggs eggs.;
Blok izraza
Sve naredbe unutar zagrada su u okviru if if ($eggsPerBasket < 12) { echo Less than a dozen ...; $costPerBasket = 1.1 * $costPerBasket; } $totalEggs = $numberOfEggs * $eggsPerBasket; echo You have a total of $totalEggs eggs ); You eggs. );
Blok izraza
if ($eggsPerBasket < 12) : echo Less than a dozen ...; ; $costPerBasket = 1.1 * $costPerBasket; endif; Sve naredbe izmeu : i endif; su u okviru naredbe if
if-else if l
Selektuje se jedna od dve opcije Izvrava se Action1 ili Action2, u zavisnosti od vrednosti uslova Sintaksa:
if (Boolean_Expression) { Action1 } else { Action2 } Action3 //uvek se izvrsava
if-else
Primer sa jednom naredbom:
if ($time < $limit) echo You made it.; else echo You missed the deadline.;
Blok naredbi:
if ($time < $limit) { echo You made it.; $bonus = 100; } else { echo You missed the deadline.; $bonus = 0; }
if-else if-elseif--else
Sit Situacije sa vie od d i b ij i d dva izbora Sintaksa:
if(Boolean_Expression_1) Action_1 elseif(Boolean_Expression_2) Action_2 . . . elseif(Boolean_Expression_n) elseif(Boolean Expression n) Action_n else Default_Action
if-elseif-elseif--else
if($score >= 90 && $score <= 100) $grade= A; elseif ($score >= 80) ( ) $grade= B; elseif ($score >= 70) $grade= C; elseif ($score >= 60) $grade= D; else $grade= E;
switch
switch($profRel) { it h($ fR l) case colleague : $greeting = Thomas; break; ; case friend : $greeting = Tom; break; case grad student : $greeting = TC; break; case undergrad student : $greeting = professor; break; default : $greeting = Dr Collins; Dr. Collins ; break; }
Petlje
Postoje sledee petlje
while-do for do-while
Petlje
Mogunost ponavljanja odreeni broj puta skupa naredbi
kontrola petlje { ----------------------------}
Ponavljanje naredbi nula ili vie puta, kontrolisano pomou kontrola petlje
While Whil
while (uslov) naredbe Sadri promenljive koje se menjaju u okviru petlje lj Ponavlja se dok uslov ne postane false $x $ = 5 5; while ($x>0) { echo $x; $x = $x-1; }
while hil
$s $ = 0 0; $x = 1; while ($x <= 10) { $s = $s + $x; $x = $x + 1; }
while (true) echo I will do the reading assignments; I assignments ; while (false) echo I will start my HW early;
for
for (init; cond; incr) naredbe
init; i i while (cond) { naredbe incr; } $s = 0; for ($x = 1; ($ ; $x <= 10; $x = $x+1) $s = $s + $x;
for
for ($i = 0 $i < 20 $i ) { f 0; 20; $i++) if ($i%2 == 1) echo My robot loves me\n"; else echo My robot loves me not\n"; }
for ($i = 1; $i <= 20; $i++) { echo \nMy robot loves me"; \ if ($i%2 == 0) echo " not"; }
Do-while Do while
naredbe; ; while (cond) naredbe
exit f k ij it funkcija
Ako se pojavi situacija kada je nepotrebno da se nastavi izvravanje programa, prekid se moe izazvati korienjem funkcija exit()ili die() Moe se koristiti argument tipa string da j program normalno bi se utvrdilo da li je p g ili ne prekinuo rad
Nizovi
Kolekcije podataka Osnove nizova
D kl Deklaracija, alokacija, i i i ij li ij l k ij inicijalizacija ij
Kolekcije
N k d j potrebno i iti odreene Nekada je t b izvriti d operacije sa vie podataka kao sa jedinstvenom grupom Kolekcija je vrsta tipa podataka koje sadri vie vrednosti u jednom trenutku trenutku. Jedna vrsta kolekcije su i stringovi (koji ine kolekciju karaktera) karaktera).
Nizovi
V t ureenih k l k ij Vrsta ih kolekcija. Specijalne mogunosti:
Ugraeni u okviru PHP, sa svojom sintaksom. Elementi mogu biti bilo kog tipa podataka (ukljuujui i druge nizove!) Kolekcija moe menjati svoju duinu bilo kad Nizovi mogu biti indeksni ili asocijativni (ili oboje!) Svi nizovi u okviru PHPa su asocijativni
Kljuevi se automatski postavljaju na tip integer
$product[price] $product[price]
Element niza
$product[price]
Vrednost elementa niza
$p $product[price] = 32; [ p ] ;
$temperature[$n + 2]
Indeks - mora biti int, - ili izraz iji je rezultat int
$temperature[$n + 2] $temperature[$n + 2]
Indeksna promenljiva element niza
Value of the indexed variable; also called an element of the array
$ $temperature[$n + 2] = 32; p [$ ] ;
Pristup
Na jednostavan nain se pristupa svakom elementu niza
array-name[key-expression] Ako je key-expression celobrojna veliina n, key expression dobija se n-ti element niza array-name, prvi je sa kljuem 0 Ako je klju string, dobija se vrednost koja je povezana sa tim kljuem
Primeri
$grades[0] = 75 $ d [0] 75; echo $grades[0]; $message[0] = Dont; Don t ; $i = 2; $clocks[$i 1] $clocks[$i-1] = time(); printf(the %dth time is %s, $i, $clocks[$i1]); $name[first] = Rumple; $name[last] = Stilskin; echo name is {$name[first]} {$name[last]};
Mogue greke M k
U t b i d k veeg od d i Upotreba indeksa d duzina_niza-1 i 1 ili manjeg od 0 ili kljua koji ne postoji nee dovesti do prekida rada programa.
Nee se dobiti vrednost nijednog elementa Treba voditi rauna da se koriste korektni indeksi!
echo The product is $product[name];//nije korektno! echo The product is $product[name]; h Th d t i $ d t[ ] echo The product is {$product[name]};
Jedan nain: korienje liste elemenata i array(). array() U primeru dobijen je niz sa tri elementa, isti kao i sledei: Mogu se koristiti i vrednosti kljua
$product = array(name => gumball, price => 0.07, quantity => 1500); $angles[0] = 3.5; $angles[1] = 9.7; $angles[2] = 15.01;
Duina niza
D i niza $ Duina i $anArray j rezultat f k ij je lt t funkcije count($anArray) ili sizeof($anArray). esto se koristi u okviru petlji:
$counter=0; while( $count < sizeof($anArray) ) { echo element $ $counter is {$anArray[$counter]}; $counter++; }
HTML i PHP
<?php echo '<b><i>Hello World!!!!</b></i><br>'; echo '<hr>'; echo '<table border = 1> <table <th>Column 1</th> <th>Column 2</th> <tr> <t > <td>Hello Class</td> <td>Hello Again</td> </table>'; ?>
Obrada nizova
Nizovi se mogu obraivati pomou petlji:
for ($i=0; $i < count($angles); $i++) { print angle $i: . $angles[$i]; } foreach ($product as $key => $value) { print 'the ' . $key . ' is ' . $value; print '<br>'; <br> ; }
Viedimenzionalni nizovi
Element niza moe biti podataka bilo kog tipa, ukljuujui i neki drugi niz Na taj nain se definiu viedimenzionalni nizovi
$row1 = array('a','b','c'); $ 1 (' ' 'b' ' ') $row2 = array('d','e','f'); $row3 = array('g','h','i'); // 2-dim niz $matrix $ t i = array($row1, $ ($ 1 $row2, $ 2 $row3); 3) echo $matrix[0][0]; echo $matrix[1][2]; echo $ h $matrix[2][1]; i [2][1] $matrix[2][2] = 'I';
Viedimenzionalni nizovi
Mog e je koristiti i indeksne i Mogue asocijativne nizove u okviru istog niza
$product1 = array('name' => 'small gumball', 'price' => 0.02); $product2 = array('name' => 'med gumball', 'price' => 0.05); array( name > med gumball , price > $product3 = array('name' => 'large gumball', 'price' => 0.07); // niz svih proizvoda $products = array($product1, $product2, $product3); for($i=0; $i<count($products); $i++) echo "Product: $i is {$products[$i]['name']} and Product: {$products[$i][ name ]} costs {$products[$i]['price']} each<br>";
Postojanje l P t j j elementa t
N k d j potrebno znati d li odreeni Nekada je b i da d i element postoji u okviru niza. Tada se koristi j y_ y_ funkcija array key exists()
$product = array(name => small gumball, filling => NULL, price => 0.04); if( array key exists(name, $product) ) array_key_exists( name echo Product is $product[name];
Uporediti sa isset()?
array_key_exists(filling, $product) // rezultat? isset($product[filling]) // rezultat?
Pretraga P t
Testiranje da li je element u nizu moe se izvriti pomou in_array()
if (in_array(small gumball, $product)) print(we sell small gumballs);
Sortiranje S ti j
Postoji vie naina da se izvri sortiranje, na primer
sort(), sortira od najmanjeg ka najveem elementu asort(), uva asocijaciju ksort(), sortira p (), prema vrednosti kljua j
$a = array(3, a, c, b, 2, 1); sort($a);
Treba voditi rauna o upotrebi ovih funkcija, jer se sortiranje obavlja direktno na samom nizu
Login
<?php ? h print "logged in " . $_POST['username']; ?> <form action = 'process_login.php' method = 'post'> <input type = 'text' name = 'username'> <input type = 'password' name = 'password'> <input type = 'submit' name = 'submit_button' value = 'login'> login </form>
ili: <form action = <?php $_SERVER[ PHP_SELF ] ? method = post> form ?php $ SERVER['PHP SELF'] ?>method post </form>
Login
if( array_key_exists('submit_button', $_POST) ) { print "logged in " . $_POST['username']; } e se else { ?> <form action = '<?= $_SERVER['PHP_SELF'] ?>' method = 'post'> <input type = 'text' name = 'username'> text username > <input type = 'password' name = 'password'> <input type = 'submit' name = 'submit_button' value = 'login'> </form> /f <?php } ?>
Login
if( array_key_exists('submit_button', $ POST) ) { k i t (' b it b tt ' $_POST) print "logged in " . $_POST['username']; } else { ?> <form action = '<?= $_SERVER['PHP_SELF'] ?>' method = 'post'> <select name='username'> <option>Moe</option> <option>Larry</option> ti L / ti <option>Curly</option> </select> <input type = 'password' name = 'password'> <input type = 'submit' name = 'submit button' submit submit_button value = 'login'> </form> <?php } ?>
Funkcije
F k ij j bl k programa ( Funkcija je blok (unutar {}) k j t koja izvrava odreeni skup naredbi
Moe da prihvata ulazne parametre Moe da vraa rezultat obrade
Funkcije su korisne za j
Iste operacije koje se pojavljuju na vie lokacija Smanjuju vreme izvravanja M d l i Modularizacija ij
Poziv funkcije
F k ij u PHP su d fi i Funkcije PHPu definisane sa <identifier>(<parameters>)
N primer. phpinfo(), rand(1,10) Na i
identifier
parameters
the call
Parametri
Funkcije su fleksibilne, jer mogu da p j ,j g prihvataju ulazne j podatke Ulazni podaci koji se alju funkciji se nazivaju parametri rand(int min, int max) ,
Parametar 1: min (int)
rand(1,10);
Rezultat funkcije
N k funkcije samo obavljaju odreenu operaciju ( Neke f k ij b lj j d ij (n.p. itanje vrednosti sa tastature, prelazak na web stranicu) i ne generiu rezultat Mnoge funkcije izvre operaciju i generiu odreenu vrednost Ti podataka koji generie f k ij moe biti Tip d t k k ji i funkcija biti:
prost tip podataka: int, float, boolean, ... Sloeni tip podataka array, object, ... void ako se ne generie rezultat
Rezultat funkcije
Rezultat funkcije se moe koristiti u okviru regularnih izraza
$guess = rand(1,10); 3.14159*rand(1,10); echo phpinfo(); $yummy = piece of . substr(piece,0,3); piece substr( piece ,0,3);
if( is_int($guess) )
Definicija funkcija j j
Prednost korienja PHPa je i mogunost da se kreiraju i sopstvene funkcije. Funkcija se deklarie pomou rei function ispred identifikatora funkcije sa skupom parametara : function <identifier> ( <parameters> ) { // kod funkcije return <expression> } Nain na koji se definie funkcije je interfejs funkcije
Sintaksa i primer
function funcname($var1 $var funcname($var1, 2...) { ; statement 1; statement 2; statement 3; ... return $retval; } function square($num) f ti ($ ) { $answer = $num * $num; return $answer; }
Promenljive definisane izvan funkcije u optem sluaju nisu dostupne unutar funkcije (razlog je da bi se izbegli konflikti i da bi promenljive bile dostupne funkciji kao argumenti) Globalne promenljive su dostupne i unutar i izvan funkcija Oblast vaenja je deo programa gde je promenljiva dostupna
Treba koristiti specifikatore global and static
Primer Pi
<?php function deposit($amount) { $balance += $ $b l $amount; t echo New balance is $balance <BR>"; } $balance = 600; $ deposit(50); echo "Balance is $balance"; ?>
Primer
function swapTwoValues($a, $b) { f ti T V l ($ $tmp = $a; $a = $b; $b = $ $tmp; } $var1 = 1; $var2 = 2; echo \$var1 is $var1 and \$var2 is $var2<BR>; swapTwoValues($var1, $var2); echo \$var1 is $var1 and \$var2 is $var2;
Validacija podataka
Prvo j potrebno proveriti d li j f P je b i i da je forma poslata, mogue je k i i i l j koristiti funkciju array_key_exists() u okviru dugmeta pomou koga je forma submit-ovana Korienje funkcije je korisno za validaciju, zbog mogunosti upotrebe u okviru vie razliitih formi: t b k i i liitih f i
<?php function validate_price($value) { if(!isset($errors)) $errors = array(); // init empty array if not defined already if( !is_numeric($value) ) $errors['not_number'] = "not numeric"; if( $value - round($value, 2) != 0 ) $errors['not_dollar'] = "not a dollar amount"; if( $value < 0 ) $errors['not_non-negative'] = "price cannot be negative"; } ?> return $errors();
Validacija podataka
function validate_price($value) { global $errors; if(!isset($errors)) $errors = array(); // init empty array if not defined already if( !is_numeric($value) ) $errors['not_number'] = "not numeric"; if( $value - round($value, 2) != 0 ) $errors['not_dollar'] = "not a ; dollar amount"; if( $value < 0 ) $errors['not_non-negative'] = "price cannot be negative"; }
Uobiajeno da je da se koristi globalna promenljiva koja bi sadrala greke, greke tako da bude dostupna unutar i izvan funkcije.
Pri lid iji treba b titi j da P i validaciji t b obratiti panju d se podaci d bij j u f d i dobijaju formi stringa. i ti Primer testiranja da li je uneti string u formatu broja
is_int($a - (int) $a)
Hidden vrednosti
Da bi se odreene vrednosti razmenjivale izmeu stranica mogue je koristiti hidden element forme Samo vrednosti tipa string se mogu slati i primati
Pre slanja je potrebno konvertovati u string Funkcije urlencode(), serialize() se mogu koristiti pri konverziji sloenijih tipova, kao to su nizovi. Ako se koriste ove funkcije onda se pomou funkcija urldecode(), unserialize() dobijaju originalne vrednosti koje su kao sting poslate u okviru $ POST ili $_POST $_GET nizova
Hidden vrednosti
<? $thi $things = array('one thi ' 't (' thing', 'two thi ') ?> thing'); <form action= "<?= $_SERVER['PHP_SELF'] ?>" method='POST'> <input type='hidden' name='secret' value=96> <input type='hidden' name='stuff' value='<?= i 'hidd ' ' ff' l ' ? urlencode(serialize($things)) ?> ' > <input type='submit'> </form> Nakon slanja forme $_POST['secret'] = ??? $_POST['stuff'] = ?? $things = unserialize(urldecode($_POST['stuff'] )) $thi i li ( ld d ($ POST[' t ff'] ));
Promenljive P lji
Informacije sa web servera su dostupne pomou EGPCS
Environment GET POST Cookies, Server Environment, GET, POST, Cookies
PHP definie i $_SERVER[PHP_SELF] pomou koga se _ _ referie na trenutni skript fajl, to je korisno kod formi koje sadre i obradu sopstvenih podataka
Server Info
Veliki broj informacija o serveru i korienom itau je dostupno pomou $_SERVER niza
SERVER_NAME _ REQUEST_METHOD QUERY_STRING REMOTE_ADDR PHP_SELF .
Jo header primera
Mogu se proslediti podaci tokom preusmeravanja pomou $_GET niza
header('Location:myfile.php?name=Dan&s core=98&grade=A');
Submit Button
<form action='<?= $_SERVER['HTTP_REFERER'] ?>'> <INPUT TYPE="SUBMIT" value="back"> </form>
Novi prozor
Nekada je potrebno otvoriti novi prozor umesto zamene dosadanjeg
<FORM action="./action_p process.php" method="POST" target="_blank"> p p g <INPUT TYPE="TEXT" name="stuff_input_field"> <INPUT TYPE="SUBMIT" value="open new window"> </FORM>
./action_process.php
<?php echo 'You entered ' . $_POST['stuff_input_field']; ?>
$_ [ ] p <FORM action="<?= $ SERVER['PHP_SELF'] ?>" method='post'> <INPUT TYPE="TEXT" name="a[]"> <INPUT TYPE="TEXT" name="a[]"> <INPUT TYPE="TEXT" name="a[]"> <INPUT TYPE="SUBMIT"> </FORM> <? ?> var_dump($_POST); var dump($ POST);
Asocijativni nizovi
Mogu se k i d k i k i i i i stringovi (k i M kao indeksi koristiti i i (korisno pri i direktnoj asocijaciji podatka niza)
<FORM action="<?= $ SERVER['PHP SELF'] ?>" $_SERVER['PHP_SELF'] method='post'> <INPUT TYPE="TEXT" name="a[name]"> <INPUT TYPE="TEXT" name="a[price]"> TYPE TEXT name a[price] > <INPUT TYPE="TEXT" name="a[description]"> <INPUT TYPE="SUBMIT"> </FORM> /FORM <? ?> var_dump($_POST); var dump($ POST);
Korisno kada je potrebno tano znati koji element je neprazan (u gornjem primeru koje polje za potvrdu je potvreno)
Rad sa grekama
<?php ?php define('MIN_PASS_LEN', 3); define('MAX_PASS_LEN', 10); function check_pass($pword) { global $errors; if (strlen($pword) < MIN_PASS_LEN ) $errors['password_short'] = 'Enter a longer password'; if (strlen($pword) > MAX_PASS_LEN ) $errors['password_long'] = 'Enter a shorter password'; } $username = 'user'; $password = 'pass'; $errors = array(); if(array_key_exists('form_data', $_POST)) { check_pass($_POST['password']); if(count($errors) == 0 && $_POST[ username ] == $username && $_POST[ password ] == $password) { $ POST['username'] $ POST['password'] die('correct!!'); } else { echo 'wrong'; } } ?> <form action = '<?= $_SERVER['PHP_SELF'] ?>' method= 'POST'> U Username: <br> <INPUT TYPE="TEXT" name="username" value = "<? if(isset($_POST['username'])) echo $_POST['username'] ?>"><br> Password: <br> <INPUT TYPE="password" name = 'password'> <? if(isset($errors['password_short'])) echo " <font color='red'>{$errors['password_short']}</font>"; if(isset($errors['password_long'])) echo " <font color='red'>{$errors['password_long']}</font>"; ?> <br><br> <INPUT TYPE="HIDDEN" name = 'form_data' value='submitted'> <INPUT TYPE="SUBMIT" name = 'submit'> </form>
Baze podataka
Baze podatka su skupovi podataka organizovani na odreeni nain Najvie su koriene relacione baze podataka. Ali ne moraju sve b j baze podataka d b d i d t k da budu relacione.
Baza filmova
ID M1 M2 M3 M4 M5 M6 | title | Room with a view | High Noon | Star Wars | Alien | director | Coppola, F Ford | Woody Allan | Steve Spielberg | Allen, Woody | 1987 | date | 1985 | 1974 | 1993 | Gone with the wind | F. Ford Coppola | 1963
Bolja verzija
ID | title titl M1| Gone with the wind M2| Room with a view M3| High Noon M4| Star Wars M5| Alien M6| Blowing in the Wind ID | director name di t D1| Ford Coppola, Francis D2| Allan, Woody D3| Spielberg, Steven | D1 | D1 | D2 | D3 | D3 | director di t | year | 1963 | 1985 | 1974 | 1993 | D2 | 1987 | 1962
Glumac/Film tabela
actor id A1 A2 A3 A1 A1 A2 A3 ... | movie id | M4 | M3 | M2 | M5 | M3 | M6 | M4
Dobro se ponaaju u situacijama kada se polja i relacije mogu definisati na poetku rada, kasnije je teko promeniti poetnu strukturu.
mySQL
Najpoznatija i najvie koriena opensource baza podataka zasnovana na SQL jeziku. Korienje ove baze p j podataka j besplatno. je p U daljem delu nastave koristie se mySQL upotreba SQL naredbi.
phpmyadmin
phpmyadmin je skup PHP scriptova koji kreiraju opti interfejs za rad sa mySQL bazom podataka. Napisan je pomou PHP jezika jezika. http://wotan.liu.edu/phpmyadmin. Potreban je nalog To nije wotan nalog ve nalog. nalog, dozvola za korienje baze podataka na mySQL serveru koji se nalazai na sajtu wotan.
user_name je vae korisniko ime. To je ime baze, ali i ime pomou koga moete pristupati bazi.
mySQL
mySQL je instalirana na wotan sajtu. Uobiajeno je da se korsinik uloguje na wotan nalog i upotrebi komandu za korienje karakter interfejsa. K Komanda j d je
mysql -u user -p
Kreiranje baze
CREATE DATABASE je mySQL komanda za kreiranje nove baze podataka. Primer
CREATE DATABASE primer;
GRANT
Ova komada kreira korisnika i dodeljuje mu odreene privilegije.
GRANT privileges ON item TO user name user_name [IDENTIFIED BY 'password'] [WITH GRANT OPTION]
Ako se koristi WITH GRANT OPTION, dozvoljava se korisniku da dodeljuje drugim korisnicima privilegije koje i sam ima.
Korisnike privilegije
SELECT dozvoljava korisnicima da selektuju (itaju) zapise iz tabela. INSERT d dozvoljava k i i i lj korisnicima d upisuju nove da i j zapise u tabelu. UPDATE d dozvoljava k i i i lj korisnicima d menjaju da j j postojee zapise u tabelama. DELETE dozvoljava korisnicima da briu zapise iz tabela INDEX dozvoljava korisnicima da indeksiraju tabele
Korisnike privilegije
ALTER dozvoljava korisnicima da menjaju strukturu baze podataka.
Dodavanje novih kolona Promena imena kolona ili tabela Promena tipa podataka u okviru tabela
Korisnike privilegije
C CREATE dozvoljava korisnicima da kreiraju nove baze podataka ili tabele. Ako se odreena tabela ili baza pominje u GRANT naredbi, korisnik moe da kreira samo tu bazu ili tabelu to znai da mora tabelu, prvo da je obrie. USAGE daje minimalne privilegije Ova privilegije. opcija je korisna ako se eli samo kreirati novi korisnik.
REVOKE
Ova naredba je suprotnog dejstva od naredbe GRANT.
Primer
CREATE DATABASE user name; user_name;
GRANT * ON user_name TO user_name IDENTIFIED BY 'secret word' WITH GRANT secret_word OPTION;
Gde je
user_name korisniko ime secret word ifra secret_word * oznaava sva prava
Kreiranje tabele
CREATE TABLE customers (customer_id INT UNSIGNED
NOT NULL AUTO_INCREMENT PRIMARY KEY, name CHAR(50) NOT NULL, address CHAR(100) NOT NULL, email CHAR(40), state CHAR(2) NOT NULL);
Opcije polja
PRIMARY KEY oznaava da je data kolona primarni klju tabele. Moe postojati samo jedna takva kolona Vrednosti u koloni moraju biti kolona. jedinstvene. AUTO INCREMENT se moe koristiti kod kolona AUTO_INCREMENT koje sadre celobrojne vrednosti. NOT NULL definie da polje ne moe bez upisane vrednosti.
USE
USE database definie mySQL da poinje rad sa bazom database. Ako se ne koristi USE komanda i dalje se komanda, moe pristupati tabeli pomou naredbe database.table, database table gde je datebase ime baze baze, a table ime tabele. Taka se koristi da bi se povezala tabela sa bazom bazom.
Pristup kolonama
Ako postoji baza database sa tabelom table i kolonom column. Tada se koloni pristupa sa database.table.column Ako se pre ove naredbe koristi naredba USE database before tada se moe before, izostaviti database deo.
INSERT
INSERT upisuje novi zapis u tabelu.
INSERT INTO table VALUES (value1, value2, ..);
Primer:
INSERT INTO products VALUES ('',Banane',1.23);
U primeru za vrednost prve kolone je korien prazan string j j kolona p g jer je definisana kao auto_increment.
SELECT
SQL naredba pomou koje se slektuju zapisi i db k j l k j i i iz tabele. SELECT [options] columns [INTO file details] file_details] FROM table [WHERE conditions] [GROUP BY group type] group_type] [HAVING where_definitions] [ORDER BY order type] [LIMIT limit criteria] order_type] limit_criteria] [PROCEDURE proc_name(arguments)] [lock_options] [lock options]
SELECT
Moe se selektovati vie kolona, tada se moraju razdvojiti zarezom
SELECT name, price FROM products; name
WHERE uslov
= oznaava jednakost
WHERE id = 3
>, <, >=, <= i != imaju uobiajeno znaenje IS NULL ispituje da li je vrednost NULL IS NOT NULL IN dozvoljava da se definie skup vrednosti
WHERE state IN ("NY","NJ","CT")
Ovako definisan join je primer potpunog spajanja. spajanja Na svaki zapis iz prve tabele dodaje se zapis iz druge.
ORDER
Mogue je sortirati podatke pomou ORDER BY. Moe se koristiti opcije ASC ili DESC da bi se definisao nain sortiranja.
SELECT name, address FROM customers name ORDER BY name ASC
LIMIT
Moe se koristiti da bi se limitirao broj zapisa.
LIMIT 10 19
Promena vrednosti
Opta sintaksa je UPDATE [LOW_PRIORITY] [IGNORE] table SET column1=expression1, column2=expression2 column1=expression1 column2=expression2... [WHERE condition] [ORDER BY order_criteria] [LIMIT number] ; Primer
UPDATE students SET email= pera@etf.bg.ac.yu' WHERE name=Pera Peric';
IGNORE se koristi da bi se ignorisale g g greke. LOW_PRIORITY definie rad sa manjim prioritetom, ako je server zauzet eka se.
Brisanje zapisa
O t sintaksa je Opta i t k j DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM table [WHERE condition] [ORDER BY order_criteria] [LIMIT number] Lo primer
DELETE FROM customers;
Dobar primer
DELETE FROM customers WHERE customer.name Pera Peric customer.name=Pera Peric'
Moe se koristiti localhost da bi se pristupilo lokalnoj bazi podataka, podataka ali se uz odgovarajuu dozvolu moe pristupiti bilo kom Internet hostu. Rezultat funkcije je promenljiva tipa resource. Ako je dolo do greke rezultat je false greke, false.
Vrednost dobijena kao rezultat funkcije je string string. Ovo je dobar nain za proveru greaka.
Upit se ne mora zavravati simbolom ; Rezultat upita je smeten u okviru promenljive $result.
Rezultat
Vrednost dobijena sa mysql_fetch_array(result) je niz sa zapisima koji su dobijeni kao rezultat upita. Rezultat j u f R l je formi niza k ji sadri k l i i koji d i kolone k ji kojima se moe pristupa i pomou broja i pomou imena:
while($columns=mysql_fetch_array($result)) while($columns=mysql fetch array($result)) { print 'name: '.$columns['name']; print 'first column: $columns[0]; first }
Rezultat
mysql_data_seek(result, number) pomera interni pokaziva na kolonu koja je po rednom broju number dobijena sa mysql_fetch_array.
while($row=mysql_fetch_array($result)) { print 'first column: '.$row[0]; } y q_ _ ( ) mysql_data_seek($result,0);
SQL injection
// a good user's name $name = "timmy"; $query = "SELECT * FROM customers WHERE username = '$name'"; echo "Normal: " . $query . "<br />"; // user input that uses SQL Injection $name_bad $name bad = "' OR 1'"; 1 ; // our MySQL query builder, however, not a very safe one $query_bad = "SELECT * FROM customers WHERE username = '$name_bad'"; // display what the new query will look like with injection echo like, "Injection: " . $query_bad; Normal: SELECT * FROM customers WHERE username = 'timmy Injection: SELECT * FROM customers WHERE username = '' OR 1''
SQL injection
$name_evil = "'; DELETE FROM customers WHERE 1 or username = '"; // our MySQL query builder really should check for injection $query_evil = "SELECT * FROM customers WHERE username = '$name_evil'"; // the new evil injection query would include a DELETE statement echo "Injection: " . $query_evil; SELECT * FROM customers WHERE username = ' '; DELETE FROM custo e s customers WHERE 1 o use a e = ' ' or username
extra: sha1()
Ova funkcija pravi razliite kombinacije 40 karaktera iz stringa. Rezultat izvravanja sha1() ne moe se j prevesti u originalni string. g g kasnije p Ova funkcija je korisna za kreiranje ifri.
$s password=sha1($password); $s_password=sha1($password);
Sloeni upiti
SELECT customer.id from customers, orders, , , orders_items, products WHERE customers.id orders.customer_id customers.id=orders.customer id AND orders.id=orders_items.order_id AND orders_items.item_id=products_id orders items item id=products id AND products.name='Bruch Landbock'
left join
SELECT customers.name FROM customers LEFT JOIN orders ON customers.id = orders.customerid AND orders.id IS NULL
U tabelu dobijenu sa joint upisuju se vrednosti NULL za one costumers koji jo nisu sortirani.
Primer
T bl A Table
A1 A2 14 45 63 A1 A2 14 14 45 6 3 B1 2 1 6 B2 3 1 7 B1 2 6 1 B3 4 4 3
Table T bl B
B2 3 7 1 B3 4 3 4
aliasi
Slubena re AS se moe koristiti za kreiranje aliasa. Ako se eli pronai koji kupci ive u istom gradu kao neki drugi kupci
select c1.name, c2.name, c1.city FROM customers AS c1, customers AS c2 y y WHERE c1.city = c2.city AND c1.name != c2.name
Sesije
HTTP je stateless protokol. Na ovaj nain korisnik mora da izvru identifikaciju id ifik ij svaki put k d pristupa novoj ki kada i j stranici. J d nain d se i l Jedan i da implementira ova i mogunost je i korienje cookie-ja. PHP k i ti cookie-je d bi realizovao koristi ki j da li koncept svojih sopstvenih, sesija, koje olakavaju ove operacije operacije.
cookie
Cookie je atribut/vrednost odrenih podataka. Server moe da poalje cookieje kao vrednost HTTP header-a: Setheader a: Set Cookie:. Kada korisnik ponovo poseti sajt cookie se sajt, poalje natrag serveru sa HTTP header Cookie
Kreiranje Cookie-ija K i j C ki ij
Sintaksa funkcije setcookie() je:
setcookie(name [,value ,expires, path, domain, secure])
M Mora se proslediti svaki od argumenata u l diti ki d t specificiranom redosledu Moe se izbei prosleivanje argumenata value value, path, i domain, specificiranjem praznog stringa kao vrednosti Moe se izbei prosleivanje argumenata expires i secure, specificiranjem 0 kao vrednosti , p j
setcookie();
Treba pozvati funkciju setcookie() pre slanja Web browser-u bilo kakvih izlaznih informacija p Korisnik moe da bira da li e prihvatiti da se cookie upie na njegov sistem j Rezultat true funkcije se vraa ak i ako korisnik odbije cookie
Upotreba Cookie-ija U t b C ki ij
Funkcija setcookie() se moe pozivati t ki () vie puta da bi se kreirali novi cookie-iji svaki od njih se mora pojaviti pre bil ki d jih j iti bilo kakvog izlaza na Web stranici
setcookie("firstName", "Don"); setcookie("lastName", "Gosselin"); setcookie("occupation", "writer");
expires argument i t
Argument expires definie koliko dugo e cookie ostati na klijentskoj maini pre nego to se obrie Cookie-iji koji se kreiraju sa argumentom expires su dostupni samo tokom trenutne browser sesije Da bi se specificiralo vreme brisanja cookie-ija, koristi k i ti se f k ij time() funkcija
setcookie(firstName, Don, time()+3600);
path A th Argument t
Argument path dozvoljava pristup cookie-iju i drugim Web stranama na serveru Pomou path argumenata dozvoljava se deljenje cookie-ija izmeu stranica na serveru
setcookie(firstName, Don, time()+3600, /marketing/); setcookie(firstName, Don, time()+3600, /);
domain A d i Argument t
Argument domain se koristi da bi se delili cookie-iji izmeu vie servera na istom domenu Cookie-iji se ne mogu deliti izvan domena
setcookie(firstName, Don, time()+3600, /, .gosselin.com);
secure A Argument t
A Argument secure d fi i slanje cookie t definie l j ki samo pomou bezbedne Internet konekcije Vrednosti ovog argumenta su 1 (true) ili 0 (false)
setcookie(firstName, Don, time()+3600, /, .gosselin.com, 1);
itanje it j cookie-ija ki ij
Cookie-iji su dostupni trenutnoj Web stranici Cookie iji preko $_COOKIE promenljive Svakom cookie-iju se pristupa pomou imena j kao kljua u okviru asocijativnog $_COOKIE[] niza
echo $_COOKIE['firstName'];
Provera cookie-ija P ki ij
Da bi se utvrdilo da je cookie postavljen, koristi se isset() funkcija
setcookie("firstName", "Don"); setcookie("lastName", "Gosselin"); setcookie("occupation", "writer"); ( p , ); if (isset($_COOKIE['firstName']) && isset($_COOKIE['lastName']) && isset($ COOKIE['occupation'])) isset($_COOKIE[ occupation ])) echo "{$_COOKIE['firstName']} {$_COOKIE['lastName']} is a {$ COOKIE['occupation']}."; {$_ [ p ]} ;
Rad sa nizovima
Moe se koristiti i sintaksa viedimenzionalnih nizova da bi se proitala pojedinana vrednost cookie j di d t ki
setcookie("professional[0]", "Don"); setcookie("professional[1]", "Gosselin"); setcookie("professional[2]", "writer"); if (isset($ COOKIE['professional'])) (isset($_COOKIE[ professional ])) echo "{$_COOKIE['professional'][0]} {$_COOKIE['professional'][1]} is a {$_COOKIE['professional'][2]}.";
Brisanje cookie-ija Bi j ki ij
Da bi se obrisali stalni cookie-iji p nego to j pre g istekne vreme definisano u okviru expires argumenta, postavi se nova vrednost koja specificira datum iz prolosti
setcookie("firstName", "", time()-3600); setcookie( lastName , setcookie("lastName", "", time()-3600); , time() 3600); setcookie("occupation", "", time()-3600);
Startovanje sesije St t j ij
Funkcija session_start() startuje novu sesiju ili nastavlja postojeu F k ij session_start() generie j di t Funkcija i () i jedinstveni i ID sesije radi identifikacije session ID je sluajan string:
7f39d7dd020773f115d753c71290e11f
Funkcija session start() kreira tekst fajl na session_start() Web server koji se zove kao i session ID, sa prefiksom sess_
Startovanje sesije St t j ij
Funkcija session start() mora se session_start() poslati Web browseru pre bilo kakvog izlaza Ako klijent prihvata cookie-ije, session ID je pridruen trenutnom cookie iju koji se cookie-iju zove PHPSESSID
Startovanje sesije St t j ij
<?php p p session_start(); ... ?> <p><a href='<?php echo "Occupation.php?PHPSESSID=" "Occupation php?PHPSESSID " . session_id() ?>'>Occupation</a></p>
Provera sesije P ij
<?php session_start(); if (isset($_SESSION['firstName']) && isset($_SESSION['lastName']) && isset($_SESSION['occupation'])) echo "<p>" . $_SESSION['firstName'] . " " . $_SESSION['lastName'] . " is a " . $_SESSION['occupation'] . "</p>"; ?>
Brisanje sesije Bi j ij
Runo brisanje sesije: 1. Izvri se funkcija session_sta t() u c ja sess o start() 2. Koristi se array() da bi se reinicijalizovala p promenljiva $_SESSION j 3. Koristi se funkcijasession_destroy() da bi j se obrisala sesija
Sesije
Sesije su mogunosti PHP-a. PHP pamti sesiju pomou specijalnog cookie-ija PHPSESSID. D bi se aktivirala sesiji, mora se navesti Da ki i l iji i session_start(); na poetku skripta, pre bilo koje naredbe za prikaz na ekranu ekranu. Kada se sesija aktivira, moe se pristupiti pomou specijalne super-global promenljive $ SESSION $_SESSION.
$_SESSION $ SESSION
O je niz kome se moe pristupiti i Ovo postvaljati vrednosti koje se uvaju tokom sesije. sesije
if($_SESSION[user_name]) { print "welcome $ SESSION[user name]"; welcome $_SESSION[user_name] ; } else { // show users login form print login form(); login_form(); }
Kraj sesije
Da bi se uklonila sesija potrebno je pozvati naredbu session_destroy() session destroy() U okviru skripta.
visit.php
session_start(); i t t() $current=mktime(); // look at the current time if($_SESSION[last_click]) { $passed=$current-$_SESSION[last_click]; $to_print.="$passed seconds have passed since your last visit.\n"; ; $_SESSION[last_click]=$current; } else { $to_print= This $to print="This is your first visit.\n ; visit \n"; $_SESSION[last_click]=$current; } print "$t \ $t i t "$top\n$to_print\n$bottom"; i t\ $b tt " ?>
Kreiranje klasa K i j kl
Da bi se kreirala klasa u okviru PHP-a, PHP a, koristi se naredba class u okviru definicije klase j Definicija klase sadri promenljive i metode klase
class ClassName { data member and member function definitions }
Imena klasa I kl
ClassName definie ime nove klase Uobiajeno je da imena klasa poinju sa velikim slovom d bi se razlikovali od ostalih id tifik t l da lik li d t lih identifikatora
class BankAccount { data member and member function definitions } $Checking = new BankAccount();
echo ('The $Checking object is instantiated from the ' . get_class($Checking) . " class.</p>);
Svakoj funkciji se prosleuje ime i putanja do spoljanjih fajlova koji se ele upotrebiti
private
private specifikator spreava klijente da pozivaju metode klase ili menja njene lanice
public
class BankAccount { public $Balance = 0; }
class BankAccount { public $Balance = 1 + 2; }
Serijalizacija objekata S ij li ij bj k t
Serijalizacija oznaava proces konvertovanja objekta u string koji se kasnije moe ponovo koristiti Ovim postupkom se smetaju i lanovi i p p j metode klase u stringove Potrebno je poslati ime objekta funkciji serialize()
$SavedAccount = serialize($Checking);
Obrnut Ob t postupak t k
Ta bi se serijalizovani podaci konvertovali u poetni objekat, koristi se unserialize() funkcija
$Checking = unserialize($SavedAccount);
Da bi se serijalizovani objekti koristili izmeu skriptova, dodeljuju se promenljivoj koja oznaava sesiju
session_start(); session start(); $_SESSION('SavedAccount') = serialize($Checking);
Rad R d sa metodama t d
Kreira se public metoda za sve funkcije kojima treba klijent da pristupa Kreira se private metoda za sve funkcije kojima klijent ne treba da pristupa D fi i se specifikatori pristupa yza sve Definiu ifik t i i t pojedinane podatake
Primer Pi
class BankAccount { public $Balance = 958.20; public function withdrawal($Amount) { $this->Balance -= $Amount; } } if (class_exists("BankAccount")) $Checking = new BankAccount(); else exit("<p>The BankAccount class is not available!</p>"); printf("<p>Your checking account balance is $%.2f.</p>", $Checking->Balance); $Cash = 200 $ h 200; $Checking->withdrawal(200); printf("<p>After withdrawing $%.2f, your checking account balance is $%.2f.</p>", $Cash, $Checking->Balance);
Konstruktor K t kt
Konstrukor je funkcija koja se p j j j poziva p pri inicijalizaciji
class BankAccount { private $AccountNumber; private $CustomerName; private $Balance; function __construct() { $this->AccountNumber = 0; $this->Balance = 0; $this->CustomerName = ""; }
Destructor funkcija D t t f k ij
destructor funkcija se poziva u trenutku kada se objekat brie Ova funkcija oslobaa sve resurse dodeljene objektu nakon njegovog brisanja
_destruct() destruct()
destructor funkcija se poziva u dva sluaja:
Kada se skript zavrava Kada se objekat runo brie pomou funkcije unset()
Da bi se dodala destructor funkcija PHP klasi, klasi kreira se funkcija pod imenom __destruct()
Primer Pi
function __construct() { $DBConnect = new mysqli("localhost", "dongosselin", "rosebud", "real_estate") , ) } function __destruct() { $DBConnect->close(); $DBConnect >close(); }
Serijalizacija S ij li ij
Pri pozivu serialize() funkcije PHP funkcije, trai u okviru klase objekta specijalnu funkciju pod imenom __sleep() sleep() Osnovni cilj ove funkcije je da se specificira koji se lanovi klase serijalizuju
Serijalizacija S ij li ij
Ako se ne ukljui funkcija __sleep() u okviru klase, tada se u okviru funkcije serialize() k i t svi l i li () koriste i lanovi kl i klase
function __sleep() { $SerialVars = array('Balance'); return $SerialVars; }
Kada se izvrava unserialize() funkcija funkcija, PHP u okviru klase trai funkciju __wakeup() wakeup()