NAVIGACIJA

Naslovna strana - Jelena Grmuša

0

1

2

3

4

5

6

7

Uvod u Web i Internet tehnologije


 

 

 

Za potrebe primera, pretpostavićemo da imamo baze podataka knjiga, izdavača i pisaca:

 

KNJIGA (K_SIF, NASLOV, OBLAST)

IZDAVAC (I_SIF, NAZIV, STATUS, DRZAVA)

PISAC (P_SIF, IME, BR_NASLOVA, DRZAVA)

IZDAVASTVO (I_SIF, K_SIF, IZDANJE, GODINA, TIRAZ)

AUTORSTVO (K_SIF, P_SIF, R_BROJ)

 

 

        U  VIDU TABELA (SA PREDAVANJA):

        KI, KP – zavisna tabela

        K, I, P – odnosna tabela

 

 

Ako zelite, mozete preuzeti MS ACCESS VERZIJU BAZE K, P, I

 

 

 

 

 

 

 

KREIRANIH KAO

   

 

   CREATE TABLE K

(K_SIF                CHAR(5)    NOT NULL,

 NASLOV    CHAR(50)  NOT NULL WITH DEFAULT,

 OBLAST    CHAR(20),

PRIMARY KEY     (K_SIF))

 

 

CREATE TABLE I

(I_SIF                 CHAR(6)    NOT NULL,

 NAZIV                 CHAR(20)  NOT NULL WITH DEFAULT,

 STATUS     SMALLINT,

 DRZAVA    CHAR(20)  NOT NULL WITH DEFAULT,

PRIMARY KEY     (I_SIF))

 

CREATE TABLE KI

(K_SIF                CHAR(5)    NOT NULL,

 I_SIF                  CHAR(6)    NOT NULL,

 IZDANJE             SMALLINT NOT NULL,

 GODINA             SMALLINT,

 TIRAZ                 INTEGER,

PRIMARY KEY     (K_SIF, I_SIF, IZDANJE),

FOREIGN KEY (K_SIF) REFERENCES K ON DELETE RESTRICT ON UPDATE RESTRICT,

FOREIGN KEY (I_SIF) REFERENCES I ON DELETE CASCADE)

 

 

   CREATE TABLE P

(P_SIF                CHAR(5)    NOT NULL,

 IME  CHAR(50)  NOT NULL WITH DEFAULT,

  BRNASLOVA     SMALLINT,

  DRZAVA   CHAR(20)  NOT NULL WITH DEFAULT,

PRIMARY KEY     (P_SIF))

 

 

 

CREATE TABLE KP

(K_SIF                CHAR(5)    NOT NULL,

 P_SIF                 CHAR(5)    NOT NULL,

 R_BROJ              SMALLINT NOT NULL,

PRIMARY KEY     (K_SIF, P_SIF, R_BROJ),

FOREIGN KEY (K_SIF) REFERENCES K ON DELETE RESTRICT ON UPDATE RESTRICT,

FOREIGN KEY (P_SIF) REFERENCES P ON DELETE CASCADE)

 

 

 

 

Primer 1:Unos podataka u MySQL bazu

 

Kreirati HTML formular preko kog ce se vrsiti upis podataka u tabelu K baze KIP. Neka formular sadrzi tri ulazna INPUT text  polja koja služe za unos novog reda u tabelu K (unos sifre, naslova, oblasti). Pritiskom na dugme [Unesite], metodom POST podatke poslati skriptu "ubaci.php" na obradu.

 

<HTML>
<HEAD>
<TITLE> Unos u bazu KNJIGA K</TITLE>
</HEAD>
<BODY>
<DIV align=center>
<FORM METHOD=
POST ACTION="ubaci.php">
<TABLE border="0" cellpadding="0" cellspacing="0">
<TR height="20">
<TD colspan="2">Unos podataka u tabelu K</TD>
</TR>

<TR>
<TD>K_SIF</td>
<TD> <input name="
tip" type="text"> </TD>
</TR>

<TR>
<TD >NASLOV</td>
<td> <input name="
naslov" type="text" > </TD>
</TR>

<TR >
<TD >OBLAST</td>
<td> <INPUT NAME="
oblast" TYPE="text"> </TD>
</TR>

<tr>
<td>
<input name="
submit" type="submit" value="Unesite">
</td>
</tr>
</TABLE>
</FORM> </DIV> </BODY></HTML>

 

 

 

Stranica "ubaci.php" može imati sledeći kod:

<?php

/* KOMENTAR:

$DBhost = "alas.matf.bg.ac.rs";  //naziv servera

$DBuser = "mi05007";  //user name

$DBpass = "lozinka";

$DBName = "mi05007";  //naziv baze

$table = "K";

*/

$connection = mysql_connect ("alas.matf.bg.ac.rs", "mi05007","lozinka");

 

mysql_select_db("mi05007");

 

$sqlquery = "INSERT INTO K VALUES('{$_POST['tip']}', '{$_POST['naslov']}','{$_POST['oblast']}')";

 

$results =mysql_query($sqlquery);

 

if (mysql_error()) echo mysql_error();

else echo "USPEO SAM. PROVERITE SELECT ISKAZOM";

 

mysql_close();

?>

 

1. Na početku PHP skripta je u komenatru data moguca inicijalizacija promenljivih koje su potrebne za pristup bazi. Vrednosti tih promenljivih se mogu i eksplicitno zadati kao sto je to ucinjeno u mysql_connect i mysql_select_db pozivu.

 2. Potom se konekcionom promenljivom $connection vrsi spajanje na MySQL server .

3. Funkcijom   mysql_select_db("mi05007");  pristupimo bazi koja se zove mi05007

4.  Zatim se navodi SQL iskaz INSERT INTO... kojom u tabelu [K] unosimo novi red sa vrednostima prenetim iz formulara.

5.  SQL upit smeštamo u $sqlquery promenljivu.

 

6. Potom  tu promenljivu prosleđujemo ugrađenoj funkciji mysql_query.

 

7. RADI VERIFIKACIJE SVOG RADA MOZETE UPOTREBITI MYSQL INTERFEJS KOMANDNE LINIJE DA BISTE VIDELI SLOGOVE U TABELI

   mysql> SELECT * FROM K;

NAPOMENA: Unos korisnickog imena, lozinke i baze mogao je da se obezbedi i preko formulara.

Dakle, formular tj. datoteka prvi.html bi trebalo da izgleda:

Primer FORMULARA

<HTML>
<HEAD>
<TITLE>PREGLED TABELA</TITLE>
</HEAD>
<BODY>
<H2>UNOS U TABELU K</H2>
<FORM METHOD="POST" ACTION="unesi.php">
<table>
<TR height="20">
<TD colspan="2">Unos podataka u tabelu K</TD>
</TR>

<TR>
<TD>K_SIF</td>
<TD> <input name="tip" type="text"> </TD>
</TR>

<TR>
<TD>NASLOV</td>
<td> <input name="naslov" type="text" > </TD>
</TR>

<TR>
<TD>OBLAST </td>
<td> <INPUT NAME="oblast" TYPE="text"> </TD>
</TR>


<tr>
<td> username: </td>
<td><input type="text" name="ime"> </td></tr>
<tr><td> password:</td>
<td><input type="password" name="lozinka" size="20" value="xxx"></td></tr>
<tr>
<td>baza:</td>
<td><input type="text" name="baza"></td></tr>

<BR>
<tr>
<td>
<input name="submit" type="submit" value="Unesite">
</td>
</tr>
</table>


</FORM>
</BODY>
</HTML>


Nakon ovakvog HTML kôda, datoteka "unesi.php" može imati sledeći kôd:

<?php

$user=$_POST['ime']; //user name
$passwd=$_POST['lozinka']; 
$bp=$_POST['baza']; //naziv baze
$host='alas.matf.bg.ac.rs'; //naziv servera

$connection = mysql_connect($host, $user, $passwd);
mysql_select_db($bp);

$sqlquery = "INSERT INTO K VALUES('{$_POST['tip']}', '{$_POST['naslov']}','{$_POST['oblast']}')";

$results =mysql_query($sqlquery);

if (mysql_error()) echo mysql_error();
else echo "USPEO SAM. PROVERITE SELECT ISKAZOM";

mysql_close();
?>

Primer 2:Unos podataka u MySQL bazu  

 Kreirati formular koji od korisnika prihvata podatke o nazivu izdavaca i PHP skript koji povećava tiraž zadatim izdanjima tog izdavača  za 10%.

 

<HTML>
<HEAD>
<TITLE> Unos u bazu </TITLE>
</HEAD>
<BODY>
<FORM METHOD=
POST ACTION="ubaci3.php">
 <input name="
naziv" type="text" >
<p>
<input name="
submit" type="submit" value="Unesite">
</FORM></BODY></HTML>

 

 

SKRIPT

PRE UPITA

mysql> use mi05007;
Database changed


mysql> select * FROM KI;
+-------+-------+---------+--------+-------+
| K_SIF | I_SIF | IZDANJE | GODINA | TIRAZ |
+-------+-------+---------+--------+-------+
| k1    | i1    |       2 |   1965 | 10000 |
| k2    | i1    |       2 |   1974 |  7000 |
| k3    | i1    |       1 |   1975 | 10000 |
| k4    | i1    |       2 |   1979 | 10000 |
| k5    | i2    |       4 |   1986 |  5000 |
| k6    | i4    |       3 |   1988 |  5000 |
+-------+-------+---------+--------+-------+
6 rows in set (0.00 sec)

mysql> select * FROM I;
+-------+----------------+--------+-------------+
| I_SIF | NAZIV          | STATUS | DRZAVA      |
+-------+----------------+--------+-------------+
| i1    | Prosveta       |     30 | Jugoslavija |
| i2    | Addison Wesley |     20 | Amerika     |
| i4    | Matica srpska  |     30 | Jugoslavija |
| i3    | Decje novine   |     10 | Jugoslavija |
+-------+----------------+--------+-------------+
4 rows in set (0.02 sec)

NAKON UNOSA NAZIVA IZDAVACA Prosveta u FORMULARU


mysql> select * FROM KI;
+-------+-------+---------+--------+-------+
| K_SIF | I_SIF | IZDANJE | GODINA | TIRAZ |
+-------+-------+---------+--------+-------+
| k1    | i1    |       2 |   1965 | 11000 |
| k2    | i1    |       2 |   1974 |  7700 |
| k3    | i1    |       1 |   1975 | 11000 |
| k4    | i1    |       2 |   1979 | 11000 |
| k5    | i2    |       4 |   1986 |  5000 |
| k6    | i4    |       3 |   1988 |  5000 |
+-------+-------+---------+--------+-------+
6 rows in set (0.00 sec)
                                             

 

#!/usr/local/bin/php

<?php
$DBhost = "alas.matf.bg.ac.rs";
$DBuser = "mi05007";
$DBpass = "lozinka";
$DBName = "mi05007";
$table1 = "KI";

$table2="I";

$connection = mysql_connect ($DBhost, $DBuser, $DBpass);

mysql_select_db($DBName, $connection);

$sqlquery = " UPDATE $table1

SET TIRAZ = TIRAZ*1.1

WHERE i_SIF = (SELECT I_SIF

                           FROM $table2

                           WHERE naziv = '{$_POST['naziv'] }')";

$results = mysql_query($sqlquery);

if (mysql_error()) echo mysql_error();

mysql_close();


 ?>           

Primer 3:Unos podataka u MySQL bazu   -  samostalni rad

     Kreirati formular koji od korisnika prihvata podatke o o izdavaču sa šifrom i10 čiji status još nije poznat i PHP skript koji podatke ubacuje u tabelu I.

 

Primer 4:Kreiranje tabele u  MySQL bazi preko PHPa  

Kreirati formular koji sadrži dugme submit i PHP skript koji kreira tabelu KI.

 

<HTML>
<HEAD>
<TITLE> Kreiranje tabele</TITLE>
</HEAD>
<BODY>
<FORM METHOD=
POST ACTION="kreiraj.php">
 <p>
<input name="
submit" type="submit" value="KREIRAJ">
</FORM></BODY></HTML>

 

 

SKRIPT

<?php

$connection = mysql_connect ("alas.matf.bg.ac.rs", "mi05007", "lozinka")
                           or die("Povezivanje nije moguce.");

//odabir baze – ugradjena funkcija mysql_select_db, naziv baze mi05007

mysql_select_db("mi05007", $connection);

//SQL UPIT

$sqlquery = " CREATE TABLE KI

(K_SIF            CHAR(5)    NOT NULL,

 I_SIF            CHAR(6)    NOT NULL,

 IZDANJE        SMALLINT NOT NULL,

 GODINA         SMALLINT,

 TIRAZ            INTEGER,

PRIMARY KEY    (K_SIF, I_SIF, IZDANJE),

FOREIGN KEY (K_SIF) REFERENCES K ON DELETE RESTRICT ON UPDATE RESTRICT,

FOREIGN KEY (I_SIF) REFERENCES I ON DELETE CASCADE)

";

 

//izvrsavanje SQL iskaza, ugradjena funkcija mysql_query

$results = mysql_query($sqlquery);

 

 //ispis korektnosti obavljenog iskaza: 1 za uspesan upit, 0 za neuspesan sa greskom

  if($results) echo "1"; else echo "0";

 

 

mysql_close();


?>

 

  1. POGLEDAJTE IZVEŠTAJ KOJI DAJE PHP SKRIPT ZA IZVRŠEN UPIT (0 ili 1)
  2. Pristupite MySQL pomoću interfejsa komandne linije da biste utvrdili da li je kreirana tabela

mysql> describe KI;

 

Primer 5:Kreiranje tabele u  MySQL bazi preko PHPa  

Kreirati formular koji sadrži dugme submit i PHP skript koji kreira tabelu KI, ali tako da PHP skript da izvestaj o potencijalnim greskama. Koristite mysql_error() funkciju.

 

<HTML>
<HEAD>
<TITLE> Kreiranje tabele</TITLE>
</HEAD>
<BODY>
<FORM METHOD=
POST ACTION="kreiraj.php">
 <p>
<input name="
submit" type="submit" value="KREIRAJ">
</FORM></BODY></HTML>

 

 

SKRIPT

 

<?php

$connection = mysql_connect ("alas.matf.bg.ac.rs", "mi05007", "lozinka")
                           or die("Povezivanje nije moguce.");

 

 

//odabir baze – ugradjena funkcija mysql_select_db, naziv baze mi05007

mysql_select_db("mi05007", $connection);

 

//SQL UPIT

$sqlquery = " CREATE TABLE KI

(K_SIF            CHAR(5)    NOT NULL,

 I_SIF            CHAR(6)    NOT NULL,

 IZDANJE        SMALLINT NOT NULL,

 GODINA         SMALLINT,

 TIRAZ            INTEGER,

PRIMARY KEY    (K_SIF, I_SIF, IZDANJE),

FOREIGN KEY (K_SIF) REFERENCES K ON DELETE RESTRICT ON UPDATE RESTRICT,

FOREIGN KEY (I_SIF) REFERENCES I ON DELETE CASCADE)

";

 

//izvrsavanje SQL iskaza, ugradjena funkcija mysql_query

$results = mysql_query($sqlquery)  or die(mysql_error());

 

 //ispis korektnosti obavljenog iskaza

  echo $results;

 

 

mysql_close();

 


?>

 

 

POGLEDAJTE IZVEŠTAJ KOJI DAJE PHP SKRIPT ZA IZVRŠEN UPIT. Kako tabela vec postoji zbog primera 4, izvestaj u browser-u izgleda npr.

 TABLE 'KI' ALREADY EXISTS

 

 

Primer 6:PRIKUPLJANJE podataka u MySQL bazi preko PHPa  

Kreirati formular koji sadrži dugme submit i PHP skript koji daje broj redova tabele K.

 

 

<HTML>
<HEAD>
<TITLE> Prebrojavanje redova</TITLE>
</HEAD>
<BODY>
<FORM METHOD=
POST ACTION="prebroj.php">
 <p>
<input name="
submit" type="submit" value="OBRADI">
</FORM></BODY></HTML>

 

 

SKRIPT

 

<?php
$connection = mysql_connect ("alas.matf.bg.ac.rs", "mi05007", "lozinka"); 

//odabir baze – ugradjena funkcija mysql_select_db, naziv baze mi05007
mysql_select_db("mi05007", $connection);

//SQL UPIT
//izvrsavanje SQL iskaza, ugradjena funkcija mysql_query
$results = mysql_query("SELECT * FROM K");

 //ispis broja redova obavljenog iskaza -upotreba funkcije mysql_num_rows
  echo "BROJ REDOVA: ";
  echo mysql_num_rows($results);

if (mysql_error()) echo mysql_error(); 

mysql_close();
?>

 

 

 

Primer 7:PRIKUPLJANJE podataka u MySQL bazi preko PHPa  

Kreirati formular koji sadrži dugme submit i PHP skript koji daje  SADRZAJ REDOVA tabele K.

 

 

<HTML>
<HEAD>
<TITLE> Prebrojavanje redova</TITLE>
</HEAD>
<BODY>
<FORM METHOD=
POST ACTION="prikazi.php">
 <p>
<input name="
submit" type="submit" value="OBRADI">
</FORM></BODY></HTML>

 

 

SKRIPT

#!/usr/local/bin/php
<?php
$connection = mysql_connect ("alas.matf.bg.ac.rs", "mi05007", "lozinka");

//odabir baze – ugradjena funkcija myql_select_db, naziv baze mi05007
mysql_select_db("mi05007", $connection);

//izvrsavanje SQL iskaza, ugradjena funkcija mysql_query
$results = mysql_query("SELECT * FROM K");

 //preci preko svakog reda u rezultatu obavljenog iskaza i prikazati 
//sadrzaj

//upotreba funkcije mysql_fetch_array
   while ($niz= mysql_fetch_array($results))
     {  
         //postaviti vrednost svakog polja u promenljivu i...          
//prikazati rezultat na ekranu

          //ILI OVAKAV ISPIS 
          //echo $niz['NASLOV']." ".$niz['OBLAST'];
          //echo "<br>";  
           echo $niz[1]." ".$niz[2];  echo "<br>";
     }

if (mysql_error()) echo mysql_error();
else echo "<BR> <BR> KRAJ!!!!!!!"; 

mysql_close();

?>

PRIMER 8-samostalni rad: Isti zahtev kao u primeru 7, ALI SA FORMATIRANIM ISPISOM POLJA U TABELU

PRIMER 9. KREIRATI PHP SKRIPT obradi.php KOJI PREDSTAVLJA FORMULAR SA DVA SUBMIT polja. AKO JE SELEKTOVAN LEVI, PRIKAZATI TABELU K (NASLOV, OBLAST) uredjenu u nerastucem poretku. AKO JE SELEKTOVAN DESNI, PRIKAZATI TABELU K (NASLOV, OBLAST) uredjenu u neopadajucem poretku.

FORMULAR

<HTML>
<HEAD>
<TITLE>PREGLED TABELA</TITLE>
</HEAD>
<BODY>
<H2>PREGLED TABELA</H2>
<FORM METHOD="POST" ACTION="obradi.php">
<BR><BR>

<INPUT TYPE="SUBMIT" NAME="left"   VALUE="<">
<INPUT TYPE="SUBMIT" NAME="right"  VALUE=">" >
</FORM>
</BODY>
</HTML>

SKRIPT

<?php

//ispis izvestaja o greskama
function check_mysql()
{

    if (mysql_errno()   > 0)
    {
        die("<BR> MySQL error " . mysql_errno() . ": " . mysql_error());
    }

}


//konekcija na MySQL bazu
$db = mysql_connect("alas.matf.bg.ac.rs", "mi05007", "lozinka");

//mozete koristiti za domace zadatke localhost za naziv servera umesto 
//alas.matf.bg.ac.rs

if (!$db)
{    die("Neuspesna konekcija na MySQL server.");}


//izbor baze
mysql_select_db("mi05007", $db);

 
//provera greske
check_mysql();


//proverava da li postoji promenljiva $left koja odgovara TRENUTNO 
//AKTIVIRANOM submit polju formulara
//uloga: kretanje unazad kroz tabelu K - sortirano po prvom polju
if (isset($_POST['left']))
{
   //izvrsavanje iskaza
    $result = 
mysql_query("SELECT NASLOV, OBLAST FROM K ORDER BY NASLOV DESC");

   //provera greske
    check_mysql();


   //preci preko svakog reda u rezultatu obavljenog iskaza i prikazati 
   //sortiran sadrzaj
//upotreba funkcije mysql_fetch_array
     echo "<TABLE BORDER=2 CELLPADDING=3 CELLSPACING=4>";

   while ($niz= mysql_fetch_array($result))
     {  
         //provera greske
            check_mysql();

         //postaviti vrednost svakog polja u promenljivu i... prikazati 
//rezultat na ekranu

         // echo $niz['NASLOV']." ".$niz['OBLAST'];
          echo "<TR><TD>";  
           echo $niz[0]."</TD><TD>".$niz[1]; 
          echo "</TD></TR>";
     }

     echo "</TABLE>";
}

//proverava da li postoji promenljiva $right koja odgovara submit polju 
//formulara
//uloga: kretanje unapred kroz tabelu K - sortirano po polju
//NASLOV
else if (isset($_POST['right']))
{
    $result = 
mysql_query("SELECT NASLOV, OBLAST FROM K ORDER BY NASLOV ASC");

    check_mysql();
    //preci preko svakog reda u rezultatu obavljenog iskaza i prikazati 
   //sortiran sadrzaj
//upotreba funkcije mysql_fetch_array

     echo "<TABLE BORDER=2 CELLPADDING=3 CELLSPACING=4>";
   while ($niz= mysql_fetch_array($result))
     {  
         //provera greske
            check_mysql();

         //postaviti vrednost svakog polja u promenljivu i... prikazati 
//rezultat na ekranu


          //echo $niz['NASLOV']." ".$niz['OBLAST'];
          echo "<TR><TD>";  
           echo $niz[0]."</TD><TD>".$niz[1];  echo "</TD></TR>";
     }

     echo "</TABLE>";
}
mysql_close();
?>

PRIMER 10-samostalni rad: Isti zahtev kao u primeru 9, ali sa prikazom tabele I uredjenom prema nazivu izdavaca, uz zahtev da se unos korisnickog imena, lozinke i baze obezbedi preko formulara.

Dakle, formular bi trebalo da izgleda:



Nakon ovakvog HTML kôda poziv f-je mysql_connect u PHP skriptu bi trebalo da ima ovakvu formu:
$user=$_POST['ime'];
$passwd=$_POST['lozinka'];
$bp=$_POST['baza'];
$host='alas.matf.bg.ac.rs';
$veza=mysql_connect($host, $user, $passwd));


 

ZA SAMOSTALNI RAD: Pogledati zadatke sa kolokvijuma i ispitnih rokova.

 

11. Naći različite šifre knjiga koje izdaje izdavač sa šifrom i1 u izdanjima čiji je tiraž veći od prosečnog tiraža izdavača i1.

 

12. Iz tabele K izdavačke baze podataka izbrisati sve podatke o knjizi koja nema ni jedno izdanje.

 

13. Napisati SQL iskaz koji nalazi sve netrivijalne različite parove šifara knjiga koje izdaje isti izdavač.

 

14. Napisati SQL iskaz koji nalazi sve netrivijalne različite parove šifara izdavača koji izdaju istu knjigu.

 

 

15. Naći različite šifre izdavača koji izdaju knjigu sa šifrom k6 u izdanjima čiji je tiraž veći od najmanjeg tiraža izdavača i1.

 

16. Iz tabele I izdavačke baze podataka izbrisati sve podatke o izdavaču koji nije izdao ni jednu knjigu.