NAVIGACIJA |
|||||||||
Obrada formulara PHP skriptom
1. Kreirati formular u datoteci primer.html koji ce za svakog od tri studenta sadrzati tekstualna polja
ime i prezime
POENI
Oznaka smera
Trocifren broj indeksa
email-adresa
Potom kreirati PHP skript u datoteci primer.php koji ce ispisati ime i prezime i poene za prvog studenta.
<HTML>
<HEAD></HEAD>
<BODY>
<form
action="primer.php" method="post">
<p
align="center">Formu popunjava:
<input
type="text" name="v1" size="40"
maxlength="60">
</P>
<p
align="center">razno:
<input
type="text" name="r1" size="40"
maxlength="60">
</P>
<table
align="center">
<tr
bgcolor=#cccccc align="center">
<td
width=150>Student-ime i prezime</td>
<td
width=15>POENI</td>
<td
width=15>Oznaka smera</td>
<td
width=15>Trocifren broj indeksa</td>
<td
width=15>email-adresa</td>
</tr>
<tr>
<td
align="center"><input type="text" name="s1"
size="20" maxlength="20"></td>
<td
align="center"><input type="text" name="p1"
size="8" maxlength="8"></td>
<td
align="center"><input type="text" name="m1"
size="8" maxlength="8"></td>
<td
align="center"><input type="text" name="i1"
size="8" maxlength="8"></td>
<td
align="center"><input type="text" name="e1"
size="20" maxlength="20"></td>
</tr>
<tr>
<td
align="center"><input type="text" name="s2"
size="20" maxlength="20"></td>
<td
align="center"><input type="text" name="p2"
size="8" maxlength="8"></td>
<td
align="center"><input type="text" name="m2"
size="8" maxlength="8"></td>
<td
align="center"><input type="text" name="i2"
size="8" maxlength="8"></td>
<td
align="center"><input type="text" name="e2"
size="20" maxlength="20"></td>
</tr>
<tr>
<td
align="center"><input type="text" name="s3"
size="20" maxlength="20"></td>
<td
align="center"><input type="text" name="p3"
size="8" maxlength="8"></td>
<td
align="center"><input type="text" name="m3"
size="8" maxlength="8"></td>
<td
align="center"><input type="text" name="i3"
size="8" maxlength="8"></td>
<td
align="center"><input type="text" name="e3"
size="20" maxlength="8"></td>
</tr>
<tr>
<td
colspan="2" align="center">
<input
type="submit" value="Obradi"></td>
</tr>
</table>
</form>
</BODY>
</HTML>
Najpre uočite da je u atributu ACTION oznake naveden PHP skript koji će
obraditi formular. Vrednost atributa ACTION
je URL koji će biti učitan kada korisnik
pritisne dugme “submit”. Podaci koje je korisnik uneo u obrazac biće
poslati stranici na toj adresi metodom zadatom u
atributu METHOD. To će biti metoda GET(dodaje podatke na kraj URL-a)
ili metod POST (podaci se šalju zasebno).
Sledeće
što treba uočiti jesu nazivi polja u formularu –s1,p1,e1,
m1, i1, s2, p2, e2, m2, i2, s3, p3, e3, m3, i3. Ta imena će
se koristiti u PHP skriptu.
Obrada
formulara
Da bismo obradili obrazac, treba da napravimo skript pomenut u
atributu ACTION oznake FORM.
Taj
skript će se zvati primer.php.
U programu za uređivanje teksta napravite tu datoteku.
Otkucajte sledeći kôd:
<html>
<head><title>PHP
obrada</title></head>
<body>
<h1>PHP obrada</h1>
<?php
echo $_POST['v1'];
echo ", dobro došli!!!";
echo '<br>';
echo '<p>Ime prvog studenta je ';
echo $_POST['s1'];
echo '</p>';
echo '<p>Poeni prvog studenta su ';
echo $HTTP_POST_VARS['p1'];
echo
'<p>Obrađeno.</p>';
?>
</body>
</html>
Snimite datoteku i pogledajte je u browseru Weba tako što ćete
ispuniti obrazac i pritisnuti dugme “Obrada”.
Obratite pažnju na to da je PHP kôd naredaba koji ste napisali bio ugrađen u običnu HTML datoteku. Pogledajte izvorni kôd stranice u browseru Weba.
PHP
naredbe se ne vide zato što je prevodilac za PHP zamenio naredbe rezultatom.
To znači da se iz PHP-a dobija čist HTML, koji se može
gledati svakim browserem. Drugim
rečima, browser ne mora da razume PHP.
Prethodni primer ukratko prikazuje način rada serverskih
skriptova. PHP je preveden i izvršen na
Web serveru, za razliku od JavaScripta i drugih klijentskih jezika koji se
prevode i izvršavaju unutar browsera Weba na računaru korisnika.
2. FORMULAR
primer1.html –
MODIFIKACIJA datoteke primer.html iz prethodnog primera UBACIVANJEM NIZOVA ZA IMENA POLJA
<HTML>
<HEAD></HEAD>
<BODY>
<form
action="primer1.php" method="post">
<p align="center">Formu popunjava:
<input
type="text" name="v1" size="40"
maxlength="60">
</P>
<input
type="text" name="r1" size="40"
maxlength="60">
</P>
<table
align="center">
<tr
bgcolor=#cccccc align="center">
<td
width=150>Student-ime i prezime</td>
<td
width=15>POENI</td>
<td
width=15>Oznaka smera</td>
<td
width=15>Trocifren broj indeksa</td>
<td
width=15>email-adresa</td>
</tr>
<tr>
<td
align="center"><input type="text" name="s[]" size="20"
maxlength="20"></td>
<td
align="center"><input type="text" name="p[]" size="8"
maxlength="8"></td>
<td
align="center"><input type="text" name="m[]" size="8"
maxlength="8"></td>
<td
align="center"><input type="text" name="i[]" size="8"
maxlength="8"></td>
<td
align="center"><input type="text" name="e[]" size="20"
maxlength="20"></td>
</tr>
<tr>
<td
align="center"><input type="text" name="s[]" size="20"
maxlength="20"></td>
<td
align="center"><input type="text" name="p[]" size="8"
maxlength="8"></td>
<td
align="center"><input type="text" name="m[]" size="8"
maxlength="8"></td>
<td
align="center"><input type="text" name="i[]" size="8"
maxlength="8"></td>
<td
align="center"><input type="text" name="e[]" size="20" maxlength="20"></td>
</tr>
<tr>
<td
align="center"><input type="text" name="s[]" size="20"
maxlength="20"></td>
<td
align="center"><input type="text" name="p[]" size="8"
maxlength="8"></td>
<td
align="center"><input type="text" name="m[]" size="8" maxlength="8"></td>
<td
align="center"><input type="text" name="i[]" size="8"
maxlength="8"></td>
<td
align="center"><input type="text" name="e[]" size="20"
maxlength="8"></td>
</tr>
<tr>
<td
colspan="2" align="center">
<input
type="submit" value="Obradi"></td>
</tr>
</table>
</form>
</BODY>
</HTML>
Skript primer1.php koji ispisuje podatke o prvom studentu
<html>
<head><title>PHP
obrada</title></head>
<body>
<h1>PHP obrada</h1>
<?php
echo '<p>Ime prvog studenta je ';
echo $_POST['s'][0];
echo '</p>';
echo '<p>Poeni prvog studenta su ';
echo $HTTP_POST_VARS['p'][0];
echo '<p>Obrađeno.</p>';
?>
</body>
</html>
ILI ako koristimo preimenovanje nizova u kratki stil promenljivih
$a= $_POST['s'];
$b= $_POST['p'];
<html>
<head><title>PHP
obrada</title></head>
<body>
<h1>PHP obrada</h1>
<?php
$a= $_POST['s'];
$b= $_POST['p'];
echo '<p>Ime prvog studenta je ';
echo $a[0];
echo '</p>';
echo '<p>Poeni prvog studenta su ';
echo $b[0];
echo '<p>Obrađeno.</p>';
?>
</body>
</html>
Zadatak za samostalan rad:
a) Realizovati funkcionalnost primera
b) Realizovati funkcionalnost primera
3. Kreirati
formular
koji sadrzi o svakom studentu podatke iz gore navedenog primera i kreirati PHP skript KOJI SORTIRA POENE STUDENATA U RASTUĆEM PORETKU
<?php
//stampa
nesortiran niz, uociti operaciju =>
foreach ($_POST['p']
as $index => $poeni)
{
echo "<BR>poeni[$index]=$poeni";
}
echo "<BR>";
//sortiranje
sort($_POST['p']);
//ispis
sortiranog niza
foreach ($_POST['p']
as $index => $poeni)
{
echo "<BR>poeni[$index]=$poeni";
}
?>
IZVRSITI IZMENU U KODU TAKO DA NIZ SORTIRA
a)
REVERZNO
UPOTREBITE BIBLIOTEČKU FUNKCIJU rsort, tj. POZIV
sort($_POST['p']); zamenite sa
rsort($_POST['p']);
b) REVERZNO UPOTREBOM PREDEFINISANE FUNKCIJE poredi (pogledajte
bool usort ( array niz,
poziv funkcije poredi) )
function poredi($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a > $b) ? -1 : 1;
}
UPOTREBITE BIBLIOTEČKU FUNKCIJU usort, tj. POZIV
sort($_POST['p']); zamenite sa
usort($_POST['p'], “poredi”);
PAZITE DA UGRADITE UNUTAR <?php … ?> kôd
funkcije poredi.
Vezbanje:
Primer 1. NAPISATI PHP SKRIPT
KOJI CE ISPISATI SAMO NAZIVE DOMENA U e-mail ADRESAMA svih studenata
UNETIM preko formulara primer.html.
Primer 2. NAPISATI PHP SKRIPT
KOJI CE ISPISATI SAMO NAZIVE DRZAVE i U e-mail ADRESAMA svih studenta
UNETIM preko formulara primer.html. PRETPOSTAVITI DA SVE ADRESE IMAJU OZNAKU DRZAVE.
Primer 3. NAPISATI PHP SKRIPT
KOJI CE PREKO FORMULARA (polje razno) PRIMITI NAZIVE DOMENA alas.matf.bg.ac.rs
i IZMENITI ga U e-mail ADRESAMA UNETIM preko formulara primer.html.
Primer 4. NAPISATI PHP SKRIPT
KOJI CE kreirati HTML document koji sadrži tabelu sa dve kolone.
U
prvoj koloni su username studenta (formira se u obliku smer05indeks, npr.
mi05123), a u drugoj koloni su njihovi poeni.
Koristite operator tačka (.) za
nadovezivanje stringova. Podaci
se unose preko preko formulara primer.html ili primer1.html
Pogledajte primere ispitnih zadataka!!!
Dodavanje dinamičkog sadržaja
Sve
što smo do sada uradili u PHP-u mogli smo da uradimo i sa
običnim HTML-om. Glavni razlog upotrebe serverskog
skript jezika jeste dinamički sadržaj. To je vrlo važno, zato što će
sadržaj koji se menja periodično ili prema potrebama korisnika,nagnati posetioce da se vraćaju na Web lokaciju. PHP
omogućava laku izradu dinamičkog
sadržaja.
Počnimo
jednostavnom modifikacijom datoteke primer.php
dodavanjem sledećeg fragmenta:
<?php
echo '<p>DATUM OBRADE
TABELE ';
echo date('H:i, jS F');
echo '</p>';
?>
tj.
<html>
<head>
<title>PHP
obrada</title>
</head>
<body>
<h1>PHP obrada</h1>
<h2>Tabela</h2>
<?php
echo $_POST['v1'];
echo ", dobro
došli!!!";
echo '<br>';
echo 'Kontrolni kod obrade je: ';
$p4=123;
echo $p4;
echo "<p>$s2</p>";
echo '<p>Ime prvog studenta je ';
echo $_POST['s1'];
echo '</p>';
echo '<p>Poeni prvog studenta su';
echo $HTTP_POST_VARS['p1'];
echo '<p>Obrađeno.</p>';
echo '<p>DATUM OBRADE
TABELE ';
echo date('H:i, jS F');
echo '</p>';
?>
</body>
</html>
U ovom kodu koristimo ugrađenu funkciju PHP-a date,
kojom posetiocu saopštavamo datum i vreme kada je obrađen formular. Pri svakom izvršavanju skripta biće ispisane različite
vrednosti. Ishod posle jednog izvršenja skripta prikazan je npr.
DATUM OBRADE TABELE 02:08, 24th November
Pozivanje
funkcija
Pogledajmo poziv funkcije date. Ovo je opšti oblik poziva funkcija. PHP sadrži bogatu
biblioteku funkcija, koje možete da koristite u
Web aplikacijama. Većini tih funkcija ili
treba proslediti neke podatke, ili one vraćaju
neke podatke.
Poziv
funkciji:
date('H:i,
jS F')
tako da je argument ili parametar funkcije koji se
prosleđuje naveden unutar zagrada. Argumenti su ulazni podaci na
osnovu kojih funkcija daje konkretne izlazne
rezultate.
Funkcija
date
Argument
funkcije date je znakovni niz koji
predstavlja format rezultata. Svako slovo u znakovnom nizu
predstavlja jedan deo datuma i vremena.
H je sat u 24-časovno
formatu
i
je minut, s vodećom nulom ako treba
j
je dan u mesecu bez vodeće nule,
S predstavlja redni sufiks
na engleskom jeziku ( th, st, nd,…)
F je puno ime meseca
(Kompletan
spisak formata koje podržava funkcija date,
potražite u manualu na www.php.net)
Kôd
koji se sada nalazi u PHP datoteci sastoji se od:
Većinu redova u primeru čini običan HTML.
Upotreba
PHP oznaka
PHP kôd iz
prethodnog primera počeo je s
<?php i završio se sa ?>
To
je slično svim HTML oznakama zato što one sve počinju znakom “manje
od” (<) i završavaju se znakom “veće od” (>). Ti znakovi se nazivaju
PHP oznakama, koje Web serveru govore gde PHP kôd počinje i gde
se završava. Tekst između ta dva znaka prevodi se
kao PHP kôd. Tekst izvan tih
znakova prosleđuje se browseru pošto predstavlja običan HTML.
PHP
iskazi
PHP
iskazi se nalaze između početnih i završnih oznaka i određuju
šta prevodilac treba da radi. U ovom primeru koristili smo samo jedan tip
iskaza:
echo '<p>…...</p>';
Rezultat
naredbe echo je veoma jednostavan: ona štampa (ili ispisuje) tekst koji joj je prosleđen. Primetićete da se na kraju iskaza echo nalazi
znak tačka i zarez. On se koristi za razdvajanje iskaza
u PHP-u. Izostavljanje tačke i zareza je tipična
sintaksna greška.
Komentari
Komentari su upravo to što im samo ime kaže i služe kao obaveštenja
ljudima koji čitaju kôd. Komentari se mogu
upotrebiti da objasne skript, da kažu ko ga je pisao,
zašto je baš tako napisan, kada je poslednji put skript izmenjen itd.
PHP
prevodilac ignoreše tekst u komentaru, s
obzirom na to da sintaksni analizator preskače
komentare
PHP podržava komentare u stilu C, C++ i skriptova komandnog
okruženja.
Sledi
višeredni komentar u stilu jezika C, koji bi mogao da se pojavi na početku
PHP
skripta:
/*
Pera Petrović
Izmenjen:
10. novembra
Skript obrađuje studente.
*/
Višeredni
komentari treba da počinju sa /* i završavaju se
sa */. Kao ni u C-u, višeredni komentari ne mogu biti
ugnežđeni jedni u druge.
Za
komentare u jednom redu možete koristiti stil jezika C++:
echo '<p>……...</p>'; // stampaj
student parametre
ili skriptova komandnog okruženja:
echo '<p>…..</p>'; # stampaj
paramtere studenata
U
oba stila, sve iza simbola jednorednog komentara (# ili //) zanemaruje se dok se ne dođe ili do kraja reda ili do završne PHP
oznake.
Pristup promenljivama formulara
U
PHP-u se može na više načina pristupiti unetim
podacima u formularu, ali konkretan način zavisi od toga koju verziju
PHP-a koristite, kao i od parametara u datoteci php.ini.
Svakom polju formulara možete pristupiti preko istoimene PHP
promenljive. Imena
promenljivih u PHP-u možete da prepoznate, s obzirom na
to da sva počinju znakom za dolar ($)
(izostavljanje ovog znaka je uobičajena programerska greška).
U
zavisnosti od toga koju verziju PHP-a koristite i kako
je ona instalirana, postoje
tri načina pristupanja podacima u formularu
preko promenljivih: kratki, srednji i dugi stil.
Sadržaju
polja ;iji je naziv p1 (name=”p1”) možete pristupiti
na tri načina:
$p1
// kratki stil
$_POST['p1'] // srednji stil
$HTTP_POST_VARS['p1'] // dugi stil
·
Kratki stil je praktičan, ali zahteva da
konfiguracijski parametar register_globals
bude uključen (to da li je on standardno uključen
ili nije, zavisi od verzije PHP-a).
Ovaj stil dozvoljava da pravite greške zbog kojih kôd neće biti
bezbedan.
·
Srednji stil je prilično praktičan,
ali postoji tek od verzije PHP-a 4.1.0, tako da
na starijim instalacijama neće raditi.
·
Dugi stil je najopširniji. Ali i najstariji, te
zbog toga za sada radi na svakom serveru,
bez obzira na konfiguraciju.
Želeći
da dati kôd na
ovoj strani radi bez ikakvih izmena na što većem broju sistema, pa i na
studentskom serveru ALAS (gde nije dozvoljena upotreba kratkog stila), te je
zbog toga odabran dugi stil, a Vaša odluka može biti i drugačija.
PREDNOSTI I MANE KRATKOG STILA $PROMENLJIVA
HTML
formi.
da biste napravili
promenljive u skriptu. One se skriptu prosleđuju kao što se argumenti
prosleđuju funkciji.
$p1. Polje p1 u HTML formi pravi promenljivu $p1 u PHP skriptu.
datoteci php.ini bude
uključen. Od verzije 4.2.0 naviše, taj parametar
je standardno
isključen, dok je u starijim
verzijama standardno uključen.
Ovakav pristup
promenljivama je privlačan, ali pre nego što
uključite parametar
register_global, trebalo bi
razmisliti zašto ga je razvojni tim PHP-a isključio.
da napravite
programerske greške koje bi mogle da ugroze bezbednost skriptova. Ne
postoji očigledno
razdvajanje između promenljivih koje ste Vi napravili i nepouzdanih
promenljivih koje stižu
direktno od korisnika.
Ako ne budete obazrivi
i promenljivama ne dodelite početne vrednosti, korisnici
skriptova moći će
da izmene početne vrednosti promenljivih u skriptu tako što će ih
proslediti kroz formular.
ZBOG TOGA NA STUDENTSKOM SERVERU ALAS
SE KORISTI SREDNJI I DUGI STIL.
zapamtite da obavezno
zadate početne vrednosti svim lokalnim promenljivama.
PREDNOSTI I MANE SREDNJEG STILA
$_REQUEST. Jedan od nizova $_POST ili $_GET čuvaće podatke iz svih polja
formulara.
Koji niz će biti upotrebljen zavisiće
od metode koja se koristi za slanje formulara, POST
ili GET. Osim toga, svi podaci poslati preko
metode POST ili GET biće dostupni
preko niza $_REQUEST.
$_POST ['p1']. Ako je obrazac
poslat metodom GET, podaci će biti
sačuvani u elementu $_GET ['p1']. U bilo kom od ta dva slučaja, podaci će biti
dostupni u elementu $_REQUEST
['p1'].
Ovi nizovi su neki od novih opštih
promenljivih, takozvanih superglobalnih vrednosti.
Opširnije kada budemo govorili o oblasti
važenja promenljivih.
$_POST ili $_GET. Pre verzije 4.1.0, korišćeni su nizovi $HTTP_POST_VARS
i
$HTTP_GET_VARS. To nazivamo dugim
stilom, koji se može koristiti s novim i starim
verzijama PHP-a. Zbog toga što nije omiljen,
možda neće raditi na budućim verzijama.
U ovom stilu ne postoji ekvivalent nizu $_REQUEST.
PREDNOSTI I MANE
DUGOG STILA
Ako koristite dugi
stil, podacima koje su uneli korisnici moći ćete da pristupate
preko elemenata $HTTP_POST_VARS['p1']
ili $HTTP_GET_VARS['p1'].
KONKATENACIJA -
nadovezivanje niski
Upotreba iskaza echo može da bude takva da između
imena promenljive i
pratećeg teksta se nalazi tačka (.), kao u sledećem iskazu
echo $_POST[‘p1’].' indeks<br />';
Tačka je operator nadovezivanja
znakovnih nizova. Često se koristiti kada komandom echo šaljete
izlaz browseru i zbog njega ne morate da pišete po nekoliko komandi echo za
jednostavan rezultat.
Ukoliko upišete
ime promenljive (koja nije niz) u tekst pod navodnicima, PHP će
zameniti ime odgovarajućom vrednošću (nizovi su nešto složeniji, pa ćemo
kombinovanje nizova i znakovnih nizova objasniti zasebno).
Na primer:
echo
"$_POST[‘p1’] indeks<br />";
Navedeni
iskaz je ekvivalentan prvom iskazu. Oba formata su ispravna i od
Vas zavisi koji ćete koristiti. Imajte u vidu to da su
korišćeni dvostruki navodnici. Imena promenljivih ne možete na taj način stavljati u tekst pod jednostrukim
navodnicima. Ime promenljive će unutar dvostrukih
navodnika biti zamenjeno njenom vrednošću. U jednostrukim navodnicima, ime
promenljive ili bilo koji drugi tekst ostaju
neizmenjeni.
Identifikatori
Identifikatori su
imena promenljivih (imena funkcija i klasa takođe su identifikatori)
Osnovna pravila za korišćenje identifikatora su:
·
identifikatori mogu biti bilo koje dužine i mogu da se sastoje od
slova, cifara,
podvlaka i simbola za
dolar. U identifikatorima pažljivo koristite simbol za dolar
·
Identifikatori ne mogu da počinju cifrom.
·
u PHP-u se razlikuju mala i velika slova u imenima
identifikatora. $p1 nije
isto što i $P1, i pokušaj
naizmenične upotrebe jednih i drugih tipična je
programerska greška. Imena
funkcija su izuzetak od ovog pravila – njihova imena
se mogu pisati i
malim i velikim slovima.
je izbegavati. Ne
možete napraviti funkciju koja će imati isto ime
kao i neka
druga funkcija.
Promenljive
koje deklariše korisnik
Osim
promenljivih koje su prosleđene iz HTML formulara, možete da deklarišete i
koristite i sopstvene promenljive.
Jedna od karakteristika PHP-a jeste to što ne treba da deklarišete
promenljive pre nego što ih koristite. Promenljiva će
biti napravljena kada joj prvi put dodelite vrednost
Davanje
vrednosti promenljivama
Promenljivama
dajete vrednost upotrebom operatora za dodelu vrednosti, =.
Na primer
$p4 = 0;
$razlika =
0.00;
Svaki od dva navedena reda pravi promenljivu i daje joj vrednost
literala. Promenljivama možete da dodelite vrednosti drugih promenljivih, na primer:
$p5= 0;
$p4 = $p5;
Tipovi
promenljivih
Tip promenljive se
odnosi na vrstu podatka koji se u njoj nalazi.
Tipovi
podataka u PHP-u
PHP podržava sledeće
tipove podataka:
PHP 4 je dodao tri
tipa – logički, NULL i resurs. Promenljive kojima nije data vrednost, koje
nisu definisane ili koje su dobile konkretnu vrednost
NULL tipa su NULL. Izvesne ugrađene funkcije za rad s
bazama podataka vraćaju resurse. Skoro je izvesno da s tim tipom nećete direktno raditi. PHP
takođe podržava tipove pdfdoc i pdfinfo ako izvršno okruženje podržava rad s dokumentima u
formatu PDF (Portable Document Format).
PHP
je jezik s veoma slabom proverom tipova. U većini
programskih jezika, promenljive mogu da sadrže samo jedan tip podataka i one se
pre upotrebe promenljive mora deklarisati, kao što je to slučaj u C-u.
U PHP-u se tip promenljive određuje na osnovu
vrednosti koja joj je dodeljena.
Na primer, kada
smo napravili $p5 i $razlika, njihovi početni tipovi su bili određeni ovako:
$p5 = 0;
$razlika =
0.00;
S obzirom na to da smo promenljivoj $p5 dodelili vrednost 0,
što je ceo broj, to je sada promenljiva celobrojnog tipa. Na
isti način, promenljiva $razlika sada je u formatu pokretnog zareza dvostruke
preciznosti.
PHP skriptu bismo sada mogli da dodamo sledeći
red:
$razlika =
'Pozdrav';
Promenljiva
$razlika
bi u
tom slučaju bila znakovni niz. PHP menja tip promenljive prema onome što se u
njoj nalazi.
Konstante
Mogućnost
promene tipova u hodu može biti veoma korisna. Ne zaboravite da
PHP zna koji ste tip podataka stavili u promenljive. PHP će
vratiti podatke upisanog tipa prilikom čitanja promenljive.
Konverzija
tipova - CAST
Operator za
konverziju omogućava promenu tipa promenljive ili
vrednosti. Taj process se odvija identično kao u C-u.
Privremeni tip stavite u zagradu ispred promenljive koju želite da konvertujete.
Na primer:
$p5 = 0;
$p = (double)$p5;
Drugi
red ima interpretaciju “pročitaj vrednost promenljive $p5, tumači je
kao vrednost tipa double i smesti je u $p”. Tip promenljive $p biće
double. Tip konvertovane promenljive se ne menja, tako da $p5 ostaje celobrojnog
tipa.
Promenljive
promenljive
PHP podržava još
jedan tip promenljive – promenljivu promenljivu (engl. Variable variable). Takve promenljive omogućavaju
da ime promenljive menjate dinamički. (Kao što vidite,
PHP u ovoj oblasti daje dosta slobode – svi jezici će
dozvoliti da
menjate vrednost
promenljive, ali nema mnogo jezika koji će dozvoliti da menjate tip
promenljive. Još je manje jezika koji će
dozvoliti da menjate ime promenljive.)
Promenljive
promenljive se dobijaju kada se vrednost jedne promenljive koristi kao ime
druge. Na primer:
$varname =
'p4';
Umesto
$p4
možete
da koristite $$varname. Na primer, promenljivoj $p4 možete da dodelite vrednost sledećim
iskazom:
$$varname = 5;
što je ekvivalentno
izrazu:
$p4 = 5;
Promenljive promenljive
mogu izgledati pomalo neobično, ali ćemo ih
objasniti nešto kasnije. Umesto da svaku promenljivu formulara navodite i
koristite zasebno,
možete da upotrebite
ciklus i promenljivu i da ih sve obradite automatski. U delu primera sa ciklusima for postoji primer koji prikazuje tu tehniku.
Konstante
Kao
što ste videli ranije, vrednost koja se čuva u promenljivoj možete da
menjate. Takođe možete i da deklarišete konstante.
Konstanta predstavlja vrednost isto kao i promenljiva, ali
se određuje jednom i više se ne može menjati.
Cene
artikala možete čuvati kao konstante. Te konstante možete da definišete
upotrebom
funkcije define.
define('VREDNI',
100);
define('PROSEK', 10);
define('LENJI', 4);
Primetićete
da su sva imena konstanti ispisana velikim slovima. Ta konvencija,
pozajmljena iz C-a, olakšava razlikovanje promenljivih i konstanti. Ona nije
obavezna, ali će olakšati čitanje i
održavanje koda.
Sada
imate tri konstante koje se mogu upotrebiti za izračunavanje vrednosti.
Važna
razlika između konstanti i promenljivih jeste ta da se ispred konstante ne
piše simbol za dolar. Ako želite da koristite
vrednost konstante, upišite samo njeno ime. Na primer, da biste
upotrebili konstantu koju ste upravo napravili, napisaćete:
echo VREDNI;
Izvršno
okruženje za PHP definiše velik broj konstanti. Možete ih
pregledati upotrebom
komande phpinfo:
phpinfo();
koja će prikazati
spisak unapred definisanih konstanti i promenljivih, kao i neke druge korisne
informacije.
Oblast
važenja promenljive
Izraz oblast
važenja (engl. scope) odnosi se na mesta u
skriptu na kojima je konkretna promenljiva vidljiva. U PHP-u postoje četiri
tipa oblasti važenja:
·
Ugrađene superglobalne promenljive, vidljive su svuda u
skriptu.
·
Globalne promenljive, deklarisane su u skriptu i vidljive su svuda u
skriptu, ali ne
i unutar funkcija.
·
Promenljive upotrebljene unutar funkcija lokalne su za te funkcije.
·
Promenljive upotrebljene unutar funkcija koje su deklarisane kao
globalne, ukazuju
na globalnu
promenljivu istog imena.
Od PHP-a 4.2
nadalje, nizovi $_GET i $_POST, kao i neke druge posebne promenljive imaju posebnu oblast važenja.
To su superglobalne promenljive koje su vidljive svuda, kako
unutar tako i izvan funkcija.
Kompletan spisak
superglobalnih promenljivih je:
·
$GLOBALS – niz svih globalnih promenljivih
·
$_SERVER – niz promenljivih
iz serverskog okruženja
·
$_GET – niz promenljivih
koje se prosleđuju skriptu metodom GET
·
$_POST – niz promenljivih
koje se prosleđuju skriptu metodom POST
·
$_COOKIE – niz kolačića
·
$_FILES – niz promenljivih
koje se odnose na datoteke poslate drugom računaru
·
$_ENV – niz promenljivih
okruženja
·
$_REQUEST – niz svih
promenljivih koje unosi korisnik
·
$_SESSION – niz promenljivih
sesije
Sve
ove promenljive opisaćemo kasnije, kako se budu pojavljivale u primerima.
Operatori
Operatori su
simboli koji omogućavaju izvršavanje operacija nad
vrednostima i promenljivama.
Već smo
spomenuli dva operatora, operator dodele i operator nadovezivanja znakovnih
nizova.
Operatori mogu da
imaju jedan, dva ili tri argumenta, s tim što većina
ima dva. Na primer, operator dodele ima dva argumenta – memorijsku lokaciju na levoj strani simbola = i izraz na desnoj strani. Ti
argumenti se nazivaju operandi – vrednosti kojima se
operiše.
Aritmetički
operatori
Aritmetički
operatori su prilično jednostavni – to su obični znakovi za računske
operacije,
Rezultat
operacije svakog operatora može se sačuvati. Na primer,
$result = $a +
$b;
Sabira
se i oduzima kao u matematici. Rezultat tih operacija je sabiranje, odnosno
oduzimanje vrednosti koje se
nalaze u promenljivama $a i $b.
Znak za oduzimanje
(-) možete da koristite kao unarni operator (operator sa
jednim
argumentom, odnosno
operandom) za negativne brojeve, na primer,
$a = -1;
+ sabiranje $a + $b
- oduzimanje $a - $b
* množenje $a * $b
/ deljenje $a / $b
% modulo $a % $b
Množenje
i deljenje takođe se rade kao i matematičke operacije istog imena. Obratite pažnju na to da se kao znak za množenje koristi zvezdica, a kao
znak za deljenje kosa crta. Operator modulo vraća ostatak celobrojnog
deljenja promenljive $a promenljivom
$b. Pogledajte sledeći
odlomak:
$a = 27;
$b = 10;
$result =
$a%$b;
Vrednost
promenljive $result biće ostatak celobrojnog deljenja 27 sa
10, dakle 7.
Trebalo bi da
imate u vidu da se aritmetički operatori obično primenjuju na brojeve. Ako ih primenite na
znakovne nizove, PHP će pokušati da konvertuje znakovni niz u broj.
Ukoliko znakovni niz sadrži “e” ili “E”, biće
konvertovan u tip double, dok
će u protivnom biti
konvertovan u celobrojni tip. PHP će upotrebiti
cifre na početku znakovnog niza kao vrednost – ako ih nema, vrednost
znakovnog niza biće nula.
Operator
nad znakovnim nizovima
Već ste
videli i upotrebili jedini operator nad znakovnim
nizovima (engl. string operator). Operator nadovezivanja
znakovnih nizova možete upotrebiti za spajanje dva niza, otprilike isto kao što
biste upotrebili operator sabiranja za sabiranje dva broja.
$a =
"Pera ";
$b = 'Peric';
$result = $a.$b;
Promenljiva $result će u tom slučaju
sadržati znakovni niz “Pera Peric”.
Operatori
dodele
Već ste
videli da je = osnovni operator dodele. O tom znaku uvek govorite kao o operatoru
dodele i čitajte ga
kao “dobija vrednost”. Na primer:
$p4 = 0;
Navedeno
bi trebalo čitati kao “$p4 dobija vrednost nula”. To je znacajno
zbog razlikovanja dodele od operatora poređenja.
Vrednost
operacije dodele
Operator
dodele vraća zadatu vrednost izraza, slično drugim operatorima.
$a + $b
je rezultat
sabiranja promenljivih $a i $b. Slično tome, vrednost izraza
$a = 0;
je nula.
To omogućava
da napišete izraze poput:
$b = 6 + ($a =
5);
Promenljiva $b dobija vrednost
11, a za sve operatore dodele važi: vrednost čitavog iskaza dodele je
vrednost koja je dodeljena operandu na levoj strani.
Zagrade
možete upotrebiti da bi se povećao prioritet izračunavanja podizraza,
kao što se radi u matematici.
Kombinovani
operatori dodele
Osim
jednostavnog operatora dodele postoji i skup kombinovanih operatora dodela.
Svaki od njih je skraćeni zapis operacije nad promenljivom i
upisivanja rezultata u tu promenljivu. Na primer:
$a += 5;
isto je kao da ste
napisali:
$a = $a + 5;
Kombinovani
operatori dodele postoje za svaki aritmetički operator i za operator
nadovezivanja znakovnih nizova.
Prefiksno
i sufiksno uvećanje i umanjenje
Prefiksni i
sufiksni operatori uvećanja ++ i umanjenja -- slični su operatorima += i -=, uz neke specifičnosti.
Operatori
uvećanja imaju dva efekta – oni povećavaju vrednost i dodeljuju je.
Pogledajte ovo:
$a=4;
echo ++$a;
U
drugom redu koristi se prefiksni operator uvećanja, koji se tako zove zato
što se ++
pojavljuje
ispred $a. Prvo se povećava
vrednost $a
za 1
i, drugo, vraća se uvećana vrednost. U ovom slučaju
promenljiva $a je povećana na 5 i zatim je vrednost 5
vraćena
i ispisana. Vrednost
čitavog izraza je 5 (imajte u vidu da je prava vrednost $a izmenjena: ne vraćamo samo $a + 1).
Međutim,
ako je ++
posle
$a, to je sufiksni
operator uvećanja i ima drugačiji efekat.
Pogledajte ovo:
$a=4;
echo $a++;
Vrednost
je prvo vraćena i ispisana, a zatim povećana. Vrednost čitavog
izraza je 4 i to je vrednost koja će biti
ispisana. Vrednost $a posle ovog iskaza je 5. Kao
što verovatno pretpostavljate, slično se ponaša i operator --, s tim što se vrednost $a smanjuje, a ne povećava.
+= $a += $b $a
= $a + $b
-= $a -= $b $a
= $a - $b
*= $a *= $b $a = $a * $b
/= $a /= $b $a = $a / $b
%= $a %= $b
$a = $a % $b
.= $a .= $b $a
= $a . $b
Reference
Novost
u PHP-u 4 je operator referenci (&), koji se može koristiti zajedno s dodelom. Kada se jedna promenljiva dodeljuje drugoj, obično se pravi
kopija prve promenljive i ta se kopija čuva negde drugde u memoriji.
Na primer:
$a = 5;
$b = $a;
Navedeni redovi
prave drugu kopiju vrednosti u promenljivoj $a i smeštaju je u $b.
Ako
zatim izmenite vrednost promenljive $a, $b se neće promeniti.
$a = 7; // $b
je još uvek 5
Kopiranje možete
da izbegnete upotrebom operatora reference &. Na primer:
$a = 5;
$b = &$a;
$a = 7; // $a
i $b sada su 7
Operatori
poređenja
Operatori
poređenja se koriste za poređenje dve vrednosti. Izrazi koji
koriste te operatore vraćaju logičku
vrednost u zavisnosti od rezultata poređenja.
Operator
jednakosti
Operator poređenja
==
(dva
znaka jednakosti) omogućava da proverite da li su dve
vrednosti jednake. Na primer:
$a == $b
proverava da li su
vrednosti $a i $b iste. Rezultat koji vraća ovaj izraz biće
true ako
su jednaki, a false
ako nisu.
Ovaj izraz se lako
brka sa operatorom dodele =. Greška neće
biti prijavljena, ali obično nećete dobiti ni
željeni rezultat. Vrednosti koje nisu nula pretvaraju se u
logičku vrednost true, a nula se pretvara u logičku vrednost false.
Na primer, ako dve promenljive imaju ovakve početne vrednosti:
$a = 5;
$b = 7;
rezultat izraza $a = $b biće true. Zašto? Vrednost izraza $a = $b vrednost je dodeljena levoj strani, što je u
ovom slučaju 7. To je vrednost koja nije nula, pa je rezultat izraza true. Ukoliko biste
napisali to umesto izraza $a == $b, što daje false, uveli
biste u kôd logičku
grešku koja se veoma teško pronalazi. Uvek proverite kako
koristite ova dva operatora i da li ste upotrebili ispravan operator.
Ova greška se lako
pravi, zato OPREZ!!!
Logički
operatori
Logički
operatori se koriste za kombinovanje rezultata logičkih uslova. Na primer, treba
da utvrdite da li je vrednost promenljive $a između 0 i
100. Trebalo bi da proverite uslove $a >= 0 i $a <= 100, upotrebom
operanda konjunkcije:
$a >= 0
&& $a <=100
PHP
podržava logičke operacije konjunkcije, disjunkcije, isključive
disjunkcije i negacije.
Operatori and i or imaju niži
prioritet od operatora && i ||. O prioritetima će više reči biti U KURSU IZ PROGRAMSKIH JEZIKA.
Operator
Ime Upotreba
== jednako $a == $b
=== identično $a === $b
!= različito $a != $b
<> različito $a <> $b
< manje od $a < $b
> veće od $a > $b
<= manje od ili jednako $a <= $b
>= veće od ili
jednako $a
>= $b
! negacija !$b Vraća true ako je $b false i obrnuto
&& konjunkcija $a && $b Vraća true ako su $a i $b true; u protivnom false
|| disjunkcija $a || $b Vraća true ako su $a ili $b ili oba true; u protivnom false
and konjunkcija $a and $b Isto kao &&, ali s nižim
prioritetom
or disjunkcija $a or $b Isto kao ||, ali s nižim
prioritetom
Operatori
nad bitovima
Operatori nad bitovima omogućavaju da ceo broj obrađujete
kao niz bitova u memoriji. Verovatno za njih u PHP-u nećete
naći veliku primenu.
& konjunkcija $a & $b bitovi koji su
aktivni u $a i $b aktivni su u rezultatu
| disjunkcija $a | $b bitovi koji su
aktivni u $a ili $b aktivni su u rezultatu
~ negacija ~$a bitovi koji su
aktivni u $a nisu aktivni u rezultatu i obrnuto
^ isključiva disjunkcija $a ^ $b bitovi koji su
aktivni ili u $a ili u $b ali neu oba, aktivni su u rezultatu
<< pomeranje ulevo $a << $b
pomera
bitove $a
ulevo
za $b
mesta
>> pomeranje udesno $a >> $b
pomera
bitove $a
udesno
za $b
mesta
Osim operatora
koje smo do sada predstavili, postoje i drugi.
Zarez
se koristi za razdvajanje argumenata funkcije i stavki u spisku.
Dva posebna
operatora, new i ->, koriste se za pravljenje objekta, odnosno pristup članovima
objekata.
Operator elementa niza[]omogućava
pristupanje elementima niza. Nekada se za to koristi i
operator =>.
Postoje još tri
operatora koje će biti ukratko opisani.
Uslovni
operator
Operator
?: radi isto kao i u
C-u. Ima oblik:
uslov
?
vrednost ako je uslov ispunjen : vrednost ako nije
ispunjen
Uslovni operator
je sličan verziji izraza iskaza if-else
Jednostavan primer
je:
($ocena > 50 ? 'Položio' : 'Pao');
Ovaj izraz
studentskim ocenama dodeljuje 'Položio' ili 'Pao'.
Operator
potiskivanja greške
Operator
potiskivanja greške, @, može se koristiti ispred mnogih izraza. Na primer,
$a = @(57/0);
Bez
operatora @ izvršno okruženje bi ispisalo upozorenje “deljenje nulom”
(probajte). Sa operatorom, greška je potisnuta.
Ako na ovaj način potisnete upozorenja, trebalo bi da
napišete kôd za obradu grešaka.
Ako
je uključena konfiguracijska opcija track_errors, poruka o grešci biće u
globalnoj promenljivoj $php_errormsg.
Operator
izvršenja
Reč
je zapravo o paru operatora – paru inverznih polunavodnika (``). Inverzni
polunavodnik
se obično
nalazi na istom tasteru gde i simbol ~.
PHP će pokušati da izvrši sve što se nalazi između
inverznih polunavodnika u komandnom okruženju na serveru. Izlazni
podaci komande predstavljaju vrednost izraza.
Na primer, u
operativnim sistemima tipa Unix možete da upotrebite:
$out = `ls
-la`;
echo
'<pre>'.$out.'</pre>';
Ekvivalent tome na Windows serveru bilo bi:
$out = `dir c:`;
echo
'<pre>'.$out.'</pre>';
Obe verzije će smestiti spisak datoteka iz direktorijuma u
promenljivu $out.
Postoje i drugi načini
izvršavanja komandi na serveru.
PRIMER UPOTREBE OPERATORA NA FORMULARU
primer.html
Sada
znate kako da koristite operatore u PHP-u, pa ste spremni da iznova kreirate
datoteku primer.php.
Dodajte sledeći
odlomak na kraj PHP skripta:
$svi = 0;
$svi = $_POST[‘p1’] + $_POST[‘p2’] + $_POST[‘p3’];
echo 'Suma:
'.$svi.'<br />';
$p4 = 0.00;
define('VREDAN',
100);
define('PROSEK', 10);
define('LENJ', 4);
$p4 = $_POST[‘p1’] * VREDAN
+ $_POST[‘p2’] * PROSEK
+ $_POST[‘p3’] * LENJ;
echo 'Subtotal:
$'.number_format($totalamount,3).'<br />';
//$tr = 0.10;
// tolerantnost je npr. je
20%
//$p4 = $p4 *
(1 + $tr);
//echo 'UKUPNO
+ TOLERANTNOST: $'.number_format($p4,2).'<br
/>';
Ako osvežite
stranicu u prozoru browsera, trebalo bi da vidite rezultat upotrebe smo
nekoliko operatora: operatora sabiranja (+) i množenja(*)
za izračunavanje zbira, i operator nadovezivanja (.) za definisanje
rezultata.
Takođe,
upotrebili smo funkciju number_format za formatiranje zbira. To je funkcija iz PHP-ove biblioteke Math.
Ako pažljivo
pogledate izraze, možda ćete se zapitati zašto su računati baš tim
redosledom. Pogledajte, na primer, sledeći iskaz:
$totalamount =
$p1 * VREDNI
+ $oilqty *
PROSEK
+ $sparkqty *
LENJ;
Izgleda da je
ukupna suma
Odgovor
je u prioritetima operatora, dakle u redosledu njihovog izračunavanja.
Prioriteti
i asocijativnost: izračunavanje izraza
Operator ima
prioritet, ili redosled kojim se izračunava.
Operatori takođe
imaju asocijativnost – redosled kojim će
operatori istog prioriteta
biti izračunati.
To je obično sleva nadesno (skraćeno se naziva levo), zdesna nalevo
(skraćeno desno), ili asocijativnost nije bitna (u tabeli
n/b).
U izrazu možete
upotrebiti neograničen broj zagrada, a uvek će
se prvo izračunavati
koje su one najdublje
ugnežđene.
Funkcije
koje upravljaju promenljivama
Pre nego što
napustimo svet promenljivih i operatora, pogledaćemo funkcije koje
upravljaju promenljivama.
Postoji biblioteka funkcija koja omogućava da na
razne
načine obrađujete
promenljive i ispitujete ih.
Ispitivanje
i menjanje tipova promenljivih
Većina ovih
funkcija se odnosi na proveru tipova.
Dve
najopštije funkcije su gettype i settype. One imaju sledeće prototipove– prototipi
opisuju koje argumente funkcija očekuje i šta vraća.
string
gettype(promenljiva);
bool settype
(promenljiva, tip);
Funkcija gettype utvrđuje tip
promenljive i vraća znakovni niz s tipom imena ili
porukom “tip nepoznat” ako to nije nijedan od poznatih tipova.
Funkcija settype menja tip prosleđene
promenljive u tip koji opisuje prosleđeni znakovni niz u drugom argumentu.
Na primer:
$a = 56;
echo
gettype($a).'<br />';
settype($a, 'double');
echo
gettype($a).'<br />';
Kada se gettype poziva prvi put, $a je celobrojnog
tipa. Nakon što se pozove settype, tip će biti
promenjen u double.
Postoje
i funkcije za ispitivanje određenih tipova. Sve vraćaju logičke vrednosti.
Te funkcije su:
·
is_array
·
is_double, is_float, is_real (sve je to ista
funkcija)
·
is_long, is_int, is_integer (sve je to ista
funkcija)
·
is_string
·
is_object
Ispitivanje
stanja promenljive
Postoji
nekoliko načina za ispitivanje stanja promenljive.
Funkcija isset ima sledeći
prototip:
bool
isset(promenljiva);
Funkcija
isset
vraća
true
ako
je promenljiva definisana, a u suprotnom vraća false.
Definiciju
promenljive možete da proširite funkcijom unset koja ima sledeći prototip:
void
unset(promenljiva);
Funkcija unset briše promenljivu
koja joj je prosleđena.
Konačno,
postoji i empty. Ona proverava da li promenljiva postoji i da li ima vrednost koja
je nula odnosno prazna je, i vraća true ili false. Funkcija empty ima sledeći
prototip:
boolean empty(mixed
var);
Pogledajmo
primer u kojem se koriste navedene funkcije.
Skriptu privremeno
dodajte sledeći kôd:
echo
isset($_POST[‘p1’]);
echo
isset($_POST[‘e2’]);
echo
empty($_POST[‘p1’]);
echo
empty($_POST[‘z1’]);
Osvežite
stranicu da biste videli rezultat.
Promenljiva $z1
ne postoji, pa će isset dati rezultat false,
a empty rezultat true.
To može biti korisno ako želite da
proverite da li je korisnik popunio odgovarajuća polja u formularu.
Promena
tipa promenljivih
Tri funkcije imaju
isti efekat kao i konverzija promenljive:
int
intval(promenljiva);
float doubleval(promenljiva);
string
strval(promenljiva);
Sve funkcije vraćaju
vrednost prosleđene promenljive, konvertovanu u odgovarajući tip
(redom: u ceo broj, u realan broj i u znakovni niz).
U dokumentaciji na
lokaciji php.net, spominje se tip podataka mixed. Takav tip ne postoji, ali kako PHP fleksibilno upravlja tipovima, mnoge funkcije
se mogu primeniti na vrednosti raznih tipova (ili bilo kog tipa). Argumenti u
kojima su dozvoljeni razni tipovi, označeni su
tipom mixed.
Upravljačke
strukture
Upravljačke strukture
omogućavaju upravljanje tokom izvršenja programa ili
skripta.
Donošenje
odluka u uslovnim strukturama
Ako želite razumno
da odgovorite na ono što korisnik unosi, kôd mora
donositi odluke. Konstrukcije koje programu govore da donosi
odluke, nazivaju se uslovne strukture.
Iskaz if
Iskaz if možete da
upotrebite za donošenje odluke prema uslovu. Ako je uslov ispunjen, sledeći
deo koda će biti izvršen – u suprotnom biće
preskočen. Uslovi u iskazima if nalaze se u zagradama.
Na
primer, ukoliko obrazac nije popunjen ispravno, umesto da kaže da se obradi,
stranica bi mogla da ispiše neku korisniju poruk tipa “Niste ništa popunili”. To se lako
postiže sledećim iskazom if:
if( $svi == 0
)
echo 'FALE
INDEKSI!<br />';
Uslov koji
koristimo je $svi == 0. Ne zaboravite da se operator jednakosti
(==) ponaša drugačije
od operatora dodele =.
Uslov $svi == 0 će biti ispunjen ako
je $svi
nula.
Kada uslov ima vrednost true, biće izvršen iskaz echo.
Blokovi
naredaba
Često
unutar jednog uslovnog iskaza, kao što je if, treba obuhvatiti više iskaza. Nema potrebe da
se ispred svakog stavlja nov iskaz if. Umesto toga,
možete grupisati iskaze u blok. Da biste grupu
deklarisali kao blok, stavite je u vitičaste
zagrade:
if( $svi == 0 )
{
echo '<font
color=red>';
echo 'FALE
INDEKSI!<br />';
echo
'</font>';
}
Tri reda unutar
vitičaste zagrade sada čine blok. Kada je
uslov ispunjen, sva tri reda će biti izvršena.
Kada uslov nije ispunjen, sva tri reda će biti
zanemarena.
Iskazi
else
Često
ćete hteti da odlučite koji skup mogućih radnji želite da se
izvede. Iskaz else omogućava da definišete alternativnu radnju koju treba
preduzeti ako uslov iskaza if nije ispunjen. Želite da
ukažete korisnicima da nisu ništa uneli.
Ako drugačije
rasporedite kôd i dodate jedan iskaz else, moći ćete da prikažete
upozorenje ili opis unetog.
if( $svi == 0 )
{
echo 'FALE
INDEKSI!<br />';
}
else ...........
{
echo
$_POST[‘p1’].' <br />';
}
Iskazi
elseif
Za mnoge odluke
koje donosite postoje više od dve opcije. Možete da napravite redosled više opcija upotrebom iskaza elseif.
Taj iskaz je kombinacija iskaza else i if. Program može da proverava
svaki uslov po zadatom redosledu dok ne nađe onaj koji je ispunjen.
Možete da
napravite kôd za obradu upotrebom uslova i iskaza if i else. Dva uslova kombinujete u jedan pomoću operatora konjunkcije (&&).
if( $p1 < 10 )
$vr = 100;
elseif( $p1 >= 10
&& $p1 <= 49 )
$vr = 8;
elseif( $tireqty
>= 50 && $tireqty <= 99 )
$vr = 1;
Reč elseif možete da kucate
tako ili s razmakom (else if) – oba načina
su ispravna.
Ako nadovezujete
više iskaza elseif, imajte u vidu da će samo jedan blok
ili iskaz biti izvršeni.
Iskaz
switch
Iskaz switch radi slično
kao iskaz if, ali dozvoljava da uslov ima više od dve
vrednosti.
U iskazu if, uslov može biti true ili false. U iskazu switch uslov može imati čitav
niz različitih vrednosti, dokle god daje jednostavan tip (integer, double ili znakovni niz). Za svaku značajnu vrednost treba da
napišete iskaz case i, eventualno,podrazumevani iskaz case za sve ostale
vrednosti.
Ubacite sledeći
HTML u formular:
<tr>
<td>OPCIJE</td>
<td><select name="find">
<option
value = "a">HTML
<option
value = "b">PHP
<option
value = "c">ASP
<option
value = "d">XML
</select>
</td>
</tr>
Navedeni HTML blok je dodao novu promenljivu formulara čija vrednost će
biti
"a", "b", "c" ili "d". Tu promenljivu mogli biste da
obradite nizom iskaza if i else
na sledeći način:
if($find == 'a')
echo
'<p>Staticki Web.</p>';
elseif($find == 'b')
echo '<p>PHP
skript.</p>';
elseif($find == 'c')
echo '<p>ASP
skript.</p>';
elseif($find == 'd')
echo
'<p>Markerski jezici.</p>';
Umesto toga, mogli
biste da napišete iskaz switch
switch($find)
{
case 'a' :
echo '<p>
Staticki Web.</p>';
break;
case 'b' :
echo '<p>
PHP skript.</p>';
break;
case 'c' :
echo '<p>
ASP skript.</p>';
break;
case
'd' :
echo '<p>
Markerski jezici.</p>';
break;
default
:
echo '<p>BEZ
IZBORA</p>';
break;
}
Iskaz switch se ponaša malo
drugačije od iskaza if i else. Iskaz if deluje na samo jedan iskaz, osim ako ste upotrebili vitičaste
zagrade i tako napravili blok iskaza. Iskaz switch se ponaša drugačije.
PHP će izvršavati iskaze od odgovarajuće
oznake case
do
iskaza break. Bez iskaza break, izvršavaju se
svi iskazi posle odgovarajuće oznake
case. Kada se dođe
do iskaza break, biće izvršen red koda koji sledi posle iskaza switch.
Ciklus:
ponavljanje radnji – automatizovanje
Ako postoji nešto
što treba na isti način da se uradi mnogo puta,
možete da upotrebite
ciklus za ponavljanje
dela programa.
Listing TABELA OCENA
<html>
<body>
<table border="0" cellpadding="3">
<tr>
<td bgcolor="#CCCCCC"
align="center">POENI</td>
<td bgcolor="#CCCCCC"
align="center">OCENA</td>
</tr>
<tr>
<td align="right">49</td>
<td align="right">5</td>
</tr>
<tr>
<td align="right">59</td>
<td align="right">6</td>
</tr>
<tr>
<td align="right">69</td>
<td align="right">7</td>
</tr>
<tr>
<td align="right">79</td>
<td align="right">8</td>
</tr>
<tr>
<td align="right">89</td>
<td align="right">9</td>
</tr>
</table>
</body>
</html>
Ciklus
while
Najjednostavnija
vrsta ciklusa u PHP-u je while. Kao i iskaz if, ona se oslanja na
uslov. Razlika između ciklusa while i iskaza if je u tome što iskaz if izvršava blok koda ako je uslov ispunjen, a ciklus while izvršava blok
dokle god je uslov ispunjen.
Obično
koristimo ciklus while kada ne znamo koliko iteracija će biti
potrebno. Kada je broj ciklusa unapred poznat, koristi se
ciklus for.
Osnovna struktura
ciklusa while
je:
while( uslov )
izraz;
Sledeća
ciklus while
prikazaće
brojeve od 1 do 5.
$num = 1;
while ($num <= 5
)
{
echo
$num."<br />";
$num++;
}
Na
početku svake iteracije proverava se uslov. Ako uslov nije
ispunjen, izraz neće biti izvršen i ciklus će
se završiti, a zatim se prelazi na iskaz koji sledi iza ciklusa.
U listingu koristi
se ciklus while za pravljenje nove tabele OCENA
<body>
<table
border="0" cellpadding="3">
<tr>
<td
bgcolor="#CCCCCC" align="center">POENI</td>
<td
bgcolor="#CCCCCC" align="center">OCENA</td>
</tr>
<?
$poen = 49;
while ($poen <=
100 )
{
echo
"<tr>\n <td align"="right">$poen</td>\n";
echo
" <td align="right">". $poen / 10 ."</td>\n</tr>\n";
$poen += 10;
}
?>
</table>
</body>
</html>
Da bi dobijeni
HTML kôd bio čitljiv, mora da sadrži znakove za nov
red i razmake. Kao što je već rečeno, browseri će
zanemariti te znake, ali su za ljude oni važni. Ako ne
dobijamo ono što smo očekivali, često pregledamo HTML kôd.
Ciklusa
for i foreach
Način na koji smo koristili ciklus while veoma je uobičajen.
Prvo zadajte početnu vrednost brojača i zatim pre
svake iteracije ispitujte taj brojač u uslovu. Na
kraju svake iteracije menjate brojač.
Takvu vrstu
ciklusa možete da napišete i u kompaktnijem obliku upotrebom ciklusa
for.
Osnovna struktura
ciklusa for
je:
for( izraz1; uslov; izraz2)
izraz3;
izraz1
se
izvršava jednom na početku. U njemu obično zadajete početnu
vrednost
brojača.
Uslov se proverava pre
svake iteracije. Ako nije ispunjen, iteracija prestaje.
U uslovu obično
proveravate da li je brojač došao do granice.
Izraz2 se izvršava na početku
svake iteracije. On obično menja vrednost brojača.
Izraz3 se izvršava jednom
po iteraciji. Taj izraz je obično blok koda i
sadrži najveći
deo koda ciklusa.
Ciklus while iz listinga sada
možete da napišete kao ciklus for:
<?
for($poen = 49;
$distance <= 100; $distance += 10)
{
echo
"<tr>\n <td align='right'>$poen</td>\n";
echo " <td
align='right'>". $poen / 10 ."</td>\n</tr>\n";
}
?>
Dodajmo da možete
da kombinujete promenljive promenljivih s ciklusom for radi
iteracije kroz niz
ponavljajućih polja formulara. Ako se, na primer,
polja zovu name1,
name2, name3 itd,
možete da ih obradite na sledeći način:
for ($i=1; $i
<= $numnames; $i++)
{
$temp=
"name$i";
echo
$$temp.'<br />'; // obrađivanje vrednosti iz polja
}
Dinamičkim
pravljenjem imena promenljivih možete redom da pristupite svakom
polju. Osim ciklusa for, postoji i ciklus foreach, namenjena radu s nizovima.
Ciklusa
do..while
Poslednji tip
ciklusa koji ćemo spomenuti ponaša se nešto drugačije. Opšta
struktura
ciklusa do..while je:
do
izraz;
while( uslov );
Ciklus do..while se razlikuje od ciklusa while zbog toga što se
uslov proverava na kraju. To znači da se u ciklusu do..while iskaz ili blok unutar ciklusa uvek izvršavaju
najmanje jednom.
Čak i ako na početku uslov nije ispunjen i ako nikada ne može da
bude ispunjen,
ciklus će biti
izvršena jednom pre nego što proveri uslov i završi se.
$num = 100;
do
{
echo $num.'<br
/>';
}
while ($num < 1
);
Izlazak
iz upravljačke strukture
Postoje tri načina
za prekidanje dela koda:Da biste prekinuli izvršenje ciklusa,
upotrebite iskaz break, kao što smo rekli u odeljku o iskazu switch. Ako u ciklusu
koristite iskaz break, izvršenje skripta će se nastaviti od
reda koji sledi posle ciklusa.
Ako želite da skočite
na sledeću iteraciju ciklusa, upotrebite iskaz continue.
Da
biste završili izvršenje čitavog PHP skripta, upotrebite exit. To je obično
korisno kada se
proveravaju greške. Na primer:
if( $svi == 0)
{
echo 'FALE
PODACI!<br />';
exit;
}
Iskaz exit zaustavlja skript.