NAVIGACIJA

Naslovna strana - Jelena Grmuša

0

1

2

3

4

5

6

7

Uvod u Web i Internet tehnologije


 

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>

<p>&nbsp;</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&#353;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&#273;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>

<p align="center">razno:

<input type="text" name="r1" size="40" maxlength="60">

</P>

<p>&nbsp;</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&#273;eno.</p>';

                    ?>

</body>

</html>

 

ILI ako koristimo preimenovanje nizova u kratki stil promenljivih

$a= $_POST['s'];

$b= $_POST['p'];

  onda skript primer1.php koji ispisuje podatke o prvom studentu izgleda

<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&#273;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&#353;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&#273;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:

 

  • HTML oznaka

 

  • PHP oznaka

 

  • PHP iskaza

 

  • praznog prostora

 

  • komentara

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

 

  1. Kada koristite kratki stil, imena promenljivih u skriptu ista su kao imena polja u

HTML formi.

  1. Nije potrebno deklarisati promenljive, odnosno preduzimati bilo šta

da biste napravili promenljive u skriptu. One se skriptu prosleđuju kao što se argumenti

prosleđuju funkciji.

  1. Ako upotrebite kratki stil, koristićete promenljivu kao što je

$p1. Polje p1 u HTML formi pravi promenljivu $p1 u PHP skriptu.

  1. Upotreba kratkog stila zahteva da parametar register_global u konfiguracijskoj

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.

  1. Direktan pristup promenljivama poput navedene vrlo je praktičan, ali omogućava

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.

  1. Ako se odlučite za praktični, kratki tip pristupa promenljivama,

zapamtite da obavezno zadate početne vrednosti svim lokalnim promenljivama.

 

 

PREDNOSTI I MANE SREDNJEG STILA

 

  1. Srednji stil je čitanje promenljivih formulara iz jednog od nizova $_POST, $_GET i

$_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.

  1. Ako je obrazac poslat metodom POST, podaci iz polja p1 biće sačuvani u elementu

$_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.

  1. Ako koristite stariju verziju PHP-a, možda nećete moći da pristupite nizovima

$_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.

  • Promenljiva može da ima isto ime kao i funkcija. Ta tehnika zbunjuje i trebalo bi

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:

  • integer – celobrojni, koristi se za cele brojeve
  • double – pokretni zarez dvostruke preciznosti, koristi se za realne brojeve
  • string – znakovni niz, koristi se za nizove znakova
  • bool – logički, koristi se za vrednosti tačno i netačno
  • array – niz, koristi se za čuvanje više celina podataka istog tipa
  • object – objekat, koristi se za čuvanje primeraka klasa

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).

 

Provera tipova

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 tačna, ali zašto su množenja izvršena pre sabiranja?

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.