primena tcp/ip tehnologija u namenskim...

18
UNIVERZITET U BEOGRADU ELEKTROTEHNIČKI FAKULTET KATEDRA ZA ELEKTRONIKU Primena TCP/IP tehnologija u namenskim sistemima 3. PHP prof. dr Milan Ponjavić Haris Turkmanović Školska 2019/20

Upload: others

Post on 12-Feb-2020

60 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

UNIVERZITET U BEOGRADU

ELEKTROTEHNIČKI FAKULTET

KATEDRA ZA ELEKTRONIKU

Primena TCP/IP tehnologija

u namenskim sistemima

3. PHP

prof. dr Milan Ponjavić Haris Turkmanović

Školska 2019/20

Page 2: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

Primena TCP/IP tehnologija u namenskim sistemima

2

3.1. Uvod

Da bi svrha upotrebe PHP jezika bila jasnija, neophodno je dobro razumeti komunikaciju koja

se odvija između klijenta i server i način funkcionisanja servera. Takođe, neophodno je razumeti

šta zapravo predstavlja svaka od ovih strana i kako izgledaju poruke koje se razmenjuju između

ove dve strane. Ova komunikacija je delom objašnjena na jednom od prethodnih časova, ali zbog

važnosti i boljeg sagledavanja stvari, u uvodnom delu ove laboratorijske vežbe data je mala

teorijska osnova koja čitaocu treba bolje da približi način na koji se ova komunikacija odvija.

Klijenta u komunikaciji predstavlja uređaj na kom se nalazi softver koji pruža mogućnost

iniciranja komunikacije. Pod iniciranjem komunikacije podrazumeva se slanje zahteva serveru.

Zahtev može biti u cilju dobavljanja podataka sa servera ili prenosa podataka na server. Klijenta,

u komunikaciji putem internet mreže, predstavlja Web Browser.

Server u komunikaciji predstavlja uređaj (računar, mikrokontroler, …) koji poseduje softver

ili hardver koji implementiraju odgovarajuću funkcionalnost. Ta funkcionalnost predstavlja

mogućnost uređaja da odgovori na zahtev klijenta. Ukoliko je zahtev klijenta da mu se proslede

odgovarajući podaci, server treba da pošalje te podatke klijentu. Ukoliko je primljeni zahtev takav

da klijent želi serveru da pošalje podatke, server treba da primi te podatke i skladišti ih u svoju

memoriju. Jedan od najčešće korišćenih web servera jeste Apache.

Poruke između servera i klijenta razmenjuju se posredstvom HTTP protokola. Postoje dva tipa

ovih poruka a to su HTTP Request (Zahtev) i HTTP Response (Odgovor). Na sistemu sa slike 3.1.1

, koji predstavlja jedan klasičan internet sistem, biće objašnjeno komuniciranje između klijenta i

servera.

3.1.1 - Komunikacija između klijenta i servera

1. Klijent šalje HTTP request serveru. Ova poruka ima sledeću sadržinu

Apache

Web Server

PhP Interpreter

Files

1

2

3

4

5

Page 3: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

Primena TCP/IP tehnologija u namenskim sistemima

3

Method Path Version of the protocol

Headers

- Method – Rezervisane reči koje definišu koji tip akcije klijent želi da

sprovede. Najčešće je to reč GET koja označava da klijent želi da dobavi fajl

sa servera ili reč POST koja označava da klijent šalje server neke podatke

prikupljene posredstvom HTML forme

- Path – Putanja do resursa na serveru

- Version of the protocol – Verzija protokola

- Headers – Dodatne informacije

2. Server prima zahtev i shodno sadržini primljene poruke sprovodi odgovarajuću akciju.

3. Ukoliko server primi poruku sa zahtevom za dobavljanjem neke HTML stranice ili

nekog drugog fajla, vrši se potraga te stranice ili fajla na disku koji se nalazi na serveru,

i ukoliko zahtevani resurs postoji, vraća se klijentu.

4. Ukoliko je server dobio zahtev za pokretanje PHP skripte, skripta se traži na serveru i

ukoliko skripta postoji na serveru, poziva se odgovarajući PHP interpreter koji tumaći

kod PHP skripte i kao rezultat izvršavanja te skripte vraćaju se podaci klijentu

5. Svi podaci koji se vraćaju klijentu, kao rezultat neke akcije na serveru, “zapakovani”

su u HTTP Response poruku koja ima sledeću strukturu

- Status code – Broj koji označava da li je zahtev uspešno obrađen.

- Status text – Detaljnije objašnjenje status code-a

- Version of the protocol – Verzija protokola

- Headers – Dodatne informacije

Na osnovu prethodno izloženog scenarija, koji ilustruje tok poruka od klijenta ka serveru i

korake koje server sprovodi u cilju odgovaranja na zahtev klijenta, možemo uvideti svrhu

korišćenja PHP skripti.

3.1.1. PHP

PHP ( Hypertext Preprocessor ) je skriptni jezik koji se izvršava na strani servera. Skripte

pisane na ovom jeziku se izvršavaju na zahtev klijenta a za njihovo tumačenje koristi se

odgovarajući PHP interpreter. Dakle, ove skripte se ne prevode na mašinski jezik, već se direktno

tumače. Da bi tumačenje ovih skripti bilo moguće, neophodno je da na serveru postoji instaliran

Version of the protocol Status code Status text

Headers

Page 4: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

Primena TCP/IP tehnologija u namenskim sistemima

4

PHP interpreter. PHP omogućava pravljenje dinamičkih Web Sajtova i obradu podataka koji se

nalaze na serveru. PHP skripte imaju ekstenziju .php

3.1.2. Konfiguracija servera na host računaru

Da bi korišćenje PHP skripti bilo moguće neophodno je pokrenuti web server. U primerima

koji slede, serverska strana je implementirana na našem računaru a to je moguće zahvaljujući loop-

back ip adresi (127.0.0.1). Sa linka je neophodno preuzeti softver Wamp koji pokreće web server

na našem računaru. Nakon preuzimanja softvera neophodno je izvršiti instalaciju softvera na

računar. Ukoliko putanje tokom instalacije nisu menjane, na disku c nalazi se folder wamp64. U

ovom folderu se nalazi folder www u kome je neophodno skladištiti sve fajlove neophodne za

realizaciju web sajta. Nakon instalacije neophodno je pokrenuti instalirani softver. Nakon

pokretanja softvera u donjem desnom uglu windows interfejsa pojavljuje se indikacija da je server

aktivan (ukoliko je ikonica crvena, a ne zelena, sačekati neko vreme dok ne postane zelena.)

Da bi potvrdi uspešnost instalacije Web servera na host računaru, neophodno je otvoriti web

browser i u navigacioni deo web browsera uneti adresu 127.0.0.1 nakon čega se dobija rezultat

prikazan na slici 3.1.3.

Web stranica sa slike 3.1.3 je rezultat postojanja fajlova u direktorijumu C:/Wamp64/www.

Neophodno je izbrisati sve fajlove iz ovog direktorijuma jer ćemo, kroz nastavak ovog časa, u taj

direktorijum smeštati fajlove koji su nam neophodni za realizaciju naših zadataka.

3.1.2 - Indikacija da je server uspešno pokrenut

3.1.3 - Potvrda da je server uspešno pokrenut

Page 5: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

Primena TCP/IP tehnologija u namenskim sistemima

5

3.2. Primeri

Primeri koji slede imaju za cilj da demonstriraju način pisanja PHP skripti i mogućnosti koje

ovaj jezik pruža.

3.2.1. Obrada podataka na serveru

Potrebno je realizovati web sistem koji proverava da li se tačka nalazi u krugu.

Podrazumevano je da je centar kruga u koordinatnom početku. Od korisnika se traži da unese

prečnik kruga kao i koordinate tačke. Nakon unosa podataka, na serveru se vrši provera da li je

tačka u krugu i korisniku se ispisuje odgovarajuća poruka na novoj stranici u zavisnosti od

rezultata provere.

Rešenje:

Neophodno je napraviti HTML stranicu koja od korisnika prikuplja tražene podatke

(poluprencik, x i y koordinate tačke). Prikupljanje podataka se postiže pomoću HTML forme koja

za ovaj primer ima sledeću sadržinu:

Forma predstavlja HTML element koji se koristi za prikupljanje podataka od korisnika i

slanje prikupljenih podataka na server. Vrednost atributa action predstavlja putanju do skritpe koja

će se pozvati nakon što se proslede podaci. Slanje podataka na server moguće je pomoću više

različitih metoda ali kroz ovaj kurs obrađivaće se metoda POST. Ova metoda podrazumeva da se

podaci šalju na server u vidu uređenog para name/value i i da su na toj putanji do servera skriveni

od korisnika. Podaci koji se šalju serveru predstavljaju vrednosti (value) uzete od korisnika

pomoću elemenata input. Da bi se podaci poslali na server, neophodno je uraditi submit forme,

odnosno kliknuti na dugme koje realizuje posebnu funkciju a to je slanje podataka na server. Nakon

implementacije ove strukture na HTML stranici dobija se izgled kao na slici 3.2.1

<form action="check.php" method="post">

<p>Poluprečnik: <br>

<input type = "text" name="poluprecnik">

</p>

<p>X koordinata tačke:<br>

<input type = "text" name="xCoord">

</p>

<p>Y koordinata tačke:<br>

<input type = "text" name="yCoord">

</p>

<input type = "submit" value="Pošalji">

</form>

Page 6: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

Primena TCP/IP tehnologija u namenskim sistemima

6

Nakon što unesemo podatke i kliknemo na dugme “Pošalji“ izvršiće se slanje unetih podataka

na server, a nakon toga će se pozvati skripta check.php. Sada je neophodno implementirati PHP

funkcionalnost ove skripte.

PHP kod se piše između dela označenog sa <?php ?>. Ovaj deo je moguće postaviti bilo

gde na HTML stranici ali, da bi izvršavanje ovog dela koda bilo moguće, neophodno je da

ekstenzija fajla bude .php. Da bi implementirali funkcionalnost provere, tj. da li je se tačka nalazi

u krugu, neophodno je unutar check.php skripte ubaciti sledeći kod:

Prikazani kod predstavlja sadržaj PHP skripte check.php. Iz prikazanog koda možemo

zaključiti sledeće:

- Promenljive se u PHP jeziku definišu tako što se ispred naziva promenljive stavi simbol $

- PHP ne razlikuje tipove promenljivih

- Globalna promenljiva _POST predstavlja asocijativni niz čiji su elementi vrednosti

dobijene pomoću input elemenata forme. Asocijativni niz se može indeksirati pomoću key

vrednosti koja je u našem slučaju vrednost atributa name iz HTML forme

- Svaka naredba u PHPu završava se sa ;

- U PHPu postoji if-else struktura kao u većini drugih programskih jezika

- Naredba echo služi za generisanje izlaza PHP skripte koji će se proslediti kiljentu.

<?php

$r = $_POST["poluprecnik"];

$x = $_POST["xCoord"];

$y = $_POST["yCoord"];

if( $x**2 + $y**2 < $r**2 ){

echo "<p> Tacka se nalazi u krugu <p>";

}

else{

echo "<p> <p> Tacka se ne nalazi u krugu <p> <p>";

}

?>

3.2.1 - Izgled stranice nakon implementacije forme

Page 7: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

Primena TCP/IP tehnologija u namenskim sistemima

7

Dakle, navedena skripta najpre preuzme baferisane vrednosti koje su skladištene u globalnom

nizu _POST. Zatim implementira formulu koja provera traženi uslov i u zavisnosti od toga da li je

forma zadovoljena ili ne, klijentu se šalje odgovarajući sadržaj primenom naredbe echo.

Jedna od mana ove realizacije je u tome što se ne vrši provera validnosti unetih podataka već

se na server prosleđuju „sirovi“ podaci. Neophodno je pre slanja podataka na server, izvršiti

proveru validnosti podataka što se postiže pomoću JS koda. Dakle, neophodno je napraviti JS fajl

(chechForm.js) unutar koga će postojati funkcija koja će se pozivati nakon što se klikne na dugme

„Pošalji“. Ukoliko su podaci ispravni, izvršiće se slanje podataka na server dok je u suprotnom

potrebno obavestiti korisnika o tipu greše i resetovati polja forme. JS kod kojim se implementira

tražena funkcionalnost je sledeći:

Pre nego što krenemo u objašnjavanje principa na kome radi navedeni JS kod, neophodno je

modifikovati formu tako da se dobije kod u nastavku:

function CheckFormData(form){

if(form.elements.poluprecnik.value.length == 0) {

alert("Morate uneti podatke za poluprecnik");

return false;

}

if(isNaN(form.elements.poluprecnik.value)){

alert("Poluprecnik mora biti broj");

return false;

}

if(form.elements.xCoord.value.length == 0) {

alert("Morate uneti podatke za x koordinatu");

return false;

}

if(isNaN(form.elements.xCoord.value)){

alert("x koordinata mora biti broj");

return false;

}

if(form.elements.yCoord.value.length == 0) {

alert("Morate uneti podatke za x koordinatu");

return false;

}

if(isNaN(form.elements.yCoord.value)){

alert("x koordinata mora biti broj");

return false;

}

return true;

}

function Validate(){

Form = document.getElementById("Podaci");

if(CheckFormData(Form)){

Form.submit();

}

else{

Form.reset();

}

}

Page 8: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

Primena TCP/IP tehnologija u namenskim sistemima

8

Navedena forma se od prethodne razlikuje po tome što je dodat atribut id na osnovu koda forma

postaje dostupna i iz JS koda. Takođe, izbačen je input tipa submit umesto koga je uveden input

tipa button koji omogućava implementaciju event-a onClick. Kada se desi ovaj event pozvaće se

funkcija validate koja u slučaju ispravno unetih podataka poziva metodu submit koja prosleđuje

podatke na server dok se u suprotnom forma resetuje.

Drugi pristup validaciji unetih podataka je pomoću event-a forme pod nazivom onSubmit. Ovaj

event se poziva kada se klikne na dugme submit a pre nego se pošalju podaci. Da bi bilo moguće

pozivanje funkcije usled ovog event-a neophodno je modifikovati formu i JS kod tako da se dobiju

sledeći kodovi:

<form action="check.php" method="post" id="Podaci">

<p>Poluprečnik: <br>

<input type = "text" name="poluprecnik">

</p>

<p>X koordinata tačke:<br>

<input type = "text" name="xCoord">

</p>

<p>Y koordinata tačke:<br>

<input type = "text" name="yCoord">

</p>

<input type = "button" onClick = "Validate()" value="Pošalji">

</form>

<form action="check.php" method="post" id="Podaci" onsubmit = "return

Validate();">

<p>Poluprečnik: <br>

<input type = "text" name="poluprecnik">

</p>

<p>X koordinata tačke:<br>

<input type = "text" name="xCoord">

</p>

<p>Y koordinata tačke:<br>

<input type = "text" name="yCoord">

</p>

<input type = "submit" value="Pošalji">

</form>

Page 9: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

Primena TCP/IP tehnologija u namenskim sistemima

9

Iako postavkom zadatka nije traženo, iz stilskih razloga, bilo bi bolje da se rezultat provere, da

li se tačka nalazi na krugu ili ne, ispisuje na samoj stranici gde se od korisnika uzimaju podaci. Da

bi to bilo moguće neophodno je ceo sadržaj PHP skripte check.php iskopirati ispod forme na

HTML stranici i preimenovati index.html u index.php. Takođe, potrebno je vrednost atributa

action promeniti iz check.php u index.php

Ukoliko nakon navedenih modifikacija pokrenemo index.php stranicu, videćemo da se nakon

prvog pokretanja stranice javljaju obaveštenja koja govore da ne postoje indeksi niza _POST. Već

nakon prvog unošenja podataka u formu i slanja unetih podataka ova upozorenja nestaju jer sada

niz _POST ima vrednosti. Dakle, pre ispisa vrednosti, poželjna je provera da li u promenljivoj ima

neki sadržaj. To se postiže pomoću funkcije empty koja kao argument prima promenljivu a

function CheckFormData(form){

if(form.elements.poluprecnik.value.length == 0) {

alert("Morate uneti podatke za poluprecnik");

return false;

}

if(isNaN(form.elements.poluprecnik.value)){

alert("Poluprecnik mora biti broj");

return false;

}

if(form.elements.xCoord.value.length == 0) {

alert("Morate uneti podatke za x koordinatu");

return false;

}

if(isNaN(form.elements.xCoord.value)){

alert("x koordinata mora biti broj");

return false;

}

if(form.elements.yCoord.value.length == 0) {

alert("Morate uneti podatke za x koordinatu");

return false;

}

if(isNaN(form.elements.yCoord.value)){

alert("x koordinata mora biti broj");

return false;

}

return true;

}

function Validate(){

Form = document.getElementById("Podaci");

if(CheckFormData(Form)){

return true;

}

else{

return false;

}

}

Page 10: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

Primena TCP/IP tehnologija u namenskim sistemima

10

povratna vrednost je true ili false u zavisnosti od toga da li promenljiva ima vrednost ili ne. Nakon

navedenih modifikacija index.php ima sledeći sadržaj:

<DOCTYPE !html>

<head>

<title> Tacka i krug</title>

<meta charset="UTF-8">

<script src="checkForm.js"></script>

</head>

<body>

<form action = "index.php" method="post" onsubmit = "return

Validate();">

<p>Poluprečnik: <br>

<input type = "text" name="poluprecnik">

</p>

<p>X koordinata tačke:<br>

<input type = "text" name="xCoord">

</p>

<p>Y koordinata tačke:<br>

<input type = "text" name="yCoord">

</p>

<input type = "submit" value="Pošalji">

</form>

<?php

if(!empty($_POST)){

$r = $_POST["poluprecnik"];

$x = $_POST["xCoord"];

$y = $_POST["yCoord"];

if( $x**2 + $y**2 < $r**2 ){

echo "<p> Tacka se nalazi u krugu <p>";

}

else{

echo "<p> <p> Tacka se ne nalazi u krugu <p> <p>";

}

}

?>

</body>

Page 11: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

Primena TCP/IP tehnologija u namenskim sistemima

11

3.2.2. Upis i čitanje iz fajla

Potrebno je napraviti dve PHP stranice: Profesor. php i Student.php. Profesor.php stranica

omogućava dodavanje informacija na server koje se odnose na ostvareni rezultat studenta tokom

jednog semestra. Informacije se čuvaju u fajlu spisak.scv. Informacije koje profesor može da unese

su:

- Ime

- Prezime

- Broj indeksa

- Broj poena na prvom testu

- Broj poena na drugom testu

Nakon unošenja ovih informacija vrši se upisivanje informacija u fajl spisak.cvs. Pored

informacija koje je uneo profesor, u fajl se upisuje i ukupan broj poena koje je student ostvario

tokom semestra. Ukupan broj poena predstavlja zbir poena na prvom i drugom testu. Potrebno je

implementirati potvrdu validnosti unetih podataka, i tek ukoliko podaci imaju validan format, vrši

se njihovo slanje na server i upis u fajl. Takođe, kao rezultat validnosti unetih podataka, korisniku

ove stranice se ispisuje odgovarajuća poruka na stranici koja ga obaveštava o uspešnosti upisa.

Student.php stranica omogućava čitanje informacija sa servera. Informacije se čitaju iz fajla

spisak.csv. Nakon učitavanja stranice, student unosi broj indeksa, i ukoliko postoje informacije

za taj broj indeksa, studentu se ispisuje sledeći sadržaj:

- Ime

- Prezime

- Broj indeksa

- Poeni ostvareni na prvom testu

- Poeni ostvareni na drugom testu

- Ukupni poeni

Ukoliko na serveru ne postoje podaci za uneti broj indeksa, potrebno je korisnika obavestiti o

tome tako što se na stranici ispisuje odgovarajuća poruka.

Rešenje:

Cilj ovog primera je da demonstrira korišćenje fajlova na serveru. Najpre ćemo realizovati

Profesor.php stranicu koja demonstrira unos podataka u Excel fajl. Logički posmatrano, stranica

se sastoji iz dela za unos podataka i php dela koji ima zadatak da, ukoliko su podaci pristigli na

server, izvrši obradu tih podataka i upiše ih u fajl a korisnika obavesti o uspešnosti unosa. Deo

koda stranice, koji je zadužen za prikupljanje podataka od korisnika, dat je u obliku forme i

sadržina tog dela koda je:

Page 12: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

Primena TCP/IP tehnologija u namenskim sistemima

12

Navedeni kod predstavlja već dobro poznati kod koji implementira funkcionalnost forme čiji

zadatak je da od korisnika prikupi podatke. Nakon što se podaci prikupe od korisnika, na serveru

se ponovo pokreće skripta Profesor.php ali se ovog puta izvršava php deo stranice koji je dat u

nastavku:

<form action = "Profesor.php" method="post" >

<p>Ime studenta: <br>

<input type = "text" name="Ime">

</p>

<p>Prezime studenta:<br>

<input type = "text" name="Prezime">

</p>

<p>Broj indeksa<br>

<input type = "text" name="BrIndeksa">

</p>

<p>Prvi test<br>

<input type = "text" name="Test1">

</p>

<p>Drugi test<br>

<input type = "text" name="Test2">

</p>

<input type = "submit" value="Pošalji">

</form>

<hr>

<?php

if(!empty($_POST)){

$filename = "spisak.csv";

$file_handle = fopen($filename,"a");

if($file_handle == false){

echo "<p> Problem sa otvaranjem fajla <p>";

}

else{

$Row = $_POST;

$Row["Ukupno"]= $Row["Test1"] + $Row["Test2"];

fputcsv($file_handle,$Row);

echo "Uspesno dodat student<br>";

echo $Row["Ime"];

echo " ";

echo $Row["Prezime"];

echo " ";

echo $Row["BrIndeksa"];

echo " ";

echo $Row["Test1"];

echo " ";

echo $Row["Test2"];

echo " ";

echo $Row["Ukupno"];

echo " ";

echo "<br>";

fclose($file_handle);

}

}

?>

Page 13: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

Primena TCP/IP tehnologija u namenskim sistemima

13

Prvim if uslovom izvršena je provera da li su podaci pristigli na server. Ukoliko podaci

postoje na serveru, uslov će biti ispunjen i ulazi se u if granu. Promenljiva filename sadrži ime

fajla u koji će se upisivati studenti i njihovi rezultati. Nakon što definišemo ime fajla, neophodno

je otvoriti fajl u željenom režimu rada. Otvaranje fajla vrši se pomoću funkcije fopen koja kao

prvi argument prima naziv fajla a kao drugi argument prima mod u kome želimo da otvorimo

fajl. Neki od najčešćih modova dati su u tabeli:

Mod Opis moda

r Otvara fajl u modu čitanja i postavlja kursor na početak fajla

r+ Otvara fajl u modu čitanja i pisanja i postavlja kursor na početak fajla

w Otvara fajl u modu upisa i postavlja kursor na poečtak fajla. Ukoliko fajl

postoji, briše se njegov sadržaj a ukoliko fajl ne postoji, kreira se.

w+ Otvara fajl u modu upisa i čitanja i postavlja kursor na poečtak fajla. Ukoliko

fajl postoji, briše se njegov sadržaj a ukoliko fajl ne postoji, kreira se.

a Otvara fajl u modu upisa i postavlja kursor na kraj fajla. Ukoliko fajl ne

postoji, kreira se.

a+ Otvara fajl u modu upisa i čitanja i postavlja kursor na kraj fajla. Ukoliko

fajl ne postoji, kreira se.

U našem primeru, fajl se otvara u modu „a“ jer je potrebno svakog od studenata dodati na kraj

fajla a da se prethodno dodati studenti ne obrišu. Ukoliko otvaranje fajla ne uspe, funkcija fopen

vraća false dok se u suprotnom vraća pokazivač na fajl koji smeštamo u promenljivu file_handle.

Pre nego što izvršimo upisivanje podataka u fajl, neophodno ih je organizovati u jedan niz.

Zbog toga kreiramo pomoćni niz Row u koga kopiramo sadržaj niza _POST a nakon toga u niz

dodajemo element „Ukupno“ koji predstavlja zbir poena sa predhodna dva testa.

Pošto je ekstenzija fajla sa kojim radimo .csv, ovaj tip fajlova ima posebne funkcije za upis i

čitanje. Te funkcije su:

- fputcsv(FileHandle, ArrayToWrite)

Koristi se za upis niza u jedan red u Excel tabeli. Ceo niz će biti upisan u jedan red a

vrednosti elemenata niza biće upisane u susedne ćelije počev od prve ćelije sleva

- fgetcsv(FileHandle)

Koristi se za čitanje jednog reda podataka iz Excel tabele. Povratna vrednost ove funkcije

predstavlja niz čiji elementi imaju vrednosti iz Excel ćelija pročitanog reda.

Nakon što smo pripremili niz koji ćemo upisati u tabelu, pozivom funkcije fputcsv vršimo upis

spremljenog niza u spisak.csv fajl. Nakon toga, korisnika obaveštavamo o uspešnosti upisa

korišćenjem echo komandi koje generišu izlazne stringove koji se šalju do korisnika. Na kraju

zatvaramo fajl pozivom funkcije fclose kojoj, kao argument, prosleđujemo pokazivač na fajl.

Page 14: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

Primena TCP/IP tehnologija u namenskim sistemima

14

Sada je neophodno kreirati stranicu Student.php koja treba da demonstrira način čitanja iz

fajlova i obradu pročitanih podataka. Deo koda stranice koji se odnosi na unos podataka je:

Nakon što korisnik unese broj indeksa neophodno je izvršiti pretragu da li za uneti broj indeksa

postoje podaci u fajlu spisak.csv. Provera podataka i čitanje podataka iz fajla vrši se u php delu

stranice koji ima sledeću sadržinu:

Nakon što smo uspešno otvorili fajl u modu čitanja, vrši se čitanje jednog po jednog reda iz

csv fajla. Pročitani podaci se smeštaju u niz Row. Čitanje redova se vrši sve dok funkcija fgetcsv

ne vrati false što označava da ne postoji više redova za čitanje.

<form action = "Student.php" method="post" >

<p>Broj indeksa <br>

<input type = "text" name="BrIndex">

</p>

<input type = "submit" value="Pošalji">

</form>

<hr>

if(!empty($_POST)){

$filename = "spisak.csv";

$file_handle = fopen($filename,"r");

$student_find = false;

if($file_handle == false){

echo "<p> Problem sa otvaranjem fajla <p>";

}

else{

$No = $_POST["BrIndex"];

while (($Row = fgetcsv($file_handle))!== false){

if(strcmp($Row[2],$No) == 0){

echo "Student<br><br>";

echo $Row[0];

echo " ";

echo $Row[1];

echo " ";

echo $Row[2];

echo " ";

echo $Row[3];

echo " ";

echo $Row[4];

echo " ";

echo $Row[5];

echo " ";

echo "<br>";

$student_find = true;

break;

}

}

if($student_find == false){

echo "Ne postoje podaci za studenta";

}

}

fclose($file_handle);

}

Page 15: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

Primena TCP/IP tehnologija u namenskim sistemima

15

Nakon što pročitamo red iz csv fajla, i pročitani red smestimo u promenljivu Row, neophodno

je izvršiti proveru da li je drugi element niza, koji predstavlja broj indeksa, jednak unetoj vrednosti

broja indeksa. Ukoliko jeste, ispisuju se podaci za studenta dok se u suprotnom nastavlja

pretraživanje fajla. Ukoliko se pretraži ceo fajl, i ne pronađu se podaci za uneti broj indeksa, na

stranici se ispisuje odgovarajuća poruka.

(Potrebno je da studenti samostalno implementiraju proveru unetih podataka pre nego što se

pošalju na server)

3.2.3. Dinamika PHP stranica

Potrebno je realizovati web stranicu index.php koja omogućava pristup podacima na serveru

ukoliko korisnik unese ispravnu šifru i korisničko ime. Ova web stranica poziva sadržaj LogIn.php

stranice koja implementira unos korisničkog imena i passworda. Elementi koji služe za unos

podataka treba da budu centrirani na stranici i da se nalaze u pravougaoniku dimenzija 400px sa

400px. Boja pozadine ovog pravougaonika treba da bude siva dok veličina slova paragrafa, u

ovom pravougaoniku, treba da bude 18px.

Ukoliko korisnik unese ispravno korisničko ime i password, na stranici index.php, umesto dela

koji zahteva unos podataka, ispisuje se sadržaj stranice SucessfullLog.php. Sadržaj ove stranice

takođe treba da bude ispisan u pravougaoniku istih dimenzija i pozadine ali veličina slova treba

da bude 20px. Slova treba da budu boldovana i zelene boje dok ceo tekst treba da bude centriran.

Ukoliko korisničko ime i šifra nisu validni, na stranici index.php se umesto dela za unos

podataka ispisuje sadržaj stranice ErrorLog.php. Sadržaj ove stranice takođe treba da bude

ispisan u pravougaoniku istih dimenzija i pozadine ali veličina slova treba da bude 20px. Slova

treba da budu boldovana i crvene boje dok ceo tekst treba da bude centriran.

(Korisničko ime je admin i password je admin)

Rešenje:

Cilj ovog primera je da demonstrira dinamičko inkludovanje stranica u već postojeću .php

stranicu. Stranica index.php treba da implementira sledeću ideju:

Nakon učitavanja stranice u web browser otvara se stranica index.php koja u body delu HTML

koda inkluduje LogIn.php stranicu. Kao rezultat inkludovanja LogIn.php stranice dolazi do

ubacivanja koda iz LogIn.php stranice na mestu poziva komande include. Nakon slanja popunjene

forme iz LogIn.php, ponovo se poziva funkcija index.php koja sada treba da proveri da li su uneti

ispravni podaci. Ukoliko su uneti podaci ispravni, učitava se sadržaj stranice SucessfullLog.php

dok se u suprotnom učitava sadržaj stranice ErrorLog.php. index.php stranica ima sledeći kod:

Page 16: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

Primena TCP/IP tehnologija u namenskim sistemima

16

Kao rezultat izvršavanja ovog dela koda dobijamo stranicu prikazanu na slici

<DOCTYPE !html>

<head>

<title> Pocetna</title>

<link rel="stylesheet" href="style1.css">

</head>

<body>

<div class="Container">

<?php

if(!empty($_POST)){

if(!empty($_POST["FormID"]))

{

if(strcmp($_POST["FormID"],"LogIn") == 0){

if(( strcmp($_POST["pass"],"admin") == 0 ) and

(strcmp($_POST["user"],"admin") == 0 )){

include "SucessfullLog.php";

}

else{

include "ErrorLog.php";

}

}

}

}

else{

include "login.php";

}

?>

</div>

</body>

Page 17: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

Primena TCP/IP tehnologija u namenskim sistemima

17

Prvim if uslovom u php delu stranice proveravamo da li su podaci poslati na server. Ukoliko

nisu, to je znak da treba popuniti formu i u tom slučaju se učitava sadržaj stranice LogIn.php koji

je dat u nastavku:

Ukoliko su podaci poslati na server proveravamo sadržaj polja FormID koji daje jedinstvenu

oznaku forme. Ovaj podatak uveden je kao input element forme, ali njegova vrednost nije vidljiva

korisniku jer je hidden atribut ovog elementa postavljen na true. Ovaj element je uveden da bi se

na prijemnoj strani na jednoznačan način detektovalo koja forma je poslala podatke. Ovaj element

se mogao izbeći, ali zbog skalabilnosti sistema (mogućnosti dodavanja još formi u cilju proširenja

sistema) potrebno je imati mogućnost detektovanja forme koja je poslala podatke.

Ukoliko se poslati podaci podudaraju sa traženom šifrom i korisničkim imenom potrebno je

učitati sadržaj stranice SucessfullLog.php koji je dat u nastavku:

Ukoliko se poslati podaci ne podudaraju sa traženom šifrom i korisničkim imenom potrebno

je učitati sadržaj stranice ErrorLog.php koji je dat u nastavku:

Sadržaj style1.CSS fajla, koji implementira tražene stilske karakteristike stranice, dat je u

nastavku:

<div class = "LogIn">

<form action="index.php" method="post">

<input type="text" name="FormID" value="LogIn" hidden="true">

<p> Unesite korisnicko ime:

<input type="text" name="user">

</p>

<p> Unesite password:

<input type="password" name="pass">

</p>

<input type="submit" value="Login">

</form>

</div>

<div class = "UspesnoLogovanje">

<p>

Uspesno ste prijavljeni

</p>

</div>

<div class = "Greska">

<p>

Pogresna sifra ili korisnicko ime

</p>

</div>

Page 18: Primena TCP/IP tehnologija u namenskim sistemimatnt.etf.rs/~oe4ppt/pdf/lab/Cas4/OE4PPT_Lab4_Uputstvo.pdfPrimena TCP/IP tehnologija u namenskim sistemima 2 3.1. Uvod Da bi svrha upotrebe

Primena TCP/IP tehnologija u namenskim sistemima

18

.Container{

margin:auto;

width:400px;

height:400px;

background-color:gray;

padding: 10px;

}

.LogIn{

margin:auto;

}

.LogIn p{

font-size: 18px;

}

.UspesnoLogovanje{

color:green;

font-size:22px;

font-weight:bold;

text-align:center;

}

.Greska{

color:red;

font-size:22px;

font-weight:bold;

text-align:center;

}