Home > PHP-tecaj > PHP tecaj: druga lekcija

PHP tecaj: druga lekcija

Prosinac 25th, 2008

Daljnje naredbe za kontrolu programapetlji” u programu.
Umjesto :

$t = “Moram sam raditi svoje domace zadatke !<BR>\n”;

/* recenica se memorise u promijenjljivu $t */

$i = 0;

// tkz. brojac se postavi na nulu

while ($i<10)

//sve dok je $i manje od 10

{

echo $t; //pokazi sadrzaj promjenjljive$t

$i++; //uvecaj i za 1

}
moglo bi se isto tako napisati:

$t = “Moram sam raditi svoje domace zadatke !<BR>\n”;

$i = 0;

//brojac na nulu

do

//izvrsi !!!

{

echo $t;

//pokazi sadrzaj $t, tj. memorisanu recenicu

$i++;

// uvecaj brojac za 1


} while ( $i < 10 );

// i to radi sve dok je $i manje od deset

Gdje je razlika?

Razlika se najbolje moze uociti ako se kao pocetna vrijednost za brojac $i umjesto nule $i=0; stavi deset $i=10;.

U prvom slucaju nije ispunjen uslov ( $i<10 ), tako da naredbe izmedju “viticastih” zagrada nece biti izvedene.

U drugom slucaju bice najprije izvedene naredbe unutar “viticastih” zagrada, i tek onda ce biti provjereno da li je uslov jos uvijek zadovoljen tj. da li vazi $i<10 .

Posto ovo nije slucaj bice prekinuto izvodjenje naredbi unutar petlje.

Vazno je primjetiti da ce u ovom drugom slucaju , znaci upotrebom DO-WHILE petlje naredba biti BAREM JEDNOM izvedena.

Jos jedna mogucnost za primjenu petlji u programu je tkz. FOR petlja.

Primjer:

$t = “Moram sam raditi svoje domace zadatke !<BR>\n”;

for ($i=0;$i<10;$i++)

{

echo $t;

}

‘for‘ petlja se sastoji od tri izraza. U opstem slucaju:
for (izraz1;izraz2;izraz3)

{

}
Sa vrijednoscu izraz1 inicijalizira se petlja, prosto receno “brojac se stavlja na pocetnu vrijednost“.

Vrijednost data u izraz2 predstavlja krajnju vrijednost . Kada se ona dostigne izlazi se iz petlje.

Kroz izraz3 dajemo tkz. “korak“, tj. dajemo vrijednost za koju treba povecati ili umanjenjiti brojac.

Prednost ‘for‘ naredbe je taj sto sve naredbe potrebne za kontrolu petlje stoje u jednom redu (tacnije u jednoj zagradi).

U iducem PRIMJERU bice pokazana jedna petlja u kojoj se brojac umanjuje za odredjenu vrijednost, tj. brojacemo “unazad“.

$t = “Moram sam raditi svoje domace zadatke !<BR>\n”;

//promijenjljiva $t

for ($i=10;$i>0;$i–)

/* brojac se postavlja na 10. U svakom iducem koraku bice umanjen za 1 sa $i–,… naredba se izvrsava sve dok je $i>0 */

{

echo $t;

} “Razlikovanje” slucajeva (AKO je ispunjen uslov… U SUPROTNOM… ) pravcu, i to u zavisnosti od izabranog slucaja, upotrijebicemo if naredbu:

if ($i<0)

//ako je $i manje od nule

{

echo “$i je manje od nule\n”;

//pokazi na ekranu tekst …

}

ili :

if ($i<0)

//ako je $i manje od nule

{

echo “$i je manje od nule\n”;

/*pokazi tekst */

}

else

// u suprotnom slucaju…

{

echo “$i nije manje od nule\n”;

/* pokazi ovaj tekst*/

}

Ove naredbe mozemo i “uvezati” :

if ($i<0)

//ako je $i manje od nule

{

echo “$i je manje od nule\n”;

//pokazi ovaj tekst

}

else if ($i>0)

//ako je $i vece od nule

{

echo “$i je vece od nule\n”;

//pokazi ovaj tekst

}

else

//ako $i nije ni manje ni vece od nule,…

{

echo “$i je nula\n”;

// onda je garant $i=0, pa to pokazi…

}

Ako jednu promijenjljivu trebamo vise puta istestirati, onda je lakse upotrijebiti naredbu switch .
Primjer:

switch ($ime)

{

case “Suljo”:

echo “Ja sam Suljo”;

break;

case “Mujo”:

echo “Ja sam Mujo”;

break;

case “Haso”:

echo “Ja sam Haso”;

break;

default:

echo “Ja nisam ni Suljo ni Mujo a ni Haso, ja sam Huso”;

}

Ako je ime sadrzano u promijenjljivoj $ime Suljo, (tj. ako promjenjljiva $ime sadrzava vrijednost “Suljo”) bice izvrsena prva naredba: echo “Ja sam Suljo”; Nakon toga se prekida daljne izvrsenje naredbi u petlji sa naredbom break;

Ako ime nije Suljo, onda se nastavlja sa “ispitivanjem slucajeva” datim u case , u datom slucaju uporedbom sadrzaja promjenjljive $ime i imena (rijeci Mujo, Haso,..).

Ukoliko ni jedan slucaj ne odgovara (tj. ako ime nije ni Suljo ni Mujo ni Haso), onda ce biti izvrsena naredba default ;

Pod default se uvijek stavlja ona naredba koja treba biti izvrsena ako ni jedna od pretpostavki nije istina, u nasem slucaju bice pokazan tekst : Ja nisam ni Suljo ni Mujo a ni Haso, ja sam Huso.

Daljnje mogucnosti za usporedbu Do sada smo vidjeli osnovne mogucnosti usporedbe: provjeru na vece, manje ili jednako ($i<10, $i>10, $i=0) . Osim ovih osnovnih usporedbi, naravno da je moguce napraviti i “prosirene” usporedbe kao npr.:

$i == 10 // Da li je $i jednako 10 ?

$i <= 10 // Da li je $i manje ili jednako 10 ?

$i => 10 // Da li je $i vece ili jednako 10 ?

$i != 10 // Da li $i nije jednako 10 ?

Ove upite mozemo i koristiti u kombinaciji, kao npr.:

($i==10) && ($j>0) // Da li je $i jednako 10 i $j vece od 0 (nule)?

($i==10) || ($j==0) // Da li je $i jednako 10 ili $j jednako 0?

PAZNJA: Kao sto ste sigurno vec primjetili, ovi slucajevi su identicni (tacnije sintaksa) je ista kao i kod C jezika.

Znaci:

&& – znaci ‘bool’ i (AND)

|| – znaci ‘bool’ ili (OR)

Jos jednom PRED-DEFINISANE promjenjljive Iz poglavlja broj 4 nam je vec poznato:
U PHP fajlu ,koji je pozvan iz nekog formulara , imena “elemenata iz formulara” stoje na raspolaganju kao promjenjljive.

Ovu osobinu mozemo iskoristiti tako sto cemo sami formular i naredbe koje “komanduju” formularom (tj. sta i kad ce biti izvedeno) memorisati u jedan fajl.

Pretpostavimo, nas fajl form.html sadrzava slijedeci formular:

<FORM ACTION=”form.html” METHOD=POST>

<INPUT NAME=”ImePoIzboru”>

<INPUT TYPE=”submit”>

</FORM>

U tom slucaju pozivom (klikom) na submit bice pozvan sami fajl (znaci form.html). U tom slucaju je promijenjljivoj ImePoIzboru dato bas ime po izboru .Ovo mozemo iskoristiti:

<?

if (isset($beliebigername)) //ako egzistira (postoji) promjenjljiva

$ImePoIzboru

{

echo “Vi ste dali $ImePoIzboru\n”; // pokazi na ekranu “Vi … “

}

?>

<P>

<FORM ACTION=”form.html” METHOD=POST>

<INPUT NAME=”beliebigername”>

<INPUT TYPE=”submit”>

</FORM>

Prilikom prvog poziva fajla form.html (sto ce reci jos dok nije kliknuto “dugme” submit ), promjenjljiva $ImePoIzboru jos ne postoji, sto opet znaci da izraz (isset($beliebigername) NIJE ISTINIT .

Popunimo li formular i kliknemo na submit , varijabla $ImePoIzboru ce biti “napravljena”, izraz (isset($beliebigername) je ISTINIT , tako da ce biti pokazan tekst Vi ste dali $ImePoIzboru .

Ukoliko zelimo da prekinemo izvodjenje naredbi, koristimo se naredbom exit .

Prikljucivanje fajlova

Jos jedna slicnost sa C i C++.

Naredbom

include (“NekiFajl”);

bice procitan sadrzaj fajla NekiFajl kao kad bi cijeli fajl (cijeli njegov sadrzaj) stajao na tom mjestu. Na ovaj nacin je omoguceno postizanje istovjetnog “layout-a” i kod vecih projekata. Citanje iz fajla i upisivanje u fajl U slijedecem slucaju htjeli bi da “citamo” iz nekog fajla koji lezi na serveru, ili da u njega nesto dodamo. (Najpoznatiji slucaj je vjerovatno upisivanje u “knjigu gostiju” , ili povecanje za jedan na brojacu kod nove “posjete“.)
VAZNO:

Iz sigurnosnih razloga je web-server na server-racunaru pridodan korisniku (user – u ) koji ima vrlo mala prava. Izmedju ostalog, taj korisnik ne smije onako kako bi on htio pisati i brisati po vasim fajlovima (sto ce reci vasim htm ili html stranicama). Jos manje ima pravo da sam polaze nove fajlove u vas direktorij na web-serveru.

KAKO POLOZITI FAJL ZA “UPISIVANJE” NA WEB-SERVERU?

Da bi polozili fajl NekiFajl u koji web-server smije upisivatipotrebni su slijedeci koraci:

U nekom FTP programu kliknemo desnom tipkom na misu i izaberemo chmod .

Ukoliko nemamo izbor chmod sa desnim klikom, naredbu mozemo poslati i direktno ftp-om:

site chmod xyz ImeFajla

Ovdje su X, Y i Z tri cifre koje sluze za odredjivanje prava za ovaj fajl, i to:

X – stoji na prvom mjestu za prava koje ima vlasnik (onaj koji je polozio taj fajl)

Y – stoji na drugom mjestu za prava koja ima grupa kojoj vlasnik pripada;

Z – stoji na trecem mjestu za pravakoja ima ostatak svijeta -tj. svi drugi.

Pri tome vazi:

  • 0 znaci : nikakvo pravo (potpuna zabrana).
  • 1 znaci : pravo izvodjenja (vazno za programe i direktorije).
  • 2 znaci : pravo pisanja (sto istovremeno znaci i “pravo brisanja”).
  • 4 znaci : pravo citanja.

Ova prava se mogu sabirati, pojasnjenje cemo dati u primjeru za fajl primjer.htm:

Htjeli bi smo da postavimo slijedeca prava:

Da vlasnik ima pravo citanja (4) +pravo pisanja (2) + pravo izvodjenja (1) sto znaci sva prava, slijedi 4+2+1 = 7;

Da grupa kojoj vlasnik pripada ima pravo citanja (4) i pravo izvodjenja (1) => 4+1=5;

I da svi ostali imaju samo pravo za izvodjenje (1);

Znaci prava za vlasnika 7, za grupu 5 i ostale 1 .

pa je naredba:

site chmod 751 primjer.htm

Ako bi stavili :

site chmod 777 primjer.htm

znacilo bi da SVI IMAJU SVA PRAVA ZA OVAJ FAJL, A TO BI BILO VRLO OPASNO !!!

PAZNJA: Web-server radi u normanom slucaju pod pravima za “ostale”, sto znaci da nema ni prava vlasnika, a ni prava grupe kojoj pripada vlasnik. (Nesto iz vlastitog iskustva: “Ovo se najcesce zaboravi prilikom prebacivanja CGI-fajlova na server, pa se onda cudimo zasto skripta ne radi :)

OK. Podjimo od toga da sada imamo fajl pod imenom NekiFajl iz kojeg zelimo nesto citati.

Prije svega moramo ovaj fajl otvoriti. Pri tome je neophodno naznaciti koje akcije zelimo preduzeti npr. citati iz fajla, upisivati u njega, brisati itd….

Naredba glasi:

$fajl = fopen(“NekiFajl”,”r”);

Ovo znaci u prevodu da otvaramo fajl NekiFajl i da zelimo iz njega citati (” r ” znaci citati – engl. read ). “Tehnicke detalje” cemo prepustiti promjenjljivoj $fajl , tj. kada budemo zeljeli citati iz fajla NekiFajl jednostavno cemo upotrijebiti promjenjljivu $fajl.

U drugom koraku citacemo iz fajla NekiFajl i to sve red po red , i to sve dok ne dodjemo do kraja samog fajla:

while (!feof($NekiFajl))

{

$red = fgets($NekiFajl,1000);

echo $zeile;

}

- feof($NekiFajl) je istina kada dodjemo na kraj fajla. (EOF je skracenica od End Of File).

- $red = fgets($datei,1000); Uz pomoc sistemske funkcije fgets postizemo slijedece: procitaj maksimalno 1000 znakova u redu iz fajla NekiFajl, prekini sa citanjem kada naidjes na znak za novi red ili na znak za kraj fajla, i to “procitano” upisi u promijenjljivu pod imenom $red.
(Objasnjenje za broj 1000 … Broj 1000 je izabran po slobodnoj volji jer je vrlo vjerovatno niko nece napisati 1000 znakova u jedan jedini red. Da smo htjeli mogli smo napisati i 1.000.000 , onda bi imali jos vecu vjerovatnocu da niko nije napisao milion znakova u jedan red :) .

- echo $red; jednostavno pokazuje sadrzaj promjenjljive $red na ekranu.

NA kraju moramo jos zatvoritti fajl:

fclose($NekiFajl);

Prilikom otvaranja nekog fajla imamo slijedece mogucnosti:
r ” : Samo citanje, i to od pocetka fajla
r+ “: Citanje i pisanje od pocetka fajla
w ” : Samo pisanje u fajl. AKo fajl vec postoji, onda ce dotadasnji sadrzaj biti izbrisan. Ako fajl ne postoji bice pokusano da se polozi.
w+ “: Citanje i pisanje. Ostalo vazi kao i za “w”.
a “: Samo pisanje (bolje reci “dopisivanje”) u fajl. Znaci ako fajl vec postoji bice nastavljeno pisati u njega na kraju – tamo dokle se vec stiglo. Ako fajl ne postoji, bice pokusano da se polozi novi fajl.
a+ “: Citanje i pisanje. Ostalo vazi kao i za “a”.

PAZNJA: Kod ovog zadnjeg slucaja “a+” se sa citanjem pocinje isto tako na kraju. A na kraju, naravno, ne stoji BAS NISTA. To znaci da nece biti nista procitano.

Sa naredbom:

fwrite($NekiFajl, “Ja ucim PHP”);

mozemo upisati neki tekst (u primjeru upisujemo tekst “Ja ucim PHP” u fajl pod imenom $NekiFajl.

Popularity: 8% [?]

PHP-tecaj , , ,

  1. Trenutno nema komentara.
  1. No trackbacks yet.