Professional Documents
Culture Documents
PHP Can Ban Nang Cao PDF
PHP Can Ban Nang Cao PDF
Phn I: PHP C Bn
Bi 1: Ngn ng PHP:
Cch trnh by trang Homepage (Front page)
Homepage trong Joomla! c ci t v th hin thng qua mt thnh phn c
bit l com_frontpage. Do vy trong Joomla! trang homepage cn c gi l
Front Page. Thng qua trang Front Page bn c th trnh by mt s cch: dng
blog, dng kt hp blog + chia ct... Vi nhng ai mi lm quen vi Joomla, cc
tham s i km trang Frontpage nh: leading, intro, colums, links... c th gy kh
khn. Tuy nhin hi vng vi mt vi bc n gin di y bn hon ton c th
lm ch Frontpage.
Bc 1: ng nhp vo trang qun tr (back-end).
VD: http://www.thietkejoomla.com/administrator
Bc 2: Vo phn qun l menu
Theo mc nh, trang Homepage c t trong "Main Menu". M menu Menus -> Main Menu --> chn "Home" v quan st cc tham s ty chnh bn tay phi
(mc "Parameters").
VD bn thit lp nh hnh bn, bn s c kt qu nh di y:
Email: Mrhaisyc@gmail.com
Yahoo: Nguyenthanhhai702
Lu :
qun l cc bi vit ca trang FrontPage bn m menu "Content" --> "Front
Page Manager"
c trang Homepage ging nh VnExpress (cc bi vit c trnh by ln lt
theo cc ch ) bn cn tm v ci t mt component chng hn nh: D4Ezine,
iJoomla...
Bi 2: Lnh iu khin vng lp
iu khin vng lp, tc l bn iu khin chng trnh ca bn t ng thc hin
mt on m lnh no lp i lp li nhiu ln (lp mt s lng ln no ,
hoc lp cho n khi tho mn mt iu kin no ).
PHP cung cp cho chng ta hai kiu vng lp: vng lp while (lp kim tra iu
kin, cho n khi iu kin c tho mn) v vng lp for (xc nh s ln lp
li)
a) Vng lp while
Vng lp while l mt dng vng lp n gin nht, cu trc ca n gn ging nh
lnh if:
while (iu kin)
{
//Khoi cau lenh can lap
}
Vng lp while s c lng mt biu thc gi tr kiu boolean (ng hoc
sai).Nu gi tr ca biu thc l false, on m trong cp du ngoc (on m cn
lp) s c b qua v nhy n on m sau vng lp. Nu gi tr ca n l true,
on m trong cp du ngoc s c thc thi. Khi bt gp du ngoc m ("}") ,
iu kin kim tra s c tnh ton li, v nu gi tr vn l true, on m trong
ngoc li tip tc c thc thi. Ch rng iu kin lp ch c tnh ton ti
thi im bt u lp. V vy, d iu kin lp c b thay i trong qu trnh thc
thi on lnh trong cp du {} th on lnh vn c tip tc thc hin cho
n ht. Mun dng li mt v tr xc nh no trong khi cu lnh, chng ta
s dng lnh break:
V d1: Tnh tng t 1 n 5:
<?php
$i=0;
$tong=0;
while ($i<=5)
{
$tong=$tong+$i;
$i+=1;
}
?>
Email: Mrhaisyc@gmail.com
Yahoo: Nguyenthanhhai702
Yahoo: Nguyenthanhhai702
?>
</table>
</body>
</html>
xc nh li s khc nhau ca 2 cu lnh trn, n gin bn ch vic thay iu
kin $i<=3 thnh $i<1, bn s thy hai kt qu khc nhau lin . Phn ny dnh cho
bn t ngi ngh. OK???
Qun mt, lc ny ti cp n lnh break, nhng cha cho v d, by gi chng
ta hy xem xt v d sau:
Cc bn bit rng giai tha l mt con s ln kinh khng, v chng trnh ca
chng ta s tnh ton n giai tha, vi s n c gi n theo a ch url:
http://dia_chi_trang_web_cua_ban/giaithua.php?n=xx ( x l mt s do ngi
dng t nhp)
Do giai tha l mt con s cc k ln, nn chng ta ch cho php ngi dng tnh
n ti a l 8 giai tha chng hn. Nu h nhp ln hn 8 th sao? Hy xem y:
<HTML>
<?php
// Ghi lai voi ten file la giaithua.php
$giaithua=1;
$i=1;
while ( $i<=$n)
{
$giaithua*=$i;
$i+=1;
if ($i>8 )
{
echo ("Chi tinh den 8! <BR>");
break;
}
}
echo ("Ket qua la: ".$giaithua);
?>
</HTML>
on m trn ch cho php tnh n 8 giai tha, nu ngi dng nhp mt con s
ln hn 8 th my s hin th 8 giai tha, cn nu nh hn th vn chy tt.
c) Vng lp for.
Vng lp for, vi ngha u tin l lp vi s ln nh trc, c cu trc nh sau:
for ( $bin = gi_tr_u; $bin < (hay <=) gi_tr_kt_thc; tng_bin_m)
{
// Khi cu lnh
Email: Mrhaisyc@gmail.com
Yahoo: Nguyenthanhhai702
}
Biu thc $bin=gi_tr_u, m bo bin c gn mt gi tr khi u (1)
Biu thc $bin< (hay <=) gi_tr_kt_thc, s xc nh xem bin t n gi
tr kt thc (tc l iu kin lp khng cn ng na) cha (2)
Biu thc tnh ton tng_bin_m m bo sau mt s ln lp no th biu
thc xc nh iu kin (2) s dn n kt qu sai ( thot khi vng lp).
V d:
for ( $i = 1; $i <10; ++$i)
{
echo ("Gi tr ca bin \$i l: ".$i);
}
Mt bin dng khc ca vng lp for, gn ging nh lnh r nhnh if v while:
for (bieu_thuc_1; bieu_thuc_2; bieu_thuc_3):
// Khi cu lnh
endfor;
V d:
<?php
for ($i=1; $i<=10;++$i)
?>
<TR><TD> <INPUT type="text"> </TD></TR>
<?php
endfor
?>
OK, Nh vy cc bn hc qua cc lnh c bn nht ca php, v cng l cc
lnh c bn ca tt c cc ngn ng lp trnh (gn, r nhnh v lp). Sau ny nu
phi trin khai trn cc ngn ng lp trnh khc, cch vit cc lnh ny c th khc
nhau, nhng bn cht ca chng th mi mi khng bao gi thay i.
Bi 3: Mt vi vn v hm header()
Li "Headers Already Sent " l 1 li thng dng n kh tin, v tui nhn c
rt rt nhiu cu hi v n dng nh " N l ci g ?, Sao li nh th" , v vy tui
quyt nh a n ln bn m nhm lm sng t vn
Mt HTTP response ( tr v ) thng thng bao gm 2 phn l header( u) v
content (ni dung), Phn header trong 1 HTTP response ch ra bn cht ca
response v cch x l vi chng. V d, 1 response c ch ra "Location" trong
header , ci ny bo cho trnh duyt t ng chuyn n Url c ch ra trong
header.Hoc 1 response c "Content-type" trong header, trnh duyt s x l ni
dung theo loi ni dung :image x khc , text x khc, Flash xa khc
Header cng c s dng khi bn lm vic vi session, c th bn ko thy r
c iu ny, nhng trong nhng hm v session ca PHP n u dng thng
qua cookie. V th ngay khi bn dng session bn to ra 1 HTTP header. Hm
Email: Mrhaisyc@gmail.com
Yahoo: Nguyenthanhhai702
Yahoo: Nguyenthanhhai702
Yahoo: Nguyenthanhhai702
Yahoo: Nguyenthanhhai702
return $td_tmp;
}
function viet_cot ($noidung,$dinhdang)
{
$td_tmp="<tr " . $dinhdang . ">" . $noidung . "</tr>";
return $td_tmp;
}
?>
<?
function viet_bang ($noidung,$dinhdang)
{
$td_tmp="<table " . $dinhdang . ">" . $noidung . "</table>";
return $td_tmp;
}
// To mt bng tng t trn nhng dng cc hm va xy dng
$noidung = viet_cot(viet_o("STT","") . viet_o("H tn","") . viet_o ("Ngy
sinh",""),"");
$noidung .=viet_cot(viet_o("1","") . viet_o("L Nguyn Sinh","") . viet_o
("01/04/2006",""),"");
$noidung .=viet_cot(viet_o("2","") . viet_o("Th mt t","") . viet_o
("01/01/2007",""),"");
$noidung = viet_bang($noidung,"");
echo $noidung;
?>
on m trn nhn qua th n hi di, nhng khi bn x l vi s lng d liu ln
th n s tr nn ngn gn hn nhiu, nht l ta c th dng vng lp duyt qua
cc hng ca mt bng.
II. Cc tham s mc nh v cc tham s ty chn
Khi a cc tham s vo hm, chng ta c th thit lp cc tham s mc nh. Cc
tham s ny c t gi tr ngay khi xy dng hm.
V d:
function viet_o ($noidung, $dinhdang="")
{
$td_tmp="<td " . $dinhdang . ">" . $noidung . "</td>";
return $td_tmp;
}
Nu cc tham s mc nh c t ht bn phi ca danh sch tham s, khi
Email: Mrhaisyc@gmail.com
Yahoo: Nguyenthanhhai702
10
Yahoo: Nguyenthanhhai702
{
GLOBAL $x, $y
return $x+$y;
}
?>
Cch 2:
<?
$x=1;
$y=3;
function cong ()
{
return $GLOBALS["x"]+$GLOBALS["y"];
}
?>
Bi 6: Hm trong PHP
I. Khi nim hm
Hm (function), nguyn ngha ting Anh c ngha l chc nng.
Trong lp trnh, ta c th hiu hm l mt on chng trnh c xy dng
thc hin mt chc nng no .
on chng trnh ny ch cn phi vit duy nht mt ln, v c th c s dng
nhiu ln trong ton b chng trnh.
Mt hm s c xc nh bi tn hm v cc tham s u vo lin quan n hm
. Thng thng, hm s tr v mt kt qu no .
Chng ta c th tng tng theo s sau:
Tham s u vo 1 |
Tham s u vo 2 |
Tham s u vo 3 | ---> tn hm --> kt qu tr v sau khi gi hm.
... . |
Tham s u vo n |
Nh vy mt hm s nhn cc thng tin u vo, x l n v tr v kt qu no .
Trong PHP c rt nhiu hm c xy dng sn m chng ta ch vic em ra s
dng, nh cc hm x l chui, thi gian, x l tp, th mc...
Xt v bn cht, mt ngn ng lp trnh ch c ba cu lnh chnh l gn, lp v r
nhnh. Vic sp xp cc cu lnh nh th no cho ra mt kt qu gi l mt
thut ton (cc bc gii mt bi tan, c cp nhng bi u tin)
Email: Mrhaisyc@gmail.com
11
Yahoo: Nguyenthanhhai702
12
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
13
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
14
Yahoo: Nguyenthanhhai702
15
Yahoo: Nguyenthanhhai702
16
Yahoo: Nguyenthanhhai702
17
Yahoo: Nguyenthanhhai702
18
Yahoo: Nguyenthanhhai702
while ($i<=3)
{
?>
<TR><TD> <INPUT type="text"> </TD></TR>
<?php
$i+=1;
}
?>
</table>
</body>
</html>
b. Vng lp do...while
Vng lp ny ging nh vng lp while, nhng thay v kim tra iu kin vo lc
u ca on lnh cn lp, th n li kim tra gi tr iu kin vo cui vng lp.
iu ny c ngha l n lun lun thc hin on lnh cn lp t nht mt ln.
Cu trc ca n nh sau:
do
{ on (khi) cu lnh cn lp
} while (iu kin);
V d:
<HTML>
<TABLE>
<BODY>
<?php
$i=1;
do
{
?>
<TR><TD> <INPUT type="text"> </TD></TR>
<?php
$i+=1;
}while ($i<=3);
?>
</table>
</body>
</html>
xc nh li s khc nhau ca 2 cu lnh trn, n gin bn ch vic thay iu
Email: Mrhaisyc@gmail.com
19
Yahoo: Nguyenthanhhai702
kin $i<=3 thnh $i<1, bn s thy hai kt qu khc nhau lin . Phn ny dnh cho
bn t ngi ngh. OK???
Qun mt, lc ny ti cp n lnh break, nhng cha cho v d, by gi chng
ta hy xem xt v d sau:
Cc bn bit rng giai tha l mt con s ln kinh khng, v chng trnh ca
chng ta s tnh ton n giai tha, vi s n c gi n theo a ch url:
Nhanhoa.com - Offline ( x l mt s do ngi dng t nhp)
Do giai tha l mt con s cc k ln, nn chng ta ch cho php ngi dng tnh
n ti a l 8 giai tha chng hn. Nu h nhp ln hn 8 th sao? Hy xem y:
<HTML>
<?php
// Ghi lai voi ten file la giaithua.php
$giaithua=1;
$i=1;
while ( $i<=$n)
{
$giaithua*=$i;
$i+=1;
if ($i>8 )
{
echo ("Chi tinh den 8! <BR>");
break;
}
}
echo ("Ket qua la: ".$giaithua);
?>
</HTML>
on m trn ch cho php tnh n 8 giai tha, nu ngi dng nhp mt con s
ln hn 8 th my s hin th 8 giai tha, cn nu nh hn th vn chy tt.
c) Vng lp for.
Vng lp for, vi ngha u tin l lp vi s ln nh trc, c cu trc nh sau:
for ( $bin = gi_tr_u; $bin < (hay <=) gi_tr_kt_thc; tng_bin_m)
{
// Khi cu lnh
}
Email: Mrhaisyc@gmail.com
20
Yahoo: Nguyenthanhhai702
21
Yahoo: Nguyenthanhhai702
22
Yahoo: Nguyenthanhhai702
V d:
if ($name="Sinh")
{
echo ("Good morning, my boss");
}
Nu khi cu lnh cn lm ch bao gm duy nht mt dng lnh, ta c th b cp
d u { } :
if ($name="Sinh")
echo ("Good morning, my boss");
Nhng nu nhiu hn mt dng lnh, ta phi a chng vo cp du ngoc {}:
if ($name=="Sinh")
{
echo ("Good morning, my boss");
echo ("Have a romantic day!");
}
on lnh trn s kim tra nu iu kin bin $name = "Sinh" th n s hin th li
cho. Cn nu khng th n khng lm g c!
iu kin t vo c th l ng, c th l sai, c th l tng hp ca nhiu iu
kin. Hy xem v d sau:
if ("false" )
echo ("Khong co gi ca");
if (($name=="sinh") && ($pass=="test"))
echo ($name. " nhp ng password");
on lnh trn c th vit tng ng vi:
if ($name=="sinh")
{
if ($pass=="test")
echo ($name. " nhp ng password");
}
Nh bn thy trn, trong mt cu lnh, chng ta c th chn nhiu on lnh
khc, ngi ta gi l cu trc khi, tc l trong mt khi lnh, c th c cha
nhiu khi lnh con khc. Nu bn phi c m ngun ca ngi khc, hi vng
bn khng b hoa mt v hng chc khi lnh chen chc vo nhau nh vy.
Email: Mrhaisyc@gmail.com
23
Yahoo: Nguyenthanhhai702
24
Yahoo: Nguyenthanhhai702
25
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
26
Yahoo: Nguyenthanhhai702
27
Yahoo: Nguyenthanhhai702
28
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
29
Yahoo: Nguyenthanhhai702
30
Yahoo: Nguyenthanhhai702
31
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
32
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
33
Yahoo: Nguyenthanhhai702
Du ch thch:
Cc on ch thch rt hu dng trong cc chng trnh ca bn (chng hn mun
ch thch cu lnh ny lm g, on chng trnh ny lm g...). Khi phn tch m
PHP, cc on ch thch s b b qua, nhng mt lp trnh vin th khng bao gi
b qua chng
Chng ta c th s dng mt s du ch thch sau trong PHP:
// dng vn bn ch thch (ch p dng trn mt dng)
/* on vn bn ch thch */ (nm trong cp /* v */
Lu rng cc du ch thch ny ch c hiu lc trong cc on m nhng PHP
thi y nh
V d
<?php
echo("Ti l mt oan hn v danh"); // Hin th li gii thiu ln mn hnh
echo (" S yu l lch");
/* Hin th bn s yu l lch
Copyright by CMXQ
*/
echo ("Tn y : XXXXXXX");
echo ("Ngy sinh: XXXX");
?>
K t gii phng
Hy ch n dng ch sau:
My name's "CMXQ"
in n ra mn hnh, chc cc bn s lm nh sau:
<?php
echo("My name's ""CMXQ"");
?>
Rt tic l bn nhm. PHP c quy nh mt s k t c bit (Du ngoc kp
(") l mt trong cc k t ). Mt vi phin bn ca web server khi gp li ny
khng thc hin na, v thng bo li n ngi dng. Cn trong mt vi phin
bn khc, n s t ng chn mt du st cho (/) trc k t gy li ny. Mt
du gch cho (\) trc k t gy li khin cho n c i x nh l mt k t
thng thng, khng phi l k t c bit. K t ny (\) c gi l k t gii
phng (Escaping character).
Email: Mrhaisyc@gmail.com
34
Yahoo: Nguyenthanhhai702
on m ng nh sau:
<?php
echo ("My name's: \"CMXQ\"");
?>
Di y l mt s cc k t c bit m c th c ch r vi k t gii phng
gch cho
K t ni tip Ngha
\' Du mc lng (')
\" Du mc kp (")
\\ Du gch cho (\)
\$ Du $
\n K t to dng mi
\r K t v u dng
\t K t Tab
Hy xem v d di y (yu cu bn t tm hiu v phn tch m ngun)
<?php
$name="Tin Tng";
echo("Gi tr ca bin \$name l $name);
?>
Bi 12: Vit chng trnh PHP u tin: "Hello world!"
M notepad ra,coppy v pase on m ny vo:
{geshibot lang="php" head="helloworld.php"}<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Study</title>
</head>
<body>
<?
echo 'Hello world!';
?>
</body>
</html>{/geshibot}
lu li thnh file Hello_world.php,a vo WWW folder, ca mnh l:
D:\VertrigoServ\www
Chy link http://localhost/Hello_world.php
O K ! K t qu :
{geshibot}Hello world!{/geshibot}
Email: Mrhaisyc@gmail.com
35
Yahoo: Nguyenthanhhai702
Bi 1 : Video
Bi 2: Vit ng dng m s ngi online bng PHP
Trong bi ny, chng ta s ni v cch thc xy dng tnh nng thng k s ngi
ang ving thm website ca bn. V l chc nng nh, nn ti khng i nhiu v
nhng tnh nng ln nh bao nhiu khch, bao nhiu thnh vin,...Ch n thun l
qu trnh hin th hin ti c bao nhiu ngi ang thm ving website ca bn.
Trc ht, chng ta khi to c s d liu nh sau:
{geshibot lang="php" head=""}mysql> create table useronline(tgtmp INT(15)
DEFAULT "0" NOT NULL ,
ip VARCHAR(50) NOT NULL ,
local VARCHAR(100) NOT NULL,
PRIMARY KEY(tgtmp),
KEY ip(ip),
KEY local(local));{/geshibot}
tgtmp l thi gian m h truy cp c tnh khi h truy vo trang web .
IP l dy s lu thng tin IP ca h khi ving thm website ca chng ta.
local l ni lu ng dn m h ang truy cp.
Khi ngi dng truy cp vo trang web, chng ta s tin hnh insert thng tin ca
h vo c s d liu vi cc tham s c bn nhng trong database.
tgtmp c tnh ra bng hm time(). Hm ny s ly ra thi gian hin ti ca
ngi truy cp. Tip tc ta li tnh thi gian mi ca h, c tnh bng vic quy
c thi gian quy nh. C th y ti cho l 900 giy tng ng vi 15 pht
truy cp ca h.
{geshibot lang="php" head=""}<?php
$tg=time();
$tgout=900;
$tgnew=$tg - $tgout;
?>{/geshibot}
nh vy nu thi gian lu trong database m nh hn thi gian new ny th chng
ta c th hiu rng v khch y ri khi website ca chng ta. C th hn.
V d: ti ving thm website l 7h.
nh vy h thng s ghi thng tin lc l 7h.
Nu sau 1 thi gian ti khng lm g, hoc ti khng truy cp website na th
h thng s khng ghi nhn thng tin mi. Nh th nu by gi 8h v tr i 15
pht ti quy c, r rng l thi gian mi hin ti l 7h45, Thi gian ny vn ln
hn thi im lu thng tin 7h (7h45 > 7h). Do vy, nu chng tha iu kin
th chng ta ch vic xa i cc record trong c s d liu l xong.
Vy ta c code kt ni CSDL nh sau:
{geshibot lang="php" head=""}<?php
$conn=mysql_connect("localhost","root","root") or die("can't connect");
Email: Mrhaisyc@gmail.com
36
Yahoo: Nguyenthanhhai702
mysql_select_db("online",$conn);
?>{/geshibot}
Sau ta tin hnh ghi nhn thng tin ngi dng vo CSDL.
{geshibot lang="php" head=""}<?php
$sql="insert into useronline(tgtmp,ip,local)
values('$tg','$REMOTE_ADDR','$PHP_SELF')";
$query=mysql_query($sql);
?>{/geshibot}
$REMOTE_ADDR l bin mi trng dng ly ra IP ca ngi truy cp.
$PHP_SELF l bin mi trng dng ly ra ng dn m ngi dng ang
truy cp.
Tip n ta tin hnh xa record khi thi gian thc ln hn thi gian trong c s
d liu.
{geshibot lang="php" head=""}<?php
$sql="delete from useronline where tgtmp < $tgnew";
$query=mysql_query($sql);
?>{/geshibot}
Tip tc l cng vic hin th thng tin ra bn ngoi bng cch lit k cc record
c trong database.
{geshibot lang="php" head=""}<?php
$sql="SELECT DISTINCT ip FROM useronline WHERE file='$PHP_SELF'";
$query=mysql_query($sql);
$user = mysql_num_rows($query);
?>{/geshibot}
DISTINCT l c php cho php lit k cc dng record m khng cho php chng
c d liu trng lp nh c php select bnh thng.
Vy chng ta s lit k tt c nhng ip ca nhng ai ang truy cp trn trang
useronline.php.
Phn vic cui cng cn li l chng ta s xut thng tin y ra trnh duyt.
V sau y l ton b ni dung code ca trang useronline.php
{geshibot lang="php" head=""}<?php
$tg=time();
$tgout=900;
$tgnew=$tg - $tgout;
$conn=mysql_connect("localhost","root","root") or die("can't connect");
mysql_select_db("online",$conn);
$sql="insert into useronline(tgtmp,ip,local)
values('$tg','$REMOTE_ADDR','$PHP_SELF')";
$query=mysql_query($sql);
$sql="delete from useronline where tgtmp < $tgnew";
$query=mysql_query($sql);
$sql="SELECT DISTINCT ip FROM useronline WHERE file='$PHP_SELF'";
$query=mysql_query($sql);
Email: Mrhaisyc@gmail.com
37
Yahoo: Nguyenthanhhai702
$user = mysql_num_rows($query);
echo "user online :$user";
?>{/geshibot}
Bi 3: PHP 5.3, Phn 3: Khng gian tn
PHP V5.3 c ln lch pht hnh sm. Lot bi "C g mi trong PHP V5.3"
ny bao hm cc tnh nng mi v th v trong bn pht hnh ny. Phn 1 ca lot
bi xem xt cc thay i cho lp trnh hng i tng v x l i tng trong
PHP 5.3. Phn 2 xem xt cc hm lambda v cc bao ng. Trong Phn 3 di
y, chng ta xem xt cc khng gian tn (namespaces), l mt trong cc tnh
nng c on trc nhiu nht v gy tranh ci nht trong bn pht hnh ny
ca PHP. Khi nim v khng gian tn m bo cch tr gip trnh cc vn v
nhiu hm, lp, v cc hng ca cng tn c nh ngha nhiu ln.
Khng gian tn tn ti trong nhiu ngn ng, gm ngn ng lp trnh C++ v
Java. Chng xut hin gip vi vic t chc cc c s m ln, ni thng
c mt mi lo ngi v chng cho hm hoc cc tn lp vi ng dng v cc vn
m c vic xy ra. Vic s dng cc khng gian tn c th gip nhn ra hm
hoc cng c no m m cung cp, hoc thm ch gip xc nh ngun gc ca
n. Mt v d v iu ny l khng gian tn H thng trong C#, c cha tt c cc
hm v lp c .NET framework cung cp.
Trong cc ngn ng khc khng c cc khng gian tn chnh thc (chng hn nh
cc bn PHP V5.2 v trc ), nhng ngi thng s bt chc cc khng gian
tn bng cch c gng s dng mt quy c t tn ring trong cc tn lp hoc
tn hm. Zend Framework thc hin vic ny, mi tn lp bt u bng Zend, v
mi khng gian tn con (child namespace) c tch ring bng mt nt gch di
(underscore). V d, nh ngha lp Zend_Db_Table l mt lp, b phn ca Zend
Framework v c chc nng c s d liu. Mt vn vi cch tip cn ny l
ch m kt qu c th tr nn di dng (verbose), nht l khi lp hoc hm su
vi lp (Zend_Cache_Backend_Apc l mt v d v vic ny t Zend
Framework). Mt vn na l ton b m phi ph hp vi kiu ny, c th kh
khn nu bn ang tch hp m ca bn th ba trong mt ng dng m khng ph
hp vi quy c t tn ny.
Lch s ca khng gian tn trong PHP l kh vng vo. Lc u chng nh dng
lm mt b phn ca PHP V5, nhng chng b loi b trong cc giai on pht
trin do vic thc hin ng cch l khng thnh cng. Cui cng chng sng li
nh mt b phn ca PHP V6, sau chuyn sang PHP V5.3 sau khi quyt nh
chuyn tt c cc tng cng khng theo unicode vo bn PHP V5.x khc, pht
hnh vo nm 2007. Trong khi phn ln trng thi ca cc khng gian tn l
khng i do thit k c o, vn v vic ton t no s s dng l vn ln
nht, vi cc gc nhn tri chiu v vic n s l g t tt c cc thnh vin ca
cng ng. Mt quyt nh cui cng s dng du gch cho ngc (\) lm
Email: Mrhaisyc@gmail.com
38
Yahoo: Nguyenthanhhai702
39
Yahoo: Nguyenthanhhai702
40
Yahoo: Nguyenthanhhai702
function bar()
{
echo "calling bar....";
}
?>
/* File1.php */
<?php
include './Foo.php';
Foo/bar(); // outputs "calling bar....";
?>
/* File2.php */
<?php
include './Foo.php';
use Foo as ns;
ns/bar(); // outputs "calling bar....";
?>
/* File3.php */
<?php
include './Foo.php';
use Foo;
bar(); // outputs "calling bar....";
?>
Lit k 4 trnh by cc cch khc nhau gi ra mt hm bar() trong khng gian
tn Foo. Trong tp File1.php, chng ta trng thy cch lm tng minh li gi,
mo u cho li gi vi tn ca khng gian tn. Tp File2.php s dng mt b
danh cho tn ca khng gian tn, nn chng ta thay tn ca khng gian tn bng b
danh . Cui cng, File3.php ch cn s dng khng gian tn, n cho php chng
ta thc hin li gi n bar() m khng c bt k tin t no.
Chng ta cng c th nh ngha nhiu hn mt khng gian tn trong mt tp bng
cch thm vo cc li gi namespace na trong tp. Lit k 5 minh ho vic ny.
Lit k 5. Nhiu khng gian tn trong mt tp
<?php
namespace Foo;
class Test {}
namespace Bar;
class Test {}
Email: Mrhaisyc@gmail.com
41
Yahoo: Nguyenthanhhai702
$a = new Foo\Test;
$b = new Bar\Test;
var_dump($a, $b);
Output:
object(Foo\Test)#1 (0) {
}
object(Bar\Test)#2 (0) {
}
By gi chng ta c cc c s v cch thc hin mt li gi bn trong mt
khng gian tn, chng ta hy xem xt mt s tnh hung phc tp hn v cch cc
li gi lm vic.
Gii php v khng gian tn
Mt trong nhng kh khn i vi cc khng gian tn l tm hiu cch m gii
php v phm vi lm vic. Trong khi cc trng hp n gin nh trong Lit k 4
l c th hiu c, vn xut hin khi chng ta bt u lng cc khng gian tn
vo ln nhau, hoc khi chng ta trong mt khng gian tn v ang gi n
vng ton cc. PHP V5.3 c cc nguyn tc v vic gii quyt cc vn ny mt
cch t ng theo mt cch c hiu bit.
Chng ta hy to ra mt s tp gp, tp no cng c hm hello() c nh ngha
trong n.
Lit k 6. Hm hello() c nh ngha trong cc khng gian tn khc nhau
/* global.php */
<?php
function hello()
{
echo 'hello from the global scope!';
}
?>
/* Foo.php */
<?php
namespace Foo;
function hello()
{
echo 'hello from the Foo namespace!';
}
?>
Email: Mrhaisyc@gmail.com
42
Yahoo: Nguyenthanhhai702
/* Foo_Bar.php */
<?php
namespace Foo/Bar;
function hello()
{
echo 'hello from the Foo/Bar namespace!';
}
?>
Lit k 6 xc nh hm hello() ba ln trong ba phm vi khc nhau: trong phm vi
ton cc, trong khng gian tn Foo, v trong khng gian tn Foo/Bar. Tu thuc
vo phm vi trong li gi hm hello() c thc hin, quyt nh c hm
hello() no c gi ra. Mt v d v cch cc li gi ny s trng nh trnh by
di y. y, chng ta s s dng khng gian tn Foo thy cch gi hm
hello() nh th no trong cc khng gian tn khc.
Lit k 7. Gi ra tt c cc hm hello() t khng gian tn Foo
<?php
include './global.php';
include './Foo.php';
include './Foo_Bar.php';
use Foo;
hello();
// outputs 'hello from the Foo namespace!'
Bar\hello(); // outputs 'hello from the Foo/Bar namespace!'
\hello();
// outputs 'hello from the global scope!'
?>
Chng ta thy c th rt ngn tin t khng gian tn khi tham chiu mt khng
gian tn con trong khng gian tn hin ti (li gi Foo/Bar/hello() c th c rt
ngn thnh Bar/hello()). V chng ta trng thy cch quy nh m chng ta mun
gi ra phng thc trong phm vi ton b bng cch ch cn mo u li gi
vi ton t khng gian tn.
By gi chng ta c c ch v cch cc khng gian tn lm vic, hy quan st
vic chng ta c th s dng chng trong m ca mnh.
Cc ca s dng i vi cc khng gian tn trong PHP
Mc ch tng th i vi cc khng gian tn l gip chng ta t chc tt hn
m ca chng ta bng cch loi b khi lng cc nh ngha nm trong phm vi
ton cc. Trong phn ny, chng ta s xem xt mt vi th d c cc khng gian
tn c th gip t c cc mc tiu ny vi s c gng nh nht.
Email: Mrhaisyc@gmail.com
43
Yahoo: Nguyenthanhhai702
Lp khng gian tn ca m bn th ba
Nhiu ng dng PHP s dng m t cc ngun khc nhau, d n l m c thit
k ph hp vi nhau nh m hin hnh trong kho cha PEAR, m t cc khung
lm vic khc nhau nh CakePHP hay Zend Framework, hay l m khc pht hin
ra t cc a ch khc nhau trn Internet. Mt trong nhng vn ln nht khi kt
hp m ny l n khng th ho trn tt vi m hin ti; tn cc hm hoc lp c
th xung t vi ci m chng ta ang s dng t trc trong ng dng ca chng
ta.
Mt th d v vic ny l gi PEAR Date. N s dng tn lp l Date, l mt
tn lp kh chung chung v rt c th ang tn ti u ti cc a im khc
trong m ca chng ta. Nh vy c mt cch tt khc phc vn ny l thm
mt lnh khng gian tn n gin vo u ca tp Date.php trong gi . By gi
chng ta c th c ring bit khi chng ta mun s dng lp PEAR Date thay
cho lp ca ring chng ta.
Lit k 8. S dng lp PEAR Date nh nh ngha trong mt khng gian
tn
<?php
require_once('PEAR/Date.php');
use PEAR\Date;
PEAR/Date.php
44
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
45
Yahoo: Nguyenthanhhai702
use Utils\Right;
whichHand();
46
Yahoo: Nguyenthanhhai702
47
Yahoo: Nguyenthanhhai702
};
};
48
Yahoo: Nguyenthanhhai702
if (!function_exists ('quoteWordsHelper')) {
function quoteWordsHelper($string) {
return preg_replace('/(\w)/','"$1"',$string);
}
}
return array_map('quoteWordsHelper', $text);
}
3.
4.
Chng ta c th s dng create_function(), l mt b phn ca PHP t bn
V4, to ra hm khi chy. V mt chc nng, cho php thc hin iu chng ta
mun, nhng n c mt vi nhc im. Nhc im chnh l n c bin dch
lc ang chy so vi thi gian bin dch, iu m s khng cho php cc b nh
nhanh cha m thao tc (opcode cache) n hm . y l c php kh ti, v vic
lm ni bt chui hin nay trong phn ln cc IDE ch n gin l khng lm vic.
Mc d cc hm m chp nhn cc hm gi li l mnh m, khng c cch tt no
thc hin mt hm gi one-off (hm c lm hoc xy ra ch mt ln) m
khng dng n vic thiu ng hong. Vi PHP V5.3, chng ta c th s dng
cc hm lambda lp li v d trn bng mt cch trong sng hn.
Lit k 3. quoteWords() s dng mt hm lambda cho cuc gi li
function quoteWords()
{
return array_map('quoteWordsHelper',
function ($string) {
return preg_replace('/(\w)/','"$1"',$string);
} );
}
Chng ta thy c php trong sng cho php nh ngha cc hm ny, c th c
ti u ha v hiu nng bng cc b nh m thao tc. Chng ta cng tng
cng tnh d c v tng thch c ci thin vi vic lm ni bt chui.
Hy xy dng nn ci ny tm hiu v cch s dng cc bao ng trong PHP.
Cc bao ng
Cc hm lambda t chng khng thm nhiu th m chng ta trc y khng th
lm. Nh thy, chng ta c th lm ton b vic ny bng cch s dng
create_function(), mc d vi c php ti hn v hiu nng thp hn l tng. Tuy
nhin chng vn l cc hm ch dng mt ln v khng bo tr bt c loi trng
thi m hn ch ta c th lm vi chng. y l ni cc bao ng bc vo v ly
cc hm lambda cho mc tip theo.
Bao ng l mt hm m c nh gi v chnh mi trng ca n, n c mt
hoc nhiu bin buc (bound variables) m c th truy cp khi gi hm. Chng
n t gii lp trnh hm, ni c mt s khi nim. Bao ng ging nh cc hm
Email: Mrhaisyc@gmail.com
49
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
50
Yahoo: Nguyenthanhhai702
tip tr li cc bao ng, nh xem trong Lit k 6. Trong trng hp ny, tui th
ca bao ng s thc s lu hn phng thc m xc nh chng.
Lit k 6. Bao ng c tr li bi mt hm
function getAppender($baseString)
{
return function($appendString) use ($baseString) { return $baseString .
$appendString; };
}
Bao ng v cc i tng
Bao ng c th l cng c hu ch khng nhng cho lp trnh th tc m cn cho
lp trnh hng i tng. Vic s dng cc bao ng c cng mt mc ch trong
tnh trng ny nh n s c bn ngoi mt lp: cha mt hm ring b ph
thuc trong mt phm vi nh. Chng cng thc s d s dng trong cc i tng
ca chng ta khi chng bn ngoi mt i tng.
Khi c xc nh trong mt i tng, c mt iu tin dng l bao ng c
quyn truy cp n i tng qua bin $this khng cn phi nhp n tng minh.
Lit k 7 gii thch vic ny.
Lit k 7. Bao ng bn trong mt i tng
class Dog
{
private $_name;
protected $_color;
public function __construct($name, $color)
{
$this->_name = $name;
$this->_color = $color;
}
public function greet($greeting)
{
return function() use ($greeting) {
echo "$greeting, I am a {$this->_color} dog named
{$this->_name}.";
};
}
}
$dog = new Dog("Rover","red");
$dog->greet("Hello");
Email: Mrhaisyc@gmail.com
51
Yahoo: Nguyenthanhhai702
Output:
Hello, I am a red dog named Rover.
y, chng ta r rng l s dng cu cho c a cho phng thc greet()
trong bao ng c xc nh trong n. Chng ta cng nm c mu sc v tn
ca ch ch, chuyn qua hm dng v lu li trong i tng, trong bao ng.
Cc bao ng xc nh trong mt lp v c bn l ging nh nhng th nh
ngha bn ngoi mt i tng. Ch khc nhau duy nht l vic nhp t ng i
tng qua bin $this. Chng ta c th v hiu ha hnh vi ny bng cch nh
ngha bao ng l tnh.
Lit k 8. Bao ng tnh
class House
{
public function paint($color)
{
return static function() use ($color) { echo "Painting the
house $color...."; };
}
}
$house = new House();
$house->paint('red');
Output:
Painting the house red....
V d ny ging vi lp Dog c xc nh trong lit k 5. Khc bit ln l ch
chng ta khng s dng bt k thuc tnh no ca i tng trong bao ng, do n
c nh ngha l tnh.
Ci li ln ca vic s dng mt bao ng tnh so vi bao ng khng tnh
(nonstatic) bn trong mt i tng l tit kim b nh. Bng cch khng phi
nhp i tng vo bao ng, chng ta c th tit kim kh nhiu b nh, c bit
l nu chng ta c nhiu bao ng m khng cn tnh nng ny.
Mt iu vui na cho cc i tng l vic thm vo mt phng thc ma thut
tn l __invoke(), cho php i tng t gi n l mt bao ng. Nu phng thc
ny c nh ngha, n s c s dng khi i tng c gi vo ng cnh
. Lit k 9 minh ho vic ny.
Lit k 9. S dng phng thc __invoke()
class Dog
Email: Mrhaisyc@gmail.com
52
Yahoo: Nguyenthanhhai702
53
Yahoo: Nguyenthanhhai702
{
}
}
$class = new ReflectionClass('Counter');
$method = $class->getMethod('currentValue');
$closure = $method->getClosure()
$closure();
$class->increment();
$closure();
Output:
0
1
Mt hiu qu ph th v ca cch tip cn ny l ch n cho php chng ta truy
cp cc thnh vin ring, c bo v ca mt lp, thng qua bao ng m c th
rt tin cho cc lp kim th mun (unit testing). Lit k 11 l mt v d v vic
truy cp mt phng thc ring trong mt lp.
Lit k 11. Truy cp mt phng thc ring trong mt lp
class Example
{
....
private static function secret()
{
echo "I'm an method that's hiding!";
}
...
}
$class = new ReflectionClass('Example');
$method = $class->getMethod('secret');
$closure = $method->getClosure()
$closure();
Output:
I'm an method that's hiding!
Hn na, chng ta c th s dng API phn chiu t kim tra (introspect) mt
bao ng, nh trnh by trong Lit k 12. Chng ta ch cn chuyn tham chiu
bin sang bao ng vo hm dng ca lp ReflectionMethod.
Lit k 12. Kim tra mt bao ng bng cch s dng s dng API phn
chiu
Email: Mrhaisyc@gmail.com
54
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
55
Yahoo: Nguyenthanhhai702
56
Yahoo: Nguyenthanhhai702
Foo::dog();
// outputs "Called method dog statically"
$foo = new Foo;
$foo->dog();
// outputs "Called method dog"
{/geshibot}
Mt iu cn lu l PHP thc hin p t nh ngha ca phng thc
__callStatic(); n phi l chung (public), v n phi c tuyn b l tnh. Cng
nh vy, phng thc ma thut __call() cng phi c xc nh l chung, ng
nh tt c cc phng thc ma thut phi l nh vy.
Cc cuc gi ra tnh ng
Mt c tnh rt hay ca PHP l cc bin cho bin (variable variables). iu c
ngha l bn c th s dng chui gi tr ca mt bin quy nh tn ca mt
bin khc. Ni mt cch khc, bn c th thc hin vic g ging nh di y.
Lit k 2. Cc bin bin (Variable variables)
{geshibot lang="php" head=""} $x = 'y';
$$x = 'z';
echo $x; // outputs 'y'
echo $y; // outputs 'z'
echo $$x; // outputs 'z'{/geshibot}
Cng mt khi nim c th c s dng vi cc hm, hoc thm ch cc phng
thc lp nh di y.
Lit k 3. Tn cc hm bin v phng thc lp
{geshibot lang="php" head=""}class Dog
{
public function bark()
{
echo "Woof!";
}
}
$class = 'Dog'
$action = 'bark';
$x = new $class(); // instantiates the class 'Dog'
$x->$action(); // outputs "Woof!" {/geshibot}
im mi PHP V5.3 l kh nng c tn ca lp khi c quy nh l mt bin
khi thc hin mt cuc gi tnh. Vic ny m ra mt vi kh nng mi, nh di
y.
Email: Mrhaisyc@gmail.com
57
Yahoo: Nguyenthanhhai702
Lit k 4. t tn lp bin
{geshibot lang="php" head=""}class Dog
{
public static function bark()
{
echo "Woof!";
}
}
$class = 'Dog';
$action = 'bark';
$class::$action(); //outputs "Woof!" {/geshibot}
B sung ny to ra kha cnh v cc bin ca bin trong PHP y , cho php
dng chng ch trong tng tnh hung vi PHP.
Chng ta hy quan st mt ci tin hu ch hn cho vic s dng cc phng thc
v thnh vin tnh: lin kt tnh mun (late static binding).
Lin kt tnh mun
Mt trong nhng iu phin phc nht v PHP trc V5.3 l cch phng thc v
thnh vin tnh c x l. Cho n nay, cc tham chiu tnh (static references),
chng hn nh cc tham chiu c lm bn thn n hoc __CLASS__, c gii
quyt trong phm vi lp, trong hm c nh ngha. Vn l ch tham
chiu s khng ng nu lp c m rng v cuc gi c thc hin t lp con
(child class) mi. Lin kt tnh mun c thm vo PHP V5.3 gim bt
vn ny. minh ho r hn, chng ta hy to ra mt lp vi mt phng thc
tnh di y.
Lit k 5. Lp Foo vi phng thc tnh test()
{geshibot lang="php" head=""}class Foo
{
protected static $name = 'Foo';
public static function test()
{
return self::$name;
}
} {/geshibot}
Chng ta hy m rng lp ny. Chng ta s nh ngha li thnh vin $name trong
lp con ny.
Lit k 6. Lp con Bar m rng lp cha Foo
{geshibot lang="php" head=""}class Bar extends Foo
{
Email: Mrhaisyc@gmail.com
58
Yahoo: Nguyenthanhhai702
class Bar
{
protected static $name = 'Bar';
}
echo Bar::test(); // outputs 'Bar'{/geshibot}
Mt iu cn lu v t kho static l n khng lm vic nh cch lm trong ng
cnh khng tnh. iu ny c ngha l cc nguyn tc k tha bnh thng khng
p dng vi cc cuc gi tnh. T kho static s ch cn c gng gii quyt cuc
gi trong lp hin ti thay cho lp m hm c nh ngha. y l mt iu quan
trng cn lu .
By gi chng ta thy mt vi ci tin vi cc phng thc v thnh vin tnh,
hy quan st mt vi lp mi c b sung vo b phn rt hu ch ca PHP V5,
l Th vin lp PHP chun.
Th vin lp PHP chun
Th vin lp PHP chun (SPL) l mt tp cc giao din v cc lp thm vo PHP
V5, c thit k gii quyt cc vn chun. Cc vn ny gm vic cho
mt i tng c lp (iterateable), cho php mt i tng i x c nh mt
mng, hoc thc hin mt danh sch mc ni. Li im ca vic s dng cc lp
Email: Mrhaisyc@gmail.com
59
Yahoo: Nguyenthanhhai702
60
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
61
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
62
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
63
Yahoo: Nguyenthanhhai702
{ v } bt u v kt thc min/max k t
/a{1,3}/ : a,aa,aaa
Cc k t c bit khc:
\n hoc \r : k t xung dng
\t : k t tab
\d : bt k k t s no
\D : bt k k t no m khng phi l s
\s : bt k k t khong trng
\S : bt k k khng phi l khong trng
\w : bt k t no
\W : khng phi l t
Bi 7: To trang login kt hp vi cookies v session
C nhiu bn thc mc l ti sao khi vo ng nhp vo mt trang no , khi
"thot ra" v vo li th thng tin ng nhp vn c gi. Ni dung ca bi vit s
hng dn bn lm quen vi cch to cookies v session trong PHP.
Yu cu ti thiu mc hiu bit ca bn l:
+ Mt t vn PHP, xi ti Tt :d
+ Mt t vn SQL, select * from vinhga.com :d
+ V bn c th xem thm v cch kt ni vo database ti mc PHP &
MySQL.
Kin thc mnh cung cp s dng cho bi vit ny:
Cookies dng lu tr thng tin vo my.
Session dng lu tr thng tin tm thi.
BC 1:
Trc ht to file config.php, v in y thng tin v database:
{geshibot lang="php" head=""}<?php
$db_host = "localhost";
$db_name = "vinhga";
$db_username = "root";
$db_password = "123456";
?> {/geshibot}
BC 2:
m u cho bi vit ny mnh s "gi s" mt vi iu thun tin hn:
Gi s mnh c CSDL (database) vi table members vi cc trng (field) l id,
Email: Mrhaisyc@gmail.com
64
Yahoo: Nguyenthanhhai702
65
Yahoo: Nguyenthanhhai702
}
setcookie($name, $value, $expires, "/", "");
}
//==================================================
// Get cookie
//==================================================
function get_cookie($name)
{
if (isset($_COOKIE[$name]))
{
return urldecode($_COOKIE[$name]);
}
else
{
return FALSE;
}
}
//==================================================
// Check login
//==================================================
function log_in()
{
$name = isset($_POST["name"]) ? htmlspecialchars($_POST["name"]) : '';
$password = isset($_POST["password"]) ?
htmlspecialchars($_POST["password"]) : '';
$remember = isset($_POST["remember"]) ?
htmlspecialchars($_POST["remember"]) : '';
if (empty($name))
{
print $msg = "Bn phi nhp tn vo!";
return false;
}
else if (empty($password))
{
print $msg = "Bn phi nhp mt khu vo!";
return false;
}
Email: Mrhaisyc@gmail.com
66
Yahoo: Nguyenthanhhai702
67
Yahoo: Nguyenthanhhai702
68
Yahoo: Nguyenthanhhai702
$_SESSION["login"] = "yes";
$_SESSION["id"] = intval($member["id"]);
}
}
//==================================================
// If session has been saved in turn...
//==================================================
if ($_SESSION["login"] == "yes")
{
if ( !isset($_SESSION["login"]) )
{
session_register("login");
$_SESSION["login"] = "no";
}
$member_id = $_SESSION["id"];
$sql_select = @mysql_query("SELECT * FROM members WHERE
id='$member_id'") or die("Query failed");
$member = @mysql_fetch_array($sql_select);
print "Cho b?n, {$member['name']}. <br> <a
href='login.php?view=logout'>Click vo y to log out!</a>";
}
//==================================================
// Else show login page
//==================================================
else
{
print <<<EOF
<html>
<body>
<form action="login.php?view=login" name="login" method="POST">
Tn truy nh?p: <input Type="text" size="19" name="name"><br>
M?t kh?u: <input Type="password" size="20" name="password"><br>
<input type="checkbox" name="remember" value="1"> Lu m?t kh?u<br>
<input type="submit" name="submit" value="ng nh?p"><br>
</form>
</body>
</html>
Email: Mrhaisyc@gmail.com
69
Yahoo: Nguyenthanhhai702
EOF;
}
?>{/geshibot}
Bi 8: C bn v RegExp (Regular Expressions , so mu hay biu thc chnh
quy) trong PHP
Biu thc so mu (pattern) dng m t 1 cch tng qut 1 i tng (chui)
trong PHP, v d:
preg_replace('/[^a-z0-9]+/i','',$str);
--> hm ny l loi b tt c cc k t khng phi l ch (a-z v A-Z) hoc s (0-9)
ra khi chui $str
Biu thc so mu dng rt hiu qu v nhanh chng, tuy nhin theo TG bit th
cng khng nhiu ngi bit s dng ci ny(nht l ni khng c trng lp
o to c bn v PHP nh VN chng ta) cn s ngi bit,hiu r th khng
training li nn t nay cng t ngi bit s dng biu thc so mu. Trong bi
ny TG ch gii thiu 1 s kin thc c bn v 1 vi v d d hiu, hy vng l
gip t cho anh em.
Cu trc: nh v d trn th /[^a-z0-9]+/i l 1 biu thc so mu,
- gii hn trong cp du /<so mu>/x hoc #<so mu>#x
- x c th l 1 hoc nhiu k t m t d liu c ly v cng c th khng c
trong biu thc so mu. Mt s gi tr c th c ca x:
+ i: khng phn bit ch hoa, ch thng
+ s: bao gm c cc k t xung dng
+ Ngoi cn c 1 s gi tr khc nh: S,U,... nhng t c s dng
Ta ly v d cho d hnh dung:
preg_replace('/[^a-z0-9]/','','phpBASIC$')
-> php
preg_replace('/[^a-z0-9]/i','','phpBASIC$')
-> phpBASIC
ngha ca cc k t trong biu thc so mu:
\ loi b cc k t c bit ca pattern
/(phpbasic)/ : chui phpbasic
/\(phpbasic\)/ : chui (phpbasic)
^ k t bt u
/^php(.*)/ : nhng chui bt u bng ch php
Email: Mrhaisyc@gmail.com
70
Yahoo: Nguyenthanhhai702
$ k t kt thc
/(.*)basic$/ : nhng chui kt thc bng ch basic
. bt k k t no tr k t xung dng
/(.*)/ : tt c cc k t nm trn 1 dng
[ v ] bt u v kt thc 1 lp k t
/[a-z]/ : tt c cc k t a-z
ch trong 1 lp:
^ ph nh:
/[^a-z]/ : nhng k t khng phi l a-z
- 1 khong:
/[a-d]/ : bao gm a,b,c,d
| hoc
/a|b/ : k t a hoc b
( v ) bt u v kt thc 1 so mu con
/^a(c|d)b/ : chui c dng acb hoc acd
? c hoc khng
/ab?c/ : chui c dng abc hoc ac
* : 0 hoc nhiu hn k t
/a*/ : <null>, a, aa, aaa,.............
+ : c t nht 1
/a+/ : a,aa,aaa,...............
{ v } bt u v kt thc min/max k t
/a{1,3}/ : a,aa,aaa
Cc k t c bit khc:
\n hoc \r : k t xung dng
\t : k t tab
\d : bt k k t s no
\D : bt k k t no m khng phi l s
Email: Mrhaisyc@gmail.com
71
Yahoo: Nguyenthanhhai702
\s : bt k k t khong trng
\S : bt k k khng phi l khong trng
\w : bt k t no
\W : khng phi l t
Bi 9: Gii thiu s qua v Classes v Objects
1. Class: l mt tp hp cc bin v cc hm cng lm vic vi cc bin ny.
Mt class c nh ngha theo c php sau:
<?php
class Cart
{
var $items; // Items in our shopping cart
function add_item ($artnr, $num)
{
$this->items[$artnr] += $num;
}
function remove_item ($artnr, $num)
{
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return true;
} else {
return false;
}
}
}
?>
V d trn nh ngha mt class c tn l Cart, cha cc mng kt hp ca cc
article trong mt cart v hai hm dng thm v b cc th ra khi cart ny.
Ch : trong PHP 4, ch c cc hng c khi to cho cc bin var mi c cho
php khi to cc bin vi cc gi tr khng phi l hng s, bn cn c mt
hm khi to c gi mt cch t ng khi object c dng t lp. Chng hn
nh hm c gi trong mt hm dng nh sau:
<?php
class Cart
{
var $todays_date = date("Y-m-d");
var $name = $firstname;
var $owner = 'Fred ' . 'Jones';
Email: Mrhaisyc@gmail.com
72
Yahoo: Nguyenthanhhai702
}
class Cart
{
var $todays_date;
var $name;
var $owner;
var $items;
function Cart()
{
$this->todays_date = date("Y-m-d");
$this->name = $GLOBALS['firstname'];
/* etc. . . */
}
}
?>
2. extends: thng th bn cn cc lp vi cc bin v cc hm tng t cho
mt lp tn ti khc. Thc t, rt tt khi bn nh ngha mt lp chung m c s
dng trong cc n ca bn v chnh sa lp ny cho thch nghi vi nhu cu ca
mi n. thc hin iu ny, cc class c th c m rng t cc class
khc.Vic m rng hay dn xut mt lp c tt c cc bin v cc hm ca lp cha
( iu ny c xem l tha k) v nhng g bn thm vo trong nh ngha m
rng. Khng ging nh cc ngn ng lp trnh hng i tng khc, PHP khng
h tr a tha k, cho nn mt lp m rng ch lun lun ph thuc vo mt lp
cha ring r ca n. Cc lp c m rng s s dng t kho extends. V d:
class Named_Cart extends Cart{
var $owner;
function set_owner ($name){
$this->owner = $name;
}
}
V d trn nh ngha mt lp Named_Cart m c tt c cc bin v cc hm ca
lp Cart thm v cng thm cc bin $owener v hm set_owner().
3. Hm dng: l nhng hm trong mt lp m c t ng gi khi bn to ra
mt minh ho mi ca mt lp vi t kho new. Trong PHP4, mt lp c xem
l hm dng khi n c cng tn vi tn lp m n c nh ngha trong .V d:
Email: Mrhaisyc@gmail.com
73
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
74
Yahoo: Nguyenthanhhai702
<?php
class Cart
{
var $todays_date = date("Y-m-d");
var $name = $firstname;
var $owner = 'Fred ' . 'Jones';
var $items = array("VCR", "TV");
}
class Cart
{
var $todays_date;
var $name;
var $owner;
var $items;
function Cart()
{
$this->todays_date = date("Y-m-d");
$this->name = $GLOBALS['firstname'];
/* etc. . . */
}
}
?>
2. extends: thng th bn cn cc lp vi cc bin v cc hm tng t cho
mt lp tn ti khc. Thc t, rt tt khi bn nh ngha mt lp chung m c s
dng trong cc n ca bn v chnh sa lp ny cho thch nghi vi nhu cu ca
mi n. thc hin iu ny, cc class c th c m rng t cc class
khc.Vic m rng hay dn xut mt lp c tt c cc bin v cc hm ca lp cha
( iu ny c xem l tha k) v nhng g bn thm vo trong nh ngha m
rng. Khng ging nh cc ngn ng lp trnh hng i tng khc, PHP khng
h tr a tha k, cho nn mt lp m rng ch lun lun ph thuc vo mt lp
cha ring r ca n. Cc lp c m rng s s dng t kho extends. V d:
class Named_Cart extends Cart{
var $owner;
function set_owner ($name){
$this->owner = $name;
}
}
V d trn nh ngha mt lp Named_Cart m c tt c cc bin v cc hm ca
lp Cart thm v cng thm cc bin $owener v hm set_owner().
Email: Mrhaisyc@gmail.com
75
Yahoo: Nguyenthanhhai702
76
Yahoo: Nguyenthanhhai702
\n";
}
}
class B extends A{
function C() {
echo "I am a regular function.
\n";
}
}
// gi B() nh l mt hm dng
$b = new B;
Hu ht Class u c 1 phng thc c bit khi ng i tng c gi l
"Constructor" .Phng thc Constructors c gi khi i tng to ra,n
thng dng khi to cc chc nng nh gn thuc tnh vi gi tr hay to ra
cc i tng khc t i tng ny.Chng hn nh pht biu sau c khai bo
vi Class c Constructor .Ch Constructor : l phng thc c tn l tn ca
class:
<?php
class classname
{
function classname($para)
{
echo "Constructor called with parameter";
echo "$para";
}
}
?>
Sau khi khai bo 1 class ,bn cn phi to ra 1 i tng .i tng ny l 1 thnh
vin ca class.Khi to ra 1 i tng mi ,bn s dng t kha new v ch r class
m i tng trc thuc
V d : to ra 1 class c tn l keke v trong class ny khai bo 1 phng thc
cng c tn l keke vi tham s $i:
<?php
class keke{
function keke($i){
echo"Contructor goi voi tham so $i .
Email: Mrhaisyc@gmail.com
77
Yahoo: Nguyenthanhhai702
";
}
?>
<html>
<head>
<title> Class va Object</title>
</head>
<body>
<?php
// khai bao su dung class
$a= new keke("Ruoi");
$b= new keke("Muoi");
$c= new keke("Ruoi va Muoi");
?>
</body>
</html>
Bn trong class ,bn c th truy cp con tr c bit gi l $this .Mt thuc tnh
ca lp hin hnh gi $attribute.bn c th tham chiu n chng bng cch khai
bo nh sau:
$this->$attribute
V d : to ra 1 class c tn l name v phng thc c tn l name
<?php
class name{
var $attribute;
function get_name($name){
$this->attribute=$name;
echo "Your name is $this->attribute";
}
// tao 1 doi tuong moi
$a= new name();
$a->get_name("iamhatinh");
?>
Bi 10: S dng template trong PHP - c bn
Email: Mrhaisyc@gmail.com
78
Yahoo: Nguyenthanhhai702
Trong bi vit ny minh gii thiu v cch dng file .tpl. i vi nhng ng dng
vit cho nhiu ngi s dng ( c th l nhng web cn chnh sa giao din nhiu:
forum phpbb). Vi cch vit thng thng, mi ln thay i giao din bn s fi
edit tan b code, nh vy xc sut dn n li code rt cao cha k n ngi
edit giao din cn fi c hiu bit v php mi sa c. Nn i vi nhng ng
dng ny bn nn vit theo kiu template. Template l nhng file to giao din cho
website v thng c lp vi code. nh dng file thng dng trong template l
.tpl ( k bt buc, bn c th chn ui khc min sao bn thy d dng s dng l
c). Khi c mi ln bn thay i giao dn ch cn edit li cc file .tpl l
xong v v n ko cha cc m PHP nn bn k cn fi l ngi rnh v php mi
edit c nh vy ng dgn ca bn s c ph bin rng hn.
d hiu ti s to mt v d s dgn template n gin d hiu:
v d:
Bn c mt trang web in cc ngy hin hnh:
file calender.php c ni dung nh sau:
<?
$ngay = $_GET['date'];
print "Hm nay l ngy:".$ngay;
?>
Khi gi calender.php?date=04-09-2006 th kt qu s l :
Hm nay ngy: 04-09-2006
y l cch vit thng thng, gi s by gi bn mun thm cu "Welcome to
phpbasic.com" fa di dng "Hm nay ngy 04-09-2006"
Bn s edit li file calender.php nh sau:
<?
// kt ni csdl
$ngay = $_GET['date'];
print "Hm nay l ngy:".$ngay;
print "Welcome to phpbasic.com";
?>
hoc l
<?
// kt ni csdl
$ngay = $_GET['date'];
print "Hm nay l ngy:".$ngay;
?>
Welcome to phpbasic.com
y ch c mt dng code nn bn d dng edit , bn th ngh nu n l mt ng
dng th bn s tm ch thm cu vo cng l mt vn cha k xc sut
gy ra li rt cao v cng kh khn hn cho nhng ngi k rnh v php.
Email: Mrhaisyc@gmail.com
79
Yahoo: Nguyenthanhhai702
80
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
81
Yahoo: Nguyenthanhhai702
?>
</BODY>
</HTML>
By gi, chng ta s trang b thm mt phng thc thay i gi tr
ca cc thuc tnh ho_ten v ngay_sinh. tham chiu ti cc phn t
trong chnh bn thn lp i tng, chng ta s dng bin $this v ton
t tham chiu ->, theo sau l tn ca phng thc hoc thuc tnh:
Quote:
<HTML>
< HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</HEAD>
<BODY>
<?
class hoso
{
public $ho_ten;
public $ngay_sinh;
public function lap_gia_tri($hoten,$ngaysinh)
{
$this->ho_ten = $hoten;
$this->ngay_sinh=$ngaysinh;
}
}
$hoang=new hoso;
$hoang->lap_gia_tri("Nguyn Huy Hong","25/7/2003");
echo "H tn: " . $hoang->ho_ten . ". Ngy sinh: " . $hoang->ngay_sinh;
?>
</BODY>
</HTML>
Ch rng khi khai bo mt lp, chng ta cng c th thit lp nhng
gi tr mc nh ban u cho tt c cc thnh vin c to ra t lp
. V d:
Quote:
HTML>
< HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</HEAD>
<BODY>
<?
class hoso
Email: Mrhaisyc@gmail.com
82
Yahoo: Nguyenthanhhai702
{
public $ho_ten = "Nguyn Huy Hong";
public $ngay_sinh = "25/7/2003";
public function lap_gia_tri($hoten,$ngaysinh)
{
$this->ho_ten = $hoten;
$this->ngay_sinh=$ngaysinh;
}
}
$hoang=new hoso;
echo "H tn: " . $hoang->ho_ten . ". Ngy sinh: " . $hoang->ngay_sinh;
?>
</BODY>
</HTML>
C ch ng kn v tnh r rng ca cc phn t trong lp
Nh chng ta bit, lp trnh hng i tng tp trung vo vic ng gi cc
phng thc v thuc tnh ca mt i tng no .
Trong lp trnh hng i tng, cc thnh vin trong mt lp cn phi c xc
nh xem chng c th c truy xut t u (tnh r rng). C ba kh nng xy
ra:
- Ch truy xut cng cng (public): Cc thnh vin nu c thit lp ch
ny s c nhn thy v truy xut mi ni trong chng trnh.
- Ch truy xut ring t (private): Cc thnh vin nu c thit lp ch
ny s ch c nhn thy v truy xut c bn thn lp nh ngha thnh vin
.
- Ch bo v (protected): Ch ny s c dng gii hn truy cp ti cc
lp c tha k v bn thn lp nh ngha thnh vin .
Trong PHP5, tt c cc thnh vin ca mt lp u phi c khai bo tnh r rng
vi cc t kho tng ng l public, protected v private.
V d:
Quote:
<?php
class MyClass
{
Email: Mrhaisyc@gmail.com
83
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
84
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
85
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
86
Yahoo: Nguyenthanhhai702
</HTML>
Nh cc bn thy, i tng $hoang thuc lp hoso2 c k tha mi th
lp hoso. Trong lp hoso2, chng ta nh ngha mt hm trng tn vi mt
hm c sn trong lp hoso (hm in_hoso()). Hm in_hoso() ca lp hoso2
np chng thay th cho hm in_hoso() ca lp hoso, nhng trong bn thn n li
c th triu gi trc tip n hm in_hoso() trong lp cha (hoso).
Bi 12: ng dng sockets vi php
Sockets l mt cch thc dng trong PHP kt ni vi mt server khc qua mng
hay internet.
function cn bn m kt ni n server l fsocken(). C th bn s thy ngc
nhin ti sao bn li mun kt ni n server khc. Nu bn cn thm thng tin v
3rd party server th sockets l ci cho bn cn.
Tutorial ny hng dn chng ta cc phng thc sau y :
# Connect To A Server Using Sockets
# Disconnect From a Server%br%
# Send a request to a server%br%
# List the number of lines returned by the server on a request%br%
# Use sockets in a practical project like a whois look-up script
Kt ni qua s dng sockets vi PHP
Nu bn c ngh ni kt vi internet server khc vi php rt rc ri , c l bn
hi lm. Bn ch cn ni mng bng mt dng code ca php. trong phn ny s
gii thch cch ni v ngt ni mng qua s dng sockets.
Quote:
<?php
/*
Tham s m fsockopen cn l:
fsockopen(IP/Hostname, cng (port), Li ($errno), miu t li pht hin($errdesc)
*/
$fp = fsockopen( "www.phpvn.org", 80, $errno,
$errdesc);
?>
Bn thit lp mt kt ni n server vd: phpvn.org. Bn cng nn lm quen vi
function fclose() ngt ni mng.
<?php
$fp = fsockopen( "www.phpvn.org", 80, $errno,
$errdesc); //establish connection
Email: Mrhaisyc@gmail.com
87
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
88
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
89
Yahoo: Nguyenthanhhai702
?>
Dng code trn c din nh sau:
Trying: Example Web Page
Trying to get: /index.html
HTTP/1.1 200 OK
N ch hin nhng trang tm c, nu khng s thay th trang 404 bng m s
200.
ng dng Whois
Bn bit qua ng dng kt ni n mt server, to vng lp in kt qu v
cch ng mng. chng ta thc hnh thm mt vi thao tc cho ng dng whois.
Quote:
<?php
extract($_POST);
function whois($domain,$ext){
$url=$domain.$ext;
/*
s dng switch() xc nh whois server no l server thch hp
nht kt ni domain
*/
switch($ext){
case ".co.uk":
$whois = "whois.nic.uk";
break;
case ".com":
$whois = "whois.networksolutions.com";
break;
case ".fr":
$whois = "whois.nic.fr";
break;
case ".biz":
$whois = "whois.biz";
break;
default:
$whois = "whois.networksolutions.com";
}
if (trim($url) <> "") {
$url = trim($url);
/*
Email: Mrhaisyc@gmail.com
90
Yahoo: Nguyenthanhhai702
kt ni n server
*/
$f = fsockopen($whois, 43, $errno, $errstr, 30);
if (!$f) {
echo "Connection To Server Failed ($errno)";
} else {
/*
Gi domain n mt server v ch nhn kt qu
*/
fputs($f, "$url\r\n");
print "<pre>\r\n";
while (!feof($f)) {
echo fread($f,128);
}
print "</pre>";
/*
ng mng
*/
fclose($f);
}
}else{
echo "Invalid domain entered";
}
}
?>
Bi 13: LDAP (Lightweight Directory Access Protocol)
Hin nay, xy dng cc h thng ln, iu ti quan trng l phi lm cch no
c th tch hp d liu t c th dng chung gia cc h thng khc nhau.
Trong , tch hp ti khon ca ngi s dng l vn cn thit nht trong
nhng ci "ti quan trng" trn.
Hy tng tng mt h thng vi khong 5 - 6 m un khc nhau, mi m un
li c thit k trn mt nn tng khc nhau (C ng th dng Oracle + AS
Portal, c ngi th xi DB2 vi WebSphere, lo khc th MySQL vi phpnuke,
ng th xi Wndow, lo th ci Linux, c thng in li ch thch Unix...hic, cuc
i tht ng l b kh), do cn c mt h thng ngi dng khc nhau. Vy
th vi mi m un, ngi s dng cn phi c mt User Name, mt mt khu
khc nhau, l iu khng th chp nhn c. Ngi dng chng my chc m
chn ght h thng.
Email: Mrhaisyc@gmail.com
91
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
92
Yahoo: Nguyenthanhhai702
93
Yahoo: Nguyenthanhhai702
$ldapconn = ldap_connect("ldap.example.com")
or die("Could not connect to LDAP server.");
if ($ldapconn) {
// binding anonymously
$ldapbind = ldap_bind($ldapconn);
if ($ldapbind) {
echo "LDAP bind anonymous successful...";
} else {
echo "LDAP bind anonymous failed...";
}
}
?>
ldap_search();
ldap_search ( resource link_identifier, string base_dn, string filter [, array
attributes [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]] )
VD tm kim cc thng tin ca tt c mi ngi trong My Company ni
surname hoc given name cha trong bin $person. V d ny yu cu server tm
ra thng tin ca nhiu hn mt thuc tnh cn tm kim.
<?php
// $ds is a valid link identifier for a directory server
// $person is all or part of a person's name, eg "Jo"
$dn = "o=My Company, c=US";
$filter="(|(sn=$person*)(givenname=$person*))";
$justthese = array("ou", "sn", "givenname", "mail");
$sr=ldap_search($ds, $dn, $filter, $justthese);
$info = ldap_get_entries($ds, $sr);
echo $info["count"]." entries returned\n";
?>
Ldap_close();
Hm ng kt ni vi LDAP, hm ny tng ng vi ldap_unbind();
Email: Mrhaisyc@gmail.com
94
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
95
Yahoo: Nguyenthanhhai702
<?php
$ds=ldap_connect("localhost"); // assuming the LDAP server is on this host
if ($ds) {
// bind
if (ldap_bind($ds)) {
// prepare data
$dn = "cn=Matti Meikku, ou=My Unit, o=My Company, c=FI";
$value = "secretpassword";
$attr = "password";
// compare value
$r=ldap_compare($ds, $dn, $attr, $value);
if ($r === -1) {
echo "Error: " . ldap_error($ds);
} elseif ($r === true) {
echo "Password correct.";
} elseif ($r === false) {
echo "Wrong guess! Password incorrect.";
}
} else {
echo "Unable to bind to LDAP server.";
}
ldap_close($ds);
} else {
echo "Unable to connect to LDAP server.";
}
?>
Ldap_count_entries();
m s lng cc entry c tm thy t kt qu ca lnh tm kim.
int ldap_count_entries ( resource link_identifier, resource result_identifier )
ldap_error();
Email: Mrhaisyc@gmail.com
96
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
97
Yahoo: Nguyenthanhhai702
98
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
99
Yahoo: Nguyenthanhhai702
<td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
</tr>
<tr>
<td>Sally</td><td>17th</td><td>August</td><td>1973</td>
</tr>
</table>
</body>
</html>
';
/* To send HTML mail, you can set the Content-type header. */
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
/* additional headers */
$headers .= "From: Birthday Reminder <birthday@example.com>\r\n";
$headers .= "Cc: birthdayarchive@example.com\r\n";
$headers .= "Bcc: birthdaycheck@example.com\r\n";
/* and now mail it */
mail($to, $subject, $message, $headers);
?>
Bi 15: X l th mc v tp tin
Bi vit ny tp trung vo vic iu khin h thng tp tin v th mc trn my
ch (khng phi my khch). Bi ny c chia lm cc phn sau:
Phn 1: Cc hm cn bn x l tp v th mc
Phn 2: Cch thc truy xut d liu t tp tin.
Phn 3: Ti file ln my ch.
Phn I. Cc hm c bn x l tp v th mc
I. Mt s hm x l th mc
1. Thay i th mc gc
thay i th mc gc, ta dng hm chroot
C php:
bool chroot ( string directory)
Hm ny tr v true nu nh th mc gc c chuyn i thnh th mc c
ng dn l directory.
Email: Mrhaisyc@gmail.com
100
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
101
Yahoo: Nguyenthanhhai702
1. i tn tp tin:
i tn tp tin, ta dng hm rename:
bool rename ( string oldname, string newname)
Hm ny s c gng i tn t oldname sang tn mi (newname). Hm s tr v
TRUE nu thnh cng, ngc li l FALSE
2. Xa tp tin
xa tn tp tin, ta dng hm unlink() hoc delete():
int unlink ( string filename)
Hm ny s xa file c ng dn (tn) l filename. Tr v TRUE nu thnh cng,
ngc li l FALSE
3. Copy file
copy file, ta dng hm copy c cu trc nh sau:
int copy ( string source, string dest)
Hm ny s to ra mt bn copy file ngun (sourse) sang file ch (dest). Hm tr
v TRUE nu thnh cng, ngc li l FALSE
V d:
<?
// To ra mt file backup ca file c tn l $file. File backup s c b sung phn
ui mi l .bak:
if (!copy($file, $file.'.bak')) {
print ("Li copy $file...<br>\n");
}
?>
Hm kim tra s tn ti ca mt file:
Khi x l cc file, ta thng kim tra xem file c tn ti hay khng trc khi tin
hnh cc thao tc c, ghi d liu:
C php:
bool file_exists ( string filename)
Hm ny s tr v TRUE nu thnh cng, ngc li l FALSE.
Phn III. Ti file t my khch ln my ch.
Trong qu trnh trao i d liu gia my khch v my ch, ti file l mt cng
vic rt thng gp. c th l vic ti mt file hnh nh ln my ch, 1 file zip
hay 1 file ti liu bt k no . Sau khi a ln my ch, cc file ny s c
cung cp lin kt ngi dng c th ti file v s dng.
Cch ti file thng dng nht hin nay l s dng giao thc FTP. Tuy nhin, ti
khon ftp thng t c chia s v n lin quan rt nhiu n h thng, v thng
Email: Mrhaisyc@gmail.com
102
Yahoo: Nguyenthanhhai702
103
Yahoo: Nguyenthanhhai702
Nh vy ta xy dng c mt form cho php ngi dng chn file. Sau khi
ngi dng bm nt Submit, file s c ti ln my ch, v c my ch lu
vo mt th mc tm, ng thi sinh ra mt mng c tn l
$_FILES["tn_phn_t_trn_form"] hoc c mt tn khc l
$HTTP_POST_FILES["tn_phn_t_trn_form"]. Vic tip theo l ta phi x l
ci file nh th no?
Trc tin, chng ta th tm hiu xem ci mng kia cha nhng thng tin g:
Vi v d trn, tn_phn_t_trn_form l UserFileName (tng ng vi th
<input name="UserFileName" type="file">)
Nh vy khi ngi dng chn file ri kch chn Submit th trnh duyt s gi file
ln. Sau khi hon tt vic gi file, my ch s sinh ra mt mng c tn l
$_FILES["UserFileName"].
Mng ny cha cc thng tin sau:
$_FILES['UserFileName']['name']: Tn gc ca file trn my khch
$_FILES['UserFileName']['type']: Kiu MIME ca file (nu trnh duyt cung cp
thng tin). V d: "image/gif".
$_FILES['UserFileName']['size']: Kch thc ca file c ti tnh theo byte
$_FILES['UserFileName']['tmp_name']: Tn tm ca file khi n c ti v lu
trn th mc tm ca my ch.
Nh vy chng ta c c y cc thng tin x l file. File ny c th
c m ra ly d liu, c th c copy vo mt th mc no , hoc b xo
b, hay i tn... Xin xem thm phn I v phn II trn bit cc thao tc iu
khin tp v th mc.
Di y l mt v d ly t PHP Manual:
// on m HTML to form
<form enctype="multipart/form-data" action="_URL_" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
// on chng trnh x l file upload:
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . $_FILES['userfile']['name'];
print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
Email: Mrhaisyc@gmail.com
104
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
105
Yahoo: Nguyenthanhhai702
106
Yahoo: Nguyenthanhhai702
107
Yahoo: Nguyenthanhhai702
108
Yahoo: Nguyenthanhhai702
extension=php_pdo_odbc.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
Chi tit hn trn cc HH khc nhau th cc bn chu kh xem trn PHP Manual
nh. Gi t phi i pha cafe .
I. Thit lp kt ni ti CSDL
u tin, chng ta cn phi bit rng PDO thun tu l mt lp (class) c dng
thao tc vi CSDL. V vy, n cng c cc phng thc v thuc tnh nh bt
k mt lp no c xy dng trn PHP.
PDO s dng mt phng thc mc nh l __construct(). Phng thc ny kim
lun nhim v to kt ni ti CSDL. Phng thc ny c cc tham s nh sau:
PDO {
PDO __construct(string dsn,
string username,
string password,
array driver_options);
}
Trong :
- dsn (Data Source Name) l mt chui vn bn cha cc thng tin cn thit
kt ni ti mt CSDL xc nh.
- username v password: cha tn truy cp v mt khu ca mt ti khon c
quyn thao tc trn CSDL .
- driver_options l cc tham s tu chn b sung nu cn.
Ci DSN hi kh nh mt cht, v n tu thuc vo loi CSDL. Nu cn thit th
cc bn chu kh vo Google search. V d di y l mt chui DSN kt ni ti
CSDL MySQL:
'mysql:dbname=testdb;host=127.0.0.1';
V d:
{geshibot lang="php" head=""}<?php
$dbh = new PDO('mysql:host=localhost;dbname=thumotti', 'thumotti', 'thuhaiti');
?>{/geshibot}
on m trn to ra mt bin $dbh (th hin ca i tng PDO). V __construct
l phng thc mc nh ca PDO nn trong on m trn chng ta khng cn
phi gi tn phng thc ny ra.
II. Hu kt ni ti CSDL
hu kt ni, n gin chng ta ch vic gn instance ca i tng vi gi
Email: Mrhaisyc@gmail.com
109
Yahoo: Nguyenthanhhai702
tr null.
VD:
{geshibot lang="php" head=""}<?php
$dbh = new PDO('mysql:host=localhost;dbname=thumotti', 'thumotti', 'thuhaiti');
$dbh=null
?>{/geshibot}
III. S dng PDO truy vn SQL
trn, cc bn bit cch kt ni v hu kt ni ti CSDL. By gi chng ta s
tin hnh thc hin mt truy vn SQL thng qua PDO.
thc hin mt truy vn SQL, chng ta s dng mt phng thc ca PDO l
exec().
PDO {
int exec(string statement);
}
Trong , statement l mt cu lnh SQL. Ch rng cu lnh SQL ny phi chy
c trn CSDL m ta ang s dng, (do mi mt h qun tr CSDL li c mt vi
cu lnh SQL c chng nn ta cn phi ch iu ny). Phng thc trn tr v
kt qu l s "ru" (row - record hay bn ghi) b nh hng bi cu lnh SQL
V d di y s dng xo mt vi bn ghi no :
<?php
$dbh = new PDO('mysql:host=localhost;dbname=thumotti', 'thumotti', 'thuhaiti');
$count = $dbh->exec("DELETE FROM users WHERE user_id<100"); // Xo b
nhng "tn" c "s" nh hn 100.
print(" xo b $count ngi khi CSDL.\n");
?>
Comment: Hic, cc ng thy bi k ra cng ng, mi ngi ai cng c mt ci s
c. Nh b exec delete th toi
Vy l chng ta bit cch thc hin mt truy vn. Tuy nhin, i vn cn di, t
nht chng ta cn phi ly thng tin t CSDL ra ri in n na ch. D sao th hi 2
ht, xin xem tip hi 3 ...
Nu nh cc bn lm theo nhng bc trn th cha , ta phi tm cch ly d
liu tr v t cc query (VD nh truy vn Select chng hn).
Email: Mrhaisyc@gmail.com
110
Yahoo: Nguyenthanhhai702
lm iu ny, trc tin chng ta phi s dng mt phng thc khc ca PDO
l PDO->query(). Phng thc ny c nhim v thc thi mt truy vn SQL v tr
v tp kt qu. Thng th tp kt qu ny s c mt lp i tng khc l PDO
Statement x l. y l tp cc phng thc chuyn dng x l kt qu tr v,
n cng gn ging nh ci recordset vy.
PDO {
PDOStatement query(string sql);
}
Cc bn cn ch phn bit gia hai phng thc exec() v query(). Exec() thc
thi mt truy vn v tr v s cc dng b nh hng bi truy vn, cn query() tr
v mt tp kt qu (thng l mt recordset hoc gi tr false). Ngi ta thng
dng exec() truy vn cc cu lnh nh Insert, delete, update..., v dng query()
truy vn cc cu lnh Select.
Chng ta c th ly kt qu ra theo hai cch: Ly v tng dng hay ly v ton b.
im c bit l cng nh vi cc hm x l MySQL, kt qu tr v thng c
lu tr di dng mt mng, rt thun tin v d dng (hay ni ngn gn hn l ...
i tin ).
I. Ly kt qu v theo tng dng
ly kt qu theo tng dng (tng t nh hm mysql_fetch_array()), chng ta
c th s dng phng thc PDOStatement->fetch().
PDOStatement {
mixed fetch(int fetch_style,
int cursor_orientation,
int cursor_offset);
}
Hm ny s dng 3 tham s tu chn:
- Fetch_style xc nh cch thc ly d liu. N c th nhn mt trong cc gi tr
sau:
PDO::FETCH_ASSOC: Tr v mt mng c nh ch s bi tn ct
(field) (Tng t nh MYSQL_ASSOC)
PDO::FETCH_NUM: tr v mt mng c nh ch s bi s th t ca
ct (xut hin trn query SELECT), bt u = 0 (Tng t nh MYSQL_NUM)
... v mt vi gi tr khc, tham kho thm trong manual, nhng v cha n lc s
Email: Mrhaisyc@gmail.com
111
Yahoo: Nguyenthanhhai702
112
Yahoo: Nguyenthanhhai702
}
Trong tham s statement l 1 chui query c s dng cc placeholder lm tham
s u vo. Phng thc ny tr v 1 i tng PDOStatement.
V d:
{geshibot lang="php" head=""}<?php
//To database object
$dbh = new PDO('mysql:host=localhost;dbname=thumotti', 'thumotti', 'thuhaiti');
//To prepared statement
$stmt = $dbh->prepare("INSERT INTO users (name, isMale) VALUES (:name,
:ismale)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':ismale', $ismale);
// Thm record
$name = 'cman';
$ismale = 1;
$stmt->execute();
// Thm record
$name = 'cmxq';
$ismale = -1;
$stmt->execute();
?>{/geshibot}
Gii thch:
- VD trn ta s dng :name, :ismale lm cc placeholder, ni s nhn cc gi tr
c th khi thc hin query. Ngoi cch trn, ta c th dng ? lm placeholder. VD:
{geshibot lang="php" head=""}<?php
$stmt = $dbh->prepare("INSERT INTO users (name, isMale) VALUES (?, ?)");
?>{/geshibot}
- Phng thc PDOStatement->bindParam() gn placeholder vi 1 bin, ging
nh PDOStatement->bindValue(). 2 phng thc ny hon ton ging nhau ngoi
tr vic bindParam() gn bin theo tham chiu. Placeholder khi c s dng di
dng ? s c phn bit bi th t ca chng. VD:
{geshibot lang="php" head=""}<?php
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $ismale);
?>{/geshibot}
- Phng thc PDOStatemen->execute() thc hin cu lnh prepared statement.
Tham s truyn vo l 1 mng. Nu b trng tham s, phng thc s s dng gi
tr ca cc bin m ta gn cho placeholder. VD:
Email: Mrhaisyc@gmail.com
113
Yahoo: Nguyenthanhhai702
114
Yahoo: Nguyenthanhhai702
115
Yahoo: Nguyenthanhhai702
116
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
117
Yahoo: Nguyenthanhhai702
Bi 1: X l XML
PHP5 cung cp class SimpleXML l mt class rt d s dng, bi ny s hng
dn cc bn parse file XML trong 7 nt nhc.
u tin, ly mt on XML mu tp tnh phn tch:
<?xml version="1.0"?>
<books>
<book isbn="978-1594489501">
<title>A Thousand Splendid Suns</title>
<author>Khaled Hosseini</author>
<publisher>Riverhead Hardcover</publisher>
<amazon_price>14.27</amazon_price>
</book>
<book isbn="978-1594489587">
<title>The Brief Wondrous Life of Oscar Wao</title>
<author>Junot Diaz</author>
<publisher>Riverhead Hardcover</publisher>
<amazon_price>14.97</amazon_price>
</book>
<book isbn="978-0545010221">
<title>Harry Potter and the Deathly Hallows</title>
<author>J. K. Rowling</author>
<publisher>Arthur A. Levine Books</publisher>
<amazon_price>19.24</amazon_price>
</book>
</books>
to ra mt i tng SimpleXmlElement, cch n gin l truyn vo mt
chui hoc mt file:
// Passing the XML
$books = SimpleXMLElement($XmlData);
//------------------// Passing a filename
$books = SimpleXMLElement('books.xml', null, true);
Nhn vo on XML v d, ta s ly ra tt c cc book hay ca Amazon:
<?php
// load SimpleXML
$books = new SimpleXMLElement('books.xml', null, true);
echo <<<EOF
Email: Mrhaisyc@gmail.com
118
Yahoo: Nguyenthanhhai702
<table>
<tr>
<th>Title</th>
<th>Author</th>
<th>Publisher</th>
<th>Price at Amazon.com</th>
<th>ISBN</th>
</tr>
EOF;
foreach($books as $book) // loop through our books
{
echo <<<EOF
<tr>
<td>{$book->title}</td>
<td>{$book->author}</td>
<td>{$book->publisher}</td>
<td>${$book->amazon_price}</td>
<td>{$book['isbn']}</td>
</tr>
EOF;
}
echo '</table>';
?>
Bn rng $books (c ch 's' nh) l mt Element do khi nim mi
mt file XML th phi c root element. V th, ng mong i c i
tng SimpleXml khng nh .
Mi element c th c nhiu element con cng loi hay khc loi, v d
ny l cng loi 'book' v class SimpleXmlElement ny cho php ta duyt
qua cc element con cng loi nh mt array nh v d foreach() trn.
Cui cng, ni v c php truy cp child element v attribute. Bc no cha bit
khi nim ny na th:
<book isbn="978-1594489501">
<title>A Thousand Splendid Suns</title>
<author>Khaled Hosseini</author>
<publisher>Riverhead Hardcover</publisher>
<amazon_price>14.27</amazon_price>
</book>
Email: Mrhaisyc@gmail.com
119
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
120
Yahoo: Nguyenthanhhai702
null, true);
echo "<h1><a href='{$rss->channel->link}'>{$rss->channel>title}</a></h1>".PHP_EOL.'<hr />'.PHP_EOL;
foreach($rss->xpath('channel/item') as $item)
{
echo <<<EOF
<h2><a href='{$item->link}'>{$item->title}</a></h2>
<div>Posted at: {$item->pubDate}</div>
{$item->description}
<hr />
EOF;
}
?>
Cui cng,mt vi thuc tnh ca i tng SimpleXmlElement cc bn s quan
tm:
$value = trim((string) $element); // Bn thn element n l XML, bn ly gi tr
ca element th p kiu v string
$attributes = $element->attributes(); // ly tt c cc attribute
$children = $element->children(); // ly cc child element
Email: Mrhaisyc@gmail.com
121
Yahoo: Nguyenthanhhai702
122
Yahoo: Nguyenthanhhai702
123
Yahoo: Nguyenthanhhai702
124
Yahoo: Nguyenthanhhai702
125
Yahoo: Nguyenthanhhai702
CSDL m khng chng flood th k tn cng c th fresh trnh duyt web hoc
dng nhng script tn cngf t server , host hay localhost khc , lm trn server .
Khin tt nghn ... v server c th ct host bn nh chi . Cch khc phc , so
snh bin nhp vo trng hay thi gian ... ni chung c nhiu cch lm vic ny
, hiu qu v nhanh th dng hm header sau khi submit . ( Nu bn lp trnh dng
hm mysql_fetch_array , cng d b trn server , l do gm d liu vo mng nu
nhiu record th th no ... v th bn c th chuyn qua dng mysql_result , n ly
d liu theo filed v column )
Lu v dng upload file : ci ny cng quan trng khng km , v th bn phi
kim tra dng file g khi c upload v khng s c th lm host ca bn dnh
backdoor .
Dng flood c 2 loi dng Flood Form v Flood Process
- Flood form l g ? Flood form l dng gi d liu hng lot khin cho MYSQL
x l chi vi , v d bn thit k mt form n gin ch INSERT data vo
mysql . Nu D liu ch l mt request th khng sao , cn trong 1 giy m c c
trm request th lp tc hih
Hin ti kh nhiu web site thit k form khng c m xc nhn ? th vn g s
x y r a ?
Nu nhng form nh gp , ng k thnh vin : lu lu c c ngn record do
flood l chuyn thng , nu form x l c gi mail th ng nhin b li
dng lm Bomb mail , lm y CSDL ca mnh .
Nhng hu qu dn n : MYSQL b treo , server cht , b y space , tn
bandwidth . Chng hn 1 record chng 30kbytes th 1000 , hay 10000 c nh vy
lp i lp li theo cp s nhn th space tn kh nhiu cho nhng d liu v ch ,
v cpu s load rt nhiu tn ti nguyn .
- Flood process l g ? L dng flood khng to ra d liu mi m n gi nhng
request khin PHP v Mysql x l kh vt v . Hin ang c tro lu flood PHP
m MYSQL bng X-flash ( Macro Media Flash ) . Minh chng l cc bn thy
trang http://www.hvaonline.net v http://www.hvanews.net hng chu mt ngy
trn c trm t tn cng , nhng ti sao vn ng hin ngang , l do ch bo
mt cao , nu i vi cc site thng l c v b ngm .
Cch phng chng .
- i vi form nhp liu cn to ra m xc nhn dng Hnh nh ( c th xem
phn ng k thnh vin ti PHPeasy , Hvanews v mt s nhng forum khc .
- Cu hnh Mysql chp nhn nhiu kt ni hn ( mc nh MYSQL thng l
100)
Email: Mrhaisyc@gmail.com
126
Yahoo: Nguyenthanhhai702
127
Yahoo: Nguyenthanhhai702
128
Yahoo: Nguyenthanhhai702
$("#pagi li a").click(function(){
currentNow = $(this).attr("name").substr(4);
if($(this).attr("name").length > 0)
{
$.ajax({
type: "POST",
url: "./test.php",
data: "currPage="+currentNow,
processData: false,
dataType: "json",
success: responseJson
} );
}
} );
}{/geshibot}
Hm ny mc ch ly d liu tr v t PHP phn tch v in ra kt qu ... li dng
iu ny chng ta cho i km theo n vi d liu ca tng s record hin c
(data.total) v s trang hin hu (data.crr).
{geshibot lang="javascript" head=""}$.each(data.items, function(i,item){
html += '<tr><td bgcolor="#f5f5f5">ID: '+item.id+'</td><td>Content:
'+item.content+'</td></tr>';
} );
$("#content-wrapper").html(html);{/geshibot}
Gi hm each fetch d liu t i tng items v ly ra 2 kt qu cho vo bin
html sau in ra kt qu vi hm .html() ca jquery.
{geshibot lang="javascript" head=""}$("#pagiwrapper").html(Pagination(record,totalPage,current ));{/geshibot}
X l d liu v gi hm Pagination
{geshibot lang="javascript" head=""}$("#pagi li a").click(function(){
currentNow = $(this).attr("name").substr(4);
if($(this).attr("name").length > 0)
{
$.ajax({
type: "POST",
url: "./test.php",
data: "currPage="+currentNow,
processData: false,
dataType: "json",
success: responseJson
} );
}
});{/geshibot}
Email: Mrhaisyc@gmail.com
129
Yahoo: Nguyenthanhhai702
130
Yahoo: Nguyenthanhhai702
float:left;
font-weight:bold;
padding:3px 4px;
}
#pagi .spacing-dot {
font-weight:normal;
}
#pagi .next a,
#pagi .previous a {
font-weight:bold;
border:solid 1px #fff;
}
#pagi .active {
color:#ff0084;
font-weight:bold;
display:block;
float:left;
padding:4px 6px;
padding-right:8px;
}
#pagi a:link,
#pagi a:visited {
color:#0063e3;
display:block;
float:left;
padding:3px 6px;
text-decoration:none;
}
#pagi a:hover {
border:solid 1px #666;
}{/geshibot}
Bi 2: Bt u vi AJAX v PHP - ng dng n gin nht
No demo nh: http://www.anhxtanh3087.110mb.com/ajax/1.htm
Bn th g tn vo Name xem!
iu ny lm vi javascript th cng n gin ng ko?Tuy nhin chng ta mun
ly gi server c.Vy th c cch no hay hn l dng AJAX.
ng dng n gin ny gm 2 file
file 1.htm:
{geshibot lang="php" head=""}<html>
<body>
<title>Bat dau voi AJAX & PHP - Anhxtanh3087</title>
<script type="text/javascript">
Email: Mrhaisyc@gmail.com
131
Yahoo: Nguyenthanhhai702
function ajaxFunction()
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
//alert("Khoi tao thanh cong doi tuong xmlHttp");
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}
}
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.myForm.time.value=xmlHttp.responseText;
}
}
xmlHttp.open("GET","1.php",true);
xmlHttp.send(null);
}
</script>
<form name="myForm">
Name: <input type="text"
Email: Mrhaisyc@gmail.com
132
Yahoo: Nguyenthanhhai702
133
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
134
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
135
Yahoo: Nguyenthanhhai702
Bi 1: Hm to alias t title
136
Yahoo: Nguyenthanhhai702
"d",
"A","A","A","A","A","A","A","A","A","A","A","A"
,"A","A","A","A","A",
"E","E","E","E","E","E","E","E","E","E","E",
"I","I","I","I","I",
"O","O","O","O","O","O","O","O","O","O","O","O"
,"O","O","O","O","O",
"U","U","U","U","U","U","U","U","U","U","U",
"Y","Y","Y","Y","Y",
"D","_");
return str_replace($marTViet,$marKoDau,$cs);
}{/geshibot}
Bi 2: Cch lc link trong trang html
preg_match_all('/(href=)(.*?)(")/i',$response,$patterns);
var_dump($patterns[2]);
bi 3: Gii hn tc download bng php
{geshibot lang="php" head=""}<?php
/**
* Download with limited speed class file.
*
* i-php group : <http://i-php.net/>
* Copyright (c) <2008>, <i-php.net>
* Licensed under New BSD License
* @filesource download_limited.php
* @copyright
Copyright 2008, i-php group
* @author
habogay@gmail.com
* @link
http://i-php.net/about/
* @since
php 5 . 0
* @version
$Revision: 1 $
* @modifiedby $LastChangedBy: habogay $
* @lastmodified $Date: 2008-08-18 09:45:49 -0500 (Sat, 18 Oct 2008) $
* @license
http://www.freebsd.org/copyright/freebsd-license.html New BSD
Style License
*/
class DownloadLimited
{
/**
* Send the local file to client with limit download rate as user view file name
*
* @param string $localFile file to send
* @param string $userViewFileName filename client will see
Email: Mrhaisyc@gmail.com
137
Yahoo: Nguyenthanhhai702
138
Yahoo: Nguyenthanhhai702
sleep(1);
}
/**
* Send the string data to client with limit download rate as user view file
name
*
* @param string string data to send include ascii,utf-8 character
* @param string $userViewFileName filename client will see
* @param float $downloadRate download limit speed in kb/s (ex: 50 kb/s)
* @return no return
*/
function sendString($data,$userViewFileName,$downloadRate)
{
// send headers
header('Cache-control: private');
header('Content-Type: application/octet-stream');
header('Content-Length: '.strlen($data));
header('Content-Disposition: filename='.$userViewFileName);
// flush header content
flush();
$start=0;
$sendSize=0;
while($sendSize<strlen($data))
{
$sendSize=round($downloadRate*1024);
print substr($data,$start,$sendSize);
$start=$sendSize;
// !important flush the content to the browser
flush();
}
?>{/geshibot}
Email: Mrhaisyc@gmail.com
139
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
140
Yahoo: Nguyenthanhhai702
141
Yahoo: Nguyenthanhhai702
142
Yahoo: Nguyenthanhhai702
143
Yahoo: Nguyenthanhhai702
144
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
145
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
146
Yahoo: Nguyenthanhhai702
Email: Mrhaisyc@gmail.com
147
Yahoo: Nguyenthanhhai702