You are on page 1of 413

Tng Hp Mi Th V

PHP ( TEST )
Mc Lc
Chapter 1 : Gii Thiu PHP
Chapter 2 : Bt u Vi PHP
Chapter 3 : Ci t PHP
Chapter 4 : C Php PHP
Chapter 5 : Bin PHP
Chapter 6 : Chui Bin PHP
Chapter 7 : Ton T PHP
Chapter 8 : Cu lnh if else trong PHP .
Chapter 9 : Cu lnh Switch trong PHP
Chapter 10 : Arrays ( Mng )
Chapter 11 : Looping While Loops
Chapter 12 : Looping For Loops
Chapter 13 : Functions ( Hm Chc Nng )
Chapter 14 : PHP Forms and User Input
Chapter 15 : PHP $_GET Variable
Chapter 16 : PHP $_POST Function
Chapter 17 : Date() Function
Chapter 18 : File Handing
Chapter 19 : File Upload
Chapter 20 : PHP Cookies
Chapter 21 : PHP Sessions
Chapter 22 : Sending Emails
Chapter 23 : Secure E-mails
Chapter 24 : Error Handing
Chapter 25 : Exception Handing
Chapter 26 : PHP Filter
Chapter 27 : PHP MySQL
Chapter 28 : PHP XML Expat Parser
Chapter 29 : Gii thiu AJAX
Chapter Ngoi : Bi Tp
-Bi 11: Vit ng dng ng nhp bng PHP v MYSQL
-Bi 12: Vit ng dng thm thnh vin bng PHP v MYSQL
-Bi 13: Vit ng dng qun l thnh vin bng PHP v MYSQL
-Bi 14: vit ng dng sa xa thnh vin bng PHP v MYSQL
-Bi 15: Vit ng dng to m xc nhn bng PHP
-Bi 16: Vit ng dng m s ngi online bng php

Page 1 of 413

-Bi 17: Xy dng h thng bnh chn bng PHP v MYSQL


-Bi 18: Xy dng ng dng to trang upload nhiu hnh nh
-Bi 19: Vit ng dng to gi hng - shopping cart - phn 1
-Bi 20: Vit ng dng to gi hng - shopping cart - phn 2
Chapter 30 : Cc hm
Chapter 31 : Linh Tinh Cc Th Bn Ngoi Tng Hp c
+Code style theo chun Zend
-Nhng iu cn bit v PHP 5.4
-Cc hm rt hu ch trong PHP bn cn bit !
-iu g khin bn l 1 coder ti ?
-Cc li c bn trong lp trnh PHP
-Code gi mail trong PHP
-T lm menu 2 cp n gin vi php v javascript
-T lm im sng vi javascript
-Gii thiu - Ci t Smarty
-Smarty c bn [ Phn 1 ]
-Smarty c bn [ Phn 2 ]
-K thut s dng lazy loading trong hng i tng
-Regular Expressions
-Gii thiu Regular Expression Nng cao
- quy vi menu khng gii hn s cp (N cp)
-Upload file trong php
-Class support Mutil Language cho c bn v nng cao v cho c cc framework khc!!!!
-Hng dn CSS Framework 960 cho mi ngi
-Nhp d liu t file excel s dng cng ngh XML...
-M hnh VMC auto load Controller v model
-Th Thut Tng Tc PHP
-Code phn trang theo kiu Google
-Phn trang c bn, c phn on khng OOP
-Hng dn s dng jquery ajax lng nhau trong ng dng
-Code phn trang bng Ajax n gin
-S dng JqGrid PHP
-K thut seo website
-Phn trang n gin vi Jquery
-Performance Tips trong PHP - Part 1
-Nhng lp v phng thc tru tng trong PHP 5.
-M hnh Multi Modules , Multi Templates v Multi Database
-Tm hiu th vin Php_filter
-Vit Class Database c chng SQL Injection
-Cch ly rss v tin tc T VnExPress
-Cch dng hm ereg, preg trong php
-Khi dng ajax khi nhn enter s t ng gi hm ging khi dng form
-[TUT] Add d liu t form vo database hin th ting vit c du.
-Tn mn v ECHO
-Code xem th mc con .
-STRING trong PHP [PART1]

Page 2 of 413

-STRING trong PHP [PART2]


-STRING trong PHP [PART3]
-STRING trong PHP [PART4]
-Mng trong PHP [Part1]
-Mng trong PHP [Part2]
-Hng dn code trang news c bn
-HNG DN CODE TRANG BN SCH
-Hng dn chi tit code trang bn sch

About Author of this book


Author : Siverdragon12
- V l do ngu hng v trong lc hc lp trnh php nn mun vit li
quyn sch ny dnh cho ngi mi nhp mn hoc a phn cc bn
khng bit ting anh v 1 tng lai ai cng gii CNTT nh
khng c ngha ai khng bit ting anh th khng th lp trnh .
- Have A Nice Day , everybody !!!
Ch : Sch Cha c hon thin . ang c b sung v chnh sa
nhiu th gip sch ngy mt hon thin hn v vy sch hin ang l bn
test , s sm public bn hon thin v thm nhiu chapter mi , bi tp mi ,
training mi cho cc bn v thm phn nng cao PHP gip cc bn hiu
hn v lp trnh tt hn vi PHP . Share To Be Shared . Cm n .

Chapter 1 : Gii Thiu PHP


PHP l mt ngn ng kch bn my ch, v l mt cng c mnh lm cho cc trang
Web ng v tng tc.
PHP l mt thay th c s dng rng ri, min ph, v hiu qu vi cc i th cnh
tranh nh ASP ca Microsoft.
"Show PHP" cng c ca chng ti lm cho n d dng tm hiu PHP, n cho thy c
m ngun PHP v u ra ca m HTML.

V D 1 on Code PHP n gin kt hp HTML

Page 3 of 413

<!DOCTYPE html>
<html>
<body>
<?php
echo "My first PHP script!";
?>
</body>
</html>

Phn m l ngn ng PHP , cn li l HTML

Chapter 2 : Bt u vi PHP
Nhng g bn nn bit !!!
Trc khi tip tc, bn cn phi c mt s hiu bit c bn sau y:
-HTML
-Javascript
Nu bn mun nghin cu cc i tng ny ln u tin, tm thy cc hng dn trn
trang ny .
http://w3schools.com/
PHP l g?
-PHP l vit tt ca PHP: Hypertext Preprocessor
-PHP l mt ngn ng s dng rng ri , l mt m ngun m
-PHP c thc hin trn my ch ( vd : Linux )
-PHP hon ton min ph download v s dng
PHP l ngn ng n gin nht cho ngi mi bt u hc lp trnh
PHP cng cung cp nhiu tnh nng tin tin cho cc lp trnh vin chuyn nghip.
File PHP l g?
-PHP tp tin c th cha vn bn, HTML, JavaScript m, v m PHP
-M PHP c thc hin trn my ch, v kt qu c tr v cho trnh duyt nh

Page 4 of 413

HTML
-PHP tp tin c phn m rng tp tin mc nh ca ". Php"
PHP c th lm g?
-PHP c th to ra ni dung trang nng ng
-PHP c th to ra, m, c, vit, v cc tp tin trn my ch gn
-PHP c th thu thp d liu mu
-PHP c th gi v nhn cookie
-PHP c th thm, xa, sa i d liu trong c s d liu ca bn
-PHP c th hn ch ngi dng truy cp mt s trang trn trang web ca bn
-PHP c th m ha d liu
Vi PHP, bn khng gii hn u ra HTML. Bn c th xut hnh nh, tp tin PDF, v
thm ch c phim Flash. Bn cng c th sn xut bt k vn bn, chng hn nh
XHTML v XML.
Ti sao PHP?
- PHP chy trn cc nn tng khc nhau (Windows, Linux, Unix, Mac OS X, vv)
- PHP l tng thch vi hu nh tt c cc my ch c s dng hin nay (Apache,
IIS, vv)
- PHP h tr cho mt lot cc c s d liu
- PHP l min ph. Ti v n t ngun PHP chnh thc: www.php.net
- PHP l d dng tm hiu v chy hiu qu pha my ch

Chapter 3 : Ci t PHP
Nhng g bn cn c !
+ Tm 1 Hosting ( chy php , ci ny p dng cho ai mun thu host b tin mnh
khuyn nn chy localhost )
+ Bn c th dng cc chng trnh h tr chy localhost trn google , c rt nhiu v
bn c th ty chn nu thch
i vi vic Chn Hosting
- Bn nn chn hosting no h tr tt v t vn khch hng ( v l yu t cn
thit )
- Bn nn chn hosting no c tc load nhanh , h tr ng truyn tt v khng
b cm cc hm ( Function ) to iu kin tt nht cho vic hc PHP
Page 5 of 413

Cc chng trnh chy Localhost u phi c cc iu sau y


- C h thng Apache
- MySQL
- PHP
l nhng yu cu c bn ca 1 server ( my ch )

Chapter 4 : C Php PHP


Mt s c php n gin
Tt c cc m lnh php u bt u vi <?php v kt thc vi ?> . M lnh ca PHP c
th t bt c u trong file .
1 s my ch khc bn cng c th bt u vi <? V kt thc vi ?>
i vi kh nng tng thch ti a, chng ti khuyn bn nn s dng cc hnh thc tiu
chun (<? Php) ch khng phi l hnh thc vit tt.

V D
<?php
M lnh php s y
?>
Phn m rng tp tin mc nh cho cc tp tin PHP l ".php"
Mt file PHP thng thng c cha cc th HTML, v mt s m kch bn PHP.
Di y, chng ti c mt v d ca mt kch bn PHP n gin m s gi vn bn
"Hello World!" cho trnh duyt:
<?php
echo Hello World!;
?>

Mi dng m trong PHP phi kt thc bng mt du chm


phy. Du chm phy l mt du phn cch v c s
dng phn bit mt b cc hng dn khc.
C hai cu lnh c bn vn bn u ra vi PHP l : echo v print.
Trong v d trn, chng ti s dng echo tuyn b sn xut cc vn bn "Hello
World".

Ch Thch Trong PHP


Trong PHP , Chng ta s dng // ( Khng c du ngoc kp ) lm 1
dng lm ch thch , hoc /* v */ lm ch thch dng khi
Page 6 of 413

V d :

<!DOCTYPE html>
<html>
<body>
<?php
//y l ch thch 1 dng
/*
y l ch thch
Nhiu
Dng
*/
?>

Chapter 5 : Bin PHP


Bn cn nh mn i S
Trng Khng ?
Dng nh , x = 1 , y = 2 , z =3
Bn cn nh vi mi t ta c th gn 1 gi tr (
vd : x = 2 , y = 123 , z = 52 v.v ) v bn s dng
my thng tin tnh 1 gi tr no ca d
chng hn .

Tt c nhng ci trn c gi l Bin PHP , v


bin c dng gi 1 gi tr nht nh (x=2)
hoc l cc bi ton nh ( d = a+b+c ) trong
a,b,c l cc hng s c gi tr bt k ( vd : a = 1 ,
b = 2 , c = 3 th d = a + b + c = 6 )
</body>
</html>

Bin PHP
Vi i s, cc bin PHP c s dng gi cc gi tr hoc biu thc.
Mt bin c th c mt tn ngn, nh x, hoc mt ci tn di hn, nh h v
tn chng ta vy.
Quy tc cho tn bin PHP :
-Cc bin trong PHP bt u vi mt k hiu $, tip theo l tn ca bin
-Tn bin phi bt u vi mt k t hoc k t gch di
-Mt tn bin ch c th cha cc k t ch-s v gch di (A-z, 0-9, v _)
-Mt tn bin khng nn cha khng gian ( gi l khong cch vd : $a b
bin ny l sai , $ba th ny mi ng )
-Tn bin l trng hp nhy cm v quan trng nn n phn bit c hoa v
thng (y v Y l hai bin khc nhau)

Creating (Declaring) PHP Variables

Page 7 of 413

PHP khng c lnh khai bo mt bin.


Mt bin c to ra thi im ln u tin bn ch nh mt gi tr cho n: (
lc mi bt u file php )
Vd v 1 bin y
$siverdragon12=Hacker;
Sau khi thc hin bin trn th bin siverdragon12 s gi gi tr l Hacker
Mo : Nu bn to mt bin m khng bt k gi tr no th bn nn
t gi tr l null
Vd :
$siverdragon12=null;
No , by gi ta s to ra 1 bin c cha k t ( ch t a -> z ) v 1 bin c
cha s ( 0 -> 9 )
<?php
$txt="Hello
World!";
$x=16;
?>

Ch : i vi ch ( k t ) th bn phi du ngoc kp nh trn , cn


i vi s th khng cn .

PHP l mt ngn ng lng lo


Trong PHP, mt bin khng cn phi c khai bo trc khi thm mt gi tr cho n.
Trong v d trn, nhn thy rng chng ti khng phi ni vi PHP kiu d liu bin.
PHP s t ng chuyn bin cho ng kiu d liu, ty thuc vo gi tr ca n.
Trong mt ngn ng lp trnh mnh m, bn phi khai bo (xc nh) cc loi v tn ca
bin trc khi s dng n.

Phm Vi PHP
Phm vi ca mt bin l mt phn ca kch bn, trong bin c th c
tham chiu.
Page 8 of 413

PHP c bn phm vi bin khc nhau:


-local
-global
-static
-parameter

Phm Vi Local
Mt bin khai bo trong mt hm PHP l a phng v ch c th
c truy cp trong phm vi chc nng . (Bin c phm vi local): V
d .
<?php
$a = 5; // phm vi local
function myTest()
{
echo $a; // phm vi local
}
myTest();
?>

Cc kch bn trn s khng sn xut bt k sn lng v echo tuyn b


cp n bin phm vi a phng bin $a, m khng c ch
nh mt gi tr trong phm vi ny.Bn c th c cc bin a phng
c cng tn trong cc chc nng khc nhau, bi v cc bin a phng
ch c cng nhn bi cc chc nng m chng c khai bo.Cc
bin a phng s b xa ngay sau khi chc nng, nhim v c
hon thnh.

Phm Vi Global
Phm vi ton cu cp n bt k bin c nh ngha bn ngoi
ca bt k chc nng.
Bin ton cu c th c truy cp t bt k mt phn ca kch bn
khng phi l bn trong mt hm.
truy cp vo mt bin ton cu t bn trong mt chc nng, s
dng global t kha:

Page 9 of 413

V d :
<?php
$a = 5;
$b = 10;
function myTest()
{
global $a, $b;
$b = $a + $b;
}
myTest();
echo $b;
?>

Kt qu on code trn l 15 ( sau khi chy )


PHP cng lu tr tt c cc bin ton cu trong mt mng gi l $
GLOBALS [ index ]. Ch s ca n l tn ca bin. Mng ny cng c
th truy cp t bn trong chc nng v c th c s dng cp
nht cc bin ton cu trc tip.
V d trn c th c vit li nh th ny:
<?php
$a = 5;
$b = 10;
function myTest()
{
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
myTest();
echo $b;
?>

Page 10 of 413

Phm Vi Static
Khi mt hm c hon thnh, tt c cc bin ca n thng b xa. Tuy nhin, i khi bn
mun bin a phng khng b xa.
lm iu ny, s dng cc t kha tnh khi ln u tin bn khai bo cc bin:

static $rememberMe;

Sau , mi khi hm c gi, bin vn s c nhng thng tin n c t thi gian qua cc
chc nng c gi.

Lu : bin vn l local n chc nng.

Parameters
Mt tham s l mt bin a phng c gi tr c truyn cho hm m gi.
Cc thng s c khai bo trong danh sch tham s nh l mt phn ca vic k khai hm
functions:

Function myTest($para1,$para2,...)
{
// function code
}
Cc thng s cn c gi l i s. Chng ti s tho lun chi tit hn khi chng ta ni v cc
chc nng.

Chapter 6 : Chui Bin PHP


Chui bin c s dng s dng cho cc gi tr c cha k t .
Trong chng trnh ny , chng ta s nhn vo chc nng ph bin nht v
vn hnh c s dng thao tc cc chui bin trong PHP.
Sau khi chng ti to ra mt chui , chng ta c th thao tc n . Mt chui
c th c s dng trc tip trong mt hm hoc n c th c lu tr
trong mt bin .
Di y, cc tp lnh PHP gn vn bn "Hello World" vo mt chui bin
gi l $ txt:

Page 11 of 413

<?php
$txt="Hello World";
echo $txt;
?>

Khi thc thi code trn th s ra kt qu tr v l Hello World


No , by gi chng ta th 1 s chc nng v cc chc nng khc nhau
x l 1 chui
Ch c mt chui trong PHP.
S dng du (.) c s dng t hai chui vi nhau.
ni hai bin chui vi nhau, s dng ton t ni:
<?php
$txt1="Hello World!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
?>
Kt qu tr v s l
Hello World ! What a nice day!
Nu chng ta nhn vo on m trn, bn thy rng chng ta s dng ton t ni hai ln.
iu ny l bi v chng ti chn mt chui th ba (mt nhn vt khng gian),
phn cch hai chui.

Hm strlen()
Hm strlen () c s dng tr li chiu di ca mt chui.
Hy tm chiu di ca mt chui:
<?php
echo strlen("Hello world!");
?>
Kt qu tr v l
12
Chiu di ca mt chui thng c s dng trong vng lp hoc cc chc nng khc,
iu quan trng l bit khi no kt thc chui. (tc l trong mt vng lp, chng ti
mun ngng vng lp sau khi k t cui cng trong chui).

Hm strpos()
Hm strpos () c s dng tm kim mt nhn vt / vn bn trong mt chui.
Nu kt hp c tm thy, chc nng ny s tr li vi v tr nhn vt ca trn u u
Page 12 of 413

tin. Nu khng ph hp c tm thy, n s tr v FALSE.


Hy xem nu chng ta c th tm thy chui "th gii" trong chui k t ca chng ti:

<?php
echo strpos("Hello world!","world");
?>

Kt qu tr v l
6
V tr t "world" trong v d trn l 6. L do m n l 6 (v khng phi 7), l v tr ca k
t u tin trong chui l 0, v khng phi 1.
Thng tin v 1 s chc nng ca cc hm khc ( c th l khng y nhng cng nn
c qua cho bit )
http://w3schools.com/php/php_ref_string.asp

Chapter 7 : Ton T PHP


Ton T ( i s n gin ) Operators
The table below lists the arithmetic operators in PHP:
Operator Name
x+y
Addition . Cng
x-y
Subtraction . Tr
Multiplication.
x*y
Nhn
x/y
Division . Chia
x%y
-x
a.b

Modulus . Chia
ly s d

Description
Sum of x and y
Difference of x and y

Example
2+2
5-2

Result
4
3

Product of x and y

5*2

10

Quotient of x and y

15 / 5
5%2
10 % 8
10 % 2
-2

3
1
2
0

"Hi" . "Ha"

HiHa

Remainder of x divided
by y

Negation . s m Opposite of x
Concatenation .
Concatenate two strings
Ghp k t

Page 13 of 413

Phn cng Operators


The basic assignment operator in PHP is "=". It means that the left operand gets set to the
value of the expression on the right. That is, the value of "$x = 5" is 5.
Assignment Same as...
x=y

x=y

x += y
x -= y
x *= y
x /= y
x %= y
a .= b

x=x+y
x=x-y
x=x*y
x=x/y
x=x%y
a=a.b

Description
The left operand gets set to the value of the expression on
the right
Addition
Subtraction
Multiplication
Division
Modulus
Concatenate two strings

Tng dn/gim dn Operators


Operator Name
Description
++ x
Pre-increment Increments x by one, then returns x
x ++
Post-increment Returns x, then increments x by one
-- x
Pre-decrement Decrements x by one, then returns x
x -Post-decrement Returns x, then decrements x by one

Ton T So Snh
Comparison operators allows you to compare two values:
Operator Name
x == y
Equal
x === y

Identical

x != y
x <> y

Not equal
Not equal

x !== y

Not identical

x>y
x<y

Greater than
Less than
Greater than or
equal to
Less than or

x >= y
x <= y

Page 14 of 413

Description
True if x is equal to y
True if x is equal to y, and they
are of same type
True if x is not equal to y
True if x is not equal to y
True if x is not equal to y, or
they are not of same type
True if x is greater than y
True if x is less than y
True if x is greater than or equal
to y
True if x is less than or equal to

Example
5==8 returns false
5==="5" returns false
5!=8 returns true
5<>8 returns true
5!=="5" returns true
5>8 returns false
5<8 returns true
5>=8 returns false
5<=8 returns true

equal to

Logical Operators
Operator Name
x and y

And

x or y

Or

x xor y

Xor

x && y

And

x || y

Or

!x

Not

Description

Example
x=6
y=3
True if both x and y are true
(x < 10 and y > 1) returns
true
x=6
True if either or both x and y are y=3
true
(x==6 or y==5) returns
true
x=6
True if either x or y is true, but y=3
not both
(x==6 xor y==3) returns
false
x=6
y=3
True if both x and y are true
(x < 10 && y > 1) returns
true
x=6
True if either or both x and y are y=3
true
(x==5 || y==5) returns
false
x=6
True if x is not true
y=3
!(x==y) returns true

Array Operators
Operator Name
x+y
Union
x == y
Equality
x === y

Identity

x != y
x <> y
x !== y

Inequality
Inequality
Non-identity

Page 15 of 413

Description
Union of x and y
True if x and y have the same key/value pairs
True if x and y have the same key/value pairs in the same
order and of the same types
True if x is not equal to y
True if x is not equal to y
True if x is not identical to y

Chapter 8 : Cu lnh If else trong


PHP
Cu iu kin c s dng thc hin cc hnh ng khc nhau da trn cc iu kin
khc nhau.

iu kin cu lnh ( c cho bit v suy ngh ) .


N rt c dng thng xuyn khi bn vit code , bn mun thc hin mt
hnh ng ( 1 cu lnh ) nhng vi nhng quyt nh khc nhau th cu lnh
if else l s la chn ca bn
Bn c th s dng cu lnh iu kin trong m ca bn lm iu ny.
- Trong PHP chng ti c bo co iu kin sau y .
- Cu lnh if ( khng c else ) ci ny dng thc hin mt lnh ch khi iu
kin quy nh l ng s tht
- Cu lnh if else thc hin iu kin nu n iu kin l ng cn nu sai th
s tr kt qu khc else
- Cu lnh if elseif else dng thc hin nhiu khi m 1 lc trong nhiu
khi m thc hin ( vd trn c mi 1 iu kin sai th tr v ci kia , cn ci
ny nhiu trng hp i loi th )
- Cu lnh switch S dng cu lnh ny la chn mt trong nhiu on m s
c thc hin .

Cu lnh IF
- S dng cu lnh if khi thc hin mt s m khi v ch khi iu kin
qui nh ca n ng vi m c qui nh
C php cu if :
If ( iu kin ) s c thc hin nu iu kin ng .
V d sau y s a ra "Have a nice weekend!" nu ngy hin nay l th Su:

Page 16 of 413

<html>
<body>
<?php
$d=date("D");
if ($d=="Fri") echo "Have a nice weekend!";
?>
</body>
</html>

Ch rng on m trn khng c else . v vy m ny c thc thi khi n


ch ng vi iu kin .

Cu lnh IF ELSE
S dng cu lnh if else thc hin on m nu iu kin n l ng
hoc sai .
C php :
if (iu kin)
{
M lnh s c thc hin nu iu kin ng;
}
else
{
M lnh s c thc hin nu iu kin sai;
}

V d
V d sau y s a ra "Have a nice weekend!" nu ngy hin nay l th Su, nu khng
phi n s tr kt qu khc l "Have a nice day!"

Page 17 of 413

<html>
<body>
<?php
$d=date("D");
if ($d=="Fri")
{
echo "Have a nice weekend!";
}
else
{
echo "Have a nice day!";
}
?>
</body>
</html>

Cu lnh IF ELSEIF ELSE


S dng cu lnh if .... elseif ... else la chn mt trong nhiu khi m s c thc
hin.

C php
if (iu kin 1)
{
code s c thc hin nu iu kin 1 ng;
}
elseif (iu kin 2)
{
code s c thc hin nu iu kin 2 ng;
}
else
{
code s c thc hin nu my ci iu kin trn sai;
}

V d
Page 18 of 413

V d sau y s a ra "Have a nice weekend!"nu ngy hin nay l th Su, v "Have a


nice Sunday!" nu ngy hin nay l ch nht. Nu khng, n s ra "Have a nice day!"

<html>
<body>
<?php
$d=date("D");
if ($d=="Fri")
{
echo "Have a nice weekend!";
}
elseif ($d=="Sun")
{
echo "Have a nice Sunday!";
}
else
{
echo "Have a nice day!";
}
?>
</body>
</html>

Chapter 9 : Cu lnh Switch PHP


Cu iu kin c s dng thc hin cc hnh ng khc nhau da trn cc iu kin
khc nhau.
S dng cu lnh switch la chn mt trong nhiu khi m s c thc hin.

C php

Page 19 of 413

switch (n)
{
case label1:
code s thc hin nu n=label1;
break;
case label2:
code s thc hin nu if n=label2;
break;
default:
code s thc hin nu n khc c 2 ci label1 v label2;
}

y l cch n hot ng: u tin chng ta c mt biu thc duy nht n (thng xuyn
nht mt bin), c nh gi mt ln. Gi tr ca biu thc sau c so snh vi cc
gi tr cho tng trng hp trong cu trc. Nu c mt trn u, cc khi m lin kt vi
trng hp c thc hin. S dng break ngn chn cc m t chy vo trng
hp tip theo t ng. Nhng tuyn b mc nh c s dng nu khng tm thy.
V d

Page 20 of 413

<html>
<body>
<?php
$x=1;
switch ($x)
{
case 1:
echo "Number 1";
break;
case 2:
echo "Number 2";
break;
case 3:
echo "Number 3";
break;
default:
echo "No number between 1 and 3";
}
?>
</body>
</html>

Chapter 10 : Arrays ( Mng )


Mt mng lu tr nhiu gi tr trong mt bin duy nht.
Mt Array l g?
Mt bin l mt vng lu tr ang nm gi mt s hoc vn bn. Vn l, mt bin s
ch c mt gi tr.
Mt mng l mt bin c bit, c th lu tr nhiu gi tr trong mt bin duy nht.
Nu bn c mt danh sch cc mc (mt danh sch cc tn xe, v d), lu tr cc xe t
trong cc bin duy nht c th nhn nh th ny:
$cars1="Saab";
$cars2="Volvo";
$cars3="BMW";

Page 21 of 413

Tuy nhin , nu khng phi 3 ci tn m l hng ngn ci tn th sao ? Gii php tt nht
l dng mng
Mt mng c th gi tt c cc gi tr bin ca bn di mt ci tn. V bn c th truy
cp vo cc gi tr bng cch cp n tn mng.
Mi phn t trong mng c ch s ring ca mnh n c th d dng truy cp.
Trong PHP, c ba loi ca cc mng:
Numeric array - Mt mng vi mt s ch s
Associative array - Mt mng m mi phm ID c kt hp vi mt gi tr
Multidimensional array- Mt mng c cha mt hoc nhiu mng

Numeric Arrays
Mt mng s cc ca hng mi phn t mng vi mt s ch s.
C hai phng php to ra mt mng s.
1. Trong v d sau ch s c gn t ng (ch s bt u t 0):
$cars=array("Saab","Volvo","BMW","Toyota");

2.Trong v d sau chng ta gn cc ch s theo cch th cng:

$cars[0]="Saab";
$cars[1]="Volvo";
$cars[2]="BMW";
$cars[3]="Toyota";

Page 22 of 413

V d
Trong v d sau bn truy cp cc gi tr bin bng cch cp n tn mng v ch s:

<?php
$cars[0]="Saab";
$cars[1]="Volvo";
$cars[2]="BMW";
$cars[3]="Toyota";
echo $cars[0] . " and " . $cars[1] . " are Swedish cars.";
?>

Code s tr v l
Saab and Volvo are Swedish cars.

Associative Arrays
Mt mng kt hp, mi phm ID c kt hp vi mt gi tr.
Khi lu tr d liu v cc gi tr c th c t tn, mt mng s khng phi l lun
lun l cch tt nht lm iu .
Vi mng kt hp, chng ti c th s dng cc gi tr nh l cha kha v gn gi tr cho
h.
V d 1
Trong v d ny, chng ti s dng mt mng gn la tui ngi khc nhau:
$ages = array("Peter"=>32, "Quagmire"=>30, "Joe"=>34);
V d 2
V d ny l tng t nh v d 1, nhng cho thy mt cch khc nhau ca vic to ra cc
mng:
$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";

Page 23 of 413

Cc phm ID c th c s dng trong mt kch bn:


<?php
$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";
echo "Peter is " . $ages['Peter'] . " years old.";
?>
Code s tr v l
Peter is 32 years old.

Multidimensional Arrays
Trong mt mng a chiu, mi phn t trong mng chnh cng c th l mt mng. V
mi phn t trong mng ph c th l mt mng, v nh vy.
V d
Trong v d ny, chng ta to mt mng a chiu, vi cc phm ID t ng gn:

Page 24 of 413

$families = array
(
"Griffin"=>array
(
"Peter",
"Lois",
"Megan"
),
"Quagmire"=>array
(
"Glenn"
),
"Brown"=>array
(
"Cleveland",
"Loretta",
"Junior"
)
);

Cc mng trn s ging nh th ny nu bng vn bn n u ra:

Page 25 of 413

Array
(
[Griffin] => Array
(
[0] => Peter
[1] => Lois
[2] => Megan
)
[Quagmire] => Array
(
[0] => Glenn
)
[Brown] => Array
(
[0] => Cleveland
[1] => Loretta
[2] => Junior
)
)

V d 2
Cho php th hin th mt gi tr t mng trn:
echo "Is " . $families['Griffin'][2] .
" a part of the Griffin family?";
Kt qu tr v s l
Is Megan a part of the Griffin family?

Chapter 11 : Looping While Loops


Loops thc thi mt khi m mt s quy nh ca ln, hoc trong khi mt iu kin c
ch nh l ng s tht.
PHP Loops

Page 26 of 413

Thng thng khi bn vit m, bn mun cng mt khi m chy hn v hn na


trong mt hng. Thay v thm mt vi dng trong mt kch bn gn nh bng nhau,
chng ta c th s dng cc vng lp thc hin mt nhim v nh th ny.
Trong PHP, chng ti c bo co vng lp sau y:
- while - loops thng qua mt khi m trong khi mt iu kin c ch nh l ng s
tht
- do ... while - vng lp thng qua mt khi m mt ln, v sau lp i lp li vng
lp di nh mt iu kin xc nh l ng s tht
- foreach - loops mt khi m cho mi phn t trong mt mng

The while Loop


Cc vng lp trong khi thc thi mt khi m trong khi mt iu kin l ng s tht.
C php
while (iu kin)
{
code s c thc hin;
}
V d
V d di y u tin thit lp mt bin 1 ($i=1;).
Sau , trong khi vng lp s tip tc chy khi i nh hn hoc bng 5. N s tng thm 1
mi ln vng lp chy:
<html>
<body>
<?php
$i=1;
while($i<=5)
{
echo "The number is " . $i . "<br>";
$i++;
}
?>
</body>
</html>

Page 27 of 413

Kt qu l
The number is 1
The number is 2
The number is 3
The number is 4
The number is 5

The do...while Statement


Vic do ... while khi tuyn b s lun lun thc hin cc khi m mt ln, sau s kim
tra cc iu kin, v lp li vng lp trong khi iu kin l ng.
C php

do
{
code s c thc hin;
}
while (iu kin);

V d
V d di y u tin thit lp mt bin 1 ($i=1;).
Sau , n bt u do ... trong khi vng lp. Cc vng lp s tng bin i vi 1, v sau
vit mt s u ra. Sau , iu kin c kim tra (l ti t hn, hoc bng 5), v vng
lp s tip tc chy khi i nh hn hoc bng 5

Page 28 of 413

<html>
<body>
<?php
$i=1;
do
{
$i++;
echo "The number is " . $i . "<br>";
}
while ($i<=5);
?>
</body>
</html>

Kt qu cho ra l
The number is 2
The number is 3
The number is 4
The number is 5
The number is 6

Cc vng lp v vng lp foreach s c gii thch


trong chng k tip.

Chapter 12 : Looping For Loops


Loops thc thi mt khi m mt s quy nh ca ln, hoc trong khi mt iu kin c
ch nh l ng s tht.

The for Loop


Vng lp for c s dng khi bn bit trc kch bn nn chy bao nhiu ln.
C php

Page 29 of 413

for (init; condition; increment)


{
code to be executed;
}

Ch thch:
init: Hu h s dng s m (nhng c th c bt k
m c thc hin mt ln vo u ca vng lp)
condition: iu kin cho mi ln lp. Nu iu kin
ny ng, vng lp tip tc. Nu n iu kin sai th
vng lp kt thc.
increment: Hu ht tng s m (nhng c th c
bt k m s c thc hin vo cui ca s lp li)
Lu : Cc thng s init v increment c th c sn
phm no hoc c nhiu biu ng (cch nhau bng du
phy).

V d
V d di y nh ngha mt vng lp bt u vi i = 1. Cc vng lp s tip tc chy
min l bin i nh hn hoc bng 5. Bin i s tng thm 1 mi ln vng lp chy:

Page 30 of 413

<html>
<body>
<?php
for ($i=1; $i<=5; $i++)
{
echo "The number is " . $i . "<br>";
}
?>
</body>
</html>

Kt qu tr v l
The number is 1
The number is 2
The number is 3
The number is 4
The number is 5

The foreach Loop


Vng lp foreach c s dng lp qua mng.
C php

foreach ($array as $value)


{
code to be executed;
}
i vi mi vng lp, gi tr ca phn t mng hin ti c gn cho $ value (v con tr
mng l di chuyn ca mt) - do , vng lp tip theo, bn s c xem xt gi tr mng
tip theo.
V d
V d sau y cho thy mt vng lp m s in cc gi tr ca cc mng nht nh

Page 31 of 413

<html>
<body>
<?php
$x=array("one","two","three");
foreach ($x as $value)
{
echo $value . "<br>";
}
?>
</body>
</html>
Kt qu tr v s l
one
two
three

Chapter 13 : Functions ( Hm
Chc Nng )
Sc mnh thc s ca PHP xut pht t chc nng ca mnh.
Trong PHP, c hn 700 tch hp chc nng.
Bn c th tham kho cc chc nng nhiu hn y

http://w3schools.com/php/default.asp
PHP Functions
Trong chng ny, chng ti s cho bn thy lm th no to ra cc chc nng ca
ring bn. gi cho kch bn ang c thc thi khi ti trang, bn c th t n vo mt
hm.Chc nng s c thc hin bi mt cuc gi n chc nng.
Bn c th gi mt chc nng t bt c ni no trong mt trang .

Page 32 of 413

Create a PHP Function


Chc nng s c thc hin bi mt cuc gi n chc nng.
C php
function functionName()
{
code to be executed;
}

PHP function hng dn:


Cung cp cho cc chc nng mt tn phn nh nhng g chc nng
Tn chc nng c th bt u bng mt ch ci hoc gch di (khng phi s)
V d
Mt chc nng n gin, vit tn ca ti khi n c gi l:
<html>
<body>
<?php
function writeName()
{
echo "siverdragon12";
}
echo "My name is ";
writeName();
?>
</body>
</html>
Kt qu l
My name is siverdragon12

PHP Functions - Adding parameters (thm cc thng


s)
Page 33 of 413

thm nhiu chc nng cho mt hm, chng ta c th thm cc thng s. Mt tham s
l ging nh mt bin.
Tham s c quy nh c th sau tn hm, bn trong du ngoc n.
V d 1
V d sau y s vit tn khc nhau u tin, nhng tn cui cng nh nhau:
<html>
<body>
<?php
function writeName($fname)
{
echo $fname . "
Refsnes.<br>";
}
echo "My name is ";
writeName("Kai Jim");
echo "My sister's name is ";
writeName("Hege");
echo "My brother's name is ";
writeName("Stale");
?>
</body>
</html>
Kt qu s l

My name is Kai Jim Refsnes.


My sister's name is Hege Refsnes.
My brother's name is Stale Refsnes.
V d 2
Cc chc nng sau y c hai tham s:

Page 34 of 413

<html>
<body>
<?php
function writeName($fname,$punctuation)
{
echo $fname . " Refsnes" . $punctuation . "<br>";
}
echo "My name is ";
writeName("Kai Jim",".");
echo "My sister's name is ";
writeName("Hege","!");
echo "My brother's name is ";
writeName("Stle","?");
?>
</body>
</html>
Kt qu s l
My name is Kai Jim Refsnes.
My sister's name is Hege Refsnes!
My brother's name is Stle Refsnes?

PHP Functions - Return values


cho php mt hm tr v mt gi tr, s dng cc tuyn b tr li.
V d

Page 35 of 413

<html>
<body>
<?php
function add($x,$y)
{
$total=$x+$y;
return $total;
}
echo "1 + 16 = " . add(1,16);
?>
</body>
</html>

Kt qu s l
1 + 16 = 17

Chapter 14 : PHP Forms and User


Input
Cc bin PHP $_GET v $_POST c s dng ly thng tin t cc hnh
thc, nh u vo ca ngi s dng.

PHP Form Handling


iu quan trng nht khi giao dch vi cc hnh thc HTML v PHP l bt k yu t
hnh thc trong mt trang HTML s t ng c sn cho PHP script ca bn.
V d
V d di y c cha mt dng HTML vi hai lnh vc u vo v mt nt submit:

Page 36 of 413

<html>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="fname">
Age: <input type="text" name="age">
<input type="submit">
</form>
</body>
</html>
Khi mt ngi dng in vo cc hnh thc trn v nhp chut vo nt submit, cc d
liu mu c gi vo mt tp tin PHP, gi l "welcome.php":
"welcome.php" trng nh th ny:
<html>
<body>
Welcome <?php echo $_POST["fname"]; ?>!<br>
You are <?php echo $_POST["age"]; ?> years old.
</body>
</html>
Kt qu tr v s i loi nh th ny
Welcome John!
You are 28 years old.
Cc bin PHP $_POST v $_GET s c gii thch trong cc chng tip theo.

Form Validation
u vo s dng nn c xc nhn trn cc trnh duyt bt c khi no c th (theo lnh
ca khch hng). Trnh duyt xc nhn l nhanh hn v gim ti my ch.
Bn nn xem xt my ch xc nhn nu ngi dng nhp vo s c chn vo c s d
liu. Mt cch tt xc nhn mt hnh thc trn my ch l vit cc hnh thc cho
chnh n, thay v nhy n mt trang khc. Sau ngi dng s nhn c cc thng

Page 37 of 413

bo li trn cng mt trang nh hnh thc. iu ny lm cho n d dng hn pht hin


ra cc li.

Chapter 15 : PHP $_GET Variable


Trong PHP, bin $ _GET c xc nh trc c s dng thu thp cc gi tr trong
mt hnh thc vi phng php = "get".

The $_GET Variable


Thng tin c gi t mt hnh thc vi phng thc GET c th nhn thy tt c mi
ngi (n s c hin th trong thanh a ch ca trnh duyt) v c gii hn v s lng
thng tin gi.
V d
<form action="welcome.php" method="get">
Name: <input type="text" name="fname">
Age: <input type="text" name="age">
<input type="submit">
</form>
Khi ngi dng nhp vo nt "Submit", URL gi n my ch c th nhn mt ci g
nh th ny:
http://localhost/welcome.php?fname=Peter&age=37
Cc tp tin "welcome.php" by gi c th s dng bin $ _GET thu thp d liu mu
(tn ca cc trng mu t ng s l cha kha trong mng $ _GET):
Welcome <?php echo $_GET["fname"]; ?>.<br>
You are <?php echo $_GET["age"]; ?> years old!

When to use method="get"?


Khi s dng phng php "get" trong cc hnh thc HTML, tt c cc tn bin v gi tr
c hin th trong URL.
Page 38 of 413

Lu : Phng php ny khng nn c s dng khi gi mt khu hoc cc thng tin


nhy cm khc!
Tuy nhin, bi v cc bin c hin th trong URL, n c th nh du trang. iu ny
c th hu ch trong mt s trng hp.
Lu : Phng php get l khng ph hp vi cc gi tr bin rt ln. N khng nn
c s dng vi gi tr vt qu 2000 k t.

Chapter 16 : PHP $_POST


Function
Trong PHP, bin $ _POST c xc nh trc c s dng thu thp cc gi tr trong
mt hnh thc vi phng php = "post".

The $_POST Variable ( Bin $_POST )


Bin $ _POST c xc nh trc c s dng thu thp cc gi tr t mt hnh thc
gi vi phng php = "post".
Thng tin c gi t mt hnh thc vi phng thc POST l v hnh cho ngi khc
v khng c gii hn v s lng thng tin gi.
Lu : Tuy nhin, kch thc ti a cho phng thc POST l 8 MB mc ch ( c th
thay i mc nh thng qua file php.ini , dng post_max_size )
V d :
<form action="welcome.php" method="post">
Name: <input type="text" name="fname">
Age: <input type="text" name="age">
<input type="submit">
</form>
Khi ngi dng nhp vo nt "Submit", URL s nh th ny:
http://localhost/welcome.php

Page 39 of 413

Cc tp tin "welcome.php" by gi c th s dng bin $ _POST thu thp d liu mu


(tn ca cc trng mu t ng s l cha kha trong mng $ _POST):
Welcome <?php echo $_POST["fname"]; ?>!<br>
You are <?php echo $_POST["age"]; ?> years old.

When to use method="post"?


Thng tin c gi t mt hnh thc vi phng thc POST l v hnh cho ngi khc
v khng c gii hn v s lng thng tin gi.
Tuy nhin, bi v cc bin khng c hin th trong URL, n khng phi l c th nh
du trang.

The PHP $_REQUEST Variable


Bin $ _REQUEST c xc nh trc c cha cc ni dung ca c hai $ _GET,
$_POST , $_COOKIE
Bin $ _REQUEST c th c s dng thu thp d liu mu c gi vi c hai
phng php GET v POST.
V d
Welcome <?php echo $_REQUEST["fname"]; ?>!<br>
You are <?php echo $_REQUEST["age"]; ?> years old.

Phn 2 : PHP Nng Cao


Chapter 17 : Date() Function
Chc nng php date() dng nh dng mt thi gian v / hoc ngy.

The PHP Date() Function


Chc nng PHP Date() nh dng du thi gian cho mt ngy d c hn v thi gian.

Page 40 of 413

Mo : Du thi gian l mt chui cc k t, biu th ngy thng v / hoc thi gian m


ti mt s kin no xy ra.
C php
date(format,timestamp)

Parameter
format
timestamp

Description
Required. Specifies the format of the timestamp
Optional. Specifies a timestamp. Default is the current date and time

PHP Date() - Format the Date


Tham s nh dng cn thit trong date()xc nh lm th no nh dng ngy / thi
gian.
Di y l mt s k t c th c s dng:
d - i din cc ngy trong thng (01-31)
m - i din cho mt thng (01-12)
Y - i din mt nm (bn ch s)
Bn c th tham kho thm ti y
http://w3schools.com/php/php_ref_date.asp
Nhng k t khc nh : /,.,- cng c th c chn vo gia cc cc ch ci b
sung thm nh dng .
<?php
echo date("Y/m/d") . "<br>";
echo date("Y.m.d") . "<br>";
echo date("Y-m-d");
?>
Kt qu tr v s l
2013/05/11
2013.05.11
2013-05-11

Page 41 of 413

PHP Date() - Adding a Timestamp


Tham s du thi gian ty chn trong date() chc nng xc nh mt du thi gian. Nu
bn khng ch nh mt du thi gian, ngy hin ti v thi gian s c s dng.
Chc nng mktime() tr v cc du thi gian Unix cho mt ngy.
Cc du thi gian Unix cha s giy gia Epoch Unix (January 1 1970 00:00:00 GMT)
v thi gian quy nh.
C php cho mktime()
mktime(hour,minute,second,month,day,year,is_dst)
i mt ngy trong tng lai, chng ti ch n gin l thm mt i s ngy mktime()
<?php
$tomorrow = mktime(0,0,0,date("m"),date("d")+1,date("Y"));
echo "Tomorrow is ".date("Y/m/d", $tomorrow);
?>

Code s ra l
Tomorrow is 2009/05/12

Chapter 17 : Include File


PHP include and require Statements
Trong PHP, bn c th chn ni dung ca mt file PHP vo mt tp tin PHP trc khi
my ch thc hin n.
Bao gm v yu cu bo co c s dng chn m hu ch bng vn bn trong cc
tp tin khc, trong dng chy ca thc hin.
Page 42 of 413

Bao gm v yu cu ging ht nhau, ngoi tr khi tht bi:


-yu cu s to ra mt li nghim trng (E_COMPILE_ERROR) v dng li kch bn
-bao gm s ch sn xut mt cnh bo (E_WARNING) v kch bn s tip tc
V vy, nu bn mun thc hin i vo v ch cho ngi s dng u ra, ngay c khi
bao gm cc tp tin l mt tch, s dng bao gm. Nu khng, trong trng hp
FrameWork, CMS hoc mt ng dng PHP m ha phc tp, lun lun s dng yu cu
bao gm mt tp tin quan trng n dng chy ca thc hin. iu ny s gip trnh
nh hng n an ninh v ton vn ca ng dng ca bn, ch cn trong trng hp mt
trong nhng tp tin quan trng l v tnh mt tch.
Cc file bao gm tit kim rt nhiu cng vic. iu ny c ngha l bn c th to mt
tiu tiu chun, chn, hoc tp tin trnh n cho tt c cc trang web ca bn. Sau ,
khi tiu cn c cp nht, bn ch c th cp nht cc tiu bao gm cc tp tin.

Syntax ( C php )

include 'filename';
or
require 'filename';

PHP include and require Statement


Gi s bn c mt tp tin tiu tiu chun, c gi l "header.php". bao gm cc
tp tin tiu trong mt trang, s dng include/require:

<html>
<body>
<?php include 'header.php'; ?>
<h1>Welcome to my home page!</h1>
<p>Some text.</p>
</body>
</html>

Page 43 of 413

V d 2
Gi s chng ta c mt tp tin trnh n tiu chun nn c s dng trn tt c cc
trang.
"menu.php":

echo '<a href="/default.php">Home</a>


<a href="/tutorials.php">Tutorials</a>
<a href="/references.php">References</a>
<a href="/examples.php">Examples</a>
<a href="/about.php">About Us</a>
<a href="/contact.php">Contact Us</a>';

Tt c cc trang trong trang Web nn bao gm cc tp tin trnh n ny. y l lm th


no n c th c thc hin:

<html>
<body>
<div class="leftmenu">
<?php include 'menu.php'; ?>
</div>
<h1>Welcome to my home page.</h1>
<p>Some text.</p>
</body>
</html>

V d 3
Gi s chng ta c mt tp tin vi mt s bin c nh ngha ("vars.php") bao gm:

Page 44 of 413

<?php
$color='red';
$car='BMW';
?>

Sau , cc bin c th c s dng trong cc tp tin gi:

<html>
<body>
<h1>Welcome to my home page.</h1>
<?php include 'vars.php';
echo "I have a $color $car"; // I have a red BMW
?>
</body>
</html>

Chapter 18 : File Handing


Chc nng fopen() dng m 1 file trong PHP

Opening a File
Tham s u tin ca chc nng ny cha tn ca tp tin c m v tham s th hai quy
nh c th trong ch tp tin phi c m ra:
<html>
<body>
<?php
$file=fopen("welcome.txt","r");
?>
</body>
</html>

Page 45 of 413

Tp tin c th c m trong mt trong cc phng thc sau y:

Modes
r
r+
w
w+
a
a+
x
x+

Description
Read only. Starts at the beginning of the file
Read/Write. Starts at the beginning of the file
Write only. Opens and clears the contents of file; or creates a new file
if it doesn't exist
Read/Write. Opens and clears the contents of file; or creates a new file
if it doesn't exist
Append. Opens and writes to the end of the file or creates a new file if
it doesn't exist
Read/Append. Preserves file content by writing to the end of the file
Write only. Creates a new file. Returns FALSE and an error if file
already exists
Read/Write. Creates a new file. Returns FALSE and an error if file
already exists

Lu : Nu hm fopen() l khng th m cc tp tin c ch nh, n s tr v 0 (false).


V d
V d sau y to ra mt tin nhn nu hm fopen() l khng th m cc tp tin c ch
nh:

<html>
<body>
<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
?>
</body>
</html>

Closing a File
Chc nng fclose() dng ng file ang m:
Page 46 of 413

<?php
$file = fopen("test.txt","r");
//some code to be executed
fclose($file);
?>

Check End-of-file
Feof () chc nng kim tra nu "end-of-file (EOF) t c.
Feof () chc nng hu ch cho Looping thng qua cc d liu khng r chiu di.
Lu : Bn khng th c t tp tin m trong w, a, v ch x!

if (feof($file)) echo "End of file";

Reading a File Line by Line


Cc fgets() chc nng c s dng c mt dng t mt tp tin duy nht.
Lu : Sau khi mt cuc gi n chc nng ny, con tr tp tin di chuyn n dng k
tip.
V d
V d di y c mt dng tp tin theo dng, cho n khi t n cui ca tp tin
c:

Page 47 of 413

<?php
$file = fopen("welcome.txt", "r") or exit("Unable to open file!");
//Output a line of the file until the end is reached
while(!feof($file))
{
echo fgets($file). "<br>";
}
fclose($file);
?>

Reading a File Character by Character


Hm fgetc() c s dng c mt k t t mt tp tin duy nht.
Lu : Sau khi mt cuc gi n chc nng ny di chuyn con tr tp tin k t tip theo.
V d
V d di y c mt tp tin k t ca nhn vt, cho n khi t n cui tp tin:
<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
while (!feof($file))
{
echo fgetc($file);
}
fclose($file);
?>

Chapter 19 : File Upload


Vi PHP , n c th cho php bn upload 1 tp tin ln server ( my ch )

Create an Upload-File Form

Page 48 of 413

cho php ngi dng ti ln cc tp tin t mt hnh thc c th rt hu ch.


Nhn vo cc hnh thc HTML cho cc tp tin ti ln sau:
<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>

Ch sau y v dng HTML trn:


-Thuc tnh enctype ca th <form> xc nh loi ni dung s dng khi np mu
n. "multipart / form-data" c s dng khi yu cu d liu nh phn, ging nh ni
dung ca mt tp tin c ti ln mt hnh thc ( ti nhiu file cho nhanh )
-Type = "file" thuc tnh ca th <input> xc nh rng u vo nn c x l nh
mt tp tin. V d, khi xem trong mt trnh duyt, c s l mt nt browse bn cnh lnh
vc u vo
Lu : Cho php ngi dng ti ln cc tp tin l mt nguy c bo mt ln. Ch cho php
ngi dng tin cy thc hin cc tp tin ti ln.

Create The Upload Script


Ni dung file "upload_file.php" s c dng nh th ny

Page 49 of 413

<?php
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
?>

Bng cch s dng PHP global $ _FILES mng bn c th ti ln cc tp tin t mt my


tnh khch hng n my ch t xa.
Tham s u tin l tn ca hnh thc u vo v ch s th hai c th l mt trong hai
"name", "type", "size", "tmp_name" hoc "error". Nh th ny:
$ _FILES ["File"] ["name"] - tn ca cc tp tin ti ln
$ _FILES ["File"] ["type"] - loi tp tin ti ln
$ _FILES ["File"] ["size"] - kch thc trong kilobytes ca cc tp tin ti ln
$ _FILES ["File"] ["tmp_name"] - tn ca bn sao tm thi ca tp tin c lu tr
trn my ch
$ _FILES ["File"] ["error"] - m li t tp tin ti ln
y l mt cch rt n gin cc tp tin ti ln. V l do bo mt, bn nn thm hn ch
v nhng g ngi dng c php ti ln.

Restrictions on Upload
Trong kch bn ny, chng ta thm mt s hn ch cc tp tin ti ln. Ngi s dng
c th ti ln gif, jpeg, v png tp tin v kch thc tp tin phi di 20 kB.:

Page 50 of 413

<?php
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
}
else
{
echo "Invalid file";
}
?>
Lu : i vi IE nhn ra loi tp tin jpg phi l pjpeg, cho FireFox n phi l
jpeg.

Saving the Uploaded File


Cc v d trn to ra mt bn sao tm thi ca cc tp tin ti ln trong th mc temp PHP
trn my ch.
Cc file tm thi sao chp mt i ngay c khi kch bn kt thc. lu tr cc tp tin
c ti ln chng ta cn phi sao chp n vo mt v tr khc nhau:

Page 51 of 413

<?php
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>

Cc kch bn trn kim tra nu tp tin tn ti, nu n khng c, n s sao chp cc tp


tin vo mt th mc gi l "upload".

Page 52 of 413

Chapter 20 : PHP Cookies


Mt cookie thng c s dng xc nh mt ngi s dng.

What is a Cookie?
Mt cookie thng c s dng xc nh mt ngi s dng. Mt cookie l mt file
nh m server nhng vo trn my tnh ca ngi dng. Mi ln cng mt my tnh yu
cu mt trang vi mt trnh duyt, n s gi cookie. Vi PHP, bn c th to ra v ly gi
tr cookie.

How to Create a Cookie?


Hm setcookie() c s dng thit lp mt cookie.
Lu : Hm setcookie() phi c TRC th <html>.
C php
setcookie(name, value, expire, path, domain);
V d 1
Trong v d di y, chng ti s to ra mt cookie c tn l "user" v gn gi tr "Alex
Porter" vi n. Chng ti cng xc nh rng cookie ht hn sau mt gi:
<?php
setcookie("user", "Alex Porter", time()+3600);
?>
<html>
.....
Lu : Gi tr ca cookie c t ng urlencoded khi gi cc tp tin cookie, v t ng
gii m khi nhn ( ngn chn URLencoding, s dng setrawcookie () thay th).
V d 2
Bn cng c th thit lp thi gian ht hn ca cookie theo mt cch khc. N c th
c d dng hn bng cch s dng giy.

Page 53 of 413

<?php
$expire=time()+60*60*24*30;
setcookie("user", "Alex Porter", $expire);
?>
<html>
.....

Trong v d trn c thit lp thi gian ht hn mt thng (60 giy * 60 pht * 24 gi *


30 ngy).

How to Retrieve a Cookie Value?


PHP bin $ _COOKIE c s dng ly mt gi tr cookie.
Trong v d di y, chng ti ly gi tr ca cookie c tn l "ngi s dng" v hin
th n trn mt trang:
<?php
// To 1 Cookie
echo $_COOKIE["user"];
// Cch View Cookie
print_r($_COOKIE);
?>

Trong v d sau, chng ti s dng isset() chc nng tm ra nu mt cookie c


thit lp:

Page 54 of 413

<html>
<body>
<?php
if (isset($_COOKIE["user"]))
echo "Welcome " . $_COOKIE["user"] . "!<br>";
else
echo "Welcome guest!<br>";
?>
</body>
</html>

How to Delete a Cookie?


Khi xa mt cookie, bn nn m bo rng ngy ht hn l trong qu kh.
V d xa Cookie:
<?php
// set the expiration date to one hour ago
setcookie("user", "", time()-3600);
?>

What if a Browser Does NOT Support Cookies?


Nu cc chng trnh khuyn mi p dng vi cc trnh duyt khng h tr cookies, bn
s phi s dng cc phng php khc vt qua thng tin t trang ny sang trang khc
trong ng dng ca bn. Mt phng php l truyn d liu thng qua cc hnh thc
(hnh thc v u vo ngi s dng c m t trc trong hng dn ny).
Mu di y qua cc u vo ngi s dng "welcome.php" khi ngi dng nhp vo
nt "Submit":

Page 55 of 413

<html>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="name">
Age: <input type="text" name="age">
<input type="submit">
</form>
</body>
</html>

Cc gi tr trong tp tin "welcome.php" nh th ny:

<html>
<body>
Welcome <?php echo $_POST["name"]; ?>.<br>
You are <?php echo $_POST["age"]; ?> years old.
</body>
</html>

Chapter 21 : PHP Sessions


Mt bin PHP sessions c s dng lu tr thng tin v, hoc thay i ci t cho
mt phin ngi dng. Bin Session gi thng tin v ngi s dng duy nht, v c sn
cho tt c cc trang trong mt ng dng.

PHP Session Variables


Khi bn ang lm vic vi mt ng dng, bn m n, lm mt s thay i v sau bn
ng n. y l ging nh mt phin ( sessions ). Cc my tnh bit bn l ai. N bit khi
bn bt u ng dng v khi bn kt thc. Tuy nhin, trn internet c mt vn : cc
my ch web khng bit bn l ai v nhng g bn lm v a ch HTTP khng duy tr
trng thi.
Mt PHP session gii quyt vn ny bng cch cho php bn lu tr thng tin ngi

Page 56 of 413

dng trn my ch s dng sau ny (v d nh tn ngi dng, cc mt hng mua sm,


vv). Tuy nhin, thng tin phin l tm thi v s b xa sau khi ngi dng ri khi trang
web. Nu bn cn lu tr vnh vin, bn c th mun lu tr cc d liu trong mt c
s d liu.
Phin lm vic bng cch to ra mt id duy nht (UID) cho mi khch truy cp v cc
bin ca hng da trn UID ny. UID l hoc c lu tr trong mt cookie hoc l
tuyn truyn trong URL.

Starting a PHP Session


Trc khi bn c th lu tr thng tin ngi s dng trong phin ( sessions ) PHP ca
bn, trc tin bn phi bt u sessions.
Lu : Cc chc nng session_start() phi xut hin TRC th <html>:
<?php session_start(); ?>
<html>
<body>
</body>
</html>
on m trn s ng k phin lm vic ca ngi dng vi my ch, cho php bn
bt u thng tin ngi dng tit kim, v gn mt UID cho session ca ngi dng .

Storing a Session Variable


Cch chnh xc lu tr v ly bin phin giao dch l s dng bin $ _SESSION PHP:

Page 57 of 413

<?php
session_start();
// store session data
$_SESSION['views']=1;
?>
<html>
<body>
<?php
//retrieve session data
echo "Pageviews=". $_SESSION['views'];
?>
</body>
</html>
Kt qu cho ra l
Pageviews=1
Trong v d di y, chng ti to ra mt truy cp trang page-views n gin. Cc
isset() chc nng kim tra nu bin "views" c thit lp. Nu "views" c thit
lp, chng ta c th tng truy cp ca chng ti. Nu "views" khng tn ti, chng ti to
ra mt bin "views", v t n vo 1:
<?php
session_start();
if(isset($_SESSION['views']))
$_SESSION['views']=$_SESSION['views']+1;
else
$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>

Destroying a Session
Nu bn mun xa mt s d liu phin ( sessions ), bn c th s dng unset() hoc
session_destroy() .

Page 58 of 413

Unset() chc nng c s dng gii phng bin phin giao dch quy nh:
<?php
session_start();
if(isset($_SESSION['views']))
unset($_SESSION['views']);
?>
Bn cng c th ph hy hon ton cc session bng cch gi session_destroy() chc
nng:
<?php
session_destroy();
?>
Lu : session_destroy () s thit lp li phin lm vic ca bn v bn s mt tt c cc
d liu sessions ca bn c lu tr.

Chapter 22 : Sending Emails


PHP cho php bn gi e-mail trc tip t mt on script.

The PHP mail() Function


PHP mail() chc nng c s dng gi email t bn trong mt kch bn ( Mt Script
).
C php
mail(to,subject,message,headers,parameters)
Parameter
to
subject
message
headers
parameters
Page 59 of 413

Description
Required. Specifies the receiver / receivers of the email
Required. Specifies the subject of the email. Note: This parameter
cannot contain any newline characters
Required. Defines the message to be sent. Each line should be
separated with a LF (\n). Lines should not exceed 70 characters
Optional. Specifies additional headers, like From, Cc, and Bcc. The
additional headers should be separated with a CRLF (\r\n)
Optional. Specifies an additional parameter to the sendmail program

Lu : i vi cc chc nng mail s c sn, PHP i hi mt h thng email c ci


t v hot ng. Chng trnh c s dng c xc nh bi cc thit lp cu hnh
trong file php.ini.

PHP Simple E-Mail


Cch n gin nht gi mt email vi PHP l gi mt email vn bn.
Trong v d di y, chng ti ln u tin khai bo cc bin ($to, $subject, $message,
$from, $headers), sau chng ti s dng cc bin trong hm mail() gi e-mail:
<?php
$to = "someone@example.com";
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "someonelse@example.com";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
echo "Mail Sent.";
?>

PHP Mail Form


With PHP, you can create a feedback-form on your website. The example below sends a
text message to a specified e-mail address:

Page 60 of 413

<html>
<body>
<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
{
//send email
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail("someone@example.com", $subject,
$message, "From:" . $email);
echo "Thank you for using our mail form";
}
else
//if "email" is not filled out, display the form
{
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text'><br>
Subject: <input name='subject' type='text'><br>
Message:<br>
<textarea name='message' rows='15' cols='40'>
</textarea><br>
<input type='submit'>
</form>";
}
?>
</body>
</html>

y l v d trn lm vic nh th no:


Trc tin, hy kim tra nu trng email u vo s c in
Nu n khng c thit lp (nh khi trang l ln u tin truy cp), sn lng di
dng HTML
Nu n c thit lp (sau khi biu mu c in y ), gi email t hnh thc
Khi submit c nhn sau khi biu mu c in y , trang ti li, thy rng cc
u vo email c thit lp, v gi email
Lu : y l cch n gin gi e-mail, nhng n khng phi l an ton. Trong

Page 61 of 413

chng k tip ca hng dn ny, bn c th c thm chi tit v l hng trong kch bn
e-mail, v lm th no xc nhn u vo ngi s dng lm cho n an ton hn.

Chapter 23 : Secure E-mails


C mt im yu trong kch bn e-mail PHP trong chng trc.

PHP E-mail Injections


u tin, hy nhn vo cc m PHP t chng trc:
<html>
<body>
<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
{
//send email
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail("someone@example.com", "Subject: $subject",
$message, "From: $email" );
echo "Thank you for using our mail form";
}
else
//if "email" is not filled out, display the form
{
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text'><br>
Subject: <input name='subject' type='text'><br>
Message:<br>
<textarea name='message' rows='15' cols='40'>
</textarea><br>
<input type='submit'>
</form>";
}
?>
</body>
</html>

Page 62 of 413

Vn vi code trn l ngi s dng tri php c th chn d liu vo cc tiu


mail thng qua hnh thc u vo.
iu g s xy ra nu ngi dng thm cc vn bn sau y n lnh vc nhp a ch
email trong cc hnh thc?
Nh th ny ?
someone@example.com%0ACc:person2@example.com
%0ABcc:person3@example.com,person3@example.com,
anotherperson4@example.com,person5@example.com
%0ABTo:person6@example.com
Hm mail () t cc vn bn trn vo cc tiu th nh bnh thng, v phn u trang
c thm mt Cc:, Bcc:, v: To : field. Khi ngi dng nhp vo nt submit, e-mail s
c gi n tt c cc a ch trn!

PHP Stopping E-mail Injections


Cch tt nht ngn chn khai thc e-mail l xc nhn u vo.
on code di y l ging nh trong chng trc, nhng by gi chng ti thm
mt validator u vo kim tra cc lnh vc th in t trong cc hnh thc:

Page 63 of 413

<html>
<body>
<?php
function spamcheck($field)
{
//filter_var() sanitizes the e-mail
//address using FILTER_SANITIZE_EMAIL
$field=filter_var($field, FILTER_SANITIZE_EMAIL);
//filter_var() validates the e-mail
//address using FILTER_VALIDATE_EMAIL
if(filter_var($field, FILTER_VALIDATE_EMAIL))
{
return TRUE;
}
else
{
return FALSE;
}
}
if (isset($_REQUEST['email']))
{//if "email" is filled out, proceed
//check if the email address is invalid
$mailcheck = spamcheck($_REQUEST['email']);
if ($mailcheck==FALSE)
{
echo "Invalid input";
}
else
{//send email
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail("someone@example.com", "Subject: $subject",
$message, "From: $email" );
echo "Thank you for using our mail form";
}
}
else
{//if "email" is not filled out, display the form
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text'><br>
Subject: <input name='subject' type='text'><br>
Message:<br>
<textarea name='message' rows='15' cols='40'>

Page 64 of 413

</textarea><br>
<input type='submit'>
</form>";
}
?>
</body>
</html>

Trong on m trn, chng ti s dng PHP b lc xc nhn u vo:


Cc b lc FILTER_SANITIZE_EMAIL loi b tt c cc k t bt hp php e-mail
t mt chui
Cc b lc FILTER_VALIDATE_EMAIL xc nhn gi tr nh l mt a ch e-mail
Bn c th c thm v cc b lc trong chng Lc PHP ca chng ti..
http://w3schools.com/php/php_filter.asp

Chapter 24 : Error Handing


Vic x l li mc nh trong PHP rt n gin. Mt thng bo li vi tn tp tin, s
dng v mt tin nhn m t cc li c gi n trnh duyt.

PHP Error Handling


Khi to ra cc kch bn v cc ng dng web, li x l l mt phn quan trng. Nu m
ca bn thiu m kim tra li, chng trnh ca bn c th trng rt khng chuyn nghip
v bn c th c ri ro an ninh.
Hng dn ny c cha mt s li ph bin nht kim tra cc phng php trong PHP.
Chng ti s hin th cc phng php x l cc li khc nhau:
- n gin "die()" bo co
- Tu chnh li v gy nn li
- bo co li

Basic Error Handling: Using the die() function


V d u tin cho thy mt kch bn n gin m mt tp tin vn bn:
Page 65 of 413

<?php
$file=fopen("welcome.txt","r");
?>
Nu tp tin khng tn ti, bn c th nhn c mt li nh th ny:
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\www\test.php on line 2
trnh m ngi dng nhn c mt thng bo li nh trn, chng ti kim tra nu
tp tin tn ti trc khi chng ti c gng truy cp vo n:

<?php
if(!file_exists("welcome.txt"))
{
die("File not found");
}
else
{
$file=fopen("welcome.txt","r");
}
?>
By gi nu cc tp tin khng tn ti, bn nhn c mt li nh th ny:
File not found
on m trn l hiu qu hn hn so vi m trc , bi v n s dng mt c ch x l
li n gin ngn chn kch bn sau khi li.
Tuy nhin, ch cn dng li kch bn khng phi l lun lun ng cch i. Chng ta
hy xem xt thay th PHP chc nng cho cc li x l.

Creating a Custom Error Handler

Page 66 of 413

To mt li x l ty chnh l kh n gin. Chng ti ch n gin l to ra mt chc


nng c bit c th c gi khi li xy ra trong PHP.
Chc nng ny phi c kh nng x l ti thiu l hai tham s (mc li v thng
bo li), nhng c th chp nhn n nm tham s (ty chn tp tin, ng s, v bi
cnh cc li);
C php
error_function(error_level,error_message,
error_file,error_line,error_context)

Parameter
error_level

error_message
error_file
error_line
error_context

Description
Required. Specifies the error report level for the user-defined error.
Must be a value number. See table below for possible error report
levels
Required. Specifies the error message for the user-defined error
Optional. Specifies the filename in which the error occurred
Optional. Specifies the line number in which the error occurred
Optional. Specifies an array containing every variable, and their values,
in use when the error occurred

Error Report levels


Nhng mc bo co li l cc loi khc nhau ca cc li ngi dng nh ngha x l
li c th c s dng cho:
Value Constant
2
E_WARNING
8

E_NOTICE

Page 67 of 413

Description
Non-fatal run-time errors. Execution of the script is
not halted
Run-time notices. The script found something that
might be an error, but could also happen when
running a script normally

256

E_USER_ERROR

Fatal user-generated error. This is like an


E_ERROR set by the programmer using the PHP
function trigger_error()
512 E_USER_WARNING
Non-fatal user-generated warning. This is like an
E_WARNING set by the programmer using the
PHP function trigger_error()
1024 E_USER_NOTICE
User-generated notice. This is like an E_NOTICE
set by the programmer using the PHP function
trigger_error()
4096 E_RECOVERABLE_ERROR Catchable fatal error. This is like an E_ERROR but
can be caught by a user defined handle (see also
set_error_handler())
8191 E_ALL
All errors and warnings (E_STRICT became a part
of E_ALL in PHP 5.4)

By gi cho php to ra mt chc nng x l cc li:

function customError($errno, $errstr)


{
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "Ending Script";
die();
}

on m trn l mt li chc nng x l n gin. Khi n c kch hot, n c mc


li v mt thng bo li. Sau kt qu u ra mc li v thng ip v kt thc
kch bn.
By gi chng ta to ra mt chc nng x l li, chng ti cn phi quyt nh khi n
cn phi c kch hot.

Set Error Handler


X l li mc nh cho PHP l c xy dng trong x l li. Chng ti s thc hin cc
chc nng trn x l li mc nh trong sut thi gian ca kch bn.
N c th thay i x l li p dng ch cho mt s li, nh vy kch bn c th x l
cc li khc nhau theo nhng cch khc nhau. Tuy nhin, trong v d ny, chng ta s s
dng x l li ty chnh ca chng ti cho tt c cc li:

Page 68 of 413

set_error_handler("customError");
T khi chng ti mun c chc nng ty chnh ca chng ti x l tt c cc li,
set_error_handler() ch cn mt tham s, mt tham s th hai c th c thm vo
xc nh mt mc li.
V d
Kim tra x l li bng cch c gng bin u ra khng tn ti:

<?php
//error handler function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr";
}
//set error handler
set_error_handler("customError");
//trigger error
echo($test);
?>
u ra ca cc m trn nn c mt ci g nh th ny:
Error: [8] Undefined variable: test

Trigger an Error
Trong mt kch bn m ngi s dng c th nhp d liu n rt hu ch kch hot cc
li khi mt u vo bt hp php xy ra. Trong PHP, iu ny c thc hin bi cc
chc nng trigger_error().
V d
Trong v d ny, mt li xy ra nu bin "test" ln hn "1":

Page 69 of 413

<?php
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below");
}
?>
u ra ca cc m trn nn c mt ci g nh th ny:
Notice: Value must be 1 or below
in C:\webfolder\test.php on line 6

Mt li c th c kch hot bt c ni no bn mun trong mt kch bn, v bng cch


thm vo mt tham s th hai, bn c th xc nh mc li c kch hot.
Loi li c th xy ra:
E_USER_ERROR - Fatal thi gian chy li do ngi dng to ra. Li m khng th
c phc hi t. Thc thi kch bn phi dng li
E_USER_WARNING - Khng gy h cnh bo ngi dng to ra thi gian chy.
Thc thi kch bn khng dng li
E_USER_NOTICE - Default. Ngi s dng to thng bo thi gian chy. Cc kch
bn tm thy mt ci g c th l mt li, nhng cng c th xy ra khi chy mt kch
bn bnh thng
V d
Trong v d ny E_USER_WARNING xy ra nu bin "test" ln hn "1". Nu
E_USER_WARNING xy ra, chng ta s s dng ty chnh x l li ca chng ti v
kt thc kch bn:

Page 70 of 413

<?php
//error handler function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "Ending Script";
die();
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

u ra ca cc m trn nn c mt ci g nh th ny:
Error: [512] Value must be 1 or below
Ending Script
By gi chng ta hc c cch to ra cc li ca chng ta v lm th no kch
hot chng, cho php c mt ci nhn li ng nhp.

Error Logging
Theo mc nh, PHP s gi mt bn ghi li h thng ng nhp ca my ch hoc mt
tp tin, ty thuc vo cch cu hnh error_log c thit lp trong file php.ini. Bng cch
s dng cc error_log() chc nng bn c th gi cc bn ghi li vo mt tp tin c ch
nh hoc mt im n t xa.
Gi thng bo li cho chnh mnh bng e-mail c th l mt cch tt nhn c thng
bo li c th.

Send an Error Message by E-Mail


Trong v d di y, chng ti s gi mt e-mail vi mt thng bo li v kt thc kch
bn, nu mt li c th xy ra:

Page 71 of 413

<?php
//error handler function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "Webmaster has been notified";
error_log("Error: [$errno] $errstr",1,
"someone@example.com","From: webmaster@example.com");
}
//set error handler
set_error_handler("customError",E_USER_WARNING);
//trigger error
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

u ra ca cc m trn nn c mt ci g nh th ny:
Error: [512] Value must be 1 or below
Webmaster has been notified

V cc th nhn c t cc m trn trng nh th ny:


Error: [512] Value must be 1 or below
iu ny khng nn c s dng vi tt c cc li. Cc li thng xuyn nn c ng
nhp trn my ch bng cch s dng h thng mc nh khai thc g PHP.

Chapter 25 : Exception Handing


Trng hp ngoi l ( Exception ) c s dng thay i dng chy bnh thng ca
mt kch bn nu mt li c xc nh xy ra.

What is an Exception
Page 72 of 413

Vi PHP 5, n mt i tng mi theo nh hng cch i ph vi cc li.


X l ngoi l c s dng thay i dng chy bnh thng ca vic thc thi m nu
mt li c ch nh (c bit) iu kin xy ra. Tnh trng ny c gi l mt ngoi l.
y l nhng g thng xy ra khi mt ngoi l c kch hot:
- M hin ti ca nh nc c lu
- Vic thc thi m s chuyn sang mt chc nng c xc nh trc (ty chnh) x l
ngoi l
- Ty theo tnh hnh, x l sau c th tip tc thc hin t trng thi m lu, chm
dt thc hin kch bn hoc tip tc kch bn t mt v tr khc nhau trong cc m
Chng ti s hin th cc phng php x l cc li khc nhau:
-S dng c bn ca ngoi l
-To mt x l ngoi l ty
chnh nhiu trng hp ngoi l
-Li nm mt ngoi l
-Thit lp mt x l ngoi l u
Lu : Trng hp ngoi l ch nn c s dng vi iu kin li, v khng nn c
s dng chuyn n mt ni khc trong cc m ti mt thi im xc nh.

Basic Use of Exceptions


Khi mt ngoi l c nm ra, cc m sau n s khng c thc hin, v PHP s c
gng tm thy nhng "catch" ph hp vi khi.
Nu mt ngoi l khng b bt, mt li nghim trng s c pht hnh vi mt thng
bo "uncaught ngoi l".
Cho php th nm mt ngoi l m khng nh bt n:

Page 73 of 413

<?php
//create function with an exception
function checkNum($number)
{
if($number>1)
{
throw new Exception("Value must be 1 or below");
}
return true;
}
//trigger exception
checkNum(2);
?>

on m trn s nhn c mt li nh th ny:


Fatal error: Uncaught exception 'Exception'
with message 'Value must be 1 or below' in C:\webfolder\test.php:6
Stack trace: #0 C:\webfolder\test.php(12):
checkNum(28) #1 {main} thrown in C:\webfolder\test.php on line 6

Try, throw and catch


trnh li ny t v d trn, chng ta cn to ra cc m thch hp x l mt
trng hp ngoi l.
Thch hp ngoi l m nn bao gm:
1.C gng - Mt chc nng bng cch s dng mt ngoi l phi trong mt khi
"th". Nu trng hp ngoi l khng kch hot, m s tip tc nh bnh thng. Tuy
nhin, nu trng hp ngoi l kch hot, mt ngoi l l "nm"
2.Throw - y l cch bn kch hot mt ngoi l. Mi "nm" phi c t nht mt
"catch"
3.Catch - Mt khi "bt" ly mt ngoi l v to ra mt i tng c cha cc thng

Page 74 of 413

tin ngoi l

<?php
//create function with an exception
function checkNum($number)
{
if($number>1)
{
throw new Exception("Value must be 1 or below");
}
return true;
}
//trigger exception in a "try" block
try
{
checkNum(2);
//If the exception is thrown, this text will not be shown
echo 'If you see this, the number is 1 or below';
}
//catch exception
catch(Exception $e)
{
echo 'Message: ' .$e->getMessage();
}
?>
on m trn s nhn c mt li nh th ny:
Message: Value must be 1 or below

Example explained:
on m trn nm mt ngoi l v bt n:
1.Cc checkNum() chc nng c to ra. N kim tra nu mt s l s ln hn 1. Nu
Page 75 of 413

c, mt ngoi l c nm
2.Cc checkNum() chc nng c gi trong mt khi "th"
3.Ngoi tr trong phm vi chc nng checkNum () c nm
4.Block "bt" retrives cc trng hp ngoi l v to ra mt i tng ($e) c cha cc
thng tin ngoi l
5.Cc thng bo li t trng hp ngoi l c lp li bng cch gi $e->
getMessage() t i tng ngoi l
Tuy nhin, mt trong nhng cch c c xung quanh "nm mi phi c mt nm bt"
nguyn tc l thit lp mt mc ngoi l x l hng u x l cc li phiu
thng qua.

Creating a Custom Exception Class


To mt x l ngoi l ty chnh l kh n gin. Chng ti ch n gin l to ra mt
lp hc c bit vi chc nng c th c gi khi mt ngoi l xy ra trong PHP. Cc
lp hc phi l mt phn m rng ca lp ngoi l.
Cc lp ngoi l ty chnh c tha hng ti sn t lp ngoi l ca PHP v bn c th
thm cc chc nng ty chnh cho n.
Cho php to ra mt lp ngoi l:
<?php
class customException extends
Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this>getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is
not a valid E-Mail address';
return $errorMsg;
}
}
$email = "someone@example...com";
try
{
//check if
if(filter_var($email,
FILTER_VALIDATE_EMAIL) ===
FALSE)
Page 76 of 413

{
//throw exception if email is not
valid
throw new
customException($email);
}
}
catch (customException $e)
{
//display custom message
echo $e->errorMessage();
}
?>
Cc lp hc mi l mt bn sao ca lp ngoi l c vi mt s b sung chc nng
ErrorMessage(). V n l mt bn sao ca lp c, v n c tha hng cc thuc tnh
v phng php t lp c, chng ta c th s dng cc phng thc lp ngoi l nh
getline() v getFile() v getMessage().

Example explained:
on m trn nm mt ngoi l v bt n vi mt lp ngoi l ty chnh:
1.Lp customException() c to ra nh l mt phn m rng ca lp ngoi l c.
Bng cch ny, n c tha hng tt c cc phng php v cc thuc tnh t lp
ngoi l c
2.Chc nng ErrorMessage() c to ra. Hm ny tr v mt thng bo li nu mt
a ch e-mail khng hp l
3.Bin $email c thit lp mt chui khng phi l mt a ch e-mail hp l
4."Th" khi c thc hin v ngoi l c nm t a ch e-mail khng hp l
5.Khi "catch" bt nhng trng hp ngoi l v hin th cc thng bo li

Multiple Exceptions
N c th cho mt kch bn s dng nhiu trng hp ngoi l kim tra nhiu iu
kin.
C th s dng mt s nu .. khc khi, mt chuyn i, hoc nhiu trng hp ngoi l
lm t. Nhng trng hp ngoi l ny c th s dng cc lp hc ngoi l khc nhau v
tr li thng bo li khc nhau:

Page 77 of 413

<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "someone@example.com";
try
{
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
{
//throw exception if email is not valid
throw new customException($email);
}
//check for "example" in mail address
if(strpos($email, "example") !== FALSE)
{
throw new Exception("$email is an example e-mail");
}
}
catch (customException $e)
{
echo $e->errorMessage();
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>

Example explained:

Page 78 of 413

on m trn kim tra hai iu kin v nm mt ngoi l nu c cc iu kin khng


c p ng:
1. Lp customException () c to ra nh l mt phn m rng ca lp ngoi l c.
Bng cch ny, n c tha hng tt c cc phng php v cc thuc tnh t lp
ngoi l c
2. Chc nng ErrorMessage () c to ra. Hm ny tr v mt thng bo li nu mt
a ch e-mail khng hp l
3. Bin $ email c thit lp mt chui l mt a ch e-mail hp l, nhng c
cha chui "v d"
4. "Th" khi c thc hin v mt ngoi l c nm vo iu kin u tin
5. iu kin th hai gy ra mt ngoi l k t khi e-mail c cha chui "v d"
6. Khi "catch" bt nhng trng hp ngoi l v hin th cc thng bo li chnh xc
Nu nm ngoi l ca customException lp v khng c bt customException, ch c
ngoi l c s nh bt, mt ngoi l s c x l .

Re-throwing Exceptions
i khi, khi mt ngoi l c nm ra, bn c th mun x l n khc vi cch tiu
chun. N c th nm mt ngoi l ln th hai trong vng mt khi "catch".
Mt kch bn nn che giu li h thng t ngi dng. Li h thng c th quan trng i
vi cc coder, nhng khng c ngi dng quan tm. lm cho mi vic d dng hn
cho ngi s dng, bn c th nm li ngoi l vi mt thng ip thn thin vi ngi
s dng:

Page 79 of 413

<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = $this->getMessage().' is not a valid E-Mail address.';
return $errorMsg;
}
}
$email = "someone@example.com";
try
{
try
{
//check for "example" in mail address
if(strpos($email, "example") !== FALSE)
{
//throw exception if email is not valid
throw new Exception($email);
}
}
catch(Exception $e)
{
//re-throw exception
throw new customException($email);
}
}
catch (customException $e)
{
//display custom message
echo $e->errorMessage();
}
?>

Example explained:
on m trn bi kim tra nu a ch email c cha chui "v d" trong , nu c, cc
trng hp ngoi l c li nm:

Page 80 of 413

1.Lp customException() c to ra nh l mt phn m rng ca lp ngoi l c.


Bng cch ny, n c tha hng tt c cc phng php v cc thuc tnh t lp
ngoi l c
2.Chc nng ErrorMessage() c to ra. Hm ny tr v mt thng bo li nu mt
a ch e-mail khng hp l
3.Bin $email c thit lp mt chui l mt a ch e-mail hp l, nhng c
cha chui "v d"
4."Th" khi cha mt "th" khi lm cho n c th nm ngoi l
5.Ngoi l ny c kch hot k t khi e-mail c cha chui "v d"
6.Khi "catch" bt ngoi l v li nm mt "customException"
7.B bt "customException" v hin th mt thng bo li
Nu trng hp ngoi l khng c nh bt trong khi hin ti ca n "th", n s tm
kim mt khi catch "cp cao hn".

Set a Top Level Exception Handler


set_exception_handler() chc nng thit lp mt chc nng ngi dng nh ngha x
l tt c cc trng hp ngoi l uncaught.
<?php
function myException($exception)
{
echo "<b>Exception:</b> " , $exception->getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occurred');
?>
u ra ca cc m trn nn c mt ci g nh th ny:
Exception: Uncaught Exception occurred
Trong on m trn khng c block "catch". Thay vo , x l ngoi l cp cao nht
kch hot. Chc nng ny nn c s dng bt ngoi l uncaught.

Quy tc cho trng hp ngoi l


M c th c bao bc trong mt khi th, gip bt ngoi l tim nng
Mi khi try hoc "nm" phi c t nht mt khi catch tng ng
Nhiu khi catch c th c s dng bt cc lp hc khc nhau ca cc trng hp

Page 81 of 413

ngoi l
Trng hp ngoi l c th c nm (hoc ti nm) trong mt khi catch trong mt
khi try
Mt nguyn tc n gin: Nu bn nm mt ci g , bn phi nm bt n.

Chapter 26 : PHP Filter


PHP b lc c s dng xc nhn v lc d liu n t cc ngun khng an ton,
ging nh u vo ngi s dng.

What is a PHP Filter?


Mt b lc PHP c s dng xc nhn v lc d liu n t cc ngun khng an
ton.
kim tra, xc nhn v lc u vo ngi dng hoc d liu ty chnh l mt phn
quan trng ca bt k ng dng web.
Phn m rng PHP b lc c thit k lc d liu d dng hn v nhanh hn.

Why use a Filter?


Hu nh tt c cc ng dng web ph thuc vo u vo bn ngoi. Thng thng, iu
ny xut pht t mt ngi dng hoc mt ng dng khc (nh mt dch v web). Bng
cch s dng b lc, bn c th chc chn rng ng dng ca bn c cc loi u vo
chnh xc.
Bn nn lun lun lc tt c d liu bn ngoi!
u vo lc l mt trong nhng vn bo mt ng dng quan trng nht.
D liu bn ngoi l g?
-D liu u vo t biu mu
-Cookies
-Web dch v d liu
-my ch cc bin
-C s d liu kt qu truy vn

Functions and Filters

Page 82 of 413

lc mt bin, s dng mt trong cc chc nng lc sau y:


-filter_var() - B lc mt bin duy nht vi mt b lc xc nh
-filter_var_array() - B lc mt s bin vi cc b lc ging v khc nhau
-filter_input - mt bin u vo v lc n
-filter_input_array - Nhn mt s bin u vo v lc chng vi cc b lc ging v
khc nhau
Trong v d di y, chng ti xc nhn mt s nguyn bng cch s dng chc nng
filter_var():
<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
?>

Chapter 27 : PHP MySQL


C s d liu MySQL min ph l rt thng c s dng vi PHP.

To mt kt ni n mt c s d liu MySQL
Trc khi bn c th truy cp d liu trong mt c s d liu, bn phi to ra mt kt ni n
c s d liu.
Trong PHP, iu ny c thc hin vi cc chc nng mysql_connect ().

C php
mysql_connect(servername,username,password);
Thng s

M t

servername

Ty chn. Ch nh my ch kt ni vi. Gi tr mc nh l "localhost: 3306"

Tn truy nhp

Ty chn. Ch nh tn ngi dng ng nhp vi. Gi tr mc nh l tn ca ngi s dn


s hu qu trnh my ch

Page 83 of 413

mt khu

Ty chn. Ch nh mt khu ng nhp. Mc nh l ""

Lu : C thm nhiu thng s c sn, nhng nhng ngi c lit k trn l quan trng
nht. y ca chng ti PHP MySQL tham kho bit thm chi tit.

V d
Trong v d sau chng ti lu tr cc kt ni trong mt bin ($ con) cho s dng sau ny
trong kch bn. "Cht" mt phn s c thc hin nu kt ni khng thnh cng:

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// some code
?>

Kt thc mt kt ni
Kt ni s c t ng ng khi kch bn kt thc. ng kt ni trc khi s dng
mysql_close () chc nng:

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// some code
mysql_close($con);
?>

Mt c s d liu cha mt hoc nhiu bng.

To mt c s d liu
Cu lnh CREATE DATABASE c s dng to ra mt c s d liu trong MySQL.

C php
CREATE DATABASE database_name
tm hiu thm v SQL, vui lng truy cp ca chng ti hng dn SQL .

Page 84 of 413

c c PHP thc hin cc tuyn b trn, chng ta phi s dng hm mysql_query


(). Chc nng ny c s dng gi mt truy vn hoc lnh kt ni MySQL.

V d
V d sau y to ra mt c s d liu gi l "my_db":

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
if (mysql_query("CREATE DATABASE my_db",$con))
{
echo "Database created";
}
else
{
echo "Error creating database: " . mysql_error();
}
mysql_close($con);
?>

To mt bng
Cu lnh CREATE TABLE c s dng to ra mt bng trong MySQL.

C php
CREATE TABLE
(
column_name1
column_name2
column_name3
....
)

table_name
data_type,
data_type,
data_type,

tm hiu thm v SQL, vui lng truy cp ca chng ti hng dn SQL .


Chng ta phi thm cc tuyn b CREATE TABLE mysql_query () chc nng thc hin
lnh.

V d
V d sau y to ra mt bng c tn l "Ngi", vi ba ct. Cc tn ct s c "FirstName",
"LastName" v "Age":

Page 85 of 413

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// Create database
if (mysql_query("CREATE DATABASE my_db",$con))
{
echo "Database created";
}
else
{
echo "Error creating database: " . mysql_error();
}
// Create table
mysql_select_db("my_db", $con);
$sql = "CREATE TABLE Persons
(
FirstName varchar(15),
LastName varchar(15),
Age int
)";
// Execute query
mysql_query($sql,$con);
mysql_close($con);
?>
Quan trng: Mt c s d liu phi c la chn trc khi mt bng c th c to ra. C
s d liu c chn vi mysql_select_db () chc nng.
Lu : Khi bn to ra mt lnh vc c s d liu kiu varchar, bn phi xc nh di ti a
ca lnh vc ny, v d nh varchar (15).
Cc kiu d liu xc nh kiu d liu ct c th gi. i vi mt ti liu tham kho y ca
tt c cc loi d liu c sn trong MySQL, chng ti hon thnh ti liu tham kho kiu d
liu .

Kha chnh v cc lnh vc Tng Auto


Mi bng cn phi c mt trng tiu hc trng im.
Mt kha chnh c s dng xc nh cc hng trong mt bng. Mi gi tr kha chnh
phi l duy nht trong bng. Hn na, cc trng tiu hc trng im khng c th l v gi
tr v cc cng c c s d liu i hi phi c mt gi tr xc nh v tr cc bn ghi.
V d sau y thit lp cc lnh vc PersonId nh cc lnh vc kha chnh. Cc lnh vc trng
im chnh thng l mt s ID, v thng c s dng vi cc thit lp

Page 86 of 413

AUTO_INCREMENT. AUTO_INCREMENT t ng lm tng gi tr ca trng 1 mi ln mt k


lc mi c thm vo. m bo rng cc trng tiu hc trng im khng th null,
chng ta phi thm cc thit lp NOT NULL cho lnh vc ny.

V d
$sql = "CREATE TABLE Persons
(
personID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(personID),
FirstName varchar(15),
LastName varchar(15),
Age int
)";
mysql_query($sql,$con);

Chn d liu vo mt bng c s d liu


INSERT INTO tuyn b c s dng thm cc bn ghi mi vo mt bng c s d liu.

C php
C th vit INSERT INTO tuyn b trong hai hnh thc.
Cc hnh thc u tin khng xc nh cc ct d liu s c chn vo, ch c gi tr ca h:

INSERT INTO table_name


VALUES (value1, value2, value3,...)
Hnh thc th hai quy nh c th c cc tn ct v cc gi tr s c chn vo:

INSERT INTO table_name (column1, column2, column3,...)


VALUES (value1, value2, value3,...)
tm hiu thm v SQL, vui lng truy cp ca chng ti hng dn SQL .
c c PHP thc hin bo co trn, chng ta phi s dng hm mysql_query (). Chc
nng ny c s dng gi mt truy vn hoc lnh kt ni MySQL.

V d
Trong chng trc, chng ta to ra mt bng c tn l "Ngi", vi ba ct "FirstName",
"LastName" v "Age".Chng ti s s dng cng mt bng trong v d ny. V d sau y cho
bit thm hai k lc mi vo bng "Persons":

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)

Page 87 of 413

{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
mysql_query("INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('Peter', 'Griffin',35)");
mysql_query("INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('Glenn', 'Quagmire',33)");
mysql_close($con);
?>

Chn d liu t form vo c s d liu


By gi chng ta s to ra mt hnh thc HTML c th c s dng thm cc h s mi
bng "Ngi".
y l hnh thc HTML:

<html>
<body>
<form action="insert.php" method="post">
Firstname: <input type="text" name="firstname">
Lastname: <input type="text" name="lastname">
Age: <input type="text" name="age">
<input type="submit">
</form>
</body>
</html>
Khi ngi dng nhp chut vo nt gi dng HTML trong v d trn, cc d liu mu c
gi "insert.php".
Cc tp tin "insert.php" kt ni vi mt c s d liu, v ly cc gi tr t hnh thc vi cc
bin PHP _POST.
Sau , mysql_query () chc nng thc hin cc INSERT INTO tuyn b, v mt k lc mi s
c thm vo bng "Ngi".
y l trang "insert.php":

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());

Page 88 of 413

}
mysql_select_db("my_db", $con);
$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[age]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con);
?>

Chn d liu t mt bng c s d liu


Cu lnh SELECT c s dng chn d liu t mt c s d liu.

C php
SELECT column_name(s)
FROM table_name
tm hiu thm v SQL, vui lng truy cp ca chng ti hng dn SQL .
c c PHP thc hin cc tuyn b trn, chng ta phi s dng hm mysql_query
(). Chc nng ny c s dng gi mt truy vn hoc lnh kt ni MySQL.

V d
V d sau y chn tt c cc d liu c lu tr trong bng "Ngi" (k t * chn tt c cc
d liu trong bng):

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons");
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br />";
}

Page 89 of 413

mysql_close($con);
?>
V d trn ca hng d liu tr v bi hm mysql_query () trong bin $ kt qu.
Tip theo, chng ti s dng mysql_fetch_array () chc nng tr li hng u tin t
recordset nh l mt mng. Mi cuc gi n mysql_fetch_array () tr li hng k tip trong
recordset. Cc vng lp trong khi vng qua tt c cc bn ghi trong recordset. in gi tr ca
mi hng, chng ti s dng bin $ row PHP ($ row ['FirstName'] v $ row ['LastName']).
u ra ca cc m trn s l:

Peter Griffin
Glenn Quagmire

Hin th cc kt qu trong mt bng HTML


V d sau y chn cc d liu tng t nh v d trn, nhng s hin th d liu trong mt
bng HTML:

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons");
echo "<table border='1'>
<tr>
<th>Firstname</th>
<th>Lastname</th>
</tr>";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['FirstName'] . "</td>";
echo "<td>" . $row['LastName'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($con);
?>
u ra ca cc m trn s l:

Page 90 of 413

FirstName

Lastname

Glenn

Bai ly

Peter

Tin mach ming

Mnh WHERE
Mnh WHERE c s dng trch xut ch nhng h s m thc hin mt tiu chun quy
nh.

C php
SELECT column_name(s)
FROM table_name
WHERE column_name operator value
tm hiu thm v SQL, vui lng truy cp ca chng ti hng dn SQL .
c c PHP thc hin cc tuyn b trn, chng ta phi s dng hm mysql_query
(). Chc nng ny c s dng gi mt truy vn hoc lnh kt ni MySQL.

V d
V d sau y chn tt c cc hng t bng "Ngi" "FirstName = 'Peter'":

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons
WHERE FirstName='Peter'");
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br>";
}
?>
u ra ca cc m trn s l:

Peter Griffin

ORDER BY T kha
ORDER BY t kha c s dng sp xp d liu trong mt recordset.

Page 91 of 413

ORDER BY loi t kha cc bn ghi trong th t tng dn theo mc nh.


Nu bn mun sp xp cc bn ghi trong mt th t gim dn, bn c th s dng cc t
kho DESC.

C php
SELECT column_name(s)
FROM table_name
ORDER BY column_name(s) ASC|DESC
tm hiu thm v SQL, vui lng truy cp ca chng ti hng dn SQL .

V d
V d sau y chn tt c cc d liu c lu tr trong bng "Ngi", v sp xp kt qu
theo ct "Age":

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons ORDER BY age");
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'];
echo " " . $row['LastName'];
echo " " . $row['Age'];
echo "<br>";
}
mysql_close($con);
?>
u ra ca cc m trn s l:

Glenn Quagmire 33
Peter Griffin 35

Sp xp theo hai ct
N cng c th t do nhiu hn mt ct. Khi t hng theo nhiu hn mt ct, ct th hai
ch c s dng nu cc gi tr trong ct u tin l bng nhau:

Page 92 of 413

SELECT column_name(s)
FROM table_name
ORDER BY column1, column2

Cp nht d liu trong mt c s d liu


Cu lnh UPDATE c s dng cp nht cc bn ghi hin c trong mt bng.

C php
UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value
Lu : Ch mnh WHERE trong c php UPDATE. Mnh WHERE quy nh c th h s
hoc h s cn c cp nht. Nu bn b qua mnh WHERE, tt c h s s c cp
nht!
tm hiu thm v SQL, vui lng truy cp ca chng ti hng dn SQL .
c c PHP thc hin cc tuyn b trn, chng ta phi s dng hm mysql_query
(). Chc nng ny c s dng gi mt truy vn hoc lnh kt ni MySQL.

V d
Trc , trong hng dn, chng ti to ra mt bng c tn l "Ngi". y l n trng nh
th no:
FirstName

LastName

Tui

Peter

Tin mach ming

35

Glenn

Bai ly

33

V d cp nht sau y mt s d liu trong bng "Persons":

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
mysql_query("UPDATE Persons SET Age=36
WHERE FirstName='Peter' AND LastName='Griffin'");
mysql_close($con);
?>
Sau khi cp nht, bng "Ngi" s nh th ny:

Page 93 of 413

FirstName

LastName

Tui

Peter

Tin mach ming

36

Glenn

Bai ly

33

Xa d liu trong c s d liu


DELETE FROM tuyn b c s dng xa cc bn ghi t mt bng c s d liu.

C php
DELETE FROM table_name
WHERE some_column = some_value
Lu : Ch mnh WHERE trong c php DELETE. Mnh WHERE quy nh c th h s
hoc h s c cn xa. Nu bn b qua mnh WHERE, tt c h s s b xa!
tm hiu thm v SQL, vui lng truy cp ca chng ti hng dn SQL .
c c PHP thc hin cc tuyn b trn, chng ta phi s dng hm mysql_query
(). Chc nng ny c s dng gi mt truy vn hoc lnh kt ni MySQL.

V d
Nhn vo bng sau "Ngi":
FirstName

LastName

Tui

Peter

Tin mach ming

35

Glenn

Bai ly

33

Cc v d sau y xa tt c cc bn ghi trong bng "Persons" LastName = 'Griffin:

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
mysql_query("DELETE FROM Persons WHERE LastName='Griffin'");
mysql_close($con);
?>
Sau khi xa, bng s nh th ny:

Page 94 of 413

FirstName

LastName

Tui

Glenn

Bai ly

33

To mt kt ni ODBC
Vi mt kt ni ODBC, bn c th kt ni vo c s d liu no, trn bt k my tnh no
trong mng ca bn, min l c mt kt ni ODBC.
y l cch to ra mt kt ni ODBC mt c s d liu MS Access:
1.
2.
3.
4.
5.
6.
7.
8.

M biu tng Administrative Tools trong Control Panel ca bn.


Double-click vo Data Sources (ODBC) biu tng bn trong.
Chn tab System DSN .
Nhp vo Thm trong tab System DSN.
Chn Microsoft Access Driver . Nhp vo Finish.
Trong mn hnh k tip, nhp vo Chn xc nh v tr cc c s d liu.
Cung cp cho cc c s d liu Data Source Name (DSN) .
Nhp vo OK .

Lu rng cu hnh ny c thc hin trn my tnh, ni trang web ca bn nm. Nu bn


ang chy Internet Information Server (IIS) trn my tnh ca ring ca bn, hng dn
trn s lm vic, nhng nu trang web ca bn nm trn mt my ch t xa, bn phi c
quyn truy cp vt l vo my ch , hoc yu cu my ch web ca bn n thit lp
mt DSN cho bn s dng.

Kt ni n mt ODBC
Odbc_connect () c s dng kt ni vi mt ngun d liu ODBC. Chc nng c bn
thng s: ngun d liu tn, tn ngi dng, mt khu, v con tr mt kiu ty chn.
Odbc_exec () chc nng c s dng thc thi mt cu lnh SQL.

V d
V d sau y to ra mt kt ni n mt DSN gi l northwind, khng c tn ngi dng v
mt khu khng. Sau to ra mt cu lnh SQL v thc hin n:

$conn=odbc_connect('northwind','','');
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);

Ly h s
Chc nng odbc_fetch_row () c s dng tr li h s t tp kt qu. Chc nng ny tr
v true nu n c th tr li hng, nu khng sai.

Page 95 of 413

Chc nng ny c hai tham s: nh danh kt qu ODBC v hng mt s ty chn:

odbc_fetch_row($rs)

Ly Fields t mc k lc
Chc nng odbc_result () c s dng c cc lnh vc t mc k lc. Chc nng ny c
hai tham s: nh danh kt qu ODBC v mt s tn trng.
Cc dng m di y tr v gi tr ca lnh vc u tin t cc h s:

$compname=odbc_result($rs,1);
Cc dng m di y tr v gi tr ca mt lnh vc c gi l "CompanyName":

$compname=odbc_result($rs,"CompanyName");

ng mt kt ni ODBC
Chc nng odbc_close () c s dng ng mt kt ni ODBC.

odbc_close($conn);

V d ODBC
V d sau y cho thy lm th no ln u tin to ra mt kt ni c s d liu, sau
thit lp mt kt qu, v sau hin th cc d liu trong mt bng HTML.

<html>
<body>
<?php
$conn=odbc_connect('northwind','','');
if (!$conn)
{exit("Connection Failed: " . $conn);}
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);
if (!$rs)
{exit("Error in SQL");}
echo "<table><tr>";
echo "<th>Companyname</th>";
echo "<th>Contactname</th></tr>";
while (odbc_fetch_row($rs))
{
$compname=odbc_result($rs,"CompanyName");

Page 96 of 413

$conname=odbc_result($rs,"ContactName");
echo "<tr><td>$compname</td>";
echo "<td>$conname</td></tr>";
}
odbc_close($conn);
echo "</table>";
?>
</body>
</html>

Chapter 28 : PHP XML Expat


Parser
Phn tch c php nc ngoi c xy dng trong lm cho n c th x l
cc ti liu XML trong PHP.

XML l g?
XML c s dng m t d liu v tp trung vo d liu l g. Mt tp tin XML m t cu
trc ca d liu.
Trong XML, khng c th c nh ngha trc. Bn phi xc nh cc th ring ca mnh.
Nu bn mun tm hiu thm v XML, vui lng truy cp ca chng ti hng dn XML .

Ngi nc ngoi l g?
c v cp nht - to ra v thao tc mt ti liu XML, bn s cn mt phn tch c php XML.
C hai loi c bn ca phn tch c php XML:

Da trn cy phn tch c php: phn tch c php ny bin i mt ti liu XML vo
mt cu trc cy. N phn tch ton b ti liu, v cung cp truy cp n cc yu t
cy. v d nh Document Object Model (DOM)
Phn tch c php da trn s kin: Xem mt ti liu XML nh l mt lot cc s
kin. Khi mt s kin c th xy ra, n gi mt chc nng x l n

Cc phn tch c php nc ngoi l mt b phn tch da trn s kin.

Page 97 of 413

Da trn s kin phn tch c php tp trung vo ni dung ca cc ti liu XML, cu trc ca
chng. Bi v iu ny, phn tch c php da trn s kin c th truy cp d liu nhanh hn
so vi cc phn tch c php da trn cy.
Nhn vo cc phn XML sau y:

<from>Jani</from>
Mt phn tch c php da trn s kin bo co XML trn l mt lot cc ba s kin:

Yu t: t
Bt u CDATA phn gi tr: Jani
ng yu t: t

V d XML trn cha tt c hnh thnh XML. Tuy nhin, v d ny l khng hp l XML, v
khng c nh ngha kiu ti liu (DTD) lin kt vi n.
Tuy nhin, iu ny lm cho khng c s khc bit khi s dng cc phn tch c php nc
ngoi. Ngi nc ngoi l mt phn tch c php khng kim duyt, v b qua bt k cc
DTD.
L mt s kin, khng kim duyt phn tch c php XML, Ngi nc ngoi l nhanh chng
v nh, v mt trn u hon ho cho cc ng dng web PHP.
Lu : cc ti liu XML phi c hnh thnh hoc nc ngoi s to ra mt li.

Ci t
Cc chc nng phn tch c php XML Expat l mt phn ca li PHP. Khng c ci t cn
thit s dng cc chc nng ny.

Mt file XML
Cc tp tin XML di y s c s dng trong v d ca chng ti:

<?xml version="1.0" encoding="ISO-8859-1"?>


<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

Khi to phn tch c php XML


Page 98 of 413

Chng ti mun khi to phn tch c php XML trong PHP, xc nh mt s x l cho cc
s kin khc nhau XML, v sau phn tch cc tp tin XML.

V d
<?php
//Initialize the XML parser
$parser=xml_parser_create();
//Function to use at the start of an element
function start($parser,$element_name,$element_attrs)
{
switch($element_name)
{
case "NOTE":
echo "-- Note --<br>";
break;
case "TO":
echo "To: ";
break;
case "FROM":
echo "From: ";
break;
case "HEADING":
echo "Heading: ";
break;
case "BODY":
echo "Message: ";
}
}
//Function to use at the end of an element
function stop($parser,$element_name)
{
echo "<br>";
}
//Function to use when finding character data
function char($parser,$data)
{
echo $data;
}
//Specify element handler
xml_set_element_handler($parser,"start","stop");
//Specify data handler
xml_set_character_data_handler($parser,"char");
//Open XML file
$fp=fopen("test.xml","r");
//Read data
while ($data=fread($fp,4096))
{
xml_parse($parser,$data,feof($fp)) or
die (sprintf("XML Error: %s at line %d",

Page 99 of 413

xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
//Free the XML parser
xml_parser_free($parser);
?>
u ra ca cc m trn s l:

-- Note -To: Tove


From: Jani
Heading: Reminder
Message: Don't forget me this weekend!
Lm th no n hot ng:
1. Khi to phn tch c php XML vi xml_parser_create () chc nng
2. To cc chc nng s dng vi cc x l s kin khc nhau
3. Thm xml_set_element_handler () chc nng xc nh c chc nng s c thc
hin khi phn tch c php gp cc th m v ng
4. Thm xml_set_character_data_handler () chc nng xc nh cc chc nng s
thc hin khi phn tch c php gp d liu k t
5. Phn tch cc tp tin "test.xml" vi xml_parse () chc nng
6. Trong trng hp c li, thm xml_error_string () chc nng chuyn i mt li
XML vi mt m t vn bn
7. Gi xml_parser_free () chc nng gii phng b nh c cp pht bng
xml_parser_create () chc nng

Thm nc ngoi PHP Parser


bit thm thng tin v cc chc nng nc ngoi PHP, hy truy cp ca chng ti tham
kho PHP Parser XML.

Vic xy dng trong DOM phn tch c php lm cho n c th x l cc ti


liu XML trong PHP.

DOM l g?
W3C DOM cung cp mt b tiu chun ca cc i tng cho ti liu HTML v XML, v mt
giao din tiu chun cho vic truy cp v thao tc chng. W3C DOM c chia thnh cc phn
khc nhau (Core, XML, HTML) v cc mc khc nhau (DOM Level 1/2 / 3): * Core DOM nh ngha mt tp hp cc i tng cho bt k ti liu c cu trc * XML DOM - nh ngha
mt b tiu chun ca cc i tng cho cc ti liu XML * HTML DOM - nh ngha mt b
tiu chun ca cc i tng cho cc ti liu HTML Nu bn mun tm hiu thm v DOM XML,
vui lng truy cp ca chng ti hng dn XML DOM .

Page 100 of 413

XML Parsing
c v cp nht - to ra v thao tc mt ti liu XML, bn s cn mt phn tch c php XML.
C hai loi c bn ca phn tch c php XML:

Da trn cy phn tch c php: phn tch c php ny bin i mt ti liu XML vo
mt cu trc cy. N phn tch ton b ti liu, v cung cp truy cp n cc yu t
cy
Phn tch c php da trn s kin: Xem mt ti liu XML nh l mt lot cc s
kin. Khi mt s kin c th xy ra, n gi mt chc nng x l n

Cc phn tch c php DOM l mt phn tch c php da trn cy.


Nhn vo phn ti liu XML sau:

<?xml version="1.0" encoding="ISO-8859-1"?>


<from>Jani</from>
XML DOM XML nhn thy trn l mt cu trc cy:

Level 1: XML Document


Level 2: Root yu t: <from>
Level 3: Tiu yu t: "Jani"

Ci t
DOM XML chc nng phn tch c php l mt phn ca li PHP. Khng c ci t cn thit
s dng cc chc nng ny.

Mt file XML
Cc tp tin XML di y s c s dng trong v d ca chng ti:

Page 101 of 413

<?xml version="1.0" encoding="ISO-8859-1"?>


<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

Ti v u ra XML
Chng ti mun khi to phn tch c php XML, ti xml, v u ra n:

V d
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");
print $xmlDoc->saveXML();
?>
u ra ca cc m trn s l:

Tove Jani Reminder Don't forget me this weekend!


Nu bn chn "Xem m ngun" trong ca s trnh duyt, bn s thy m HTML sau:

<?xml version="1.0" encoding="ISO-8859-1"?>


<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
V d trn to ra mt DOMDocument i tng v ti XML t "note.xml" vo n.
Sau , saveXML () chc nng t cc ti liu ni b XML thnh mt chui, v vy chng ti c
th sn xut n.

Looping thng qua XML


Chng ti mun khi to phn tch c php XML, np XML, v vng lp thng qua tt c cc
yu t ca phn t <note>:

V d
<?php
$xmlDoc = new DOMDocument();

Page 102 of 413

$xmlDoc->load("note.xml");
$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item)
{
print $item->nodeName . " = " . $item->nodeValue . "<br>";
}
?>
u ra ca cc m trn s l:

#text =
to = Tove
#text =
from = Jani
#text =
heading = Reminder
#text =
body = Don't forget me this weekend!
#text =
Trong v d trn, bn thy rng c cc nt vn bn trng gia mi phn t.
Khi XML to ra, n thng c mu trng khng gian gia cc nt. XML DOM phn tch c php
x l cc yu t ny l ngi bnh thng, v nu bn khng nhn thc ca h, i khi h gy
ra vn .

Nu bn mun tm hiu thm v XML DOM, vui lng truy cp ca chng ti hng dn XML
DOM .

SimpleXML l g?
SimpleXML l mi trong PHP 5. l mt cch d dng nhn c cc thuc tnh ca mt
nguyn t v vn bn, nu bn bit b tr cc ti liu XML.
So vi DOM hoc phn tch c php nc ngoi, SimpleXML ch mt mt vi dng m c
d liu vn bn t mt phn t.
SimpleXML chuyn i cc ti liu XML vo mt i tng, nh th ny:

Elements - chuyn i cc thuc tnh duy nht ca cc i tng


SimpleXMLElement. Khi c nhiu hn mt phn t mt mc , h ang t bn
trong mt mng
Thuc tnh - truy cp bng cch s dng mng kt hp, ni m ch mc tng ng vi
tn thuc tnh
Yu t d liu - d liu vn bn t cc yu t c chuyn i thnh chui. Nu mt
phn t c nhiu hn mt nt vn bn, h s c sp xp theo th t chng c
tm thy

Page 103 of 413

SimpleXML l nhanh chng v d dng s dng khi thc hin nhim v c bn nh:

c cc tp tin XML
Nn d liu t chui XML
Chnh sa cc nt vn bn hoc cc thuc tnh

Tuy nhin, khi i ph vi XML tin tin, nh khng gian tn, bn tt hn bng cch s dng
cc phn tch c php nc ngoi hoc DOM XML.

Ci t
PHP 5.0, cc chc nng SimpleXML l mt phn ca li PHP. Khng c ci t cn thit s
dng cc chc nng ny.

S dng SimpleXML
Di y l mt tp tin XML:

<?xml version="1.0" encoding="ISO-8859-1"?>


<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Chng ti mun sn xut cc tn phn t v d liu t tp tin XML trn.
Di y l nhng vic cn lm:
1.
2.
3.
4.

Ti cc tp tin XML
Ly tn ca cc yu t u tin
To mt vng lp m s kch hot trn mi nt con, s dng con ci () chc nng
Sn xut cc tn phn t v d liu cho mi nt con

V d

<?php
$xml = simplexml_load_file("test.xml");
echo $xml->getName() . "<br>";
foreach($xml->children() as $child)
{
echo $child->getName() . ": " . $child . "<br>";
}
?>

Page 104 of 413

u ra ca cc m trn s l:

note
to: Tove
from: Jani
heading: Reminder
body: Don't forget me this weekend!

More PHP SimpleXML


bit thm thng tin v cc chc nng PHP SimpleXML, hy truy cp ca chng ti tham
kho PHP SimpleXML.

Chapter 29 : Gii thiu AJAX


AJAX l v vic cp nht cc b phn ca mt trang web, m khng cn ti li
ton b trang.

AJAX l g?
AJAX = Asynchronous JavaScript v XML.
AJAX l mt k thut to ra cc trang web nhanh chng v nng ng.
AJAX cho php cc trang web c cp nht khng ng b bng cch trao i mt lng nh
d liu vi my ch ng sau hu trng. iu ny c ngha rng n c th cp nht cc phn
ca mt trang web, m khng cn ti li ton b trang.
Cc trang web c in, (m khng s dng AJAX) phi ti li ton b trang nu cc ni dung
cn thay i.
V d v cc ng dng bng cch s dng AJAX: Google Maps, Gmail, Youtube, v Facebook
tab.

Lm th no AJAX Hot ng

Page 105 of 413

AJAX Da trn cc tiu chun Internet


AJAX da trn cc tiu chun internet, v s dng mt s kt hp ca:

i tng XMLHttpRequest (trao i d liu khng ng b vi mt my ch)


JavaScript / DOM ( hin th / tng tc vi thng tin)
CSS (kiu d liu)
XML (thng c s dng nh l nh dng chuyn d liu)

Cc ng dng AJAX l trnh duyt v nn tng c lp!

Google Suggest
AJAX c thc hin ph bin vo nm 2005 bi Google, vi Google Suggest.
Google Suggest ang s dng AJAX to ra mt giao din web rt nng ng: Khi bn bt
u g vo hp tm kim ca Google, JavaScript mt gi cc k t vo mt my ch v my
ch tr v mt danh sch gi .

Bt u S dng AJAX Hm nay

Page 106 of 413

Trong hng dn PHP ca chng ti, chng ti s chng minh lm th no AJAX c th cp


nht cc phn ca mt trang web, m khng cn ti li ton b trang. Cc kch bn my ch
s c vit bng PHP.
Nu bn mun tm hiu thm v AJAX, hy truy cp ca chng ti hng dn AJAX .

AJAX PHP V d
V d sau y s chng minh lm th no mt trang web c th giao tip vi mt my ch
web trong khi mt ngi s dng loi nhn vt trong mt lnh vc u vo:

V d
Start typing a name in the input field below:

First name:
Suggestions:

V d Gii thch - Trang HTML


Khi ngi dng g mt k t trong lnh vc u vo trn, chc nng "showHint ()" c thc
hin. Chc nng ny c kch hot bi s kin "onkeyup":

<html>
<head>
<script>
function showHint(str)
{
if (str.length==0)
{
document.getElementById("txtHint").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;

Page 107 of 413

}
}
xmlhttp.open("GET","gethint.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>
<p><b>Start typing a name in the input field below:</b></p>
<form>
First name: <input type="text" onkeyup="showHint(this.value)">
</form>
<p>Suggestions: <span id="txtHint"></span></p>
</body>
</html>
M ngun gii thch:
Nu trng u vo l rng (str.length == 0), chc nng xa ni dung gi ch txtHint ra khi
chc nng.
Nu trng u vo khng phi l trng rng, showHint () thc hin cc chc nng sau y:

To mt i tng XMLHttpRequest
To ra cc chc nng c thc hin khi p ng my ch sn sng
Gi yu cu vo mt tp tin trn my ch
Ch rng mt tham s (q) c thm vo URL (vi ni dung ca lnh vc u vo)

File PHP
Cc trang web trn my ch c gi bi JavaScript trn l mt file PHP gi l "gethint.php".
M ngun trong "gethint.php" kim tra mt lot cc tn, v tr v tn tng ng (s) cho trnh
duyt:

<?php
// Fill up array with names
$a[]="Anna";
$a[]="Brittany";
$a[]="Cinderella";
$a[]="Diana";
$a[]="Eva";
$a[]="Fiona";
$a[]="Gunda";
$a[]="Hege";
$a[]="Inga";
$a[]="Johanna";
$a[]="Kitty";
$a[]="Linda";
$a[]="Nina";

Page 108 of 413

$a[]="Ophelia";
$a[]="Petunia";
$a[]="Amanda";
$a[]="Raquel";
$a[]="Cindy";
$a[]="Doris";
$a[]="Eve";
$a[]="Evita";
$a[]="Sunniva";
$a[]="Tove";
$a[]="Unni";
$a[]="Violet";
$a[]="Liza";
$a[]="Elizabeth";
$a[]="Ellen";
$a[]="Wenche";
$a[]="Vicky";
//get the q parameter from URL
$q=$_GET["q"];
//lookup all hints from array if length of q>0
if (strlen($q) > 0)
{
$hint="";
for($i=0; $i<count($a); $i++)
{
if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))
{
if ($hint=="")
{
$hint=$a[$i];
}
else
{
$hint=$hint." , ".$a[$i];
}
}
}
}
// Set output to "no suggestion" if no hint were found
// or to the correct values
if ($hint == "")
{
$response="no suggestion";
}
else
{
$response=$hint;
}
//output the response
echo $response;
?>

Page 109 of 413

Gii thch: Nu c bt k vn bn c gi t JavaScript (strlen ($ q)> 0), sau y xy ra:


1. Tm mt ci tn ph hp vi cc k t c gi t JavaScript
2. Nu khng ph hp c tm thy, thit lp cc chui phn ng " ngh khng"
3. Nu mt hoc nhiu tn ph hp c tm thy, thit lp cc chui phn ng cho tt
c cc tn ny
4. p ng c gi n gi ch "txtHint"

AJAX C s d liu V d
V d sau y s chng minh lm th no mt trang web c th ly thng tin t mt c s d
liu vi AJAX:

V d
Lois Griff in

Person info will be listed here...

V d Gii thch - C s d liu MySQL


Bng c s d liu chng ti s dng trong v d trn trng nh th ny:
id

FirstName

LastName

Tui

Qu hng

Vic

Peter

Tin mach ming

41

Quahog

Ch lam ru bia

Lois

Tin mach ming

40

Newport

Piano Teacher

Ngi an ng chay tnh

Swanson

39

Quahog

Cnh sat vin

Glenn

Bai ly

41

Quahog

Phi cng

V d Gii thch - Trang HTML


Khi ngi dng chn mt ngi s dng trong danh sch th xung trn, mt chc nng
c gi l "showUser ()" c thc thi. Chc nng ny c kch hot bi s kin
"onchange":

<html>
<head>
<script>
function showUser(str)
{
if (str=="")
{
document.getElementById("txtHint").innerHTML="";

Page 110 of 413

return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getuser.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>
<form>
<select name="users" onchange="showUser(this.value)">
<option value="">Select a person:</option>
<option value="1">Peter Griffin</option>
<option value="2">Lois Griffin</option>
<option value="3">Glenn Quagmire</option>
<option value="4">Joseph Swanson</option>
</select>
</form>
<br>
<div id="txtHint"><b>Person info will be listed here.</b></div>
</body>
</html>
ShowUser () chc nng no sau y:

Kim tra nu mt ngi c chn


To mt i tng XMLHttpRequest
To ra cc chc nng c thc hin khi p ng my ch sn sng
Gi yu cu vo mt tp tin trn my ch
Ch rng mt tham s (q) c thm vo URL (vi ni dung ca danh sch th
xung)

File PHP
Cc trang web trn my ch c gi bi JavaScript trn l mt file PHP gi l
"getuser.php".

Page 111 of 413

M ngun trong "getuser.php" chy mt truy vn i vi mt c s d liu MySQL, v tr v


kt qu trong mt bng HTML:

<?php
$q=$_GET["q"];
$con = mysql_connect('localhost', 'peter', 'abc123');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("ajax_demo", $con);
$sql="SELECT * FROM user WHERE id = '".$q."'";
$result = mysql_query($sql);
echo "<table border='1'>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
<th>Hometown</th>
<th>Job</th>
</tr>";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['FirstName'] . "</td>";
echo "<td>" . $row['LastName'] . "</td>";
echo "<td>" . $row['Age'] . "</td>";
echo "<td>" . $row['Hometown'] . "</td>";
echo "<td>" . $row['Job'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($con);
?>
Gii thch: Khi truy vn c gi t JavaScript file PHP, sau y xy ra:
1. PHP m mt kt ni n mt my ch MySQL
2. Ngi c tm thy ng
3. Mt bng HTML c to ra, cha y d liu, v gi li cho gi ch "txtHint"

AJAX XML V d
V d sau y s chng minh lm th no mt trang web c th ly thng tin t mt file XML
vi AJAX:

V d

Page 112 of 413

CD info will be listed here...

V d Gii thch - Trang HTML


Khi ngi dng chn mt a CD trong danh sch th xung trn, mt chc nng c gi l
"showCD ()" c thc thi. Chc nng ny c kch hot bi s kin "onchange":

<html>
<head>
<script>
function showCD(str)
{
if (str=="")
{
document.getElementById("txtHint").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getcd.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>
<form>
Select a CD:
<select name="cds" onchange="showCD(this.value)">
<option value="">Select a CD:</option>
<option value="Bob Dylan">Bob Dylan</option>
<option value="Bonnie Tyler">Bonnie Tyler</option>
<option value="Dolly Parton">Dolly Parton</option>
</select>
</form>
<div id="txtHint"><b>CD info will be listed here...</b></div>

Page 113 of 413

</body>
</html>
ShowCD () chc nng no sau y:

Kim tra xem nu a CD c chn


To mt i tng XMLHttpRequest
To ra cc chc nng c thc hin khi p ng my ch sn sng
Gi yu cu vo mt tp tin trn my ch
Ch rng mt tham s (q) c thm vo URL (vi ni dung ca danh sch th
xung)

File PHP
Cc trang web trn my ch c gi bi JavaScript trn l mt file PHP gi l "getcd.php".
Cc kch bn PHP ti mt ti liu XML, " cd_catalog.xml ", chy mt truy vn i vi cc tp
tin XML, v tr v kt qu di dng HTML:

<?php
$q=$_GET["q"];
$xmlDoc = new DOMDocument();
$xmlDoc->load("cd_catalog.xml");
$x=$xmlDoc->getElementsByTagName('ARTIST');
for ($i=0; $i<=$x->length-1; $i++)
{
//Process only element nodes
if ($x->item($i)->nodeType==1)
{
if ($x->item($i)->childNodes->item(0)->nodeValue == $q)
{
$y=($x->item($i)->parentNode);
}
}
}
$cd=($y->childNodes);
for ($i=0;$i<$cd->length;$i++)
{
//Process only element nodes
if ($cd->item($i)->nodeType==1)
{
echo("<b>" . $cd->item($i)->nodeName . ":</b> ");
echo($cd->item($i)->childNodes->item(0)->nodeValue);
echo("<br>");
}
}
?>

Page 114 of 413

Khi truy vn CD c gi t JavaScript trang PHP, sau y s xy ra:


1. PHP to ra mt i tng XML DOM
2. Tm tt c cc yu t <artist> ph hp vi tn c gi t JavaScript
3. u ra cc thng tin album (gi cho gi ch "txtHint")

AJAX Live Search


V d sau y s chng minh mt tm kim trc tip, ni bn s c c kt qu tm kim
trong khi bn g.
Live tm kim c nhiu li ch so vi tm kim truyn thng:

Kt qu c hin th khi bn g
Thu hp kt qu nh bn tip tc g
Nu kt qu tr nn qu hp, loi b cc k t nhn thy mt kt qu rng ln hn

Tm kim mt trang W3Schools trong lnh vc u vo di y:

Cc kt qu trong v d trn c tm thy trong mt tp tin XML ( links.xml ). lm v d


ny nh v n gin, ch c su kt qu c sn.

V d Gii thch - Trang HTML


Khi ngi dng g mt k t trong lnh vc u vo trn, chc nng "showResult ()" c
thc hin. Chc nng ny c kch hot bi s kin "onkeyup":

<html>
<head>
<script>
function showResult(str)
{
if (str.length==0)
{
document.getElementById("livesearch").innerHTML="";
document.getElementById("livesearch").style.border="0px";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()

Page 115 of 413

{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("livesearch").innerHTML=xmlhttp.responseText;
document.getElementById("livesearch").style.border="1px solid
#A5ACB2";
}
}
xmlhttp.open("GET","livesearch.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>
<form>
<input type="text" size="30" onkeyup="showResult(this.value)">
<div id="livesearch"></div>
</form>
</body>
</html>
M ngun gii thch:
Nu trng u vo l rng (str.length == 0), chc nng xa ni dung gi ch livesearch v
thot khi chc nng.
Nu trng u vo khng phi l trng rng, showResult () chc nng thc hin nhng iu
sau y:

To mt i tng XMLHttpRequest
To ra cc chc nng c thc hin khi p ng my ch sn sng
Gi yu cu vo mt tp tin trn my ch
Ch rng mt tham s (q) c thm vo URL (vi ni dung ca lnh vc u vo)

File PHP
Cc trang web trn my ch c gi bi JavaScript trn l mt file PHP gi l
"livesearch.php".
M ngun trong "livesearch.php" tm kim mt tp tin XML cho cc chc danh ph hp vi
chui tm kim v tr v kt qu:

<?php
$xmlDoc=new DOMDocument();
$xmlDoc->load("links.xml");
$x=$xmlDoc->getElementsByTagName('link');

Page 116 of 413

//get the q parameter from URL


$q=$_GET["q"];
//lookup all links from the xml file if length of q>0
if (strlen($q)>0)
{
$hint="";
for($i=0; $i<($x->length); $i++)
{
$y=$x->item($i)->getElementsByTagName('title');
$z=$x->item($i)->getElementsByTagName('url');
if ($y->item(0)->nodeType==1)
{
//find a link matching the search text
if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q))
{
if ($hint=="")
{
$hint="<a href='" .
$z->item(0)->childNodes->item(0)->nodeValue .
"' target='_blank'>" .
$y->item(0)->childNodes->item(0)->nodeValue . "</a>";
}
else
{
$hint=$hint . "<br /><a href='" .
$z->item(0)->childNodes->item(0)->nodeValue .
"' target='_blank'>" .
$y->item(0)->childNodes->item(0)->nodeValue . "</a>";
}
}
}
}
}
// Set output to "no suggestion" if no hint were found
// or to the correct values
if ($hint=="")
{
$response="no suggestion";
}
else
{
$response=$hint;
}
//output the response
echo $response;
?>
Nu c bt k vn bn c gi t JavaScript (strlen ($ q)> 0), sau y s xy ra:

Ti mt tp tin XML vo mt i tng mi DOM XML


Lp qua tt c cc yu t <title> tm thy kt qu ph hp t vn bn c gi t
JavaScript

Page 117 of 413

Thit lp a ch chnh xc v tiu trong "phn ng" bin. Nu trn u nhiu hn


mt c tm thy, tt c cc trn u c thm vo bin
Nu khng ph hp c tm thy, bin phn ng c thit lp " ngh khng"

AJAX RSS Reader


V d sau y s chng minh mt trnh c RSS, RSS-ngun cp d liu c np vo mt
trang web m khng cn np:

RSS-ngun cp d liu s c lit k y ...

V d Gii thch - Trang HTML


Khi ngi dng chn mt RSS-ngun cp d liu trong danh sch th xung trn, mt chc
nng c gi l "showResult ()" c thc thi. Chc nng ny c kch hot bi s kin
"onchange":

<html>
<head>
<script>
function showRSS(str)
{
if (str.length==0)
{
document.getElementById("rssOutput").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("rssOutput").innerHTML=xmlhttp.responseText
;
}
}
xmlhttp.open("GET","getrss.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>

Page 118 of 413

<form>
<select onchange="showRSS(this.value)">
<option value="">Select an RSS-feed:</option>
<option value="Google">Google News</option>
<option value="MSNBC">MSNBC News</option>
</select>
</form>
<br>
<div id="rssOutput">RSS-feed will be listed here...</div>
</body>
</html>
Cc showResult () chc nng no sau y:

Kim tra nu mt RSS-ngun cp d liu c chn


To mt i tng XMLHttpRequest
To ra cc chc nng c thc hin khi p ng my ch sn sng
Gi yu cu vo mt tp tin trn my ch
Ch rng mt tham s (q) c thm vo URL (vi ni dung ca danh sch th
xung)

File PHP
Cc trang web trn my ch c gi bi JavaScript trn l mt tp tin PHP gi l
"getrss.php":

<?php
//get the q parameter from URL
$q=$_GET["q"];
//find out which feed was selected
if($q=="Google")
{
$xml=("http://news.google.com/news?ned=us&topic=h&output=rss");
}
elseif($q=="MSNBC")
{
$xml=("http://rss.msnbc.msn.com/id/3032091/device/rss/rss.xml");
}
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);
//get elements from "<channel>"
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')
->item(0)->childNodes->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')
->item(0)->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')
->item(0)->childNodes->item(0)->nodeValue;

Page 119 of 413

//output elements from "<channel>"


echo("<p><a href='" . $channel_link
. "'>" . $channel_title . "</a>");
echo("<br>");
echo($channel_desc . "</p>");
//get and output "<item>" elements
$x=$xmlDoc->getElementsByTagName('item');
for ($i=0; $i<=2; $i++)
{
$item_title=$x->item($i)->getElementsByTagName('title')
->item(0)->childNodes->item(0)->nodeValue;
$item_link=$x->item($i)->getElementsByTagName('link')
->item(0)->childNodes->item(0)->nodeValue;
$item_desc=$x->item($i)->getElementsByTagName('description')
->item(0)->childNodes->item(0)->nodeValue;
echo ("<p><a href='" . $item_link
. "'>" . $item_title . "</a>");
echo ("<br>");
echo ($item_desc . "</p>");
}
?>
Khi mt yu cu cho mt ngun cp d liu RSS c gi t cc JavaScript, sau y s xy
ra:

Kim tra thc n chn nui c la chn


To mt i tng DOM XML mi
Np ti liu RSS trong bin xml
Trch xut v cc yu t u ra t cc yu t knh
Trch xut v cc yu t u ra t cc yu t mc

V d sau y s chng minh mt cuc thm d m kt qu c hin th m khng cn np.

Bn c thch PHP v AJAX cho n nay?


C:
No:

V d Gii thch - Trang HTML


Khi ngi dng chn mt ty chn trn, mt chc nng c gi l "getVote ()" c thc
thi. Chc nng ny c kch hot bi s kin "onclick":

<html>
<head>
<script>
function getVote(int)
{
if (window.XMLHttpRequest)

Page 120 of 413

{// code for IE7+, Firefox, Chrome, Opera, Safari


xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("poll").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","poll_vote.php?vote="+int,true);
xmlhttp.send();
}
</script>
</head>
<body>
<div id="poll">
<h3>Do you like PHP and AJAX so far?</h3>
<form>
Yes:
<input type="radio" name="vote" value="0"
onclick="getVote(this.value)">
<br>No:
<input type="radio" name="vote" value="1"
onclick="getVote(this.value)">
</form>
</div>
</body>
</html>
GetVote () chc nng no sau y:

To mt i tng XMLHttpRequest
To ra cc chc nng c thc hin khi p ng my ch sn sng
Gi yu cu vo mt tp tin trn my ch
Ch rng mt tham s (vote) c thm vo URL (vi gi tr c hoc khng c ty
chn)

File PHP
Cc trang web trn my ch c gi bi JavaScript trn l mt tp tin PHP gi l
"poll_vote.php":

<?php
$vote = $_REQUEST['vote'];

Page 121 of 413

//get content of textfile


$filename = "poll_result.txt";
$content = file($filename);
//put content in array
$array = explode("||", $content[0]);
$yes = $array[0];
$no = $array[1];
if ($vote == 0)
{
$yes = $yes + 1;
}
if ($vote == 1)
{
$no = $no + 1;
}
//insert votes to txt file
$insertvote = $yes."||".$no;
$fp = fopen($filename,"w");
fputs($fp,$insertvote);
fclose($fp);
?>
<h2>Result:</h2>
<table>
<tr>
<td>Yes:</td>
<td>
<img src="poll.gif"
width='<?php echo(100*round($yes/($no+$yes),2)); ?>'
height='20'>
<?php echo(100*round($yes/($no+$yes),2)); ?>%
</td>
</tr>
<tr>
<td>No:</td>
<td>
<img src="poll.gif"
width='<?php echo(100*round($no/($no+$yes),2)); ?>'
height='20'>
<?php echo(100*round($no/($no+$yes),2)); ?>%
</td>
</tr>
</table>
Gi tr c gi t JavaScript, v sau y xy ra:
1.
2.
3.
4.

Ly ni dung ca tp tin "poll_result.txt"


a ni dung ca cc tp tin trong cc bin v thm mt bin c chn
Vit kt qu cc tp tin "poll_result.txt"
Sn xut mt i din ha ca cc kt qu thm d kin

Page 122 of 413

Text File
Cc tp tin vn bn (poll_result.txt) l ni chng ti lu tr cc d liu t cc cuc thm d.
N c lu tr nh th ny:

0||0
S u tin i din cho "Yes" phiu, s th hai i din cho phiu "Khng".
Lu : nh cho php my ch web ca bn chnh sa cc tp tin vn bn. Cung cp cho
truy cp tt c mi ngi, ch cn cc my ch web (PHP).

Chapter Ngoi : Bi Tp
Bi 11: Vit ng dng ng nhp bng PHP v
MYSQL
nhng bi trc chng ta hc qua cc kin thc trng yu v
PHP. Tuy nhin, c th xy dng mt website hon chnh
bng nhng kin thc th qu tht khng n gin. Bi v cc
kin thc qua sch v v ti liu d sao cng ch l nhng kin
thc tng qut v thiu tnh khch quan thc tin. Nn khi ngi
hc lp trnh bc vo giai on vit ng dng th thng rt lng tng. cng l l do
ti vit bi ny hng dn cc bn dn lm quen vi cch tip cn mt ng dng PHP
v MYSQL nh th no.

Trc ht chng ta phi thit k v xy dng m hnh c s d liu ng vi tng lnh


bn di (xem li bi ngn ng SQL v MYSQL Cn Bn) sau mi tin hnh trin
khai lp trnh.
1 mysql -hlocalhost -uroot -proot
2 mysql>create database project;
3 mysql>use project;
mysql>create table user( id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
4 username VARCHAR(50) NOT NULL, password CHAR(50) NOT NULL, level CHAR(1)
NOT NULL, PRIMARY KEY(id));
5

mysql>insert into user(username,password,level) values


("admin","12345","2") ("abc","12345","1");

Vy l chng ta c c s d liu nh m hnh trn. Tip n chng ta to file


login.php v thit k Form HTML c mn hnh ng nhp khi ngi dng truy cp.

Page 123 of 413

1 <form action='login.php' method='post'>


2 Username: <input type='text' name='username' size='25' /><br />
3 Password: <input type='password' name='password' size='25' /><br />
4 <input type='submit' name='ok' value='Dang Nhap' />
5 </form>

Tip n chng ta tin hnh kim tra d liu t form


01 <?php
02 if(isset($_POST['ok']))
03 {
04 $u=$p="";
05 if($_POST['username'] == NULL)
06 {
07
echo "Please enter your username<br />";
08 }
09 else
10 {
11
$u=$_POST['username'];
12 }
13 if($_POST['password'] == NULL)
14 {
15
echo "Please enter your password<br />";
16 }
17 else
18 {
19 $p=$_POST['password'];
20 }
21 }
22 ?>

on code trn s kim tra xem ngi dng c tin hnh nhn nt ng nhp hay
khng. V nu c th chng ta s xt tip tnh trng ngi dng c trng cc
username v password hay khng. Nu c chng ta s thng bo li bn trn form,
ngi s dng tin hnh nhp liu. V phin bn PHP 5.3 tr ln s yu cu ta khai bo
bin trc khi s dng. V th mc nh ban u ta khi to 2 bin $u v $p mang gi tr
l rng.

Page 124 of 413

K n chng ta kim tra xem c tn ti hai bin $u v $p (ch khi ngi dng ng nhp
thnh cng th mi c th to ra 2 bin ). Tip n chng ta tin hnh kt ni c s d
liu (xem li bi kt hp PHP & MYSQL trong ng dng web).
1 <?php
$conn=mysql_connect("localhost","root","root") or die("can't connect
2
this database");
3 mysql_select_db("project",$conn);
4 ?>

V tin hnh kim tra xem username v password ngi s dng va nhp c trng khp
vi thng tin c trong c s d liu hay khng ?. Nu khng th chng ta s bo li ngay.
Ngc li s tin hnh ly d liu t bng v gn vo session. c th qun l phin
lm vic mt cch hiu qu trn mi trang ca khu vc admin (xem li bi khi nim c
bn v cookie v session).
01 <?php
02 if($u && $p)
03 {
04

$conn=mysql_connect("localhost","root","root") or die("can't connect


this database");

05 mysql_select_db("project",$conn);
$sql="select * from user where username='".$u."' and
06
password='".$p."'";
07 $query=mysql_query($sql);
08 if(mysql_num_rows($query) == 0)
09 {
10
echo "Username or password is not correct, please try again";
11 }
12 else
13 {
14
$row=mysql_fetch_array($query);
15
16

session_start();
$_SESSION['userid'] = $row['id'];

17
$_SESSION['level'] = $row['level'];
18 }
19 }
20 ?>

Nh vy code hon chnh cho ng dng (file login.php) ny l nh sau:


01 <?php
02 if(isset($_POST['ok']))
03 {

Page 125 of 413

04 $u=$p="";
05 if($_POST['username'] == NULL)
06 {
07
echo "Please enter your username<br />";
08 }
09 else
10 {
11
$u=$_POST['username'];
12 }
13 if($_POST['password'] == NULL)
14 {
15
echo "Please enter your password<br />";
16 }
17 else
18 {
19
$p=$_POST['password'];
20 }
21 if($u && $p)
22 {
$conn=mysql_connect("localhost","root","root") or die("can't
connect this database");
24
mysql_select_db("project",$conn);
23

$sql="select * from user where username='".$u."' and


password='".$p."'";
26
$query=mysql_query($sql);
25

27
28

if(mysql_num_rows($query) == 0)
{

29
30

echo "Username or password is not correct, please try again";


}

31
32

else
{

33
34

$row=mysql_fetch_array($query);
session_start();

35
36

$_SESSION['userid'] = $row[id];
$_SESSION['level'] = $row[level];

37
38

39 }
40 }
41 ?>
42 <form action='login.php' method='post'>
43 Username: <input type='text' name='username' size='25' /><br />
44 Password: <input type='password' name='password' size='25' /><br />

Page 126 of 413

45 <input type='submit' name='ok' value='Dang Nhap' />


46 </form>

bi sau, chng ta s tip tc tm hiu ng dng kt hp PHP & MYSQL cho vic
thm mt thnh vin nh th no. Mi s gp , cng nh thc mc ca cc bn dnh
cho bi vit vui lng s dng tnh nng tho lun ti din n. Hoc thng qua vic lin
h ca h thng website. Mong s nhn c nhiu kin ng gp t cc bn.

Bi 12: Vit ng dng thm thnh vin bng PHP v MYSQL


bi trc, chng ta xy dng ng dng thnh vin. Cho php
ngi s dng thc thi cng vic ng nhp vo h thng. Trong
bi ny chng ta s tip tc cng vic pht trin ng dng trn,
ngi s dng sau khi ng nhp c nhng thao tc c quyn
nh thm, qun l, sa, xo thnh vin ca trang web. (xem li
Bi 11: Vit ng dng ng nhp bng PHP & MYSQL).

Sau khi ng nhp vo trang admin ngi dng s c y sang trang qun l admin, ti
y ch nhng ai ng nhp ng vi username v password trong c s d liu v c
quyn hn level l 2 th mi c th truy xut vo trang ny. V vy chng ta cn thao tc
kim tra session qun l phin lm vic ca ngi s dng. t on code sau
nhng trang bn mun kim tra quyn truy cp ca ngi s dng.
01 <?php
02 session_start();
03 if(isset($_SESSION['userid']) && $_SESSION['level'] == 2)
04 {
05 // ti y thc thi cc hot ng khi ng nhp thnh cng.
06 }
07 else
08 {
09 header("location: login.php");
10 exit();
11 }
12 ?>

Nh vy, ta to trang add_user.php v t on code trn, ng thi vit thm 1 form


thc thi cng vic thm thnh vin.

Page 127 of 413

01 <form action='add_user.php' method='POST'>


02 Level: <select name='level'>
03 <option value='1'>Member</option>
04 <option value='2'>Admin </option>
05 </select><br />
06 Username: <input type='text' name='username' size='25' /><br />
07 Password: <input type='password' name='password' size='25' /> <br />
Re-Password: <input type='password' name='re-password' size='25' /><br
08
/>
09 <input type='submit' name='adduser' value='Add New User' />
10 </form>

Tng t nh nhng bi trc, chng ta cng ln lt kim tra tng i tng. Trc ht
cn xem th ngi dng nhn nt Add New user cha ?, sau li khai bo 2 bin $u
v $p, mc nh ban u ta cho 2 bin ny l rng. K ti ta kim tra xem ngi dng
nhp y thng tin cha. Cui cng l so snh gia password v re-password c ging
nhau hay khng. Tip theo chng ta gn bin $l s bng vi gi tr m khi ngi dng
chn level cho user . (xem li Bi 4: X l gi tr form trong PHP)
01 <?php
02 if(isset($_POST['adduser']))
03 {
04 $u=$p="";
05 if($_POST['username'] == NULL)
06 {
07
echo "Vui long nhap username<br />";
08 }
09 else
10 {
11
$u=$_POST['username'];
12 }
13 if($_POST['password'] != $_POST['re-password'])
14 {
15
echo "Password va re-password khong chinh xac<br />";
16 }

Page 128 of 413

17 else
18 {
19
20

if($_POST['password'] == NULL )
{

21
22

echo "Vui long nhap password<br />";


}

23
24

else
{

25
26

$p=$_POST['password'];
}

27 }
28 $l=$_POST['level'];
29 }
30 ?>

K n chng ta li tip tc kim tra xem c tn ti bin $u, $p v $l hay khng (ch khi
ngi dng nhp liu th mi tn ti cng lc 3 bin ny). sau khi kim tra s tn ti
ca 3 bin ny chng ta tip tc dng PHP kt ni c s d liu kim tra xem
username m ngi dng va chn c trng vi username khc trong c s d liu cha.
nu trng th phi xut thng bo li yu cu h chn username khc cn nu khng th ta
li tin hnh thm thnh vin mi ny vo CSDL.
01 <?php
02 if($u & $p & $l)
03 {
04

$conn=mysql_connect("localhost","root","root") or die("can't connect


this database");

05 mysql_select_db("project",$conn);
06 $sql="select * from user where username='".$u."'";
07 $query=mysql_query($sql);
08 if(mysql_num_rows($query) != "" )
09 {
10
echo "Username nay da ton tai roi<br />";
11 }
12 else
13 {
14

$sql2="insert into user(username,password,level)


values('".$u."','".$p."','".$l."')";

15
16

$query2=mysql_query($sql2);
echo "Da them thanh vien moi thanh cong";

17 }
18 }
19 ?>

Page 129 of 413

Ti y ta kt thc thao tc thm mt thnh vin mi vo c s d liu. Sau y l


ton b code trong ng dng ny.
01 <?php
02 session_start();
03 if(isset($_SESSION['userid']) && $_SESSION['level'] == 2)
04 {
05 if(isset($_POST['adduser']))
06 {
07 $u = $p ="";
08
if($_POST['username'] == NULL)
09
10

11
12

}
else

13
14

15
16

}
if($_POST['password'] != $_POST['re-password'])

17
18

19
20

}
else

21
22

echo "Vui long nhap username<br />";

$u=$_POST['username'];

echo "Password va re-password khong chinh xac<br />";

if($_POST['password'] == NULL)

23
24

25
26

}
else

27
28

29
30

}
}

31
32

$l=$_POST['level'];
if($u & $p & $l)

33

34

echo "Vui long nhap password<br />";

$p=$_POST['password'];

$conn=mysql_connect("localhost","root","root") or die("can't
connect this database");

35
36

mysql_select_db("project",$conn);
$sql="select * from user where username='".$u."'";

37
38

$query=mysql_query($sql);
if(mysql_num_rows($query) != "" )

39

Page 130 of 413

40

echo "Username nay da ton tai roi<br />";

41
42

}
else

43

44

$sql2="insert into user(username,password,level)


values('".$u."','".$p."','".$l."')";

45
46
47
48

$query2=mysql_query($sql2);
echo "Da them thanh vien moi thanh cong";
}
}

49 }
50 }
51 ?>
52 <form action='add_user.php' method='POST'>
53 Level: <select name='level'>
54 <option value='1'>Member</option>
55 <option value='2'>Admin </option>
56 </select><br />
57 Username: <input type='text' name='username' size='25' /><br />
58 Password: <input type='password' name='password' size='25' /> <br />
Re-Password: <input type='password' name='re-password' size='25' /><br
/>
60 <input type='submit' name='adduser' value='Add New User' />
59

61 </form>
62 <?php
63 }
64 else
65 {
66 header("location: login.php");
67 exit();
68 }
69 ?>

bi sau, chng ta li tip tc tm hiu ng dng kt hp PHP v MYSQL cho vic


qun l tt c thnh vin trong database ra nh th no. Mi s gp , cng nh thc
mc ca cc bn dnh cho bi vit vui lng s dng tnh nng tho lun ti din n.
Hoc thng qua vic lin h ca h thng website. Mong s nhn c nhiu kin
ng gp t cc bn.

Bi 13: Vit ng dng qun l thnh vin bng PHP v MYSQL


cc bi trc, chng ta cng tm hiu v vic thm mt
thnh vin v thit lp trang ng nhp vo h thng
administrator. bi ny, chng ta s cng nghin cu v ng
Page 131 of 413

dng qun tr cc ti khon. Hay ni cch khc l h thng li ton b danh sch ca
nhng thnh vin trn website ca chng ta.

Sau khi ng nhp vo trang admin ngi dng s c y sang trang qun l admin, ti
y ch nhng ai ng nhp ng vi username v password trong c s d liu v c
quyn hn level l 2 th mi c th truy xut vo trang ny. V vy chng ta cn thao tc
kim tra session qun l phin lm vic ca ngi s dng. t on code sau
nhng trang bn mun kim tra quyn truy cp ca ngi s dng.
01 <?php
02 sessison_start();
03 if(isset($_SESSION['userid']) && $_SESSION['level'] == 2)
04 {
05 // ti y thc thi cc hot ng khi ng nhp thnh cng.
06 }
07 else
08 {
09 header("location: login.php");
10 exit();
11 }
12 ?>

Nh vy, chng ta s t on code ny trang qun l user. C th ti t trang ny c


tn file l manage_user.php. V d liu s lp li ton b user v ng vi tng user s l 1
dng d liu c lp li. Chng ta s xy dng 1 bng gm c STT l s th t ca tng
user c m trn mi user khi lp, username l tn truy cp ca h, level l cp bc ca
user (1 l member v 2 l admin), edit l ct cha cc link chnh sa user, del l ct xa
cc user.
1 <table align='center' width='400' border='1'>
2 <tr>
3 <td>STT</td>
4 <td>Username</td>
5 <td>Level</td>
6 <td>Edit</td>
7 <td>Del</td>
8 </tr>

Tip theo, chng ta s kt ni CSDL tin hnh lp cc user.


01 <?php
02 $conn=mysql_connect("localhost","root","root") or die("can't connect

Page 132 of 413

this database");
03 mysql_select_db("project",$conn);
04 $sql="select * from user order by id DESC";
05 $query=mysql_query($sql);
06 if(mysql_num_rows($query) == "")
07 {
echo "<tr><td colspan='5' align='center'>Chua co username
08
nao</td></tr>";
09 }
10 ?>

on code trn tin hnh la chn tt c user c trong database. ng thi kim tra
xem trong database c tn ti user no khng. Nu khng s xut ra thng bo "cha c
username no". Ngc li khi c tn ti user chng ta s x l tip nh sau:
01 <?php
02 $stt=0;
03 while($row=mysql_fetch_array($query))
04 {
05 $stt++;
06 echo "<tr>";
07 echo "<td>$stt</td>";
08 echo "<td>$row['username']</td>";
09 if($row['level'] == "1")
10 {
11 echo "<td>Member</td>";
12 }
13 else
14 {
15 echo "<td>Admin</td>";
16 }
17 echo "<td><a href='edit_user.php?userid=$row[id]'>Edit</a></td>";
18 echo "<td><a href='del_user.php?userid=$row[id]'>Del</a></td>";
19 echo "</tr>";
20 ?>

y ta dng bin $stt lm b m cho s lng user. Nh vy, c mi ln lp 1 user


th b m ny s t ng tng ln 1 n v. Sau , chng ta a d liu vo mng v
truyn cc gi tr trn vo cc ct d liu trong bng.

Page 133 of 413

Ti y ta kt thc thao tc qun l cc user ang tn ti trong c s d liu. Sau y


l ton b code trong ng dng ny.
01 <?php
02 sesison_start();
03 if(isset($_SESSION['userid']) && $_SESSION['level'] == 2)
04 {
05 ?>
06 <table align='center' width='400' border='1'>
07 <tr>
08 <td>STT</td>
09 <td>Username</td>
10 <td>Level</td>
11 <td>Edit</td>
12 <td>Del</td>
13 </tr>
14 <?
$conn=mysql_connect("localhost","root","root") or die("can't connect
this database");
16 mysql_select_db("project",$conn);
15

17 $sql="select * from user order by id DESC";


18 $query=mysql_query($sql);
19 if(mysql_num_rows($query) == "")
20 {
21 echo "<tr><td colspan=5 align=center>Chua co username nao</td></tr>";
22 }
23 else
24 {
25 $stt=0;
26 while($row=mysql_fetch_array($query))
27 {

Page 134 of 413

28 $stt++;
29 echo "<tr>";
30 echo "<td>$stt</td>";
31 echo "<td>$row['username']</td>";
32 if($row['level'] == "1")
33 {
34 echo "<td>Member</td>";
35 }
36 else
37 {
38 echo "<td>Admin</td>";
39 }
40 echo "<td><a href='edit_user.php?userid=$row[id]'>Edit</a></td>";
41 echo "<td><a href='del_user.php?userid=$row[id]'>Del</a></td>";
42 echo "</tr>";
43 }
44
45 }
46 ?>
47 </table>

bi sau, chng ta li tip tc tm hiu ng dng chnh sa v xa mt thnh vin trong


PHP v MYSQL nh th no. Mi s gp , cng nh thc mc ca cc bn dnh cho bi
vit vui lng s dng tnh nng tho lun ti din n. Hoc thng qua vic lin h ca
h thng website. Mong s nhn c nhiu kin ng gp t cc bn.

Bi 14: vit ng dng sa xa thnh vin bng PHP v MYSQL


Trong bi trc chng ta ni v cch thm v qun l thnh
vin kt hp PHP v MYSQL. Tip theo trong bi ny, chng ta
s vit tip 2 ng dng sa v xa thnh vin hon tt module
user.

theo kp bi ny, cc bn vui lng xem li bi 11,12,13. V cc bi c hng dn


lin mch t u ti cui.

Cng nh nhng bi trc, h thng sa v xa thnh vin ny cng ch c th thc hin


c khi ngi s dng ng nhp thnh cng vi quyn hn ca 1 administrator. Do
vy, bn ng qun kim tra session u khi bt u vit ng dng ny nh.

Page 135 of 413

01 <?php
02 sessison_start();
03 if(isset($_SESSION['userid']) && $_SESSION['level'] == 2)
04 {
05 // ti y thc thi cc hot ng khi ng nhp thnh cng.
06 }
07 else
08 {
09 header("location: login.php");
10 exit();
11 }
12 ?>

A- Xy dng trang sa thnh vin:


V l trang chnh sa thnh vin, nn ni dung ca chng c phn s ging vi phn thm
thnh vin, ch khc l cc nhp liu gi y c d liu. D liu ny chng ta tin
hnh ly t c s d liu thng qua bin truyn m trang qun l gi
edit_user.php?userid=$row[id]

Nh vy ly c gi tr t lin kt ny chng ta s s dng bin $_GET['userid']. Sau


khi c c gi tr ny, vic cn li ca bn l ly thng tin ca id ny t c s d liu
v a vo form ngi dng c th chnh sa.

Vy ta c.
01 <?php
02 $sql="select * from user where id='".$id."'";
03 $query=mysql_query($sql);
04 $row=mysql_fetch_array($query);
05 ?>

Page 136 of 413

06 <form action="edit_user.php?userid=<?=$id?>" method=post>


07 Level: <select name=level>
<option value=1 <? if($row[level] == 1) echo "selected"; ?>)
08
>Member</option>
<option value=2 <? if($row[level] == 2) echo "selected";
?>>Administrator</option>
10 </select><br />
09

Username: <input type=text name=user size=20


value="<?=$row[username]?>" /><br />
12 Password: <input type=password name=pass size=20 /> <br />
11

13 Re-password: <input type=password name=repass size=20 /><br />


14 <input type=submit name=ok value="Edit User" />
15 </form>

Theo nh on code trn phn value chng ta mun a gi tr vo th buc phi s


dng c php gn <?=$ten?> hoc cng c th s dng bng cch <? echo $ten; ?>..
y chng ta ch a ra gi tr trn text box username, cn li mt khu do c th b m
ha nn khng nn hin th ra. Phn level do lu trong c s d liu l nhng con s 1,2
nn khi a ra chng ta phi so snh, nu trong bng lu l 1 th ch c gi tr bng 1 s
thm ch selected. mc nh la chn khi ngi dng nhn vo nt chnh sa.

Tip ti ngi dng s nhn nt edit. Vic cn li ca chng ta l kim tra d liu khi h
tin hnh chnh sa d liu. im khc bit y l chng ta phi cn nhc khi vit trang
chnh sa. Bi khng phi ai vo chnh sa cng u sa c thng tin username,
password, level. C khi h ch sa mi level hoc c khi h ch sa mi password.

V th ta phi xt cc trng hp gii quyt.

Trng hp 1: Ngi dng ch chnh sa username, level m khng chnh sa


password. Khi username, level bt buc u c d liu nn ta khng cn kim tra
chng rng hay khng. Nhng vi password chng ta khng th bt ngi lp trnh nhp
liu. V h hon ton c th rng.

Trng hp 2: Ngi dng chnh sa username, level ,password. Khi ta xem


password c d liu v ta tin hnh cp nht.

Page 137 of 413

gii quyt bi ton trn tha 2 trng hp ta s xt phng php sau:

Ta kim tra password v repassword c ging nhau hay khng ?. Nu chng khc nhau
ngha l ngi dng nhp liu nhng nhp sai. Vy phi cnh bo li cho h bit l h
nhp sai. Cn ngc li nu password v repassword ging nhau th s ny sinh 2 trng
hp con.

+ Mt l password v repassword u c d liu

+ Hai l password v repassword khng c d liu.

Khi trng hp con 1 chng ta s khi to bin $p v ghi nhn thng tin h nhp
liu. V trng hp 2 chng ta khng ghi nhn thng tin ngi nhp liu v h khng
c nh chnh sa mt khu. C th vit on code n gin nh sau:
01 <?php
02 if($_POST['pass'] != $_POST['repass'])
03 {
04 echo "Password and re-password is not correct";
05 }
06 else
07 {
08 if($_POST['pass'] != NULL)
09 {
10
$p=$_POST['pass'];
11 }
12 }
13 ?>

Tip ti chng ta s phn loi d liu cp nht. Khi c username,password, level th ta


cp nht tt c thng tin ca h bng c php SQL. (xem li bi 9: ngn ng SQL v
MYSQL c bn). Ngc li khi khng tn ti password th ta ch cp nht username v
level.

Page 138 of 413

Mt iu na chng ta cn quan tm l i vi lnh update v delete, ta phi truyn 1


id c th trnh vic chng xa hoc sa d liu ton b trong bng user. Vi id ti
truyn nhn t bn ngoi ta s c.
01 <?php
02 if($u && $p && $l )
03 {
04

$sql="update user set username='".$u."', password='".$p."',


level='".$l."' where id='".$id."'";

05 mysql_query($sql);
06 header("location:mana_user.php");
07 exit();
08 }
09 else
10 {
11 if($u && $l)
12 {
$sql="update user set username='".$u."', level='".$l."' where
id='".$id."'";
14
mysql_query($sql);
13

15
16

header("location:mana_user.php");
exit();

17 }
18 }
19 ?>

Sau khi sa thnh cng mt thnh vin chng ta s a ngi dng tr v vi trang qun
l (xem bi 13 bit cch xy dng trang qun l thnh vin nh th no)

Ni dung ca ton b code trn nh sau:


01 <?php
$conn=mysql_connect("localhost","root","root") or die("can't connect
02
this database");
03 mysql_select_db("project",$conn);
04 $id=$_GET['userid'];
05 if(isset($_POST['ok']))
06 {
07 if($_POST['user'] == NULL)
08 {
09
echo "Please enter your username";
10 }

Page 139 of 413

11 else
12 {
13
$u=$_POST['user'];
14 }
15 if($_POST['pass'] != $_POST['repass'])
16 {
17
echo "Password and re-password is not correct";
18 }
19 else
20 {
21
22

if($_POST['pass'] != NULL)
{

23
24

$p=$_POST['pass'];
}

25 }
26 $l = $_POST['level'];
27 if($u && $p && $l )
28 {
$sql="update user set username='".$u."', password='".$p."',
level='".$l."' where id='".$id."'";
30
mysql_query($sql);
29

31
32

header("location:mana_user.php");
exit();

33 }
34 else
35 {
36
if($u && $l)
37
38

{
$sql="update user set username='".$u."', level='".$l."' where
id='".$id."'";

39
40

mysql_query($sql);
header("location:mana_user.php");

41
42

exit();
}

43 }
44 }
45 $sql="select * from user where id='".$id."'";
46 $query=mysql_query($sql);
47 $row=mysql_fetch_array($query);
48 ?>
49 <form action="edit_user.php?userid=<?=$id?>" method=post>
50 Level: <select name=level>
51 <option value=1 <? if($row[level] == 1) echo "selected"; ?>)

Page 140 of 413

>Member</option>
<option value=2 <? if($row[level] == 2) echo "selected";
52
?>>Administrator</option>
53 </select><br />
Username: <input type=text name=user size=20
54
value="<?=$row[username]?>" /><br />
55 Password: <input type=password name=pass size=20 /> <br />
56 Re-password: <input type=password name=repass size=20 /><br />
57 <input type=submit name=ok value="Edit User" />
58 </form>

B- Xy dng trang xa thnh vin:

i vi trang xa d liu, chng ta cng khng cn phi x l qu nhiu. Bi nhim v


ca chng ch n gin l xa i nhng dng trong bng.

Nh vy cng nh trang edit chng ta nhn gi tr t ni dung lin kt trang qun l


gi l del_user.php?userid=$row[id].

V thc thi lnh kt ni csdl x l ni dung ny.


1 <?php
$conn=mysql_connect("localhost","root","root") or die("can't connect
2
this database");
3 mysql_select_db("project",$conn);
4 $sql="delete from user where id='".$id."'";
5 mysql_query($sql);
6 header("location:mana_user.php");
7 exit();
8 ?>

Sau khi xa xong thnh vin th h thng s a chng ta tr v trang qun l user li.

C- Tng kt:

Page 141 of 413

Nh vy chng ta kt thc cc thao tc thm, sa, xa, qun l thnh vin. Qua nhng
chui bi hc ny, chc hn cc bn c nhng khi nim hnh thnh t vic ng dng
lp trnh PHP xy dng cc h thng c bn ri. Vic lp trnh 1 ng dng i hi bn
ngoi vic vn dng ni dung hc ra, bn cn phi bit linh ng x l cc tnh hung
mt cch hiu qu. Trnh vic rp khun mt cch my mc v hc thuc cc ni dung
code. V nhng m hnh khc, bi ton khc bn s c nhng cch thc x l v gii
quyt khc nhau.
Mi s gp , cng nh thc mc ca cc bn dnh cho bi vit vui lng s dng tnh
nng tho lun ti din n. Hoc thng qua vic lin h ca h thng website. Mong
s nhn c nhiu kin ng gp t cc bn.

Bi 15: Vit ng dng to m xc nhn bng PHP


nhng bi trc, chng ta tm hiu v cch lm vic vi PHP
kt hp MYSQL trong vic xy dng h thng thm, sa, xa v
qun l user. Trong bi ny, chng ta tip tc tm hiu phng
php to dy s ngu nhin chng tn cng flood d liu. Hoc
ai c tnh spam khin c s d liu ca chng ta khng th x
l tip c.

Trc tin, chng ta tin hnh to form HTML n gin thc thi thao tc nhp liu
nh sau:
01 <form action="form.php" method=post>
02 <table>
03 <tr>
04
<td align="left">
05
06

<label for="captcha">Captcha</label>
</td>

07
08

<td>
<input type="text" name="txtCaptcha" maxlength="10" size="32" />

09
10

</td>
<td>

11
12

<img src="random_image.php" />


</td>

13 </tr>
14 <tr>
15
16

<td> </td>
<td>

Page 142 of 413

17
18

<input type=submit name=ok value="Check" />


</td>

19 </tr>
20 </table>
21 </form>

Chng ta ch phn hnh nh, ti y ti truyn ng dn chnh l lin kt ti trang


random_image.php. Trang ny s thc thi cng vic to ra nhng bc hnh c dy s
ngu nhin phn nhp liu ca ngi s dng tham chiu ti.

Tip theo, chng ta khi to file random_image.php ly ra dy s ngu nhin v pht


sinh chng ngay trn tm hnh cho ngi truy cp nhp liu.

lm c iu . Chng ta s khi to session v lu dy s nhp liu vo session


ca mnh, sau so khp vi trang form bn kia.(xem li bi 7: Khi nim c bn v
cookie v session trong PHP)

u tin chng ta s dng hm md5 v ran m ha cc k t bao gm s v ch ci.


Khi s dng hm md5() k t pht sinh s ln ti 32 k t. V chng ta ch ly duy nht
5 k t t chui m ha bng hm substr. Tip tc ta lu on m ha ny trong
session c th $_SESSION['security_code'], ti trang form ta s s dng so snh vi
phn nhp liu ca ngi s dng.

Vy nn on code di s gii quyt cc tnh hung ny.


1 <?php
2 $md5_hash = md5(rand(0,999));
3 $security_code = substr($md5_hash, 15, 5);
4 $_SESSION["security_code"] = $security_code;
5 ?>

Page 143 of 413

K n ta khi to tm hnh vi chiu rng v chiu cao m ta thit lp thng qua hm


ImageCreate() . V tip tc khai bo 2 mu chnh l trng v en bng hm
ImageColorAllocate($image, red, green, blue ). Hm ny s to ra mt mu sc t h
mu RGB trn tm hnh m chng ta va khi to.

Tip tc ta background ca tm hnh s l mu en v ch xut hin trn tm hnh s


l mu trng bng hm ImageFill() v hm ImageString(). Hm ImageString c mt s
i s c bn nh sau: ImageString($image, 5, 30, 6, $security_code, $white); Trong :

+ $image l hnh m chng ta khi to.

+ 5: l font-size m chng ta quy c cho k t xut hin trn hnh.

+ 30: l khong cch bn tri ca tm hnh.

+ 6 : l khong cch t trn ca tm hnh.

+ $security_code: l on code sau khi chng ta ct ra trn.

+ $white: l mu sc m chng ta s dng hm ImageColorAllocate() trn khi


to ra mu trng.
1 <?php
2 $width = 100;
3 $height = 30;
4 $image = ImageCreate($width, $height);
5 $white = ImageColorAllocate($image, 255, 255, 255);
6 $black = ImageColorAllocate($image, 0, 0, 0);
7 ImageFill($image, 0, 0, $black);
8 ImageString($image, 5, 30, 6, $security_code, $white);
9 ?>

Page 144 of 413

K ti chng ta s s dng lnh header tr ni dung ny tr v d liu dng hnh. V


tin hnh khi to nh dng cho file hnh m chng ta va to l JPG ng thi gii
phng hnh tm c s dng khi to ra tm hnh ny bng on code sau:
1 <?php
2 header("Content-Type: image/jpeg");
3 ImageJpeg($image);
4 ImageDestroy($image);
5 ?>

d qun l chng ta s t tt c on code trn vo trong 1 hm d s dng v


qun l chng tt hn. Vy ton b on code trong trang random_image.php ny nh
sau.
01 <?php
02 session_start();
03 function create_image()
04 {
05 $md5_hash = md5(rand(0,999));
06 $security_code = substr($md5_hash, 15, 5);
07 $_SESSION["security_code"] = $security_code;
08 $width = 100;
09 $height = 30;
10 $image = ImageCreate($width, $height);
11 $white = ImageColorAllocate($image, 255, 255, 255);
12 $black = ImageColorAllocate($image, 0, 0, 0);
13 ImageFill($image, 0, 0, $black);
14 ImageString($image, 5, 30, 6, $security_code, $white);
15 header("Content-Type: image/jpeg");
16 ImageJpeg($image);
17 ImageDestroy($image);
18 }
19 create_image() ;
20 exit();
21 ?>

Tip tc, trong trang form chng ta phi khi to session chng nhn c cc gi tr
m ta khi to v s dng trang random_image, k ti ta kim tra xem ngi dng
c nhn submit cha. Nu c ta s tip tc kim tra xem ngi dng nhp vo textbox c
ng l dy s hin th trn hnh nh hay khng. V xut ra thng bo tng ng vi ni
dung ca ngi nhp liu. (xem li bi 4: X l gi tr form trong PHP)

Page 145 of 413

Sau y l ton b code ca trang form.php.


01 <?php
02 session_start();
03 if(isset($_POST['ok']))
04 {
05 if($_POST['txtCaptcha'] == NULL)
06 {
07
echo "Please enter your code";
08 }
09 else
10 {
11
12

if($_POST['txtCaptcha'] == $_SESSION['security_code'])
{

13
14

15
16

else
{

17
18

echo "ma lenh hop le";

echo "Ma lenh khong hop le";


}

19 }
20 }
21 ?>
22 <form action="form.php" method=post>
23 <table>
24 <tr>
25
26

<td align="left">
<label for="captcha">Captcha</label>

27
28

</td>
<td>

29
30

<input type="text" name="txtCaptcha" maxlength="10" size="32" />


</td>

31
32

<td>
<img src="random_image.php" />

33
</td>
34 </tr>
35 <tr>
36
<td> </td>
37
38

<td>
<input type=submit name=ok value="Check" />

39
</td>
40 </tr>
41 </table>

Page 146 of 413

42 </form>

Download ton b source code ny ti y.

Tng kt:

Qua bi hc ny, chng ta hiu c nguyn tc x l v nhng hm c bn m 1 h


thng khi s dng captcha cn phi vn dng nh th no. V tt nhin hm x l
captcha ny cng ch mang kin trc tng i. tng cng tnh bo mt hn, cc bn
nn s dng 1 s hm chuyn dng nhm m ha hoc gy ni dung kh nhn hn
chn cc tools hoc cc h thng bot c th qua mt thng s ny.
Mi s gp , cng nh thc mc ca cc bn dnh cho bi vit vui lng s dng tnh
nng tho lun ti din n. Hoc thng qua vic lin h ca h thng website. Mong
s nhn c nhiu kin ng gp t cc bn.

Bi 16: 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. (xem li bi bi 9: ngn ng SQL v


MYSQL c bn)
1 mysql> create table useronline(tgtmp INT(15) DEFAULT "0" NOT NULL ,
2 ip VARCHAR(50) NOT NULL ,
3 local VARCHAR(100) NOT NULL,
4 PRIMARY KEY(tgtmp),
5 KEY ip(ip),
6 KEY local(local));

tgtmp l thi gian m h truy cp c tnh khi h truy vo trang web .

Page 147 of 413

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.
1 <?php
2 $tg=time();
3 $tgout=900;
4 $tgnew=$tg - $tgout;
5 ?>

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.

Page 148 of 413

Vy ta c code kt ni CSDL nh sau:(xem li bi 10: kt hp PHP v MYSQL trong


ng dng)
1 <?php
$conn=mysql_connect("localhost","root","root") or die("can't
2
connect");
3 mysql_select_db("online",$conn);
4 ?>

Sau ta tin hnh ghi nhn thng tin ngi dng vo CSDL.
1 <?php
$sql="insert into useronline(tgtmp,ip,local)
2
values('$tg','$REMOTE_ADDR','$PHP_SELF')";
3 $query=mysql_query($sql);
4 ?>

$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.
1 <?php
2 $sql="delete from useronline where tgtmp < $tgnew";
3 $query=mysql_query($sql);
4 ?>

Tip tc l cng vic hin th thng tin ra bn ngoi bng cch lit k cc record c trong
database.
1 <?php
2 $sql="SELECT DISTINCT ip FROM useronline WHERE local='$PHP_SELF'";
3 $query=mysql_query($sql);
4 $user = mysql_num_rows($query);
5 ?>

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.

Page 149 of 413

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


01 <?php
02 $tg=time();
03 $tgout=900;
04 $tgnew=$tg - $tgout;
$conn=mysql_connect("localhost","root","root") or die("can't
connect");
06 mysql_select_db("online",$conn);
05

$sql="insert into useronline(tgtmp,ip,local)


values('$tg','$REMOTE_ADDR','$PHP_SELF')";
08 $query=mysql_query($sql);
07

09 $sql="delete from useronline where tgtmp < $tgnew";


10 $query=mysql_query($sql);
11 $sql="SELECT DISTINCT ip FROM useronline WHERE local='$PHP_SELF'";
12 $query=mysql_query($sql);
13 $user = mysql_num_rows($query);
14 echo "user online :$user";
15 ?>

Bi 17: Xy dng h thng bnh chn bng PHP v


MYSQL
lot bi trc, chng ta bn ti cc ng dng qun l ngi
s dng, xy dng b m, to m bo mt phng chng
nhng ngi c dng xu trn website. Tip theo, trong bi ny
chng ta s bn v cch thc xy dng h thng cho php ngi
dng bnh chn khi h tin hnh thm ving website ca chng ta.
xy dng h thng bnh chn chng ta cn phn tch xem h thng ny cn c bao
nhiu bng quan h.

A- Phn tch v thit k c s d liu:


Page 150 of 413

Trong tnh hung ny chng ta cn 1 bng cu hi v 1 bng cu tr li.

Phn tch quan h gia chng ta c:

1 Cu hi c nhiu cu tr li.

1 cu tr li ch dnh cho 1 cu hi.


Vy gia 2 bng ny s pht sinh mt kha ngoi, l kha dng lin kt gia hai bng
ny.

Vy ta c c php to 2 bng nh sau.


Bng cu hi ( question)
mysql> create table question(qid INT(10) UNSIGNED NOT NULL
AUTO_INCREMENT,
2 -> qtitle VARCHAR(255) NOT NULL,
1

3 -> qdate DATE NOT NULL DEFAULT '0000-00-00',

Page 151 of 413

4 -> PRIMARY KEY(qid));

Bng cu tr li (anwser)
1 mysql> create table answer(aid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
2 -> qid INT(10) UNSIGNED NOT NULL,
3 -> atitle VARCHAR(255) NOT NULL,
4 -> acount INT(10) NOT NULL DEFAULT '0',
5 -> PRIMARY KEY(aid));
Nhp liu bng CSDL ta c:
mysql> Insert into question(qtitle,qdate) values("Ban thay qhonline the
nao ?","
2 2009-10-10");

mysql> Insert into answer(qid,atitle,acount) values("1","Nhin rat


dep",0);
4 mysql> Insert into answer(qid,atitle,acount) values("1","Nhin Dep",0);
3

mysql> Insert into answer(qid,atitle,acount) values("1","Nhin Cung


duoc",0);
mysql> Insert into answer(qid,atitle,acount) values("1","Nhin qua
6
xau",0);
5

B- Xy dng trang bnh chn poll.php

Kt ni c s d liu:
1 <?php
$conn=mysql_connect("localhost","root","root") or die("can not connect
2
database");
3 mysql_select_db("poll_exam",$conn);
4 ?>

La chn cu hi c trong c s d liu lit k ra trn website, sau ta li tip tc


lit k cc cu tr li ca cu hi bng cch s dng du chn la (radio). Nh vy
chng ta s phi chy cng lc 2 cu truy vn lng nhau trong sut qu trnh truy xut.
01 <?php
02 $sql="select * from question order by qid desc";
03 $query=mysql_query($sql);
04 if(mysql_num_rows($query) > 0)
05 {
06 $row=mysql_fetch_array($query);
07 $qid=$row[qid];

Page 152 of 413

08 echo "<form action='poll.php?questionid=$qid' method='post' >";


09 echo "<h2>$row[qtitle]</h2>";
10 $sql2="select * from answer where qid='$qid' order by aid";
11 $query2=mysql_query($sql2);
12 if(mysql_num_rows($query2) > 0)
13 {
14
while($row2=mysql_fetch_array($query2)){
echo "<input type=radio name=answer
value=$row2[aid]>$row2[atitle]<br />";
16
}
15

17 }
18 echo "<input type='submit' name='ok' value='Binh Chon'>";
19 echo "<a href='result.php?questionid=$qid'>Xem Ket Qua</a>";
20 echo "</form>";
21 }
22 ?>

V mn hnh s xut ra nh hnh bn di

V khi ngi dng nht nt Bnh chn, chng ta s gi li chnh trang x l d liu
m ngi dng va la chn.

Vy ta phi s dng lnh isset() kim tra xem ngi dng c nhn nt bnh chn
khng, tip n ta ly ra id m ngi dng va tin hnh chn form bn di.

Page 153 of 413

Cui cng ta cp nht d liu bng cch ly s trong c s d liu cng tip cho 1 n v
na. V a ngi dng sang trang kt qu.

V trong on code ny c lnh header nn chng ta phi t qu trnh x l ny trn


form. Nu khng s b li d liu khi gi.
01 <?php
02 if(isset($_POST['ok']))
03 {
04 $id=$_POST['answer'];
05 $qid=$_GET['questionid'];
06 $sql3="update answer set acount=acount + 1 where aid='".$id."'";
07 mysql_query($sql3);
08 header("location: result.php?questionid=$qid");
09 exit();
10 }
11 ?>

Vy ton b code ca trang poll.php ny nh sau.


01 <?php
$conn=mysql_connect("localhost","root","root") or die("can not
02
connect database");
03 mysql_select_db("poll_exam",$conn);
04 if(isset($_POST['ok']))
05 {
06 $id=$_POST['answer'];
07 $qid=$_GET['questionid'];
08 $sql3="update answer set acount=acount + 1 where aid='".$id."'";
09 mysql_query($sql3);
10 header("location: result.php?questionid=$qid");
11 exit();
12 }
13 $sql="select * from question order by qid desc";
14 $query=mysql_query($sql);
15 if(mysql_num_rows($query) > 0)
16 {
17 $row=mysql_fetch_array($query);
18 $qid=$row[qid];
19 echo "<form action='poll.php?questionid=$qid' method='post' >";
20 echo "<h2>$row[qtitle]</h2>";
21 $sql2="select * from answer where qid='$qid' order by aid";

Page 154 of 413

22 $query2=mysql_query($sql2);
23 if(mysql_num_rows($query2) > 0)
24 {
25

while($row2=mysql_fetch_array($query2)){
echo "<input type=radio name=answer
26
value=$row2[aid]>$row2[atitle]<br />";
27
}
28 }
29 echo "<input type='submit' name='ok' value='Binh Chon'>";
30 echo "<a href='result.php?questionid=$qid'>Xem Ket Qua</a>";
31 echo "</form>";
32 }
33 ?>

C- Xy dng trang kt qu bnh chn result.php

trang ny, ta s ly gi tr question id ca ngi bnh chn t trang poll.php v tnh


ton xem t l phn trm ca cc cu hi y nh th no.

u tin, ta ly gi tr t poll.php?questionid=1. vy 1 l gi tr ta s c c t
$_GET['questionid']. Tip n ta li dng gi tr va ly c ny lit k thng tin cu
hi v tnh ton gi tr.

tnh ton gi tr, ta cn bit tng s bnh chn trong ton b cc cu tr li hin nay l
bao nhiu. Bng cu lnh SUM ta c th lm c iu .
1

$sql2="select qid, SUM(acount) as total from answer group by qid


having qid='".$qid."'";

Cu lnh ny cho php ta ly ra tng s bnh chn trong c s d liu ca cu hi m ta


truyn vo. SUM c acount ta cn phi GROUP(gom nhm) chng ta li theo m
cu hi m chng ta cn tm. having l mnh theo sau c ngha tng ng vi
where, n thng c s dng theo GROUP.

Nh vy ly ra tng s phiu bnh chn ta ch vic thc thi cu truy vn ny, v ly tn


ct tm l total.

Page 155 of 413

1 <?php
$sql2="select qid, SUM(acount) as total from answer group by qid
2
having qid='".$qid."'";
3 $query2=mysql_query($sql2);
4 $row2=mysql_fetch_array($query2);
5 $total=$row2[total];
6 ?>

k ti, ta li tnh ton s phiu ca tng cu hi trong c s d liu, da vo tng s cu


hi ny.

V d: Tng s lt bnh chn l 10


cu 1 l 3
cu 2 l 4
cu 3 l 2
cu 4 l 1
Vy suy ra phn trm trn tng s 10 ca 4 cu ny c tnh bng cch ly. s liu ca
tng cu chia cho tng s cu hi v nhn cho 100. V d cu 1 l: (3/10)*100 = 30%

lm trn kt qu ta s dng hm round(). Gip d liu a v s ng b v r rng


nht.

Vy code x l ca chng ta nh sau:


01 <?php
02 $sql3="select * from answer where qid='".$qid."' order by aid";
03 $query3=mysql_query($sql3);
04 if(mysql_num_rows($query3) > 0)
05 {
06 while($row3=mysql_fetch_array($query3)){
07 $percent=round(($row3[acount]/$total)*100,2);
echo "<h4 style='color:red; font:12px verdana; '>$row3[atitle] :
08
$row3[acount] ($percent %)</h4>";
09 }

Page 156 of 413

10 }
11 ?>

Kt qu khi xut ra s c hnh nh sau:

Vy ton b m ngun ca trang result.php ny nh sau:


01 <?php
$conn=mysql_connect("localhost","root","root") or die("can not
02
connect database");
03 mysql_select_db("poll_exam",$conn);
04 if(isset($_GET['questionid']))
05 {
06 $qid=$_GET['questionid'];
07 $sql="select * from question where qid='".$qid."'";
08 $query=mysql_query($sql);
09 $row=mysql_fetch_array($query);
10 echo "<h2>$row[qtitle]</h2>";
$sql2="select qid, SUM(acount) as total from answer group by qid
having qid='".$qid."'";
12 $query2=mysql_query($sql2);
11

13 $row2=mysql_fetch_array($query2);
14 $total=$row2[total];
15 $sql3="select * from answer where qid='".$qid."' order by aid";
16 $query3=mysql_query($sql3);
17 if(mysql_num_rows($query3) > 0){
18
while($row3=mysql_fetch_array($query3)){
19

$percent=round(($row3[acount]/$total)*100,2);
echo "<h4 style='color:red; font:12px verdana; '>$row3[atitle] :
20
$row3[acount] ($percent %)</h4>";

Page 157 of 413

21
}
22 }
23 }
24 ?>

Download ton b m ngun ca bi ny ti y.


Mi s gp , cng nh thc mc ca cc bn dnh cho bi vit vui lng s dng tnh
nng tho lun ti din n. Hoc thng qua vic lin h ca h thng website. Mong
s nhn c nhiu kin ng gp t cc bn.

Bi 18: Xy dng ng dng to trang upload nhiu


hnh nh
nhng bi trc, chng ta c dp nghin cu tng ng dng
nh bi vic kt hp PHP v Mysql. Trong bi ny, chng ta s
tip tc tm hiu phng php xy dng mt trang upload nhiu
hnh nh nh th no. V lu chng vo c s d liu ra sao trong
lp trnh php.
M hnh ny l rt cn thit i vi cc h thng. Bi qua
ngi s dng c th thao tc v upload nhng hnh nh i km
vi h thng ca h nh tin tc, sn phm,
u tin, ta tin hnh xy dng c s d liu vi bng images nh sau (xem li bi 9: c
bn v ngn ng sql v mysql).
1 CREATE TABLE `images` (
2 `img_id` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
3 `img_url` VARCHAR( 255 ) NOT NULL ,
`img_name` VARCHAR( 150 ) NOT
4
NULL
5 );

Nh vy, ti c bng images vi 3 ct thuc tnh l img_id dng lu kha ca tng


hnh, img_url dng lu ng dn vo h thng, img_name dng lu tn hnh nh.
ng dng ca chng ta cng rt cn s ty bin v d s dng. Sao cho ngi dng c
th hon ton thao tc. V d: nu c 2 hnh, h ch mun to ra 2 ch chn file th s
ch khai bo l 2. V ngc li nu l n hnh, h s to c n file la chn. lm c
iu ny, trc tin ta cn to 1 form nh cho php ngi dng nhp vo s lng file m
h mun thao tc. Vy ti khi to file c tn upload.php vi m lnh form nh sau:
1 <form action="upload.php" method="post">
Enter your Image: <input type="text" name="txtnum" value="<?php echo
2
$_POST['txtnum']; ?>" size="10" />

Page 158 of 413

3 <input type="submit" name="ok_num" value="Accept" />


4 </form>

Sau khi ngi dng nhn nt accept th cng l lc chng ta to ra s field upload theo
yu cu ca h. Vy, ta c code x l bn di nh sau: (xem li bi 4: x l gi tr trn
form).
01 <?php
02 if(isset($_POST['ok_num']))
03 {
04

$num=$_POST['txtnum'];

05
06

echo "<hr />";


echo "Ban dang chon $num file upload<br />";

echo "<form action='doupload.php?file=$num' method='post'


enctype='multipart/form-data'>";
08
for($i=1; $i <= $num; $i++)
07

09
10

{
echo "<input type='file' name='img[]' /><br />";

11

}
echo "<input type='submit' name='ok_upload'
12
value='Upload' />";
13
14 }

echo "</form>";

15 ?>

on code ny s dng vng lp for vi iu kin l bin $i s nh hn s file m h


nhp vo. ng thi, vic upload thnh cng ti form ta cng cn thm on code :
enctype='multipart/form-data'.
S lng field s lp theo yu cu ca ngi dng. Do vy. ti name ca th input, ta s
s dng mng lu thng tin. S dng name='img[]', c ngha l mi ln lp v mi ln
ngi dng chn file th mng img s thm 1 kha tng ng. (xem li bi 6: tng quan
v mng v cc hm h tr)
V cui cng l nt submit thc thi cng vic upload v gi ti trang
doupload.php?file=$num (ch r s file c th do ngi dng nhp ti trang doupload).

Page 159 of 413

Vy ton b code ca trang upload ny s nh sau:


01 <form action="upload.php" method="post">
Enter your Image: <input type="text" name="txtnum" value="<?php echo
02
$_POST['txtnum']; ?>" size="10" />
03 <input type="submit" name="ok_num" value="Accept" />
04 </form>
05 <?php
06 if(isset($_POST['ok_num']))
07 {
08

$num=$_POST['txtnum'];

09
10

echo "<hr />";


echo "Ban dang chon $num file upload<br />";

echo "<form action='doupload.php?file=$num' method='post'


enctype='multipart/form-data'>";
12
for($i=1; $i <= $num; $i++)
11

13
14

{
echo "<input type='file' name='img[]' /><br />";

15

}
echo "<input type='submit' name='ok_upload'
16
value='Upload' />";
17
18 }

echo "</form>";

19 ?>

Ti trang thc hin nhim v doupload.php ta cn kim tra xem, ngi dng c nhn nt
upload t trang bn kia hay khng ?. Nu c ta s x l cng on upload y, nu khng
ta cn thng bo li cho ngi dng v yu cu h chn file.
01 <<?php
02 if(isset($_POST['ok_upload']))
03 {
04

//thc thi upload

05 }
06 else

Page 160 of 413

07 {
08

echo "Vui long chon hinh truoc khi truy cap vao trang nay";

09 }
10 ?>

Nh vy, khi ngi dng nhn upload, ta s ly c tham s l bin $num t lin kt
$_GET[file'] m ta thit lp trn phn form action ca file upload trang trc.
Bin $num ny dng thc thi vic upload v tun t ly cc thng tin ca file.
upload file t my ln h thng ta cn s dng hm:
move_uploaded_file(tn_file_tm,ng dn ti h thng).
C th din gii nm na cng vic ca hm ny nh sau: Ngay sau khi ngi dng nhn
upload, h thng s to ra 5 tham s ng vi tng file. C th l tn tm (tmp_name), tn
gc (name), kch thc (size), nh dng mime (type) v li (error) nu c. V khc vi
kiu nhp liu thng thng, khi chng ta s dng <input type=file name=ten> th lc
ny s pht sinh mt bin mi trng mi l $_FILES[ten'] v d nhin n s i km vi
5 tham s c th trn.
V d: $_FILES[ten'][name'] //Ly ra tn gc ca file.
Vy ng vi c php upload trn ta s c:
move_uploaded_file($_FILES['img']['tmp_name'],"data/".$_FILES['img']['name']);
C php ny s t ng upload hnh nh ln th mc data trn h thng. Vy ta cn phi
to th mc data ngang cp vi 2 file upload v doupload. Nu l host tht, bn cn
CHMOD th mc l 777 (cho php th mc c ton quyn) th mi thc thi upload file
c.
Trong tnh hung ca chng ta, v l upload mt lc nhiu file, nn lc ny ta phi s
dng tham s mng ti trang upload ta khi to.
Vy ng vi bin $num ta nhn t upload trn ta s trin khai code n gin nh sau:
1 <?php
2 for($i=0; $i< $num; $i++)
3

{
move_uploaded_file($_FILES['img']['tmp_name'][$i],"data/".$_FILES['im
4
g']['name'][$i]);
5 $url="data/".$_FILES['img']['name'][$i];
6 $name=$_FILES['img']['name'][$i];
7}
8 ?>

Page 161 of 413

Vi bin $i l s lng tng ln theo vng lp. V mng lun bt u bi kha l 0 nn ta


cn phi thit lp khi to bin $i vi gi tr l 0. Bin $url v $name l ng dn hnh
nh v tn gc ca tm hnh c s dng lu vo CSDL.
K ti, ta cn lu thng tin hnh nh tng ng vo c s d liu. lm c iu ny,
ta cn kt ni CSDL vi c php sau: (xem li bi 10: kt hp php & mysql trong ng
dng website).
1 <?php
$conn=mysql_connect("localhost","root","root") or die("can't connect
2
your database");
3 mysql_select_db("images",$conn);
4 ?>

Nh vy mi khi upload thnh cng mt hnh nh, ta phi thm hnh nh vo CSDL
nh sau:
1 <?php
2 $sql="insert into images(img_url,img_name) values('$url','$name')";
3 mysql_query($sql);
4 ?>

Sau khi thm vo CSDL ta cn hin th thng tin v hnh nh va upload cho ngi
dng bit h upload thnh cng.
Khi ta s dng mt bin $site lu ng dn gc hin th trn textbox.

Page 162 of 413

Vy hon chnh code cho file doupload.php ny nh sau:


01 <?php
02 $site="http://www.qhonline.info";
03 if(isset($_POST['ok_upload']))
04 {
05 $num=$_GET['file'];
06 echo "<h3>Demo Images Script - Copyright by QHOnline.Info</h3>";
$conn=mysql_connect("localhost","root","root") or die("can't connect
your database");
08 mysql_select_db("images",$conn);
07

09 for($i=0; $i< $num; $i++)


10 {
1
move_uploaded_file($_FILES['img']['tmp_name'][$i],"data/".$_FILES['
1 img']['name'][$i]);
12
$url="data/".$_FILES['img']['name'][$i];
13
14

$name=$_FILES['img']['name'][$i];
$sql="insert into images(img_url,img_name) values('$url','$name')";

15
16

mysql_query($sql);
echo "Upload Thanh cong file <b>$name</b><br />";

17
18

echo "<img src='$url' width='120' /><br />";


echo "Images URL: <input type='text' name='link' value='$site/$url'

Page 163 of 413

size='35' /><br />";


19
20

21 mysql_close($conn);
22 }
23 else
24 {
25 echo "Vui long chon hinh truoc khi truy cap vao trang nay";
26 }
27 ?>

Download ton b m ngun ca bi ny ti y.


Mi s gp , cng nh thc mc ca cc bn dnh cho bi vit vui lng s dng tnh
nng tho lun ti din n. Hoc thng qua vic lin h ca h thng website. Mong
s nhn c nhiu kin ng gp t cc bn.

Bi 19: Vit ng dng to gi hng - shopping cart - phn 1


nhng bi trc, chng ta cp ti cc ng dng c bn,
gn gi vi mi trng lm vic ca chng ta. Trong bi ny, ti
s tip tc hng dn cc bn xy dng h thng gi hng
(shopping cart) mt ng dng ph bin rt thng gp trn cc
website cung cp sn phm hin nay. N gn nh c thay th
cho vic mua sm, vic la chn th cng m chng ta vn
thng lm.
Do ni dung v kin thc ca bi ny kh di, nn ti s trnh by bi vit ny 2 phn,
gip cc bn d theo di v d nm bt cc kin thc m ti cp v ng dng.

Phn 1: Xy dng trang hin th sn phm.


u tin, ta khi to bng CSDL n gin nh sau (xem li bi 9: c bn v ngn ng
sql v mysql)
1 CREATE TABLE `books` (
2
`id` int(10) unsigned NOT NULL auto_increment,
3
4

`title` varchar(255) NOT NULL,


`author` varchar(100) NOT NULL,

`price` int(30) NOT NULL,

PRIMARY KEY (`id`)

7 );

Page 164 of 413

trn l mt bng lu thng tin ca cc quyn sch vi tn, tc gi, gi tin ca cc


quyn sch.
1 INSERT INTO `books` VALUES (1, 'PHP Can Ban', 'Kenny', 115);
2 INSERT INTO `books` VALUES (2, 'PHP Nang Cao', 'Kenny', 150);
3 INSERT INTO `books` VALUES (3, 'PHP Framework', 'Kenny', 300);
4 INSERT INTO `books` VALUES (4, 'Joomla Can Ban', 'Kenny', 100);

Tip tc ta to file style.css trnh by d liu p mt


01 body{
02 font:12px verdana;
03 }
04 .pro{
05 border:1px solid #999999;
06 margin:5px;
07 padding:5px;
08 width:400px;
09 }
10 a{
11 color:#666666;
12 text-decoration:none;
13 font-weight:900;
14 }
15 #cart{
16 border:1px solid #999999;
17 margin:5px;
18 padding:5px;
19 width:400px;
20 text-align:center;
21 }

Sau khi hon tt vic chun b c s d liu v giao din, tip theo ta s xy dng
trang hin th cc mn hng trn website, cho php ngi s dng la chn sch khi truy
cp.
lit k danh sch cc quyn sch ang c trong database, ta cn kt ni CSDL vi
thao tc code nh sau. (xem li bi 10: kt hp php & mysql trong ng dng website).
1 <?php
2 $connect=mysql_connect("localhost","root","root")
3 or die("Can not connect database");
4 mysql_select_db("shop",$connect);
5 ?>

Lc ny, ta c th lit k cc quyn sch bng c php sau:


01 <?php
02 $sql="select * from books order by id desc";

Page 165 of 413

03 $query=mysql_query($sql);
04 if(mysql_num_rows($query) > 0)
05 {
06 while($row=mysql_fetch_array($query))
07 {
08
echo "<div class='pro'>";
09

echo "<h3>$row[title]</h3>";
echo "Tac Gia: $row[author] - Gia: ".number_format($row[price],3)."
10
VND<br />";
echo "<p align='right'><a href='addcart.php?item=$row[id]'>Mua Sach
Nay</a></p>";
12
echo "</div>";
11

13 }
14 }
15 ?>

on code trn thc thi vic hin th sch nu trong CSDL t nht 1 record. V chng
s lit k tiu sch, tc gi, gi tin. y, ti s dng number_format() ly ra 3 s
000 cui, ng vi n v tin t ca Vit Nam l VN.
Sau cng ti to mt lin kt cho php thm quyn sch vo gi hng nu ngi mua
cm thy ng . (addcart.php s l trang thm vo gi hng vi tham s l m ca quyn
sch).

Ni n ng dng shopping cart th hin nay, trn th trng tn ti nhiu phng php
code. C th s dng chui lu gi hng, cng c th lu vo CSDL nhp gi hng
ca ngi dng v cng c th s dng mng v session lu thng tin gi hng. Trong
khun kh bi vit ny, ti s s dng session v mng lu thng tin gi hng. (xem
li Bi 7: Khi nim c bn v Cookie v session trong PHP)

Page 166 of 413

Ti trang addcart.php ti cn khi to mt session v lu m quyn sch vo mt mng.


C th l: $_SESSION['cart'][$id] (xem li bi 6: tng quan v mng v cc hm h
tr). Vi $id l m quyn sch m ngi dng chn trang xem hng ha
(index.php). Mc ch chnh ca trang addcart ny l lu tr hoc tnh ton li s lng
sn phm khi m h la chn. (lu l s lng cc mn hng).
Mt vn t ra trong trang ny, l lm th no nhn bit mn hng ngi
chn hay cha. Chng hn. Ln u ti chn mua quyn A, sau ti quay li chn mua
tip quyn A. vy trong gi hng phi ghi nhn s lng quyn A ny l 2. Ch khng
th ch lu l 1 c.
Vy, lc ny ta s kim tra xem. Quyn sch m ta va chn c tn ti trong gi hng hay
cha. Nu c, ta phi tin hng ly s lng ang c tng ln 1 n v. Cn nu khng, ta
phi gn s lng ca chng l 1.
Code x l hon chnh trang addcart.php ny s nh sau:
01 <?php
02 session_start();
03 $id=$_GET['item'];
04 if(isset($_SESSION['cart'][$id]))
05 {
06 $qty = $_SESSION['cart'][$id] + 1;
07 }
08 else
09 {
10 $qty=1;
11 }
12 $_SESSION['cart'][$id]=$qty;
13 header("location:cart.php");
14 exit();
15 ?>

Nm na, chng ta c th hiu addcart ch n gin l x l s lng hng ha v lu


chng dng mng m thi.
Nh vy ti trang mua sch, ta cng cn cho khch hng bit rng trong gi hng ca h
hin ang c bao nhiu mn hng. Hoc nu cha c mn no, ta cng phi bo cho h
bit v vic .
Vy khi no th gi hng rng ?. l khi session ca gi hng khng tn ti Id ca
quyn sch no. C th, $_SESSION['cart'][id]. Khi id khng tn ti trong session ny th
cng l lc gi hng khng tn ti.

Page 167 of 413

Vy trc khi cho hin th gi hng, ta cn kim tra xem c tn ti id no trong gi hng
hay khng. V v id lu dng mng a chiu, nn ta cn dng vng lp duyt mng
foreach.
foreach($_SESSION[cart'] as $k=>$v)
Vi $k c ngha tng ng $id quyn sch v $v tng ng l s lng ca quyn
sch trong gi hng. Vy nu tn ti bin $k, th tc c ngha l trong gi hng c sch.
Khi ta s dng mt bin bo hiu rng sch c tn ti trong gi hng hay khng.
01 <?php
02 $ok=1;
03 if(isset($_SESSION['cart']))
04 {
05
06

foreach($_SESSION['cart'] as $k=>$v)
{

07
08

if(isset($k))
{

09
10

$ok=2;
}

11
}
12 }
13 if ($ok != 2)
14
{
15
echo '<p>Ban khong co mon hang nao trong gio hang</p>';
16 } else {
17

$items = $_SESSION['cart'];
echo '<p>Ban dang co <a href="cart.php">'.count($items).' mon hang
18
trong gio hang</a></p>';
19 }
20 ?>

Trong on code trn ta s dng hm count nhm m xem trong mng hin ti (gi
hng) hin ang c bao nhiu quyn sch. V thc thi vic bo cho ngi dng bit h
ang c bao nhiu quyn sch trong gi hng.
Ton b code x l ca trang mua sch (index.php) ny nh sau:
01 <?php
02 session_start();
03 ?>
04 <html>
05 <head>
06 <title>Demo Shopping Cart - Created By My Kenny</title>
07 <link rel="stylesheet" href="style.css" />
08 </head>
09 <body>

Page 168 of 413

10 <h1>Demo Shopping Cart</h1>


11 <div id='cart'>
12 <?php
13 $ok=1;
14 if(isset($_SESSION['cart']))
15 {
16
foreach($_SESSION['cart'] as $k=>$v)
17
18

{
if(isset($v))

19
20
21
22

{
$ok=2;
}
}

23 }
24 if ($ok != 2)
25
26

{
echo '<p>Ban khong co mon hang nao trong gio hang</p>';

27 } else {
28
$items = $_SESSION['cart'];
echo '<p>Ban dang co <a href="cart.php">'.count($items).' mon hang
trong gio hang</a></p>';
30 }
29

31 ?>
32 </div>
33 <?php
34 $connect=mysql_connect("localhost","root","root")
35 or die("Can not connect database");
36 mysql_select_db("shop",$connect);
37 $sql="select * from books order by id desc";
38 $query=mysql_query($sql);
39 if(mysql_num_rows($query) > 0)
40 {
41 while($row=mysql_fetch_array($query))
42 {
43
44

echo "<div class=pro>";


echo "<h3>$row[title]</h3>";

echo "Tac Gia: $row[author] - Gia: ".number_format($row[price],3)."


VND<br />";
echo "<p align='right'><a href='addcart.php?item=$row[id]'>Mua Sach
46
Nay</a></p>";
45

47
echo "</div>";
48 }
49 }

Page 169 of 413

50
51 ?>
52 </body>
53 </html>

Nh vy, trong bi ny chng ta hon tt trang xem sch v trang x l vic thm sn
phm mi vo gi hng nh th no. Mi cc bn c tip bi sau vi tnh nng qun l,
sa, xa tng mn hng hoc c gi hng trong h thng.

Bi 20: Vit ng dng to gi hng - shopping cart - phn 2


phn 1 ti trnh by phn hin th thng tin sch c trong c
s d liu, chu trnh thc thi ca vic thm mt quyn sch vo
gi hng. V c ch qun l gi hng ca chng ta nh th no.
Tip tc vi phn 2, ti s trnh by cch qun l gi hng nh
chnh sa mn hng, lit k hng ha trong gi hng v xa b
tng mn hng hay c gi hng nh th no. c th hiu c
phn 2. Cc bn vui lng xem li

Phn 2: Xy dng h thng qun l gi hng.


Sau khi thm mt mn hng, ti gi hng ta cng cn phi x l hin th cc mn
hng c trong gi. V nh phng php phn 1, chng ta tm lu m sch trong
session. (xem li Bi 7: Khi nim c bn v Cookie v session trong PHP) . Vy
trang gi hng ny, ta s khi to session v s dng vng lp duyt mng foreach lp
ton b m sch ang lu trong session. Tip tc, ta li chuyn chng sang dng chui
bng hm implode().
1 <?php
2 session_start();
3 foreach($_SESSION['cart'] as $key=>$value)
4{
5 $item[]=$key;
6}
7 $str=implode(",",$item);
8 ?>

Gi s lc ny chui ca chng ta s c dng 7,8,9. Cng vic tip theo l kt ni CSDL


lit k cc sn phm c m nh trn. (xem li bi 10: kt hp php & mysql trong
ng dng website). Thay v s dng select * from tn_bng where id= ??. Th ti u
hn, ti s s dng php in trong SQL. Lc ny cu truy vn s tng ng:
1 <?php
2 $sql="select * from books where id in ('$str') order by id desc";

Page 170 of 413

3 $query=mysql_query($sql);
4 while($row=mysql_fetch_array($query))
5 ?>

Tip tc, ta lp ton b thng tin sch bao gm tn, tc gi, gi tin v c s lng m ta
lu trong session l $_SESSION['cart'][ 'ID_Mn_Hng']. ID_Mn_hng chnh l
thng tin ta lp ra t CSDL ($row[id]).
Bn cnh ti phn s lng, ta s a gi tr lu session ra textbox (v ti gi hng,
ngi dng c php iu chnh s lng, nn lc ny ta cn to textbox cho h iu
chnh). V lp ton b cc quyn sch nn ti tn tn ca textbox s lng ta cng cn
truyn id nhn bit s lng thuc ID ca quyn sch no.
1 <?php
echo "<p align='right'>So Luong: <input type='text'
2 name='qty[$row[id]]' size='5' value='{$_SESSION['cart'][$row[id]]}' />
- ";
3 ?>

Chng ta cng cho ngi dng c php xa 1 mn hng no ra khi gi hng ca


h. Bng cch truyn m quyn sch ca tng quyn vo lin kt delcart.php.
1 <?php
2 echo "<a href='delcart.php?productid=$row[id]'>Xoa Sach Nay</a></p>";
3 ?>

Ti y, ta cng cn tnh lun gi tin ca tng quyn sch tng ng vi s lng m h


chn. Nh vy, s lng l phn ta lu session, cn gi tin l phn ta ly ra t
CSDL ng vi mng $row ($row['price']).
1 <?php
echo "<p align='right'> Gia tien cho mon hang: ".
2
number_format($_SESSION['cart'][$row[id]]*$row[price],3) ." VND</p>";
3 ?>

Sau cng, ta cn tnh tng tin ca ton b sn phm c trong gi hng. Bng cch cng
dn tng gi tin ca tng mn.
1 <?php
2 $total+=$_SESSION['cart'][$row[id]]*$row[price];
3 ?>

Phn cn li, l chng ta hin th gi tin vi ng nh dng VND ca Vit Nam.


1 <?php
echo "<b>Tong tien cho cac mon hang: <font color='red'>".
2
number_format($total,3)." VND</font></b>";
3 ?>

ng thi, ta cng to nt cho php ngi dng cp nht. V cho php ngi dng xa
ton b gi hng.
1 <?php
echo "<input type='submit' name='submit' value='Cap Nhat Gio Hang'
2
/>";

Page 171 of 413

3 echo "<div class='pro' align='center'>";


echo "<b><a href='index.php'>Mua Sach Tiep</a> - <a
4
href='delcart.php?productid=0'>Xoa Bo Gio Hang</a></b>";
5 ?>

Nh vy, code y s l:
01 <?php
02 echo "<form action='cart.php' method='post'>";
03 foreach($_SESSION['cart'] as $key=>$value)
04 {
05 $item[]=$key;
06 }
07 $str=implode(",",$item);
$connect=mysql_connect("localhost","root","root") or die("Can not
08
connect database");
09 mysql_select_db("shop",$connect);
10 $sql="select * from books where id in ($str)";
11 $query=mysql_query($sql);
12 while($row=mysql_fetch_array($query))
13 {
14 echo "<div class='pro'>";
15 echo "<h3>$row[title]</h3>";
echo "Tac gia: $row[author] - Gia: ".number_format($row[price],3)."
16
VND<br />";
echo "<p align='right'>So Luong: <input type='text'
17 name='qty[$row[id]]' size='5' value='{$_SESSION['cart'][$row[id]]}'>
- ";
echo "<a href='delcart.php?productid=$row[id]'>Xoa Sach
18
Nay</a></p>";
echo "<p align='right'> Gia tien cho mon hang: ".
number_format($_SESSION['cart'][$row[id]]*$row[price],3) ." VND</p>";
20 echo "</div>";
19

21 $total+=$_SESSION['cart'][$row[id]]*$row[price];
22 }
23 echo "<div class='pro' align='right'>";
echo "<b>Tong tien cho cac mon hang: <font color='red'>".
24
number_format($total,3)." VND</font></b>";
25 echo "</div>";
echo "<input type='submit' name='submit' value='Cap Nhat Gio Hang'
26
/>";
27 echo "<div class='pro' align='center'>";
echo "<b><a href='index.php'>Mua Sach Tiep</a> - <a
28
href='delcart.php?productid=0'>Xoa Bo Gio Hang</a></b>";
29 echo "</div>";
30 ?>

Page 172 of 413

Sau khi thit lp thnh cng trang gi hng c bn, lc ny ta c th thm sch mt
cch d dng. Tuy nhin, gi s trong trng hp khng c sch th sao ?. Chng ta vn
cha xt n trng hp gi hng rng th s nh th no. Vy khi no th gi hng rng
?. l khi session ca gi hng khng tn ti Id ca quyn sch no. C th,
$_SESSION[cart'][id]. Khi id khng tn ti trong session ny th cng l lc gi hng
khng tn ti.

Vy trc khi cho hin th gi hng, ta cn kim tra xem c tn ti id no trong gi hng
hay khng. V v id lu dng mng a chiu, nn ta cn dng vng lp duyt mng
foreach.
foreach($_SESSION[cart] as $k=>$v)
Vi $k c ngha tng ng $id quyn sch v $v tng ng l s lng ca quyn
sch trong gi hng. Vy nu tn ti bin $k, th tc c ngha l trong gi hng c sch.
01 <?php
02 $ok=1;
03 if(isset($_SESSION['cart']))
04 {
05 foreach($_SESSION['cart'] as $k => $v)
06 {
07

if(isset($k))

Page 173 of 413

08
09
10

{
$ok=2;
}

11 }
12 }
13 if($ok == 2)
14 {
15 // code x l gi hng trn.
16 }
17 ?>

on code ny, ta s dng bin $ok lm bin kim tra, mc nh khi load d liu bin
$ok s bng 1. V khi trong gi hng tn ti sch th chng ta s thay i bin $ok thnh
2. V gi gi hng nh code trn.
phn trn, ta cng c cp khi ngi dng tin hnh chnh sa s lng tng mn
hng n l qua textbox v nhn cp nhn th h thng s tin hnh chnh sa li thng
tin gi hng. Vy chng ta s x l nh th no cho trng hp .
Nu ch , cc bn s thy dng code cha textbox cho php ngi dng nhp s lng
c mt tham s c bit l name=qty[$row[id]]. Vy tham s ny c dng lm g ?.
Tham s ny, ni cho chng ta bit s lng ang hin th l thuc m sn phm no.
Vy khi tin hnh cp nht gi hng ta s kim tra, nu $qty[$row[id]] m c gi tr l 0.
Tc l ngi mun xa b gi hng. Ngc li, ta ch vic cp nht gi hng $id
tng ng vi s lng nhp textbox.
01 <?php
02 if(isset($_POST['submit']))
03 {
04 foreach($_POST['qty'] as $key=>$value)
05 {
06
if( ($value == 0) and (is_numeric($value)))
07
08

09
10

}
elseif(($value > 0) and (is_numeric($value)))

11
12

unset ($_SESSION['cart'][$key]);

$_SESSION['cart'][$key]=$value;

13
}
14 }
15 header("location:cart.php");
16 }
17 ?>

Page 174 of 413

Vic xa mn hng trn ch n gin l hy b session ca id . Vic cp nht s


lng ch n gin l gn s lng ngi nhp (th value trong textbox) vo s lng
ang lu trong session.
Vy code hon chnh ca trang cart.php ny s nh sau:
01 <?php
02 session_start();
03 if(isset($_POST['submit']))
04 {
05 foreach($_POST['qty'] as $key=>$value)
06 {
07
08

if( ($value == 0) and (is_numeric($value)))


{

09
10

11
12

elseif(($value > 0) and (is_numeric($value)))


{

13
14

unset ($_SESSION['cart'][$key]);

$_SESSION['cart'][$key]=$value;

15 }
16 header("location:cart.php");
17 }
18 ?>
19 <html>
20 <head>
21 <title>Demo Shopping Cart - Created By My Kenny</title>
22 <link rel="stylesheet" href="style.css" />
23 </head>
24 <body>
25 <h1>Demo Shopping Cart</h1>
26 <?
27 $ok=1;
28 if(isset($_SESSION['cart']))
29 {
30 foreach($_SESSION['cart'] as $k => $v)
31 {
32
if(isset($k))
33
34

{
$ok=2;

35
}
36 }
37 }
38 if($ok == 2)

Page 175 of 413

39 {
40
41
42

echo "<form action='cart.php' method='post'>";


foreach($_SESSION['cart'] as $key=>$value)

43
44

45
46

}
$str=implode(",",$item);

$item[]=$key;

$connect=mysql_connect("localhost","root","root") or die("Can not


connect database");
48
mysql_select_db("shop",$connect);
47

49
50

$sql="select * from books where id in ($str)";


$query=mysql_query($sql);

51
52

while($row=mysql_fetch_array($query))
{

53
54

echo "<div class='pro'>";


echo "<h3>$row[title]</h3>";

echo "Tac gia: $row[author] - Gia:


".number_format($row[price],3)." VND<br />";
echo "<p align='right'>So Luong: <input type='text'
56 name='qty[$row[id]]' size='5' value='{$_SESSION['cart'][$row[id]]}'>
- ";
55

echo "<a href='delcart.php?productid=$row[id]'>Xoa Sach


Nay</a></p>";
echo "<p align='right'> Gia tien cho mon hang: ".
58
number_format($_SESSION['cart'][$row[id]]*$row[price],3) ." VND</p>";
57

59
60
61
62

echo "</div>";
$total+=$_SESSION['cart'][$row[id]]*$row[price];
}
echo "<div class='pro' align='right'>";

echo "<b>Tong tien cho cac mon hang: <font color='red'>".


number_format($total,3)." VND</font></b>";
64
echo "</div>";
63

echo "<input type='submit' name='submit' value='Cap Nhat Gio


Hang'>";
66
echo "<div class='pro' align='center'>";
65

echo "<b><a href='index.php'>Mua Sach Tiep</a> - <a


href='delcart.php?productid=0'>Xoa Bo Gio Hang</a></b>";
68
echo "</div>";
67

69 }
70 else
71 {
72
echo "<div class='pro'>";
73

echo "<p align='center'>Ban khong co mon hang nao trong gio hang<br
/><a href='index.php'>Buy Ebook</a></p>";

Page 176 of 413

74

echo "</div>";

75 }
76 ?>
77 </body>
78 </html>

V cui cng, khi ngi dng nhn xa ton b gi hng hay ch xa mt mn hng, ta s
gi ti trang delcart.php. Vy trang ny s x l nh th no ?.
Ti y, ta c th nhn tham s l: $_GET[productid'];
Tham s ny s l $id m chng truyn qua lin kt. Nu xa ton b gi hng, tc ta s
truyn cho n gi tr bng 0. Lc ny, ta s hy ton b $_SESSION[cart']. Ngc li,
nu l mt $id c th, th ta ch xa mn hng m thi. $_SESSION[cart'][$id].
Code hon chnh ca file delcart.php nh sau:
01 <?php
02 session_start();
03 $cart=$_SESSION['cart'];
04 $id=$_GET['productid'];
05 if($id == 0)
06 {
07 unset($_SESSION['cart']);
08 }
09 else
10 {
11 unset($_SESSION['cart'][$id]);
12 }
13 header("location:cart.php");
14 exit();
15 ?>

Download ton b m ngun ca bi ny ti y.


Nh vy, chng ta hon tt vic xy dng hon chnh mt h thng shopping cart n
gin. Tuy rng, y khng phi l mt bi vit hon chnh trong vic xy dng m hnh
thng mi in t. Nhng qu , phn no gip cc bn hiu v d dng pht trin h
thng ca mnh c t chc hn.
Hy vng trong thi gian ti, ti s vit tip bi vit s dng m hnh thanh ton trc
tuyn (paypal) kt hp vi gi hng hon chnh bi hng dn v shopping cart ny.
Mi s gp , cng nh thc mc ca cc bn dnh cho bi vit vui lng s dng tnh
nng tho lun ti din n. Hoc thng qua vic tr li vi khung phn hi bn di.
Mong s nhn c nhiu kin ng gp t cc bn.

Page 177 of 413

Chapter 30 : Cc hm
PHP 5 mng chc nng
Cc mng chc nng PHP l mt phn ca li PHP. Khng cn ci t s dng cc chc
nng ny.
Chc nng

M t

array ()

To ra mt mng

array_change_key_case ()

Thay i tt c cc phm trong mt mng ch thng hoc ch hoa

array_chunk ()

Chia mt mng thnh nhiu phn ca mng

array_combine ()

To ra mt mng bng cch s dng cc yu t t mt mng "cha kha" v m


mng "gi tr"

array_count_values ()

Tr v mt mng vi s ln xut hin cho mi gi tr

array_diff ()

So snh gi tr mng, v tr v s khc bit

array_diff_assoc ()

So snh mng v gi tr, v tr li s khc bit

array_diff_key ()

So snh trong mng, v tr li s khc bit

array_diff_uassoc ()

So snh mng v gi tr, vi mt kim tra chc nng b sung ngi dng to, v
tr li s khc bit

array_diff_ukey ()

So snh cc kha mng, vi mt kim tra chc nng b sung ngi dng to, v
tr li s khc bit

array_fill ()

in vo mt mng vi gi tr

array_fill_keys ()

in vo mt mng vi gi tr, ch nh phm

array_filter ()

B lc cc yu t ca mt mng bng cch s dng mt chc nng ngi dng


to ra

array_flip ()

Trao i tt c cc phm vi cc gi tr lin quan ca h trong mt mng

array_intersect ()

So snh gi tr mng, v tr v cc trn u

array_intersect_assoc ()

So snh mng v gi tr, v tr v cc trn u

array_intersect_key ()

So snh trong mng, v tr v cc trn u

Page 178 of 413

array_intersect_uassoc ()

So snh mng v gi tr, vi mt kim tra chc nng b sung ngi dng to, v
tr v cc trn u

array_intersect_ukey ()

So snh cc kha mng, vi mt kim tra chc nng b sung ngi dng to, v
tr v cc trn u

array_key_exists ()

Kim tra nu phm quy nh tn ti trong mng

array_keys ()

Tr v tt c cc phm ca mt mng

array_map ()

Gi mi gi tr ca mt mng mt chc nng ngi s dng thc hin, trong


tr v cc gi tr mi

array_merge ()

Kt hp mt hoc nhiu mng thnh mt mng

array_merge_recursive ()

Kt hp mt hoc nhiu mng thnh mt mng

array_multisort ()

Sp xp nhiu hoc mng a chiu

array_pad ()

Chn mt s quy nh ca cc mc, vi mt gi tr ch nh, vo mt mng

array_pop ()

Xa phn t cui cng ca mng

array_product ()

Tnh sn phm ca cc gi tr trong mt mng

array_push ()

Chn mt hoc nhiu yu t kt thc ca mt mng

array_rand ()

Tr v mt hoc nhiu phm ngu nhin t mt mng

array_reduce ()

Tr v mt mng nh mt chui, bng cch s dng mt chc nng ngi dng


nh ngha

array_replace ()

Thay th cc yu t t mng thng qua vo mng u tin

array_replace_recursive ()

Thay th cc yu t t cc mng thng qua vo mng u tin quy

array_reverse ()

Tr v mt mng theo th t o ngc

array_search ()

Tm kim mt mng cho mt gi tr nht nh v tr li cha kha

array_shift ()

Loi b cc yu t u tin t mt mng v tr v gi tr ca phn t b loi b

array_slice ()

Tr v la chn cc b phn ca mt mng

array_splice ()

Loi b v thay th cc yu t quy nh ca mt mng

array_sum ()

Tr v tng cc gi tr trong mt mng

array_udiff ()

So snh cc gi tr mng trong mt chc nng ngi s dng to v tr v mt


mng

array_udiff_assoc ()

So snh cc kha mng, so snh gi tr mng trong mt chc nng ngi dng
to, v tr v mt mng

Page 179 of 413

array_udiff_uassoc ()

So snh mng v gi tr mng trong cc chc nng do ngi s dng to ra, v


tr v mt mng

array_uintersect ()

So snh cc gi tr mng trong mt chc nng ngi s dng to v tr v mt


mng

array_uintersect_assoc ()

So snh cc kha mng, so snh gi tr mng trong mt chc nng ngi dng
to, v tr v mt mng

array_uintersect_uassoc ()

So snh mng v gi tr mng trong cc chc nng do ngi s dng to ra, v


tr v mt mng

array_unique ()

Loi b cc gi tr nhn bn t mt mng

array_unshift ()

Thm mt hoc nhiu yu t bt u ca mt mng

array_values ()

Tr v tt c cc gi tr ca mt mng

array_walk ()

p dng mt chc nng ngi s dng tt c cc thnh vin ca mt mng

array_walk_recursive ()

p dng mt chc nng ngi dng quy tt c cc thnh vin ca mt


mng

arsort ()

Sp xp mt mng kt hp th t gim dn theo gi tr

asort ()

Sp xp mt mng kt hp theo th t tng dn theo gi tr

compact ()

To ra cc bin mng c cha v cc gi tr ca h

count ()

Tr v s phn t trong mt mng

current ()

Tr v phn t hin ti trong mt mng

each ()

Tr v cc kha hin ti v cp gi tr t mt mng

end ()

t con tr ni b ca mt mng phn t cui cng ca n

extract ()

Nhp khu cc bin vo bng biu tng hin ti t mt mng

in_array ()

Kim tra nu mt gi tr c ch nh tn ti trong mt mng

key ()

Ly mt cha kha t mt mng

krsort ()

Sp xp mt mng kt hp th t gim dn, theo cha kha

ksort ()

Sp xp mt mng kt hp trong th t tng dn, theo cha kha

list ()

Gn bin nh th h l mt mng

natcasesort ()

Sp xp mt mng bng cch s dng mt trng hp insensitive "trt t t


nhin" thut ton

natsort ()

Sp xp mt mng bng cch s dng mt thut ton "trt t t nhin"

Page 180 of 413

next ()

Trc con tr mng ni b ca mt mng

pos ()

B danh hin nay ()

prev ()

Tua li con tr mng ni b

range ()

To ra mt mng c cha mt lot cc yu t

reset ()

t con tr ni b ca mt mng phn t u tin ca n

rsort ()

Sp xp mt mng lp ch mc th t gim dn

shuffle ()

Shuffles mt mng

sizeof ()

B danh ca count ()

sort ()

Sp xp mt mng lp ch mc theo th t tng dn

uasort ()

Sp xp mt mng gi tr bng cch s dng ngi dng xc nh chc nng so


snh

uksort ()

Sp xp mt mng cc phm bng cch s dng ngi dng xc nh chc nng


so snh

usort ()

Sp xp mt mng bng cch s dng ngi dng xc nh chc nng so snh

PHP Lch Chc nng


PHP : cho bit phin bn u tin ca PHP h tr chc nng.
Chc nng

M t

PH

cal_days_in_month ()

Tr v s ngy trong mt thng cho mt nm quy nh v lch

cal_from_jd ()

Chuyn i mt s ngy Julian thnh mt ngy lch quy nh

cal_info ()

Tr v thng tin v mt lch nht nh

cal_to_jd ()

Chuyn i mt ngy m Julian ngy

easter_date ()

Tr v du thi gian Unix na m ngy l Phc sinh ca mt nm quy


nh

easter_days ()

Tr v s ngy sau ngy 21 thng ba, L Phc Sinh ri cho mt nm quy


nh

FrenchToJD ()

Chuyn i mt ngy ca ng Cng ha Php mt s ngy Julian

GregorianToJD ()

Chuyn i mt ngy Gregorian mt s ngy Julian

JDDayOfWeek ()

Tr v ngy mt tun

Page 181 of 413

JDMonthName ()

Tr v mt tn thng

JDToFrench ()

Chuyn i mt s ngy Julian n mt ngy ng Cng ha Php

JDToGregorian ()

Chuyn i mt s ngy Julian n mt ngy dng lch

jdtojewish ()

Chuyn i mt s ngy Julian n mt ngy ngi Do Thi

JDToJulian ()

Chuyn i mt s ngy Julian n mt ngy Julian

jdtounix ()

Chuyn i mt s ngy Julian mt du thi gian Unix

JewishToJD ()

Chuyn i mt ngy ca ngi Do Thi mt s ngy Julian

JulianToJD ()

Chuyn i mt ngy Julian mt s ngy Julian

unixtojd ()

Chuyn i mt du thi gian Unix mt s ngy Julian

PHP Lch hng s


PHP : cho bit phin bn u tin ca PHP h tr cc hng s.
Lin tc

M t

PH

CAL_GREGORIAN

Lch Gregory

CAL_JULIAN

Lch Julian

CAL_JEWISH

Do Thi lch

CAL_FRENCH

Cng ha lch Php

CAL_NUM_CALS

CAL_DOW_DAYNO

CAL_DOW_SHORT

CAL_DOW_LONG

CAL_MONTH_GREGORIAN_SHORT

CAL_MONTH_GREGORIAN_LONG

CAL_MONTH_JULIAN_SHORT

CAL_MONTH_JULIAN_LONG

CAL_MONTH_JEWISH

CAL_MONTH_FRENCH

Page 182 of 413

CAL_EASTER_DEFAULT

CAL_EASTER_ROMAN

CAL_EASTER_ALWAYS_GREGORIAN

CAL_EASTER_ALWAYS_JULIAN

CAL_JEWISH_ADD_ALAFIM_GERESH

CAL_JEWISH_ADD_ALAFIM

CAL_JEWISH_ADD_GERESHAYIM

Thi gian chy cu hnh


Cc hnh vi ca cc chc nng ngy / thi gian b nh hng bi cc thit lp trong php.ini.
Ngy / Thi gian ty chn cu hnh:
Tn

M t

Thay i

Ch nh v mc nh (c sn t PHP 5).Ty
chn ny c s dng bi date_sunrise () v
date_sunset ()

PHP_INI_ALL

date.default_longitude "35,2333"

Ch nh kinh mc nh (c sn t PHP
5).Ty chn ny c s dng bi date_sunrise
() v date_sunset ()

PHP_INI_ALL

date.sunrise_zenith

"90,83"

Ch nh nh cao ca mt tri mc mc nh
(c sn t PHP 5). Ty chn ny c s dng
bi date_sunrise () v date_sunset ()

PHP_INI_ALL

date.sunset_zenith

"90,83"

Ch nh mc nh hong hn nh cao (c sn
t PHP 5). Ty chn ny c s dng bi
date_sunrise () v date_sunset ()

PHP_INI_ALL

date.timezone

""

Ch nh mi gi mc nh (c sn t PHP 5.1)

PHP_INI_ALL

date.default_latitude

Mc nh
"31,7667"

PHP Ngy / Gi Chc nng


PHP : cho bit phin bn u tin ca PHP h tr chc nng.
Chc nng

M t

PH

checkdate ()

Xc nhn mt ngy dng lch

date_default_timezone_get ()

Tr v mi gi mc nh

Page 183 of 413

date_default_timezone_set ()

Thit lp mi gi mc nh

date_sunrise ()

Tr v thi gian mt tri mc cho mt ngy nht nh / v tr

date_sunset ()

Tr v thi gian ca hong hn cho mt ngy nht / v tr

date ()

nh dng thi gian a phng / ngy

getdate ()

Tr v mt mng cha thng tin ngy thng v thi gian cho mt


du thi gian Unix

gettimeofday ()

Tr v mt mng cha thng tin thi gian hin ti

gmdate ()

nh dng mt ngy / gi GMT / UTC

gmmktime ()

Tr v du thi gian Unix cho mt ngy GMT

gmstrftime ()

nh dng mt thi gian GMT / UTC / ngy theo lp min a


phng

Idate ()

nh dng mt thi gian a phng / ngy l s nguyn

localtime ()

Tr v mt mng c cha cc thnh phn thi gian ca mt du


thi gian Unix

microtime ()

Tr v micro giy cho thi gian hin ti

mktime ()

Tr v du thi gian Unix cho mt ngy

strftime ()

nh dng thi gian a phng / ngy theo lp min a phng

strptime ()

Phn tch mt ngy thi gian / to ra vi strftime ()

strtotime ()

Phn tch mt vn bn ting Anh ngy hoc thi gian vo mt


du thi gian Unix

thi gian ()

Tr v thi gian hin ti nh l mt du thi gian Unix

PHP Ngy / Gi hng s


PHP : cho bit phin bn u tin ca PHP h tr cc hng s.
Lin tc

M t

DATE_ATOM

Atom (v d: 2005-08-15T16: 13:03 0000)

DATE_COOKIE

HTTP Cookies: (v d: Sun, 14 Aug 2005 16:13:03 UTC)

DATE_ISO8601

ISO-8601 (v d: 2005-08-14T16: 13:03 0000)

Page 184 of 413

PH

DATE_RFC822

RFC 822 (v d: Sun, 14 Aug 2005 16:13:03 UTC)

DATE_RFC850

RFC 850 (v d: Ch nht, 14-Aug-05 16:13:03 UTC)

DATE_RFC1036

RFC 1036 (v d: Ch nht, 14-Aug-05 16:13:03 UTC)

DATE_RFC1123

RFC 1123 (v d: Sun, 14 Aug 2005 16:13:03 UTC)

DATE_RFC2822

RFC 2822 (Sun, 14 Aug 2005 16:13:03 0000)

DATE_RSS

RSS (Sun, 14 Aug 2005 16:13:03 UTC)

DATE_W3C

World Wide Web Consortium (v d: 2005-08-14T16: 13:03


0000)

PHP mc Chc nng


PHP : cho bit phin bn u tin ca PHP h tr chc nng.
Chc nng

M t

PH

chdir ()

Thay i th mc hin ti

chroot ()

Thay i th mc gc ca qu trnh hin ti

dir ()

M mt x l th mc v tr v mt i tng

closedir ()

ng mt x l th mc

getcwd ()

Tr v th mc hin hnh

opendir ()

M mt x l th mc

readdir ()

Tr v mt mc t mt x l th mc

rewinddir ()

t li mt x l th mc

scandir ()

Danh sch cc tp tin v th mc bn trong mt ng dn c


th

PHP mc hng s
PHP : cho bit phin bn u tin ca PHP h tr cc hng s.
Lin tc
DIRECTORY_SEPARATOR

Page 185 of 413

M t

PH
3

PATH_SEPARATOR

PHP Li v chc nng ng nhp


PHP : cho bit phin bn u tin ca PHP h tr chc nng.
Chc nng

M t

PH

debug_backtrace ()

To ra mt backtrace

debug_print_backtrace ()

In mt backtrace

error_get_last ()

c cc li xy ra ln cui

error_log ()

Gi mt li li my ch ng nhp vo mt tp tin hoc n


mt a im t xa

error_reporting ()

Xc nh li c bo co

restore_error_handler ()

Phc hi x l li trc

restore_exception_handler ()

Phc hi x l ngoi l trc

set_error_handler ()

Thit lp mt chc nng c xc nh s dng x l cc li

set_exception_handler ()

Thit lp mt chc nng c xc nh s dng x l cc


trng hp ngoi l

trigger_error ()

To ra mt thng bo li do ngi dng nh ngha

user_error ()

B danh ca trigger_error ()

PHP Li v hng s ng nhp


PHP : cho bit phin bn u tin ca PHP h tr cc hng s.
Gi
tr

Lin tc

M t

E_ERROR

Fatal li thi gian chy. Li m khng th c phc hi


t.Thc thi kch bn phi dng li

E_WARNING

Li thi gian chy khng gy t vong. Thc thi kch bn khng


dng li

E_PARSE

Thi gian bin dch li phn tch c php. Li c php ch nn


c to ra bi cc c php

Page 186 of 413

E_NOTICE

Thng bo thi gian chy. Cc kch bn tm thy mt ci g


c th l mt li, nhng cng c th xy ra khi chy mt kch
bn bnh thng

16

E_CORE_ERROR

Fatal li khi ng ti PHP. iu ny ging nh mt E_ERROR


trong li PHP

32

E_CORE_WARNING

Li khng gy t vong ti PHP khi ng. iu ny ging nh


mt E_WARNING trong li PHP

64

E_COMPILE_ERROR

Fatal li thi gian bin dch. iu ny ging nh mt E_ERROR


to ra bi Zend Engine Scripting

128

E_COMPILE_WARNING

Li thi gian bin dch khng gy t vong. iu ny ging nh


mt E_WARNING to ra bi Zend Engine Scripting

256

E_USER_ERROR

Fatal ngi dng to ra li. iu ny ging nh mt b


E_ERROR bng cch lp trnh bng cch s dng trigger_error
chc nng PHP ()

512

E_USER_WARNING

Khng gy t vong ngi dng to ra cnh bo. iu ny


ging nh mt E_WARNING c thit lp bi cc lp trnh
vin s dng PHP chc nng trigger_error ()

1024

E_USER_NOTICE

Ngi s dng to thng bo. iu ny ging nh mt


E_NOTICE c thit lp bi cc lp trnh vin s dng PHP
chc nng trigger_error ()

2048

E_STRICT

Thng bo thi gian chy. PHP ngh thay i m ca bn


gip kh nng tng tc v kh nng tng thch ca m

4096

E_RECOVERABLE_ERROR

Li catchable gy t vong. y l nh E_ERROR mt nhng c


th c nh bt bi mt x l ngi dng nh ngha (xem
thm set_error_handler ())

6143

E_ALL

Tt c cc li v cnh bo, ngoi tr mc E_STRICT

Gii thiu PHP h thng tp tin


Cc chc nng h thng tp tin cho php bn truy cp v thao tc cc h thng tp tin.

Ci t
Cc chc nng h thng tp tin l mt phn ca li PHP. Khng c ci t cn thit s dng
cc chc nng ny.

Page 187 of 413

Thi gian chy cu hnh


Cc hnh vi ca cc chc nng h thng tp tin b nh hng bi cc thit lp trong php.ini.
H thng tp tin cu hnh ty chn:
Tn

Mc nh

M t

Thay i

allow_url_fopen

"1"

Cho php fopen ()-loi chc nng lm vic


vi cc URL (c sn t PHP 4.0.4)

PHP_INI_SYSTEM

user_agent

NULL

Xc nh i din ngi s dng cho PHP


gi (c sn t PHP 4.3)

PHP_INI_ALL

default_socket_timeout

"60"

Thit lp thi gian ch mc nh, trong vi


giy, cho dng cm da trn (c sn t PHP
4.3)

PHP_INI_ALL

""

Xc nh mt khu FTP n danh (a ch email


ca bn)

PHP_INI_ALL

Khi thit lp "1", PHP s xem xt cc d


liu c bi fgets () v tp tin () xem nu
n c s dng Unix, MS-Dos hoc Mac dng
k t kt thc (c sn t PHP 4.3)

PHP_INI_ALL

auto_detect_line_endings "0"

Unix / Windows Kh nng tng thch


Khi xc nh mt con ng trn cc nn tng Unix, du gch cho (/) c s dng nh l
du phn cch th mc. Tuy nhin, trn nn tng Windows, c hai du gch cho (/) v du
gch cho ngc (\) c th c s dng.

PHP h thng tp tin Chc nng


PHP : cho bit phin bn u tin ca PHP h tr chc nng.
Chc nng

M t

PHP

basename ()

Tr v thnh phn tn tp tin ca mt con ng

chgrp ()

Thay i cc nhm tp tin

chmod ()

Thay i ch tp tin

chown ()

Thay i ch s hu tp tin

Page 188 of 413

clearstatcache ()

Xa b nh cache tnh trng tp tin

copy ()

Sao chp mt tp tin

delete ()

Xem b lin kt () hoc unset ()

dirname ()

Tr v thnh phn tn th mc ca mt con ng

disk_free_space ()

Tr v khng gian min ph ca mt th mc

disk_total_space ()

Tr v tng kch thc ca mt th mc

diskfreespace ()

B danh ca disk_free_space ()

fclose ()

ng mt tp tin m

feof ()

Cc th nghim v cui tp tin vo mt tp tin m

fflush ()

Flushes m u ra vo mt tp tin m

fgetc ()

Tr v mt nhn vt t mt tp tin m

fgetcsv ()

Phn tch mt dng t mt tp tin m, kim tra cc lnh vc CSV

fgets ()

Tr v mt dng t mt tp tin m

fgetss ()

Tr v mt dng, vi cc th HTML v PHP loi b, t mt tp tin m

file ()

c mt tp tin vo mt mng

file_exists ()

Kim tra c hay khng mt tp tin hoc th mc tn ti

file_get_contents ()

c mt tp tin vo mt chui

file_put_contents

Ghi mt chui vo mt tp tin

fileatime ()

Tr v thi gian truy cp cui cng ca mt tp tin

filectime ()

Tr v thi gian thay i cui cng ca mt tp tin

filegroup ()

Tr v ID nhm ca mt tp tin

fileinode ()

Tr v s inode ca mt tp tin

filemtime ()

Tr v thi gian sa i cui cng ca mt tp tin

fileowner ()

Tr v ID ngi dng (ch s hu) ca mt tp tin

fileperms ()

Tr v quyn truy cp ca mt tp tin

filesize ()

Tr v kch thc tp tin

filetype ()

Tr v cc loi tp tin

Page 189 of 413

flock ()

Kha hoc pht hnh mt tp tin

fnmatch ()

Kt qu cc trn u mt tn tp tin hoc chui vi mt m hnh c th

fopen ()

M mt tp tin hoc URL

fpassthru ()

c t mt tp tin m, cho n khi kt thc tp tin, v ghi kt qu vo b 3


m u ra

fputcsv ()

nh dng mt dng nh CSV v vit n vo mt tp tin m

fputs ()

B danh ca fwrite ()

fread ()

c t mt tp tin m

fscanf ()

Phn tch u vo t mt tp tin m theo mt nh dng c ch nh

fseek ()

Tm kim trong mt tp tin m

fstat ()

Tr v thng tin v mt tp tin m

ftell ()

Tr v v tr hin ti trong mt tp tin m

ftruncate ()

Ct ct mt tp tin m vi mt chiu di quy nh

fwrite ()

Vit cho mt tp tin m

glob ()

Tr v mt mng cc tn tp tin / th mc ph hp vi mt mu quy nh 4

is_dir ()

Kim tra xem mt tp tin l mt th mc

is_executable ()

Kim tra xem mt tp tin thc thi

is_file ()

Kim tra xem mt tp tin l mt tp tin thng xuyn

is_link ()

Kim tra xem mt tp tin l mt lin kt

is_readable ()

Kim tra xem mt tp tin c th c c

is_uploaded_file ()

Kim tra xem mt tp tin c ti ln qua HTTP POST

is_writable ()

Kim tra xem mt tp tin l ghi c

is_writeable ()

B danh ca is_writable ()

link ()

To mt lin kt cng

linkinfo ()

Tr v thng tin v mt lin kt cng

lstat ()

Tr v thng tin v mt tp tin hoc lin kt tng trng

mkdir ()

To mt th mc

move_uploaded_file ()

Di chuyn mt tp tin c ti ln mt v tr mi

Page 190 of 413

parse_ini_file ()

Phn tch mt tp tin cu hnh

pathinfo ()

Tr v thng tin v mt ng dn tp tin

pclose ()

ng ca mt ng ng c m bi popen ()

popen ()

M mt ng ng

readfile ()

c mt tp tin v vit n vo b m u ra

readlink ()

Tr v mc tiu ca mt lin kt mm

realpath ()

Tr v tn ng dn tuyt i

rename ()

i tn mt tp tin hoc th mc

rewind ()

Tua li mt con tr tp tin

rmdir ()

Loi b mt th mc rng

set_file_buffer ()

Thit lp kch thc b m ca mt tp tin m

stat ()

Tr v thng tin v mt tp tin

symlink ()

To mt lin kt tng trng

tempnam ()

To ra mt tp tin duy nht tm thi

tmpfile ()

To ra mt tp tin duy nht tm thi

touch ()

Thit lp thi gian truy cp v sa i ca mt tp tin

umask ()

Thay i quyn truy cp tp tin cho cc tp tin

unlink ()

Xa mt tp tin

PHP h thng tp tin hng s


PHP : cho bit phin bn u tin ca PHP h tr cc hng s.
Lin tc
GLOB_BRACE
GLOB_ONLYDIR
GLOB_MARK
GLOB_NOSORT
GLOB_NOCHECK

Page 191 of 413

M t

PH

GLOB_NOESCAPE
PATHINFO_DIRNAME
PATHINFO_BASENAME
PATHINFO_EXTENSION
FILE_USE_INCLUDE_PATH
FILE_APPEND
FILE_IGNORE_NEW_LINES
FILE_SKIP_EMPTY_LINES

PHP lc Chc nng


PHP : cho bit phin bn u tin ca PHP h tr chc nng.
Chc nng

M t

PH

filter_has_var ()

Kim tra nu mt bin ca mt loi u vo quy nh tn ti

filter_id ()

Tr v s ID ca mt b lc xc nh

filter_input ()

C c u vo t bn ngoi kch bn v lc n

filter_input_array ()

Nhn nhiu u vo t bn ngoi kch bn v lc chng

filter_list ()

Tr v mt mng ca tt c cc b lc c h tr

filter_var_array ()

Nhn nhiu bin s v lc chng

filter_var ()

Mt bin v lc n

PHP b lc
ID Name

M t

FILTER_CALLBACK

Gi mt chc nng ngi dng nh ngha lc d liu

FILTER_SANITIZE_STRING

Th Strip, ty chn tc b hoc m ha cc k t c


bit

FILTER_SANITIZE_STRIPPED

B danh ca b lc "chui"

FILTER_SANITIZE_ENCODED

URL m ha chui, ty chn tc b hoc m ha cc k


t c bit

Page 192 of 413

FILTER_SANITIZE_SPECIAL_CHARS

HTML-escape "<> & v cc k t c gi tr ASCII t hn


32

FILTER_SANITIZE_EMAIL

Hy b tt c cc k t, ngoi tr ch ci, ch s v #
$% & '* + - / = ^ _ `?. {|} ~ @ []

FILTER_SANITIZE_URL

Hy b tt c cc k t, ngoi tr ch ci, ch s v $+ * '(), {} | \ \ ^ ~ [] `<> #%";: @ & =

FILTER_SANITIZE_NUMBER_INT

Hy b tt c cc k t, ngoi tr ch s v + -

FILTER_SANITIZE_NUMBER_FLOAT

Hy b tt c cc k t, ngoi tr ch s, + -, v ty
chn, eE.

FILTER_SANITIZE_MAGIC_QUOTES

p dng addslashes ()

FILTER_UNSAFE_RAW

Khng lm g c, ty chn tc b hoc m ha cc k


c bit

FILTER_VALIDATE_INT

Xc nhn gi tr l s nguyn, ty chn t phm vi ch


nh

FILTER_VALIDATE_BOOLEAN

Tr v TRUE "1", "true", "trn" v "c", FALSE cho "0",


"false", "tt", "khng", v "", NULL nu khng

FILTER_VALIDATE_FLOAT

Xc nhn gi tr nh phao

FILTER_VALIDATE_REGEXP

Xc nhn gi tr so vi regexp, mt biu thc chnh quy


tng thch vi Perl-

FILTER_VALIDATE_URL

Xc nhn gi tr nh URL, ty chn vi cc thnh phn


cn thit

FILTER_VALIDATE_EMAIL

Xc nhn gi tr nh e-mail

FILTER_VALIDATE_IP

Xc nhn gi tr nh a ch IP, ty chn ch IPv4 hoc


IPv6 hay khng phi t phm vi t nhn hoc dnh rin

PHP FTP Gii thiu


Cc chc nng FTP cung cp cho khch hng truy cp vo tp tin my ch thng qua File
Transfer Protocol (FTP).
Cc chc nng FTP c s dng m, ng nhp v kt ni cht ch, cng nh ti ln, ti
v, i tn, xa, v nhn c thng tin v cc tp tin t cc my ch tp tin. Khng phi tt
c cc chc nng FTP s lm vic vi tt c cc my ch hoc tr li kt qu tng t. Cc
chc nng FTP tr thnh c sn vi PHP 3.
Cc chc nng ny c ngha l truy cp chi tit n mt my ch FTP. Nu bn ch mun
c t hay ghi vo mt tp tin trn mt my ch FTP, xem xt vic s dng wrapper ftp:// vi
cc chc nng h thng tp tin.

Page 193 of 413

Ci t
Phin bn ca s ca PHP c xy dng trong h tr cho cc phn m rng FTP. V vy,
cc chc nng FTP s lm vic t ng.
Tuy nhin, nu bn ang chy phin bn Linux ca PHP, bn s c bin dch PHP vi enable-ftp (PHP 4 +) hoc- with-ftp (PHP 3) c c cc chc nng FTP lm vic.

PHP FTP Chc nng


PHP : cho bit phin bn u tin ca PHP h tr chc nng.
Chc nng

M t

PH

ftp_alloc ()

Phn b khng gian cho mt tp tin c ti ln my ch FTP

ftp_cdup ()

Thay i th mc hin hnh n th mc cha trn my ch FTP

ftp_chdir ()

Thay i th mc hin hnh trn my ch FTP

ftp_chmod ()

B quyn truy cp vo mt tp tin thng qua FTP

ftp_close ()

ng mt kt ni FTP

ftp_connect ()

M mt kt ni FTP

ftp_delete ()

Xa mt tp tin trn my ch FTP

ftp_exec ()

Thc thi mt chng trnh / lnh trn my ch FTP

ftp_fget ()

Ti v mt tp tin t my ch FTP v lu n vo mt tp tin m

ftp_fput ()

Cp nht t mt tp tin m v lu n vo mt tp tin trn my ch FTP

ftp_get_option ()

Tr v hnh vi thi gian chy ca cc kt ni FTP

ftp_get ()

Ti mt tp tin t my ch FTP

ftp_login ()

Bn ghi trn mt kt ni FTP

ftp_mdtm ()

Tr v thi gian sa i cui cng ca mt tp tin c ch nh

ftp_mkdir ()

To mt th mc mi trn my ch FTP

ftp_nb_continue ()

Tip tc ly / gi mt tp tin (non-blocking)

ftp_nb_fget ()

Ti mt tp tin t my ch FTP v lu n vo mt tp tin m (nonblocking)

Page 194 of 413

ftp_nb_fput ()

Cp nht t mt tp tin m v lu n vo mt tp tin trn my ch FTP


(non-blocking)

ftp_nb_get ()

Ti mt tp tin t my ch FTP (non-blocking)

ftp_nb_put ()

Ti ln mt tp tin n my ch FTP (non-blocking)

ftp_nlist ()

Danh sch cc tp tin trong mt th mc c ch nh trn my ch FTP

ftp_pasv ()

Bt ch th ng hoc tt

ftp_put ()

Ti ln mt tp tin n my ch FTP

ftp_pwd ()

Tr v tn th mc hin hnh

ftp_quit ()

B danh ca ftp_close ()

ftp_raw ()

Gi mt lnh liu n my ch FTP

ftp_rawlist ()

Tr v mt danh sch chi tit ca cc tp tin trong th mc ch nh

ftp_rename ()

t li tn mt tp tin hoc th mc trn my ch FTP

ftp_rmdir ()

Loi b mt th mc trn my ch FTP

ftp_set_option ()

Thit lp cc ty chn thi gian chy cho kt ni FTP

ftp_site ()

Gi mt lnh SITE n my ch

ftp_size ()

Tr v kch thc ca cc tp tin c ch nh

ftp_ssl_connect ()

M mt kt ni an ton SSL FTP

ftp_systype ()

Tr v nh danh kiu h thng ca my ch FTP

PHP FTP hng s


PHP : cho bit phin bn u tin ca PHP h tr cc hng s.
Lin tc

M t

PH

FTP_ASCII

FTP_TEXT

FTP_BINARY

FTP_IMAGE

FTP_TIMEOUT_SEC

Page 195 of 413

FTP_AUTOSEEK

FTP_AUTORESUME

Xc nh tip tc v tr v tr v bt u nhn v t yu cu t ng

FTP_FAILED

Khng ng b chuyn giao tht bi

FTP_FINISHED

Khng ng b chuyn giao hon thnh

FTP_MOREDATA

Vn cn hot ng khng ng b chuyn giao

PHP HTTP Gii thiu


Cc chc nng HTTP cho php bn thao tc thng tin c gi n trnh duyt bi cc my
ch Web, trc khi bt k sn lng khc c gi.

Ci t
Cc chc nng th mc l mt phn ca li PHP. Khng c ci t cn thit s dng cc
chc nng ny.

PHP HTTP Chc nng


PHP : cho bit phin bn u tin ca PHP h tr chc nng.
Chc nng

M t

PH

header ()

S gi mt header HTTP liu cho mt khch hng

headers_list ()

Tr v mt danh sch cc tiu phn ng gi (hoc sn sng 5


gi)

headers_sent ()

Kim tra nu / ni cc tiu HTTP c gi

setcookie ()

Gi mt cookie HTTP vi mt khch hng

setrawcookie ()

Gi mt cookie HTTP m khng c URL m ha cc gi tr cookie

Gii thiu PHP libxml


Cc chc nng v hng s libxml c s dng cng vi cc chc nng SimpleXML, XSLT v
DOM.

Page 196 of 413

Ci t
Cc chc nng ny yu cu cc gi libxml Ti v ti xmlsoft.org

PHP libxml Chc nng


PHP : cho bit phin bn u tin ca PHP h tr chc nng.
Chc nng

M t

PH

libxml_clear_errors ()

R rng libxml li b m

libxml_get_errors ()

Ly mng li

libxml_get_last_error ()

Ly li cui cng t libxml

libxml_set_streams_context ()

t bi cnh sui ti ti liu libxml tip theo hoc vit

libxml_use_internal_errors ()

V hiu ho li libxml v cho php ngi s dng ly thng tin


li khi cn thit

Chc nng

M t

PH

LIBXML_COMPACT

Thit lp ti u ha phn b cc nt nh. iu ny c th ci


thin hiu sut ng dng

LIBXML_DTDATTR

Thit lp mc nh DTD thuc tnh

LIBXML_DTDLOAD

Ti tp hp con bn ngoi

LIBXML_DTDVALID

Xc nhn vi cc DTD

LIBXML_NOBLANKS

Loi b cc nt trng

LIBXML_NOCDATA

t CDATA nh cc nt vn bn

LIBXML_NOEMPTYTAG

Thay i th rng (v d nh <br/> <br> </ br>), ch c sn


trong lu DOMDocument-> () v DOMDocument-> saveXML ()
chc nng

LIBXML_NOENT

Thay th cc thc th

LIBXML_NOERROR

Khng hin th cc bo co li

LIBXML_NONET

Ngn chn truy cp mng trong khi ti ti liu

PHP libxml hng s

Page 197 of 413

LIBXML_NOWARNING

Khng hin th bo co cnh bo

LIBXML_NOXMLDECL

Th khai bo XML khi tit kim mt ti liu

LIBXML_NSCLEAN

Hy b cc t khai khng gian tn d tha

LIBXML_XINCLUDE

S dng XInclude thay th

LIBXML_ERR_ERROR

Nhn c li thu hi

LIBXML_ERR_FATAL

Nhn li nghim trng

LIBXML_ERR_NONE

Khng c li

LIBXML_ERR_WARNING

Nhn c cnh bo n gin

LIBXML_VERSION

Nhn libxml phin bn (v d nh 20.605 hoc 20.617)

LIBXML_DOTTED_VERSION

Chm libxml phin bn (v d nh 2.6.5 hoc 2.6.17)

PHP Th Gii thiu


Hm mail () cho php bn gi email trc tip t mt kch bn.

Yu cu
i vi cc chc nng mail s c sn, PHP i hi mt h thng email c ci t v
hot. Chng trnh c s dng c xc nh bi cc thit lp cu hnh trong file php.ini.

Ci t
Cc chc nng mail ny l mt phn ca li PHP. Khng c ci t cn thit s dng cc
chc nng ny.

Thi gian chy cu hnh


Cc hnh vi ca cc chc nng th b nh hng bi cc thit lp trong file php.ini.
Th cu hnh ty chn:
Tn

Page 198 of 413

Mc nh

M t

Thay i

SMTP

"Localhost"

Windows ch: Tn DNS hoc a ch IP ca my


ch SMTP

PHP_INI_ALL

smtp_port

"25"

Windows ch: s cng SMTP. C sn t PHP 4.3

PHP_INI_ALL

sendmail_from

NULL

Windows ch: Ch nh a ch "t" c s dng PHP_INI_ALL


trong email gi t PHP

sendmail_path

NULL

Cc h thng Unix: Xc nh ni m chng


PHP_INI_SYSTEM
trnh sendmail c th c tm thy (thng l /
usr / sbin / sendmail hoc / usr / lib / sendmail)

PHP Th Chc nng


PHP : cho bit phin bn u tin ca PHP h tr chc nng.
Chc nng

M t

PH

ezmlm_hash ()

Tnh gi tr bm cn thit bi h thng danh sch gi th EZMLM

mail ()

Cho php bn gi email trc tip t mt kch bn

PHP Ton Gii thiu


Cc chc nng ton hc c th x l cc gi tr trong phm vi ca cc s nguyn v cc loi
phao.

Ci t
Cc chc nng ton hc l mt phn ca li PHP. Khng c ci t cn thit s dng cc
chc nng ny.

PHP Math Chc nng


PHP : cho bit phin bn u tin ca PHP h tr chc nng.
Chc nng

M t

PH

abs ()

Tr v gi tr tuyt i ca mt s

acos ()

Tr v arccosine ca mt s

Page 199 of 413

acosh ()

Tr v cosin hyperbol nghch o ca mt s

asin ()

Tr v arcsine ca mt s

asinh ()

Tr v sin hyperbol nghch o ca mt s

atan ()

Tr v arctangent ca mt s nh l mt gi tr s gia-PI / 2 v PI / 2
radian

atan2 ()

Tr v theta gc ca mt im (x, y) nh l mt gi tr s gia-PI v PI


radian

atanh ()

Tr v tang hyperbol nghch o ca mt s

base_convert ()

Chuyn i mt s t mt c s khc

bindec ()

Chuyn i mt s nh phn cho mt s thp phn

ceil ()

Tr v gi tr ca mt s c lm trn ln n s nguyn gn nht

cos ()

Tr v cosin ca mt s

cosh ()

Tr v cosin hyperbol ca mt s

decbin ()

Chuyn i mt s thp phn mt s nh phn

dechex ()

Chuyn i mt s thp phn cho mt s thp lc phn

decoct ()

Chuyn i mt s thp phn mt s bt phn

deg2rad ()

Chuyn i mt mc mt s radian

exp ()

Tr v gi tr ca E

expm1 ()

Tr v gi tr ca

floor ()

Tr v gi tr ca mt s c lm trn xung s nguyn gn nht

fmod ()

Tr v cn li (modulo) ca s phn chia ca cc i s

getrandmax ()

Tr v s lng ti a ngu nhin m c th c tr li bi mt cuc gi


n cc rand () chc nng

hexdec ()

Chuyn i mt s thp lc phn cho mt s thp phn

hypot ()

Tr v di ca cnh huyn ca mt tam gic vung gc

is_finite ()

Tr v true nu gi tr l mt s hu hn

is_infinite ()

Tr v true nu gi tr l mt s lng v hn

is_nan ()

Tr v true nu mt gi tr khng phi l s

lcg_value ()

Tr v mt s ngu nhin trong khong (0,1)

Page 200 of 413

E-1

3
4

log ()

Tr v logarit t nhin (c s E) ca mt s

log10 ()

Tr v logarit c s-10 ca mt s

log1p ()

Tr v log (1 + s)

max ()

Tr v s lng vi gi tr cao nht ca hai s xc nh

min ()

Tr v s lng vi gi tr thp nht ca hai s xc nh

mt_getrandmax ()

Tr v gi tr ln nht c th c th c tr li bi mt_rand ()

mt_rand ()

Tr v mt s nguyn ngu nhin bng cch s dng thut ton Mersenne


Twister

mt_srand ()

Ht ging Mersenne Twister ngu nhin s my pht in

octdec ()

Chuyn i mt s bt phn cho mt s thp phn

pi ()

Tr v gi tr ca PI

pow ()

Tr v gi tr ca x sc mnh ca y

rad2deg ()

Chuyn i mt s radian n mt mc

rand ()

Tr v mt s nguyn ngu nhin

round ()

Trn mt s n s nguyn gn nht

sin ()

Tr v sin ca mt s

sinh ()

Tr v sin hyperbol ca mt s

sqrt ()

Tr v cn bc hai ca mt s

srand ()

Ht ging my pht in s ngu nhin

tan ()

Tr v tang ca mt gc

tanh ()

Tr v tang hyperbol ca mt gc

PHP Math hng s


PHP : cho bit phin bn u tin ca PHP h tr cc hng s.
Lin tc

M t

PH

M_E

Tr v e (khong 2,718)

M_EULER

Tr v hng s Euler (khong 0,577)

Page 201 of 413

M_LNPI

Tr v logarit t nhin ca PI (khong 1,144)

M_LN2

Tr v logarit t nhin ca 2 (khong 0,693)

M_LN10

Tr v logarit t nhin ca 10 (khong 2,302)

M_LOG2E

Tr v logarit c s-2 ca E (khong 1,442)

M_LOG10E

Tr v logarit c s-10 E (khong 0,434)

M_PI

Tr v PI (khong 3,14159)

M_PI_2

Tr v PI / 2 (khong 1,570)

M_PI_4

Tr v PI / 4 (khong 0,785)

M_1_PI

Tr v 1/PI (khong 0,318)

M_2_PI

Tr v 2/PI (khong 0,636)

M_SQRTPI

Tr v cn bc hai ca PI (khong 1,772)

M_2_SQRTPI

Tr v 2/square gc ca PI (khong 1,128)

M_SQRT1_2

Tr v cn bc hai ca 1/2 (khong 0,707)

M_SQRT2

Tr v cn bc hai ca 2 (khong 1,414)

M_SQRT3

Tr v cn bc hai ca 3 (khong 1,732)

Gii thiu PHP Miscellaneous


Misc. chc nng ch c t y bi v khng ai trong s cc loi khc dng nh ph
hp vi.

Ci t
Cc chc nng misc l mt phn ca li PHP. Khng c ci t cn thit s dng cc chc
nng ny.

Thi gian chy cu hnh


Cc hnh vi ca cc chc nng misc b nh hng bi cc thit lp trong file php.ini.
Misc. ty chn cu hnh:

Page 202 of 413

Tn

Mc nh

M t

Thay i

ignore_user_abort

"0"

FALSE ch ra rng cc kch bn s c chm


dt ngay sau khi h c gng sn xut mt
ci g sau khi khch hng hy b kt ni
ca h

PHP_INI_ALL

highlight.string

"# DD0000"

Mu sc lm ni bt mt chui trong PHP c


php

PHP_INI_ALL

highlight.comment

"# FF8000"

Mu sc lm ni bt kin PHP

PHP_INI_ALL

highlight.keyword

"007.700"

Mu sc cho cc t kha ni bt c php PHP


(v d nh du ngoc n v du chm phy)

PHP_INI_ALL

highlight.bg

"# FFFFFF"

Mu sc cho nn

PHP_INI_ALL

highlight.default

"# 0000BB"

Mc nh mu sc cho PHP c php

PHP_INI_ALL

highlight.html

"# 000000"

Mu sc cho HTML code

PHP_INI_ALL

browscap

NULL

Tn v v tr ca trnh duyt kh nng tp tin (v PHP_INI_SYSTEM


d nh browscap.ini)

PHP Misc. Chc nng


PHP : cho bit phin bn u tin ca PHP h tr chc nng.
Chc nng

M t

PH

connection_aborted ()

Kim tra xem khch hng b ngt kt ni

connection_status ()

Tr v tnh trng kt ni hin ti

connection_timeout ()

Phn i trong PHP 4.0.5

constant ()

Tr v gi tr ca mt hng s

define ()

nh ngha mt hng s

defined ()

Kim tra xem mt hng s tn ti

die ()

In mt tin nhn v thot khi kch bn hin ti

eval ()

nh gi mt chui nh l m PHP

exit ()

In mt tin nhn v thot khi kch bn hin ti

get_browser ()

Tr v kh nng ca trnh duyt ca ngi dng

highlight_file ()

Kt qu u ra mt tp tin vi c php PHP nhn mnh

Page 203 of 413

highlight_string ()

Kt qu u ra mt chui vi c php PHP nhn mnh

ignore_user_abort ()

B xem mt khch hng t xa c th hy b cc hot ng ca mt kch


bn

pack ()

Gi d liu vo mt chui nh phn

php_check_syntax ()

Phn i trong PHP 5.0.5

php_strip_whitespace ()

Tr v m ngun ca mt tp tin vi kin, PHP v khong trng xa

show_source ()

B danh ca highlight_file ()

sleep ()

S chm tr thc thi m cho mt s giy

time_nanosleep ()

S chm tr thc thi m cho mt s giy v nano giy

time_sleep_until ()

S chm tr m thc thi cho n khi mt thi gian quy nh

uniqid ()

To ra mt ID duy nht

unpack ()

Gii nn d liu t mt chui nh phn

usleep ()

S chm tr thc thi m cho mt s micro giy

PHP Misc. Hng s


PHP : cho bit phin bn u tin ca PHP h tr cc hng s.
Lin tc

M t

PH

CONNECTION_ABORTED
CONNECTION_NORMAL
CONNECTION_TIMEOUT
__COMPILER_HALT_OFFSET__

PHP MySQL Gii thiu


Cc chc nng MySQL cho php bn truy cp vo cc my ch c s d liu MySQL.

Ci t
i vi cc chc nng MySQL s c sn, bn phi bin dch PHP vi MySQL h tr.

Page 204 of 413

bin dch, s dng - with-mysql = DIR (DIR ty chn im n th mc MySQL).


Lu : i vi y chc nng ca MySQL phin bn ln hn trn 4,1, s dng phn m
rng MySQLi thay th.Nu bn mun ci t c phn m rng mysql v m rng mysqli bn
nn s dng cng mt th vin khch hng trnh bt k xung t.
Ci t trn h thng Linux
PHP 5 +: MySQL v th vin MySQL khng c kch hot theo mc nh. S dng - withmysql = DIR cu hnh ty chn bao gm MySQL h tr v ti v tiu v th vin
t www.mysql.com .
Cc h thng ci t trn
PHP 5 + MySQL khng c kch hot theo mc nh, v vy php_mysql.dll phi c kch
hot bn trong php.ini.Ngoi ra, PHP cn truy cp vo th vin khch MySQL. Mt tp tin c
tn libmysql.dll c bao gm trong phn phi Windows PHP, v cho PHP ni chuyn vi
MySQL tp tin ny cn phi c sn PATH h thng Windows.
kch hot bt k phn m rng PHP, PHP extension_dir thit lp (trong file php.ini) nn
c t vo th mc ni m cc phn m rng PHP c t. Mt gi tr extension_dir v d
l c: \ php \ ext.
Lu : Nu bn nhn c cc li sau khi bt u cc my ch web: "Khng th ti th vin
nng ng '/ php_mysql.dll", iu ny l bi v php_mysql.dll hoc libmysql.dll khng c th
c tm thy bi h thng.

Thi gian chy cu hnh


Cc hnh vi ca cc chc nng MySQL b nh hng bi cc thit lp trong file php.ini.
MySQL cu hnh ty chn:
Tn

Mc nh

M t

Thay i

mysql.allow_persistent

"1"

C hay khng cho php cc kt ni lin tc

PHP_INI_SYSTEM

mysql.max_persistent

"-1"

S lng ti a cc kt ni lin tc cho mi qu PHP_INI_SYSTEM


trnh

mysql.max_links

"-1"

S lng ti a cc kt ni cho mi qu trnh


(kt ni lin tc bao gm)

PHP_INI_SYSTEM

mysql.trace_mode

"0"

Theo di ch . Khi thit lp "1", cnh bo


v SQL-li s c hin th. C sn t PHP 4.3

PHP_INI_ALL

mysql.default_port

NULL

Cc s cng TCP mc nh s dng

PHP_INI_ALL

mysql.default_socket

NULL

Tn cm mc nh s dng. C sn t PHP PHP_INI_ALL

Page 205 of 413

4.0.1
mysql.default_host

NULL

Cc my ch lu tr my ch mc nh s
dng (khng p dng trong ch an ton
SQL)

PHP_INI_ALL

mysql.default_user

NULL

Tn ngi s dng mc nh s dng


(khng p dng trong ch an ton SQL)

PHP_INI_ALL

mysql.default_password NULL

Mt khu mc nh s dng (khng p dng


trong ch an ton SQL)

PHP_INI_ALL

mysql.connect_timeout

Kt ni thi gian ch trong vi giy

PHP_INI_ALL

"60"

Loi ti nguyn
C hai loi ti nguyn c s dng trong phn m rng MySQL. Ngi u tin l
link_identifier cho mt kt ni c s d liu, th hai l mt ngun ti nguyn m gi kt qu
ca mt truy vn.
Lu : Hu ht cc MySQL chc nng chp nhn link_identifier nh l cc tham s ty chn
cui cng. Nu n khng c cung cp, kt ni m cui cng c s dng.

PHP MySQL chc nng


PHP : cho bit phin bn u tin ca PHP h tr chc nng.
Chc nng

M t

PH

mysql_affected_rows ()

Tr v s hng b nh hng trong hot ng MySQL trc

mysql_change_user ()

Phn i. Thay i ngi s dng kt ni MySQL hin ti

mysql_client_encoding ()

Tr v tn cc b k t cho cc kt ni hin ti

mysql_close ()

ng kt ni MySQL khng lin tc

mysql_connect ()

M mt kt ni khng lin tc MySQL

mysql_create_db ()

Phn i. To ra mt c s d liu MySQL mi. S dng mysql_query


() thay th

mysql_data_seek ()

Di chuyn con tr k lc

mysql_db_name ()

Tr v mt tn c s d liu t mt cuc gi n mysql_list_dbs ()

mysql_db_query ()

Phn i. Gi mt truy vn MySQL. S dng mysql_select_db () v

Page 206 of 413

mysql_query () thay th
mysql_drop_db ()

Phn i. Xa mt c s d liu MySQL. S dng mysql_query ()


thay th

mysql_errno ()

Tr v s li ca cc hot ng mi nht ca MySQL

mysql_error ()

Tr v m t li ca cc hot ng mi nht ca MySQL

mysql_escape_string ()

Phn i. Escapes mt chui s dng trong mt mysql_query.S


dng mysql_real_escape_string () thay th

mysql_fetch_array ()

Tr v mt hng t mt recordset nh l mt mng kt hp v /


hoc mt mng s

mysql_fetch_assoc ()

Tr v mt hng t mt recordset nh l mt mng kt hp

mysql_fetch_field ()

Tr v thng tin ct t mt recordset nh mt i tng

mysql_fetch_lengths ()

Tr v di ca ni dung ca tng lnh vc trong mt hng kt qu

mysql_fetch_object ()

Tr v mt hng t mt recordset nh mt i tng

mysql_fetch_row ()

Tr v mt hng t mt recordset nh l mt mng s

mysql_field_flags ()

Tr v c kt hp vi mt lnh vc trong mt recordset

mysql_field_len ()

Tr v di ti a ca mt trng trong mt recordset

mysql_field_name ()

Tr v tn ca mt trng trong mt recordset

mysql_field_seek ()

Di chuyn con tr kt qu cho mt lnh vc quy nh

mysql_field_table ()

Tr v tn ca bng lnh vc c ch nh trong

mysql_field_type ()

Tr v kiu ca mt trng trong mt recordset

mysql_free_result ()

B nh min ph kt qu

mysql_get_client_info ()

Tr v thng tin khch hng MySQL

mysql_get_host_info ()

Tr v thng tin my ch MySQL

mysql_get_proto_info ()

Tr v MySQL giao thc thng tin

mysql_get_server_info ()

Tr v thng tin my ch MySQL

mysql_info ()

Tr v thng tin v cc truy vn cui cng

mysql_insert_id ()

Tr v ID AUTO_INCREMENT to ra t hot ng INSERT trc

mysql_list_dbs ()

Danh sch cc c s d liu c sn trn mt my ch MySQL

mysql_list_fields ()

Phn i. Danh sch cc lnh vc MySQL bng. S dng mysql_query

Page 207 of 413

() thay th
mysql_list_processes ()

Danh sch MySQL qu trnh

mysql_list_tables ()

Phn i. Danh sch cc bng trong mt c s d liu MySQL. S


dng mysql_query () thay th

mysql_num_fields ()

Tr v s lnh vc trong mt recordset

mysql_num_rows ()

Tr v s hng trong mt recordset

mysql_pconnect ()

M mt kt ni MySQL dai dng

mysql_ping ()

Ping mt kt ni my ch hoc kt ni li nu khng c kt ni

mysql_query ()

Thc thi mt truy vn trn mt c s d liu MySQL

mysql_real_escape_string ()

Thot khi mt chui s dng trong cc cu lnh SQL

mysql_result ()

Tr v gi tr ca mt trng trong mt recordset

mysql_select_db ()

Thit lp c s d liu MySQL hot ng

mysql_stat ()

Tr v tnh trng h thng hin ti ca my ch MySQL

mysql_tablename ()

Phn i. Tr v tn bng ca trng. S dng mysql_query ()


thay th

mysql_thread_id ()

Tr v ID thread hin hnh

mysql_unbuffered_query ()

Thc thi mt truy vn trn mt c s d liu MySQL (m khng cn


ly / m cc kt qu)

PHP MySQL hng s


K t PHP 4.3 c th xc nh c b sung cho cc chc nng mysql_connect () v
mysql_pconnect ():
PHP : cho bit phin bn u tin ca PHP h tr cc hng s.
Lin tc

M t

PH

MYSQL_CLIENT_COMPRESS

S dng giao thc nn

4,

MYSQL_CLIENT_IGNORE_SPACE

Cho php khng gian sau khi tn hm

4,

MYSQL_CLIENT_INTERACTIVE

Cho php tng tc thi gian ch giy khng hot ng


trc khi ng kt ni

4,

MYSQL_CLIENT_SSL

S dng m ha SSL (ch c sn vi phin bn 4 + ca

4,

Page 208 of 413

th vin MySQL client)


Cc mysql_fetch_array () chc nng s dng mt hng s cho cc loi khc nhau ca cc
mng kt qu. Cc hng s sau y c nh ngha:
Lin tc

M t

PH

MYSQL_ASSOC

Ct c tr v vo mng vi cc fieldname nh ch s mng

MYSQL_BOTH

Ct c tr v vo cc mng c ch s mt s v fieldname nh ch s mng

MYSQL_NUM

Ct c tr v vo cc mng c ch s s (ch s bt u t 0)

PHP SimpleXML Gii thiu


Cc chc nng SimpleXML cho php bn chuyn i XML vo mt i tng.
i tng ny c th c x l, ging nh bt k i tng khc, vi selectors s hu bnh
thng v vng lp mng.
Mt s cc chc nng ny i hi PHP mi nht xy dng.

Ci t
Cc chc nng SimpleXML l mt phn ca li PHP. Khng c ci t cn thit s dng cc
chc nng ny.

PHP SimpleXML chc nng


PHP : cho bit phin bn u tin ca PHP h tr chc nng.
Chc nng

M t

PH

__construct ()

To mt i tng SimpleXMLElement mi

addAttribute ()

Thm mt thuc tnh n cc yu t SimpleXML

addChild ()

Thm mt phn t con cc yu t SimpleXML

asXML ()

Nhn c mt chui XML t mt yu t SimpleXML

attributes ()

c cc thuc tnh ca mt yu t SimpleXML

Page 209 of 413

children ()

c cc con ca mt nt xc nh

getDocNamespaces ()

c cc khng gian tn ca mt ti liu XML

getName ()

Nhn c tn ca mt nguyn t SimpleXML

getNamespace ()

c cc khng gian tn t d liu XML

registerXPathNamespace ()

To ra mt bi cnh khng gian tn cho cc truy vn XPath tip theo

simplexml_import_dom ()

c mt i tng SimpleXMLElement t mt nt DOM

simplexml_load_file ()

c mt i tng SimpleXMLElement t mt ti liu XML

simplexml_load_string ()

c mt i tng SimpleXMLElement t mt chui XML

xpath ()

Chy mt truy vn XPath trn d liu XML

PHP chui Gii thiu


Chui cc chc nng cho php bn thao tc chui.

Ci t
Cc chc nng chui l mt phn ca li PHP. Khng c ci t cn thit s dng cc chc
nng ny.

PHP chui Chc nng


PHP : cho bit phin bn u tin ca PHP h tr chc nng.
Chc nng

M t

PH

addcslashes ()

Tr v mt chui vi du gch cho ngc pha trc ca cc


nhn vt c ch nh

addslashes ()

Tr v mt chui vi du gch cho ngc pha trc ca cc


nhn vt c xc nh trc

bin2hex ()

Chuyn i mt chui k t ASCII vi cc gi tr thp lc phn

chop ()

B danh ca rtrim ()

chr ()

Tr v mt nhn vt t mt gi tr ASCII quy nh

chunk_split ()

Tch mt chui thnh mt lot cc phn nh hn

Page 210 of 413

convert_cyr_string ()

Chuyn i mt chui t mt b k t Cyrillic khc

convert_uudecode ()

Gii m mt chui uuencoded

convert_uuencode ()

M ha mt chui bng cch s dng cc thut ton uuencode

count_chars ()

Tr bao nhiu ln mt k t ASCII xy ra trong vng mt chui


v tr v thng tin

crc32 ()

Tnh ton CRC 32-bit cho mt chui

crypt ()

Chui m ha mt chiu (bm)

echo ()

Kt qu u ra chui

explode ()

Ph v mt chui thnh mt mng

fprintf ()

Vit mt chui nh dng cho mt dng sn lng quy nh

get_html_translation_table ()

Tr v bng dch c s dng bi htmlspecialchars () v


htmlentities ()

hebrev ()

Chuyn i vn bn ting Do Thi, vn bn trc quan

hebrevc ()

Chuyn i vn bn ting Do Thi, vn bn hnh nh v dng mi


(\ n) vo <br />

html_entity_decode ()

Chuyn i cc thc th HTML k t

htmlentities ()

Chuyn i cc k t cc thc th HTML

htmlspecialchars_decode ()

Chuyn i mt s cc thc th HTML c xc nh trc vi cc


nhn vt

htmlspecialchars ()

Chuyn i mt s k t c xc nh trc cc thc th


HTML

implode ()

Tr v mt chui t cc yu t ca mt mng

join ()

B danh ca implode ()

Levenshtein ()

Tr v khong cch Levenshtein gia hai dy

localeconv ()

Tr v min a phng s v thng tin nh dng tin t

LTRIM ()

Strips khong trng t pha bn tri ca mt chui

md5 ()

Tnh MD5 ca mt chui

md5_file ()

Tnh MD5 ca mt tp tin

metaphone ()

Tnh phm metaphone ca mt chui

money_format ()

Tr v mt chui c nh dng nh l mt chui tin t

Page 211 of 413

nl_langinfo ()

Tr v thng tin a phng c th

nl2br ()

Chn HTML ngt dng pha trc ca mi dng mi trong mt


chui

number_format ()

nh dng mt s vi hng ngn nhm

ord ()

Tr v gi tr ASCII ca k t u tin ca mt chui

parse_str ()

Phn tch mt chui truy vn vo cc bin

print ()

Kt qu u ra mt chui

printf ()

u ra mt chui nh dng

quoted_printable_decode ()

Gii m mt chui trch dn-in

quotemeta ()

Du ngoc kp meta k t

rtrim ()

Strips khong trng t pha bn phi ca mt chui

setlocale ()

Thit lp thng tin ngn ng

sha1 ()

Tnh SHA-1 hash ca mt chui

sha1_file ()

Tnh SHA-1 hash ca mt tp tin

similar_text ()

Tnh tng ng gia hai chui

Soundex ()

Tnh phm Soundex ca mt chui

sprintf ()

Ghi mt chui nh dng cho mt bin

sscanf ()

Phn tch u vo t mt chui theo mt nh dng

str_ireplace ()

Thay th mt s k t trong mt chui (trng hp-insensitive)

str_pad ()

m mt chui vi di mi

str_repeat ()

Lp li mt chui mt s quy nh ca thi gian

str_replace ()

Thay th mt s k t trong mt chui (trng hp nhy cm)

str_rot13 ()

Thc hin m ha ROT13 trn mt si dy

str_shuffle ()

Ngu nhin shuffles tt c cc k t trong mt chui

str_split ()

Chia tch mt chui thnh mt mng

str_word_count ()

m s t trong mt chui

strcasecmp ()

So snh hai chui (trng hp-insensitive)

strchr ()

Tm s xut hin u tin ca mt chui bn trong mt chui

Page 212 of 413

khc (b danh ca strstr ())


strcmp ()

So snh hai chui (trng hp nhy cm)

strcoll ()

Locale da trn chui so snh

strcspn ()

Tr v s ca cc nhn vt c tm thy trong mt chui trc


3
khi bt k mt phn ca mt s k t c ch nh c tm thy

strip_tags ()

Strips th HTML v PHP t mt chui

stripcslashes ()

Unquotes mt chui trch dn vi addcslashes ()

stripslashes ()

Unquotes mt chui trch dn vi addslashes ()

stripos ()

Tr v v tr xut hin u tin ca mt chui bn trong mt chui 5


khc (trng hp-insensitive)

stristr ()

Tm s xut hin u tin ca mt chui bn trong mt chui


khc (trng hp-insensitive)

strlen ()

Tr v di ca mt chui

strnatcasecmp ()

So snh hai chui bng cch s dng mt thut ton "trt t t


nhin" (trng hp-insensitive)

strnatcmp ()

So snh hai chui bng cch s dng mt thut ton "trt t t


nhin" (trng hp nhy cm)

strncasecmp ()

Chui so snh n k t u tin (trng hp-insensitive)

strncmp ()

Chui so snh n k t u tin (trng hp nhy cm)

strpbrk ()

Tm kim mt chui cho bt k mt tp hp cc k t

strpos ()

Tr v v tr xut hin u tin ca mt chui bn trong mt chui 3


khc (trng hp nhy cm)

strrchr ()

Tm s xut hin cui cng ca mt chui bn trong mt chui


khc

strrev ()

o ngc mt chui

strripos ()

Tm v tr ca s xut hin cui cng ca mt chui bn trong mt 5


chui khc (trng hp-insensitive)

strrpos ()

Tm v tr ca s xut hin cui cng ca mt chui bn trong mt 3


chui khc (trng hp nhy cm)

strspn ()

Tr v s ca cc nhn vt c tm thy trong mt chui ch


cha cc k t t mt charlist quy nh

strstr ()

Tm s xut hin u tin ca mt chui bn trong mt chui


khc (trng hp nhy cm)

Page 213 of 413

strtok ()

Chia tch mt chui thnh chui nh hn

strtolower ()

Chuyn i mt chui thnh ch thng ch

strtoupper ()

Chuyn i mt chui ch hoa ch

strtr ()

Dch mt s k t trong mt chui

substr ()

Tr v mt phn ca mt chui

substr_compare ()

So snh hai chui t mt v tr bt u quy nh (nh phn an


ton, v ty chn trng hp nhy cm)

substr_count ()

m s ln xy ra mt xu con trong mt chui

substr_replace ()

Thay th mt phn ca mt chui vi chui khc

trim ()

Strips khong trng t c hai mt ca mt chui

ucfirst ()

Chuyn i k t u tin ca mt chui thnh ch hoa

ucwords ()

Chuyn i k t u tin ca mi t trong mt chui thnh ch


hoa

vfprintf ()

Vit mt chui nh dng cho mt dng sn lng quy nh

vprintf ()

u ra mt chui nh dng

vsprintf ()

Ghi mt chui nh dng cho mt bin

WordWrap ()

Kt thc tt p mt chui n mt s lng nht nh cc k t

PHP chui hng s


PHP : cho bit phin bn u tin ca PHP h tr cc hng s.
Lin tc

M t

CRYPT_SALT_LENGTH

Cha chiu di ca phng php m ha mc nh cho


h thng. m ha tiu chun DES, chiu di l 2

CRYPT_STD_DES

Thit lp 1 nu tiu chun m ha DES-vi mt mui k t 2


c h tr, 0 nu ngc li

CRYPT_EXT_DES

Thit lp 1 nu DES-m ha m rng da trn vi mt mui


k t 9 c h tr, 0 nu ngc li

CRYPT_MD5

Thit lp 1 nu m ha MD5 vi mui k t 12 bt u vi $ 1


$ c h tr, 0 nu ngc li

Page 214 of 413

PH

CRYPT_BLOWFISH

Thit lp 1 nu m ha Blowfish vi mui k t 16 bt u vi


$ 2 $ hoc $ 2a $ c h tr, 0 otherwise0

HTML_SPECIALCHARS
HTML_ENTITIES
ENT_COMPAT
ENT_QUOTES
ENT_NOQUOTES
CHAR_MAX
LC_CTYPE
LC_NUMERIC
LC_TIME
LC_COLLATE
LC_MONETARY
LC_ALL
LC_MESSAGES
STR_PAD_LEFT
STR_PAD_RIGHT
STR_PAD_BOTH

PHP XML Parser Gii thiu


Cc chc nng XML cho php bn phn tch, nhng khng xc nhn, cc ti liu XML.
XML l mt nh dng d liu trao i ti liu c cu trc c tiu chun ha. Thng tin
thm v XML c th c tm thy trong Hng dn ca chng ti XML .
Phn m rng ny s dng phn tch c php XML Expat.
Ngi nc ngoi l mt b phn tch da trn s kin, xem mt ti liu XML nh l mt lot
cc s kin. Khi mt s kin xy ra, n gi mt chc nng c th x l n.
Ngi nc ngoi l mt phn tch c php khng kim duyt, v b qua bt k cc DTD c
lin kt n mt ti liu. Tuy nhin, nu ti liu c khng cng c hnh thnh, n s kt
thc vi mt thng bo li.

Page 215 of 413

Bi v n l da trn s kin, phn tch c php xc nhn khng, Ngi nc ngoi l nhanh
chng v thch hp cho cc ng dng web.
Cc chc nng phn tch c php XML cho php bn to ra cc phn tch c php XML v xc
nh x l cho cc s kin XML.

Ci t
Cc chc nng XML l mt phn ca li PHP. Khng c ci t cn thit s dng cc chc
nng ny.

Chc nng phn tch c php XML PHP


PHP : cho bit phin bn u tin ca PHP h tr chc nng.
Chc nng

M t

utf8_decode ()

Gii m UTF-8 chui ISO-8859-1

utf8_encode ()

M ha mt chui ISO-8859-1 sang UTF-8

xml_error_string ()

c mt chui li t cc phn tch c php XML

xml_get_current_byte_index ()

Ly cc ch mc byte hin ti t cc phn tch c


php XML

xml_get_current_column_number ()

c s ct hin ti t cc phn tch c php


XML

xml_get_current_line_number ()

c s dng hin ti t cc phn tch c php


XML

xml_get_error_code ()

Nhn c mt m li t cc phn tch c php


XML

xml_parse ()

Phn tch mt ti liu XML

xml_parse_into_struct ()

Phn tch c php XML d liu vo mt mng

xml_parser_create_ns ()

To ra mt phn tch c php XML vi s h tr


khng gian tn

xml_parser_create ()

To mt phn tch c php XML

xml_parser_free ()

Min ph mt phn tch c php XML

xml_parser_get_option ()

C c la chn t mt phn tch c php XML

Page 216 of 413

xml_parser_set_option ()

Thit lp cc ty chn trong mt phn tch c


php XML

xml_set_character_data_handler ()

Thit lp chc nng x l d liu nhn vt

xml_set_default_handler ()

Thit lp mc nh chc nng x l

xml_set_element_handler ()

t chc nng x l cho phn t ca cc nguyn


t bt u v kt thc

xml_set_end_namespace_decl_handler ()

Thit lp chc nng x l cho n cui t khai


khng gian tn

xml_set_external_entity_ref_handler ()

t chc nng x l cho cc thc th bn ngoi

xml_set_notation_decl_handler ()

Thit lp chc nng x l cho cc t khai k hiu

xml_set_object ()

S dng phn tch c php XML trong mt i


tng

xml_set_processing_instruction_handler ()

Thit lp chc nng x l c hng dn x


l

xml_set_start_namespace_decl_handler ()

Thit lp chc nng x l cho s khi u ca


vic k khai khng gian tn

xml_set_unparsed_entity_decl_handler ()

Thit lp chc nng x l cho cc t khai thc


th khng c phn tch

Hng s phn tch c php XML PHP


Lin tc
XML_ERROR_NONE (s nguyn)
XML_ERROR_NO_MEMORY (s nguyn)
XML_ERROR_SYNTAX (s nguyn)
XML_ERROR_NO_ELEMENTS (s nguyn)
XML_ERROR_INVALID_TOKEN (s nguyn)
XML_ERROR_UNCLOSED_TOKEN (s nguyn)
XML_ERROR_PARTIAL_CHAR (s nguyn)
XML_ERROR_TAG_MISMATCH (s nguyn)
XML_ERROR_DUPLICATE_ATTRIBUTE (s nguyn)

Page 217 of 413

XML_ERROR_JUNK_AFTER_DOC_ELEMENT (s nguyn)
XML_ERROR_PARAM_ENTITY_REF (s nguyn)
XML_ERROR_UNDEFINED_ENTITY (s nguyn)
XML_ERROR_RECURSIVE_ENTITY_REF (s nguyn)
XML_ERROR_ASYNC_ENTITY (s nguyn)
XML_ERROR_BAD_CHAR_REF (s nguyn)
XML_ERROR_BINARY_ENTITY_REF (s nguyn)
XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF (s nguyn)
XML_ERROR_MISPLACED_XML_PI (s nguyn)
XML_ERROR_UNKNOWN_ENCODING (s nguyn)
XML_ERROR_INCORRECT_ENCODING (s nguyn)
XML_ERROR_UNCLOSED_CDATA_SECTION (s nguyn)
XML_ERROR_EXTERNAL_ENTITY_HANDLING (s nguyn)
XML_OPTION_CASE_FOLDING (s nguyn)
XML_OPTION_TARGET_ENCODING (s nguyn)
XML_OPTION_SKIP_TAGSTART (s nguyn)
XML_OPTION_SKIP_WHITE (s nguyn)

PHP Zip File Gii thiu


Zip cc tp tin chc nng cho php bn c cc tp tin ZIP.

Ci t
i vi cc chc nng tp tin Zip lm vic trn my ch ca bn phi c ci t, cc th
vin:

Th vin ZZIPlib bi Guido Draheim: Ti v th vin ZZIPlib


Zip PELC m rng: Ti v Zip PELC m rng

Ci t trn h thng Linux

Page 218 of 413

PHP 5 +: chc nng Zip v th vin Zip khng c kch hot theo mc nh v phi c ti
v t cc lin kt trn. S dng - vi-zip = DIR cu hnh ty chn bao gm h tr Zip.
Cc h thng ci t trn
PHP 5 +: chc nng Zip khng c kch hot theo mc nh, v vy php_zip.dll v th vin
ZZIPlib phi c ti v t lin kt trn. php_zip.dll phi c kch hot bn trong php.ini.
kch hot bt k phn m rng PHP, PHP extension_dir thit lp (trong file php.ini) nn
c t vo th mc ni m cc phn m rng PHP c t. Mt gi tr extension_dir v d
l c: \ php \ ext.

Chc nng tp tin Zip PHP


PHP : cho bit phin bn u tin ca PHP h tr chc nng.
Chc nng

M t

PH

zip_close ()

ng mt file ZIP

zip_entry_close ()

ng mt mc trong cc file ZIP

zip_entry_compressedsize ()

Tr li kch thc nn ca mt entry trong file ZIP

zip_entry_compressionmethod ()

Tr v phng php nn ca mt entry trong file ZIP

zip_entry_filesize ()

Tr v kch thc tp tin thc t ca mt entry trong file ZIP

zip_entry_name ()

Tr v tn ca mt entry trong file ZIP

zip_entry_open ()

M mt mc nhp trong tp tin ZIP c

zip_entry_read ()

c t mt mc m trong tp tin ZIP

zip_open ()

M mt tp tin ZIP

zip_read ()

c vo tip theo trong mt file ZIP

Chapter 31 : Linh Tinh Cc Th


Bn Ngoi Tng Hp c
Code style theo chun Zend
Page 219 of 413

Ti sao chng ta cn phi code theo chun ?


Bi v chun c t ra l ti u ha code ca chng ta, gip code d c hn, sau
ny d chnh sa v khi lm vic nhm th iu ny c bit quan trong !
PHP FILE FORMATTING
Tng qut :
Trong nhng file ch cha code PHP, tag ng code ?> nn c b qua . Bi v n hok
phi l 1 yu cu bt buc phi c ca PHP v vic b n i gip hn ch nhng khong
trng c th xut ra trnh duyt .
Thc dng :
Chng ta cn thc dng 4 khong trng , hok c c tab
S k t maximum ca 1 dng:
S k t ln nht ca 1 dng trong PHP nn l 80 , mc d s k t ln nht thc s c th
ca 1 dng PHP l 120
K t xung hng
Mi dng trong file phi c kt li bng k t \n theo kiu Unix ( tc l enter) .
Khng c dng carriage return (\r) <<<Mac dng ci ny
Khng c dng c \n v \r ( \r\n) <<< Window dng ci ny
1 dng khng nn c cc khong trng cui dng
QUY TC T TN
CLASS: tn ca class phi tr n th mc cha n
VD: trong th mc tn Zend th c class tn Zend , trong th mc Zend/Db/Table.php c
class tn Zend_Db_Table nm trong file tn Table.php, chng ta s bn v quy tc t tn
file sau.
Tn ca class c th cha s nhng khng c khuyn khch . V du dch di ( _ )
ch c dng khi cn chia ng dn, nh trng hp Zend_Db_Table trn
Zend framework classes m c tc gi l Zend hoc cc cng ty hp tc vi Zend th phi
c t di th mc Zend/ v tn class phi bt u vi Zend_
Lu : nu on m khng phi 1 phn ca framework, nh l m c vit bi ngi
dng cui, v hok phi Zend hay cc cng ty hp tc vi Zend th khng c php t
tn bt u vi : Zend_
Interfaces
Quy c t tn Interface cng ging vi t tn class nhng cui tn phi thm

Page 220 of 413

_Interface
VD: Zend_Db_Table_Interface
Tn file :
Ch nhng k t, s , du gch di ( _ ) v du gch ngang ( - ) c chp nhn.
Cc file cha php code phi c extension l .php ( tr nhng file View c mc nh l
.phtml )
Tn file phi tun th vic tr n cc tn class nh trn :
VD:
Zend/Db.php
Zend/Controller/Front.php
Hm v phng php :
Tn hm ch nn dng k t, gch di ( _ ) khng c chp nhn . Trong tn hm c
th c cc con s nhng khng c khuyn khch
Tn hm phi lun lun bt u bi cc k t thng . Khi tn hm gm nhiu t, k t
u tin ca t th 2 tr i phi c vit hoa
Tn hm c th rm r, nhng n phi c ngha v d on c chc nng ca n
VD:
PHP Code:
filterInput()
getElementById()
widgetFactory()

Trong lp trnh hng i tng, cc hm truy cp vo i tng phi lun c t tin


t l get hay set
Mc d tn hm hok th dng du gch di, nhng cc method trong class c khai
bo protected hay private, phi c bt u vi k t gch di ( _ ).
VD:
PHP Code:
class Zend_Foo
{
protected function _fooBar()
{
// Code y
}
}

Hm vi tm vc xuyn sut script, c th c s dng nhng khng khuyn khch .


Cc hm ny nn c t trong 1 class ring bit v khai bo static
Hm hay bin vi tm vc static (trong 1 lp) khng nn khai bo private , thay vo l
protected . Dng final nu hm hok nn dc tha k .

Page 221 of 413

Cc tham s mc nh trong hm
S dng NULL thay cho FALSE nu t mc nh
VD:
PHP Code:
Public function foo($required, $optional

= NULL)

( ch khi tham s $optional hok c gi tr mc nh ban u )


Tuy nhin, nu tham s mc nh c tr v true hay false, th dng false hay true lc y
mi c chp nhn
Bin :
Tn bin c th cha cc k t . K t gch di ( _ ) hok c s dng, tn bin c th
s dng s nhng hok c khuyn khch .
Vi nhng bin nm trong 1 class m c khai bo private hay protected, k t u tin
ca bin phi l 1 du gch di ( _ ) . Ngc li, bin khai bo l public th khng c
bt u bng 1 du gch di ( _ ).
VD:
PHP Code:
class Zend_foo
{
protected $_bar;
$bar;
public
}

Tng t nh tn hm, tn bin phi lun c bt u bng 1 k t thng .


VD:
PHP Code:
$nameOfCustomers

Tn ca bin nn rm r, vi iu kin phi c ngha v on c chc nng ca bin .


Khng nn t tn bin nh $i, $n dng lp cc vng lp d trong tnh hung lp t
nht .
Vi nhng vng lp trn 20 dng code, tn bin dng m s ln lp, phi c ngha .
Hng :
Tn hng c th cha k t v du gch di v s .
Tn hng phi c t theo quy lut : tt c cc k t u vit hoa
Tn hng phi dng du gch di ( _ ) cch cc ch c ngha
VD : 'VALUES_OF_PI' thay v 'VALUESOFPI'
Gi tr Bool v NULL
Khng ging cc ti liu PHP, Zend quy nh k t thng cho c 'true', 'false', v 'null'.
Page 222 of 413

Coding Style
Tags :
PHP code phi c bao trong <?php ?> . Khng c dng dng tt : <? ?>
Chui :
Chui literal:
Khi chui hok c bin trong ( gi l literal) , th phi c khai bo vi nhy n ' ' .
Chui Literals c bao gm nhy n bn trong :
Khi chui c bao gm nhy n trong, chng ta phi khai bo n bng nhy i " " .
Ni suy bin :
2 dng sau c chp nhn trong vic ni suy bin :
PHP Code:
$greeting = "Hello $name, welcome back!";
$greeting = "Hello {$name}, welcome back!";

Nhng dng ny th khng :


PHP Code:
$greeting = "Hello ${name}, welcome back!";

Lu : Du { } s hok c hin th ra browser


Ni chui :
Khi ni chui,1 khong trng phi c thm vo trc v sau k t "." .
VD:
PHP Code:
$string = "$string1" . "$string2"

Hok hp l:
PHP Code:
$string = "$string1"."$string2"

Khi thc hin ni chui, nn break lines


VD:
PHP Code:
$sql = "SELECT 'id', 'name' FROM 'people' "
. "WHERE 'name' = 'Susan' "
. "ORDER BY 'name' ASC ";

Mng :
Mng tun t :
S m khng c chp nhn trong vic nh s th t phn t trong mng .
Vic nh s th t ca tt c cc mng phi c bt u bi s 0 .
Khi khi to mng, 1 khong trng cn phi c thm vo sau mi du ,.
VD:
PHP Code:

Page 223 of 413

$sampleArray = array('first', 'second', 'third');

Hok hp l:
PHP Code:
$sampleArray = array('first','second','third');

Mng c th c khi to trn nhiu dng . V phi thm khong trng vo dng th 2
tr i ngang hng vi dng 1
VD:
PHP Code:
$sampleArray = array('first', 'second', 'third'
'fourth', 'fifth' , 'sixth'
'seventh', 'eighth', 'ninth')

Mng khng tun t :


Khi khi to mng tun t, nn khai bo trn nhiu dng , v mi dng phi c thm
khong trng t dng th 2 ngang hng vi dng th nht
VD:
PHP Code:
$simpleArray = array('first' => 'Element1',
'second' => 'Element2');

Lp
Khai bo lp
K t m class ( { ) phi c t ngay sau dng khai bo tn class.
Mi dng code bn trong class phi c thc dng 4 khong trng .
Ch 1 class trong 1 file PHP
Thm code vo trong 1 file cha class c th c nhng hok c khuyn khch
PHP Code:
/**
* class Docblock Here
*/
class Zend_Class
{
// entire content of class
// must be indented four spaces
}

Class member variables


Tn bin trong class ngoi vic c quy nh theo cch t tn bin thng thng cn
phi tun theo cc quy lut sau :

Mi bin c khai bo trong class phi c t trn top

Construct var khng c dng . Bin trong class phi c khai bo vi cc


construct sau : private, protected, public . Truy cp trc tip vo bin trong class
bng cch set public khng c khuyt khch, v th chng ta cn c cc hm
lm iu ny v cc hm ny phi c tin t l set hay get

Page 224 of 413

Hm v methods :
Cc method phi c khai bo vi cc t : privated, protected, public. Khng c b
trng
Static method phi c khai bo vi theo u tin ca visibility trong script
VD:
PHP Code:
public
static foo() { ... }
private
static bar() { ... }
protected static goo() { ... }

Ging nh class, ki t m hm ( { ) phi c t ngay sau dng khai bo tn hm


VD:
PHP Code:
public function functionName()
{
//code y
}

Bn cnh , khng c php c khong trng gia tn hm v du ( .


Hok hp l:
PHP Code:
public function functionName ()
{
//Code y
}

Gi tr tr v trong hm khng c bao trong ( ) .


VD:
PHP Code:
public function functionName()
{
return $this->varName;
}

Hok hp l:
PHP Code:
public function functionName()
{
return ($this->varName);
}

Type hinting c khuyn khch s dng khi c th


VD:
PHP Code:
class Zend_Component
{
public function foo(SomeInterface $object)
{
.....
}
public function bar(array $options)
{
....
}
}

Page 225 of 413

Hm, method v s dng


Tham s ca hm phi c cch bi 1 k t khong trng . V d sau gi hm 3 tham s
VD:
PHP Code:
threeArguments(1, 2, 3);

Nu mun truyn tham tr, th phi t & trc bin trong hn khai bo hm , khng
c khi s dng hm mi thm du & .
Khi tham s ca hm c th l mng, khi gi hm c th dng array construct v c th
phn ct mng ra nhiu dng
VD:
PHP Code:
threeArguments(array(1, 2, 3), 2, 3);
threeArguments(array(1, 2, 3, 'Zend', 'Studio',
$a, $b, $c,
56.44, $d, 500), 2, 3);

Cu lnh iu khin
If/ Else/ Elseif
Cc cu iu kin phi c 1 khong trng gia t if, elseif v ngoc m ( . Thm
1 khong trng na gia ngoc ng ) v ngoc cong {.
trong ngoc n (), gia 2 bn ca cc ton t so snh phi c khong trng d
c .
Ngoc cong m { phi vit chung hng vi lnh if . Ngoc cong ng phi hng ca
ring n
VD:
PHP Code:
if ($a != 2){
$a = 2;
}

Hok hp l:
PHP Code:
if($a!=2)
{
$a=2;}

Vi nhng lnh if m c thm else, elseif th phi tun theo v d sau :


PHP Code:
if ($a != 2) {
$a = 2;
} else {
$a = 7;
}
if ($a != 2) {
$a = 2;
} else if ($a == 3) {
$a = 4;

Page 226 of 413

} else {
$a = 7;
}

Tt c cc lnh if, elseif hay else phi c {} . Mc d trong vi trng hp hok c chy
dc .
Phi dng elseif , rt khng khuyn khch dng else if
Switch
Tng t, gia ch switch v ngoc m ( phi c 1 khong trng, v gia ngoc
ng ) v { phi c 1 khong trng na .
Ngoc cong m { phi nm chung hng vi if , v ngoc cong ng } phi nm
hng ca ring n
Tt c cc ni dung bn trog switch phi c thc dng 4 khong trng . V ni dung
ca mi case phi c thc dng thm 4 khong trng na !
PHP Code:
switch ($numPeople) {
case 1:
break;
case 2:
break;
default:
break;
}

V construct default hok c b qua trong cu lnh switch .


Lu : Nu trong 1 trng hp no , bn c tnh b break code chy 2 trng hp
tr ln, th hy comment ti case bo l b break c ch ch ch hok phi qun !
PHP Code:
// break intentionally omitted

Inline Documentation
K t # hok nn dng comment trong code .
Files:
Trong mi file cha PHP code, chng ta phi c 1 block trn u file miu t v file
.
Bn c th lm nh sau :
PHP Code:
/**
* Short description for file
*
* Long description for file (if any)...
*
* LICENSE: Some license information
*
* @copyright 2006 Zend Technologies
* @license
[url]http://www.zend.com/license/3_0.txt[/url]
ense 3.0

Page 227 of 413

PHP Lic

* @version
* @link
* @since
*/

$Id$
[url]http://dev.zend.com/package/PackageName[/url]
File available since Release 1.2.0

Classes
Tng t nh vy, cc class cng cn phi c
PHP Code:
/**
* Short description for class
*
* Long description for class (if any)...
*
* @copyright 2006 Zend Technologies
* @license
[url]http://www.zend.com/license/3_0.txt[/url]
PHP Lic
ense 3.0
* @version
Release: @package_version@
* @link
[url]http://dev.zend.com/package/PackageName[/url]
* @since
Class available since Release 1.2.0
*/

Functions
Vi mi hm, bao gm c cc hm dc nh ngha trong class, cn c 1 block gm:

Miu t c bn v hm
Tt c cc bin ca hm
Tt ca cc gi tr tr v ca hm
Nu 1 hm hay 1 method trong class c throw exception th dng @throw

VD:
PHP Code:
/**
* Does something interesting
*
* @param Place
$where Where something interesting takes place
* @param integer $repeat How many times something interesting should
happen
* @throws Some_Exception_Class If something interesting cannot happen
* @return Status
*/
public function doSomethingInteresting(Place $where, $repeat = 1)
{
// implementation...
}

Require v include
Include, include_once, require, require_once hok nn dng () .
VD :
PHP Code:
include 'header.php';

Hok hp l:
PHP Code:
include ('header.php');

Page 228 of 413

Nhng iu cn bit v PHP 5.4


PHP 5.4 l 1 phin bn k tip k t PHP 5.3 ( hy chun b cho s ra i PHP 6(h tr
full Unicode) ngay t by gi ).
PHP 5.4 c tng cng g b nhng hm b phn i v tng 20% tc chy, cng
vi vic gim b nh s dng !!!
Tm hiu v 1 s tnh nng v ci tin :
Mt vi tnh nng v ci ting quan trng nht m mnh s trnh by l : traits, c php
gin n v mng, thit lp webserver s dng vi vi cu lnh n gin, s dng $this
v truy cp cc thnh vin ca class, k hiu <?= v 1 s tnh nng khc s xut hin trong
PHP 5.4
PHP 5.4 ci thin 1 cch ng k kh nng x l v sa hn 100 li . Nhng tnh nng
c g b nh : register_globals, magic_quotes ( v thi gian) v safe_mode . V 1 ci
tin gi tr khc l : kh nng h tr multibyte s c bt mc nh v default_charset s
c thay i t ISO-8859-1 to UTF-8
Content-Type: text/html; charset=utf-8 s lun c bao hm . V th khng cn phi s
dng n cng nh thm 1 s header c c s tng thch UTF-8.
Traits
Trait (horizontal reust/multible inheritance) l 1 b methods c cu trc nh class (
nhng hok th instantiate ). Trait gip cc nh pht trin s dng li 1 b methods t cc
class c lp 1 cch t do . Bi v PHP l 1 ngn ng tha k n (single inheritance), 1
subclass c th tha k t ch 1 superclass, l ni Trait pht huy tc dng !
ng dng ln nht ca trait l khi nhiu class share cng 1 hm. V d, gi s bn ang
build 1 website, v cn c 2 Facebook v Twitter APIs . Chng ta xy dng 2 class c
chung 1 function/method tn l cURL . Thay v copy & paste n thun method (
c th s dng trong 2 class) , chng ta s s dng Trait ( copy & paste, theo cch ca
compiler ). Bng cch ny, chng ta to ra 1 source code d s dng, v tun th
nguyn tc DRY (Dont Repeat Yourself ).
V d :
PHP Code:
/** cURL wrapper trait */
trait cURL
{
public function curl($url)
{
$ch = curl_init();

Page 229 of 413

curl_setopt($ch, CURLOPT_URL, $url);


curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
}
/** Twitter API Class */
class Twitter_API
{
use cURL; // use trait here
public function get($url)
{
return json_decode($this>curl('http://api.twitter.com/'.$url));
}
}
/** Facebook API Class */
class Facebook_API
{
use cURL; // and here
public function get($url)
{
return json_decode($this>curl('http://graph.facebook.com/'.$url));
}
}
$facebook = new Facebook_API();
echo $facebook->get('500058753')->name; // Xut tn Rasmus Lerdorf
/** By gi hy tm hiu v s tuyt vi ca c php PHP 5.4 */
echo (new Facebook_API)->get('500058753')>name; // Xt tn Rasmus Lerdorf
$foo = 'get';
echo (new Facebook_API)->$foo('500058753')>name; // v li xut tn Rasmus Lerdorf
echo (new Twitter_API)->get('1/users/show.json?screen_name=rasmus')>name; // v cng l xut Rasmus Lerdorf

Nu cm thy kh hiu, bn c th xem tip on code sau :


PHP Code:
trait Net
{
public function net()
{
return 'Net';
}
}
trait Tuts
{
public function tuts()
{

Page 230 of 413

return 'Tuts';
}
}
class NetTuts
{
use Net, Tuts;
public function plus()
{
return '+';
}
}
$o = new NetTuts;
echo $o->net(), $o->tuts(), $o->plus();
echo (new NetTuts)->net(), (new NetTuts)->tuts(), (new NetTuts)>plus();

Lu : magic constant trong trait l __TRAIT__ .


Xy dng CLI Webserver
Trong web development, ngi bn tt nht ca PHP l Apache HTTPD Server . Thnh
thong, c th l qu mc cn thit khi ci t httpd.conf ch s dng n trong 1 mi
trng pht trin web , khi bn ch cn 1 web server nh c bt u vi ch 1 dng
lnh n gin ! V v th PHP 5.4 n vi chc nng CLI Web server
Lu : PHP Web server c xy dng ch cho cc nh pht trin, hok c s dng
trong mc ch thng mi !
Hng dn pha di dnh cho Window :
Bc 1 : to Document root directory, router file v index file .
n h thng ( v d C:\). To 1 folder tn public_html . To 1 file trong folder ny, t
tn l router.php copy on code di y, v paste n vo file va to :
PHP Code:
<?php
// router.php
if (preg_match('#\.php$#', $_SERVER['REQUEST_URI']))
{
require basename($_SERVER['REQUEST_URI']); // serve php file
}
else if (strpos($_SERVER['REQUEST_URI'], '.') !== false)
{
return false; // serve file as-is
}
?>

By gi to 1 file khc tn index.php . Copy on code sau v save vo file :


PHP Code:

Page 231 of 413

<?php
// index.php
echo 'Hello Nettuts+ Readers!';
?>

M file php.ini ( nm trong ng dn PHP , v d : C:\PHP )


Tm include_path ( nm dng th 708 ) . Thm C:\public_html vo cui chui gia
nhy i, phn tch bi du chm phy (;) . Kt qu cui cng s nh th ny :
PHP Code:
include_path = ".;C:\php\PEAR;C:\public_html"

Save file li v n bc 2
Bc 2 : chy web server .
M command promt ( Window + R, g cmd, nhn enter ) . Bn s thy 1 ci g i
loi nh :
M:
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\nettuts>

i ng dn hin ti n file ci ng PHP bng c php sau :


M:
C:\Documents and Settings\nettuts>cd C:\php
C:\php>

n on quan trng nht : chy web server . Chp :


M:
php -S 0.0.0.0:8080 -t C:\public_html router.php

v paste vo command promt ( click chut phi , chn paste ). Nhn enter . Nu tt c
chy ng, bn s thy 1 ci g i loi nh bn di ^^ : ( lu hok c ng
command promt, nu ng, web server s b tt )
M:
C:\php>php -S 0.0.0.0:8080 -t C:\public_html router.php
PHP 5.4.0 Development Server started at Fri Mar 02 09:36:40 2012
Listening on 0.0.0.0:8080
Document root is C:\public_html
Press Ctrl-C to quit.

M browser ln v type vo :
M:
http://localhost:8080/index.php

bn s thy :
Hello Nettuts+ Readers!
Lu 1 : to 1 file php-server.bat vi ni dung sau
M:
C:\php\php -S 0.0.0.0:8080 -t C:\public_html router.php.

Double click v chng ta s chy c web server .


Lu 2 : S dng 0.0.0.0 thay v localhost nu bn d on server ca bn s c truy

Page 232 of 413

cp t internet !
C php mng ngn gn
PHP 5.4 cung cp 1 c php mng ngn gn :
PHP Code:
$fruits = array('apples', 'oranges', 'bananas'); // "old" way
// Khai bo mng nh kiu Javascript
$fruits = ['apples', 'oranges', 'bananas'];
// Mng hok tun t
$array = [
'foo' => 'bar',
'bar' => 'foo'
];

Lu : hy nh rng phng php c s vn v mi c s dng, c php mng ngn


gn ch l 1 s thay th khi cn n gin !!!
Array dereference
S hok cn bin tm khi x l vi mng .
V d chng ta cn ly tn gia ca chui Alan Mathison Turing
PHP Code:
echo explode(' ', 'Alan Mathison Turing')[1]; // Xut Mathison

Nhng trc bn 5.4, chng ta phi :


PHP Code:
$tmp = explode(' ', 'Alan Mathison Turing');
echo $tmp[1]; // Xut Mathison

By gi, nu chng ta mun ly t Turing ?


PHP Code:
echo end(explode(' ', 'Alan Mathison Turing')); // Xut Turing

Cu lnh trn s chy tt, nhng s hin ra 1 li E_STRICT (chun Strict : ch bin mi
c truyn tham tr ) . Bi v n tr thnh 1 phn ca E_ALL trong error-reporting.
Mt v d nng cao :
PHP Code:
function foobar()
{
return ['foo' => ['bar' => 'Hello']];
}
echo foobar()['foo']['bar']; // Hello

$this trong cc hm v danh


Bn c th tr n cc i tng t cc hm v danh ( c bit vi tn closures ) bng
cch s dng $this .

Page 233 of 413

PHP Code:
class Foo
{
function hello() {
echo 'Hello Nettuts!';
}
function anonymous()
{
return function() {
$this>hello(); // $this kiu ny s hok chy c trong cc phin bn trc
.
};
}
}
class Bar
{
function __construct(Foo $o) // i tng ca class Foo typehint
{
$x = $o->anonymous(); // ly ra Foo::hello()
$x(); // chy Foo::hello()
}
}
new Bar(new Foo); // Xut Hello Nettuts!

Chng ta vn c th tip cn phng php ny trong cc phin bn trc nhng dng cu


lnh qu mc cn thit :
PHP Code:
function anonymous()
{
$that = $this; // $that is now $this
return function() use ($that) {
$that->hello();
};
}

Tag <?=
Mc k setting trong php.ini, short_open_tag , <?= (open PHP tag v echo ) s lun lun
available . C ngha l bn c th an ton dng :
PHP Code:
<?=$title?>

Thay v
PHP Code:
<?php echo $title ?>

Biu din s nh phn :


K t bn ny, s nguyn c th l s thp phn (c s 10 ), s thp lc phn ( c s 16),
s bt phn ( c s 8 ) hay nh phn ( c s 2) , c t cc k t + - pha trc .
ng s bt phn, t trc con s vi 0 (zero). ng thp lc phn, t trc con s
vi 0x. ng nh phn, t trc vi 0b.

Page 234 of 413

V d: din t s 31 chng ta c
PHP Code:
echo
echo
echo
echo

0b11111; // binary, introduced in PHP 5.4


31; // duh
0x1f; // hexadecimal
037; // octal

Callable Typehint
Typehint c s dng tng cng sc mnh ca PHP . Typehint c th l array, l
object t PHP 5.1 v l callable t PHP 5.4 . Cc kiu typehint truyn thng : int hay
string s hok c h tr na !!
PHP Code:
function my_function(callable $x)
{
return $x();
}
function my_callback_function(){return 'Hello Nettuts!';}
class Hello{static function hi(){return 'Hello Nettuts!';}}
class Hi{function hello(){return 'Hello Nettuts!';}}
echo my_function(function(){return 'Hello Nettuts!';}); // anonymous fu
nction
echo my_function('my_callback_function'); // callback function
echo my_function(['Hello', 'hi']); // class name, static method
echo my_function([(new Hi), 'hello']); // class object, method name

B m thi gian chnh xc cao


$_SERVER[REQUEST_TIME_FLOAT] c thm vo, vi b m tnh ti micro
giy ( theo kiu float ). iu ny rt quan trng cho cc bn khi mun tnh tg chy script .
PHP Code:
echo 'Executed in ', round(microtime(true) $_SERVER['REQUEST_TIME_FLOAT'], 2), 's';

Li kt
V mt tng th, PHP 5.4 cung cp 1 s lng ln ci tin .
Bn ngh PHP 5.5 s mang ti cho chng ta ci tin no v bn mong i iu g ?
NGUN: Dch t http://net.tutsplus.com/tutorials/ph...you-must-know/ !

Cc hm rt hu ch trong PHP bn
cn bit !
1/ Hm c bao nhiu tham s cng c
Page 235 of 413

Bn c th bit trong PHP chng ta c th to hm vi cc tham s c gi tr mc nh


ban u . Nhng c 1 phng php cho php 1 hm chp nhn mi tham s !
V d u tin vi hm c tham s c gi tr mc nh :
PHP Code:
// Hm c 2 tham s mc nh
function foo($arg1 = '', $arg2 = '') {
echo "arg1: $arg1\n";
echo "arg2: $arg2\n";
}
foo('hello','world');
/* Xut
arg1: hello
arg2: world
*/
foo();
/* Xut
arg1:
arg2:
*/

By gi, hy cng xy dng 1 hm c th truyn vo mi tham s . func_get_args() s


gip chng ta lm iu :
PHP Code:
// Tham s rng nh
function foo() {
// returns an array of all passed arguments
$args = func_get_args();
foreach ($args as $k => $v) {
echo "arg".($k+1).": $v\n";
}
}
foo();
/* Khng xut g c */
foo('hello');
/* Xut
arg1: hello
*/
foo('hello', 'world', 'again');
/* Xut
arg1: hello
arg2: world
arg3: again
*/

Page 236 of 413

2/ S dng GLOB() tm files


Nhiu hm trong PHP c tn di v c tnh m t chc nng ca n . Tuy nhin, tht kh
ni hm glob() c nhim v g nu chng ta cha tng s dng qua .
Tht ra, glob() c chc nng nh hm scandir() nhng l 1 phin bn cao cp hn ~~
PHP Code:
// Ly ht tt c cc file ui .php
$files = glob('*.php');
print_r($files);
/* Xut
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
)
*/

Bn cnh , chng ta c th ly ra nhiu file :


PHP Code:
// Ly tt c file c ui .php v .txt
//GLOB_BRACE : trong {} s dc hiu l hoc << hoc php hoc txt th l
y ra
$files = glob('*.{php,txt}', GLOB_BRACE);
print_r($files);
/* Xut
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
[4] => log.txt
[5] => test.txt
)
*/

File cng c th c ly ra vi ng dn :
PHP Code:
$files = glob('../images/a*.jpg');
print_r($files);
/* Xut
Array
(
[0] => ../images/apple.jpg
[1] => ../images/art.jpg
)
*/

Cn nu bn mun ly ng dn y , ch cn dng realpath() :

Page 237 of 413

PHP Code:
$files = glob('../images/a*.jpg');
// s dng hm n mi phn t mng
$files = array_map('realpath',$files);
print_r($files);
/* output looks like:
Array
(
[0] => C:\wamp\www\images\apple.jpg
[1] => C:\wamp\www\images\art.jpg
)
*/

Tt nhin cc v d trn bn test s cho ra kt qu khc, v folder trong my ca tc gi


hok ging vi folder ca bn . Ty c ng bin nh ^^
3/ Thng tin b nh c s dng
Nu bit c thi gian chy script, bn s ti u code tt hn !
PHP c 1 b x l b nh rt phc tp . S s dng b nh ca on script c th tng,
gim trong khi n n chy . ly b nh hin ti ang c s dng, chng ta dng
memory_get_usage() , ly b nh maximum c s dng trong c qu trnh, dng
memory_get_peak_usage() :
PHP Code:
echo "Ban u: ".memory_get_usage()." bytes \n";
/* prints
Ban u: 361400 bytes
*/
// S dng b nh no
for ($i = 0; $i < 100000; $i++) {
$array []= md5($i);
}
// Loi b mng
for ($i = 0; $i < 100000; $i++) {
unset($array[$i]);
}
echo "Cui cng : ".memory_get_usage()." bytes \n";
/* Xut
Cui cng: 885912 bytes
*/
echo "Cao nht: ".memory_get_peak_usage()." bytes \n";
/* Xut
Cao nht: 13687072 bytes
*/

4/Magic Constants
PHP cung cp mt s magic_constants hu ch nh :

Page 238 of 413

ly ra dng hin ti (__FILE__), ly ra ng dn hin ti (__FILE__), ly ra th mc


(__DIR__), tn hm (__FUNCTION__), tn lp (__CLASS__), tn method (
__METHOD__) v namespace (__NAMESPACE__)
Chng ta s hok i tng constant, m ch gii thiu 1 vi v d hu ch :
PHP Code:
// y l ng dn tng i
// C th bn s gp li nu chy script t th mc khc y nh
require_once('config/database.php');
require_once(dirname(__FILE__) . '/config/database.php');

Bn hy chy script trn, ng to file database.php trong folder config nh, hiu
__FILE__ c nhim v g, bn c vic copy->paste-> chy . Bn s thy li cha ?
Nu thy ri, bn o th t ca 2 dng require_once() trn, bn chy li v s hiu ^^
Lu : nn s dng __FILE__ khi include script khc bn nh .
S dng __LINE__ s gip chng ta debug d hn . Bn c th tm ra s th t ca dng
:
PHP Code:
// some code
// ...
my_debug("some debug message", __LINE__);
/* Xut
Line 4: some debug message
*/
// some more code
// ...
my_debug("another debug message", __LINE__);
/* Xut
Line 11: another debug message
*/
function my_debug($msg, $line) {
echo "Line $line: $msg\n";
}

5/ To ID c bit :
C 1 vi trng hp chng ta cn phi to ra nhng chui c bit ( khng trng lp ),
ngi ta thng dng md5() lm iu ny, nhng md5() khng thc s sinh ra lm
iu !
PHP Code:
// generate unique string
echo md5(time() . mt_rand(1,1000000));

C 1 hm chuyn dng x l iu trong PHP tn l : uniqid()


PHP Code:
// To chui c bit
echo uniqid();

Page 239 of 413

/* Xut
4bd67c947233e
*/
// To 1 chui c bit khc
echo uniqid();
/* Xut
4bd67c9472340
*/

C th bn ang thc mc rng d hm to chui c bit nhng c 1 s k t u tin


ging ht nhau mi khi chy ! Bi v vic to chui ny ph thuc vo thi gian server .
gim c hi chng c th y chang nhau, chng ta thm prefix vo :
PHP Code:
// vi prefix
echo uniqid('foo_');
/* Xut
foo_4bd67d6cd8b8f
*/
// vi nhiu k t hn
echo uniqid('',true);
/* Xut
4bd67d6cd8b926.12135106
*/
// prefix v nhiu k t hn
echo uniqid('bar_',true);
/* Xut
bar_4bd67da367b650.43684647
*/

Hm ny s to chui vi s k t t hn md5(), s gip bn tit kim thi gian hn .


6/ Serialization
Bn bao gi lu 1 bin phc tp vo database hay file ? Bn khng cn phi c nhng
gii php ca mnh chuyn i mng v dng chui ri np vo, bi v PHP c vo
hm dng vi mc ch ny !
Chng ta s tm hiu 2 hm : serialize() v unserialize()
PHP Code:
// 1 mng phc tp
$myvar = array(
'hello',
42,
array(1,'two'),
'apple'
);
// convert to a string
$string = serialize($myvar);

Page 240 of 413

echo $string;
/* Xut
a:4:{i:0;s:5:"hello";i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3:"two";}i:3;s:5:"
apple";}
*/
// Bn c th ly li mng ban u
$newvar = unserialize($string);
print_r($newvar);
/* Xut
Array
(
[0] => hello
[1] => 42
[2] => Array
(
[0] => 1
[1] => two
)
[3] => apple
)
*/

Tuy nhin, t khi JSON tr nn ph bin, h quyt nh thm s h tr vo PHP5.2 .


By gi bn c th s dng json_encode() v json_decode() :
PHP Code:
// Mng phc tp
$myvar = array(
'hello',
42,
array(1,'two'),
'apple'
);
// Chuyn i mng thnh string
$string = json_encode($myvar);
echo $string;
/* Xut
["hello",42,[1,"two"],"apple"]
*/
// Ly li mng ban u
$newvar = json_decode($string);
print_r($newvar);
/* Xut
Array
(
[0] => hello
[1] => 42
[2] => Array
(

Page 241 of 413

[0] => 1
[1] => two
)
[3] => apple
)
*/

C v 2 hm ny nh gn hn nh ^^ . Hn th na, chng tng thch vi javascript v 1


s ngn ng khc . Tuy nhin, cho nhng i tng phc tp qu, c th s b mt thng
tin y !
7/ Nn chui
Khi ni v s nn, chng ta c ngh l nn file zip !! Nhng chng ta hon ton c th
nn 1 chui phc tp trong PHP .
v d sau y, chng ta s dng hm gzcompress() v gzuncompress()
PHP Code:
$string =
"Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Nunc ut elit id mi ultricies
adipiscing. Nulla facilisi. Praesent pulvinar,
sapien vel feugiat vestibulum, nulla dui pretium orci,
non ultricies elit lacus quis ante. Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Aliquam
pretium ullamcorper urna quis iaculis. Etiam ac massa
sed turpis tempor luctus. Curabitur sed nibh eu elit
mollis congue. Praesent ipsum diam, consectetur vitae
ornare a, aliquam a nunc. In id magna pellentesque
tellus posuere adipiscing. Sed non mi metus, at lacinia
augue. Sed magna nisi, ornare in mollis in, mollis
sed nunc. Etiam at justo in leo congue mollis.
Nullam in neque eget metus hendrerit scelerisque
eu non enim. Ut malesuada lacus eu nulla bibendum
id euismod urna sodales. ";
$compressed = gzcompress($string);
echo "Size ban u: ". strlen($string)."\n";
/* Xut
Size ban u: 800
*/
echo "Size sau khi nn: ". strlen($compressed)."\n";
/* Xut
Size sau khi nn: 418
*/
// Ly li chui ban u
$original = gzuncompress($compressed);

Chng ta c th tit kim ti 50% tng kch thc y ! Bn cnh , 2 hm gzencode()


v gzdecode() cng lm iu tng t nhng dng thut ton khc thi .

Page 242 of 413

8/ ng k 1 hm shutdown
Vi hm register_shutdown_function(), chng ta c th lm 1 vi chuyn trc khi
script ngng chy .
V d m thi gian chy script n :
PHP Code:
// Ly thi gian bt u chy
$start_time = microtime(true);
// Code y
// ...
// Xut code chy c bao lu ri
echo "Thi gian chy script : ".
(microtime(true) - $start_time).
" seconds.";

Vi ci nhn u tin, c th bn thy tht tm thng !! on code trn ch l thm on


code tnh thi gian cui script . Tuy nhin, nu bn gi hm exit() , on code trn s
hok bao gi chy c . Thay vo , n s thng bo li , hoc l khi script bn b kt
thc bi ngi dng, bng cch nhn nt stop trn trnh duyt chng hn !!!
Khi bn s dng register_shutdown_function(), on code ca bn s chy bt k n b
ngng t xut v l do g !
PHP Code:
$start_time = microtime(true);
register_shutdown_function('my_shutdown');
// Code y
// ...
function my_shutdown() {
global $start_time;
echo "Thi gian chy script : ".
(microtime(true) - $start_time).
" seconds.";
}

Ngun : dch t http://net.tutsplus.com/tutorials/ph...-need-to-know/ ( test ht ) +


thm vo 1 vi kin ring
P/s: c b qua s 5/ v n hok s dng cho h iu hnh WINDOW

iu g khin bn l 1 coder ti ?
Page 243 of 413

Tt c chng ta u c nhng thi quen xu, chng ta s tm hiu , cng nhau kim tra,
nh gi li v sa ngay lp tc !
Bn hok c k hoch trc khi bt u code
Trc khi bn bt u code, bn cn phi c 1 chin lc . iu ny s gip bn theo di
c code, v trnh vic khng hiu code s khin bn nhc u, y l cha mn n
nhng linh hn ti nghip khc c code ca bn =]]]
Mt cch khc phc iu ny l vit mt on phc tho cc chc nng ca on
script bng cch comment u file
V d :
PHP Code:
<?php
// Include necessary data
// Initialize the database connection
// Include the common header markup
// Determine the page variables from the POST data
// Load the proper database info using the page vairiables
// Loop through the loaded rows
// Format the images for display
// Create a permalink
// Format the entry for display
// Add the formatted entry to the entry array
// Collapse the entry array into page-ready markup
// Output the entries
// Include the common footer markup

Nh bn thy, mc d cha vit dng code no, chng ta bit file ny s lm g v n


s nh th no !! V khi 1 chc nng na c thm vo, bn ch cn sa comment trn
.
Chng ta cn phi thay i cch tip cn, n s gip k nng t chc code tt hn
Lu : on comments trn ch l v d . Mt vi comments trn c th hok cn thit, 1
vi s b thay i, v 1 vi comments c cc chc nng khc c th s c thm vo file
na .

Page 244 of 413

Bn khng comment g c
Vn ti t nht l khi chng ta code, chng ta khng comment y , hoc thm ch
khng comment .
Khi chng ta cn phi chnh sa code, c th s gy hng c ng dng .
Qu trnh comment code s din ra trong khong t 10 pht ti 6 gi !
V d :
PHP Code:
$pieces = explode('.', $image_name);
$extension = array_pop($pieces);

on code trn lm g ? C phi bn ang suy ngh hiu c nhim v g ? Bn vn


ang hiu 1 cch hok chc chn $extension s cha g ?
Vy chng ta th comment :
PHP Code:
// Ly ra nh dng ca hnh nh
$pieces = explode('.', $image_name);
$extension = array_pop($pieces);

By gi th khng cn phi suy ngh g c : bn nhn comments, bn nhn tip code v


hiu ngay on code c ngha g !
Comment nh trn c th ch gip bn tit kim thi gian 5 giy nhng nu trong 1 ng
dng ln, s l 1 vn !
Vy, by gi hy tp vit comment trc khi code i nh !!!

Bn hi sinh s r rng i ly s ngn gn


Mt vi v d in hnh cho vic hi sinh ny l khi bn dng cc bin vi tn hok r rng
( nh l $a --- vy $a cha g ? ) hay b qua ngoc cong { } .
PHP Code:
<?php
$foo = 8;
if( $foo<10 )
if( $foo>5 )
echo "Ln hn 5!";
else
echo "Nh hn 5!";
else
echo "Ln hn 10!";
echo "<br />Another note.";

Vi ci nhn u tin, bn s ngh dng cui cng s xut ra nu $foo ln hn 10 ! Nhng


bi v dng else v if nu hok c ngoc cong th ch nh hng ti dng ngay sau n, nn
Page 245 of 413

Another note s b b qua .


Bn c th nhn ra iu ch trong vi giy ? Tt nhin l c
Nhng chng ta c nn lng ph nng lng lm iu ? Hon ton khng
Thm ngoc cong vo ch lm code bn tng 1 vi dng, nhng n s gip code r rng
hn nhiu
PHP Code:
<?php
$foo = 8;
if( $foo<10 )
{
if( $foo>5 )
{
echo "Ln hn 5 5!";
}
else
{
echo "Nh hn 5!";
}
}
else
{
echo "Ln hn 10!";
}
echo "<br />Another note.";
Vy hy c gng code tht r rng, ch vi vi dng code bn s gip ng khc khng phi cng no ra
hiu bn ang code g .

Bn hok theo 1 chun code no c


Vit code theo cch ca bn s gip bn tha mn, thy d chu nhng i vi ngi khc
th hon ton khng .
V vy, hy vit code theo 1 chun v duy tr iu !! Mi ng s cm n bn ! ( C th bao gm c bn
y )

Bn lp li code
Khi bn quan st code ca bn, nu bn gp li , hy t hi , mnh c cn phi sa nhiu
hn 1 file ? Nu bn tr li c, n lc nhn li cch bn code !!!
Nu bn c nhiu on code cng chc nng , bn ang lm sai y !
Bn khng theo 1 m hnh no c
Code ca bn cn phi c 1 m hnh .Ti khng ng bn nn dng m hnh MVC hay
Page 246 of 413

i loi vy. ti l bn cn phi bit cch phn loi cc thnh phn, ni dung , v.v v
nhng thnh phn, ni dung y s lm g
Khi bn code theo 1 m hnh, nhiu quyt nh s tr nn t ng ha, v khi 1 ngi
no xem code bn, h s hok phi on nhiu khi tm kim 1 chc nng no .
Lm iu ny s hok mt nhiu thi gian, nhng s gip bn rt nhiu y !
Vy bn hy c gng code theo 1 m hnh nh !!!!

Bn qu thng minh cho cc sn phm ca bn


C 1 t vn v gii php n gin v gii php phc tp
Chng ta khng cn 1 cch tip cn phc tp vi nhng vn n gin !!!
Vi 1 level c bn, gii php n gin lun c mong i . Bn ang i t im A n
im B, bn i ng vng qua im C s th v hn, nhng chng gip ch c g c
@@
Vi 1 cu tr li phc tp, bn s khin ngi khc khng hiu, khng phi l v ng khc
hok thng minh nh bn, bi c th bn hc c t 1 bi bo m h cha c qua, v v
th s dn n hiu sai hoc hok hiu .
ng lm gim gi tr ca mnh, nhng cng nh trnh nhng cch tip cn cc k phc tp vi
nhng vn n gin nh !

Bn cnh , bn hok nn code theo kiu t cho mnh l 1 chuyn gia !! Vi 1 trit l i
loi l : nu bn hok hiu code mnh, tt nht ng nn c n .
y l 1 cch tip cn anti cng ng, v hok c tnh xy dng, hng dn . V 1 lp
trnh vin nh vy s hok c s gip ca mi ng khi anh ta gp vn vi code .
V vy, trnh vic to code kh hiu di mi hnh thc nh . iu s hok khin bn thng minh hn
hay nhn c nhiu s tn trng hn u .

Khng cp nht kin thc


Bn cnh vic li bing comment, vit code kh hiu, v.v trn th vic hok cp nht
kin thc cng khin bn tr thnh 1 coder ti .
Cng ngh pht trin lien tc, cng ngh mi ra i gii quyt nhng vn ang tn
ng, nu bn chn cch ng yn khng chu tin b th tht l sai lm trm trng .
Di y l nhng vn khc bn nn tham kho
Bn c gng lm tt c
Bn khng th theo kp c cng ng . Nhng tht may mn, c 1 s ngi dnh thi
gian ca h cp nht cng ngh mi, v vit tutorial v nhng g h hc c . Nu

Page 247 of 413

bn tm c trong nhng ngi ny 1 ngi c cch tip cn v phong cch vit code
ging bn , bn c th hc hi h .
Vic theo di bi vit ca vi ngi hp vi bn s tt hn nhiu so vi theo di mi
blog cng ngh bn gh qua vi 1 vi l do sau :

Nu bn tin tng kin ca h, h s gip bn hc hi cng ngh


Nu 1 cng ngh xut hin nhiu ln trn cc blog ny, bn hy dnh thi gian
nm bt n, v n s l cng ngh ph bin sau ny
Nhng tutorial ca blog s gip bn tit kim rt nhiu thi gian khi phi bt u
t con s 0

Bn khng dm i mt vi th thch
Nu bn khng dm i mt vi th thch, th bn c vn ri y .
Hy tm 1 vi th thch trong d n bn ang lm !
T hi bn cc cu sau khi ang xem d n :

C cng ngh mi no gy thch th vi mnh c ng dng y ?


Mnh hc thm c 1 cng ngh mi no k t ln cui cng mnh xem 1 d
n nh th ny ?
u l cch thc hin tt nht ti c th m bo rng ti s theo ui ti cng
project ny ?

Lu : ti khng ni v vic lm 1 ci g rt phc tp y, c th n gin ch l


thm Docblocks vo objects .
Hy c khng t thuyt phc bn thn rng mnh hc nhng g cn hc nh !

Bn hok chia s
Hy ci thin bng cch trao i, tho lun vi cc ng nghip coders nh . lm c
iu ny c nhiu cch : Nu bn hiu r 1 vn no , hy vit tutorial v n v cung
cp m ngun . Nu bn hok thch nh th, bn c th lt qua vi din n v gip
nhng ngi mi .
Bn s hi : Ti sao gip nhng ngi mi s gip ti tin b ?

Thng thng, nu bn post 1 gii php cn c ti u , s c nhng lp trnh vin


chuyn nghip gip bn . Vy chia s l 1 mi tn trng 2 con nhn : bn khng ch
gip ngi khc tin b, m cc k nng ca bn s sc bn hn vi s tr gip ca
nhng cao th !
Bn hok c nhng d n th nghim
Nu chng ta mun tham gia vo 1 d n ln v honh trng, cch tt nht l chng ta
Page 248 of 413

hy th sc vi nhng d n th nghim trc vi cc cng ngh bit .


Vi phng php , chng ta s tin b hn, v khng bao gi tr deadline hay lm sai
c .
Chng ta u c ti
Theo logic, nu chung ta tin b vo thi im by gi, tc l trong qu kh chng ta
rt ti .
Ti bit l khi ti nhn li nhng on code ti vit trong qu kh, ti s cm thy kinh
hong !

V vy.hy dng li
Chng ta u khng hon ho . Nhng chng ta c th lm mi th vi nng lc ca
mnh cng gn ch chng ta mun cng tt ................

Cc li c bn trong lp trnh PHP


Trong lp trnh c 3 loi li xp theo th t tng dn kh ca vic sa li l :
Li c php:
li ny d mc phi nhng cng rt d sa, v khi PHP parse, li s c ch ra dng my
, li g . Ch cn ch k lng hn th s trnh c li ny
Li runtime
Li ny l li v thi gian chy script, v d bn gi file : require('abc.php'). Nhng file
abc.php li khng tn ti .
Li logic
y l loi li kh nut nht v au u nht, v khi chy khng h c 1 li no c,
nhng n s hok chy nh cch m chng ta mun n chy @@ . Debug li ny l 1 qu
trnh ....chy nc mt .
V d n gin nh bn lm 1 php ton cng nhng thay v + bn li - => ra kt qu
khng mong mun. Khi thut ton cng phc tp m b 1 li logic th c khi b c ngy
tm xem n sai u .
Di y l 1 s li hay thi quen hok tt hay gp :
1/ Nhy n, nhy i
Chng ta thng hay s dng cho mi chui, d l chui c ni suy hay khng.
iu ny s gy chm cho code v du nhy c nhim v truy xt xem c bin no cn
c ni suy hay khng .
Lu 1 : nhy i c th cha bin v nhy n, nhy n th c th cha nhy i
nhng khng th xut gi tr ca bin .
Lu 2 : bin mi trng khng th ni suy c nh $_POST, $_GET, $FILES, v.v
2/ Du chm phy sau vng lp
Du chm phy l 1 tc nhn cc k quan trng v th nn n cng c kh nng gy ra

Page 249 of 413

nhng li logic rt rt kh pht hin .


Vd :
PHP Code:
for($i =0; $i<20; $i++) ;{
echo $i;
}
//Ch xut s 20 thay v xut t 0->19 nh bn mong mun .
// V for($i=0; $i<20; $i++); <<<<Lp bn thn n tng $i cho n khi $
i=19 .
// Sau $i s c tng ln 1 l 20 ri mi chy xung dng echo $i

Bn cht ca dng FOR:


for($i = value1(1); $i < value2(2); $i++(3)){
code y(4)
}
Dng for trn s lm cng vic nh sau : bt u t $i = value 1, sau kim tra xem c
value1 c b hn value2 hay khng, nu c, chy code --->tng $i ln 1. Nu khng -->dng li .
S : (1) => (2) =>(4)=>(3)=>(1)=>....cho n khi bc (1)=>(2) khng tha na
3/ Thiu break sau switch
Mi ngi dng switch thng rt hay qun break; sau mi trng hp . iu ny gy ra
1 li logic l code s chy nhiu hn 1 trng hp m mnh mong mun.
4/ Khng gii hn thi gian chy ca script
Khi run 1 on script rt hay xy ra li runtime, tc l script chy gp li chy hoi chy
hoi, hay cng c th l 1 vng lp n v cc
VD:
PHP Code:
$i =0;
while($i <3){
echo "$i";
// Vng lp chy mi v khng tng gi tr $i ln, $i mi bng 0 v n
mi <3 ...
}

Nh vy s rt tn ti nguyn v thi gian, v th gii hn 1 khong thi gian chy script


l 1 iu cn thit .
Ta dng hm : set_time_limit($seconds) <<mc nh l 30s
Hm set_time_limit khi c gi n s reset li b m, tc l nu script tn 2s chy
n dng set_time_limit(1) th tng cng cn 3 giy script dng li .
Bn c th chnh gi tr mc nh default 'max_execution_time' trong file php.ini . Tuy
nhin 1 s host hok cho php lm iu ny . . .
v d :
PHP Code:
set_time_limit(1);
$i =0;
while($i<3){
echo 'a';
}

Page 250 of 413

5/ Tin tng vo ngi dng


Chng ta thng n nhng trng hp ln m b qua cc mt xch nh . Chng ta
thng qun xt trng hp gp ngi dng nguy him. V d ti field name ca form,
ngi ta nhp 1 cc k t nh ' " $ ... Nu chng ta thao tc vi nhng gi tr th code
s vn chy tt nhng khi validate th s c c trm li v HTML => nh hng nghim
trng ti SEO .
V th chng ta nn dng htmlentities() hay htmlspecialchars() escape characters .
Cch dng : $name = htmlentities($_POST['name']);
//Hm htmlentities() c nhim v chuyn i kh nhiu k t mc nh thnh m :
http://www.w3schools.com/html/html_entities.asp
//Hm htmlspecialchars() c nhim v ch chuyn i 5 k t : > < ' " &
Ch khi click phi chn view source th mi thy s thay i ca n
V d: ngi dng nhp vao field name : ABC ' s books & CD .
Sau : $name = htmlentities($_POST['name'])
echo "$name"; <<< Web vn hin th ABC 's books nhng khi view source th l ABC
&#39; s books &amp; CD
6/S dng sai cc ton t
Hy chc chn rng bn hiu =, ==, === s dng
= ch c dng gn bin v dng trong query MySQL, == dng trong if, v.v , cn
=== th 2 gi tr phi bng nhau v phi cng kiu d liu .
V d 1 :
PHP Code:
$a = '5';
if($a ='6') {
code y
}

trn l nu gi tr ca $a l 6 th chy code trong if, nhng if($a = 'number') ng


vi tt c cc gi tr number khc khng
V d 2 : 5 ==5 l ng nhng 5===5 l sai

Trch dn: hc hi t 1 ti liu ting anh, v vit li theo phong cch ca mnh thm vo
1 vi v d

Code gi mail trong PHP


Page 251 of 413

Hm mail c php nh sau : mail(to,subject,message,options)


Trong :
+ to:a ch ngi nhn
+ subject :tiu th
+ message :ni dung th
+ options:cc tu chn b sung
V d :
File sendmail.php
PHP Code:
<?php
if (isset($_POST['sendmail']) && $_POST['sendmail']=="send")
{
$from=$_POST['from'];
$to=$_POST['to'];
$subject=$_POST['subject'];
$message=$_POST['message'];
$options="Content-type:text/html;charset=utf-8\r\nFrom:$from\r\nReplyto:$from";
mail($to,$subject,$message,$options);
echo" gi mail";
}
?>
<form method="post" action="sentmail.php">
Ngi gi:<input type="text" name="from" size="70" /><br />
Gi ti : <input type="text" name="to" size="70"/><br />
Tiu :<input type="text" name="subject" size="70"/><br />
Ni dung :<br />
<textarea name="message" rows="10" cols="70">
</textarea><br />
<input type="submit" value="send" name="sendmail"/>
</form>

Xong !
Chc thnh cng

T lm menu 2 cp n gin vi php


v javascript
By gi bt u hn.
database n gin cho menu. kh n gin nn cng khng cn gii thch g nhiu hn.
parent=0 l cp cha. parent khc 0 chnh l cp cha ca n.

Page 252 of 413

Kt ni database
PHP Code:
<?php
//=============================Kt ni csdl ===========================
==========
$host="localhost";
$u="root";
$p="root";
$db="demo_db";
$result=NULL;
$conn=NULL;
$conn=@mysql_connect($host,$u,$p) or die ("Ket noi server that bai"
);
if($conn)
{
@mysql_select_db($db,$conn) or die("Ket noi database that bai")
;
}
mysql_query('SET CHARACTER SET utf8');
//=====================================================================
==========
?>

Sau menu t database ra ngoi (c cha ln con)


PHP Code:
<?php
$sql="select * from cate_news where parent='0' order by date ASC";
$result=mysql_query($sql);
while($rows=mysql_fetch_array($result))
{
?>
<!-- Main menu -->
<div class="main_menu">
<a style="width:100%; height:100%;" href="index.php?cate=<?php echo
$rows['id']; ?>"><div style="line-height:30px; paddingleft:10px; background:#006699; width:200px; borderbottom:1px solid #FFFFFF;"><?php echo $rows['name']; ?></div></a>
</div>
<!-- Ht main menu -->
<!-- Sub menu -->
<div style="marginleft:30px;" class="sub_menu" id="sub_<?php echo $rows['id']; ?>">
<?php
$sql2="select * from cate_news where parent='".$rows['id'].
"' order by date ASC";
$result2=mysql_query($sql2);

Page 253 of 413

while($rows2=mysql_fetch_array($result2))
{
?>
<div><a href="index.php?cate=<?php echo $rows2['id']; ?>">
- <?php echo $rows2['name']; ?></a></div>
<?php
}
?>
</div>
<!-- Ht Sub menu -->
<?php
}
?>

Tip theo l n ht menu con i


HTML Code:
.sub_menu
{
margin-top:5px;
margin-bottom:5px;
display:none;
}

Cui cng l cho n bung sub menu ra theo iu kin. dng javascript
HTML Code:
<!-- X sub menu -->
<script>
var id='<?php echo $_GET['cate']; ?>';
var sub_menu='sub_'+id;
if(document.getElementById(sub_menu))
document.getElementById(sub_menu).style.display='block';
else
{
<?php
$cate=$_GET['cate'];
$sql="select * from cate_news where id='".$cate."'";
$result=mysql_query($sql);
if(mysql_num_rows($result)>0)
{
$rows=mysql_fetch_array($result);
?>
var id='<?php echo $rows['parent']; ?>';
var sub_menu='sub_'+id;
if(document.getElementById(sub_menu))
document.getElementById(sub_menu).style.display='block';
<?php

Page 254 of 413

}
?>
}
</script>

T lm im sng vi javascript
ci ny trn mng c code sn v vit bng jquery, nhng m mnh t vit li v mnh vit
mnh s hiu r v chnh sa d dng hn rt nhiu, v hiu r c mt s ci mi na.
Tht s n ch l ci div ni ln trn m thi
c cc c im sau:
- Khi vo trang index hin ra 1 pop-up qung co nh, nm gia trang web.
- T tt sau 5s.
- C nt Close tt.
- Lm m background trang web.
DEMO
u tin l nh dng
HTML Code:
<style>
#popup
{
position:fixed;
z-index:99999;
background:#FFFFFF;
border:5px solid #003300;
padding:5px 0px 5px 5px;
display:none;
}
#bg_trans
{
position:fixed;
z-index:99998;
display:none;
background-color:#000000;
opacity:0.4;filter: alpha(opacity=40);
-msfilter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";
}
</style>

t thuc tnh onload hoc l gi lm t cui trang web cng khng sao
HTML Code:
<body topmargin="0" leftmargin="0" onload="show_popup();">

- ci popup v nn
HTML Code:
<div id="popup" style="width:200px;">

Page 255 of 413

<!-- //////////////////////////////////////////////////
-->
<!-- Nt close -->
<!-- //////////////////////////////////////////////////
-->
<div style="width:27px; right:0px; top:0px; height:18px;
position:absolute; z-index:999999; background:url(x.jpg);
cursor:pointer;" onclick="hide_popup();"></div>
<!-- ht nt close ////////////////////////////////////
-->
<!-- Ni dung y -->
<!-- //////////////////////////////////////////////////
-->
ni dung popup ni dung pop-up <br />
ni dung popup ni dung pop-up<br />
ni dung popup ni dung pop-up<br />
ni dung popup ni dung pop-up<br />
ni dung popup ni dung pop-up<br />
ni dung popup ni dung pop-up<br />
ni dung popup ni dung pop-up<br />
ni dung popup ni dung pop-up<br />
ni dung popup ni dung pop-up<br />
<!-- ht ni dung /////////////////////////////////////
-->
</div>
<div id="bg_trans">
</div>

HTML Code:
<script>
var time=5; // thi gian
time=(time*10)-10;
var count=0;
var type;
type=navigator.appName;
function show_popup()
{
count++;
if(type=="Microsoft Internet Explorer")
{
if(document.compatMode=="BackCompat")
{
var height=document.body.offsetHeight;
}
else
{
var
height=document.documentElement.offsetHeight;
}
}
else
{
var height=window.innerHeight;
}
if(document.compatMode=="BackCompat")
var width=document.body.offsetWidth;

Page 256 of 413

else
var width=document.documentElement.offsetWidth;
document.getElementById('popup').style.display='block';
document.getElementById('bg_trans').style.display='block';
document.getElementById('bg_trans').style.width=width+'px';
document.getElementById('bg_trans').style.height=height+'px';
var
t_width=document.getElementById('popup').offsetWidth;
var
t_height=document.getElementById('popup').offsetHeight;
document.getElementById('bg_trans').style.top="0px";
document.getElementById('bg_trans').style.left="0px";
var mar_top=(height/2)-(t_height/2);
var mar_left=(width/2)-(t_width/2);
document.getElementById('popup').style.top=mar_top+"px";
document.getElementById('popup').style.left=mar_left+"px";
if(count<=time)
{
setTimeout("show_popup()",100);
}
else
{
document.getElementById('popup').style.display='none';
document.getElementById('bg_trans').style.display='none';
}
}
function hide_popup()
{
time=0;
document.getElementById('popup').style.display='none';
document.getElementById('bg_trans').style.display='none';
}
</script>

Mnh t hm setTimeout cho c khi x l pop-up v mnh mun nu ngi dng


ko ca s thu nh hay m rng, pop-up t ng chy theo
V l javascript nn cc bn ch cn view->source hoc save as trang web v l c
ht code ri.
Cc bn c th ng dng lm code qung co 2 bin trang web hoc lightbox, tt
nhin l khng dng jquery nn hiu ng n khng mt nh dng jquery.

Page 257 of 413

Gii thiu - Ci t Smarty


Thng thng khi lp trnh PHP bn thng hay vit ln c phn HTML vi m
lnh PHP trn mt trang. iu ny s dn n rt ri nht l khi bo tr. Hoc l 1
ngy p tri khch hng ca bn khng thch giao din ca website hin ti, h i
hi phi thay giao din khc. Bn l ngi vit ra v cng l ngi bo tr th khng
sao nhng nu bn vit ra sau ngi khc bo tr, vic c li source code l 1
iu ht sc kh khn. Hn na, vic chnh sa template theo cch vit thng
thng rt mt thi gian.

Vy lm sao gii quyt vn trn: lm th no c lp m PHP v m


HTML trn 1 website hay ni cch khc lm sao tch bit c vic thit k v
lp trnh website? Mt website ra i l s kt hp gia thit k ha v lp trnh,
lm sao vic thit k khng nh hng n lp trnh hay ni cch khc khi to ra
1 giao din mi th ngi lp trnh khng phi thay i phn chc nng bn lp
trnh PHP ca mnh

V l nhiu do ny nhiu template ra i nh Smarty, PHP Savant, PHPlib, Yats,


FastTemplate,... trong ni bt nht l Smarty v PHP Savant.
Vy cc template enginer hot ng nh th no, bn hy xem topic sau: (link)
Ti sao ta li chn template enginer Smarty?
- Th nht v n d s dng, dung lng nh
- H tr cache gip ti trang nhanh hn
- c h tr ti liu d c
- c xy dng trn kin trc 3 tng
Presentation Logic Layer : Ni t b cc Website , trnh din d liu c ly ra
t Business Logic Layer:
+CSS
+Image
+JavaScript
+XML
+RSS
Business Logic Layer : Cc Nghip V trn h Thng
Data Access Layer : Cc Class tng tc vi Database
Presentation Logic Layer <=> Business Logic Layer <=> Data Access Layer

Page 258 of 413

- H tr cc hm cho h thng ring trong template


- Cung cp trnh debug console
- Plugins: cung cp cho vic s dng li code
- Filters, Smarty Internals,...
Chng ta bt u lm ci t v lm 1 v d n gin nh!
Bc 1: bn download library Smarty t a ch: http://www.smarty.net/download
Hin ti version mi nht l 3.1.5
Sau khi download bn gii nn
Bc 2: To cc th mc cho project
- Bn to 4 th mc: templates, templates_c, cache, includes trong www/myWebsite/
- To th mc template: www/myWebsite/templates/default/ cha giao din
- Bn copy th mc libs (Smarty va download) vo root/www/myWebsite/includes
v rename thnh "smarty" nh!
- Ta to file cu hnh "config.php" trong th mc /includes cho project, file ny
khi to Smarty, cu hnh database,...
- To file index.php trong www/myWebsite, v template ca n l index.html trong
myWebsite/templates/default/
Nh vy cu trc cc th mc sau khi to nh sau:

Bc 3: Cu hnh khi to Smarty


- Bn m includes/config.php v paste code cu hnh sau:
Thay i $path_site nh
PHP Code:
// Config pages
$path_site = "/myWebiste/"; // ng dn th mc website, slash u v
cui dng
define('_BASE', $_SERVER['DOCUMENT_ROOT'].$path_site);
// ng dn t
uyt i E:/Wamp/www/myWebsite/
// Smarty config
include _BASE.'includes/smarty/Smarty.class.php';
$smarty = new Smarty;
$smarty>template_dir = _BASE.'/templates/default/'; // template folder
$smarty->compile_dir = _BASE.'/templates_c'; // template cache
$smarty->cache_dir = _BASE.'/cache'; // php cache
$smarty->config_dir = _BASE.'/includes/smarty/config'; // smarty cache
$smarty->compile = true; // end able compiler, debug

Page 259 of 413

Bc 4: Xong cu hnh, ta th to 1 template n gin nh!


Template hin th: "Cho mng bn: Ph"; vi gi tr "Ph" l 1 gi tr c to
ra t bin $name trong index.php
- M myWebsite/index.php
PHP Code:
// include file config
require 'includes/config.php';
$name = "Ph"; // to bin
$smarty>assign("person",$name); // np $name vo tempalate, to ra bin perso
n cho template s dng
$smarty->display("index.html"); // np template index.html
?>

- M myWebsite/templates/default/index.html v to ra 1 template n gin


PHP Code:
<!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=utf-8" />
<title>Hello World</title>
</head>
<body>
<h1>Cho mng bn: {$person} !</h1>
</body>
</html>

- Chy http://localhost/myWebsite/index.php v
xem kt qu

Smarty c bn [ Phn 1 ]
BI 1: HIN TH D LIU T MYSQL BNG SMARTY
1.Hinh nh bi tp

Page 260 of 413

:2.Hng dn ci t smarty:

Page 261 of 413

3. Hng dn gii quyt bi tp


- Cng vic u tin ta s phi to 3 forder gm:
+ Cache: Dng lu d liu gip website truy xut nhanh hn
+ Tempalates: Dng lu cc file templates dng .tpl
+ Configs: Dng lu file .conf
+Tempalates_c: Dng lu tr nhng pht sinh li ca h thng.
- To c s d liu trong MySQL
+ Database: student
+Cc trng: id_student: AI, Primary,INT.
nick: Varchar 100.
name: Varchar 100.
ngaysinh: Varchar 100.
nhom: Varchar 100.
email: Varchar 100.
- Vit code
To file index.php
Vi dng code nh sau
PHP Code:
<?php
require('../libs/Smarty.class.php'); // y l th vin ca h thng
$smarty= new Smarty(); // Khi to Smarty
$con=mysql_connect("localhost","root","mysql") or die ("Dont cant data
base");
// Kt ni ti MYSQL ca bn
mysql_select_db("student",$con) or die ("Dont cant database ");
// Kt ni ti Database
$result=mysql_query("SELECT * FROM student_database WHERE 1");
//Chn tt c cc trng trong ct student_database.
$students=array();
//Khi to bin $student dng mng gn d liu
while ($row=mysql_fetch_assoc($result)) // Ly tng bn ghi
{
$students[]=$row; // Gn bin mng vi tng d liu
}
$smarty>assign("students",$students);// Gn d liu cho bin mng Smarty
$smarty>display("index.tpl"); // Hin th ra ngoi mn hnh vi file index.tpl
?>

Sau chng ta s to 1 file index.tpl trong th mc templates vi dng code nh


sau:
PHP Code:
<html>
<title> THNG TIN HC SINH </title>
<head>
</head>
<body>
{section name=st loop=$students} // Khi to Section ly bin Smarty $s
tudents khi chng ta gn $smarty->assign("students",$students);
<table width="80%" border="1" cellspacing="4">

Page 262 of 413

<tr>
<td width="38%" bgcolor="#CCCCCC">
<strong>Ti khon ca &nbsp;{$students[st].nick}</strong>
// Ly d liu ca trng nick tng ng trong MYSQL
</td>
<td width="62%">&nbsp;</td>
</tr>
<tr>
<td><font><b>Tn: </b></font></td>
<td><font><b><bgcolor="#CCCCCC">{$students[st].name}</b></font></td>
</tr>
<tr>
<td>Ngy sinh</td>
<td>{$students[st].ngaysinh}</td
<tr>
<tr>
<td>Nhm</td>
<td>{$students[st].nhom}</td
<tr>
<tr>
<td>Email</td>
<td>{$students[st].email}</td
<tr>
</table>
<br />
{/section}
</body>
</html>

Bc 4: Test khi chy


Chng ta s chy th xem c li g khng:
http:\\localhost\smarty\go
Ch : y mnh to mt th mc tn go nm trong n c
tt c forder v file trn.

Smarty c bn [ Phn 2 ]
Xin cho cc bn phn I cc bn c nm c cch ci t smarty v
khi chy chng trnh vi bi tp show d liu ra bn ngoi
trong phn II bi tp s kh hn mt cht, cc bn s phi to lin kt gia 3
bng v show n ra ngoi mn hnh, ngoi ra phn ny mnh s thm to
style c bn cho cc bn.
Bi tp:

Page 263 of 413

1.To lin kt 2 bng xut ra mn hnh v sa style c bn cho bng.

Page 264 of 413

2. Hng dncho bng.

Nh bi trc mnh hng dn cc bn ci t smarty, bn no cha hiu th


c li bi trc nh.
bi ny mnh s hng dn cc bn ni 2 bng vi nhau vi cu lnh INNER
JOIN to s lin kt gia cc bn
V qua style c bn mt t cho cc bn nm c thao tc c bn style giao
din trn smarty
Ok, lets go
Bc 1:
To c s d liu SQL
Bc ny th ai cng lm c ri, cc bn to c s d liu nh sau:
Database: daily_banhang
Bng:
Khuvuc: ten_khuvuc: Varchar 50
Id_khuvuc: int 11
Ten_daily: varchar 50
Mathang: id_mathang: int 11
Ten_mathang: varchar 500
Soluong: int 100
Ketqua: id_kv: int 11
Id_mathang: int11
Dongia: int
Bc 2: Vit code no

Cc bn to mt file c tn daily_banhang.php
on m nh sau:
PHP Code:
<?php
include("../libs/smarty.class.php");
$smarty = new smarty();
mysql_connect("localhost","root","mysql") or die ("Li khng th kt n
i ti CSDL");//Dng ny l kt ni CSDL ca cc bn
mysql_select_db("daily_banhang") or die ("Li khng th kt ni ti Dat
abase");
// Dng ny l kt ni ti Database
$sql=mysql_query("SELECT
ten_khuvuc,
ten_daily,
ten_mathang,
dongia,
soluong,
(dongia*soluong) as tong_tien
FROM khuvuc
INNER JOIN ketqua on khuvuc.id_khuvuc=ketqua.id_khuvuc

Page 265 of 413

INNER JOIN mathang on ketqua.id_mathang=mathang.id_mathang


ORDER BY ten_khuvuc ASC");
// Chn CSDL kt ni 2 bng bng INNER JOIN
$khuvuc=array();
$daily=array();
$mathang=array();
$soluong=array();
$dongia=array();
$tong=array();
while ($row=mysql_fetch_assoc($sql))
{
$khuvuc[]=$row['ten_khuvuc'];//Gn trng tn khu vc vo bin khu vc
$daily[]=$row['ten_daily'];
$mathang[]=$row['ten_mathang'];
$soluong[]=$row['soluong'];
$dongia[]=$row['dongia'];
$tong[]=$row['tong_tien'];
}
$tieude=array("Khu vc","Tn i l","Tn mt hng","S lng","n gi
","Tng tin");// Tiu ca bng
$smarty->assign("khuvuc",$khuvuc);
$smarty->assign("daily", $daily);
$smarty->assign("mathang", $mathang);
$smarty->assign("soluong", $soluong);
$smarty->assign("dongia", $dongia);
$smarty->assign("tong", $tong);
$smarty->assign("tieude", $tieude);
$smarty->display("daily_banhang.tpl");// In ra mn hnh
mysql_free_result($sql);
?>

Tip theo ta to thm mt file tn daily_banhang.tpl trong th mc templates


Code nh sau
PHP Code:
<html>
<title> DAI LY BAN HANG </title>
<head>
</head>
<body>
<table cellpadding="4" border="1" cellspacin="0">
<tr>
{section name=id loop=$tieude }
<th id="cottieude">{$tieude[id]}</th>
{/section}
</tr>
{section name=data loop=$khuvuc}
<tr id="cotbang">
<td>{$khuvuc[data]}</td>
<td>{$daily[data]}</td>
<td>{$mathang[data]}</td>
<td>{$soluong[data]}
<td>{$dongia[data]}</td>
<td>{$tong[data]}</td>
</tr>
{/section}
</table>
</body>

Page 266 of 413

</html>
<style>
#cottieude{
text-transform: uppercase;
background-color:#25510D;
color: #EEEEEC;
}
#cotbang{
background-color:#ACABAB;
text-weight:bold;
text-align:center;
</style>

Mnh gii thch thm on style y mnh c th to style bt c u bn ch cn


chn vo
PHP Code:
<th id="cottieude"></th>

Nhn th ny chc cc bn cng hiu. Chc cc bn thnh


cng

K thut s dng lazy loading trong


hng i tng
cc bi trc, chng ta tm hiu v cc kin thc c bn trong lp trnh hng
i tng. Tip tc trong bi ny, chng ta s cng tm hiu v k thut s dng lazy
loading trong ng dng.
Lazy loading l k thut rt quan trng trong lp trnh hng i tng. V nh c n
ta c th tit kim c rt nhiu thao tc gi np file khi s dng. Bn thn lazy loading
s dng magic method (cc phng thc c bit trong PHP) triu gi d liu. C th
l phng thc __autoload().
Phng thc ny s c t ng gi khi mt i tng c khi to. Cng v l do
m chng ta s dng n require() mt file cha lp .
V d:
To 1 file tn test.php vi ni dung sau:
PHP Code:
<?php
function __autoload($url){
require("$url.php");
}
$abc=new ABC;

Page 267 of 413

$abc->demo();
?>

Tip tc ta to 1 file tn ABC.php vi ni dung sau:


PHP Code:
<?php
class ABC{
public function demo(){
echo "<h2>Welcome to QHOnline Tutorial</h2>";
}
}

Khi chy file test.php th kt qu s hin th trn mn hnh l:

Welcome to QHOnline Tutorial


R rng trn file test.php ca chng ta trn khng h c class no tn ABC v cng
khng c phng thc no tn l demo() c. Vy th v sao ta c th gi c chng ra
bn ngoi ?.
Bi v khi ta khi to lp ABC, lp tc s gi autoload(). V phng thc autoload() s
ly tn lp ABC nh 1 tham s $url v dng lnh require() np file tn ABC.php vo.
Khi , file ABC.php ca chng ta c lp tn ABC v cng c phng thc tn demo()
nn file test.php ca chng ta mi xut gi tr ca phng thc demo() ra bn ngoi c.
Bn thy y, thay v trc khi s dng 1 lp ta phi require() cc lp trn u rt
nhiu. Th gi y vi lazy loading ta ch vic gi lp th t ng h thng s np file
ng vi tn lp . iu ny gip ta bt nhiu thi gian v gim hao tn ti nguyn khi
phi thc hin vic np load cc th vin trn u cc file rt nhiu.
Tuy nhin, cn lu rng. Khi s dng c ch ny, thng ta phi ch ti tn lp v
tn file. Chng cn phi c s lin quan nht nh. V d: Tn lp v tn file ging nhau.
V nu khng ging nhau th qu trnh np load s tht bi. V d nhin ta khng th ly
c cc lp, phng thc nh mong mun.
K thut lazy loading cng l k thut c s dng rt nhiu trong cc PHP
Framework hin nay. Chng hn nh zend framework, khi bn mun gi 1 lp thng
th s gi nh sau:
PHP Code:
$model=new Zend_Db_Table_Abstract;

C ngha l bn ang truy cp vo th mc Zend vo tip th mc Db, vo tip th mc


Table v vo file Abstract.php. Zend/Db/Table/Abstract.php.
V d nhin trong file Abstract.php phi c lp tn l Zend_Db_Table_Abstract:
PHP Code:
class Zend_Db_Table_Abstract{
//code y
}

autoload hiu iu ta c th nh ngha n gin nh sau:


PHP Code:
Page 268 of 413

function __autoload($url){
$url=str_replace("_","/",$url);
require("$url.php");
}

Nh bn thy, ta tm kim tt c cc du gch di trong lp v thay th chng


bng du "/". Khi h thng s np ng nh quy trnh trn.

Regular Expressions
1. Regular expression l g?
+ Biu thc chnh quy.
+ Hiu nm na l 1 chui c quy tc m t nhng chui(string) khc
2. C php c bn ( y mnh ch trnh by v v d cho ngn ng php)
Example:
PHP Code:
<?php
$re = '/hello/'; // biu thc chnh quy cho mt string c chui hello
trong .
$str = 'hello world';
if(preg_match($re, $str)) {
echo 'Yes';
}
?>

Output: Yes
+ K hiu ^ v $: bt u v kt thc 1 string
Example:
PHP Code:
<?php
$re = '/^hello/'; // biu thc chnh quy cho mt string bt u bi ch
ui hello
$str = 'hello world';
if(preg_match($re, $str)) {
echo 'Yes';
}
else {
echo 'No';
}
?>

Output: Yes
PHP Code:
<?php
$re = '/hello$/'; // biu thc chnh quy cho mt string kt thc bi ch
ui hello
$str = 'hello world';
if(preg_match($re, $str)) {
echo 'Yes';
}

Page 269 of 413

else {
echo 'No';
}
?>

Output: No
+ K hiu: *, +, ?
$re = '/^ab*$/' ; // biu thc chnh quy cho mt string bt u bi a, v kt thc l 0 hoc
nhiu b (v d: a, ab, abb, abbb, );
$re = '/^ab+$/' ; // biu thc chnh quy cho mt string bt u bi a, v kt thc l 1 hoc
nhiu b (v d: ab, abb, abbb, );
$re = '/^ab?$/' : // biu thc chnh quy cho mt string bt u bi a, v kt thc l b hoc
l khng (v d: ab hoc a).
Example:
PHP Code:
<?php
$re = '/^ab*$/';
$str = 'abbc';
if(preg_match($re, $str)) {
echo 'Yes';
}
else {
echo 'No';
}
?>

Output: No
+ S dng: {}:
$re = '/^ab{2}$/'; // biu thc chnh quy cho mt string bt u bi a, v kt thc l 2 ch
b (l abb);
$re = '/^ab{2,}$/'; // biu thc chnh quy cho mt string bt u bi a, v kt thc l t
nht 2 ch b (v d: abb, abbb, abbbb, );
$re = '/^ab{2,5}$/'; // biu thc chnh quy cho mt string bt u bi a, v kt thc l t
nht 2 ch b v nhiu nht l 5 ch b (v d: abb, abbb, abbbb, abbbbb);
+ S dng : () v |
$re = '/^a(bc)*$/'; // biu thc chnh quy cho mt string bt u bi a, v kt thc l 0
hoc nhiu 'bc' (v d abc, abcbc, abcbcbcbc, )
$re = '/^a(b|c)*$/'; // biu thc chnh quy cho mt string bt u bi a, v kt thc l 0
hoc nhiu 'b' hoc nhiu 'c' hoc 'b' 'c' ln ln :D (v d abc, abbcccccccccc,
abccccbbbcbc, )
+ S dng symbol '.': i din cho mt k t n bt k
$re = '/^.{3}$/'; //Biu thc chnh quy cho mt chui c ng 3 k t bt k.
PHP Code:
<?php
$re = '/^.{3}$/';
//Biu thc chnh quy cho mt chui c ng 3 k t bt k.
$str = '&#%';
if(preg_match($re, $str)) {
echo 'Yes';
}
else {
echo 'No';

Page 270 of 413

}
?>

Output: Yes
+ S dng: '-':
[0-9] : Mt ch s
[a-zA-Z]: mt k t A->Z, a->z
[a-d] : ~ (a|b|c|d)
[^a-zA-Z]: mt k t khng phi l A->Z, a->z
[^0-9]: mt k t khng phi l s
+ S dng: '\'
\d - Ch s bt k ~ [0-9]
\D - K t bt k khng phi l ch s (ngc vi \d) ~ [^0-9]
\w - K t t a-z, A-Z, hoc 0-9 ~ [a-zA-Z0-9]
\W - Ngc li vi \w (ngha l cc k t khng thuc cc khong: a-z, A-Z, hoc 0-9)
~[^a-zA-Z0-9]
\s - Khong trng (space)
\S - K t bt k khng phi l khong trng.
3. Cc hm c bn vn dng regular expression
+ preg_match : http://php.net/manual/en/function.preg-match.php
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int
$offset = 0 ]]] )
C bn l tm kim 1 string c lm vic theo mt $re.
V d:
PHP Code:
<?php
$re = '/^\w+$/';
// mt string ton k t A->Z, a->z, 0->9
$str = 'quya*';
if(preg_match($re, $str)) {
echo 'Yes';
}
else {
echo 'No';
}
?>

Output: No
+ preg_replace: http://www.php.net/manual/en/function.preg-replace.php
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit
= -1 [, int &$count ]] )
C bn l tm kim trong 1 string nhng chui c cu trc theo $re thay th
V d:
PHP Code:
<?php
$re = '/\w+$/';
$str = '*quya';
echo preg_replace($re, 'hi', $str);
?>

Output: *hi
+ preg_split: http://php.net/manual/en/function.preg-split.php
Page 271 of 413

array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )
V d:
Cc bn xem tm v d trong php manual nh. Mt ri.

Gii thiu Regular


Expression Nng cao
I. Thm comment vo biu thc Regular Expression:
Trong trng hp biu thc chnh quy ca bn qu di. V mun sau ny ngi dng sau
c th hiu v chnh sa li (reuse), th chng ta cn phi ghi ch li. h h.
thm comment vo 1 biu thc Regular Expression hin gi c 2 cch th phi.
- S dng c php (?# ni dung ghi ch).
V d: kim tra ngy c ng nh dng dd/mm/yyyy khng ta c parttern sau:
M:
$parttern = /^\d{2}\/\d{2}}\/\d{4}$/ //ci ny ngn qu tham kho
thi.

Sau khi thm comment vo:


M:
$parttern = /^\d{2}(?# ngy l s nguyn 2 k t)\/\d{2}(?# Thng l
s nguyn 2 k t)\/\d{4}(?# Nm l s nguyn 4 k t)$/

- Cch ny nhn sng sa v d hiu hn:


M:
$parttern = /^
\d{2} # ngy l s nguyn 2 k t
# du phn cch /
\/
\d{2} # Thng l s nguyn 2 k t
# du phn cch /
\/
\d{4} # Nm l s nguyn 4 k t
$/x; // S dng modifier l x.

Khi s dng modifier x th khong trng trong biu thc chnh quy s c b qua, nu
khng n s c escaped (\s). iu ny d dng thm comment. Comment s bt u
bng du # v kt thc ti 1 dng mi.
II. Greedy v Ungreedy:
hiu c phn ny bn cn xem qua v d sau:
V d: Mnh c 1 on m html sau khi view source ca 1 trang web
M:
<html>
<head><title>Greedy v Ungeedy</title></head>
<body>
<p id=weather>
Ni dung cn ly nm y
</p>
<p>
Ni dung khc

Page 272 of 413

</p>
</body>
</html>

Vy ly ni dung trong th <p id=weather></p>, mnh s phi vit biu thc sau:
PHP Code:
$parttern = /<p id=\weather\>(.*)</p>/s;
if(preg_match($parttern, $html, $match))
{
print_r($match);
}

H h, kt qu th no cc bn s ly c ni dung cn ly ch.
M:
Array (
[0] =>
Ni dung cn ly y
Ni
[1]
Ni
Ni
)

dung khc
=>
dung cn ly y
dung khc

Nh vy, ni dung mnh cn ly vn cha ly c, tm hiu nguyn nhn ti sao:


Xem li $parttern ca mnh: $parttern = /<p id=\weather\>(.*)</p>/s;
M t parttern: bt u bng th p c id=weather, tip sau l ni dung bt k c th c
nhiu hoc khng c k t no v kt thc l html tag </p>.
Khi dng modifier s: cho bit so khp parttern vi mi k t k c k t xung dng, nu
khng c n k t xung dng s b loi tr.
- Mc nh trong so khp mu th n s ly th p c id = "weather" v ni dung bt k bn
trong n khi gp tag ng </p>. Nhng phi l tag ng </p> cui cng th n mi dng
li (Greedy, ting vit l tham lam, tham n g ) so ti cui lun m.
- Vy lm sao parttern hiu rng khi so khp mnh ch ly ni dung bt k gia 2 tag
<p id="weather">ni dung n tag ng </p> u tin thi. Lc , mnh s dng k t
du hi "?" (Ungreedy) thm vo sau quantifier ca parttern mun so khp. H h Ci
quantifier tham kho li nha, v bi ny ang hng dn Advanced Regular Expression
m.
- V vy ly c ni dung chnh xc vi parttern ca mnh
M:
$parttern = '/<p id="weather">(.*)<\/p>/s';

th mnh ch cn thm du hi sau quantifier "*" l xong.


M:
$parttern = '/<p id="weather">(.*?)<\/p>/s';

Chy li code
PHP Code:
$parttern = /<p id=\weather\>(.*?)</p>/s;
if(preg_match($parttern, $html, $match))
{
print_r($match);
}

bn s nhn c kt qu nh
M:
Page 273 of 413

Array (
[0] =>
Ni dung cn ly y
[1] =>
Ni dung cn ly y
)

quy vi menu khng gii hn s


cp (N cp)
My hm nay lt qua qhonline thy nhiu bn comment v menu a cp qu. ci
ny mnh cng tng lm nn mnh vit 1 bi hy vng gip c mt vi bn.
t vn : Hu ht cc tut trn din n u l menu hn ch s cp. v th mnh s
hng dn cc bn x l quy vi s cp khng gii hn.
Gii php ti u khi x l quy:
Gii php 1: quy vi cu truy vn sql.
Vi gii php ny th on code chng ta s c quy trnh nh sau
- Mi ln quy s ly menu t database vi iu kin where id_parent trong db = id
parent truyn vo. nh th gi s menu chng ta c n cp th chng ta s phi select vi n
cu truy vn.
Gii php 2: ly ht menu ra mt mng ri mi ln quy s duyt qua ci mng ,
khng cn phi truy vn li
C 2 gii php u ok cho kt qu nh nhau, nhng chng ta cng bn li xem gii php
no s tt hn. vi gii php 1 th n cu truy vn cho ci menu th qu l t hi. cn gii
php 2 ta ch mt 1 cu truy vn v phn cng vic cn li l do code php x l. nn s t
tn ti nguyn hn
Gii quyt:
Mnh s la chn gii php 2 cho ci menu ca mnh.
Gi s mnh c mt database vi cc thng s [ id | name | link | id_parent ].
V mnh ko c database nn mnh s dng mng ny thay th coi nh n c ly t
database
PHP Code:
$menus = array(
array('id' =>
hu.php', 'parent'
array('id' =>
hu.php', 'parent'
array('id' =>
hu.php', 'parent'
array('id' =>

Page 274 of 413

'1', 'name'
=> '0'),
'2', 'name'
=> '1'),
'3', 'name'
=> '2'),
'4', 'name'

=> 'LEVEL 1', 'link' => 'localhost/trangc


=> 'LEVEL 2', 'link' => 'localhost/trangc
=> 'LEVEL 3', 'link' => 'localhost/trangc
=> 'LEVEL 4', 'link' => 'localhost/trangc

hu.php', 'parent' => '3'),


array('id' => '5', 'name' => 'LEVEL 1', 'link' => 'localhost/trangc
hu.php', 'parent' => '0'),
array('id' => '6', 'name' => 'LEVEL 1', 'link' => 'localhost/trangc
hu.php', 'parent' => '0'),
array('id' => '7', 'name' => 'LEVEL 2', 'link' => 'localhost/trangc
hu.php', 'parent' => '6'),
array('id' => '8', 'name' => 'LEVEL 2', 'link' => 'localhost/trangc
hu.php', 'parent' => '6'),
array('id' => '9', 'name' => 'LEVEL 2', 'link' => 'localhost/trangc
hu.php', 'parent' => '6'),
array('id' => '10', 'name' => 'LEVEL 3', 'link' => 'localhost/trang
chu.php', 'parent' => '9'),
array('id' => '11', 'name' => 'LEVEL 3', 'link' => 'localhost/trang
chu.php', 'parent' => '9'),
array('id' => '12', 'name' => 'LEVEL 3', 'link' => 'localhost/trang
chu.php', 'parent' => '9')
);

Code show menu quy


PHP Code:
function show_menu($menus = array(), $parrent = 0)
{
// LAY MENU DUA VAO MENU ID MENU CHA TRUYEN VAO
$current_menus = array();
foreach ($menus as $key => $val) {
if ($val['parent'] == $parrent) {
$current_menus[] = $val;
unset($menus[$key]);
}
}
// SHOW RA MENU THEO UL
if (sizeof($current_menus) > 0) {
echo '<ul>';
foreach ($current_menus as $key => $val) {
echo '<li><a href="', $val['link'], '">', $val['name'], '</
a>';
show_menu($menus, $val['id'], false);
echo '</li>';
}
echo '</ul>';
}
}

tng nh sau. sau khi c ci mng ri th mnh dng m php select theo iu
kin thay cho sql. bin $current_menus chnh l menu cn hin th hin ti
V cui cng l show menu ra thi
PHP Code:
show_menu($menus);

Code full:
PHP Code:

Page 275 of 413

$menus = array(
array('id' => '1', 'name' => 'LEVEL 1', 'link' => 'localhost/trangc
hu.php', 'parent' => '0'),
array('id' => '2', 'name' => 'LEVEL 2', 'link' => 'localhost/trangc
hu.php', 'parent' => '1'),
array('id' => '3', 'name' => 'LEVEL 3', 'link' => 'localhost/trangc
hu.php', 'parent' => '2'),
array('id' => '4', 'name' => 'LEVEL 4', 'link' => 'localhost/trangc
hu.php', 'parent' => '3'),
array('id' => '5', 'name' => 'LEVEL 1', 'link' => 'localhost/trangc
hu.php', 'parent' => '0'),
array('id' => '6', 'name' => 'LEVEL 1', 'link' => 'localhost/trangc
hu.php', 'parent' => '0'),
array('id' => '7', 'name' => 'LEVEL 2', 'link' => 'localhost/trangc
hu.php', 'parent' => '6'),
array('id' => '8', 'name' => 'LEVEL 2', 'link' => 'localhost/trangc
hu.php', 'parent' => '6'),
array('id' => '9', 'name' => 'LEVEL 2', 'link' => 'localhost/trangc
hu.php', 'parent' => '6'),
array('id' => '10', 'name' => 'LEVEL 3', 'link' => 'localhost/trang
chu.php', 'parent' => '9'),
array('id' => '11', 'name' => 'LEVEL 3', 'link' => 'localhost/trang
chu.php', 'parent' => '9'),
array('id' => '12', 'name' => 'LEVEL 3', 'link' => 'localhost/trang
chu.php', 'parent' => '9')
);
function show_menu($menus = array(), $parrent = 0)
{
// LAY MENU DUA VAO ID MENU CHA
$current_menus = array();
foreach ($menus as $key => $val) {
if ($val['parent'] == $parrent) {
$current_menus[] = $val;
unset($menus[$key]);
}
}
// SHOW RA MENU THEO UL
if (sizeof($current_menus) > 0) {
echo '<ul>';
foreach ($current_menus as $key => $val) {
echo '<li><a href="', $val['link'], '">', $val['name'], '</
a>';
show_menu($menus, $val['id'], false);
echo '</li>';
}
echo '</ul>';
}
}
show_menu($menus);

Cc bn copy a va file PHP bnh thng s thy


thnh qu :D
Page 276 of 413

Upload file trong php


1/ C ch upload file trong php

2/ VD upload file
+ form upload

Page 277 of 413

+ X l upload

Class support Mutil Language cho c


bn v nng cao v cho c cc
framework khc!!!!
Mnh thy cc bn post bi cn mutil language trn website... v vy m mnh vit class
ny cho cc bn.

Page 278 of 413

B1: Bn to file index.php c ni dung nh sau


PHP Code:
<?php
session_start();
ob_start();
/* * * error reporting on ** */
error_reporting(E_ALL);
/* * * define the path ** */
$site_path = realpath(dirname(__FILE__));
define('__SITE_PATH', $site_path . '/');
define('__LANG_PATH', $site_path . '/language/');
define('__EXT', '.php');
include __SITE_PATH . 'classes/' . 'language.class.php';
Language::locate_set('en');// SET LA ENGLISH HAY VIETNAM
//VI DU
//ENGLISH = EN TH TO TH MC EN TNG NG TRONG TH MC LANGUAGE
//VIETNAM = VN TH TO TH MC VN TNG NG TRONG TH MC LANGUAGE
echo Language::lang('home_lang.home_title');
?>

B2: To th mc classes ng cp vi file index.php, v to 1 file language.class.php


trong th mc classes vi ni dung nh sau
PHP Code:
<?php
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
Class Language {
protected static $locale;
protected static $language_cache = array();
public static function locate_set($key = 'vn') {
self::$locale = $key;
}
public static function find_file($filename) {
$ext = '.php';
//Search Path
$search = __LANG_PATH . self::$locale . '/' . $filename . __EXT
;
$found = false;
if (is_file($search)) {
// A matching file has been found

Page 279 of 413

$found = $search;
}
return $found;
}
public static function lang($key) {
$group = explode('.', $key);
$key_lang = $group[1];
$group = $group[0];
$mes = array();
if (!isset(self::$language_cache[self::$locale][$group])) {
$file = self::find_file($group);
if ($file != false) {
include $file;
// Merge in configuration
if (!empty($lang) AND is_array($lang)) {
foreach ($lang as $k => $v) {
$mes[$k] = $v;
}
}
}
self::$language_cache[self::$locale][$group] = $mes;
}
if (isset(self::$language_cache[self::$locale][$group])) {
foreach (self::$language_cache[self::$locale][$group] as $k
=> $v) {
if ($key_lang == $k) {
return $v;
}
}
return $key_lang;
} else {
return 'Missing entry ' . self::$locale . '/' . $group;
}
}
}
?>

B3: To th mc language ng cp vi file index.php, vo trong th mc language to


2 th mc vn v en tng ng vi cho ting vit v ting anh.
B4: To file home_lang.php trong th mc vn vi ni dung nh sau
PHP Code:
<?php
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
$lang['home_title'] = 'Trang chu';
?>

Page 280 of 413

B5: To file home_lang.php trong th mc en vi ni dung nh sau


PHP Code:
<?php
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
$lang['home_title'] = 'Home';
?>

S dng 1 cch d dng


PHP Code:
<?php echo Language::lang('home_lang.home_title'); ?>

Thay i ngn ng cc bn set li locate cho n bng cch


PHP Code:
<?php Language::locate_set('en'); ?>

y ch l a ngn ng phn giao din

Hng dn CSS Framework 960 cho


mi ngi
Tham gia VC v QHO lu ri nhng cha ng gp c g nhiu, hm nay mng php
vit 1 bi hy vng gp cht kin thc cho cc bn. Ln u tin vit tutorial mong mi
ngi ng h. Yu cu kin thc c bn v css, ta vo vn
C ai tng s dng 1 framework css no cha v 960css framework c g. C l cc
bn u cho rng css kh n gin nn cng ko nht thit phi tm hiu su n
framework lm g. 960 css framework s cho bn 1 ci nhn khc v iu ny
u tin download framework https://nodeload.github.com/nathansm...zipball/master
Gii nn -> m th mc code -> css ta c

Page 281 of 413

Ch cn s copy 960.css s dng. Bn c th vo min ly file dung lng nh hn


up ln host.
Ci tn 960 bt ngun t vic framework ny cung cp cho chng ta 1 m hnh website
c chia lm nhiu ct. Vi rng ca site l 960px c chia lm 12 ct, 16 ct hay
24 ct http://960.gs/demo.html

Page 282 of 413

960px l rng ph hp vi hu ht cc website hin nay. Margin mi ct l 20px to


ci nhn thong cho website.

Container & Grid


- Container phn bit s ct cho cc thnh phn bn trong nh 12, 16, 24
- Grid xc nh s ct
VD bn mun to 1 khi kch thc = 3 ct:
Lu : phi c khi <div class="container_12"> bao bn ngoi
HTML Code:
<div class="container_12">
<div class="grid_3" style="background:#666;">3 Ct</div>
</div>

Nhiu ct cng lc
HTML Code:
<div class="container_12">

Page 283 of 413

<div class="grid_3" style="background:blue;">First</div>


<div class="grid_5" style="background:red;">Second</div>
<div class="grid_4" style="background:green;">Third</div>
</div>

Pull & Push


- y khi qua tri - phi tnh theo ct
VD: ta y 2 khi Fist qua phi 1 v Second qua tri 2
HTML Code:
<div class="container_12">
<div class="grid_3 push_1" style="background:blue;">3 Ct</div>
<div class="grid_5" style="background:red;">5 Ct</div>
<div class="grid_4 pull_2" style="background:green;">4 Ct</div>
</div>

Suffix & Prefix


- Tng padding phi - tri, tnh theo ct
VD: Ta mun tng padding-right khi First 1 ct vo padding-left khi Second 1 ct
HTML Code:
<div class="container_12">
<div class="grid_3 suffix_1" style="background:blue;">3 Ct3
Ct3 Ct3 Ct3 Ct3 Ct3 Ct3 Ct3 Ct3 Ct3 Ct3 Ct3 Ct3 Ct3 Ct3
Ct</div>
<div class="grid_5 prefix_1" style="background:red;">5 Ct</div>
<div class="grid_4" style="background:green;">4 Ct</div>
</div>

V tng padding nn rng cc khi cng tng theo. Tuy nhin ni dung ca khi First
vn ko trng qua ct th 4 m vn chim 3 ct

Alpha & Omega


- Xa margin tri - phi khi class GRID
Ta xem VD sau:
HTML Code:
<div class="container_12">
<div class="grid_12">

Page 284 of 413

<div class="grid_3" style="background:blue;">3 Ct</div>


<div class="grid_5" style="background:red;">5 Ct</div>
<div class="grid_4" style="background:green;">4 Ct</div>
</div>
</div>

Ti sao khi Frist li dch qua phi 10px m ko nm ng v tr. Nguyn nhn l n ang
nm trong 1 khi Grid khc. V thuc tnh margin ca n khin n phi dch qua phi
10px. Ta khc phc = cch s dng class "alpha" v "omega"
HTML Code:
<div class="container_12">
<div class="grid_12">
<div class="grid_3 alpha" style="background:blue;">3 Ct</div>
<div class="grid_5" style="background:red;">5 Ct</div>
<div class="grid_4 omega" style="background:green;">4 Ct</div>
</div>
</div>

l tt c nhng g mnh bit v 960 css framework.


im mnh:
- Tit kim thi gian
- Tng thch nhiu trnh duyt
- Thit k theo chun
Khuyt:
- rng site ti a l 960px
- Ph thuc vo framework
Vi nhng g 960 css framework mang li vic to nn cc layout cho website tr nn rt
nhanh chng. Hy th to layout n gin cho trang Genk.vn no cc bn, mnh mt cha
n 5p nh

Page 285 of 413

http://i1254.photobucket.com/albums/...mfnamoka/8.jpg

Page 286 of 413

1 s website c to t 960 css framework:

http://keynotekungfu.com/?ref=960
http://brandrichmedia.com/
http://nickfinck.com/
http://drupal.org/
http://5by5.tv/

Nhp d liu t file excel s dng cng


ngh XML...
Nu chng ta thm 1 user, 1 th loi th d dng, cn nu yu cu chng ta hng ngy
nhp 1 list danh sch(>500)cc thng tin ca nhn vin, thng tin bi nhc... up ln
web th sao, ch l chng ta phi nhp bng tay tng thng tin 1 hay sao, ngy no cng
vy chc t bng sm :)). Vy l bt u mnh suy ngh, lm cch no up 1 pht l
xong ht khng nh, gi d nu mnh c 1 file excel c y ht thng tin ca tt c cc
bi ht(>1000 bi i cho n och :D ) nu m up thng 1 lo vo database c th
qu nh, khng bit php lm c khng ta? thy th ch mi dy ti phn xml thoai, nn
i vi mnh th p..code :( . Th l ti nh bc Google hi thm coi th no, lang thang
vi vng ln z 1 trang ton... ting anh, khip thit, mnh nhn n, n nhn mnh ci
ch ai bit ai =)) may thay thy 1 dng p vo mt bo convert file .xls sang file xml,
ngh mt hi ci t nhin ny ra tng v lao u vo "ct" ... c nhm, lao u vo
code :)).
hihi ni nhm ny gi ri gi chng ta bt u nh.
u tin chng ta c 1 file excel vi d liu v thng tin bi nhc nh th ny:

Page 287 of 413

Sau m ln v lu li vi ui l .xml

Page 288 of 413

V sau m file xml ny ln, n s c cu trc nh th ny:

Page 289 of 413

y chng ta thy, D liu ca chng ta cn ly n nm trong cp th <Row>, vy


chng ta cn xc nh c v tr ca th <row> v sau dng vng lp, lp qua cc th
<row> ly gi tr chng ta cn sau nhp vo database, c th chng ta sao lm nh
sau:
u tin to 1 database tn test, sau to 1 bng tn media vi cu trc nh sau:

Page 290 of 413

Trong trang html ta c 1 form cho php chn file xml(convert t file excel) cn nhp d
liu:
HTML Code:
<form action="b.php" method="post" enctype="multipart/form-data">
Select a file: <input type="file" name="upload" size="50" />
<input type="submit" name="send" value="Upload" />
</form>

Khi chn file v nhp vo nt upload code x l s nh sau:


PHP Code:
<?php
if(isset($_POST["send"])){//Nu nt send c nhn
if($_FILES["upload"]["name"] != NULL){//Nu c chn file
move_uploaded_file($_FILES["upload"]["tmp_name"],"data/" .
$_FILES["upload"]["name"]);di chuyn file xml ln server trong th mc
data
$dom = new DOMDocument();Khi to i tng PHP DOM
$dom>load("data/" . $_FILES["upload"]["name"]);//Load file xml va c chu
yn trong th mc data
$row = $dom>getElementsByTagName("Row");//Xc nh v tr ca th <Row>
$first_row = TRUE;//Bin nh l dng u tin trong bng e
xcel(dng tiu )
foreach($row as $r){//Bt u lp qua cc th Row
if(!$first_row){//Nu khng phi l dng u tin
//Ly gi tr ca cc ct trn tng dng
$a = $r->getElementsByTagName("Cell")->item(0)>nodeValue;
$b = $r->getElementsByTagName("Cell")->item(1)>nodeValue;
$c = $r->getElementsByTagName("Cell")->item(2)>nodeValue;
$d = $r->getElementsByTagName("Cell")->item(3)-

Page 291 of 413

>nodeValue;
$e = $r->getElementsByTagName("Cell")->item(4)>nodeValue;
$f = $r->getElementsByTagName("Cell")->item(5)>nodeValue;
//Khi to cu truy vn
$sql = "insert into media(song,singer,musician,cate
gories,album,url) values('" . $a . "','" . $b . "','" . $c . "','" . $d
. "','" . $e . "','" . $f . "')";
//Thc thi cu truy vn v kim tra kt qu tr v
if(mysql_query($sql) != FALSE){
$mess ="Thm d liu thnh cong";
}else{
$mess = "Thm d liu tht bi";
}
}
$first_row = FALSE;//Bin xc nh qua dng u tin
}
echo "<cente>$mess</center>";
}
}
?>

Vy l xong phn x l, by gi mnh d liu ra ngoi bng nh


PHP Code:
<table cellpadding="0" cellspacing="0" border="1" width="80%">
<tr>
<th>STT</th>
<th>Tn bi ht</th>
<th>Ca s</th>
<th>Nhc s</th>
<th>Th loi</th>
<th>Album</th>
<th>ng dn</th>
</tr>
<?php
$sql = "select * from media order by categories ASC";
$query = mysql_query($sql);
if(mysql_num_rows($query) > 0){
$stt = 0;
while($data = mysql_fetch_assoc($query)){
$stt++;
echo "<tr>";
echo "<td>$stt</td>";
echo "<td>$data[song]</td>";
echo "<td>$data[singer]</td>";
echo "<td>$data[musician]</td>";
echo "<td>$data[categories]</td>";
echo "<td>$data[album]</td>";
echo "<td>$data[url]</td>";
echo "</tr>";
}
}else{
echo "<tr><td colspan=7 align=center>Data empty</td></tr>";
}

Page 292 of 413

?>
</table>

Code y cho ton b qu trnh ca chng ta:


HTML Code:
<?php
$conn = mysql_connect("localhost","root","root");
mysql_select_db("test",$conn);
if(isset($_POST["send"])){
if($_FILES["upload"]["name"] != NULL){
move_uploaded_file($_FILES["upload"]["tmp_name"],"data/" .
$_FILES["upload"]["name"]);
$dom = new DOMDocument();
$dom->load("data/" . $_FILES["upload"]["name"]);
$row = $dom->getElementsByTagName("Row");
$first_row = TRUE;
foreach($row as $r){
if(!$first_row){
$a = $r->getElementsByTagName("Cell")->item(0)>nodeValue;
$b = $r->getElementsByTagName("Cell")->item(1)>nodeValue;
$c = $r->getElementsByTagName("Cell")->item(2)>nodeValue;
$d = $r->getElementsByTagName("Cell")->item(3)>nodeValue;
$e = $r->getElementsByTagName("Cell")->item(4)>nodeValue;
$f = $r->getElementsByTagName("Cell")->item(5)>nodeValue;
$sql = "insert into
media(song,singer,musician,categories,album,url) values('" . $a . "','"
. $b . "','" . $c . "','" . $d . "','" . $e . "','" . $f . "')";
if(mysql_query($sql) != FALSE){
$mess = "Them du lieu thanh cong";
}else{
$mess = "Them du lieu that bai" .
mysql_error();
}
}
$first_row = FALSE;
}
echo "<cente>$mess</center>";
}
}
?>
<!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" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf8" />
<meta name="author" content="Le Kim Thuc" />

Page 293 of 413

<style type="text/css">
form{
text-align: center;
margin: 50px auto;
}
</style>
</head>
<body>
<form action="b.php" method="post" enctype="multipart/form-data">
Select a file: <input type="file" name="upload" size="50" />
<input type="submit" name="send" value="Upload" />
</form>
<table cellpadding="0" cellspacing="0" border="1" width="80%">
<tr>
<th>STT</th>
<th>Tn bi ht</th>
<th>Ca s</th>
<th>Nhc s</th>
<th>Th loi</th>
<th>Album</th>
<th>ng dn</th>
</tr>
<?php
$sql = "select * from media order by categories ASC";
$query = mysql_query($sql);
if(mysql_num_rows($query) > 0){
$stt = 0;
while($data = mysql_fetch_assoc($query)){
$stt++;
echo "<tr>";
echo "<td>$stt</td>";
echo "<td>$data[song]</td>";
echo "<td>$data[singer]</td>";
echo "<td>$data[musician]</td>";
echo "<td>$data[categories]</td>";
echo "<td>$data[album]</td>";
echo "<td>$data[url]</td>";
echo "</tr>";
}
}else{
echo "<tr><td colspan=7 align=center>Data empty</td></tr>";
}
?>
</table>
</body>

Ph cui cng th cng xong, y l ln th 2 vit li, hiz.. ny vit va xong nhp
xem li bi vit th b ging ra ngoi, lm mt sch :(( li phi ch vits li. Kt
qu nh hnh sau:

Page 294 of 413

y ch l bi demo chnh l nhp d liu bng file excel, nn c nhiu ci cn li


thi lum thum, mong cc bn b qua nh ^_^, bn no cha bit th c th tham

Page 295 of 413

kho , bn no bit ri m bit cch vit hay hn th nh share cho mi ngi cng
hc hi nh.
Ai khng hiu th c th hi mnh hoc pm wa nick y h: thugianmotti :D

M hnh VMC auto load Controller v


model
---VMC l m hnh quen thuc vi cc bn hc frameword hay tm hiu. l iu
khng th thiu chun b bt u vo hc 1 frameword no .Hm nay mnh xin chia
s m hnh m mnh hc c cho nhng bn chun b hay ang c nh tm hiu 1
frameword no .Trong forum c vi bi vit v m hnh ny rt hay cc bn c th tm
c hiu th no l m hnh MVC (Model - View - Controller) v cch hot ng chc
nng ca tng file.http://www.qhonline.info/forum/showt...co-ban-voi-php hoc
http://www.qhonline.info/forum/showt...c-cua-thay-huy
---u im :l t ng load controller v model gi d liu v hin th trong view gn
ging nh trong cc frameword
---file Bootstrap.php :
PHP Code:
<?php
class Bootstrap{
public function __construct(){
if(isset($_GET['url'])){
$url=rtrim($_GET['url'],"/");
$url=explode('/',$url);
$c=$url[0];
}else{
$c="index";
}
$file_controller=__CONTROLLER_PATH.$c."_Controller.php";
if(file_exists($file_controller)){
require_once($file_controller);
}else{
require_once(__CONTROLLER_PATH."error_Controller.php");
$controller=new error();
$controller->index();
return false;
}
$name_controller=$c."_Controller";
$controller=new $name_controller;
$controller->LoadModel($c);//autoload model
if(isset($url[2])){
$controller->{$url[1]}($url[2]);

Page 296 of 413

}else{
if(isset($url[1])){
$controller->{$url[1]}();
}else{
$controller->index();
}
}
}
}
?>

+file ny c tc dng t ng load controller v model khi ngi dng tng tc ti trang
+Lu :t tn file controller v model c phn u ging nhau,v tn file ging tn
class,v d user_Controller.php th class tng tng s l class user_Controller v model
s l user_Model.php class user_Model.Nh vy trong view s c th mc tng ng l
th mc user,
---Trang index s khi to Bootstrap nh sau :
PHP Code:
<?php
//define path
require_once("config/define_path.php");
require_once("config/define_database.php");
//end define path
require_once(__LIB_PATH."Session.php");
require_once(__LIB_PATH."Controller.php");
require_once(__LIB_PATH."View.php");
require_once(__LIB_PATH."Model.php");
require_once(__LIB_PATH."Bootstrap.php");
$bootstrap= new Bootstrap;
?>

---Khi ngi dng truy cp vo trang http://localhost/vmc/user/login Bootstrap s thc


hin action login trong controller user_Controller.php v load model user_Model.php
s dng
---Sau y l v d login vi m hnh ny :
+ Chun b :to bng user (user_name,pass)
+ file controllers/user_Controller.php :
PHP Code:
<?php
class user_Controller extends Controller{
public function __construct(){
parent::__construct();
}
public function index(){
$this->view->render("user/index");
}
public function login(){
if(isset($_POST['login'])){
if($_POST['user']=="" or $_POST['password']==""){
$this->view>msg="Hay dien user hay pass";//gi thng bo ti trang view
$this->view->render("user/login");
}else{
if($this->model->login()==true){
Session::set("login",true);
Session::set("user",$_POST['user']);

Page 297 of 413

$this->view->redirect();
}else{
$this->view->redirect("user/login");
}
}
}else{
$this->view->render("user/login");
}
}
public function logout(){
Session::set("login",false);
Session::unset_session("user");
$this->view->redirect();
}
}
?>

---File models/user_Model.php :
PHP Code:
<?php
class user_Model extends Model{
public $table="user";
public function __construct(){
parent::__construct();
}
public function login(){
$user=$_POST['user'];
$pass=md5($_POST['password']);
$where=array('user_name'=>$user,'pass'=>$pass);
$this->select($this->table,$where);
if($this->num_rows()==0){
return false;
}else{
return true;
}
}
}
?>

---file Views/user/login.php : s hin th li ly t controller nu c v form ng nhp,:


PHP Code:
<h2>Trang login.....</h2>
<hr />
<div class="error" style="background:#FC6;color:red">
<?php
if(isset($this->msg)){
echo $this->msg;
}
?>
</div>
<form action="" method="post">
<label>User </label><input name="user" type="text" /><br />
<label>Password </label><input name="password" type="text" /><br />
<label></label><input type="submit" value="login" name="login"/><br />
</form>

Page 298 of 413

---Cc bn c th down v hiu r thm :


http://www.mediafire.com/?3d59b8eb70x27dx
---PS:Em xin public bi ny nh,C vn g sai st mong cc bn gp

Th Thut Tng Tc PHP


1. Bin
- Khai bo khi to bin nh kiu nhanh hn 376% so vi khng nh kiu.
- Hng chm hn 146% so vi bin.
- Bin cc b nhanh hn 9.9% bin ton cc.
2. Hm lm vic vi chui
- 'string' nhan hn 0.26% so vi "string"
- "String" nhanh hn 4% so vi c php HEREDOC
- "String\n" nhanh hn 108% so vi 'String'."\n"
- 'String'.$var nhanh hn 28% so vi "String$var"
- 'string '.$var.' string' nhanh hn 55% so vi sprintf('string %s string', $var)
- "\n" nhanh hn 70% so vi chr(10)
- strnatcmp() nhanh hn 4.95% so vi strcmp()
- strcasecmp() nhanh hn 45% so vi preg_match()
- strcasecmp() nhanh hn 6.6% so vi strtoupper($string) == "STRING"
- strcasecmp() nhanh hn 13% so vi strnatcasecmp()
- strtr($string, $string1, $string2) nhanh hn 10% so vi str_replace()
- str_replace() nhanh hn 161% so vi strtr($string, $array)
- stristr() nhanh hn 10% so vi stripos()
- strpos() nhanh hn 9.7% so vi strstr()
- isset($str{5}) nhanh hn 176% so vi strlen($str) > 5
- str_replace($str, $str, $str) hai ln nhanh hn 17% so vi str_replace(array, array,
string)
- list() = explode() nhanh hn 13% so vi substr($str, strpos($str))
3. Hm lm vic vi s
- ++$int nhanh hn 10% so vi $int++
- (float) nhanh hn 48% so vi settype($var, 'float')
4. Hm lm vic vi mng
- list() = $array; nhanh hn 3.4% so vi gn tng gi tr
- in_array() nhanh hn 6% so vi array_search
Page 299 of 413

- isset($array[$key]) nhanh hn 230% so vi array_key_exists()


- !empty($array) nhanh hn 66% so vi count($array)
5. Hm xut
- echo nhanh hn 5% so vi print()
- echo ' '.' ' nhanh hn 0.44% so vi echo ' ',' '
6. Hm, phng thc v cch thc gi
- call_user_func() chm hn 54% so vi gi trc tip hm
- call_user_func() chm hn 59% so vi gi phng thc tnh (static method)
- call_user_func() chm hn 65% so vi gi phng thc (ca mt i tng)
- function() nhanh hn 119% so vi static::method()
- $this->method() nhanh hn 116% so vi static::method()
- declared static::method() nhanh hn 93% so vi static::method()
7. Hm, phng thc
- Truyn tham tr nhanh hn 3% so vi truyn tham chiu
- Khng tham chiu (no reference ) nhanh hn 1.7% so vi tham chiu (Return by
reference)
8. Lm vic vi File
- Scandir() nhanh hn 4% so vi opendir(), readdir(), closedir()
- file_get_contents() nhanh hn 52% so vi fopen(), fread(), fclose()
- file_get_contents() nhanh hn 39% so vi implode("\n", file())
9. Hm ghi b m (Cache)
- xcache_set() nhanh hn 1,645% so vi file_put_contents()
- xcache_set() nhanh hn 646% so vi memcache->set()
- xcache_get() nhanh hn 1,312% so vi memcache->get()
10. Hm (Tng qut)
- if elseif else nhanh hn 0.78 % so vi switch
- @Error supression (b bo li nu c) chm hn 235% so vi without
- $_SERVER['REQUEST_TIME'] nhanh hn 59% so vi time()
- min(array) nhanh hn 16% so vi min(int, int)
- require_once() nhanh hn 24% so vi include()
- require_once() nhanh bng include_once()
- include('ng dn tng i') nhanh hn 37% so vi include('ng dn tuyt i')
11. Chui chnh quy (regular expressions)

Page 300 of 413

- str_replace() nhanh hn 40% so vi preg_replace()


- ereg('regex') nhanh hn 17% so vi preg_match('/regex/')
- preg_match('/regex/i') nhanh hn 68% so vi eregi('regex')
12. Top 10 cc hm c ch nht - t gi nht
file_put_contents()
opendir() readdir() closedir()
scandir()
fopen() fread() fclose()
memcache->get()
memcache->set()
implode('\n', file())
include()
include_once()
file_get_contents()
13. Top 10 cc hm tit kim thi gian nhiu nht ( biggest time savers (per call))
xcache_set() vs. file_put_contents()
xcache_get() vs. memcache->get()
xcache_set() vs. memcache->set()
file_get_contents() vs. fopen(), fread(), fclose()
file_get_contents() vs. implode('\n', file())
include(relative) vs. include(full_path)
require_once() vs. include()
scandir() vs. opendir() readdir() closedir()
static method vs. call_user_func()
preg_match(/regex/i) vs. eregi(regex)
Ni dung ting anh cc bn c th tm thy t:
joomlaperformance.com/articles/performance/

Code phn trang theo kiu Google


Cho mi ngi. Hm nay mnh mi tm hiu code dc ci phn trang ging google
M t:
Gi s c 20 trang .
1/ Nu ang trang 1: 1 2 3 4 5 6 7 8 9 Next
2/ Nu click vo trang 8 : Prev 4 5 6 7 8 9 10 11 12 Next
3/ Nu ang trang 8 m click vo trang 7 : Prev 3 4 5 6 7 8 9 10 11 Next

Page 301 of 413

4/ Nu click vo trang 20 : Prev 16 17 18 19 20


Tc l click vo trang no th trang s l trang chnh gia(trng hp ny l xp th 5)
v page list lun c 9 s hin th . Tt nhin l code ny ch dng khi no c hn 9 trang .
Thut ton ca phn trang nh sau :
a/ Dng SQL : $sql = "select * from table_name LIMIT $start,$limit"; ( $limit l s
record tr v, $start l v tr bt u dc select).
b/ Mnh tm tng s record trong database($count) ri em chia cho $limit tm ra s
trang s hin th .
c/ Mi khi load trang th $start s tng ln 1 lng $limit . V d, trang 1 th ly t $start
=0 , tr v $limit dng, trang 2 select t v tr $start+$limit, tr v cng $limit dng . S
record tr v khng i , ty theo mnh mun 1 trang hin th bao nhiu record t
database . Mi trang th s $start thay i theo k lut.
Mnh to class pager gm 3 function sau :
1/ Function findStart() :
Hm ny tr v $start trn mnh ni .
2/ Function findPages($count,$limit)
Tr v s trang cn hin th
3/ Function pageList($currentPage, $pages, $count)
Tr v layout pageList ra . Nh ci " Prev 1 2 3.... Next " trn y
Code : phantrang_google.php
PHP Code:
<?php
class phantrang_google_pager
{
function findStart()
{
if(isset($_GET['page'])){ // Lc u tin m ra th hok c $_GE
T['page']
return $start = $_GET['page'];
}
else{
return $start = 0;
}
}
function findPages($count,$limit)
{
return $count % $limit ==0 ? $count/$limit :ceil($count / $limi
t);
/* Cu trn c ngha : $count c chia ht cho $limit khng? Nu
c th tr v $count/$limit, nu khng th tr v $count/$limit +1 . (
ceil l hm lm trn trn , 2.3=3 , 5.6 =6)
*/
}
function pageList($currentPage,$pages,$count)//Bin $count y gi
i thch sau
{
$space =4;
if(!isset($_GET['middle']) || $currentPage<=5){

Page 302 of 413

//Khi m ra th cng cha c $_GET['middle']


$middle =5;
}
else{
$middle = $_GET['middle'];
}
$start_temp = $middle -$space;
// Bin ny cha s u tin ca 9 s trn
$end_temp =$middle+ $space;
// Bin ny cha s cui cng ca 9 s trn
$i = $start_temp;
// Chun b dng vng lp xut ra
if($currentPage != 1){
// Nu trang hin ti khng phi 1 th xut Prev
$prev = $currentPage-1;
$prev_middle = $middle-1;
echo "<span id ='list'><a href ='$_SERVER[PHP_SELF]?middle=
$prev_middle&count=$count&page=$prev'> Prev </a></span>";
}
//$_GET['middle'] ch s nm gia. $_GET['count'] ch tng record tro
ng database.
//$_GET['page'] ch s trang ngi dng ang ng
// $_SERVER['PHP_SELF'] > ly thanh a ch, n ch ly ti ht ch php thi
while($i) //Dng vng lp hin th trang
{
if($i > $pages || $i > $end_temp){
break;
}
// Nu s ca trang ln hn trang cui, hay ln hn v tr cui ca 9 s
th dng cho //trang ny
if($i != $currentPage){
//S trang ng dng ang ng phi hin th khc ng dng bit ang
ng u
if($i <= 5) {
//5 y do mnh mc nh l 9 , th v tr chnh gia u tin l 5
echo "<span id ='list'><a href = '$_SERVER[PHP_SELF]?mi
ddle=5&count=$count&page=$i'> $i </a></span>";
//Vi t hn 5 u tin th middle vn l 5
}
if($i> $middle || ($i < $middle && $i > 5) ){
echo "<span id='list'><a href = '$_SERVER[PHP_SELF]?mid
dle=$i&count=$count&page=$i'> $i </a></span>";
}
//Nu b $i < $middle && $i >5 <<<<<<<< bc 3 s hok lm dc
}
else {
echo "<span id ='list' >$i</span>";
}

$i++;

Page 303 of 413

}
if($currentPage != $pages){
// Nu khng trang cui th hin th nt Next
$next =$currentPage+1;
$next_middle = $middle+1;
echo "<span id ='list'><a href ='$_SERVER[PHP_SELF]?middle=
$next_middle&count=$count&page=$next'> Next </a></span>";
}
}
}

Code: demo_google.php
PHP Code:
<style>
#list{
border : 1px solid green;
padding:5px;
margin: 0px 3px;
}
#selected{
background: green;
}
a{
text-decoration: none;
}
a:hover{
color: white;
}
#list:hover{
background : green;
}
#list:hover a{
color:white;
}
</style>
<?php
require_once('phantrang_google.php');
$conn = new mysqli('localhost','root','','news_vmc');
//Mnh dng database ca bn news_vmc .
//Link down :
if(!isset($_GET['count'])){
// Lc m ra cng cha c $_GET['count']
$query = 'select * from tin';
$result = $conn->query($query);
$count = $result->num_rows;//Tr v s record trong table
//Dng mysqli
}
else{
$count = $_GET['count'];
}
//on code trn trnh vic lm li 2 cu truy vn mi khi chuyn tr
ang, n l cng //dng ca bin $count trong function pageList bn ki
a

Page 304 of 413

$page = new phantrang_google_pager;


$limit = 3;
//Mnh gii hn 3 records 1 trang
$start=$page->findStart();
//Tm start trc
if(!isset($_GET['page'])){
$curpage=1;
}
else{
$curpage = $_GET['page'];
}
$stt =($curpage-1)*3+1;
$pages = $page->findPages($count,$limit);
$sql = "select * from tin LIMIT $start,3";
$result = $conn->query($sql);
echo " <table border='1px'>";
while($rows =$result->fetch_assoc()){
echo '<tr>';
echo "<td>$stt</td>";
echo "<td>$rows[id_tin]</td>";
echo "<td>$rows[tieu_de]</td>";
echo "<td>$rows[tom_tat]</td>";
echo '<tr>';
$stt++;
}
echo "</table>";
echo '<br/>';
echo $page->pageList($curpage,$pages,$count);
?>

Lu : mnh mun th hin 9 trang, cc bn c th mun 10 11 12 trang th sa


trong code :).
Link down database news_vmc: *
mediafirechamcom ?f9inhvd1kddn4j2 *
Hnh nh khi code xong :)
*photobucketchamcom/albums/i366/danghaiphung169/11212.png
photobucketchamcom/albums/i366/danghaiphung169/112122.png
photobucketchamcom/albums/i366/danghaiphung169/1121224.png*
Bye mi ngi

Page 305 of 413

Phn trang c bn, c phn on


khng OOP
PHP Code:
$conn=mysql_connect("localhost","root","*****");
mysql_select_db("vd_1",$conn);
if(isset($_GET['page'])){
$current_page=$_GET['page'];
}else{
$current_page=1;
}
//so record tren trang
$record_in_page = 3;
//Tong record
if(!isset($total)){
$query=mysql_query("select * from user");
$total=mysql_num_rows($query);
}else{
$total=$_GET['total'];
}
echo $total;
$y = $record_in_page*($current_page-1);
//Tong so trang
$total_page=ceil($total/$record_in_page);
//So trang hien thi
$roll = 3;
$query_out = mysql_query("select * from user LIMIT $y,$record_in_page")
;
while($data=mysql_fetch_assoc($query_out)){
echo "<table>";
echo "<tr><td>$data[username]</td><td>$data[email]</td></tr>";
echo "</table>";
}
echo "So trang: ";
if($current_page!=1){
echo "<a href='paging.php?total=$total&page=".($current_page1)."'>PRE</a>";
}
//Lay roll begin va end
if(($current_page-ceil($roll/2))<1){
$begin=1;
$end = $roll;
}else{
$begin=$current_page-ceil($roll/2);
if($current_page>=$total_page){
$end=$total_page;
$begin=$total_page-$roll+1;
}else{
$end=$begin+$roll-1;
if($end==$current_page){

Page 306 of 413

$begin=$begin+1;
$end=$end+1;
}
}
}
//Xuat so trang hien thi
for($i=$begin;$i<=$end;$i++){
if($i==$current_page){
echo "[$i]";
}else{
echo "<a href='paging.php?total=$total&page=$i'> ".$i." </a>";
}
}
if($page<$total_page){
echo "<a href='paging.php?total=$total&page=".($current_page+1)."'>
NEXT</a>";
}
mysql_close($conn);

Mi ngi tham kho vit ln class nh!

Hng dn s dng jquery


ajax lng nhau trong ng
dng
Thi gian qua, ti nhn c rt nhiu cu hi v vic s dng jquery ajax lng nhau b
li. V th trong bi ny, ti s hng dn cc bn khc phc li .
V d ca ti n gin nh sau:
C 3 lin kt. Khi click vo 1 lin kt th s xut ra 1 nt nhn. Nhn tip vo nt th
s ra 1 cu thng bo no .
Phn tch:
Nh vy, thc hin thao tc ny ta phi lm 2 hnh ng. 1 l bt s kin khi click vo
link. V 2 l khi click xong s xut hin nt, v nhn tip nt th s thng bo mt thng
tin g .
thc hin ta lm nh sau:
To file test.html vi ni dung sau:
HTML Code:
<!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">

Page 307 of 413

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script language="javascript" src="jquery.js"></script>
<script>
$(document).ready(function(){
$("a.link").click(function(){
id=this.getAttribute("id");
$.ajax({
type:"get",
url:"check.php",
data:"id="+id,
async:false,
success:function(kq){
$("#ketqua").html(kq);
}
})
$(":button").click(function(){
id=this.getAttribute("id");
alert("QHOnline.Info - Your link : "+id);
})
})
})
</script>
</head>
<body>
<a href='#' class="link" id="1">Link 1</a>
<a href='#' class="link" id="2">Link 2</a>
<a href='#' class="link" id="3">Link 3</a>
<div id="ketqua"></div>
</body>
</html>

To file check.php vi ni dung nh sau:


PHP Code:
<?php
$id=$_GET['id'];
echo "<button class='click' id='$id'>Click Me Link $id</button>";
?>

Gii thch:
gi jquery ajax lng nhau, th chng ta phi cho d liu load trn mi trng
ng b. V s kin button ch xut hin khi chng ta click vo lin kt. Do vy, nu
cc bn async:true. Th d liu load bt ng b. V d nhin s kin di s
gi ng thi mc cho ajax mun lm g th lm.
K ti, s kin click vo nt button n c c khi no ?. N c c khi ngi
dng click vo link. V th. S kin nt button phi nm trong s kin click vo link
u tin. Nu t bn ngoi s kin click link th n s khng tm thy c
:button. V mi m ra lm g c :button cho jquery qut d liu.
Vy tng kt li:

Page 308 of 413

s dng jquery ajax lng nhau ta cn ch :


+ D liu load phi ng b. Ngha l cc s kin phi i nhau.
+ Cc s kin phi lng trong nhau, ch khng ng c lp bn ngoi.
Hy vng, s gip cc bn gii quyt vn m cc bn ang gp phi.
Good Luck.

Code phn trang bng Ajax n gin


Knh cho Thy v cc bn . Ngy hm nay em xin vit 1 Tut n gin v vic phn
trang bng Ajax .
Nh chng ta bit ci u im ca Ajax l x l bt ng b , n khng lm trang web
ca chng ta phi load li ton b m ch load li 1 b phn no m chng ta x l .
Hm nay , mnh xin ng dng li nhng g hc t Thy v vit code n gin . C g
sai st cc bn gp dm mnh .
Tut ca mnh ch n gin gm c 1 combo box chng ta chn th loi . Sau khi chn
th loi th s d liu trong th loi ra km theo phn trang . y mnh cha phn
nhm , cc bn c th gp xy dng hon chnh phn trang v phn nhm cho hon
chnh nha . Sau y l cc bc thc hin :
u tin chng ta to 1 trang c tn l theloai.php . Trong trang ny l 1 form chng ta
chn th loi t c s d liu . Sau to 1 trang ajax.js v 1 trang process.php x l
nh trong code bn di .
Cc bn tham kho code y di nha .
Cu trc th mc nh sau :
folder : includes/ : trong folder ny cha file config.php cha cc thng s cu hnh
Code :
PHP Code:
<?php
$host = "localhost";
$user_host = "root";
$pass_host = "root";
$db_name = "tintuc";
$link = mysql_connect($host,$user_host,$pass_host) or die("can not
connect host");
mysql_select_db($db_name,$link) or die("can not connect database");
?>

folder data/ : cha image ca tin tc


file : theloai.php
Code :

Page 309 of 413

PHP Code:
<script language="javascript" src="ajax.js"></script>
<select size="1" name="tl" class="title" onchange="if(this.value!=0){ja
vascript:loadXMLDoc(this.value,1);}">
<option value="0">--Chn th loi--</option>
<?php
require_once("includes/config.php");
$sql = "select * from theloai";
$result = mysql_query($sql);
while($data = mysql_fetch_array($result)){
echo "<option value='$data[idTL]'>$data[TenTL]</option>";
}
?>
</select>
<div id="ketqua"></div>

file ajax.js :
PHP Code:
// JavaScript Document
function obj(){
td = navigator.appName;
if(td == "Microsoft Internet Explorer"){
dd = new ActiveXObject("Microsoft.XMLHTTP");
}else{
dd = new XMLHttpRequest();
}
return dd;
}
http = obj();
function loadXMLDoc(id,p){
document.getElementById("ketqua").innerHTML = "ang x l...";
url = "process.php?id="+id+"&page="+p;
http.open("get",url,true);
http.onreadystatechange=process;
http.send(null);
}
function process(){
if(http.readyState == 4 && http.status == 200){
document.getElementById("ketqua").innerHTML = http.responseText
;
}
}

file proccess.php
code :
PHP Code:
<?php
$id = $_GET['id'];
$page = $_GET['page'];
require_once("includes/config.php");
$sql = "select * from tin where idTL=$id";
$result = mysql_query($sql);
$tongsorecord = mysql_num_rows($result);

Page 310 of 413

$y = 1;
$start = ($page-1)*$y;
$tongsotrang = ceil($tongsorecord/$y);
if($tongsorecord == 0){
echo "Khng c tin no";
}else{
?>
<script language="javascript" src="ajax.js"></script>
<table align="center">
<tr>
<td class="title">STT</td>
<td class="title">Tiu </td>
<td class="title">Hnh</td>
</tr>
<?php
$stt = 0;
$sql1 = "select * from tin where idTL=$id limit $start,$y";
$result1 = mysql_query($sql1);
while($data1 = mysql_fetch_array($result1)){
$stt++;
echo "<tr>";
echo "<td>$stt</td>";
echo "<td>$data1[TieuDe]</td>";
echo "<td><img src='data/$data1[UrlHinh]' title='$data1[Tom
Tat]' /></td>";
echo "</tr>";
}
}
?>
<tr>
<td colspan="3">
<div id="pt">
<?php
for($i=1;$i<=$tongsotrang;$i++){
if($i == $page){
echo "<span class='active'>$i</span>";
}else{
echo "<a href='#' onclick='javascript:loadXMLDoc($i
d,$i);'>$i</a>";
}
}
?>
</div>
</td>
</tr>
</table>

PS : update bi vit :)

S dng JqGrid PHP


Page 311 of 413

---Bi hng ny mnh s hng dn cc bn s dng th vin JqGrid PHP c bn nht


nhng cng to ra 1 trang qun l d liu khng qu phc tp
I/u im :
---D dng ci t v s dng
---Giao din qun l chuyn nghip
---Cc chc nng trong bi hng dn ny :
+Thm ,sa , xa d liu
+Phn trang d liu
+Date-picker
+Sorting the Data
+Auto-filter Search
+Export to Excel *
+Export to PDF (with Custom PDF formats) *
+H tr UTF8
.....
II/ Ci t :
---Link demo : http://www.trirand.net/demophp.aspx cc bn vo xem demo s hiu
cch s dng v tm hiu su hn nhng vn khc.Trong bi ny mnh ch tng hp li
nhng phn hay dng nht cho 1 trang qun l d liu.Bt u nh :
Bc 1 : Cc bn download jqsuite phin bn mi nht ti
http://www.trirand.net/download.aspx v test th c cc v d rt hay v d hiu
+Khi download v c 3 th mc m mnh s dng trong bi ny l th mc js,php
cha th vin jqgrid ,th mc themes cha file giao hin
Bc 2 : To file index.php vi ni dung :
PHP Code:
<!DOCTYPE html PUBLIC "//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml
1-strict.dtd">
<html>
<head>
<title>jqGrid PHP Demo</title>
<link rel="stylesheet" type="text/css" media="screen" href="themes/
redmond/jquery-ui-1.8.16.custom.css" />
<link rel="stylesheet" type="text/css" media="screen" href="themes/
ui.jqgrid.css" />
<link rel="stylesheet" type="text/css" media="screen" href="themes/
ui.multiselect.css" />
</style>
<script src="js/jquery.js" type="text/javascript"></script>
<script src="js/i18n/grid.localeen.js" type="text/javascript"></script>
<script src="js/jquery.jqGrid.min.js" type="text/javascript"></scri
pt>
<script src="js/jquery-uicustom.min.js" type="text/javascript"></script>
</head>
<body>
<div>
<?php include ("grid.php");?>
</div>

Page 312 of 413

</body>
</html>

---Np cc th vin css v js ca jqgrid


---Jqgrid c nhiu themes rt p cc bn c th download v dt trong th mc themes
s dng v ch thay i ng dn ti file css cho ph hp :
PHP Code:
<link rel="stylesheet" type="text/css" media="screen" href="themes/the
mesName/jquery-ui-1.8.16.custom.css" />

Bc 3 : To file jq-config.php
PHP Code:
define('DB_DSN','mysql:host=localhost;dbname=news_vmc');
define('DB_USER', 'root');
// Your MySQL username
define('DB_PASSWORD', ''); // ...and password

Bc 4 : Tp file grid.php vi ni dung :


PHP Code:
<?php
require_once 'jq-config.php';
// include the jqGrid Class
require_once "php/jqGrid.php";
// include the driver class
require_once "php/jqGridPdo.php";
// Connection to the server
// include the autocomplete class
require_once "php/jqAutocomplete.php";
// include the datepicker class
require_once "php/jqCalendar.php";
$conn = new PDO(DB_DSN,DB_USER,DB_PASSWORD);
// Tell the db that we use utf-8
$conn->query("SET NAMES utf8");
// Create the jqGrid instance
$grid = new jqGridRender($conn);
// Write the SQL Query
$sql = 'SELECT * FROM user';
$grid->SelectCommand = $sql;
// Set the table to where you add the data
$grid->table = 'user';
$grid->setPrimaryKeyId('id');
$grid->serialKey = false;
// Set output format to json
$grid->dataType = 'json';
// Set the url from where we obtain the data
$grid->setColModel();
$grid->setUrl('girdUser.php');
// Set some grid options
$grid->setGridOptions(array(
"caption"=>"User header",
"rownumbers"=>true,//th t cc dng 1 2 3 4 5...
"altRows"=>true,
"hoverrows"=>true,//hover rows c mu
"rowNum"=>5,//s dng mc nh hin th trn grid

Page 313 of 413

"rowList"=>array(5,10,15,20),//s dng hin th trn grid


"sortname"=>"user",
"width"=>800,
"height"=>200,
"multiselect"=>true,//chn nhiu rows 1 lc
));
// option row
$grid->setColProperty('id', array(
"editrules"=>array("required"=>true,"editable"=>"f
alse")));
$grid->setColProperty('user', array(
"width"=>"100",
"editrules"=>array("required"=>true)));
$grid->setColProperty('pass', array(
"width"=>"100",
"editrules"=>array("required"=>true)));
$grid->setColProperty('email', array(
"editrules"=>array("required"=>true)));
$grid->setColProperty('ngay_tham_gia',
array("formatter"=>"date",
"formatoptions"=>array("srcformat"=>"Y-md", "newformat"=>"d-m-Y"),
"editoptions"=>array("dataInit"=>
"js:function(elm){setTimeout(function(){
jQuery(elm).datepicker({dateFormat:'yy-mm-dd'});
jQuery('.ui-datepicker').css({'font-size':'75%'});
},200);}")
));
// Enable navigator
$grid->navigator = true;
// option navigator
$grid->setNavOptions('navigator', array(
"pdf"=>true,
"excel"=>true,
"add"=>true,
"edit"=>true,
"del"=>true,
"view"=>false,
"search"=>true));
$grid->setNavOptions('edit',array(
"closeAfterEdit"=>true,
"editCaption"=>"Update User",
"bSubmit"=>"Update"));
$grid->setNavOptions('add',array("bSubmit"=>"Add"));
// Set autocomplete only on serch form.Gi khi tm kim user
$grid>setAutocomplete("user",false,"SELECT DISTINCT user FROM user WHERE use
r LIKE ? ORDER BY user",null, false ,true);

Page 314 of 413

//user datime picker


//$grid>setDatepicker('OrderDate', null, true, true); nu auto hin datime pic
ker
$grid>setDatepicker('ngay_tham_gia', array("buttonIcon"=>true), true, false)
;
$grid->datearray = array('ngay_tham_gia');
// prevent some executions when not excel export
$oper = jqGridUtils::GetParam("oper");
if($oper == "pdf") {
$grid->setPdfOptions(array(
// enable header information
"header"=>true,
// set bigger top margin
"margin_top"=>27,
// set logo image
"header_logo"=>"logo.gif",
// set logo image width
"header_logo_width"=>30,
//header title
"header_title"=>"Thong ke user nobitacnt",
// and a header string to print
"header_string"=>"by nobitacnt"
));
}
// Enjoy
$grid->renderGrid('#grid','#pager',true, null, null, true,true);
$conn = null;
?>

PS : Cn rt nhiu li ch khc t th vin ny cc bn quan tm th nghin cu


thm nha.Chc thnh cng

K thut seo website


Keywords
1. T kha trong th tiu +3
y l mt trong nhng ni quan trng nht t t kha v bn phi t c t kha cn
Seo trong th ny. Bi v nhng g c vit bn trong th s hin th trn kt qu tm
kim ca google. Th tiu cn phi ngn (Ti a 6-7 l hiu qu) v t kha seo ca
bn cn phi gn u dng.
2.T kha trong URL +4
T kha trong url s gip rt nhiu. V d trong link http://www.huamyvan.com/Cac-

Page 315 of 413

Loai-Van...Pham-Khac.html, Th t kha van phong pham l t m bn mun xp hng


cao khi search. Bn nh rng nhng t kha khng c trong trang bn khng c t ln
URL
3.Mt ca t kha trn website +3
Bn cn kim tra mt t kha. T 3-7% cho t kha seo l tt nht. 1-2% th t quan
trng hn. V bn cn trnh mt t kha Seo trn 10% v n trng nh bn ang c
nhi nht t kha thay v vit mt vn bn mang tnh t nhin
4.T kha trong anchor text +3
T kha trong anchor text cng rt quan trng c bit l anchor text ca backlink, bi v
nu bn c t kha anchor text t trang website khc, iu ny c xem nh nhn mt
phiu bu t trang ny khng ch v trang web ca bn ni chung m c v t kha seo
ca bn.
5. T kha trong cc nhm th (<H1>,<H2>) +3
y l v tr m t kha seo ca bn cn xut hin nhiu. Nhng bn phi ch trong
trang ca bn phi c ni dung cho cc t kha ny
6 .T kha seo bt u 1 on +2
T kha bt u u 1 on th vn c cao v tnh hiu qu mc d n khng quan
trng bng t kha trong anchor text, tiltle hoc headings. Bn khng nht thit phi t
trn cng ca phn ni dung, bn vn c th t gia nhng ch l bn cn phi t
u on
7.T kha trong tags <alt> +2
Con b ca google khng th no c c hnh nh nhng n c th c c on m
t cho hnh nh trong tags <alt>, bi vy nu bn c hnh nh trn web bn cn thm t
kha vo tags <alt>
8.T kha trong th meta (Description, Keywords) +1
Rt t quan trng c bit l vi google. Yahoo! V Bing th vn da vo tiu ch ny, bi
vy nu bn ti u cho Yahoo! hoc Bing th hy in y cho tags ny. Trong mi
trng hp in y u khng gy anh hng g.
9.T kha gn +1
T kha gn th vn c tnh mc d n t quan trng hn t kha chnh. V d bn cn
Seo t kha Dien thoai iphone th ti on u bn t cu Gii thiu in thoi mi
t Apple v on s 3 bn t cu dng Iphone ni ting th 2 t in thoi v

Page 316 of 413

iphone c xem l t kha gn. Cc tnh t kha gn ny ch p dng khi bn Seo mt


t kha c ghp t 2 t tr ln.
10. Cm t kha: +1
Ngoi cc t kha cn Seo ca bn, Bn c th ti yu ha cho cm t kha m n cha
nhng t kha cn SEO. Tt nht l bn s dng nhng t kha ph bin c gi bi
google. V d Seo t kha in thoi bn c th s dng cc cm t ph bin trong
ni dung ca mnh nh in thoi gi r hay in thoi di ng hoc in thoi
iphone
11. Li chnh t: +0 (Li khuyn)
Li chnh t xy ra rt nhiu v nu bn bit cch hng t kha ca mnh vo nhng li
ph bin hoc nhng t thay th (v d: Dien thoai di dong v dtdd), bn c th c mt s
lng truy cp t nhng ngi search dng t kha ny. Nhng vic bn t li chnh t
vo website th khng tt. V th bn khng cn t hoc nu cn th ch t trong th
meta
12. Ti u qu nhiu t kha -2
Khi bn ti u qu nhiu t kha cho mt trang c bit l nhng t kha khng lin
quan. iu ny s gy gim hiu xut cho cc t kha khc ca bn v thm ch l c t
kha chnh cng b nh hng theo.
13. Nhi nht t kha: -3
Bt k hnh ng c no v vic nhi nht t kha (hn 10%) bn u c nguy c b
cm t cng c tm kim
I . Links - internal, inbound, outbound
14 .T kha(Anchor text) trong backlink. +3
T kha trong backlink l mt trong nhng yu t quan trng nht c mt th hng tt
cho t kha.
15 .Mc uy tn ca Backlink +3
Khi bn t anchor text hy ch trng n cht lng anchor text tr v website bn.
Anchor text c cht lng l link t nhng website uy tn v thng thng nhng trang
uy tn c im Google PR cao.
16. Link t nhng trang cng lnh vc +3
C nhng link t cc trang cng lnh vc hoc ti u t kha ging bn th rt hu ch.

Page 317 of 413

iu ny ch ra rng trong cuc canh tranh t kha bn c i th b phiu v website


ca bn tr nn ph bin hn
17. Link t website c tn min .edu v .gov
Cc tn min ny rt qu v tn min .edu v .gov c xem uy tn hn .com, .biz, .info
v.v. Nhng lin kt t tn min .edu v .gov thng th rt kh c c.
18. S lng Backlink +3
S lng backlink cng nhiu th cng tt. Nhng uy tn ca website m bn t backlink
th quan trng hn s lng backlink.
19. t t kha (anchor text) trong lin kt ni +2
Trn website ca bn bn cn lin kt n cc link khc cng thuc website ca bn u
ny gip bn kt ni cc t kha khc trong trang v dn dt b ca google i c ht
ton b khi lng trang ca bn .
20. Ni dung xung quanh t kha (Anchor text) +2
Ni dung xung quanh t kha (anchor text) cng rt quan trng bi v iu ny th hin
tnh lin kt ca link v ng thi cho thy y l mt lin kt t nhin hay bn c to
ra.
21. Tui ca backlink +2
Backlink c thi gian tn ti cng lu th cng tt. C nhiu lin kt trong thi gian ngn
cho thy rng bn ang mua chng thay v link t nhin.
22. Link t directories (Dmoz, Yahoo Directory v.v) +2
Vic ny rt tt nhng n ph thuc vo Directory no. c lit k trong Dmoz, Yahoo
Directory v nhng directory tng t nh vy s thc y rt ln cho th hng ca bn
nhng nu c rt nhiu link t cc directories c PR th khng c ch v thm ch c th
b xem l spam link nu bn c hng trm hoc hng ngn link nh vy
23. S lng link i vo website bn t 1 page +1
Vic t t link t mt page n website ca bn th tt hn. Bi v theo cch ny mi
link ca bn tr nn quan trng hn
24. Thit lp khu vc lin kt t trong trang (Named anchors) +1
Thit lp lin kt t trong trang th rt hu ch cho vit iu phi trang nhng cng rt
hu dng cho Seo bi v bn c th to thm mt mc cho trang, mt on hoc text. V

Page 318 of 413

d: trong code thit lp khu vc lin kt ring cho trang <a href=#Anchor> c gii
thch v Anchor</a>
25. Lin kt n t nhng trang web c to ra cho mc ch seo cho trang khc hoc
nhng trang ng nghi ng +0
Nhng lin kt n t trang ny khng lm nh hng n trang ca bn nu nh bn
khng t links ca nhng trang ny vo website mnh. Google xem nh nhng lin kt
n t trang nay ngoi tm kim sot ca bn do bn khng b pht nhng trong mi
trng hp bn nn trnh xa nhng trang web c to ra cho mc ch seo hoc nhng
trang ng ng
26. Qu nhiu lin kt ra ngoi.
Google khng thch nhng trang c nhiu lin kt i ra ngoi, bi vy tt nht bn nn
gia s lin kt ra ngoi trn website mnh di 100 link. C nhiu link ra ngoi khng
to li ch no trong vic xp hng m thm ch cn gy nu hu qu ngc li
27. Qu nhiu lin kt hoc link spam -1
Rt c hi cho th hng ca bn khi bn c nhiu link n t mt website bi v n cho
thy bn ang mua link hoc t nht l spam link. Nu may mn th cng ch vi link
c tnh cho vic SEO ca bn thi.
28. t backlink cho nhng trang to ra cho mc ch SEO hoc nhng trang ng ng -3
Khng nh vic c link n t nhng trang to ra cho mc ch SEO hoc nhng trang
ng ng. Vic bn t li backlink trn website mnh cho nhng trang ny s khin
website ca bn b mt t kha hon ton. Bn cn phi nh k kim tra tnh trng ca
nhng trang t link trn trang ca bn. V d (Bn c to ra 5 blog wordpress hay
blogspot vi ni dung khng lin quan Seo cho mt t kha chnh n website bn, v
khi bn t li backlink cho 5 blog ny trong website bn s khin website bn ri vo
tnh trng mt t kha hon ton.)
29. Lin kt vng tr hnh -3
Lin kt vng xy ra khi trang A link n trang B, trang B link n trang C v trang C
link tr v trang A. l v d n gin v lin kt thnh vng v ngoi ra c nhng
trng hp khc na. Lin kt vng trong nh l mt loi lin kt trao i tr hnh v b
google pht nng
30. Lin kt link cho chiu rng pixel nh
Khi bn c t link trn website mnh c kch thc 1 pixel hoc chiu rng nh vy th
u ny c sem nh l v hnh vi con ngi v bn ang c gng qua mt b my tm
kim.

Page 319 of 413

II.Metatags
31. <Description> metatag +1
Metatags th ang tr nn t quan trng hn i vi google nhng n vn c tnh. S
dng metatag <Description> vit m t cho website ca bn. Ngc li i vi Yahoo
v Bing n vn rt quan trng. i vi google i khi bn thy s xut hin ca m t
trong kt qu tm kim
32. <Keywords> metatag +1
Metatag <Keywords> khng c ch bi google nhng n vn c quan tm bi
Bing v Yahoo. Chiu di ca metatag <Keywords> khong 10 -20 t l tt nht. Khng
nn nhi nht t kha m bn khng c trong ni dung vic ca hi cho th hng ca
bn.1
33. <Language> metatag +1
Nu website ca bn c ngn ng c th th ng tab ny trng. Mc d cng c
search thng minh xc inh ngn ng trn trang ca bn thay v da vo s khai
bo trn th meta <language> nhng cng c search vn xem xt th ny.
34. <Refresh> metatag
Metatag refresh l mt cc chuyn lng khch t mt website n 1 website khc.
Ch lm vic ny nu bn cn duy chuyn trang web ca mnh n mt tn min mi v
bn cn tm thi chuyn hng khch truy cp. Nu s dng trong mt thi gian di n
s lm nh hng n bn xp hng ca bn. Trong mi trng hp s dung chuyn
hng 301 l tt nht.
III.Ni Dung
35. Ni dung c o +3
C nhiu ni dung (lin quan n ng cnh website v khc vi ni dung t website khc
c v tiu ln t ng) th s gip tng th hng ca bn 1 cch tht s
36. Tn s thay i ni dng
Thay i thng xuyn th c nh gi rt cao. S rt tt nu bn lin tc thm ni
dung mi cho website
37. Kch thc ca t kha : +2
Khi 1 t kha trong vn bn c font ln nhng t cn li u khin cho n ng ch
hn do n quan trng hn phn cn li ca on text. Cch tnh im ny vn p dng

Page 320 of 413

cho th (<H1>,<H2>). Thng thng t quan trng th s dng font ch ln hn phn


cn li ca on text.
38. nh dng t kha +2
T m hoc nghing l mt cch nhn mnh s quan trong cc t v cm t quan
trng. Tuy nhin bn ch s dng khi mun nhn mnh nu khng n s mang tc dng
ngc li.
39 . Tui ca ni dung +2
Nhng ni dung va mi cp nht th c google thch hn (Bn nn thng xuyn cp
nht ni dung mi)
40. Kch thc file +1
Trang di th khng c google thch, hoc t nht l bn c th t th hng t kha tt
hn nu bn s dng 3 trang ngn hn thay v tp trung cho 1 trang di m ch cp
mt ch . V vy bn nn chia trang di ca mnh thnh nhng trang nh hn.
41. Phn tch ni dung -2
Theo quan im marketing th vic phn tch ni dung (da trn IP hoc trnh duyt
v.v) th rt tuyt. Nhng i vi Seo th bt li bi v khi bn c mt Url khng lin
quan n ni dung th h thng search s b nhm ln ni dung trong trang ca bn.
42. Thit k v vit code ngho nn -2
B my tm kim ni rng h khng mun mt website thit k v vit code ngho nn,
mc d cha c trang web no b cm v code ln xn hoc hnh nh xu nhng khi bn
thit k xu v vit code ln xn th website bn c th khng c index ht bi vy
vic thc km v thit k v vit code c th gy hi cho website bn.
43. Ni dung bt hp php -3
S dng ni dung c bn quyn ca ngi khc m khng c cho s php hoc ni
dung thc y hnh vi phm php c th khin bn b ui khi cng c tm kim
44. n vn bn vi ngi c -3
y l cch Seo m en. Khi con b tm kim khm ph ra bn c mt on text c bit
c n vi ngi xem th bn s b pht
45. Cloaking -3
K thut cloadking trong SEO? Cloaking l mt k thut SEO m gip cho ni dung ca

Page 321 of 413

site di mt cc Spiders ca cc Search Engines (c my tm kim) khc vi ni dung


m khch truy cp site thy. iu ny thng c tha hin bng cch s iu chnh
hin ni dung ty theo IP truy cp website.
46. Doorway pages -3
To ra nhng trang khc vi mc ch la nhn rng webstie c lin quan n ni dung
ny trong khi thc t th khng. Vic ny s b pht rt nng t google
47. Ni dung b trng lp -3
Khi bn c nhiu ni dung ging nhau trn nhiu trang ca website bn vic s b pht
v khng lm c website ca bn tr nn ln hn. ng thi hy hn ch s trng lp ni
dung vi
IV.Thnh phn khc
48. JavaScript +0
Nu s dng nh l b tr tnh nng cho web th khng c vn g. Nhng nu bn
hin th ni dung thng qua JavaScript u ny s rt kh cho nhn hot ng v nu
code JavaScript c vit rt ln xn th nhn khng th no i theo ng hng website
mun v bn s lm nh xu.
49. Hnh nh trong text +0
Ch vit text trong web th rt nhm chn nhng c nhiu hnh nh v khng c text th
c xem nh l li trong SEO. Bn nh lun lun cung cp th <Alt> m t cho hnh
nh nhng khng nn nhi nht t kha v cung cp thng tin khng lin quan.
50. Video +0
Nu bn khng c tapescript cha Video th google s khng lp cp nht video vo cng
c tm kim
51. S dng hnh nh cho vic lin kt link -1
S dng hnh nh lin kt th rt c hi, c bit l khi bn khng thm tab <alt>. K
c khi bn thm tab <alt> th n cng vn c xem l c hi. Bi vy bn ch s dng
hnh nh iu hng ch khi iu ny thc s quan trng i vi vic b tr thit k
trong trang web
52. Frames -2
Fames th rt c hi cho SEO. V bn ch dng khi thc s cn thit

Page 322 of 413

53. Flash -2
B tm kim khng nh ch mc cho ni dung Flash bi vy bn lun nh t ni dung
cho th <alt>
54. Flash trn trang ch -3
Cch ny dng nh hin ti khng cn dng. Nhng c mt Flash trn trang ch v
khng c c HTML th xem nh l bn chng Seo g c.
V. Domains, URLs, Web Mastery
55. Url cha nhiu thng tin +3
u ny rt quan trng t bit i vi Yahoo v Bing
56. Kh nng truy cp web +3
Mt vn c bn m bn thng b qun. l nu nh website ca bn (hoc mt s
trang trong website) b h link, hoc li 404, hoc t mt khu bo mt th n gin l
nhng trang s khng c nh ch mc.
57. Sitemap +2
Rt tt nu bn c sitemap cho website v b tm kim c bit quan tm loi file ny.
Bn c th lm theo dnh ang HTML hoc lm theo nh dng ca google
58. ln website +2
B tm kim rt thch nhng website ln , cng ln cng tt. Khng c website no b
pht v c trn 10 000 trang c.
59. Tui ca website +2
Trang web c thi gian tn ti lu th c nh gi cao hn l mt website mi c
thnh lp.
60. Giao din trang +2
Giao din trang cung quan trng cho th hng bi v khi trang ph hp vi 1 giao din,
iu ny gip tng th hn ca tt c cc trang lin quan n giao din ny.
61. V tr tp tin trong trang web +1
V tr tp tin trong website cng gn vi th mc gc c xu hng xp hng tt hn so
vi tp tin cch xa th mc gc

Page 323 of 413

62. Domain v subdomain +1


C mt domain ring bit th tt hn. V d s dng tn min dienthoai.com tt hn
dienthoai.logspot.com
63. Loi tn min +1
Loi tn min vn c quan tm theo cch khc nhau. Thng thng ngi ta s dng
tn min .com. Loi tn min ny tt hn .biz, .info hay .net. Nhng loi tn min mnh
nht l .edu hoc .org
64. Du gch ni trong url +1
Du gch ni gia cc t trong url gip d c v tng im SEO. u ny p dng cho
c tn min chnh v phn cn li ca tn min VD: dien-thoai.com/dien-thoai-nokia.html
65. Chiu di ca url +0
Ni chung khng quan trng nhng nu Url qu di th n bt u trng ging nh spam.
Chnh v vy url khng nn di hn 10 t (3-4 t cho tn min chnh v 6-7 t cho phn
cn li ca tn min)
66. a ch IP 0
Khng thnh vn nu nh bn chia s host hoc dng host min ph. Nhng bn s b
vo danh sch en nu bn spam hoc thc hin cc hnh ng bt hp php.
67. t qung co Adsense 0
t Adsense google th khng c lin quan g n SEO c. Ch gip bn tng thu nhp
ch khng gip bn tng v tr t kha.
68. Qung co google Adwords 0
Ging nh adsense, Adwords khng h nh hng g n SEO ngoi vic gip bn c
lu lng ngi ving thm website nhiu hn
69. Thi gian cht ca host -1
Thi gian cht ca host lin quan trc tip n kh nng tip cn bi v nu mt site
thng xuyn cht th b khng th index. Trong thc t ch c mt yu t l nh cung
cp host khng ng tin cy hoc thi gian hot ng t hn 97-98%.
70. Url ng -1

Page 324 of 413

B tm kim thch url tnh. Mc d bn thy c rt nhiu url ng vn nm trn top.


Nhng nh vy vn khng tt c bit l url ng trn 200 k t. Trong mi trng hp
bn nn s dng cng c chuyn url ng v url tnh thn thin vi SEO. V d :
chuyn url ng thoitrang5s.com/category.php?id=1 v url tnh thoitrang5s.com/vaydam.html
71. Session Ids -2
S dng session ids th khng tt hn vic bn s dng url ng. Khng c dng
session ids cho thng tin m bn mun nh ch mc bi b tm kim v vic ny d b
hiu nhm l b trng ni dung. V d:3 link session ids di du tr v mt ni dung vi
link u tin l link gc
Dien-thoai.com/nokia-1200.html
Dien-thoai.com/nokia-1200.html?id=abcd
Dien-thoai.com/nokia-1200.html?id=abcdfe
72. Cm trong file robots.txt -2
Nu mt phn ca trang b cm u ny s nh hng n phn cn li ca trang bi vy
b tm kim s t n trang bn hn. Chnh v th nu phn no trong website bn khng
cn index c khai bo t chi trong robots.txt
73. Chuyn hng (301 and 302) -3
Khng p dng cch ny th vic chuyn hng s lm cho bn b thit hi nhiu. V mt
chuyn hng c th c xem nh l mt k thut m en khi khch truy cp b chuyn
hng n 1 trang khc

Phn trang n gin vi


Jquery
---Phn trang l hnh thc m rt nhiu web hin nay s dng,phn trang cng khng qu
phc tp,mnh xin chia s code phn trang sn phm ca mnh c s dng Jquery n
gin,DEMO : http://nobitacnt.tk/shop/test/
---class sn phm :
PHP Code:
<?php
require_once("cl_connectDb.php");

Page 325 of 413

class sanpham extends connectdb{


public function __construct(){
$this->connect();
}
public function list_sp($start,$limit){//hin th sn phm
$sql="select * from sanpham order by id_SP DESC LIMIT $start ,$
limit ";
$this->query($sql);
$data=array();
if($this->num_rows()!=0){
while($row=$this->fetch()){
$data[]=$row;
}
}else{
$data=0;
}
return $data;
}
}
?>

---class phn trang :


PHP Code:
<?php
require_once("cl_connectDb.php");
class phantrang extends connectdb{
public $page;
public $star;
public $display;
public $id;
public function __construct(){
$this->connect();
$this->get_start();
$this->display=12;
}
public function get_page(){
if(isset($_GET['page'])){
$this->page=$_GET['page'];
}else{
$sql="select * from sanpham";
$this->query($sql);
if($this->num_rows()>$this->display){
$this->page=ceil($this->num_rows()/$this->display);
}else{
$this->page=1;
}
}
}
public function get_start(){
if(isset($_GET['start'])){
$this->star=$_GET['start'];
}else{
$this->star=0;
}
}
public function out_put(){

Page 326 of 413

echo "<ul class='nav'>";


if($this->page>1)
{
$next=$this->display+$this->star;
$prev=$this->star-$this->display;
$hientai=($this->star/$this->display)+1;
if($hientai !=1)
{
echo "<li><a href='javascript:void(0)' class='pt' title='".
$this->page."' id='".$prev."'> Preview </a></li>";
}
for($i=1;$i<=$this->page;$i++)
{
if($hientai !=$i)
{
echo "<li><a href='javascript:void(0)' class='pt' title='"
.$this->page."' id='".$this->display*($i-1)."'> $i </a></li>";
}
else
{
echo "<li class='current'>$i</li>";
}
}
if($hientai !=$this->page)
{
echo "<li><a href='javascript:void(0)' class='pt' title='".
$this->page."' id='".$next."'> Next </a></li>";
}
}else{
echo "<li class='current'>1</li>";
}
echo "</ul>";
}
}
?>

---file js ajax.js :
PHP Code:
$(document).ready(function(){
$("a.pt").click(function(){
var page=$(this).attr("title");
var start=this.id;
$.ajax({
type : "GET",
url : "index.php?page="+page+"&start="+start,
datatype: "html",
beforeSend: function(){
$('#load').html("LOADDING...");
},
success: function(html){
$('#load').text('');
$('#kq').html(html);
}
});

Page 327 of 413

})
})

v cui cng l file index :


PHP Code:
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/lib
s/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="ajax.js"></script>
</head>
<body>
<?php
echo "<div id='load'></div>";
echo "<div id='kq'>";
require_once("cl_sanpham.php");
require_once("cl_phantrang.php");
//phan trang
$pt=new phantrang;
$limit=$pt->display;
$start=$pt->star;
$pt->get_page();
//end phn trang
$sanpham=new sanpham;
$data=$sanpham->list_sp($start,$limit);
if($data!=0){
foreach($data as $row){
$ten_sp=$row['name_SP'];
echo $ten_sp."<br />";
}
echo "<div id='phantrang'>";
$pt->out_put();
echo "</div>";
}else{
echo "EMPTY DATA";
}
echo "</div>";
?>
</body>
</html>

Performance Tips trong


PHP - Part 1
How are you today ?
Are you ok ? I hope so.
Page 328 of 413

Are you happy ? I hope so .


Now, we will talking about Perfromance Tips in PHP .......
Ti sao khi xy dng 1 class chng ta cn phi c setname, getname ?
Tht s iu khng cn thit, ni chung l tu trng hp !
Sau y l 1 v d minh ho:
PHP Code:
class hello {
public $name = "";
public function setname($a){
$this->name = $a;
}
public function getname(){
return $this->name;
}
}
$doc = new hello();

Nu theo 1 chun th ti ngy cc bn c set xong ri get ?


PHP Code:
$doc->setname("Yachi");
$b = $doc->getname();

N tht s l v b phi ko ?
Thay v lm nh vy, chng ta lm th ny vy , ci ny s run up 100% faster , ci ny
ng Google bo m y
PHP Code:
$doc->name ="Emiko";
$n = $doc->name;

Ni sung th cc bn s ko tin, th xem no


PHP Code:
class hello {
public $name = "";
public function setname($a){
$this->name = $a;
}
public function getname(){
return $this->name;
}
}

Page 329 of 413

$doc = new hello();


for($i=0; $i<=10; $i++){
$a = microtime(true);
for($j=0; $j<100000;$j++){
$doc->name ="Emiko";
$n = $doc->name;
}
echo microtime(true) - $a;
echo "<br />";
}
echo $n;
echo "<br /><hr /><br />";
for($i=0; $i<=10; $i++){
$a = microtime(true);
for($j=0; $j<100000;$j++){
$doc->setname("Yachi");
$b = $doc->getname();
}
echo microtime(true) - $a;
echo "<br />";
}
echo

$b;

p/s : y l micro nh, nhng trong vng lp for mnh ch dng 5 s 0, bi v i


khi > 6 s 0 th browser s bo li (Maximum execution time of 30 seconds
exceeded), v tt nhin, bao nhiu s 0 cng kt qu nh nhau thi
By gi, th tin ri ch

. Hy thay i

cch code ca mnh li no

Nhng lp v phng thc


tru tng trong PHP 5.
Nhng lp v phng thc tru tng trong PHP 5.
-Mt lp tru tng khng cho php to mt i tng th hin lp tru tng (an
instance of a class).
-Mt lp cha phng thc tru tng phi l tru tng.
-Mt phng thc tru tng th khng c nh ngha hnh vi.
-Khi k tha mt lp tru tng, tt c phng thc tru tng trong lp cha phi c
nh ngha bi lp con. Nu phng thc tru tng c nh ngha l protected, hm

Page 330 of 413

hnh vi phi c nh ngha protcted hay public m khng c nh ngha private.


V d n gin lp tru tng:
PHP Code:
<?php
abstract class AbstractClass //Khai bao mot lop truu tuong.
{
public $mumber1;
public $number2;
//Khai bao phuong thuc truu tuong.
abstract protected function operationName($x,$y);
abstract protected function getValue();
//Khai bao phuong thuc chung
public function printOut()
{
echo $this->getValue();
}
public function setValue($x,$y)
{
$this->number1=$x;
$this->number2=$y;
}
}
class AddtionClass extends AbstractClass //Ke thua lop truu tuong
{
// Dinh nghia hanh vi cua phuong thuc truu tuong.
protected function getValue()
{
$result=$this->number1+$this->number2;
return $result;
}
public function operationName($x,$y)
{
return "Day la phep toan Tong: $x+$y=";
}
}
class SubtractionClass extends AbstractClass //Ke thua lop truu tuo
ng.
{
// Dinh nghia hanh vi cua phuong thuc truu tuong.
protected function getValue()
{
$result=$this->number1-$this->number2;
return $result;
}
public function operationName($x,$y)
{
return "Day la phep toan Hieu: $x-$y=";
}
}
$a= new AddtionClass;
$x=7;$y=7;
echo $a->operationName($x,$y);
$a->setValue($x,$y);
$a->printOut();

Page 331 of 413

echo"<br />";
$b= new SubtractionClass;
$x=10;$y=7;
echo $b->operationName($x,$y);
$b->setValue($x,$y);
$b->printOut();
?>

Kt qu:
Day la phep toan Tong: 7+7=14
Day la phep toan Hieu: 10-7=3
y l v d mnh vit trong phm vi phi kin thc hn hp ca mnh mong cc bn
ng gp kin.:)

M hnh Multi Modules , Multi


Templates v Multi Database
*Ngi bun qu khng c g lm ln vit 1 bi hng dn hiu k v khi no qun vo
c lai.
A/Multi Modules
I/ tng:
---Mnh cng ang tm hiu Zend frameword thy n c s dng 1 m hnh multi
modules rt hay v linh hot ln c tng s dng ngay m hnh ny trong cc ng
dng thc t khi cc bn s dng nhiu modules.N chy theo link dng
'modules/controller/action/id' V mnh cng cu hnh test th trn m hnh ny theo
mun
II/u im :
---D lm vic theo nhm mi ngi vit 1 modules m khng lin quan ti nhau
---D dng thm hay xa 1 modules trong ng dng m khng lm nh hng ti cc
modules khc
---T ng load controller v model trong module hin ti
---T ng load file css+js trong modules hin ti
---T ng load cc file block trong modules hin ti
III/M hnh multi modules :
-M hnh c dng cu trc nh sau :
PHP Code:
Root /
---application/
----------Bootstrap.php
----------configs/
----------modules/

Page 332 of 413

---------------------admin/
-----------------------------controllers/
-----------------------------modles/
-----------------------------views/
-----------------------------forms/
-----------------------------blocks/
---------------------shopping/
-----------------------------controllers/
-----------------------------modles/
-----------------------------views/
-----------------------------forms/
-----------------------------blocks/
---------------------news/
-----------------------------controllers/
-----------------------------modles/
-----------------------------views/
-----------------------------forms/
-----------------------------blocks/
---public/
---------templatest/
---------------------admin/
-----------------------------images/
-----------------------------css/
-----------------------------js/
-----------------------------flash/
---------------------shopping/
-----------------------------images/
-----------------------------css/
-----------------------------js/
-----------------------------flash/
---------------------news/
-----------------------------images/
-----------------------------css/
-----------------------------js/
-----------------------------flash/
---------upload/
---library/
---.htacess/
---define.php/
---index.php/

---y l m hnh mnh ang s dng nhn vo cu trc chc cc bn hiu ngha cc
th mc ri.
---File Bootstrap.php :
PHP Code:
<?php
class Bootstrap{
public static $module = NULL;//ly tn module hin ti
public static $controller = NULL;//ly tn controller hin ti
public static $action = NULL;//ly action hin ti
public static $id = NULL;//ly id hin ti
private static $instance = NULL;
public function __construct(){
if(self::$instance == NULL){
self::$instance = new Bootstrap;

Page 333 of 413

}
return self::$instance;
}
public static function run(){
Session::__init();
if(isset($_GET['url'])){
$url = $_GET['url'];
$url = rtrim($url,"/");
$url = explode("/",$url);
self::$module = $url[0];
}else{
self::$module = 'default';
}
if(isset($url[1])){
self::$controller = ucfirst($url[1]);//bien doi chu cai dau
tient hanh chu hoa
}else{
self::$controller = 'Index';
self::$action = 'IndexAction';
}//end if isset $url[1];
//ly file controller hin ti
$modules_path = MODULES_PATH . self::$module;//duong dan toi mo
dules hien tai
$name_controller = self::$controller . 'Controller';
$file_control = MODULES_PATH . self::$module . '/controllers/'
. $name_controller . '.php';
if(file_exists($file_control) && file_exists($modules_path)){
require_once($file_control);
}else{//chay controller error
$file_control = MODULES_PATH . 'default/controllers/ErrorC
ontroller.php' ;
$name_controller = 'ErrorController';
require_once($file_control);
}
$c = new $name_controller;
$c->LoadModel(self::$controller);//auto load model
if(isset($url[2])){
if(isset($url[3])){
self::$id=$url[3];
self::$action = ucfirst($url[2]).'Action';
$c->{self::$action}(self::$id);
}else{
self::$action = $url[2].'Action';
$c->{self::$action}();
}
}else{
$c->IndexAction();
}

Page 334 of 413

}
}
?>

---

Tm hiu th vin
Php_filter
A.PHP_FILTER l g ?
Hin nay, hu ht mi ng dng u c s dng d liu t nhng ngun ngoi khng an
ton bao gm :

Cookies

D liu nhp vo t form

Web services data

Bin server

Cc kt qu tr v t database

V th , PHP filters c s dng lc nhng loi d liu y .


s dng filter chng ta cn dng nhng hm sau y:
filter_var(bin, kiu lc) : Lc bin vi kiu lc ch nh
filter_var_array(bin, mng_kiu_lc): Lc nhiu bin vi nhiu kiu lc ch nh khc
nhau
filter_input(Loi_method_trong_Form, tn_field, kiu lc) : Lc t 1 form input vi kiu
lc ch nh
filter_input_array(Loi_method_trong_Form, tn_field, mng_kiu_lc): Lc nhiu form
input vi nhiu kiu lc ch nh khc nhau

B.CCH S DNG
Kiu lc:

Page 335 of 413

C 2 loi kiu lc l : SANITIZE v VALIDATE


a/ SANITIZE:

Kiu lc ny dng cho php hoc khng cho php mt s k t trong chui

Lun tr v chui .

Cc loi FILTER_SANITIZE cn nh :

FILTER_SANITIZE_NUMBER_INT: Ch cho php s v cc php ton + - xut hin


trong chui
FILTER_SANITIZE_STRING : B qua hoc m ha nhng k t khng mong mun v
cc th
FILTER_SANITIZE_MAGIC_QUOTES: Thm \ vo trc nhng k t ch nh gm: ' "
\ NULL
FILTER_SANITIZE_SPECIAL_CHARS: Thay th cc k t < > & v cc k t c m
ASCII b hn 32
FILTER_SANITIZE_EMAIL: B qua cc k t khng hp php trong 1 email: " $ ( ) , : ;
<>\
FILTER_SANITIZE_URL : B qua cc k t khng hp php trong 1 ng dn . Cho
php hu ht cc k t thng dng
V d:
PHP Code:
<?php
$test_number_int = '5+4ab-7bc';
var_dump(filter_var($test_number_int, FILTER_SANITIZE_NUMBER_I
NT));
//Ta c chui '5+4-7'
$test_string = '<b>ABC</b>';
var_dump(filter_var($test_string, FILTER_SANITIZE_STRING));
//Ta c chui 'ABC'
$test_magic_quotes = "Yours ' s car ";
var_dump(filter_var($test_magic_quotes, FILTER_SANITIZE_MAGIC_
QUOTES));
//Ta c chui " 'Yours \' car ";
$test_special_chars= "Bn <Lovely> & <Beautiful> ";
var_dump(filter_var($test_special_chars, FILTER_SANITIZE_MAGIC
_QUOTES));
//Khi click phi chn view source trang web bn s thy chui " Bn &lt
; Lovely &gt; &amp &lt; Beautiful &gt;"
$test_email = "online(mean)miss;ing'yo\u@yahoo.com ";
var_dump(filter_var($test_email,FILTER_SANITIZE_EMAIL));
//Tr v chui "onlinemeanmissing'you@yahoo.com"
$test_url = "http://www.w3schools.com ";
var_dump(filter_var($test_email,FILTER_SANITIZE_EMAIL));

Page 336 of 413

//Tr v chui "http://www.w3school.com"


?>

Lu : SANITIZE ch c nhim v lc b cc thnh phn khng mong mun trn


chui hp l ln hok hp l .
b/VALIDATE

Kiu lc ny xc nh xem 1 chui c ng format ca n hay khng

Tr v data nu hp l, FALSE nu tht bi

Cc loi FILTER_VALIDATE cn nh :

FILTER_VALIDATE_INT : xc nhn tnh hp l ca 1 con s nguyn. Bn cnh c


cc options nh : min_range(gi tr nh nht cho php) , max_range ( gi tr ln nht cho
php)
FILTER_VALIDATE_FLOAT : xc nhn tnh hp l ca 1 con s thc
FILTER_VALIDATE_EMAIL : xc nhn tnh hp l ca 1 email
FILTER_VALIDATE_URL : xc nhn tnh hp l ca 1 url
1 s FLAGS ca FITLTER_VALIDATE_URL:
FILTER_FLAG_SCHEME_REQUIRED:
chng hn http://example.com
FILTER_FLAG_HOST_REQUIRED:
Yu cu URL c tn host chng hn http://www.example.com
FILTER_FLAG_PATH_REQUIRED:
Yu cu URL c ng dn sau domain chng hn http://www.example.com/index/
FILTER_FLAG_QUERY_REQUIRED:
Yu cu URL c chui .chng hn http://www.example.php?id=5
V d:
PHP Code:
<?php
$test_int =15;
$options = array('options'=>array('min_range' =>30, 'max_rang
e'=>50));
var_dump(filter_var($test_int,FILTER_VALIDATE_INT, $options))
;
//Tr v FALSE v 15 khng thuc on [30;50]
$test_email = 'example@';
var_dump(filter_var($test_email, FILTER_VALIDATE_EMAIL));
// Tr v FALSE .
$test_url1 = 'http://example.com';
$test_url2 = 'http://example.com/index/abc';
var_dump(filter_var($test_url1,FILTER_VALIDATE_URL));
// Tr v 'http://example.com'
var_dump(filter_var($test_url2, FILTER_VALIDATE_URL, FILTER_F
LAG_PATH_REQUIRED));
// Tr v 'http://example.com/index/abc'
var_dump(filter_var($test_url1, FILTER_VALIDATE_URL, FILTER_F
LAG_PATH_REQUIRED));

Page 337 of 413

// Tr v FALSE v $test_url1 khng c ng dn sau domain


?>

Chng ta tm hiu v cch s dng cc hm cn li.


To 2 file : form.html v filter.php
form.html:
HTML Code:
<form action = 'filter.php' method ='post'>
Name: <input type = 'text' name = 'name' / > <br/>
Age: <input type = 'text' name = 'age' / > <br/>
Email: <input type = 'text' name = 'email' / > <br/>
<input type = 'submit' value = 'Send' />
</form>

filter.php
PHP Code:
<?php
if(filter_has_var(INPUT_POST,'comments')){
echo ' C field tn l comments trong form input ';
}
else
echo 'Khng c field tn comments trong form input<br/>';
$name = filter_input(INPUT_POST,'name',FILTER_SANITIZE_STRING);
$options = array('options'=>array('min_range' =>18, 'max_range'
=>80));
if(!filter_input(INPUT_POST,'age',FILTER_VALIDATE_INT,$options)
){
echo ' Tui ca bn phi >18 v < 80 <br/>';
}
else{
$age = filter_input(INPUT_POST,'age',FILTER_VALIDATE_INT,
$options);
}
if(!filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL)){
echo ' Email sai format<br/>';
}
else{
$age = filter_input(INPUT_POST,'email',FILTER_VALIDATE_EM
AIL);
}
/*on code trn kim tra input ca ngi dng, nu email v tui hp l
th mi tin hnh gn vo bin, nu hok th xut li.
Hm filter_input y c th dng INPUT_GET thay cho INPUT_POST nu me
thod ca bn l GET.
*/
?>

on code trn l kh di, chng ta rt ngn li nh sau :


PHP Code:
$array = array('name'=>array('filter'=>FILTER_SANITIZE_STR
ING),
'age' => array('filter'=>FILTER_VAL
IDATE_INT,
array('min_r
ange'=>18, 'max_range' =>80)),
'email' =>array('filter'=>FILTER_VA

Page 338 of 413

LIDATE_EMAIL) );
$result = filter_input_array(INPUT_POST, $array);
if($result['name'] && $result['age'] && $result['email']){
extract($result); //Hm ny ct mng khng tun t,
tn ca kha s l bin cha gi tr kha
}
var_dump($name);
var_dump($age);
var_dump($email);

Chng ta c 1 loi filter c bit l FILTER_CALLBACK .


PHP Code:
<?php
$array_test =array('name'=>'Dang Hai Phung' , 'age' =>'18'
, 'email'=>'onlinemeanmissingyou@yahoo.com');
$array = array('name'=>array('filter'=>FILTER_CALLBACK,'op
tions'=>'strtoupper'),
'age' => array('filter'=>FILTER_VAL
IDATE_INT,
array('min_r
ange'=>18, 'max_range' =>80)),
'email' =>array('filter'=>FILTER_VA
LIDATE_EMAIL) );
//Hm strtoupper chuyn chui thnh ch IN HOA
$result = filter_var_array($array_test, $array);
if(filter_var_array($array_test, $array)){
extract($result);
}
var_dump($name);
var_dump($age);
var_dump($email);
?>

Cc bn th tr li cc cu hi sau nh :
1/ Filter l g ? Ti sao phi dng filter ?
2/ dng Filter cn nh cc hm no ?
3/ Kiu lc c my loi ? Trong mi loi th c cc loi FILTER_ no ?
4/ Cch s dng cc hm trong filter .

Vit Class Database c


chng SQL Injection
Ba nay ln m nghin cu v phng chng li SQL Injector. Nhn tin mnh vit 1 class
Database s dng li cho tin, cng vi mc ch lu tr kin thc nn post ln y
cho mi ngi cng tham kho, cng khng bit l vit nh vy hon chnh cha. Nu
ai c cch vit khc hay hn th post ln chia s nh :).

Page 339 of 413

PHP Code:
<?php
class DB_MySQL{
private $db_host = "localhost"; //Khai bo thng tin host database
private $db_user = "root"; //Khai bo thng tin username database
private $db_pass = ""; //Khai bo thng tin password database
private $db_name = "test"; // Khai bo thng tin name database
private $connection;
private $result = null; //Thuc tnh result tr v kt qu ca quer
y.
private $magic_quotes_active;
private $real_escape_string_exists;
public function __construct(){
$this>openConnect(); // T ng m kt ni CSDL khi gi n class
$this->magic_quotes_active = get_magic_quotes_gpc();
$this>real_escape_string_exists = function_exists( "mysql_real_escape_string
" );
}
//M kt ni CSDL
public function openConnect(){
$this->connection = mysql_connect($this->db_host, $this>db_user, $this->db_pass);
if (!$this->connection){
die("Database connection failed: " . mysql_error());
}
else{
$db_select = mysql_select_db($this->db_name, $this>connection);
if(!$db_select){
die("Database selection failed: " . mysql_error());
}
}
}
//ng kt ni CSDL
public function closeConnect(){
if ($this->connection)
{
mysql_close($this->connection);
unset($this->connection);
}
}
//Phng thc chng SQL Injection
public function sqlQuote( $value ){
//Kim tra xem version PHP bn s dng c hiu hm mysql_real_e
scape_string() hay ko
if ($this->real_escape_string_exists) {
//Trng hp s dng PHP v4.3.0 tr ln
//PHP hiu hm mysql_real_escape_string()

Page 340 of 413

if( $this->magic_quotes_active ) {
//Trong trng hp PHP h tr hm get_magic_quotes_g
pc()
//Ta s dng hm stripslashes b qua cc du slashes
$value = stripslashes( $value );
}
$value = mysql_real_escape_string( $value );
}
else {
//Trng hp dng cho cc version PHP di 4.3.0
//PHP khng hiu hm mysql_real_escape_string()
if( !$this->magic_quotes_active ){
//Trong trng hp PHP khng h tr hm get_magic_quote
s_gpc()
//Ta s dng hm addslashes thm cc du slashes vo
gi tr
$value = addslashes( $value );
}
// Nu hm get_magic_quotes_gpc() active c ngha l cc
du slashes tn ti ri
}
return $value;
}
//Chy cu truy vn query
public function query($sql){
$this->result = mysql_query($sql, $this->connection);
if (!$this->result){
$output = "Database query failed: " . mysql_error() . "<br
/><br />";
die($output);
}
return $this->result;
}
//Ly s record d liu mng trong CSDL thng qua cu truy vn quer
y
public function fetch_array(){
if ($this->result){
$rows = array();
$rows = mysql_fetch_array($this->result);
}
return $rows;
}
//m s record trong CSDL thng qua cu truy vn query
public function num_row(){
if($this->result){
$num = null;
$num = mysql_num_rows($this->result);
}
return $num;
}
}
?>

Page 341 of 413

Cch s dng:
PHP Code:
$username = $_POST['username'];
$password = $_POST['password'];
$db = new DB_MySQL;
$sql = "SELECT * FROM user WHERE username='".$db>sqlQuote($username)."' AND password='".$db->sqlQuote($password)."'";
$db->query($sql);
.......................
$db->closeConnect();

C th chng SQL Injection 1 cch linh hot hn bng cch s dng sqlQuote
thit lp cc gi tr input trc khi a n vo cu truy vn sql.

Cch ly rss v tin tc T


VnExPress
Bi vit ny hng dn cc bn ly tiu ,tm tt,ni dung v RSS thng qua rss ca
trang VnExpress.Cn rt nhiu hn ch mnh dn post ln cc pro gp nh.
Trc tin l hm ly tin tc (hm ny ca thy Huy ^^ nhng mnh thy thy ly tin t 1
bi thi)
PHP Code:
function getdata($url, $start, $stop, $str_to_replace='', $str_replace=
'', $extra_data='')
{
$fd = "";
$start_pos = $end_pos = 0;
$url = fopen($url, "r");//url bn mun ly tin
while(true) {
if($end_pos > $start_pos) {
$result = substr($fd, $start_pos, $end_pos-$start_pos);
$result .= $stop;
break;
}
$data = fread($url, 8192);
if(strlen($data) == 0) break;
$fd .= $data;
if(!$start_pos) $start_pos = strpos($fd, $start);

Page 342 of 413

if($start_pos) $end_pos = strpos(substr($fd, $start_pos), $stop) + $sta


rt_pos;
}
fclose($url);
$info=str_replace($str_to_replace, $str_replace, $extra_data.$result);
return $info;
}

Cc bn m bt k file rss no ca VnExpress thy dc cu trc file XML c dng (Ln


mng c cu trc xml minh thy cng ging vi cu trc html ^^)
PHP Code:
<item>//root elment (ci ny coi nh th cha bn trong l cc th con)
<title><![CDATA[ Ngn hng tr lng cao nht khi tng cng ty nh n
c ]]></title>
<description><![CDATA[ <a href="http://vnexpress.n
et/gl/ebank/thi-truong/2011/09/ngan-hang-tra-luong-cao-nhat-khoi-tongcong-ty-nhanuoc/"><img src="http://vnexpress.net/Files/Subject/3b/a2/ec/59/nganhang2.jpg"></a>Vt qua cc "qu m thp" thuc cc ngnh du kh, vi
n thng, khi ngn hng Nh nc ang ng v tr u bng v mc chi t
r thu nhp cho cn b nhn vin vi mc bnh qun mt thng ln ti 18
triu ng. ]]></description> <link>http://ebank.vnexpress.net/gl/eba
nk/thi-truong/2011/09/ngan-hang-tra-luong-cao-nhat-khoi-tong-cong-tynhanuoc/</link>
<pubDate>Wed, 14 Sep 2011 17:01:02 GMT</pubDate>
</i
tem>

Tip n l c XML DOM,vi cu trc file rss nh trn


PHP Code:
$dom=new DOMDocument('1.0','utf-8');//tao doi tuong dom
$dom>load("Trang rss mun ly");//muon lay rss tu trang nao thi ban khai ba
o day
$items = $dom>getElementsByTagName("item");//lay cac element co tag name la item va
gan vao bien $items
foreach($items as $item)//lap
{
$titles=$item>getElementsByTagName('title');//lay cac element co tag name la title v
a gan vao bien $titles
$title=$titles>item(0);//lay ra gia tri dau tuien trong array $titles
$descriptions=$item->getElementsByTagName('description');
$des=$descriptions->item(0);
$links=$item->getElementsByTagName('link');
$link=$links->item(0);
$pubDates=$item->getElementsByTagName('pubDate');
$pubDate=$pubDates->item(0);
}

V y l cch s dng ch vic echo ra nhng g bn mun ly,lc ny c th thm tiu


,ni dung,tm tt,ngy gi vo CSDL ca bn
PHP Code:
<table width="800" border="1" align=center bgcolor=#e5eef2>
<tr>
<td style="color:#FF0000; font-weight:bold; textdecoration:none"><a href="<? echo $link-

Page 343 of 413

>nodeValue ;?>" /><? echo $title->nodeValue ?></td>


</tr>
<tr>
<td>
<?php
echo $pubDate->nodeValue;
echo $dec->nodeValue;
?>
</td>
</tr>
<tr>
<td><font face=arial size=2>
<?php
$url=$link->nodeValue;
$start="<div id=\"content\">";
$end="<div class=\"tag-parent\">";
$img_search= "/Files";
$img_show="http://vnexpress.net/Files";
$extra='<META HTTP-EQUIV="Content-Type" Content="texthtml; charset=UTF8"><link href="/Resource/Common/default.css" rel="stylesheet" type="tex
t/css">';
echo getdata($url,$start,$end,$img_search,$img_show,$extra);
?>
</font></td>
</tr>
</table>

Nh vy c sau 1 vng lp th ta s ly c link ca <link></link> Trong file xml v


gn link vo bin $url,nh vy s ly dc tt c link ch khng ch 1 link
y l ton b code ca bi ny
PHP Code:
<?
function getdata($url, $start, $stop, $str_to_replace='', $str_replace=
'', $extra_data='')
{
$fd = "";
$start_pos = $end_pos = 0;
$url = fopen($url, "r");
while(true) {
if($end_pos > $start_pos) {
$result = substr($fd, $start_pos, $end_pos-$start_pos);
$result .= $stop;
break;
}
$data = fread($url, 8192);
if(strlen($data) == 0) break;
$fd .= $data;
if(!$start_pos) $start_pos = strpos($fd, $start);
if($start_pos) $end_pos = strpos(substr($fd, $start_pos), $stop) + $sta
rt_pos;
}
fclose($url);
$info=str_replace($str_to_replace, $str_replace, $extra_data.$result);

Page 344 of 413

return $info;
}
?>
<ul style='list-style:none;'>
<li><a href='?mod=xa-hoi'>X Hi</a></li>
<li><a href='?mod=the-gioi'>Th Gii</a></li>
<li><a href='?mod=kinh-doanh'>Kinh Doanh</a></li>
<li><a href='?mod=van-hoa'>Vn Ha</a></li>
<li><a href='?mod=the-thao'>Th Thao</a></li>
</ul>
<?
$file='http://vnexpress.net/rss/gl/xa-hoi.rss';
switch($_REQUEST['mod'])
{
case "xa-hoi":
$file='http://vnexpress.net/rss/gl/xa-hoi.rss';
break;
case "the-gioi":
$file='http://vnexpress.net/rss/gl/the-gioi.rss';
break;
case 'kinh-doanh':
$file='http://vnexpress.net/rss/gl/kinh-doanh.rss';
break;
case 'van-hoa':
$file="http://vnexpress.net/rss/gl/van-hoa.rss";
break;
case 'the-thao':
$file='http://vnexpress.net/rss/gl/the-thao.rss';
break;
default:
$file='http://vnexpress.net/rss/gl/xa-hoi.rss';
break;
}
$dom=new DOMDocument('1.0','utf-8');//tao doi tuong dom
$dom->load($file);//muon lay rss tu trang nao thi ban khai bao day
$items = $dom>getElementsByTagName("item");//lay cac element co tag name la item va
gan vao bien $items
foreach($items as $item)//lap
{
$titles=$item>getElementsByTagName('title');//lay cac element co tag name la title v
a gan vao bien $titles
$title=$titles>item(0);//lay ra gia tri dau tuien trong array $titles
$descriptions=$item->getElementsByTagName('description');
$des=$descriptions->item(0);
$links=$item->getElementsByTagName('link');
$link=$links->item(0);
$pubDates=$item->getElementsByTagName('pubDate');
$pubDate=$pubDates->item(0);
?>
<table width="800" border="1" align=center bgcolor=#e5eef2>

Page 345 of 413

<tr>
<td style="color:#FF0000; font-weight:bold; textdecoration:none"><a href="<? echo $link>nodeValue ;?>" /><? echo $title->nodeValue ?></td>
</tr>
<tr>
<td>
<?php
echo $pubDate->nodeValue;
echo $dec->nodeValue;
?>
</td>
</tr>
<tr>
<td><font face=arial size=2>
<?php
$url=$link->nodeValue;
$start="<div id=\"content\">";
$end="<div class=\"tag-parent\">";
$img_search= "/Files";
$img_show="http://vnexpress.net/Files";
$extra='<META HTTP-EQUIV="Content-Type" Content="texthtml; charset=UTF8"><link href="/Resource/Common/default.css" rel="stylesheet" type="tex
t/css">';
echo getdata($url,$start,$end,$img_search,$img_show,$extra);
?>
</font></td>
</tr>
</table>
<?
}
?>

Khng hiu sao khi lm localhost th chy ngon va upload ln host thi khng c g
^^.Bc no bit ti sao khng,Chc do host ri ln khng demo dc,chu kh to file
php chy trn localhost nha
Ai c cch ly tin no hay post ln anh em tham kho nh

Page 346 of 413

Cch dng hm ereg, preg


trong php
tr li cho cu hi v chc nng ca hm ereg, mnh nu ra mt s tnh hung:
+ Bn c mt chui d liu: $xxx, bn cn kim tra xem chui c phi l nh dng: 4
con s ng lin nhau, ri n du , ri n 2 ch s, ri n du -, ri n 2 ch s
na.
+ Bn c mt chui d liu: $xxx, bn cn tm trong chui $xxx, ch no c nh dng
l: du <, ri cc k t, ri n du >. S thay th bng ch yyy. V d: $xxx= <a>noi
dung gi do <p> noi dung tiep theo; s c bin i thnh: yyy noi dung gi do yyy noi
dung tiep theo.
R rng 2 tnh hung trn th cc hm string ca chng ta khng x l c. Bi v cc
chui chng ta cn so snh hoc cn tm l khng xc nh, ta ch bit nh dng ca n
thi.
Do php h tr cho ta 2 nhm hm l ereg_ v preg_.. x l cc tnh hung trn.
Mnh ngh bn nn dng nhm hm preg_.. thay th cho nhm hm ereg_. V:
+ ereg_ khng cn h tr cc phin bn sau (ereg_ has been DEPRECATED as of
PHP 5.3.0. Relying on this feature is highly discouraged.)
+ preg_ chy nhanh hn ereg_ (preg_.. which uses a Perl-compatible regular
expression syntax, is often a faster alternative to ereg(). )
B. Cch s dng:
+ V nhng l do trn, mnh ngh bn nn chuyn sang dng nhm hm preg_
lun.
+ Sau y l mt s hm thuc nhm preg_:
preg_match() Perform a regular expression match (so snh)
preg_replace() Perform a regular expression search and replace (tm kim v thay th)
preg_split() Split string by a regular expression (tm kim v ct b)
preg_last_error() Returns the error code of the last PCRE regex execution
preg_match_all() Perform a global regular expression match
Tip theo, mnh s bn thm cch vit cc biu thc nh dng nh th no? Tc l: nu
vit bng vn th l: 4 con s ng lin nhau, ri n du , ri n 2 ch s, ri n
du -, ri n 2 ch s na nhng vit cho php hiu th vit nh th no?
C. Mt s lu khi vit chui nh dng:
+ Dng cp du /../ bt u v kt thc chui nh dng.
<?php
if (preg_match(/php/, PHP is the web scripting language of choice.)) {
echo A match was found.;
} else {
echo A match was not found.;
}
?>
==> Kim tra xem c tn ti chui php khng? Kt qu l khng. V trong chui m

Page 347 of 413

ch c ch PHP (vit hoa) thi.


+ ch nh khng phn bit ch hoa hay ch thng ta dng k hiu i.
<?php
if (preg_match(/php/i, PHP is the web scripting language of choice.)) {
echo A match was found.;
} else {
echo A match was not found.;
}
?>
==> Kt qu l c tn ti.
+ Du ^ qui nh chui nh dng nm v tr u tin ca chui m.
<?php
if (preg_match(/^php/i, Content PHP is the web scripting language of choice.)) {
echo A match was found.;
} else {
echo A match was not found.;
}
?>
==> Kt qu l ko tm thy. V ch php khng nm v tr u tin
+ Du $ qui nh chui nh dng nm v tr cui cng ca chui m.
<?php
if (preg_match(/php$/i, PHP is the web scripting language of choice. And I choice
PHP)) {
echo A match was found.;
} else {
echo A match was not found.;
}
?>
==> Kt qu l tim thy. v c ch PHP cui chui m.
+ Du \s qui nh khang trng
<?php
if (preg_match(/php(\s)pro/i, PHP pro is the web scripting language of choice)) {
echo A match was found.;
} else {
echo A match was not found.;
}
?>
==> Tm chui php pro (c khang trng gia ch php v ch pro). Kt qu l c tn
ti
+ Du ? qui nh: khng tn ti, hoc nu tn ti th ch c 1 thi
<?php
if (preg_match(/php(\s)?pro/i, PHPpro is the web scripting language of choice. And I
choice PHP)) {
echo A match was found.;
} else {
echo A match was not found.;

Page 348 of 413

}
?>
==> Tm chui phppro hoc php pro. Kt qu l tn ti.
+ Du * qui nh: khng tn ti, hoc nu c th c th c nhiu
<?php
if (preg_match(/php(\s)*pro/i, PHP pro is the web scripting language of choice. And I
choice PHP)) {
echo A match was found.;
} else {
echo A match was not found.;
}
?>
==> Tm chui phppro hoc php pro ( gia c th c nhiu khong trng). Kt qu l
tn ti.
+ Du + qui nh: phi tn ti t 1 tr ln.
<?php
if (preg_match(/php(\s)+pro/i, PHPpro is the web scripting language of choice. And I
choice PHP)) {
echo A match was found.;
} else {
echo A match was not found.;
}
?>
==> Tm chui php pro ( gia phi c t 1 khong trng tr ln). Kt qu l khng tn
ti.
+ Cp du [] lit k
<?php
if (preg_match(/[_,]php/i, _PHP is the web scripting language of choice)) {
echo A match was found.;
} else {
echo A match was not found.;
}
?>
==> Tm chui _php hoc ,php . Kt qu l tn ti
+ A-Z, a-z , A-z qui nh mt k t vit hoa, vit thng, tt c. Phi i km vi du []
<?php
if (preg_match(/[a-z]php/i, aPHP is the web scripting language of choice)) {
echo A match was found.;
} else {
echo A match was not found.;
}
?>
==> Kt qu l tn ti
+ 0-9 qui nh mt k s
<?php
if (preg_match(/[0-9]php/i, _PHP is the web scripting language of choice)) {

Page 349 of 413

echo A match was found.;


} else {
echo A match was not found.;
}
?>
==> Kt qu ko tn ti
+ [A-z0-9]: mt k t hc mt k s
<?php
if (preg_match(/[A-z0-9]php/i, aPHP is the web scripting language of choice)) {
echo A match was found.;
} else {
echo A match was not found.;
}
?>
==> Kt qu l tn ti
+ {} qui nh s lng
<?php
if (preg_match(/[a-z]{2,5}php/i, aPHP is the web scripting language of choice)) {
echo A match was found.;
} else {
echo A match was not found.;
}
?>
==> Tm chui m c t 2 n 5 k t ri n ch php. Kt qu ko tn ti. V aPHP pha
trc ch PHP ch c mt k t

Khi dng ajax khi nhn enter s t


ng gi hm ging khi dng form
Cho cc bn, khi mnh dng ajax ( login ajax hay tm kim bng ajax ) th nt button bn
s s kin onclick vy th lm sao m khi nhn enter n s t bit gi hm v tm kim
hay login ging nh submit form ?
Chc nhiu bn bit nhng mnh vn gii thiu cho bn no cha bit.
th dng nh th ny:
Vn dng form bn h nhng gi c hm ajax :
bn vit form nh mnh thng nhng form bn ch cn onsubmit="return false;"

Page 350 of 413

HTML Code:
<form onsubmit="return false;">

nh bn thy mnh s kin onsubmit= return false


HTML Code:
<input type="image" src="images/login_button.jpg" onclick="ham();" />

vy l nhp gi tr vo textbox nhn enter ch khng cn phi click l n gi hm c


cc bn h
V d
HTML Code:
<form onsubmit="return false;">
<input type="text" id="key" /><br />
<input type="image" src="abc.jpg" onClick="tim();" />
</form>

[TUT] Add d liu t form vo


database hin th ting vit c du.
Ti nay vit ci ny hng dn bn add d liu t form vo database (phpAdmin) v hin
th c ting vit c du trong database (phpAdmin) ca mysql.
-Bc 1: To 1 database v cc table vi Collation l utf8_unicode_ci. Nu bn c sn
database th chuyn Collation ca database v utf8_unicode_ci lun nh.
y mnh ly v d database ca mnh l nhac v table l cate
.Xem hnh minh ha

-Bc 2: Trong file .php sau khi bn khai bo cu lnh kt ni n c s d liu th bn


thm cu lnh ny pha di n mysql_set_charset('utf8',$conn);
Xem code minh ha:
PHP Code:
Page 351 of 413

<?php
$conn=@mysql_connect("localhost","root","root");
@mysql_set_charset('utf8',$conn);
@mysql_select_db("nhac",$conn);
?>

-Bc 3: Gi th bn vo form add th 1 record mi


xem no. y Tn ly v d l table cate nh:

-Sau khi thm th loi thnh cng th chy vo localhost


xem th ci no

-Cn y l d liu c ly t database nhac ra bng


trn web n

Page 352 of 413

C g thc mc c comment hn !

Tn mn v ECHO
Chc cc bn chng bao gi c Document v echo u nh? Nhng hm nay mnh e
rng cc bn s phi kh bt ng, v ti sao mnh li vit bi ny, tht s th mnh cng
hi bt ng khi v tnh c phi document v n trn php.net

Chc nng: Xut ra 1 hoc nhiu chui


Cc ng dng v n
1. Xut ra 1 chui bnh thng ( Xa qu ri )
PHP Code:
echo 'Hello QHO Solution';

2. Xut ra 1 chui c xung dng ( Cng xa ri )


PHP Code:
echo 'Hello\nQHO\nSolution';

3. Xut ra 1 chui c km du nhy kp ( Ci ny nn lu v cc bn hay s dng )


PHP Code:
// Cch 1
echo 'Hello "QHO Solution"';

Page 353 of 413

// Cch 2
echo "Hello \"QHO Solution\"";
// -------------- //
R rng cch 1 hay hn cch 2 ng ko no?

4. S khc nhau gia nhy n v nhy kp


PHP Code:
$var = 'QHO Solution';
echo 'Hello $var'; // Kt qu l Hello $var
echo "Hello $var"; // Kt qu l Hello QHO Solution
// Cn 1 cch na l ni chui v bin, xa qu ri, mnh khng ni th
m nh

5. S thay th ca Multiple echo


PHP Code:
echo
echo
echo
echo

'<div>';
"<p>$a</p>";
'<input type="checkbox" name="abc" value="'.$b.'" />';
'</div>';

// on trn c rt gn li thnh
echo <<<END
<div>
<p>$a</p>
<input type="checkbox" name="abc" value="$b" />
</div>
END;
// R rng cch vit di gn hn cch trn, ng thi code HTML c t
ab vo d nhn hn

6. Echo c iu kin ( p dng IF ELSE SHORT HAND )


PHP Code:
$a = 'Solution';
echo ($a == 'Solution')?'QHO Solution':'QHONLINE';
// Kt qu l QHO Solution

---------------Trong nhng trng hp trn, mnh 'khoi' nht l ci th 5 ^^, tht bt ng khi
tnh c c thy n, 1 cht chia s cho nhng bn cha bit

Code xem th mc con .


Page 354 of 413

Hi mi ng ,mi hc c ci ny nn share cho mi ngi n :). Share ch yu mnh


nh kin thc lu hn, cn chc mi ng cng bit ht ri :D
Code xem th mc con bng php :
Hin th th mc con trc : (bn co th thay tn " phpMyAdmin " thnh tn khc)
test_1.php
PHP Code:
<table width=100% bgcolor='#cccccc'>
<?php
$size_1=GetImageSize('images/images.jpg');
var_dump($size_1);
$size_1[0]=$size_1[0]/5;
$size_1[1]=$size_1[1]/5;
$size_2=GetImageSize('images/name.jpg');
$size_2[0]=$size_2[0]/5;
$size_2[1]=$size_2[1]/5;
$dir=opendir('phpMyAdmin');
while(($file=readdir($dir))!==false)
{
$file_or_folder="phpMyAdmin/$file";
echo "<tr><td>";
if(is_dir($file_or_folder) && $file!='.' && $fil
e!='..' )
{
$target="test_2.php?name=".$file;
echo "<a href=\"".$target."\"><img src=\"images/i
mages.jpg\" width=\"".$size_1[0]."\" height=\"".$size_1[1]."\"/>$file</
a></td>";
}
if( !is_dir($file_or_folder) && $file!='.' && $
file!='..')
echo " <img src=\"images/name.jpg\" width=\"".$siz
e_2[0]."\" height=\"".$size_2[1]."\"/>$file</td>";
}
closedir($dir);
?>
</table>

test_2.php
PHP Code:
<table width=100%>
<?php
$size_1=GetImageSize('images/images.jpg');
$size_1[0]=$size_1[0]/5;
$size_1[1]=$size_1[1]/5;
$size_2=GetImageSize('images/name.jpg');
$size_2[0]=$size_2[0]/5;
$size_2[1]=$size_2[1]/5;
$name=$_GET['name'];
if(strstr($name,'phpMyAdmin')===false)
{
$file_0="folder/$name/";
$dir=opendir($file_0);
}
else

Page 355 of 413

{
$file_0="$name/";
$dir=opendir($name);
}
while(($file=readdir($dir))!==false)
{
$file_or_folder="$file_0/$file";
echo "<tr><td>";
if(is_dir($file_or_folder)

&& $file!='.'

&& $file!='..')
{
$temp=$file;
$file=$file_0."$file";
$target="test_2.php?name=".$file;
echo "<a href=\"".$target."\"><img src=\"image
s/images.jpg\" width=\"".$size_1[0]."\" height=\"".$size_1[1]."\"/>$tem
p</a></td>";
}
if(!is_dir($file_or_folder) && $file!='.' &&
$file!='..')
echo " <img src=\"images/name.jpg\" width=\"
".$size_2[0]."\" height=\"".$size_2[1]."\"/>$file</td>";
}
closedir($dir);
?>
</table>

trn dng : opendir() : m th mc, readdir() : c th mc, is_dir(): kim tra xem th
mc l folder hay file (folder return true, not : return false) .
Trong 1 folder n c ci foldername && filename l '.' vi '..' . Mnh hok bit 2 a ny
u ra nhng m chn n ngay folder th n li xut hin di dng file v ngc li nn
mnh chn 2 ci lun ( if (is_dir... && $file!='.' && $file!='..') ) .
Test 1.php :
Mnh download hnh v n to nn mnh dng hm GetImageSize() ly width ( size[0])
v height( size[1]) ri chia 5 >< .
Lu l kim tra c phi folder hay hok, mnh phi chn vo trc tn ca file or
folder tn th mc cha thnh ng dn y . Nn dng bin $file_or_folder t
tin t .
Test 2.php:
Nguyn l ca test_2 .php l n chy lp li, t test_2.php s chy tp test_2.php thng
qua phng thc $_GET . Nn mnh phi kim xem, $name y c tin t cha (
nu c ri tc l test_2.php bt u lp) . Nu cha th phi chn tin t vo ri mi
opendir().
C cu lp : ly $temp gi ni dung $file lt xut ra mn hnh .
Sau $file s dc chn tin t $file_0 vo . Ri gn $target ( ng tr link ) = $file

Page 356 of 413

Ri test_2.php lp li, lc ny $name s l $file sau $file_0 dc gn = $name thm du


'/' . Ri chy tip cho folder k tip c th i ht s cy :) .
Bn test bi ny bng cch to 1 filename.php trong www ri b folder vo www s dc :)
Cho mi ngi . C code no ngn hn th cho mnh hc hi nh :)

STRING trong PHP


[PART1]
I/String l g
Bin trong PHP c th dng lu tr v thao tc vi dng ch . Chui c cha phi
nm trong nhy n ( ) hay nhy i( ).
VD: $string = Hello world ;
$string = Hello world;
im khc nhau gia nhy n v nhy i:
Nhy n c 1 nhim v duy nht : cha nhng g bn trong n . Nhy n c th
bao gm nhy i bn trong m hok b li
Nhy i c thm 1 nhim v na : nu trong n c bin cha thng tin khc hay k
t c ngha nh \n, th t ng thay th bin bng thng tin hay lm nhim v ca \n .
Tm gi y l NI SUY . Nhy i c th bao gm nhy n v bin m hok b li
Vy, ci no lm nhiu hn th ci s chm hn. Nn ch khi cn thit chng ta mi
dng nhy i .
Lu : bin mi trng khng th ni suy c . Nh $_POST, $_GET, . Chng ta
phi dng 1 bin khc cha n ri ni suy bin va to th c .
Ni chui:
Dng ton t . ni chui
VD:
PHP Code:
$a = 'Your name is : ' ;
$b= 'Jack';
$c = $a.$b;
echo $c; //Xut Your name is : Jack .

Con tr chui : Chui c thao tc da trn con tr bn trong chui .


VD:
$a = This is a letter;
Chui trn c 16 k t tnh lun khong trng, vy v tr c th ca con tr l t 0 -> 15 .
V n i din cho k t ngay sau n . Hiu v con tr chui s d dng lm vic vi 1 s
hm ct chui hn .
II/Mt s hm quan trng ct chui hay tm trong chui:
Page 357 of 413

Trong nhiu trng hp chng ta cn ct chui . 1 s hm gip ta lm iu l :


substr(string, start, length) :
Gi k t u chui c ct ra l X , k t cui chui c ct ra l Y
Nu gi tr ca start:
Dng: X l k t th start ca chui ban u
m: X l k t cch pha phi ca chui ban u gi tr tuyt i start n v
0 : t v tr u chui
Nu gi tr ca length :
Dng : chiu di ca chui c ct
m : Y cch pha phi mt gi tr tuyt i length n v
0 : Hok ct g ht
Khng ch ra length : ct ti ht chui
VD:
PHP Code:
$a =' String to test function '; //25 k t
$b_1 = substr($a,3,6);
var_dump($b_1);
//Ct ra ring t
$b_2 = substr($a,3,-6);
var_dump($b_2);
//Ct ra ring to test fun
$b_3 = substr($a,3,0);
var_dump($b_3);
//Ct ra rng
$b_4 = substr($a,-3,6);
var_dump($b_4);
//Ct ra on
//1 s trng hp c bit:
$b_5 = substr($a, -3,-6);
var_dump($b_5);
//Ct t v tr o, kt thc v tr c <<<Ra rng
$b_6 =
substr($a,-3,6);
var_dump($b_6);
//Ct t v tr o, ct 6 k t <<< ra on v maximum ct c ch c
3 thi

strstr($string, ' string_to_search ') : tr v mt chui bt u t string_to_search u


tin trong $string nu c, false nu hok c .
VD:
PHP Code:
$string = ' This IS a test of string ';
$result = strstr($string, 'IS');
var_dump($result);
//Tr v IS a test of string

stristr(): y chang strstr() nhng hok phn bit hoa-thng


strpos(string, 'string_to_search' ,int start) : tr v V TR ca string_to_search u
tin sau v tr start (nu c s dng start ) trong $string , hay false nu
string_to_search hok c trong $string
VD:
PHP Code:
$string = ' This IS a test of string ';
$result = strpos($string, 'is', 4);

Page 358 of 413

var_dump($result);
//Tr v FALSE v hm strpos phn bit hoa thng
$result = strpos($string, 'is');
var_dump($result);
//Tr v 3

Stripos(): y chang strpos() nhng hok phn bit hoa - thng


Strrpos($string, string_to_search, int start) : tr v chui bt u t V TR ca
string_to_search cui cng (sau start nu c ) trong $string nu tm thy, false nu hok
tm thy[/PHP]
VD:
PHP Code:
$string = ' This is a test of string ';
$result = strrpos($string, 'is');
//Tr v 6 thay v 3

Strripos(string, string_to_search, int start) : ging nh strrpos() nhng hok phn


bit hoa thng
Str_replace(find,replace,string,count): tm v thay th trong chui, bin count dng
m s ln thay th . Hm ny phn bit hoa thng
Mt s lu :
1. Nu string l 1 mng: tm v thay th ca tng phn t trong mng v tr v kiu d
liu array
2. Nu find l 1 mng : tm v thay th trong $string cc gi tr trong mng find .
3. Nu find v replace cng l mng v mng replace t phn t hn mng string : tm v
thay th ln lt, phn d th tr v rng
VD:
PHP Code:
$string = 'This is a test of replacing in string' ;
$result = str_replace('is', 'IS', $string, $count);
var_dump($result);
// Tr v ThIS IS a test of replacing in string;
var_dump($count); //Tr v 2
$string_array = array('a','b','c','a', 'c');
$array_test_1 = str_replace('a', 'replaced',$string_array);
var_dump($array_test_1);
// $array_test_1 by gi l array('replaced','b','c','replaced','c');
/*(1)
*/$find_test_array = array('a','c');
$string_array = array('a','b','c','a', 'c');
$array_test_2 = str_replace($find_test_array, 'abc', $string_array);
var_dump($array_test_2);
//Code trn c ngha : tm a trong $string_ array ri thay th bng
abc, sau tm tip c trong mng tr v ri li thay th bng ab
c
// $array_test_(2) by gi l array(ababc,b,abc,ababc,abc)
$string_array = array('a','b','c','a', 'c','e');
$find_array =array ('a' ,'c','d', 'e');
$replace_array = array('r_a', 'r_c', 'r_d');
/*(2)*/
$array_test2 = str_replace($find_array, $replace_array, $st
ring_array);
// Tr v array(r_a,b,r_c, r_a, r_c, )

str_ireplace() : ging str_replace() nhng hok phn bit hoa- thng


substr_replace(string, replace , start, length) :

Page 359 of 413

Tnh cht ca start th nhu trn hm


Nu length:

Dng: di chui s b th

m : di t v tr cui cng c thay th cho n cui chui

0 : thm vo thay v thay th

V d :
PHP Code:
$string = 'This is a test of substr_replace ';
$result = substr_replace($string, 'replaced', 3,4);
var_dump($result);
//Xut Thireplaced a test of substr replace
$result = substr_replace($string, 'replaced', 3, -4);
var_dump($result);
//Xut Thireplacedace
$result = substr_replace($string, 'replaced', 3,0);
//Xut Thireplaces is a test of substr_replace
$result = substr_replace($string, 'replaced',-3,5);
//Xut This is a test of substr replareplaced

MT S QUY C: tham s trong hm c t mu tc l optional, t chn .


Mnh vit cc PART bng WORD nn du ' ' thnh << Khi copy th script hok
hiu u @@

STRING trong PHP


[PART2]
III/ Thao tc chui khi chun b x l
a/ Thao tc chui khi ly t form
Chui ly t form cn phi c x l . i khi 1 source code ca chng ta c th run
c, chy layout xut ra browser bnh thng nhng khi validate th li c rt nhiu li ,
v n nh hng nghim trng ti SEO .
VD: th <br/> m vit thnh <br> <<<< 1 li
<br/> m vit thnh <Br/> <<<< 1 li khc .

Page 360 of 413

Nhng khi xut ra browser th n u xung hng


Cn form, gi s ngi dng sau khi insert 1 cun sch c ta John s life . Sau
khi bn show ta sch ra browser th browser s vn hin th l John s life, khi
click phi chn view source bn cng s thy John s life . Nhng k t l 1 k t c
bit, n phi c m ha ra &#039; , trnh b li k trn. V th chng ta cn m
ha d liu chui ly t form .
lm iu ny chng ta cn 1 s hm nh :
htmlentities(): i 1 s lng ln cc k t thnh m
htmlspecialchars(string, quotestyle): ch i 5 k t c bit l nhy i (), nhy n
() , du b (<), du ln (>) v du & .
QUOTESTYLE c cc gi tr sau :
ENT_QUOTES: m ha c 2 nhy v
ENT_NOQUOTES: hok m ha nhy no c
ENT_COMPAT : default, ch m ha
Chuyn i sang m :
=> &quot;
=>&#039;
& =>&amp;
< =>&lt;
> =>&gt;
b/Thao tc khi chun b a vo database:
Khi chun b a vo database, chng ta cn phi ti u d liu, cng ngn cng tit kim
.
VD :
PHP Code:
$conn = mysql_connect('localhost', 'root',");
mysql_select_db('test',$conn);
$text = '
This is to TEST
';
$sql = "insert into test(test) values ('$text')";
mysql_query($sql);

Vy chng ta insert 63 k t thay v 15 ch k t . Tht l 1 s ph phm


Vy hn ch iu ny chng ta dng cc hm : trim(), ltrim(), rtrim() .
Trim(string, charlist): Hm ny c nhim v b qua cc khong trng v 1 s k t khc
t 2 pha ca string (hok c gia string nha).
Mt s k t nn nh trong charlist
\0 : NULL
\t : tab ngang
\n : xung dng
\r: carriage return
: khong trng
x0B: tab ng
Ltrim(string, charlist): ch b qua bn tri
Rtrim(string, charlist): ch b qua bn phi
Page 361 of 413

Nu khng ch ra charlist th mc nh s b qua c 5 loi trn


1 vn khc khi chuyn d liu vo database c bao gm cc k t nh () , (),
(\),(NULL) th database c th nhm ln vi cc k t iu khin (control characters) .
Control characters l nhng k t c nhim v nh kt thc, thay i, bt u 1 cu lnh
hay 1 hm no . V th database phn tch nhng k t nh l 1 k t thng
thng , chng ta cn phi thm \ .
V d
PHP Code:
$conn = mysql_connect('localhost', 'root','');
mysql_select_db('test',$conn);
$text = "
'
This is to TEST
$sql = "insert into test(test) values ('$text')";
$result = mysql_query($sql);
if( $result){
echo Insert successfully;
}
else{
echo Fail;
}
//Code trn s xut Fail v database hok hiu .

";

cho database hiu, chng ta cn phi thm \ vo trc n .


Thay thnh \ ta s c insert successfully .
lm iu ny chng ta c hm :
Addslashes(string): thm \ vo trc cc k t k trn .
Stripslashes(string): b \ trc cc k t k trn.
PHP c th t ng thm \ cho chng ta, nu PHP lm vy m chng ta cn thm \ th
s d . Vy chng ta dng hm : get_magic_quotes_gpc() test xem ch c
bt cha .
VD:
PHP Code:
if(get_magic_quotes_gpc()){
echo 'On';
}
else{
echo 'off';
}

Hoc chy sciprt ch cha :


PHP Code:
<?php
phpinfo();
?>

Ri sau search t kha magic_quotes xem off hay on ! Nu n on th mi


khi chng ta thao tc xut ra browser , phi dng stripslashes() . Cn khi insert vo

Page 362 of 413

database th hok cn addslashes na .


Khi magic_quotes_gpc() off th
Lu : Cho d addslashes hay cha addslashes th khi query t database chng
ta cng khng phi stripslashes trc khi thao tc v database t ng b \ v lu
vo CSDL .

STRING trong PHP


[PART3]
IV/ So snh chui :
so snh chui trong PHP chng ta c cc hm sau :
strcmp(string1, string2): so snh string 1 v string 2
Hm ny tr v :
>0 : nu string1 > string2
<0 : nu string1 <string2
=0: string1 bng string2
So snh theo kiu : 1 <12 <2<22 <<< quy lut trong t in
V d :
PHP Code:
$string1 ='Hello World! ';
$string2= 'Hello World! ';
var_dump(strcmp($string1,$string2));
//Xut 0

Hm identical vi strcmp() nhng hok phn bit hoa-thng l strcasecmp()


Bn cnh chng ta c hm :
strnatcmp(string1, string2): y l hm so snh 2 chui nhng theo quy lut t nhin ,
ngoi ra, n tng t strcmp()
Tc l 1 < 2<12< 22 .
Hm identical vi strnatcmp() m hok phn bit hoa-thng l : strnatcasecmp()
V/ Chuyn i chui v mt s hm ct, ni :
strtoupper(string): convert chui sang IN HOA
strtolower(string): convert chui sang vit thng .
ucfirst(string): Vit in hoa k t u tin ca chui
ucwords(string): vit in ha mi k t u tin ca tng ch trong chui
Lu : Cc hm trn tr v chui c chuyn i

Page 363 of 413

VD:
PHP Code:
$string = ' This is some text ';//chui c ucfirst sn ri
$string_lower = strtolower($string);
// this is some text
$string_upper = strtoupper($string);
// THIS IS SOME TEXT
$string_first = ucwords($string);
// This Is Some Text

array explode('string delimiter', string ,limit): ct chui ra thnh mng.


VD:
PHP Code:
$string = ' This is string that will be exploded ';
$array = explode(' ', $string);
var_dump($array);
/* Chng ta s c :
array
0 => string '' (length=0)
1 => string 'This' (length=4)
2 => string 'is' (length=2)
3 => string 'string' (length=6)
4 => string 'that' (length=4)
5 => string 'will' (length=4)
6 => string 'be' (length=2)
7 => string 'exploded' (length=8)
8 => string '' (length=0)
*/

Lu : string delimiter hok th l rng ('') c


implode(separator,array): ni chui t 1 mng v cc gi tr ni nhau bi separator
VD:
PHP Code:
$array = array('Hello', 'I', 'am', 'student');
$string = implode(' ',$array);
var_dump($string);
//Xut Hello I am student

Nu separator y rng th s rt kh nhn bi cc ch dnh lin nhau


strtok(string, split): cng l 1 hm ct chui nhng khc vi explode, strtok ct tng
khc mt . Tc l ch ct 1 ln mi khi gi.
VD:
PHP Code:
$string = ' This is some text that will be token ';
$part =strtok($string, ' ');
var_dump($part);
//Xut This
// ly tng ch :
while($part != false){
echo "$part<br/>";

Page 364 of 413

$part = strtok(' ');//Ln gi th 2 hok cn phi nu string ra na


}

STRING trong PHP


[PART4]
VI/ Mt s hm tham kho khc :
sha1(string), md5(string) : m ha chui theo thut ton tng ng
nl2br(string): chuyn \n thnh <br/> . Browser hok hiu \n nhng hiu <br/> .
VD:
PHP Code:
$string = "This is first line \n This is second line <br/> ";
//Nhy i v phi hiu \n i din cho ci g ch hok n gin l k
t .
echo $string;
//Xut 1 dng duy nht
echo nl2br($string);
//Xut 2 dng v \n dc chuyn i

number_format(number, decimals, decimalpoint, separator):


Vi :
Decimals : s ch s thp phn mun xut ra
Decimalpoint: string phn cch gia phn nguyn v phn thp phn
Separator: string phn cch gia phn trm, phn nghn, phn triu,..
VD:
PHP Code:
$number = 1000000;
$number_formated = number_format($number, 3, ',','.');
var_dump($number_formated);
// Xut 1.000.000,000

str_pad(string, length, pad_string, pad_type):


Padtype:
STR_PAD_RIGHT
STR_PAD_LEFT
STR_PAD_BOTH
VD:
$str = 'Hello WORLD';
$str_padded = str_pad($str, 20, '.');
var_Dump($str_padded);
//Xut Hello WORLD.........
Page 365 of 413

str_repeat(string, repeat): lp li string


VD:
PHP Code:
$string = 'Repeat ';
var_dump(str_repeat($string, 5));
//Xut Repeat Repeat Repeat Repeat Repeat

str_rot13(string): y cc k t trong string 13 n v trong bng ch ci


VD:
PHP Code:
$string ='abc';
var_dump(str_rot13($string));
//Xut nop <<<Vit bng ch ci ra s thy n-a = 13

str_shuffle(string): random cc k t trong chui string


VD:
PHP Code:
$string = 'abc';
var_dump(str_shuffle($string));
//Xut bca hoc abc hoc acb sau mi ln refresh

str_word_count(string, return, char): lm vic vi s t trong 1 chui


Cc gi tr c th ca return:
0: mc nh, tr v s t trong chui
1: tr v mng tun t vi cc gi tr l cc t trong chui
2: tr v mng m kha l v tr ca mi t trong chui, gi tr ca kha l t ti v tr

Char: 1 s k t nh & $ ,....


Lu : Hm ny hok cho php cc k t nh ^ % # *... v nhng con s
VD 1:
PHP Code:
$string = "Word_1 word_2 & word_3 " ;
var_dump(str_word_count($string, 0 )) ;
// Tr v 3
var_dump(str_word_count($string, 1));
/* Tr v
array
0 => string 'Word' (length=4)
1 => string 'word' (length=4)
2 => string 'word' (length=4)
*/
var_dump(str_word_count($string, 1,'_'));
/* Tr v
array
0 => string 'Word_' (length=5)
1 => string 'word_' (length=5)
2 => string 'word_' (length=5)
*/

strrev(string): o chui
VD:
PHP Code:
$string = ' ABC';
var_dump(strrev($string));
//Xut BCA

Page 366 of 413

substr_count(string, substring, start, length): m 1 chui con no xut hin trong


chui gc bao nhiu ln
Start: v tr xut pht tm kim
Length: tm kim t v tr xut pht , tm trong 1 di n v
VD:
PHP Code:
$string = ' Hello WORLD, you are my world . ';
var_dump(substr_count($string, 'world'));
//Xut 1 v hm ny phn bit hoa- thng
$string1 = ' Hello world, you are my world. ';
var_dump(substr_count($string1,'world',10));
//Xut 1 v bt u tm t v tr ch l
var_dump(substr_count($string1,'world',10,1));
//Xut 0 v bt u tm t v tr ch l v tm n ht ch d v
di ch c 1

Wordwrap(string, width, break, cut): hm gii hn s k t trn 1 dng . Tr v string


b break nu thnh cng hoc false nu tht bi
Break: ch ra k t dng break. Mc nh l \n <<Ch view source mi thy xung
dng
Cut: ch nh ct ch ra nu d (set TRUE) mc nh l FALSE .
VD:
PHP Code:
$string = ' This is some text. Its long text . ';
echo wordwrap($string,5);
//Xut bnh thng nhng khi click phi view source s thy mi dng ch
c 5 k t
echo '<br/>';
echo wordwrap($string,5,'<br/>');
//Xut mi dng 5 k t . V browser hiu <br/> . Khi thay s 5 bng 2
cng cho kq tng t v cut = FALSE
echo '<br/>';
echo wordwrap($string, 2, '<br/>',TRUE);
//Xut mi dng 2 k t, ch b ct ra .

Mng trong PHP [Part1]


I/ Mng l g ?
Trong PHP, bin l ni lu tr d liu . Nhng 1 bin ch c th lu tr 1 dng d liu v
lu tr ring l .
V d:
PHP Code:
$a =3;
$a =5;
$a =10;

Page 367 of 413

on code trn th bin $a cui cng s c gi tr l 10 . Vy chng ta cn 1 phng


thc lu tr khc thun tin hn, d qun l hn . V mng ra i p ng iu
Hnh dung mng l 1 ci t, trong ci t c nhiu ngn ko, mi ngn ko c nh
du bi 1 con s hoc 1 dng ch . Vy ly mn trong 1 ci ngn ko , th tt nhin
chng ta cn 1 con s ng vi ci ngn ko y .

II/Khi to mng
khi to mng chng ta dng t kha array
Trong PHP c 3 cch khi to mng nh sau :
1/ Khi to 1 mng rng, sau mi set gi tr
2/ Khi to 1 mng vi 1 s gi tr ban u, sau thm gi tr mi vo
3/ Khi to mng v set full gi tr cho mng .

III/Phn loi mng


Mng c chia thnh 3 loi chnh :

Mng tun t

Mng khng tun t

Mng a chiu

1/ Mng tun t
Mng tun t l mng m cc kha ca n c nh theo s . V tr u tin ca mng
lun l 0
V d : $array_name = array('a', 'b', 'c', 'd');
trn, ly gi tr 'a' , ta dng c php : $array_name[0];
Tng t, ly gi tr 'b', 'c', 'd' : $array_name[1], $array_name[2], $array_name[3]
a/ Khi to mng tun t:
i/ To mng rng ri thm gi tr
$array = array();
$array[] = a;
$array[] = b ;
ii/ To mng sau thm gi tr mi vo
$array = array(a);
$array[] = array(b);
iii/ To mng full gi tr
$array = array(a,b);
Lu : Nu mun khi u mng hok phi l 0 m l 1 chng ta lm nh sau :
$array = array('1'=>'a', 'b', 'c' );

Page 368 of 413

b/ Duyt mng tun t


Chng ta s dng 1 s hm sau duyt mng tun t :
foreach(), for()
FOR: Gi s chng ta bit mng $array_name c $count phn t
for($i = 0; $i <$count ; $i++){
//vit code thao tc vi phn t mng y
}
Gii thch:
Hm for dng duyt tng phn t ca mng, dng cch ny chng ta phi bit
mng ny c bao nhiu phn t . For s c nhim v lp qua tng phn t mt, bt u t
v tr s 0 cho n $count - 1.
V d :
PHP Code:
for($i = 0; $i < $count; $i++){
echo "Gi tr ca phn t $i l :

$array_name[$i] <

br/>";
}
// Code xut tng gi tr ca mng

FOREACH
foreach($array_name as $value){
// Vit code thao tc vi phn t mng y
}
Gii thch :
Hm foreach cng duyt tng phn t ca mng, vi mi phn t n i qua, n s gn gi
tr ca phn t cho bin $value .
V d :
PHP Code:
$i = 0;
foreach($array_name as $value){
$i++; //Tng ln 1 mi khi foreach duyt qua 1 phn
t
echo "Gi tr ca phn t $i l :

$value <br/>";

}
// Code xut tng gi tr ca mng

2/ Mng khng tun t


Mng khng tun t l mng m cc kha ca n c nh theo ch . Hnh dung 1 ngn
t, m cc ngn ko ca n khng phi l con s na m l nhng t ng c ngha .
V d : ngn ko tn 'Giy' cha giy , ngn ko tn 'qun o' cha qun o.
=> R rng truy cp nhng vt bn trong cc ngn ko ny s d hn cc ngn ko
nh s th t !
a/ Khi to mng khng tun t :

$array_ktt = array('a' => 'a_123','b'=>'b_123');

b/ Duyt mng khng tun t :


Chng ta dng cc hm nh : list(), each(), while(), foreach() duyt mng khng tun
t
FOREACH():
Page 369 of 413

PHP Code:
foreach($array_ktt as $value){
echo " $value | ";
}
//Code trn dng thao tc ch vi cc GI TR ca mng khng tun t
foreach($array_ktt as $key=>$value){
echo " $key => $value | ";
}
//Code trn dng thao tc vi c GI TR v KHA ca mng khng tun
t

WHILE :
while(list($key,$value) as each($array_ktt)){
//Code y
}
Code trn c ngha: vi mi gi tr m while duyt qua, kha v gi tr ca $array_ktt ln
lt c gn vo $key v $value .
while($element as each($array_ktt)){
//Code y
}
Code trn c ngha: vi mi gi tr m while duyt qua, phn t ca $array_ktt ln lt
c gn $element . $element y ng vai tr nh l 1 ci mng khng tun t lu
$key v $value ca mi $array_ktt m while duyt qua .
V d :
PHP Code:
while($element as each($array_ktt)){
echo $element['key'];
echo ' - ';
echo $element['value'];
echo '<br/>';
}
//Code trn c ngha: vi mi gi tr m while duyt qua, phn t ca $
array_ktt ln lt c gn $element . $element y ng vai tr nh
l 1 ci mng khng tun t lu kha v gi tr ca mi $array_ktt m
while duyt qua .

3/ Mng a chiu
Hnh dung 1 ci t to c cc ngn ko, trong 1 s ngn ko li chia thnh 2-3 ci ngn
ko nh khc . Hay cng c th ni l : trong ngn ko c 1 chic t nh khc
V d:
$multi_array_tt = array('a', 'b', array('c','d'),'e');
$multi_array_ktt = array('a'=>'a_123', 'b'=>'b_123',
'small_array'=>array('c'=>'c_123','d'=>'d_123'),'e '=>'e_123');
Vy truy cp vo ngn ko ci t nh y, ta phi: Truy cp vo ngn ko ca t ln
cha t nh, sau truy cp vo ngn ko ca t nh .
echo " $multi_array_tt[2][0] "; //Xut ra 'c'
// Truy cp vo mng l phn t th 3 ca mng $multi_array_tt, sau ly phn t th 1
ca mng y ra .

Page 370 of 413

echo " $multi_array_ktt['small_array']['c'] "; //Xut ra 'c_123'


// Truy cp vo mng l phn t c kha 'small_array' ca mng $multi_array_ktt, sau
ly phn t c kha 'c' ca mng y ra .
Duyt mng a chiu: (ch dng cho mng tun t)
PHP Code:
$multi_array_test=

array( array('a', 'b', 'c'),


array('a1','b1',

'c1'),
array('a2', 'b2'
, 'c2') );
// Bn hnh dung mng $multi_array_test nh trn l 1 table c 3 ct v
3 dng
for($row = 0; $row <3; $row++){
for($column =0; $column < 3; $column++){
echo '|'.$multi_array_test[$row][$column];
}
echo '<br/>';
}

IV/ Con tr mng :


Mng c thao tc da trn v tr con tr ca mng, khi mng va c to ra,
con tr nm v tr u tin . Khi thm gi tr mi vo mng th con tr vn hok di
chuyn . di chuyn hay thao tc con tr chng ta dng 1 s hm nh prev(),
next(), end(), reset(), each(), current() . Chng ta s tm hiu thm phn II .

Mng trong PHP [Part2]


IV/ Mt s hm cn nh trong mng:
$array1 = array('b','a','c');
$array2 = array('1','3','6');
$array3 = array('b'=>'d_123', 'a'=>'f_123' , 'c'=>'e_123');
Cc hm thng dng nht :
sort($name_of_array, SORT_...): sp xp li cc phn t trong mng ( theo bng ch
ci hoc theo s ). Lut : 1<11<12<2<21.
Cc gi tr c th ca tham bin th 2:
SORT_REGULAR
SORT_STRING
SORT_NUMERIC
VD:
sort($array1)
=>$array1 by gi l array('a','b','c')

Page 371 of 413

Lu : hm ny sp xp theo th t A<Z<a<z .
Sort theo quy lut t nhin : tc l 1<2<3<20....
natsort($array) : phn bit ch hoa v ch thng
natcasesort($array) : hok phn bit ch hoa v ch thng
VD:
PHP Code:
$array = array('a1','a2','a11','a22', 'A24');
sort($array);
var_dump($array);
natsort($array);
var_dump($array);
natcasesort($array);
var_dump($array);
/* Nhn c kt qu sau :
array
0 => string 'A24' (length=3)
1 => string 'a1' (length=2)
2 => string 'a11' (length=3)
3 => string 'a2' (length=2)
4 => string 'a22' (length=3)
array
0 => string 'A24' (length=3)
1 => string 'a1' (length=2)
3 => string 'a2' (length=2)
2 => string 'a11' (length=3)
4 => string 'a22' (length=3)
array
1 => string 'a1' (length=2)
3 => string 'a2' (length=2)
2 => string 'a11' (length=3)
4 => string 'a22' (length=3)
0 => string 'A24' (length=3)
/*

ksort($array): sp xp theo kha ca cc phn t trong mng tng dn


VD:
ksort($array3)
=>$array3 by gi l array('a'=>'f_123', 'b'=>'d_123', 'c'=>'e_123')
Asort($array): sp xp theo gi tr ca cc phn t trong mng tang dn
VD:
asort($array3)
=>$array3 by gi l array(b=>d_123, a=>f_123, c=>e_123)
i lp vi ksort($array) l krsort() : sp xp theo kha vi cc phn t trong mng
gim dn
asort($array) l arsort() : sp xp theo gi tr vi cc phn t trong mng gim dn
shuffle($array): thay i v tr cc phn t mng 1 cch random
VD:
shuffle($array1)
=> $array1 by gi c th l array(a, b, c) hay array(c, b, a ) , v.v
Array_reverse($array1) : tr v mng o ngc
VD:
$array1_reverse = array_reserver($array1)

Page 372 of 413

=>$array1_reverse gi l array(c,a,b)
Nh ni phn 1 , nhiu khi chng ta phi thay i v tr con tr mng thao tc
theo mun . lm iu ta dng cc hm :
Prev() : li con tr 1 phn t
next(): tin con tr 1 phn t,
reset(): reset con tr v v tr 0
end(): a con tr n v tr cui
Lu : Cc hm trn u tr v gi tr ca ni m con tr ang ng
current() : xut gi tr ca v tr hin ti ca con tr
each() : tr v key v gi tr ca v tr con tr ang ng, sau tin con tr ln 1 phn t
.
Hm m phn t mng :
Count($array)
Array_count_values($array): Hm ny m s ln xut hin ca 1 gi tr trong mng .
Tr v kiu d liu mng
Vd :
PHP Code:
<?php
$array = array('a','b','c','d','a','c');
echo current($array); // Xut 'a' do khi mi to, con tr nm v
tr u
echo next($array); // Xut 'b'
echo '<br/>';
$value = end($array); //Chuyn con tr v cui( trc 'c')
while($value){
echo " $value ";
$value = prev ($array); //Sau mi ln lp, li con tr 1 phn t

}
echo '<br/>';
echo reset($array); //a con tr v v tr u
$each = each($array); //Ly gi tr v kha ca v tr u, tr v
kiu d liu mng
var_dump($each);
var_dump(array_count_values($array));// Tr v kiu d liu mng .
?>

V di y l 2 hm kh quan trong trong thao tc mng


Explode (string delimiter, 'string input', limit) : Ct chui da vo k t ch nh
trc, limit gii hn s phn t ca mng tr v
Extract($array, extract_type, prefix) : To bin vi tn l kha ca mng v bin c
gi tr l gi tr ca kha . Prefix co th dch l tin t
C 7 loi extract :

EXTR_OVERWRITE: mc nh . Nu kha ca mng trng vi tn bin trong


script th ghi

Page 373 of 413

EXTR_SKIP : Nu kha ca mng trng vi tn bin trong script th b qua


kha .

EXTR_PREFIX_SAME : nu kha ca mng trng vi 1 kha khc th thm


tin t vo kha . Vi loi ny phi ch ra prefix tham s th 3

EXTR_PREFIX_ALL: Thm tin t vo mi kha. Vi loi ny phi ch ra


prefix tham s th 3

EXTR_PREFIX_IF_EXISTS: Nu kha ca mng trng vi tn bin ca script


th thm tin t vo kha . Vi loi ny phi ch ra prefix tham s th 3

EXTR_PREFIX_INVALID: Nu kha ca mng vi phm qui tc t bin th


thm tin t vo kha . Vi loi ny phi ch ra prefix tham s th 3

EXTR_REFS: bin c to ra s tham chiu n kha ca mng , mi thay i


trn bin s nh hng n gi tr m kha i din trong mng

V d :
PHP Code:
$array = array('a'=>'a_123','a'=>'b_123','c'=>'c_123' , '1'=>
'INVALID');
$array_1= array('a'=>'a_123', 'd'=>'d_123', 'e'=>'e_123');
$a = 4;
(1)extract($array,EXTR_PREFIX_SAME,'abc');
//To bin $a = 'a_123' v $abc_a = 'b_123'
var_dump($a);
var_dump($abc_a);
(2)extract($array,EXTR_PREFIX_ALL,'abc');
//To bin $abc_a = 'b_123' ( b ghi )v $abc_c = 'c_123'
var_dump($abc_a);
var_dump($abc_c);
(3)extract($array_1,EXTR_PREFIX_IF_EXISTS,'ade');
//To bin $ade_a = 'a_123' v $d = 'd_123' v $e= 'e_123'
var_dump($ade_a);
var_dump($d);
var_dump($e);
(4)extract($array,EXTR_PREFIX_INVALID,'abc');
//To bin $abc_12 = 'INVALID' v $a= 'b_123' ( b ghi ) , $c = '
c_123'
var_dump($a);
var_dump($abc_12);
var_dump($c);
(5) extract($array,EXTR_REFS);
//To bin $a = 'b_123' v $c = 'c_123'
var_dump($c) ; //Xut c_123
$c =5;
var_dump($array['c']) // Xut ra 5 => Thay i gi tr trong
mng

Page 374 of 413

Khi th code th lm 1 trong 5 code trn thi nh !

Cho 1 mng : $array_test_tt = array('a', 'b', 'c');


$array_test_ktt = array('a'=>'a_123', 'b'=>'b_123', 'c'=>'c_123');
bool array_key_exists('key_to_search',$name_of_array); : tm 1 kha c torng mng hay
khng
//Bool l kiu data tr v true hay false
VD: array_key_exists('0',$array_test_tt); Tr v TRUE
array_key_exists('a',$array_test_ktt); Tr v TRUE
array_key_exists('d',$array_test_ktt); Tr v FALSE
tm 1 gi tr trong mng :
Bool in_array($array, value).
VD : in_array($array_test_tt,'d') //tr v FALSE
in_array($array_test_tt,'a') // Tr v TRUE
mixed array_search('value_to_search',$name_of_array);
// Mixed l hok phi l 1 kiu d liu, mnh l n c th tr v string khi l mng hok
tun t v tr v s khi l mng tun t
VD: array_search('a', $array_test_tt); //Tr v 0
array_search('a_123', $array_test_ktt); Tr v 'a'
string array_pop($name_of_array);
// Hm ny ly d liu cui cng ra khi mng
VD: array_pop($array_test_tt); //Tr v 'c' v mng $array_test_tt ch cn li 'a' v 'b'
array_pop($array_test_ktt); //Tr v 'c_123' v mng $array_test_ktt ch cn li 'a123' v
'b123'

Cc hm di y ch nn dng cho mng tun t


int array_push($name_of_array,'value_to_push');
// Hm ny thm 1 phn t vo cui mng v tr v tng s phn t ca mng sau khi
thm
VD: array_push($array_test_tt, 'd'); // Tr v s 4 v mng $array_test_tt lc ny c thm
phn t th 3 l 'd'
string array_shift($name_of_array)
// Hm ny ly 1 phn t U mng ra khi mng
VD: array_shift($array_test_tt); //Tr v ch 'a' . V kha ca mng ln lt l 0 ng vi
'b' , 1 ng vi 'c'
int array_unshift($name_of_array,'value_to_unshift')

Page 375 of 413

// Hm ny thm 1 phn t vo U mng v tr v tng phn t trong mng


VD: array_unshift($array_test_tt,'d'); //Tr v s 4 . V kha ca mng ln lt l 0 ng
vi 'd' , 1 ng vi 'a', 2 ng vi 'b', v 3 ng vi 'c'
int array_rand($name_of_array)
// Hm ny random tr v 1 kha trong mng .
VD: array_rand($array_test_tt) // C th tr v 0 hay 1 hay 2

Hng dn code trang news


c bn
Lc trc, khi mnh t hc PHP, cha ng k Vit chuyn, c sch, ln mng xem
tutorial, dnh tg hu nh c ngy cho PHP nhng nhng kin thc mnh c c u
ri rc . Nh mng, string, file, kt ni database , v.v . Vy xy dng 1 trang web
n gin th lm th no ? Cn nhng kin thc g ? Database phi ra lm sao ? Quy
trnh nh th no ? V mnh khng hnh dung c g c, hok tr li c g c ln
mng download project v th nh sm nh bn tai, cc d n vit bng AJAX v
JQUERY, CSS v.v khin bn thn nhng ng mi hc rt d b hoang mang, v mt t
tin . Thc ra mnh ch mun lm 1 trang web n gin , dng PHP v MySQL thm t
CSS hiu c mnh hc c g v mun p dng kin thc hc c vo bi
tp c th . Bi vy, lc coi project ca cc bn khc nhiu lc mnh mun b PHP
lun, cho n khi mnh bit c trung tm Vit Chuyn , v by gi th rt an tm vi
s dn dt ca thy Huy th sc tru ca chng ta b ra mi xng ng @@ .
Vy gip nhng bn t hc PHP, c l cng ang search google tm cch thc lm 1
trang news n gin nh mnh tng lm , mnh vit bi hng dn s b ny .

Code trang tin tc c bn


Page 376 of 413

A.1 s tnh nng c bn ca trang news :


Trang admin : ng nhp, ng xut, cho php thm category, xa category, thm tin
tc, xa tin tc , list categories v list tin tc , thm ngi dng, xa ngi dng, list
ngi dng . Bn cnh cho php sa category, sa news post , sa level ca ngi
dng .
Vy folder admin c cc file:
Index.php <<< layout trang admin
Login.php
Logout.php
add_cate.php,
add_news.php
add_user.php
list_cate.php
list_news.php
list_users.php
edit_cate.php
edit_news.php
edit_user.php
delete_cate.php
delete_news.php
delete_user.php
Trang layout : index.php ngoi ngang cp vi folder admin (khc vi index.php
trang admin) d liu t database ra browser . Trang ny ty mi ngi .....v l cng
on n gin trong ng dng .
B. Hng dn:
Kin thc cn bit khi vit ng dng ny
Form HTML, PHP c bn( mng, string, bin, mysql, thao tc vi mysql bng PHP),
PHP SESSION, PHP UPLOAD , SQL c bn: select, delete, insert, update . Hiu cch
ly d liu qua GET v POST . Bit cch to layout ca 1 trang web n gin bng
require_once header, footer, body ,V nu c thm 1 t CSS, hiu code phn trang th
tt
Database thit k nh th no ?
V l ng dng n gin nn database cng n gin :
Database news , c cc table l :
User(user_id, user_name, user_password,user_level)
News(news_id, news_category, news_,title,news_author, news_info, news_full,
news_check, news_image, news_uid, news_cid)
Categories(category_id, category_name)
trn gi l 1 schema ca database, n tm tt cc table v cc ct c trong database, v
mnh vit ch l kha chnh, gch di l kha ngoi .

Page 377 of 413

Ti sao trn co news_author, news_category m cn cn news_id, news_cid ? V


news_author v news_category l nhng field c th thay i c, nh hnay bn vit tin
vi k danh l 'ABC' ngy mai bn ly k danh khc l 'BCD' vy thng k s tin bn
vit lm bng cch no ? news_id gip chng ta gii quyt diu v d bn ly k danh
no th news_id ch c 1 m thi . Tng t vi news_cid
Gii thch: user c nhiu loi, chng ta phi c trng user_level xc nh xem l
admin, hay l user bnh thng ? Nu ch c 2 level th set level admin l 2, user bt l 1 .
V ch c level bng 2 th mi cho truy cp vo vng admin .
Ct news_check trong table news l check xem news c hp l khng, u phi tin
no cng c post ln ?
Ct news_image thng l optional ty theo mun ngi dng c mun dng nh i
din hay khng
Quy trnh :
Nu l user bnh thng th ch c xem trang ch, nu l admin th cho php vo trang
giao din admin, ti y c 1 menu ti cc trang add, list, v.v . Ti cc trang list, cho
php admin sa, xa . Nu khng phi admin m ng nhp th v li trang ng nhp
.
Mt s iu cn lu khi vit code :
Index.php: Trang admin ny ch cn show ra cc ng link ti ch xa, sa, v.v .
Hok cn cu k v ch c admin mi thy c, trang layout cho user xem th mi cn
CSS phc tp cho p . Ty bn layout trang index.php ny, c th l 1 table chng
hn .
Cc trang x l form ( add_ ) :

Nh l kim tra ngi dng c nhp y thng tin hay khng . Lu l


trong PHP chng ta phi to bin trc khi dng . V d, ch khi tn ti bin $user
v $pass th mi tin hnh kim tra trong database v nu c th cho ng nhp.

Tc l code:
PHP Code:
if($_POST['user'] !=NULL){
$user = $_POST['user'];
}
else
echo 'Ban chua nhap ten ';
if($_POST['pasword'] !=NULL){
$pass = $_POST['password'];
}
else
echo 'Ban chua nhap password ';
if($user && $pass ) { }

Nhng nu ngi dng b trng 1 trong 2 field trn ri bm submit th $_POST[user]


v $_POST[pass] l NULL v chng ta khng tin hnh gn bin $user v $pass <<<

Page 378 of 413

tc l 2 bin ny cha tn ti . V th dng if() ngay sau s b li . V th chng ta cn


phi set gi tr NULL ban u cho 2 bin :
PHP Code:
$user=$pass='';
if($_POST['user'] !=NULL){
$user = $_POST['user'];
}
else
echo 'Ban chua nhap ten ';
if($_POST['pasword'] !=NULL){
$pass = $_POST['password'];
}
else
echo 'Ban chua nhap password ';
if($user && $pass ) { }

Cc bn nn vit form v cch x l form trn cng 1 trang. V d form


add_cate ti add_cate.php s c action cng l add_cate.php . phn trn ca
form bn kim tra xem ngi dng nhn submit np thng tin cha, hay ch l
ang cn in vo form ?

Ta dng code :
PHP Code:
if(isset($_POST['ok'])){
// ok l tn trng submit <input type = submit value = login
name = ok />
//X l form y
}

Ti trang login: nu ngi dng login c v chng ta xc nhn c


l admin, th cp session cho admin

C th l :
PHP Code:
$_SESSION['username'] = $username ( bin $username ny ly t form )
$_SESSION['level'] = $level
$_SESSION['u_id'] = $user_id
//C 2 $level v $user_id chng ta phi ly t database v .
//S d to 3 ci $_SESSION nh th v sau ny trong script khc chng
ta cn bit l ai ang truy cp, u_id l g ?

Ti tt c cc file trong trang admin tr login , bn phi kim tra xem ngi
dng c phi l admin khng ? Nu phi th cho truy cp, khng phi th v
trang login.php .
Vy chng ta c 1 code dng rt nhiu trong phn admin l:

PHP Code:
if($_SESSION['level'] != '2'){
header('localtion: login.php');

Page 379 of 413

exit();
}

1 code khc cng dng kh nhiu l : connect database


PHP Code:
$conn = mysql_connect('localhost', 'root','');
mysql_select_db('news',$conn);

Vy 2 code trn em b vo 2 file, b 2 file vo folder includes ri sau ny dng


require_once() dng li .

1 s lu vi cc file edit:

d liu c sn t database ra form ri cho php ngi dng sa i . V d : tn


news lc post ln l NEWS. Th khi nhn vo edit phi xut ra ch NEWS news_title
ch hok c b trng .
Vi file edit v add , chng ta c th dng b son tho ngi dng c th son tho
tin tc nh trong word . Chng ta download file ckeditor.rar bn di, gii nn ra ri b
th mc ckeditor vo ngang cp vi cc file edit_ , add_ .
Sau , chng ta include ckeditor vo bng cch :
PHP Code:
<script type="text/javascript" src="ckeditor/ckeditor.js"></script>
//t trn <form > nh

Nu mun phn no c b son tho th chn vo sau phn


PHP Code:
<script type="text/javascript">
CKEDITOR.replace( 'name_of_field' );
</script>

VD:
....
PHP Code:
<tr>
<td>Full</td>
<td><textarea name='txtfull' cols='40' rows='15'><?php echo $da
ta2['news_full'];?></textarea></td>
</tr>
<script type="text/javascript">
CKEDITOR.replace( txtfull );
</script>

....
=> Full s c b son tho cho ngi dng
DOWNLOAD CKEDITOR: http://www.mediafire.com/?ah85w2j03ddjdm6

Page 380 of 413

HNG DN CODE
TRANG BN SCH
Tip theo mnh xin hng dn cc bn hnh dung cch code 1 trang bn sch .
A. M t ng dng bn sch
Nu l khch ( hok ng nhp ) th s c :
Chn chuyn mc sch, khi click vo chuyn mc th lit k cc sch c trong chuyn
mc . Khi click vo sch no th lit k thng tin ca sch gm tc gi , ISBN, ngy xut
bn, gi tin , v.v . Ti y cho php ngi dng thm sch vo gi hng . Sau khi thm
vo gi hng c th to nhiu option cho ngi dng la chn , hoc l thanh ton -> cho
ngi dng nhp thng tin ship sch , hoc l tip tc mua sch .
Bc thanh ton c 2 giai on :
1/ Nhp thng tin khch hng, a ch thanh ton, a ch ship sch, v.v . ng dng nh,
chng ta a ch khch hng l ni ship sch lun cho tin
2/ Chn phng thc thanh ton, in m th ( v nh th CREDIT CARD, VISA
CARD, v.v..)
Vy, nu ngi dng click thanh ton, v sau hok thanh ton tip bc 2 m chn tip
tc mua sch -> thm vo gi hng-> thanh ton <<<< Khng yu cu ngi dng nhp
thng tin giai on 1 na
Ti trang hin th gi hng : cho php ngi dng thay i s lng sch, v click nt
Save cp nht, nu ngi dng nhp 0 th sch s c b .
1 s lu :
Khi ngi dng ang xem list sch trong chuyn mc A th nn c ng link dn khch
qua trang list chuyn mc ng dng xem list sch ca chuyn mc khc .
Ti trang xut thng tin sch c th, th nn c 1 ng link dn khch qua trang list sch
ca chuyn mc cha sch hin ti .
Gi : Ti 2 trang trn u c 1 nt : Continue Shopping nhng chc nng khc nhau
.
Nu ng nhp di quyn user : ch khc khch ch bc thanh ton hok c giai
on 1 .
// C th b hn user, ch admin v khch thoi cng c
Nu ng nhp di quyn admin :

Page 381 of 413

Dn admin ti trang menu list 1 s quyn ca admin l :


n trang chnh mua bn sch( << mc ch sa v xa sch hay chuyn mc c sn )
Thm chuyn mc
Thm sch
List cc users v level
Ti mi trang phi cho php admin log out
Ti cc trang list chuyn mc hay sch cho php admin sa, xa, thm, v.v
B. HNG DN
Kin thc cn bit :
lm c ng dng ny mnh ngh cc bn cn chun b :

PHP c bn, hiu r mng, hiu r GET POST trong form HTML
PHP SESSION
Database MySQL select, delete, insert, update, v.v c bn
SQL c bn
Bit cch layout ghp header, footer, body

Quy trnh :
Chng ta cn cc file sau :
(0) login.php : ng nhp
(1)Index.php : list cc chuyn mc
(2)List_books.php : list cc sch trong chuyn mc
(3)Book_info.php : xut thng tin sch
(4) Show_cart.php: hin th gi hng
(5) check_out.php : hin th form ngi dng nhp thng tin .
(6) purchase.php : x l d liu nhn t ngi dng ( t giai on 1)
(7) process.php: x l d liu nhn t ngi dng ( t giai on 2 )
(8) logout.php : ng xut
Folder admin :
Ad(0) admin.php : list cc quyn ca admin
Ad(1) delete_cate.php : xa chuyn mc
Ad(2) delete_book.php: xa sch
Ad(3) edit_cate.php : sa chuyn mc
Ad(4) edit_book.php: sa sch
Ad(5) insert_cate.php: thm chuyn mc
Ad(6) insert_book.php : thm sch
Ad(7) list_users.php : list cc user v level
Ad(8) edit_user.php : chnh sa
Ad(9) delete_user.php : xa user

Page 382 of 413

Nu l khch (hok log in m vo thng (1) ) :


(1) ->(2) -> (3)
Nu ti bc (3) , khch ng , thm vo gi : (3) -> (4)
Nu ti bc (3), khch hok mun mua, click continue : (3) ->(2)
Nu l user : dn user i nh khch nhng b thanh ton giai on 1 .
Nu l admin : ( log in (0))
(0) -> Ad(0) [ Ad(5), Ad(6), (1) , Ad(7) ] .
[ ] <<< ngha l Ad(0) c th dn ti cc trang trong .
Lu : Nu admin chn (1) th i y nh khch, nhng ti mi trang phi c ng dn
logout hay sa, xa chuyn mc /sch . Cc trng hp khc c l cc bn cng c th
hiu cch dn admin i nh th no !!
Mt s iu lu khi dn ng cho admin:

Ti cc trang lien quan n admin, lun c s kim tra xem ngi ang truy cp
c phi admin hay khng v lun c link dn admin v li Ad(0)

Ti cc trang list lun c link dn admin i sa/ xa


VD: Admin ang coi sch A, th c link i sa/xa sch A.

Database thit k nh th no ?
To DATABASE books vi cc table sau:
USER(user_id, username, password, level )
BOOKS(isbn, author, title, cate_id, price, description )
CAGORIES ( cate_id, cate_name)
CUSTOMERS( cus_id, cus_name, cus_address, cus_city, cus_state, cus_zip,
cus_country)
ORDERS( order_id, cus_id, amount , date , confirm )
ORDER_ITEMS (order_id, order_items, item_price, quantity)
Gii thch :

order_id ORDER_ITEMS khng phi l kha chnh v gi s nh bn mua 5


cun sch ging nhau, tin ti thanh ton giai on 1, th hok l mi dng trong
database s lu 1 cun sch ? ( 1,2,3,4,5)
Thay vo , order_id y s l 1 s (1) , quantity l 5 .
Hoc nu bn mua 3 cun A 2 cun B , th order_id s l (X y l id , 1 con s)
:
X, Sch A, 1$, 3
X, Sch B, 2$, 2
Vy s d lm vic hn vi bng ORDERS v lc ny ch cn 1 dng lu id X

Level c th c 2 cp . 1 l user , 2 l admin .

Page 383 of 413

Mt s iu quan trong :
1/ Code kim tra c phi l admin hay khng v code kt ni database c s dng rt
nhiu nn vo 2 file b vo th mc includes sau ny dng require_once() xi li .
2/ Nu l user => n cc tnh nng nh xa, sa ,v.v . V th trong mi script (1)->(3)
chng ta phi kim tra, nu l admin th hin, hok l admin th n .
3/ Nu l admin th ng cho admin mua hng ^^ .
4/ Khi xc nhn 1 ng l user ( c th l admin ), cp cho ng 1 phin lm vic gm
username, level v u_id .
1 s gi :
Hin th gi hng : gi s ng mua add sch A vo gi, kim tra xem c tn ti sch A
trong gi hok, nu c th tng ln 1 , nu hok th thm sch A vo .
Code :
PHP Code:
if(!isset($_SESSION['cart']){
$_SESSION['cart'] = array();
// Nu ngi dng cha mua hng, to 1 session l 1 mng
// Mng ny ch cha
(isbn) => (quantity)
}
if(isset($_SESSION['cart'][$isbn])){
$_SESSION['cart'][$isbn] ++;
// Nu tn ti sch A, th tang ln 1
}
else
$_SESSION['cart'][$isbn] = 1;
//Ngc li thm vo sch A
}
// Code hin th gi hng y

1 loi script c th dng chung cho c edit va add:


V d :
Mnh mun edit user hay add user :
Edit_&_add.php
PHP Code:
<?php
function edit_&_add($user='')
{
$edit = is_array($user);
//Khi sa th chng ta cn truyn 1 mng nhn c t $result = mysql_f
etch_assoc($query)
//vo, v khi y mi c y thng tin xut ra form .
//Nu $edit l true th form ny dng sa
// Nu $edit l false th form ny dng add
?>
<form action = <?php echo $edit ? 'edit_user.php' : 'add_user.p
hp' ; ?> method = 'post' >
<table>

Page 384 of 413

<tr><td>Username: </td>
<td><input type= 'text' name = 'username' value= "<?php echo $e
dit ? $user['username'] : '' ;?> " /></td>
</tr>
<tr>
<td>Password: </td>
<td><input type= 'password' name = 'password' /></td>
</tr>
</table>
</form>

trn mnh hng dn s b quy trnh 1 trang bn sch n gin . Nu cc bn


cm thy phc tp, th c th b 1 vi tnh nng m mnh nu trn, b 1 vi file, v.v .
Quan trng l hiu c n run nh th no, cn code th mnh ngh hok kh lm
u .
Cc bn c gng lm nh ;) .

Hng dn chi tit code trang


bn sch
I/ To database :
Bn to database tn l books ( hoc tn bn mun) ri to cc table sau:
create table customers
(
customerid int unsigned not null auto_increment primary key,
name char(60) not null,
address char(80) not null,
city char(30) not null,
state char(20),
zip char(10),
country char(20) not null
);
Gii thch v 1 s lu :
Unsigned phi ng trc not null
Unsigned : hok c m
Not null : hok c b trng
Page 385 of 413

Char(x): kiu d liu text ti a x k t


Auto_increment : t ng tng
create table orders
(
orderid int unsigned not null auto_increment primary key,
customerid int unsigned not null,
amount float(6,2),
date date not null,
confirm char(1) not null
);
Gii thch :
Int : d liu s
Float(6,2) : phn nguyn ti a l 6 ch s, phn thp phn ti a 2 ch s
Date: kiu d liu ngy thng
create table books
(
isbn char(13) not null primary key,
author char(80),
title char(255),
cate_id int unsigned,
price float(4,2) not null,
description longtext
);
Gii thch :
Isbn l c trng ca 1 cun sch, n lun khc nhau nn ta hok cn ct
book_id m ch nh lun isbn l primary key
Longtext : kiu d liu text dung lng ln
create table categories
(
ca_tid int unsigned not null auto_increment primary key,
cate_name char(60) not null
);
create table order_items
(
orderid int unsigned not null,
Page 386 of 413

isbn char(13) not null,


item_price float(4,2) not null,
quantity tinyint unsigned not null,
primary key (orderid, isbn)
);
create table user
(
user_id int unsigned not null auto_increment primary key,
username char(16) not null,
password char(40) not null,
level tinyint unsigned not null
);
Gii thch:
Tinyint : kiu d liu s dung lng nh
LU : Cc bn bm Ctr+S save file php ting vit, ri hin ra ci bng,
nhn No, ri chn save has utf-8 nh ;)
II/ Xy dng trang login
u tin chng ta xy dng trang qun tr vi cc chc nng c c lit k bi
post trc . To folder admin vi cc file :
Admin.php
Delete_book.php
Delete_cate.php
Delete_user.php
Edit_book.php
Edit_cate.php
Edit_user.php
Insert_book.php
Insert_cate.php
List_cates.php
List_users.php
To 1 trang login.php ngang cp vi folder admin . Trang ny dng ng nhp :
PHP Code:
<?php
session_start();
if(isset($_SESSION['cart']) && $_SESSION['total_prices']
header('location: show_cart.php');
}
if(isset($_POST['ok'])){
$name = $pass = '';

Page 387 of 413

!=0

){

if($_POST['txtname'] == NULL){
echo 'Bn cha nhp username<br/>' ;
}
else
$name = $_POST['txtname'];
if($_POST['txtpass'] == NULL){
echo 'Bn cha nhp password<br/>' ;
}
else
$pass = $_POST['txtpass'];
if($name && $pass ) {
$conn = mysql_connect('localhost', 'root', '');
mysql_select_db('books');
$sql = "select * from user where username = '$name' and pas
sword = '$pass' ";
$result = mysql_query($sql);
if(!$result){
echo ' C li , khng th query database c' ;
}
else{
$array = mysql_fetch_assoc($result);
$rows = mysql_num_rows($result);
if($rows == 0){
echo 'Bn nhp sai password hoc username';
}
else{
session_start();
$_SESSION['user'] = $name;
$_SESSION['user_id'] = $array['user_id'];
$_SESSION['level'] = $array['level'];
if($array['level'] ==2){
// Nu ngi ang truy cp l admin th chuyn sang trang admin.php
header("Location: admin/admin.php");
exit();
}
else{
//Ngc li chuyn sang trang index.php
header('Location: index.php');
exit();
}
}
}
}
}
?>
<form action = 'login.php' method = 'post' >
<fieldset>
<legend> Log-in Form </legend>
<table>
<tr>
<td> Name : </td>
<td> <input type = 'text' name = 'txtname' size = '25' /></td>

Page 388 of 413

</tr>
<tr>
<td> Password : </td>
<td> <input type = 'password' name = 'txtpass' size = '25' /> </td>
</tr>
<tr>
<td> </td>
<td> <input type = 'submit' name = 'ok' value = 'Log in' /> </td>
<!-t tn cho field submit d xc nhn xem ngi dng c nhn Submit
cha -->
</tr>
</table>
</fieldset>
</form>

Gii thch :
Chng ta quy nh : nu mun ang mua hng m ng nhp vo trang admin th hok
cho, chuyn ngi dng v gi hng, nu mun ng nhp th set gi hng la 0 ht b
sn phm ra khi gi hoc tin ti thanh ton ri mi cho ng nhp .
y dng form v cch x l form trn cng 1 trang nn chng ta phi c cch xc
nhn l nt Submit ca form c nhn cha ? Nu nhn ri th mnh x l form,
cn nu khng th hin th form cho ngi dng nhp .
gii quyt iu chng ta c :
PHP Code:
if(isset($_POST['ok'])){
//X l form
}

PHP 5, s dng bin, chng ta phi khai bo trc, gi s nh form khng c


nhp g ht m nhn submit
=> $name = $pass = ''; //Set gi tr l NULL
xc nh xem ngi dng c nhp vo cha, nu cha nhp th bo li :
PHP Code:
if($_POST['txtname'] == NULL)
{
//Bo li
}

Sau nu tn ti gi tr $name v $pass th tin hnh x l form .


Chng ta c cc dng code kt ni database rt thng xuyn s dng sau :
PHP Code:
$conn = mysql_connect('localhost', 'root', '');
mysql_select_db('books');

V th chng ta s to 1 file tn connect.php , ri copy on code trn vo file


connect.php trong folder includes ngang cp vi folder admin ( nh bc bng <?php
?> ) sau ny tin dng li .
Page 389 of 413

Bin $result l lu kt qu ca vic thc hin truy vn ti database, n s tr v


TRUE nu thc hin c v FALSE nu xy ra li trong cu QUERY . iu ny
cng khng cn thit lm ch l khi xy ra li th bn bit li ch no . C th b
qua
trn chng ta xem xt username v password ngi dng nhp vo c ng
hay sai , nu ng th cp 1 phin lm vic cho ngi vi 3 bin $_SESSION
sau ny tin dng li .
II/ Xy dng trang qun tr
a/ admin.php
Vi trang admin.php , chng ta cn to 1 menu cho admin la chon :
PHP Code:
<?php
require_once('../includes/session.php');
// K hiu ../ c ngha l back li 1 cp, file ny ang folder admin
, nhng file session.php li ngang cp vi folder admin
?>
<link href = '../styles.css' rel = 'stylesheet' type = 'text/css' /
>
<table border = '1' cellspacing = '0'>
<tr>
<th class = 'green_th' colspan = '6' align = 'center' > Welcome <?
php echo "<font color = 'red'> Admin </font>".$_SESSION['user'] ?> </th
>
</tr>
<tr>
<td class = 'green_td'><a href = '../index.php'> n trang ch </a>
</td>
<td class = 'green_td'><a href = 'insert_cate.php'> Thm chuyn mc
</a> </td>
<td class = 'green_td'><a href = 'insert_book.php'> Thm sch </a>
</td>
<td class = 'green_td'><a href = 'list_users.php'> Hin ti khon
</a> </td>
<td class = 'green_td'><a href = 'list_cates.php'> Hin cc chuyn
mc </a> </td>
<td class = 'green_td'><a href = '../logout.php'> Logout </a> </td>
</tr>
</table>

trn dng :
M:
<link href = '../styles.css' rel = 'stylesheet' type = 'text/css' />

: s dng file CSS .


Cc class = green_td ch l trang tr bng CSS, cc bn ng quan tm n !
Nh mnh ni, tt c cc file trong admin, cn phi kim tra xem c phi admin ang
truy cp khng ? Nu khng th chuyn ngay v trang login.php.
V dng rt nhiu nn chng ta cc dng code ny vo file session.php trong folder
includes ngang cp vi folder admin:
Page 390 of 413

PHP Code:
<?php
session_start();
if($_SESSION['level'] != 2){
header('Location: ../login.php');
exit();
}
?>

Mc ch ca trang admin.php ny l to 1 menu cho admin la chn . Vi mi


la chn ca admin, chuyn admin n trang tng ng .
y c cc ng dn n :
n trang ch, thm chuyn mc, thm sch, hin cc users, hin cc chuyn mc,
v log-out .

II/Xy dng trang qun tr :


b/ Thm chuyn mc :
Tip theo, mnh s x l file thm chuyn mc : insert_cate.php
PHP Code:
<?php
require_once('../includes/session.php');
require_once('../includes/check_data.php');
if(isset($_POST['ok'])){
$cate_name = '';
if(!check_data($_POST)){
echo 'Bn cha in ht thng tin ca sch';
}
else{
require_once('../includes/connect.php');
$cate_name

= trim(addslashes($_POST['category']));

$sql = "insert into categories(cate_name)


values('$cate_name')";
$result = mysql_query($sql);
if($result){
header("location: list_cates.php");
exit();
}
else
echo ' Xy ra li , chuyn mc cha c thm vo ' ;
}
}
?>
<form action ='insert_cate.php'
<fieldset>

Page 391 of 413

method = 'post' >

<legend> Thng tin chuyn mc : </legend>


<table>
<tr>
<td>Tn chuyn mc: </td>
<td><input type ='text' name = 'category' /> </td>
</tr>
<tr>
<td align ='center' colspan = '2' ><input type = 'submit' name
= 'ok' value = 'Thm' /></td>
</table>
</fieldset>
</form>

Thay v c mi field trong form, chng ta check xem n c NULL hay khng , chng ta
cn dng 1 hm x l chuyn v b n vo 1 file trong folder includes :
check_data.php
PHP Code:
<?php
function check_data($vars){
foreach ($vars as $key => $value){
if($key != 'image'){
if ( !isset($key) || $value == '' ){
return false;
}
}
}
return true;
}
?>

Hm ny s c truyn nh sau : check_data($_POST)


Thc ra, POST l 1 mng, c cc kha l tn ca cc field v gi tr l thng
tin ca field c input vo . V th chng ta dng foreach($vars as $key
=> $value ) x l theo tng field .
Nu khng tn ti key hoc gi tr ca field l NULL th hm tr v false .
trn, sch c th c hnh hay khng hnh, v th field image c th l
NULL , vy chng ta ch kim tra cc field khc ca form :
If(!$key != image )
y chng ta cn phi addslashes v trim gi tr ca cc field nh :
cate_name . V v d nh khi nhp :
Cate_name : Macs . << Vi gi tr c , cu truy vn s khng thc hin
c v tr v false . V th chng ta phi thm \ vo trc trc khi
Page 392 of 413

chuyn vo database .
Quan trng l, nu ngi dng nhp title :
Macs : vy rt ph ti nguyn v s gy kh khan v sau , v th chng ta
phi b cc khong trng 2 bn chng, tc l dng hm trim()..
c/ Thm sch :
Tip theo, mnh s x l file thm sch : insert_book.php
PHP Code:
<?php
require_once('../includes/session.php');
require_once('../includes/check_data.php');
if(isset($_POST['ok'])){
$isbn = $author = $title = $price = $description = '';
if(!check_data($_POST)){
echo 'Bn cha in ht thng tin ca sch';
}
else{
require_once('../includes/connect.php');
$isbn
= trim($_POST['isbn']);
$author = trim(addslashes($_POST['author']));
$cate_id = $_POST['cate_id'];
$title
= trim(addslashes($_POST['title']));
$price
= $_POST['price'];
$description =addslashes($_POST['description']);
if($_FILES['image']['name']){
move_uploaded_file($_FILES['image']['tmp_name'],"images
/".$_FILES['image']['name']);
$image = addslashes($_FILES['image']['name']);
$sql = "insert into books(isbn,author,title,cate_id,ima
ge,price,description)
values('$isbn','$author','$title', '$cate_id', '$image'
,'$price','$description')";
}
else
$sql = "insert into books(isbn,author,title,cate_id,pri
ce,description)
values('$isbn','$author','$title', '$cate_id','$price',
'$description')";
$result = mysql_query($sql);
if($result){
header("location: ../index.php?cate_id=$cate_id");
exit();
}
else
echo ' Xy ra li , sch cha c thm vo ' ;

Page 393 of 413

}
}
?>
<form action ='insert_book.php'
method = 'post' enctype = 'mult
ipart/form-data'>
<fieldset>
<legend> Thng tin sch : </legend>
<table>
<tr>
<td>Chuyn mc: </td>
<td>
<select name = 'cate_id'>
<?php
require_once('../includes/connect.php');
$sql = 'select * from categories';
$result = mysql_query($sql);
while($rows = mysql_fetch_assoc($result))
//Dng mysql_fetch_assoc s tit kim b nh hn mysql_fetch_array
echo "<option value = '$rows[cate_id]'>$rows[cate_n
ame] </option>";
//Ti sao hok phi l $result['cate_id'] m l $result[cate_id] <<< V
c lng vo " " ca dng ECHO
?>
</td>
</tr>
<tr>
<td>ISBN: </td>
<td><input type ='text' name = 'isbn' /> </td>
</tr>
<tr>
<td>Tc gi: </td>
<td><input type ='text' name = 'author' /> </td>
</tr>
<tr>
<td>Ta sch: </td>
<td><input type ='text' name = 'title' /> </td>
</tr>
<tr>
<td>Hnh i din: </td>
<td><input type = 'file' name = 'image' /> </td>
</tr>
<tr>
<td>Gi sch: </td>
<td><input type ='text' name = 'price' /> </td>
</tr>
<tr>
<td>M t: </td>
<td><textarea name = 'description' cols = '50' rows ='20'></tex
tarea></td>
</tr>
</fieldset>
<tr>
<td colspan = '2' align = 'center'><input type = 'submit' name
= 'ok' value = 'Send' /> </td>

Page 394 of 413

</tr>
</form>

Gii thch vng lp while :


PHP Code:
while($rows = mysql_fetch_assoc($result))
//Dng mysql_fetch_assoc s tit kim b nh hn mysql_fetch_array
echo "<option value = '$rows[cate_id]'>$rows[cate_n
ame] </option>";

y, $result l kt qu tr v ca cu truy vn, n s c kiu d liu l resource, d


thao tc, chng ta chuyn n thnh 1 mng hok tun t vi cc kha l tn cc ct, gi tr
l gi tr ca ct . V kt qu tr v c th l nhiu dng, nn chng ta cn vng lp
while duyt tng dng :
PHP Code:
while($rows = mysql_fetch_assoc($result))

Vi mi dng duyt qua, gn mng bt tun t ca dng cho bin $rows, ri chuyn
con tr mng ln dng k tip
phn thm sch ny, chng ta cho php ngi dng upload file, nn khi khai bo form
phi c :
M:
enctype = 'multipart/form-data

V thm nh i din cho sch l 1 field la chn, tc l ty ngi dng, nn ta


phi chia thnh 2 trng hp, nu ngi dng upload nh, v khi ngi dng
khng upload nh ! Vi mi trng hp ta gn cu truy vn vo bin $sql .
Ring vi trng hp upload nh , chng ta cn chuyn file nh vo folder images (
trong folder admin) .

d/ Hin cc chuyn mc :
Tip theo, mnh s x l file list chuyn mc : list_cates.php
PHP Code:
<link href = '../styles.css' rel = 'stylesheet' type ='text/css' />
<script>
function xacnhan(){
if(!window.confirm("Bn c thc s mun xa chuyn mc ny ?"))
{
return false;
}
}
</script>
<?php
require_once('../includes/session.php');
require_once('../includes/connect.php');
?>
<table border ='1' cellspacing ='0'>

Page 395 of 413

<tr>
<th class
<th class
<th class
<th class
</tr>

=
=
=
=

'green_th'> S th t </th>
'green_th'>Tn chuyn mc </th>
'green_th'> S sch trong chuyn mc </td>
'green_th' colspan = '2'> Mt s quyn hn </th>

<?php
$sql = 'select * from categories ';
$result = mysql_query($sql);
$stt =0;
while($rows = mysql_fetch_assoc($result)){
$count_book_query = "select isbn from books where cate_
id =$rows[cate_id]";
$result_count = mysql_query($count_book_query);
$count = mysql_num_rows($result_count);
$stt++;
echo " <tr>
<td class = 'green_td' align = 'center'>$stt </td>
<td class = 'green_td' align = 'center'>$rows[cate_
name]</td>
<td class = 'green_td' align = 'center'>$count</td>
<td class = 'green_td' align = 'center'><a href = \
"edit_cate.php?cate_id=$rows[cate_id]\"> Edit </a> </td>
<td class = 'green_td' align = 'center'><a href = \
"delete_cate.php?cate_id=$rows[cate_id]\" onclick = 'return xacnhan();'
> Delete </a></td>
</tr>";
}
?>
</table>
<?php
echo "<a href = '../logout.php'> Log out | </a>";
echo "<a href = 'admin.php'> V trang qun tr </a>";
?>

Ti y chng ta to 1 table vi cc ct : s th t, tn chuyn mc, s sch trong chuyn


mc, v 1 s quyn hn ca admin nh sa, xa
hin ra list chuyn mc trong database, chng ta cn truy vn ri dng vng lp
d liu ra bng
lm c iu ny , chng ta cn dng vng lp while :
PHP Code:
while($rows = mysql_fetch_assoc($result)){
$count_book_query = "select isbn from books where cate_
id =$rows[cate_id]";
$result_count = mysql_query($count_book_query);
$count = mysql_num_rows($result_count);
$stt++;
echo " <tr>
<td class = 'green_td' align = 'center'>$stt </td>
<td class = 'green_td' align = 'center'>$rows[cate_
name]</td>
<td class = 'green_td' align = 'center'>$count</td>
<td class = 'green_td' align = 'center'><a href = \

Page 396 of 413

"edit_cate.php?cate_id=$rows[cate_id]\"> Edit </a> </td>


<td class = 'green_td' align = 'center'><a href = \
"delete_cate.php?cate_id=$rows[cate_id]\" onclick = 'return xacnhan();'
> Delete </a></td>
</tr>";
}

Vi mi chuyn mc, chng ta thc hin 1 cu truy vn, ly d liu ca chuyn mc


. Ngay sau dng mysql_fetch_assoc() chuyn ha d liu thnh mng khng
tun t ri tin hnh ra .
Vi mi chuyn mc cho php admin xa v sa, khi click vo th s chuyn qua trang
delete_cate.php hoc delete_book.php v km theo id ca chuyn mc :
PHP Code:
delete_cate.php?cate_id=$rows[cate_id]
Edit_book.php?cate_id=$rows[cate_id]

Lu : chng ta phng trng hp admin l bm vo nt xa, v th cn on


javascript hin ra 1 ci bng confirm :
M:
<script>
function xacnhan(){
if(!window.confirm("Bn c thc s mun xa chuyn mc
ny ?")){
return false;
}
}
</script>

S dng :
M:
<td class = 'green_td' align = 'center'><a href = \"delete_cate.php?

cate_id=$rows[cate_id]\" onclick = 'return xacnhan();'> Delete </a></td>


Gii thch : nu bn nhp No th hok co chn g xy ra, nu nhp Yes th chuyn n
trang delete_cate.php?cate_id= thc hin vic xa chuyn mc
e/ Xa chuyn mc
Chng ta thc hin xa chuyn mc nh sau : delete_cate.php
PHP Code:
<?php
require_once('../includes/session.php');
require_once('../includes/connect.php');
$cate_id = $_GET['cate_id'];
$sql = "delete from categories where cate_id ='$cate_id'";
$result = mysql_query($sql);
if($result){
header('Location : list_cates.php');
exit();
}
else
echo ' Xy ra li, chuyn mc cha c xa ';
?>

Page 397 of 413

Nu xa c, chuyn admin sang trang lit k chuyn mc . Nu khng, bo li


f/ Sa chuyn mc :
V trang sa chuyn mc edit_cate.php nh sau:
PHP Code:
<?php
require_once('../includes/session.php');
require_once('../includes/connect.php');
require_once('../includes/check_data.php');
$cate_id = $_GET['cate_id'];
$sql = " select * from categories where cate_id = '$cate_id' ";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
if(isset($_POST['ok'])){
if(!check_data($_POST)){
echo ' Bn cha in thng tin ';
}
else{
$cate_name = $_POST['category'];

$sql = "update categories set cate_name = '$cate_name'


where cate_id = '$cate_id' ";
$result = mysql_query($sql);
if($result){
header('Location: list_cates.php');
exit();
}
else
echo ' Xy ra li, cha th thay i thng tin chuy
n mc';
}
}
?>
<form action ='edit_cate.php?cate_id=<?php echo $cate_id; ?>'
m
ethod = 'post' >
<fieldset>
<legend> Thng tin chuyn mc : </legend>
<table>
<tr>
<td>Tn chuyn mc: </td>
<td><input type ='text' name = 'category' value = "
<?php
echo "$row[cate_name]";
//Ch khng khong trng trong " " v lc database s lu lun
?> "
/> </td>
</tr>
<tr>
<td align ='center' colspan = '2' ><input type = 'submit' name

Page 398 of 413

= 'ok' value = 'Thm' /></td>


</table>
</fieldset>
</form>

file ny, chng ta c cc cng vic sau :


Hin th form cho admin sa v ti field cate_name ca form, phi d liu t database
ra . ( Vd chuyn mc kinh t th ti field cate_name phi hin ch kinh t ) .
lm iu ny chng ta dng thuc tnh value = ' content ' ca <input />
C th l:
M:
<input type ='text' name = 'category' value = "<?php
echo "$row[cate_name]";
?> "

trn chng ta lu khng c khong trng hay enter trong ca value .


V mi khong trng trong s c tnh l 1 k t . y l 1 li kh d mc !!!!

III/Layout:
a/ Trang ch
Tip theo, mnh s x l file layout sch : index.php . t file ny ngang cp vi folder
admin
PHP Code:
<link href = 'styles.css' rel = 'stylesheet' type = 'text/css' />
<?php
require_once('header.php');
require_once('includes/connect.php');
echo '<h1><font color = "red"> Cc chuyn mc : </font></h1> ';
$sql = 'select * from categories';
$result = mysql_query($sql);
echo '<ul>';
while($rows = mysql_fetch_assoc($result)){
echo "<li><a href = \"list_books.php?cate_id=$rows[cate_id]\" >
$rows[cate_name] </li>";
}
echo '</ul>';
session_start();
if(!isset($_SESSION['level'] ))
echo '<a href = "login.php"> ng nhp </a>';
else if($_SESSION['level'] == '2')
{
echo '<a href = "admin/admin.php"> n trang qun tr </a>';
echo '<a href = "logout.php"> Log Out</a>';
}
//require_once('footer.php');
?>

Page 399 of 413

Ti trang ny, chng ta s list cc chuyn mc theo dng unordered list(<ul> </ul>) c
trong database, nhng khng phi sa, xa nh bn admin m l xem sch trong
chuyn mc .
lm c iu ny, chng ta ch cn thc hin 1 cu truy vn ly tt tn tt thng
tin v chuyn mc ri chuyn ha n thnh mng . Sau xut ra bng dng while . Ti
mi chuyn mc, t 1 link n file list_books.php?cate_id= <<<list_books.php c
nhim v lit k sch trong chuyn mc vi cate_id tng ng .
Ti y, nu ngi ang truy cp l admin th hin ch : V trang qun tr v log-out
Nu khng phi th hin ch : ng nhp
b/ Hin cc sch c trong chuyn mc :
Ti file list_books.php :
PHP Code:
<link href = 'styles.css' rel = 'stylesheet' type ='text/css' />
<?php
require_once('header.php');
require_once('includes/connect.php');
session_start();
$cate_id = $_GET['cate_id'];
$sql = "select isbn,image,title from books where cate_id = '$cate_i
d' ";
$result = mysql_query($sql);
echo '<table>';
while($rows = mysql_fetch_assoc($result)){
if($rows['image'] != NULL){
echo "<tr>
<td><img src = \"admin/images/$rows[image]\" widt
h = '100px' height = '150px' border = '1'/></td>
<td><a href = \"book_info.php?isbn=$rows[isbn]\" > $ro
ws[title] </li>";
}
else
echo "<tr>
<td><img src = # width = '100px' height = '150px'
/></td>
<td valign = 'center'><a href = \"book_info.php?isbn=$
rows[isbn]\" > $rows[title] </li>";
}
echo '</table>';
echo '<a href = "index.php"> n cc chuyn mc khc </a>';
if(!isset($_SESSION['level']) || $_SESSION['level'] != '2')
echo '<a href = "show_cart.php"> Xem gi hng ca bn </a>';
else
echo '<a href = "logout.php"> Log Out</a>';

Page 400 of 413

//require_once('footer.php');
?>

Chng ta s lit k cc sch trong chuyn mc theo 1 bng, ct bn tri l hnh i din,
ct bn phi l ta sch , ta sch c gn link n file book_info.php?isbn. <<<file
book_info.php c nhim v lit k thng tin sch c isbn ch nh
V hnh nh l optional, v th chng ta phi xt 2 trng hp, nu hnh trn database l
NULL, th chng ta s khng show hnh ra ( src = # ) , ngc li, tr ng dn ti folder
images to, ly hnh upload show ra : admin/images/$rows[image]
c/ Hin th thng tin sch :
PHP Code:
<link href = 'styles.css' rel = 'stylesheet' type ='text/css' />
<script>
function xacnhan()
{
if(!window.confirm("Bn thc s mun xa sch ny? " )){
return false;
}
}
</script>
<?php
require_once('header.php');
require_once('includes/connect.php');
session_start();
$isbn = $_GET['isbn'];
$sql = "select * from books where isbn = '$isbn' ";
$result = mysql_query($sql);
$rows = mysql_fetch_assoc($result);
$isbn = htmlspecialchars($rows['isbn']);
$title = htmlspecialchars($rows['title']);
$author =htmlspecialchars($rows['author']);
$description = htmlspecialchars($rows['description']);
echo '<table>';
if($rows['image'] != NULL){
echo "<tr>
<td><img src = \"admin/images/$rows[image]\"
th = '100px' height = '150px'/></td>";

wid

}
else
echo "<tr>
<td><img src = # width = '100px' height = '150px'
/></td>";
echo "<td><ul>
<li>ISBN: $isbn</li>
<li>Title: $title</li>
<li>Author: $author</li>
<li>Price: $rows[price]</li>

Page 401 of 413

<li>Description: $description </li>


</ul>";
echo "</td></tr>";
echo '</table>';
if(isset($_SESSION['level']) && $_SESSION['level'] ==2)
{
echo "<a href = \"admin/edit_book.php?isbn=$isbn\"> Sa thng tin s
ch| </a>";
echo "<a href = \"admin/delete_book.php?isbn=$isbn\" onclick =
\"return xacnhan();\"> Xa sch khi chuyn mc|</a>";
echo "<a href = \"list_books.php?cate_id=$rows[cate_id]\"> V trang
trc |</a>";
echo '<a href = "logout.php"> Log Out</a>';
}
else{
echo "<a href =\"list_books.php?cate_id=$rows[cate_id]\"> Tip tc
mua sch </a>";
echo "<a href = \"show_cart.php?isbn=$rows[isbn]\"> Thm vo gi h
ng| </a>";
if(isset($_SESSION['cart']))
echo "<a href = \"show_cart.php\"> Xem gi hng| </a>";
}
//require_once('footer.php');
?>

phn ny, nu ngi ang truy cp l admin th xut ra : Sa thng tin sch, Xa sch
khi chuyn mc, v trang trc, log out .
PHP Code:
if(isset($_SESSION['level']) && $_SESSION['level'] ==2)
{
echo "<a href = \"admin/edit_book.php?isbn=$isbn\"> Sa thng tin s
ch| </a>";
echo "<a href = \"admin/delete_book.php?isbn=$isbn\" onclick =
\"return xacnhan();\"> Xa sch khi chuyn mc|</a>";
echo "<a href = \"list_books.php?cate_id=$rows[cate_id]\"> V trang
trc |</a>";
echo '<a href = "logout.php"> Log Out</a>';
}

Ngc li th xut ra : tip tc mua sch, thm vo gi hng, xem gi hng


PHP Code:
else{
echo "<a href =\"list_books.php?cate_id=$rows[cate_id]\"> Tip tc
mua sch </a>";
echo "<a href = \"show_cart.php?isbn=$rows[isbn]\"> Thm vo gi h
ng| </a>";
if(isset($_SESSION['cart']))
// Nu tng thm sch vo gi hng th mi cho xem gi hng, nu ln
u truy cp th hok hin Xem Gi Hng . c part 9 hiu gi hng
echo "<a href = \"show_cart.php\"> Xem gi hng| </a>";
}
//require_once('footer.php');

Page 402 of 413

III/ Hin th gi hng


Trang show_cart.php c nhim v nh sau :
Nu t file book_info.php chng ta click : thm vo gi hng => s c chuyn sang
show_cart.php?isbn= <<<Lc ny show_cart.php c nhim v thm sch vo gi
hng nu n khng c v tng s lng ca n thm 1 nu tn ti !
Nu t cc file nh list_books.php, book_info.php , ngi dng click: xem gi hng =>
s c chuyn sang show_cart.php . Ti y, trang ch c nhim v show ra gi hng
cho ngi truy cp.
Ti trang show_cart.php chng ta cho php ngi dng thay i s lng ca sch .
Nhn save li => Cp nht tng tin, s lng v.v .
Ta c code trang show_cart.php nh sau :
PHP Code:
<?php
require_once('header.php');
require_once('includes/connect.php');
session_start();
$isbn ='';
if(isset($_GET['isbn'])){
$isbn = $_GET['isbn'];
$sql = "select cate_id from books where isbn = '$isbn' ";
$book_ordered = mysql_query($sql);
$book_ordered = mysql_fetch_assoc($book_ordered);
if(!isset($_SESSION['cart'])){
$_SESSION['cart'] = array();
}
if(!isset($_SESSION['cart'][$isbn])){
$_SESSION['cart'][$isbn] = 1;
}
else
$_SESSION['cart'][$isbn]++;
}
$_SESSION['total_items'] = 0;
$_SESSION['total_prices'] = 0;
if(isset($_POST['save'])){
foreach($_SESSION['cart'] as $isbn_i => $quantity_q){
if($_POST[$isbn_i] ==0){
unset($_SESSION['cart'][$isbn_i]);
}
else
$_SESSION['cart'][$isbn_i] = $_POST[$isbn_i];

Page 403 of 413

}
}
foreach($_SESSION['cart'] as $isbn_i => $quantity_q){
$sql = "select price from books where isbn = '$isbn_i' ";
$result = mysql_query($sql);
$rows = mysql_fetch_assoc($result);
$price = $rows['price'];
$_SESSION['total_items'] += $quantity_q;
$_SESSION['total_prices'] += $quantity_q*$price;
}
echo "<h1><font color = 'red'> Gi hng ca bn </font></h1>";
echo "<form action = \"show_cart.php\" method = 'post'>";
echo '<table border = "1px" cellspacing = "0">';
echo '<th>Ta sch</th>';
echo '<th>Gi sch</th>';
echo '<th>S lng </th>';
echo '<th>Tng tin</th>';
foreach($_SESSION['cart'] as $isbn_i => $quantity_q){
$sql = "select * from books where isbn = '$isbn_i' ";
$result = mysql_query($sql);
$rows = mysql_fetch_assoc($result);
echo '<tr>';
echo "<td align = 'center'>$rows[title]</td>";
echo "<td align = 'center'>$rows[price]</td>";
echo "<td align = 'center'><input type = 'text' name = '$isbn_i
' value = '$quantity_q' size ='2' /></td>";
$total_prices = $rows['price']*$quantity_q ;
echo "<td align = 'center'>$total_prices</td>";
echo '</tr>';
}
echo '<tr>';
echo "<td align = 'center' colspan = '4'>
<input type ='hidden' name = 'save' />
<input type ='image' src = 'save.gif' /></td>";
echo '</form>';
echo '</table>';
if($isbn){
echo "<a href = \"list_books.php?cate_id=$book_ordered[cate_id]\">
Tip tc mua hng </a>";
}
else
echo '<a href = "index.php"> Tip tc mua hng </a>';

Mnh gii thch v form ca trang ny trc :


Form l 1 table vi 4 ct : sch, gi, s lng mua, tng tin ca sach . Ti ct s lng
mua, cho php ngi dng thay i s lng
PHP Code:
echo ''<input type = 'text' value = '$quantity_q' name = '$isbn_i' '';

Sau chng ta tnh tng tin ca cun sch xut ra bng cch nhn gi sch vi tng
s lng sch :

Page 404 of 413

PHP Code:
$total_prices = $rows['price']*$quantity_q ;

tnh tng tin ca tt c cun sch trong gi , chng ta tnh trc :


$_SESSION['cart'][ 'total_prices'] .
M bin $_SESSION hok th ni suy c, v th chng ta gn vo 1 bin tn
$total_prices_books
Ti phn nt SAVE: y mnh dng hnh nh l save.gif lm nt save: c php :
M:
<input type ='image' src = 'save.gif' />

Nhng nt save ny c nhim v nh l 1 nt submit chng ta thm type = 'hidden'


trc n :
M:
<input type = 'hidden' name ='save' />

Nu nh gi hng mi c b sung thm sch ( tc l show_cart.php?isbn= ) th


'tip tc mua hng' s dn n chuyn mc cha sch khch hng la chn tp
Nu nh gi hng ch c xem (tc l show_cart.php) th 'tip tc mua hng' s dn
n lit k cc chuyn mc.
PHP Code:
if($isbn){
echo "<a href = \"list_books.php?cate_id=$book_ordered[cate_id]\">
Tip tc mua hng </a>";
}
else
echo '<a href = "index.php"> Tip tc mua hng </a>';

Chng ta xt trng hp nu sch va c thm vo gi hng , tc l trn a ch c


isbn :
PHP Code:
$isbn = $_GET['isbn'];
//Ly gi tr ca isbn trn thanh a ch
$sql = "select cate_id from books where isbn = '$isbn' ";
//Ly id ca chuyn mc m sch c isbn thuc
$book_ordered = mysql_query($sql);
//Thc hin cu truy vn
$book_ordered = mysql_fetch_assoc($book_ordered);
//Chuyn kt qu tr v thnh mng khng tun t
if(!isset($_SESSION['cart'])){
$_SESSION['cart'] = array();
}
if(!isset($_SESSION['cart'][$isbn])){
$_SESSION['cart'][$isbn] = 1;
}
else
$_SESSION['cart'][$isbn]++;
}

Chng ta x l phn gi hng nh sau :


Page 405 of 413

PHP Code:
if(!isset($_SESSION['cart'])){
$_SESSION['cart'] = array();
}
if(!isset($_SESSION['cart'][$isbn])){
$_SESSION['cart'][$isbn] = 1;
}
else
$_SESSION['cart'][$isbn]++;

Nu khng tn ti $_SESSION['cart'] : tc l ngi dng cha mua hng, th chng ta


khi to $_SESSION['cart'] l 1 mng . Mng ny c nhim v cha kha l isbn, gi tr
ca kha l s lng sch t trong gi .
Khi ng dng thm 1 cun sch vo, kim tra xem sch tn ti cha ? Nu cha th
to mi nu c ri th tng ln 1 .
Sau nhng cng vic trn, chng ta phi reset gi tr ca $_SESSION['total_prices'] v
$_SESSION['total_items'], ri thc hin vic tnh li t u gi tr ca 2 SESSION ny,
nu khng th phn tnh ton s b sai khi ng dng save hay refresh .
PHP Code:
$_SESSION['total_items'] = 0;
$_SESSION['total_prices'] = 0;

Trc khi thc hin vic tnh ton tng sch v tng tin ( gi tr ca 2 SESSION trn),
chng ta cn x l nt save trc :
PHP Code:
if(isset($_POST['save'])){
//Nu ngi dng nhn nt save
foreach($_SESSION['cart'] as $isbn_i => $quantity_q){
//Lp vi tng cun sch trong gi
if($_POST[$isbn_i] ==0){
//Nu s lng sch ca 1 cun sch xc nh l 0, th b cun sch
ra khi gi hng
unset($_SESSION['cart'][$isbn_i]);
}
else
$_SESSION['cart'][$isbn_i] = $_POST[$isbn_i];
//Nu khc khng, cp nht s lng sch
}
}

Tnh ton tng s sach trong gi v tng tin :


PHP Code:
foreach($_SESSION['cart'] as $isbn_i => $quantity_q){
$sql = "select price from books where isbn = '$isbn_i' ";
//Chn gi ca tng cun sch t database
$result = mysql_query($sql);
$rows = mysql_fetch_assoc($result);
//Chuyn v thnh mng khng tun t

Page 406 of 413

$price = $rows['price'];
//Ly gi ca sch gn vo bin
$_SESSION['total_items'] += $quantity_q;
//Tng s sch th c tnh d dng bng cch cng dn tng s lng t
ng cun sch
$_SESSION['total_prices'] += $quantity_q*$price;
//Tng tin th cng dn tng tin mua mi loi sch .
}

II/ Trang qun tr:


c/ Sa thng tin sch
Gi chng ta quay li x l trang edit_book.php:
PHP Code:
<?php
require_once('../includes/session.php');
require_once('../includes/check_data.php');
require_once('../includes/connect.php');
if(isset($_GET['isbn']))
{
$isbn = $_GET['isbn'];
$sql = "select * from books where isbn = '$isbn' ";
}
else if(isset($_POST['old_isbn'])){
$old_isbn = $_POST['old_isbn'];
$sql = "select * from books where isbn = '$old_isbn' ";
}
$book = mysql_query($sql);
$book = mysql_fetch_assoc($book);
if(isset($_POST['ok'])){
$isbn = $author = $title = $price = $description = '';
if(!check_data($_POST)){
echo 'Bn cha in ht thng tin ca sch';
}
else{
$isbn
= trim($_POST['isbn']);
$author = trim(htmlspecialchars($_POST['author']));
$cate_id = $_POST['cate_id'];
$title
= trim(htmlspecialchars($_POST['title']));
$price
= $_POST['price'];
$description = trim(htmlspecialchars($_POST['description'])
);
if($old_isbn != $isbn){
$sql = "select author from books where isbn ='$isbn'";

Page 407 of 413

$result = mysql_query($sql);
$rows = mysql_num_rows($result);
if($rows == 0){
if($_FILES['image']['name']){
move_uploaded_file($_FILES['image']['tmp_name']
,"images/".$_FILES['image']['name']);
$image = $_FILES['image']['name'];
$sql = "update books set isbn = '$isbn', author
= '$author', title ='$title', cate_id = '$cate_id', image ='$image', p
rice = '$price',
description = '$description' where isbn ='$old_isbn'";
}
else
$sql = "update books set isbn = '$isbn', author
= '$author', title ='$title', cate_id = '$cate_id', price = '$price',
description = '$description' where isbn ='$old_isbn
'";
$result = mysql_query($sql);
}
else{
echo 'Xy ra li .ISBN tn ti';
$result = false;
}
}
if($old_isbn == $isbn){
if($_FILES['image']['name']){
move_uploaded_file($_FILES['image']['tmp_name']
,"images/".$_FILES['image']['name']);
$image = $_FILES['image']['name'];
$sql = "update books set isbn = '$isbn', author
= '$author', title ='$title', cate_id = '$cate_id', image ='$image', p
rice = '$price',
description = '$description' where isbn ='$old_isbn'";
}
else
$sql = "update books set isbn = '$isbn', author
= '$author', title ='$title', cate_id = '$cate_id', price = '$price',
description = '$description' where isbn ='$old_isbn'";
$result = mysql_query($sql);
}
if($result){
header("location: ../list_books.php?cate_id=$cate_id");
exit();
}
else
echo ' Xy ra li , sch cha c thm vo ' ;
}
}
?>

Page 408 of 413

<form action = 'edit_book.php'


method = 'post' enctype = 'multi
part/form-data'>
<fieldset>
<legend> Thng tin sch : </legend>
<table>
<tr>
<td>Chuyn mc: </td>
<td>
<select name = 'cate_id'>
<?php
require_once('../includes/connect.php');
$sql = 'select * from categories';
$result = mysql_query($sql);
while($rows = mysql_fetch_assoc($result))
//Dng mysql_fetch_assoc s tit kim b nh hn mysql_fetch_array
echo "<option value = '$rows[cate_id]'
<?php
if($rows[cate_id] == $book[cate_id])
echo 'selected = selected';
?>
$rows[cate_name] </option>";
//Ti sao hok phi l $result['cate_id'] m l $result[cate_id] <<< V
c lng vo " " ca dng ECHO
?>
</td>
</tr>
<tr>
<td>ISBN: </td>
<td><input type ='text' name = 'isbn' value ='<?php
echo htmlspecialchars($book['isbn']);?>'/> </td>
</tr>
<tr>
<td>Tc gi: </td>
<td><input type ='text' name = 'author' value = '
<?php
echo htmlspecialchars($book['author']);
?>
'/> </td>
</tr>
<tr>
<td>Ta sch: </td>
<td><input type ='text' name = 'title' value ='<?php
echo htmlspecialchars($book['title']);
?>'/> </td>
</tr>
<?php
if($book['image'] != ''){
echo '<tr>';
echo '<td> Hnh i din cho sch : </td>';
echo "<td> <img src = 'images/$book[image]' width = '100px' height
= '150px' /></td>";
echo '</tr>';
}
?>
<tr>

Page 409 of 413

<td>Hnh i din: </td>


<td><input type = 'file' name = 'image' /> </td>
</tr>
<tr>
<td>Gi sch: </td>
<td><input type ='text' name = 'price' value = '
<?php
echo $book['price'];
?>'/> </td>
</tr>
<tr>
<td>M t: </td>
<td><textarea name = 'description' cols = '50' rows ='20'>
<?php
echo htmlspecialchars($book['description']);
?>
</textarea></td>
</tr>
</fieldset>
<tr>
<td colspan = '2' align = 'center'>
<input type = 'hidden' name = 'old_isbn' value ="<?php echo $bo
ok['isbn'];?>" />
<input type = 'submit' name = 'ok' value = 'Send' /> </td>
</tr>
</form>

y chng ta c nhim v d liu t database ra form . Lu : khi sa sch, c th


ng dng s sa isbn, m isbn l primary key trong database . Vy chng ta phi x l 2
trng hp:
1/ Nu ngi dng thay i isbn .
2/ Nu ngi dng hok thay i isbn
xt 2 trng hp trn, chng ta cn bit isbn trc khi edit ca sch, v th chng ta
chn :
M:
<input type = 'hidden' name = 'old_isbn' value ="<?php echo
$book['isbn'];?>" />

on code trn s gi isbn c cho chng ta qua form .


Cc bn thy, form ny gi d liu n edit_book.php ch hok phi
edit_book.php?isbn. nh thng l .Vy nu chng ta ch dng :
PHP Code:
if(isset($_GET['isbn']))
{
$isbn = $_GET['isbn'];
$sql = "select * from books where isbn = '$isbn' ";
}

Th khi c li hok thay i sch c, PHP s vn chy script edit_book.php m hok thc
hin vic chuyn trang => Lc ny hok cn isbn na m $_GET => form s y li v
hok c mng bt tun t d liu t database
Page 410 of 413

V vy chng ta thm :
PHP Code:
else if(isset($_POST['old_isbn'])){
$old_isbn = $_POST['old_isbn'];
$sql = "select * from books where isbn = '$old_isbn' ";
}

y, cho d xy ra sai st g , th chng ta vn cn old_isbn ly d liu t


database v form s hok cn li :
PHP Code:
$book = mysql_query($sql);
$book = mysql_fetch_assoc($book);
if($old_isbn != $isbn){
$sql = "select author from books where isbn ='$isbn'";
$result = mysql_query($sql);
$rows = mysql_num_rows($result);
if($rows == 0){
if($_FILES['image']['name']){
move_uploaded_file($_FILES['image']['tmp_name']
,"images/".$_FILES['image']['name']);
$image = $_FILES['image']['name'];
$sql = "update books set isbn = '$isbn', author
= '$author', title ='$title', cate_id = '$cate_id', image ='$image', p
rice = '$price',
description = '$description' where isbn ='$old_isbn'";
}
else
$sql = "update books set isbn = '$isbn', author
= '$author', title ='$title', cate_id = '$cate_id', price = '$price',
description = '$description' where isbn ='$old_isbn
'";
$result = mysql_query($sql);
}
else{
echo 'Xy ra li .ISBN tn ti';
$result = false;
}
}
if($old_isbn == $isbn){
if($_FILES['image']['name']){
move_uploaded_file($_FILES['image']['tmp_name']
,"images/".$_FILES['image']['name']);
$image = $_FILES['image']['name'];
$sql = "update books set isbn = '$isbn', author
= '$author', title ='$title', cate_id = '$cate_id', image ='$image', p
rice = '$price',
description = '$description' where isbn ='$old_isbn'";
}
else
$sql = "update books set isbn = '$isbn', author
= '$author', title ='$title', cate_id = '$cate_id', price = '$price',
description = '$description' where isbn ='$old_isbn'";

Page 411 of 413

$result = mysql_query($sql);
}

y. Chng ta xt 2 trng hp nh ni trn . Trong mi trng hp , li c 2


trng hp con l hok c nh i din v c nh i din .
TH : $old_isbn != $isbn
y, chng ta tm xem trong database, isbn mi c trng vi isbn ca cun sch no
khc hay khng ?
lm iu ny ta :
PHP Code:
$sql = "select author from books where isbn ='$isbn'";
$result = mysql_query($sql);

Ri sau tm s dng ca kt qu tr v :
PHP Code:
$rows = mysql_num_rows($result);

Nu 0 dng, tc l khng c trng, chng ta thc hin cu truy vn thay i thng tin :
PHP Code:
$result = mysql_query($sql) . //tr v true

Nu trng, chng ta gn $result l false;


TH : $isbn == $old_isbn
trng hp ny chng ta lm bnh thng, v isbn c gi nguyn .
Sau khi xt 2 trng hp, chng ta thc hin:
Nu result tr v true, th chuyn n trang list_cate.php?....
Nu result tr v false ( tc l trng hp trng isbn hoc xy ra li no
) th trang hin ti .
Vy l mnh hng dn cc bn code trang bn sch, hi vng l cc
bn mi hc PHP c ci nhn tng quan v vic xy dng 1 ng dng
n gin . Mc ch ca nhng bi hng dn ny l nh th, mnh ch
mong nhng ng mi hc, mi bc vo PHP hnh dung dc th no l
code 1 ng dng hon chnh . V th layout mnh cha xy dng cho
p, v code cha hon chnh cho lm . Code ny hok dnh cho cc i
tng hiu v nm c nhng iu trn nh ;;) .
Cn 1 s file khc nh edit user, list user,v.v cch gii thch cng nh
nhau nn mnh hok post ln y .
Page 412 of 413

Code ny cn thiu phn check out, thanh ton, phn user th cha
kim tra tn ti username cha nh isbn trn , cc bn t x l nh,
coi nh bi tp v nh =]]] ^^
Cho mi ngi nh !

Page 413 of 413

You might also like