MESIMI 4
Ne kete leksion do te bazohemi ne njohurite e marra ne leksionin e meparshem ku trajtohen njohurite e pergjithshme mbi gjuhen PHP deri tek komunikimi me browserin , lidhja me bazen e te dhenave , ekzekutimi i komandave SQL ne bazen e te dhenave, kapja e te dhenave ne PHP dhe iteracioni neper rreshtat e tabeles.
Per kete leksion duhet te dini:
1- Ndertimin e nje tabele ne HTML me seksionin e kokes dhe te trupit
2- Formatimin e tabeles nepermjet nje klase CSS qe referon elementet ne menyre hierarkike
3- Lidhjen me bazen e te dhenave
4- Ngjitjen e stringjeve ne PHP
5- Sintaksen baze te gjuhes PHP (emrat e variablave, instruksionet, tipet e te dhenave etj)
6- Strukturat e kontrollit ne PHP se paku (if.. else, while)
7- Sintaksen e komandes SELECT ne MySQL
8- Ekzekutimin e komandave SQL ne bazen e te dhenave
9- Kapjen e te dhenave qe vijne si rezultat i komandes SQL ne variabla te PHP
10- Iteracionin mbi rreshtave te tabeles(ave) qe rezultojne nga komanda SQL
11- Kapjen e vlerave te kollonave te tabeles nga PHP
12- Deklarimin e prototipit te funksioneve ne PHP
13- Therritjen e funksioneve ne PHP
14- Funksionin e include dhe require
Sigurohuni qe posedoni njohurite e mesiperme perpara se te filloni mesimin e rradhes.
Leksion.
Per kete leksion do te marrim ne konsiderate DB e meposhtem, kodin e te cilit po e paraqesim me poshte:
CREATE DATABASE `mycms`
CREATE TABLE IF NOT EXISTS `categories` (
`code` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`description` varchar(250) DEFAULT NULL,
`rendi` int(11) NOT NULL DEFAULT '100',
`active` int(11) NOT NULL DEFAULT '0',
`expandable` int(11) NOT NULL DEFAULT '1',
`displaylist` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`code`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `categories` (`code`, `name`, `description`, `rendi`, `active`, `expandable`, `displaylist`) VALUES
(1, 'Products', 'OUr compnay products Products', 1, 0, 1, 1),
(2, 'Services', 'Ouor services', 2, 1, 1, 1),
(3, 'Solutions', 'our solutions', 3, 1, 1, 1);
CREATE TABLE IF NOT EXISTS `articles` (
`code` int(11) NOT NULL,
`title` varchar(70) NOT NULL,
`subtitle` varchar(250) NOT NULL,
`content` text NOT NULL,
`foto1` varchar(200) NOT NULL,
`foto2` varchar(200) NOT NULL,
`foto3` varchar(200) NOT NULL,
`rendi` int(11) NOT NULL DEFAULT '100',
`active` int(11) NOT NULL DEFAULT '0',
`displayrelated` int(11) NOT NULL DEFAULT '1',
`displaysections` int(11) NOT NULL,
`category` int(11) NOT NULL,
PRIMARY KEY (`code`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `sections` (
`code` int(11) NOT NULL,
`title` varchar(70) NOT NULL,
`subtitle` varchar(250) NOT NULL,
`content` text NOT NULL,
`foto1` varchar(200) NOT NULL,
`foto2` varchar(200) NOT NULL,
`foto3` varchar(200) NOT NULL,
`rendi` int(11) NOT NULL DEFAULT '100',
`active` int(11) NOT NULL DEFAULT '0',
`displayrelated` int(11) NOT NULL DEFAULT '1',
`displaysections` int(11) NOT NULL,
`article` int(11) NOT NULL,
PRIMARY KEY (`code`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Duke perdorur PHPMyadmin, I cili instalohet si pjese e pakets XAMP dhe mund ta aksesoni ne http://localhost/phpmyadmin , krijoni nje DB me emrin mycms. Me pas duke kopjuar kodin e mesiperm tek hapesira ku mund te shkruani kod SQL ne PHPMyadmin, si ne figure.
Mund te krijoni bazen e te dhenave te nevojshme per kete mesim.
Krijimi i Website
Per kete mesim do te perdorni websiten qe keni krijuar ne leksionin e meparshem. Kujtojme qe menyra me e thjeshte per te krijuar nje website ne XAMP , menyra me e thjeshte eshte te krijoni nje dosje me emrin e sitet (emri nuk duhet te kete hapesira midis) psh c:\xamp\htdocs\mysite\
Ne Dreamweaver, do te krijoni nje dynamic site qe I ruan te dhenat ne dosjen c:\xamp\htdocs\mysite\
Me kaq keni krijuar ambjentin baze per kete mesim.
LIDHJA ME BAZEN E TE DHENAVE
Ne Dreamweaver do te krijoni nje skedar PHP bosh dhe do ta ruani ne dosjen rrenje te sitet Tuaj (mysite) , me emrin db.php.
Me poshte eshte kodi php i faqes db.php
<?php
mysql_connect("localhost","root","")
or die("nuk lidhem dot me db serverin");
mysql_select_db("mycms") or die("nuk zgjedh dot DB");
?>
Komanda mysql_connect("localhost","root","") realizon lidhjen me serverin e bazes se te dhenave dhe ka si sintakse: mysql_connect($TheServer,$TheUsername,$ThePassword) , ku:
- $TheServer, eshte emri ose adresa IP e serverit te bazes se te dhenave(ne rastin tone localhost )
- $TheUsername, eshte username me te cilin lidhemi me bazen e te dhenave. Ky se bashku me fjalekalimin zakonisht jepet nga kompania qe realizon hostimin e sitet (ne rastin tone root dhe password eshte bosh )
Komanda or die("nuk lidhem dot me db serverin"); afishon nje mesazh per perdoruesin dhe perfundon ekzekutimin e faqes PHP.
Komanda mysql_select_db("mycms") realizon lidhjen me bazen e te dhenave qe do punojme (ne rastin tone mycms pasi kemi arritur te logohemi ne serverin e bazes se te dhenave).
Do te ndertojme nje faqe te re te cilen do ta quajme board .php , te cilen do ta perdorim si test per ndertimin e funksionit tone.
Me poshte eshte kodi i faqes board.php
<link href="/css/stylesheet.css" rel="stylesheet" type="text/css">
<?php require_once("db.php"); ?>
<?php
// funksion qe afishon te gjithe kategorite
function dispaycategories()
{
$url="categories.php";
$css="cats";
$cond=" where active=1 ";
$orderby=" order by rendi ASC ";
$q=" SELECT * FROM categories ".$cond.$orderby;
$res=mysql_query($q) or die(mysql_error());
echo '<table class="'.$css.'">
<thead>
<tr><td>KATEGORITE</td></tr>
</thead>
<tbody>';
while ($rec=mysql_fetch_array($res))
{
echo '<tr>
<td><a href="'.$url.'?id='.$rec['code'].'"> '.$rec["name"].'</a></td>
</tr>';
}
echo '</tboby>
</table>';
}
// fundi I funksionit
?>
<?php
// Therrasim funksionin qe afishon kategorite
dispaycategories();
?>
Rezultati I ekzekutimit do te ishte I ngjashem me figuren e meposhtme
Kodi CSS per formatimin e rezultatit paraqitet me poshte:
.cats {
width: 100%;
}
.cats thead {
}
.cats thead tr {
}
.cats thead tr td {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
text-transform: uppercase;
color: #FFFFFF;
background-color: #FF6600;
line-height: 24px;
font-weight: bold;
letter-spacing: normal;
text-indent: 10px;
}
.cats thead tr td a{
}
.cats tbody {
}
.cats tbody tr {
}
.cats tbody tr td{
font-family: verdana;
font-size: 12px;
color: #FF3300;
text-decoration: none;
line-height: 24px;
border-right-width: 1px;
border-bottom-width: 1px;
border-right-style: solid;
border-bottom-style: solid;
border-right-color: #FF3300;
border-bottom-color: #FF0000;
}
.cats tbody tr td a{
}
Sic duket edhe nga shembulli I mesiperm eshte ndertuar nje funksion per afishimin e kategorive.
Ky funksion mund te parametrizohet me tej, ne menyre te tille qe ne varesi te parametrave qe i jepen ne momentin e therritjes te afishoje kategorite sipas kerkeses se perdoruesit.
Me poshte eshte nje version i permiresuar i funksionit displaycategories ne faqen board.php. Po e quajme funksionin e ri displaycats.
<?php require_once("db.php"); ?>
<?php
// funksion qe afishon te gjithe kategorite
function displaycats($cond,$orderby,$url,$css)
{
$q=" SELECT * FROM categories ".$cond.$orderby;
$res=mysql_query($q) or die(mysql_error());
echo '<table class="'.$css.'">
<thead>
<tr><td>KATEGORITE</td></tr>
</thead>
<tbody>';
while ($rec=mysql_fetch_array($res))
{
echo '<tr>
<td><a href="'.$url.'?id='.$rec['code'].'"> '.$rec["name"].'</a></td>
</tr>';
}
echo '</tboby>
</table>';
}
// fundi I funksionit
?>
<?php
// Therrasim funksionin qe afishon kategorite
$url="categories.php";
$css="cats";
$cond=" where active=1 ";
$orderby=" order by rendi ASC ";
displaycats($cond,$orderby,$url,$css);
?>
Ne kete version te dyte te funksionit qe afishon kategorite jane kaluar si parametra URL, klasa css ,kushti llogjik per filtrimin e rreshtave te tabeles dhe menyra e renditjes. Kjo gje bent e mundur qe per percaktojme cfare pamje grafike do te kete lista e kategorive, cilat rreshta do perzgjedhim, si do ti rendisim , ku do te shkoje browser kur te klikohet mbi emrin e kategorise ne momentin qe e therrasim funksionin. Kjo na mundeson qe I njejti funksion te perdoret disa here ne te njejten faqe(pse jo edhe ne faqe te tjera nese eshte ne nje skedar te cilin e bejme include) duke afishuar gjera te ndryshme ne varesi te parametrave qe I jep perdoruesi ne therritje.
Se fundi kete funksion mund ta parametrizojme me tej me qellimin qe te mund ta perdorimin per me cdo tabele. Ne kete rast do te duhet ti japim si argumenta, emrin e tabeles, emrin e kollones qe eshte celes primar, shprehjen qe do te gjeneroje permbajtjen qe do te afishohet (shih me poshte per sqarim), emrin e kollones qe do te afishohet ,emrin qe do ti vendosim id ne URL string (deri tani eshte id por mund tia leme perdoruesit ne dore ta percaktoje) .
Sqarim: Shprehja qe do te gjeneroje permbajtjen mund te jete emri i nje kollone psh emertimi ose nje nje shprehje mbi disa kollona te tabeles psh:
1. SELECT code,name from categories
Ne kete rast $displayexpression=”name” dhe $displayname=”name”; Ky eshte rasti me I zakonshem I perdorimit.
Ndersa nese duam te afishojme emrin dhe mbiemrin e studenteve nepermjet funksionit tone. Do te shkruanim
2. Select code,CONCAT(firstname,’ ’,lastname) AS ‘Emri’ from students
Ne kete rast $displayexpression=” CONCAT(firstname,’ ’,lastname)” dhe $displayname=” Emri”;
Me poshte eshte versioni I funksionit display() :
<?php
function display($tablename,$caption,$pkcolumn,$displayexpression,$displayname,$pklink,$cond,$orderby,$url,$css)
{
$q=" SELECT ".$pkcolumn.",".$displayexpression." FROM ".$tablename." ".$cond.$orderby;
$res=mysql_query($q) or die(mysql_error());
echo '<table class="'.$css.'">
<thead>
<tr><td>'.$caption.'</td></tr>
</thead>
<tbody>';
while ($rec=mysql_fetch_array($res))
{
echo '<tr>
<td><a href="'.$url.'?'.$pklink.'='.$rec[$pkcolumn].'"> '.$rec[$displayname].'</a></td>
</tr>';
}
echo '</tboby>
</table>';
}
?>
<?php
$tablename="categories";
$caption="Categories";
$pkcolumn="code";
$displayexpression="description";
$displayname="description";
$pklink="id";
$url="categories.php";
$css="cats";
$cond=" where active=1 ";
$orderby=" order by rendi ASC ";
display($tablename,$caption,$pkcolumn,$displayexpression,$displayname,$pklink,$cond,$orderby,$url,$css)
?>