Do sada smo sve pripremili za dinamičko ispisivanje izbornika. Sada to treba sve povezati u jednu cjelinu.
Za početak kreiramo prazan PHP dokument i nazovemo ga 'izboenik.php':
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250" />
<title>Izbornik</title>
<style type="text/css">
<!--
* {
margin:0;
padding:0;
}
li { list-style-type: none; }
#izbornik {
width: 250px;
font-size: 1.0em;
font-family: Arial, Helvetica, sans-serif;
font-weight: bold;
background-color: #AAA;
}
#izbornik ul {
margin: 0px;
margin-left: 15px;
font-size: 0.9em;
font-weight: normal;
background-color: #BBB;
}
#izbornik ul ul {
margin: 0px;
margin-left: 10px;
font-size: 0.9em;
font-weight: normal;
background-color: #CCC;
}
#izbornik a {
width:100%;
text-decoration: none;
color: #A00;
}
#izbornik li a {
display:block;
}
#izbornik li a:hover {
color: #333;
background-color: #DDD;
}
.izbornik-aktivni {
background-color: #FFFFFF;
color: #DADADA;
}
-->
</style>
</head>
<body>
<?php
// Ovdje ide potreban PHP kod
?>
</html>
Sljedeći korak je pisanje koda za spajanje na bazu:
<?php
$db=@mysql_connect('localhost','izbornik','abc123');
if (!$db) {
exit('Ne mogu se spojiti na MySQL server!!!');
}
if (!mysql_select_db('aubx_aubx',$db)) {
exit('Ne mogu se spojiti na MySQL bazu');
}
?>
Znači, ovim kodom smo se spojili na bazu te u varijablu $db pohranili identifikator veze na bazu. Ako se ne možemo spojiti na MySQL server i odabrati bazu, izvršavanje skripte se prekida i ispisuje pogreška.
Zatim krećemo s dohvaćanjem stavki izbornika. Za dohvaćanje glavnih stavki izbornika dohvaćamo sve one stavke koje nemaju nadređene stavke:
<?php
$upit='
SELECT id, naziv, link, nadredjena
FROM izbornik
WHERE nadredjena=0';
$rez=mysql_query($upit,$db);
if (mysql_num_rows($rez)==0) {
echo 'Nema stavki u izborniku!!!';
} else {
//ispisuj stavke izbornika
}
?>
Ovdje vidimo osnovni način rada s bazom podataka pomoću PHP-a - pisanje upita, dohvaćanje podataka iz baze, provjera broja rezultata i slično.
No, pošto koristimo jednu tablicu, potrebno je prilikom ispisivanja svake stavke provjeriti da li je ta stavka nekoj drugoj nadređena. Kako ispisivanje stavki izbornika rekurzivno i da ne bismo pisali previše koda radimo jednu funkciju koja kao parametar prima ID stavke i ispisuje izbornik:
<?php
function pisi($pId) {
global $db;
$upit='
SELECT id, naziv, link
FROM izbornik
WHERE nadredjena='.$pId;
$rez=mysql_query($upit,$db);
if ($rez and mysql_num_rows($rez)!=0) {
if ($pId==0) {
?><ul id="izbornik"><?php
} else {
?><ul><?php
}
while ($red=mysql_fetch_assoc($rez)) {
$id=$red['id'];
$naziv=$red['naziv'];
$link=$red['link'];
$nadredjena=$red['nadredjena'];
?>
<li><a href="<?php echo $link; ?>"><?php echo $naziv; ?></a>
<?php
$upit_pod='
SELECT COUNT(id) broj_podredjenih
FROM izbornik
WHERE nadredjena='.$id;
$rez_pod=mysql_query($upit_pod,$db);
if ($rez_pod and mysql_num_rows($rez_pod)>0) {
pisi($id);
}
?>
</li>
<?php
}
?>
</ul>
<?php
}
}
?>
Funkcija pisi() ispisuje rekurzivno sve stavke izbornika i automatski ispisuje sve podizbornike. U glavnom programu, nakon što se spojimo na MySQL server i na bazu, ispisivanje izbornika započinjemo pozivom funkcije pisi(0);
No, to može biti problem kod velikog broja stavki - izbornik bi zauzimao previše mjesta. Zato ćemo na početku prikazati samo osnovne stavke. To znači da ćemo u našem primjeru ispisati: Voće, Pića i Automobili. Kad se klikne na neku od tih linkova, otvorit će se njegov podizbornik i tako dalje... Manjon promjenom prethodne funkcije i dodatkom jos jedne dobivamo sljedeci kod:
<?php
function kreiraj_stablo($id) {
global $db, $stablo;
$upit='
SELECT id, naziv, link, nadredjena
FROM izbornik
WHERE id='.$id;
$rez=mysql_query($upit,$db);
if ($rez and mysql_num_rows($rez)!=0) {
$red=mysql_fetch_assoc($rez);
$id=$red['id'];
$naziv=$red['naziv'];
$link=$red['link'];
$nadredjena=$red['nadredjena'];
if ($nadredjena!=0) {
$stablo[]=$nadredjena;
kreiraj_stablo($nadredjena);
}
}
}
function pisi($pId) {
global $db, $stablo;
$upit='
SELECT id, naziv, link, nadredjena
FROM izbornik
WHERE nadredjena='.$pId;
$rez=mysql_query($upit,$db);
if ($rez and mysql_num_rows($rez)!=0) {
if ($pId==0) {
?><ul id="izbornik"><?php
} else {
?><ul><?php
}
while ($red=mysql_fetch_assoc($rez)) {
$id=$red['id'];
$naziv=$red['naziv'];
$link=$red['link'];
if (isset($_GET['id']) and $_GET['id']==$id)
$aktivni=' class="izbornik-aktivni"';
else
$aktivni='';
?>
<li<?php echo $aktivni; ?>>
<a href="<?php echo $link; ?>"><?php echo $naziv; ?></a>
<?php
if (in_array($id,$stablo)) {
$upit_pod='
SELECT COUNT(id) broj_podredjenih
FROM izbornik
WHERE nadredjena='.$id;
$rez_pod=mysql_query($upit_pod,$db);
if ($rez_pod and mysql_num_rows($rez_pod)>0) {
pisi($id);
}
}
?>
</li>
<?php
}
?>
</ul>
<?php
}
}
$db=@mysql_connect('localhost','izbornik','abc123');
if (!$db) {
exit('Ne mogu se spojiti na MySQL server!!!');
}
if (!mysql_select_db('aubx_aubx',$db)) {
exit('Ne mogu se spojiti na MySQL bazu!!!');
}
if (isset($_GET['id']) and $_GET['id']==(int)$_GET['id']) {
$id=$_GET['id'];
$stablo[]=$id;
kreiraj_stablo($id);
} else {
$stablo=array();
}
pisi(0);
?>
Kad pokrenemo izbornik i u našem primjeru kliknemo na kategoriju Automobili - Mercedes - A klase dobijemo sljedeći rezultat: