programiranje za internet - fpmoz.ba · pdf . 2015/2016. programiranje za internet 7 •...
TRANSCRIPT
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 1
PROGRAMIRANJE ZA INTERNET
FAKULTET PRIRODOSLOVNO-MATEMATIČKIH I ODGOJNIH ZNANOSTI
SVEUČILIŠTE U MOSTARU
Doc.dr.sc. GORAN KRALJEVIĆ
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 2
Web:
http://www.fpmoz.ba/gkraljevic
Pitanja, primjedbe, dogovor za konzultacije ...
o E-mail: [email protected]
Programiranje za Internet
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 3
Kratki uvod u PHP
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 4
PHP – Uvod
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 5
• PHP (Hypertext Preprocessor) -> open-source skriptni
(serverski) jezik koji se interpretira na strani servera (ukoliko taj server podržava PHP)
• Pogodan za razvoj Weba
• Dostupan na raznim platformama
o Windows, Linux, Unix, OS X, ...
• Jednostavan za učenje
o sintaksa slijedi C, Javu, Perl
• CILJ: Jednostavan jezik za brzo stvaranje dinamičkih stranica Weba!
PHP – Uvod
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 6
• PHP služi za dinamičko generiranje HTML koda i obradu zahtjeva.
• Korisnik vidi samo čisti HTML kod, ne i kod skripte.
• PHP kod može stajati sam ili u kombinaciji s HTML-om.
• U trenutku pokretanja .php skripte na serveru se pokreće novi proces.
• PHP prevoditelj (parser) prepoznaje PHP kod unutar dokumenta
putem tagova <?php ?>
Moguće su još i konstrukcije:
<% %>
<??>
<script language='php'></script>
PHP – Uvod
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 7
• Princip rada PHP-a
Na temelju zahtjeva korisnika izvršava se PHP kod, te se kreira HTML stranica popunjena dinamičkim sadržajem koja se onda šalje nazad korisniku.
o Korisnik putem preglednika zahtijeva određeni resurs (PHP program, datoteku).
o Zahtjev dolazi na poslužitelj koji prepoznaje da se radi o PHP programu.
o Poslužitelj poziva PHP engine koji izvršava PHP program -> rezultat je HTML kod koji se šalje nazad korisniku.
PHP – Uvod
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 8
PHP + baza podataka
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 9
• PHP podržava rad sa velikim brojem baza podataka, najbolje (i najduže) radi sa bazama podataka iz open-source okruženja (MySQL i PostgreSQL), ali isto tako PHP radi i sa ostalim, komercijalnim bazama podataka (npr. Oracle, SQL Server).
• Mi ćemo u projektima koristiti MySQL bazu podataka.
PHP + MySQL
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 10
PHP + MySQL
• MySQL -> PHPMyAdmin
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 11
PHP + MySQL
• PDO / MySQLi / MySQL
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 12
PHP + MySQL
• PDO / MySQLi
o PDO – podrška za 12 baza
o MySQLi – podrška za MySQL
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 13
PHP + MySQL
• PDO / MySQLi / MySQL
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 14
PHP + MySQL
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 15
PHP + MySQL
• php.ini - datoteka
• phpinfo () - funkcija
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 16
• Povezivanje PHP programa sa nekom bazom podataka moguće je putem ugrađenih funkcija, koje su karakteristične u svome imenu za svaku od pojedinih baza.
• Primjer dostupnih funkcija za rad sa MySQL bazom podataka:
PHP + MySQL
o mysql_affected_rows o mysql_close o mysql_connect o mysql_create_db o mysql_data_seek o mysql_db_query o mysql_drop_db o mysql_errno o mysql_error o mysql_list_fields o mysql_list_dbs o mysql_list_tables o mysql_select_db o mysql_tablename o mysql_query o mysql_result
o mysql_fetch_array o mysql_fetch_field o mysql_fetch_lengths o mysql_fetch_object o mysql_fetch_row o mysql_field_name o mysql_field_seek o mysql_field_table o mysql_field_type o mysql_field_flags o mysql_field_len o mysql_free_result o mysql_insert_id o mysql_pconnect o mysql_num_fields o mysql_num_rows
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 17
• Pristup MySQL bazi –> koraci:
o Spajanje na bazu (mysql_connect_db)
o Odabir baze (mysql_select_db)
o Priprema upita (definiranje upita)
o Izvršavanje upita (mysql_query)
o Prihvat i obrada rezultata (mysql_fetch_*)
o (Opcionalno prekinuti vezu s bazom) (mysql_close)
PHP + MySQL
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 18
• Primjer spajanja na bazu
<?php
//primjer.php
$conn = mysql_connect ("localhost", "root", "***");
if (!$conn) {
echo "Spajanje na bazu nije uspjelo: " . mysql_error(); exit;
}
…
?>
PHP + MySQL
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 19
• Odabir baze
<?php
$conn = mysql_connect ("localhost", "root", "***");
if (!$conn) {
echo "Spajanje na bazu nije uspjelo: " . mysql_error(); exit;
}
if (!mysql_select_db ("test")) {
echo "Odabir baze nije uspio: " . mysql_error(); exit;
}
…
?>
PHP + MySQL
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 20
• Priprema i izvršavanje upita
<?php
…
$sql = "SELECT * FROM DJELATNIK";
$result = mysql_query ($sql);
if (!$result) {
echo "SQL upit ($sql) nije uspješno izvršen: " . mysql_error(); exit;
}
…
?>
PHP + MySQL
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 21
• Prihvat i obrada rezultata
<?php
…
if (mysql_num_rows ($result) == 0) {
echo "Nema redaka u rezultatu!"; exit;
}
while ($row = mysql_fetch_assoc ($result)) {
echo $row["IME"]."".$row["PREZIME"]."".$row["PLACA"]."<br>";
}
…
?>
PHP + MySQL
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 22
<html> <head><title>TEST</title></head> <body> <?php $conn = mysql_connect ("localhost", "root", "***"); if (!$conn) { echo "Spajanje na bazu nije uspjelo: " . mysql_error(); exit; } if (!mysql_select_db ("test")) { echo "Odabir baze nije uspio: " . mysql_error(); exit; } $sql = "SELECT * FROM DJELATNIK"; $result = mysql_query ($sql); if (!$result) { echo "SQL upit ($sql) nije uspješno izvršen: " . mysql_error(); exit; } if (mysql_num_rows ($result) == 0) { echo "Nema redaka u rezultatu!"; exit; } while ($row = mysql_fetch_assoc ($result)) { echo $row["IME"]." ".$row["PREZIME"]." ".$row["PLACA"]."<br>"; } ?> </body> </html>
PHP + MySQL
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 23
PHP + MySQL
• Primjeri funkcija koje vraćaju jedan slog iz tablice kao niz, i to ona polja (stupce) koji su izabrani naredbom SELECT (svaki sljedeći poziv te funkcije vraća sljedeći slog iz tablice – pokazivač se pomiče na početak sljedećeg reda u tablici):
o mysql_fetch_row()
o mysql_fetch_assoc()
o mysql_fetch_array()
• Ako se žele dohvatiti svi slogovi u tablici, koristi se petlja while i u
uvjetu se poziva funkcija.
• Razlika između navedenih funkcija je u mogućnosti pristupa članovima niza (neka se niz zove row):
o mysql_fetch_row() pristupa preko indeksa polja (npr. $row[0]),
o mysql_fetch_assoc() pristupa preko naziva polja (npr. $row['IME']),
o mysql_fetch_array() može pristupati i preko indeksa i preko naziva polja.
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 24
<head> <title>TEST</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body>
<?php $db = mysql_connect("localhost","root","gogo123") or die ("Ne mogu se spojiti na bazu"); mysql_select_db("test",$db) or die ("Ne mogu izabrati bazu"); mysql_query ("SET NAMES utf8"); $result= mysql_query("SELECT * FROM djelatnik");
echo"<table border='1'> <tr> <th>IME</th> <th>PREZIME</th> <th>RADNO MJESTO</th> <th>PLACA</th> </tr>";
while($row= mysql_fetch_array($result)) { echo"<tr>"; echo"<td>" . $row['IME'] . "</td>"; echo"<td>" . $row['PREZIME'] . "</td>"; echo"<td>" . $row['SIFRA_RADMJ'] . "</td>"; echo"<td>" . $row['PLACA'] . "</td>"; echo"</tr>"; } echo"</table>"; mysql_close($db); ?> </body> </html>
PHP + MySQL
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 25
PHP + MySQL
• Što s ostalim SQL upitima ?
o Naravno, moguće je pokrenuti bilo koji SQL upit:
DDL (CREATE, ALTER, ...)
DML (INSERT, UPDATE, DELETE, ...)
o Slično kao i za SELECT upite, potrebno je samo provjeriti rezultat izvršavanja funkcije mysql_query().
o U slučaju INSERT upita nema povratnih rezultata već samo informacija o uspješnoj ili neuspješnoj transakciji.
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 26
PHP + MySQL
• HTML forma – koristi se kako bi se definirao neki skup podataka koji
korisnik unosi i šalje serverskom jeziku (PHP) na obradu:
o Action – php datoteka koja se treba izvršiti (kojoj se šalju podaci)
o Method – metoda za preuzimanje vrijednosti varijabli iz forme može biti POST ili GET.
Za prijenos podataka se koristi POST metoda (kod nje korisnik ne vidi koje se vrijednosti šalju) dok se kod GET metode vrijednosti prenose preko URL-a.
GET metoda se sasvim sigurno neće korisiti kada se unose podaci o lozinkama ili drugim osjetljivim informacijama, ali se koristi ako stranicu npr. želimo staviti u bookmark.
<form action="primjer.php" method="post/get"> ... </form>
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 27
PHP + MySQL
<html> <body> <form action="Primjer_POST.php" method="POST"> ili <form action="Primjer_GET.php" method=“GET">
Unesite vaše ime: <input type="text" name="ime" /><br /> Unesite vašu dob: <input type="text" name="dob" /><br /> <br /> <input type="submit" value= "Posalji" /> </form> </body> </html>
<html> <body> Zdravo <?php echo $_POST["ime"]; ?>.<br /> Imate <?php echo $_POST["dob"]; ?> godina! </body> </html>
<html> <body> Zdravo <?php echo $_GET["ime"]; ?>.<br /> Imate <?php echo $_GET["dob"]; ?> godina! </body> </html>
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 28
PHP + MySQL
• Primjer:
o Upisivanje (INSERT) novih podataka putem forme (obrasca) i spremanje u tablicu baze podataka
• Kreiranje obrasca:
<html> <head> <title>Primjer - INSERT forma</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <form action="primjer_insert.php" method="post"> Šifra županije: <input type="text" name= "sifra_zupanije" /> <br> Naziv županije: <input type="text" name= "naziv_zupanije" /> <br><br> <input type="submit" value= "Pohrani" /> </form> </body> </html>
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 29
PHP + MySQL
• Upisivanje (INSERT) podataka u bazu:
<html> <head><title>Primjer - INSERT</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php $con= mysql_connect("localhost", "root", “***"); if(!$con) { die('Ne mogu se spojiti na bazu: ' . mysql_error()); } mysql_select_db("test", $con); mysql_query ("SET NAMES utf8");
$sifra=$_POST['sifra_zupanije']; $naziv=$_POST['naziv_zupanije'];
$sql="INSERT INTO ZUPANIJA (sifra_zupanije, naziv_zupanije) VALUES ('$sifra','$naziv')";
if(!mysql_query($sql,$con)) { die(' Greška: ' . mysql_error()); } echo"Dodavanje nove županije je uspješno izvršeno!"; mysql_close($con) ?> </body> </html>
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 30
PHP + MySQL
• Superglobalne varijable:
o $GLOBALS – asocijativno polje sa svim globalnim varijablama
o $_SERVER – neke informacije o poslužitelju i klijentu
o $_GET – GET podaci iz obrasca/linka
o $_POST – POST podaci iz obrasca
o $_FILES – polje datoteka poslanih na poslužitelja
o $_COOKIE – asocijativno polje kolačića
o $_SESSION – asocijativno polje s varijablama sjednice
o $_REQUEST – $_GET, $_POST i $_COOKIE zajedno
o $_ENV – asocijativno polje s varijablama okoline
Ak.god. 2015/2016. PROGRAMIRANJE ZA INTERNET 31
Web:
http://www.fpmoz.ba/gkraljevic
Pitanja, primjedbe, dogovor za konzultacije ...
o E-mail: [email protected]
Programiranje za Internet