NAVIGACIJA |
|||||||||
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";
?>
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;
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>
<?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();
?>
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:
$user=$_POST['ime']; $passwd=$_POST['lozinka']; $bp=$_POST['baza']; $host='alas.matf.bg.ac.rs'; $veza=mysql_connect($host, $user, $passwd));
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.