Những sai lầm trong lập trình PHP pot - Pdf 18

PHPprogrammingdynamicwebforewreybody
21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughes
NGUYENANHKHOA

Class27K0A

DepartmentOfInformationTechnology
1
1
1
1
Dormitory204.B518:20
PM
April
7,
2006
àiviếtnàydànhchonhữnglậptrìnhviênPHPquantâ
m
đếnviệctránhnhữnglỗi
thườnggặpkhisửdụngPHP.NgườiđọcphảibiếtcáccúphápcủaPHP,vànênbiết
côngdụngcủacáchà
m
trongPHP.
Mộttrongnhữngđiể
mm
ạnhnhấtcủaPHPvôtìnhtrởthành
m
ộttrongnhữngđiể
m
yếu
nhấtcủanó:t

d




ng
ng
ng
ng
.NhiếungườichọnPHPvìtínhdễsửdụng,đãkhôngnhậnra
rằng:sửdụngđúngPHP
PHP
PHP
PHP
c
c
c
c
ò
ò
ò
ò
n
n
n
n
kh
kh
kh
kh

ng
ng
ô
ô
ô
ô
n
n
n
n
ng
ng
ng
ng




kh
kh
kh
kh
á
á
á
á
c
c
c
c

d
d




ng
ng
ng
ng
printf()
printf()
printf()
printf()
kh
kh
kh
kh
ô
ô
ô
ô
ng
ng
ng
ng
th
th
th
th

theoýmuốn
M
M
M
M
ã
ã
ã
ã
l
l
l
l




nh
nh
nh
nh
(PHP)
<?
/*ThethreefacesofΠ*/
printf("Piis:%.2f\n<br>\n",M_PI);
printf("Piisalso:%.3f\n<br>\n",M_PI);
printf("Piisalso:%.4f\n<br>\n",M_PI);
?>
Ch
Ch

ộthà
m
1.
1.
1.
1.
Khi
Khi
Khi
Khi
n
n
n
n
à
à
à
à
o
o
o
o
print()
print()
print()
print()
th
th
th
th

n?
n?
Cáclậptrìnhviênthườngsửdụngprintf()trongkhichỉprint()làđủ.Xétthídụsau:
<?
$name='NguyenAnhKhoa';
$nghenghiep='Sinhvien';
$diachi='Phong204.B5–KTX–DHSPDongThap';
$email='';
printf("Tencuatuila:%s\n<br>\n
Hiendangla:%s,%s\n<br>\n
LienhevoitoiquaEmail:%s\n<br>\n",
$name,$nghenghiep,$diachi,$email);
?>

m
print()
print()
print()
print()
cóthểdùngthaychoprintf()nhưsau:
B
PHPprogrammingdynamicwebforewreybody
21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughes
NGUYENANHKHOA

Class27K0A

DepartmentOfInformationTechnology
2
2

\n
<br>\n
\n
\n
\n
";
;
;
;
Khikhôngcầnđịnhdạngsửliệu,dùngprint()thaychoprintf()cónhữnglợiíchsau:
Thi
Thi
Thi
Thi
h
h
h
h
à
à
à
à
nh
nh
nh
nh
nhanh
nhanh
nhanh
nhanh

á
ng
ng
ng
ng
s
s
s
s




a:
a:
a:
a:
hãyxem,dùnghàmprintf()sẽlàmchongườiđọchơibịlẫnlộn
(tấtnhiêntrừkhihọcónềntảngC).Nóđòihỏikiếnthứcvềcúphápprintf()(thídụ,
%sthaychochuỗicòn%dlàsố)vàvềkiểubiến
2.
2.
2.
2.
D
D
D
D
ù
ù





li
li
li
li




u
u
u
u
tr
tr
tr
tr




v
v
v
v



m
m
m
m
Mộtlỗithườnggặpkháclàdùnprintf()đểxuấtdữliệutrảvềtừgọihàm,thídụnhưhà
m
đế
m
dướiđây:
Khixuấtgiátrịdohà
m
trảvề,toántử.nêndùngđểnốitrongprint(),nhưdướiđây:
Dùngtoántử.nhanhhơnviệcdùngprintf()
20.
20.
20.
20.
Á
Á
Á
Á
p
p
p
p
d
d
d
d


a
(semantics)
(semantics)
(semantics)
(semantics)
NhiềulậptrìnhviênsửdụngPHP
m
àkhôngbiếtđếnnhữngđiể
m
tinhtếcủangônngữ
này.Mộttrongnhữngđiể
m
đólàsựkhácnhaugiữacúpháp(syntax)vàngữnghĩa
(semantics).
C
C
C
C
ú
ú
ú
ú
ph
ph
ph
ph
á
á
á
á

m
ộtngônngữlỏnglẻonhưPHP,bạncónhiềulựachọnđểviếtlệnh.Cácbiến
khôngcầncókiểuxácđịnh
Thídụsau
m
ởtậptinvàintừngdòng:
Thídụtrênsẽtạolỗi:
Warning:
Warning:
Warning:
Warning:
Supplied
Supplied
Supplied
Supplied
argument
argument
argument
argument
is
is
is
is
not
not
not
not
a
a
a

4.
4.
4.
<?
printf
printf
printf
printf
("%doccurrencesof%sfound.",
count($truyvan),$search_term);
?>
<?
print
print
print
print
count($truyvan).
"occurrencesof$search_termfound.";
?>
<?
$fp=@fopen('vanban.txt','r')
ordie('Khongthemofilevanban.txt');
while($line=@fgets("$fp",1024))//Loi{
print$line;
}
@fclose("$fp")//Loi
ordie('Khongthedongvanban.txt');
?>
PHPprogrammingdynamicwebforewreybody
21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughes

C
C
ó
ó
ó
ó
th
th
th
th




tr
tr
tr
tr
á
á
á
á
nh
nh
nh
nh
vi
vi
vi
vi

sai
sai
ng
ng
ng
ng




ngh
ngh
ngh
ngh
ĩ
ĩ
ĩ
ĩ
a?
a?
a?
a?
Ourexampleabovegeneratedanerrorstatement.ButPHPenablesyoutocustomize
yourscriptstofitauniquescenariooroutputrequirement.So,itisatleasttheoretically
possibleto"getaway"withmisapplyingasemantic.Tôikhônghiểu,nhưngdịchthếnàyđược
không?
Thídụtrêncủachúngtatạora
m
ộtthôngbáolỗi.NhưngPHPchophépbạntuỳbiếncác
scriptđểthíchhợpvới


m
m
m
m
v
v
v
v




c:
c:
c:
c:
trongPHP,mỗibiếncómộttầmvựcriêng.Tầmvựcbiếnquyđịnhbiến
cóthểđượctruycậptừđâu,tồntạitrongthờigiannào.Hiểusaikháiniệmcơbản
về"tầmvực"dẫnđếnnhữnglỗisaitinhtếvàcảnhữnglỗilớn.

php.ini:
php.ini:
php.ini:
php.ini:
khiviếtmộtscriptchạyởnhiềumôitrườngkhácnhau,cầnbiếtrằng
khôngphảimọicấuhìnhPHPđềunhưnhau.Dođó,cầnthiếtnhữnglệnhkiểmtra
đểđảmbảoscriptcủabạnchạytốttrongcấuhìnhPHPcủangườikhác.
19.
19.

m
ngườiđọc
m
ệt
m
ỏi.Nóichung,lậptrìnhghi
chú(inlinedocumentation)được
m
ọingườikhẳngnhậnlàđiềutốt,nhưnghiế
m
khinótồntại.
Mộtvấnđềkháclàquánhiềughichú.Dùhiế
m
gặp,nhưngnólà
m
chocácđoạn
m
ãbị
cắtvụn,gâyrasựkhótheodõi.Dướiđâylà
m
ộtthídụ:
<?
//BatdaumaPHP
$age=18;//Gan18den$age
$age++;//Tang$agelen1donvi
//INradoantextthongbao:
print"Youarenow19,whichmeansyouhavebeen:";
print"\n<br>\n<br>\n";
//Vonglapforinratatcatuoitruocdo
for($idx=0;$idx<$age;$idx++){

1.
1.
1.
Bao
Bao
Bao
Bao
nhi
nhi
nhi
nhi
ê
ê
ê
ê
u
u
u
u
ghi
ghi
ghi
ghi
ch
ch
ch
ch
ú
ú
ú

Dùngmộtkiểughichúnhấtquán,/*
/*
/*
/*
*/
*/
*/
*/
hoặclà//
//
//
//
(tr
(tr
(tr
(tr
á
á
á
á
nh
nh
nh
nh
d
d
d
d
ù
ù

}
}
}else{
$randomAr=$elements;
}
$random_element=mt_rand(0,count($randomAr)-1);
return$randomAr[$random_element];
}
?>
18.
18.
18.
18.
Nhi
Nhi
Nhi
Nhi




u
u
u
u
bi
bi
bi
bi
ế

u
th
th
th
th




i
i
i
i
gian
gian
gian
gian
Cóvàingườibịá
m
ảnhbởibiếntrunggian.Tôikhôngthểhiểunổitạisaoaiđócóthể
viếtnhưthếnày:
PHPprogrammingdynamicwebforewreybody
21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughes
NGUYENANHKHOA

Class27K0A

DepartmentOfInformationTechnology
5
5

ắt.Trong
haithídụtrên,thídụnàosúctíchhơn?Thídụnàolà
m
con
m
ắtdễchịuhơn?Dùngquánhiều
biếntạ
m
cóthểdẫnđến
m
ãchươngtrìnhkhóđọcvàkhôngsúctích.
1.
1.
1.
1.
L
L
L
L




i
i
i
i
đ
đ
đ

ù
ù
ù
ng
ng
ng
ng
bi
bi
bi
bi
ế
ế
ế
ế
n
n
n
n
t
t
t
t




m
m
m

á
á
á
á
c
c
c
c
lu
lu
lu
lu




t
t
t
t
chung
chung
chung
chung
c
c
c
c



i
i
i
i
Khiquyếtđịnhcódùngbiếntạ
m
hoặckhông,bạnnênsuynghĩvề2câuhỏi:
Bạncódùngbiếnđóítnhấthailần?
Tínhđọcđượccủa
m
ãcótăngđángkểkhông?
Nếuítnhất
m
ộtcâutrảlờilàcó,thìnêndùngbiếntạm.Cònkhông,vứtnóđivàtổhợp
cáchà
m
lại(nếucần).
17.
17.
17.
17.
Vi
Vi
Vi
Vi
ế
ế
ế
ế
t

h
à
à
à
à
m
m
m
m
c
c
c
c
ó
ó
ó
ó
s
s
s
s




n
n
n
n
Mộtsốnơiphổbiến

Class27K0A

DepartmentOfInformationTechnology
6
6
6
6
Dormitory204.B518:20
PM
April
7,
2006
Lạicó
m
ộtsốngườicốgắngviếtlạicáchà
m
PHPthôngdụngthayvìđihọcvềhà
m
đó
trongcáctàiliệuPHPcungcấp.
Cóítnhất2lídođểkhôngnênlà
m
điềunày.Thứnhất,vàtrênnhất,nólà
m
chonhững
ngườiđọc(vàsửa)chươngtrìnhcủabạnkhóhiểuvàcả
m
thấycóquánhiềuhà
m
dưthừa.Họ

1.
Tr
Tr
Tr
Tr
á
á
á
á
nh
nh
nh
nh
vi
vi
vi
vi
ế
ế
ế
ế
t
t
t
t
l
l
l
l


m
c
c
c
c
ó
ó
ó
ó
s
s
s
s




n
n
n
n
Hãyđươngđầuvớinó.Đôikhithậtlàkhóđểtránhchuyệnnày.Trướctiên,
m
ộtlậptrình
viênkhôngthểtheokịpcáchà
m
củaPHPngayđược.Vàaicóthờigian
m
àtracứu.Tạisao
khôngviếtlạichokhoẻ?

ãnguồn
m
ởcủaPHP,bạncóthểtì
m
đượccác

m
dongườidùngđịnhnghĩatrướckhinóđượcthê
m
vàoPHP(thídụnhưhà
m

m
phầntử
khácnhaugiữahai
m
ảng).Điềunàykhôngcónghĩalàbạnphảihiệuchỉnhlại
m
ã(Thisdoesn't
necessarilymeanthatyoushouldhavetocorrectthecode don'tunderstand)
16.
16.
16.
16.
Kh
Kh
Kh
Kh
ô
ô

ph
ph
ph
ph




n
n
n
n
server
server
server
server
v
v
v
v
à
à
à
à
client
client
client
client
Vàilậptrìnhviêncốkếtnốicảchươngtrìnhvớinhau,nghĩalàghépchung
m

API
API
API
Khimuốntáchbiệtphầnkhách-chủ,bạncóvàilựachọn.Mộtcáchlàviếtnhữnghà
m
hiểnthịnộidunglinhđộngvàđặtchúngđúngchỗtrongtrangweb.
Thídụdướiđâyminhhoạđiềunày:
index.php
index.php
index.php
index.php
-phầnkhách
returnstrlen($str);
}
?>
HTML
HTML
HTML
HTML
<
?phpinclude_once("site.lib");?>
<
html
>
<
head
>
<
title
>

7
7
7
Dormitory204.B518:20
PM
April
7,
2006
site.lib
site.lib
site.lib
site.lib
-phầnchủ
Nhưbạnthấytrongthídụtrên,táchbiệtkháchchủlà
m
tăngtínhdễđọctrongchương
trìnhcủabạn.Mộtlợiíchkháclà
m
ộtkhibạnđãcócáchà
m
APIhiểnthịnộidung,bạncóthể
đểchothiếtkếviênthamgiathayđổibốcục
m
àkhôngcầnsửa
m
ãchươngtrình.
1.1.
1.1.
1.1.
1.1.

a
a
h
h
h
h
à
à
à
à
m
m
m
m
API
API
API
API
Tươngđốisángsủa

Nhanh,hầunhưkhônglãngphíthờigian(overhead)
1.2.
1.2.
1.2.
1.2.
B
B
B
B


<
?phpprint_body();?
>
<
/td
>
<
/tr
>
<
/table
>
<
/body
>
<
/html
>
<?php
$dbh=mysql_connect("localhost","khoa","pass")
ordie(sprintf("KhongtheketnoidenMySQL[%s]:%s",
mysql_errno(),mysql_error()));
@mysql_select_db("MainSite")
ordie(sprintf("KhongthechonCSDL![%s]:%s",mysql_errno(),
mysql_error()));
$sth=@mysql_query("SELECT*FROMsite",$dbh)
ordie(sprintf("Khongthethuchientruyvan[%s]:%s",
mysql_errno(),mysql_error()));
$site_info=mysql_fetch_object($sth);
functionprint_header(){

7,
2006
Khôngsángsủavàdễdàngbằnghệthống
m
ẫu(templatesystem)

Cần
m
ộtítkiếnthứcPHPđểsửa
m
ẫu
2.
2.
2.
2.
H
H
H
H




th
th
th
th




m
ẫu.Nghĩalà,có
m
ộtsố
đánhdấunộidungsauđódùngchươngtrìnhphântích,thaythếcácđánhdấuđóbằngthông
tincầnthiết.
Thídụ,bạncóthểtạo
m
ộttậptinnhưthếnày:
Sauđócóthểviếtchươngtrìnhphântáchtậptin,thaythếcácthôngtintrongdấucách
%%bằngcácthôngtinthíchhợp.
Ghichú:
m
ộtlớphỗtrợhệthốngkhuôn
m
ẫukhátốtlàlớpFastTemplate,cóở
www.thewebmasters.net
2.1.
2.1.
2.1.
2.1.
Ư
Ư
Ư
Ư
u
u
u
u
đ

h




th
th
th
th




ng
ng
ng
ng
khu
khu
khu
khu
ô
ô
ô
ô
n
n
n
n
m

c
đ
đ
đ
đ
i
i
i
i




m
m
m
m

Chậ
m
hơn,bạncầnphântáchtậptinkhuôn
m
ẫu,sauđóxuấtra
Việchiệnthựcphứctạphơn
15.
15.
15.
15.
D
D

u
u
u
u
tr
tr
tr
tr
ú
ú
ú
ú
c
c
c
c
l
l
l
l




i
i
i
i
th
th

Dùngcáccấutrúclỗithờicóthểlà
m
chậ
m
chươngtrìnhcủabạn,cũngnhưlà
m
chonó
trởnênkhóhiểu.Ngườiđọccácchươngtrìnhcủabạncóthểkhôngquenvớicáchà
m
lỗithời
củaPHP.Tuynhiên,khipháthiện
m
ộtđoạn
m
ãlạchậu,bạnđừngnghĩrằngcầnphảithaythế
nó.Chỉcầnchắcchắnrằngbạnsẽkhôngdùngnóchocácchươngtrìnhviếttrongtươnglai.
Mộtthídụvềcấutrúclỗithời,
m
ànhiềungườicóvẻcốnắ
m
lấy,làcúpháp
beginControlStructure
beginControlStructure
beginControlStructure
beginControlStructure

endControlStructure

>
<
tdwidth="25%">%%PAGE_LINKS%%</td
>
<
td>%%PAGE_CONTENT %%</td
>
<
/tr
>
<
/table
>
<
/body
>
<
/html
>
<?
PHPprogrammingdynamicwebforewreybody
21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughes
NGUYENANHKHOA

Class27K0A

DepartmentOfInformationTechnology
9
9
9

m
tratàiliệukhibạncóýmuốn
m
ởrộngtínhnăngnàođócủaPHP.Theocáchnày,bạnsẽkhôngphảiviếtlạicáchà
m
cósẵn.
T
T
T
T




ng
ng
ng
ng
k
k
k
k
ế
ế
ế
ế
t
t
t
t

sai
sai
sai
sai
h
h
h
h
à
à
à
à
m
m
m
m
printf()
printf()
printf()
printf()




Á
Á
Á
Á
p
p

ĩ
ĩ
ĩ
ĩ
a
a
a
a




Thi
Thi
Thi
Thi
ế
ế
ế
ế
u
u
u
u
t
t
t
t
à
à

ngu
ngu
ngu
ngu




n
n
n
n




D
D
D
D
ù
ù
ù
ù
ng
ng
ng
ng
qu
qu

t
t
t
t




m
m
m
m




Vi
Vi
Vi
Vi
ế
ế
ế
ế
t
t
t
t
l
l

m
m
m
m
c
c
c
c
ó
ó
ó
ó
s
s
s
s




n
n
n
n




Kh
Kh

t
t
t
t
ph
ph
ph
ph




n
n
n
n
kh
kh
kh
kh
á
á
á
á
ch/ch
ch/ch
ch/ch
ch/ch



c
c
c
c




u
u
u
u
tr
tr
tr
tr
ú
ú
ú
ú
c
c
c
c
l
l
l
l



break;
}
}
?>
PHPprogrammingdynamicwebforewreybody
21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughes
NGUYENANHKHOA

Class27K0A

DepartmentOfInformationTechnology
10
10
10
10
Dormitory204.B518:20
PM
April
7,
2006
PHẦN2–LỖINGHIÊMTRỌNG










n
th
th
th
th




c
c
c
c
á
á
á
á
c
c
c
c
quy
quy
quy
quy
ướ
ướ
ướ
ướ
c

m
ột
quyướcđặttêntồi.Tôiđãtiếpquảnnhiềudựán
m
àtrongđótôiphảibỏrarấtnhiềuthờigiờ
chỉđểhiểuchươngtrình,dolậptrìnhviênđặttêncácbiếnlà$fredvà$barneythaycho
$emailvà$name.Tôiđangđềcậpđến
m
ộtdựán
m
àngườilậptrìnhcũđãquyếtđịnhđưavào
toànbộ
chươngtrình
m
ộtkiểuđặttênkìlạ(aFlinstonesnamingtheme),khôngphảitôiđùa
đâu.
Cáchbạnđặttênbiếnvàhà
m
làtrungtâ
m
củaviệcxâydựng
m
ộtchươngtrìnhdễđọc.
Cónhiềulậptrìnhviênphạ
m
lỗikhiđặttênbiếnvàhà
mm
ànó:
quádàihoặcquángắn
khôngliênquanđếnngữcảnh

ế
ế
ế
ế
n
n
n
n
1.1.
1.1.
1.1.
1.1.
C
C
C
C
á
á
á
á
ch
ch
ch
ch
vi
vi
vi
vi
ế
ế

TrongPHP,tênbiếncócáchviếtphânbiệt,nghĩalà$uservà$Userlàhoàntoànkhác
nhau.Vàingườidùnglợidụngđiể
m
nàyđểđặtcácbiêncùngtênnhưngkháccáchviết.Đâylà
m
ộtthóiquentồitệ.Cáchviếtkhôngbaogiờnêndùngđểphânbiệtcácbiếnkhácnhau.Mỗi
tênbiến,trongcùngtầ
m
vực(scope),nêncólàtuyệtđốiduynhất.
1.2.
1.2.
1.2.
1.2.
T
T
T
T
ê
ê
ê
ê
n
n
n
n
qu
qu
qu
qu
á

T
T
ê
ê
ê
ê
n
n
n
n
qu
qu
qu
qu
á
á
á
á
d
d
d
d
à
à
à
à
i
i
i
i


t
t
t
t
Dướiđâylànhữngthídụtốtvềtênbiến
$username='phanthanhkieu';
$password='bimat';
$teachers=array('Sadlon',
'Lane',
'Patterson',
'Perry',
'Sandler',
'Mendick',
'Zung');
foreach($teachersas$teacher);
PHPprogrammingdynamicwebforewreybody
21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughes
NGUYENANHKHOA

Class27K0A

DepartmentOfInformationTechnology
11
11
11
11
Dormitory204.B518:20
PM
April

u
u
u
u
Dướiđâylànhữngthídụ(phóngđại)vềnhữngtênbiếntồi
$username_cua_csdl='SINHVIEN';
$guMbi='bimat';//forthe$password
$tentruocdo_cua_giaovien=array('Sadlon',
'Lane',
'Patterson',
'Perry',
'Sandler',
'Mendick',
'Zung');
foreach($tentruocdo_cua_giaovienas$TeaChER);
2.
2.
2.
2.
Đặ
Đặ
Đặ
Đặ
t
t
t
t
t
t
t

2.1.
2.1.
2.1.
D
D
D
D
ù
ù
ù
ù
ng
ng
ng
ng
độ
độ
độ
độ
ng
ng
ng
ng
t
t
t
t




ặcdùvẫnchuyểntảiđược
m
ụctiêucủahàm,nhưngnóngănngườitađọc
m
ộtcáchtrôichảy.
Hãysửdụngđộngtừ!
13.
13.
13.
13.
Kh
Kh
Kh
Kh
ô
ô
ô
ô
ng
ng
ng
ng
suy
suy
suy
suy
ngh
ngh
ngh
ngh

&
&
SQL
SQL
SQL
SQL
Sốcáchngườitatruycậpcơsởdữliệu(CSDL-database)vàlấykếtquảnhiềuđến
m
ức
thựcsựngạcnhiên.Nhữngthídụtôiđãgặpbaogồ
m
nhữngtổhợplệnhifvàvònglặpdo
while,cáccâugọinhiềulần,vàcáchà
m
sql_result()trongvòngfor.
Nhữngngườinàycó
nghĩ
họđanglà
m
gìkhông?
Việcviếtcác
m
ãtrật-hoặc-trúng(hit-or-misscode)chứngminhsựthiếutậptrung.
Nhữngcánhânđóxácđịnhnỗlựccủahọdùngđểhoànthànhcôngviệchơnlàđểhoànthành
đúng
côngviệc,kếtquảlàlà
m
chocácôngchủquăngthờigianvàtiềnbạcrađường.
PHPprogrammingdynamicwebforewreybody
21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughes

vềCSDL

DùngsaiSQL:khônglấynhữngthứbạncần
DùngPHPđểsắpxếpkếtquả
1.
1.
1.
1.
D
D
D
D
ù
ù
ù
ù
ng
ng
ng
ng
sai
sai
sai
sai
c
c
c
c
á
á

}
do{
print"$mautin[0]:$mautin[1]\n<br>\n";
}while($mautin=sql_fetch_row($truyvan));
Ch
Ch
Ch
Ch
ú
ú
ú
ú
ý
ý
ý
ý
:
:
:
:
Ởtrên,vàcácthídụsaunữa,$truyvandiễntảhandlehoặcpointerđến
m
ộttập
kếtquảtruyvấn Nóicáchkhác,
m
ộttruyvấnđãđượcgửivà
m
ộttậpkếtquảđãđượctrảvề.
Cácthídụsẽnóivềvấnđềthaovớivớikếtquảtrảvề.


m
tra
tra
tra
tra
tr
tr
tr
tr
ườ
ườ
ườ
ườ
ng
ng
ng
ng
h
h
h
h




p
p
p
p
kh


y:
y:
y:
y:
c
c
c
c
á
á
á
á
ch
ch
ch
ch
l
l
l
l
à
à
à
à
m
m
m
m
sai

T




b
b
b
b




v
v
v
v
ò
ò
ò
ò
ng
ng
ng
ng
l
l
l
l


21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughes
NGUYENANHKHOA

Class27K0A

DepartmentOfInformationTechnology
13
13
13
13
Dormitory204.B518:20
PM
April
7,
2006
Tạisaovòngdo while
do while
do while
do while
bịcoinhưthôtục,xấuxa(nasty)?

Trongthídụtrên,chỉcó1lệnhinkếtquảtrongvònglặp.Hãytưởngtượng,nếu
có10lệnh,ngườiđọcmãphảitìmđiềukiệnwhile
sau
cáccâulệnhđó.Mộtcông
việcphiềntoái.
ĐiềukiệnWhilebắtđầucấutrúcthườngxuyênhơnlàkếtthúc.Mộtnhànghiên
cứusẽphảicẩnthậnhơnđểkhôngnhầmlẫnđiềukiệnwhile
cuối
vớiđiềukiện

th




g
g
g
g




n
n
n
n
g
g
g
g
à
à
à
à
ng
ng
ng
ng
v

sql_fetch_row()
sql_fetch_row()
sql_fetch_row()
sql_fetch_row()
nóirằng"
Tôi

m
thấy
0dòngtrongtậpkếtquả.Điềunày
nghĩalà

0kếtquả
”(Ifoundnorowsintheresultset.Thismustmeanthat
therearenone.)
sql_num_rows()
sql_num_rows()
sql_num_rows()
sql_num_rows()
nóirằng“
Sốdòngtrongkếtquả

0
”(Thenumberofrowsin
theresultsetis0).
Nhưngđiềuđóthựcsựtạonênsựkhácbiệtnào?
Xétcùng
m
ộtsựsosánh,nhưngbâygiờlàtrongngữcảnhcủađiềukiệnifvàcủabiểu
thức,trongđoạnlệnhgiả(Pseudo-code):

}:
}:
olấy1dòngtrongtậpkếtquả
onếukếtquảrỗng,gáncho$mautingiátrịzero(0);0cógiátrịlogiclà
False,dođó!(0)
=
True;inthôngbáolỗi.
onếukhôngrỗng,lấydòngđầutiênvàgánnóvào$mautin;$mautin
khôngphảilàzerovàcógiátrịlàTrue.Dođó!(True)
=
False,vàtiếptục
vớicấutrúcdo while.
*
*
*
*
if((sql_num_rows($truyvan)<=
if((sql_num_rows($truyvan)<=
if((sql_num_rows($truyvan)<=
if((sql_num_rows($truyvan)<=
0)
0)
0)
0)
{
{
{
{
Print
Print

NGUYENANHKHOA

Class27K0A

DepartmentOfInformationTechnology
14
14
14
14
Dormitory204.B518:20
PM
April
7,
2006
1.4.
1.4.
1.4.
1.4.
Khi
Khi
Khi
Khi
m
m
m
m
à
à
à
à

kh
kh
ô
ô
ô
ô
ng
ng
ng
ng
h
h
h
h




tr
tr
tr
tr




sql_num _row()
sql_num _row()
sql_num _row()
sql_num _row()



y
y
y
y
k
k
k
k
ế
ế
ế
ế
t
t
t
t
qu
qu
qu
qu




:
:
:
:

á
á
ch
ch
ch
ch
c
c
c
c
ó
ó
ó
ó
í
í
í
í
ch
ch
ch
ch
Vấnđềthứhaitrongđoạn
m
ãnàylànódùngsql_fetch_row()đểlấytậpkếtquả.Hà
m
sql_fetch_row()
chỉ
trảvề
m

củanhàpháttriển,hà
m
nàocólợihơn?Mảngdùngchuỗigiúpchongười
đọchiểuđượcbạnđanglấycáigìchỉthôngquaviệcđọc
m
ã,nhưthídụđúngdướiđây:
<?php
if(sql_num_rows($truyvan)<=0){
print"Motloidaxayra:Khongcomautinnao!";
exit;
}
while($mautin=sql_fetch_array($truyvan)){
print"$mautin[name]:$mautin[phone_number]\n<br>\n";
}
?>
1.6.
1.6.
1.6.
1.6.
Khi
Khi
Khi
Khi
n
n
n
n
à
à
à

d
d
d
ù
ù
ù
ù
ng
ng
ng
ng
Tôikhôngthựcsựlàfancủathesql_fetch_row().Tuynhiên,có
m
ộttìnhhuống
m
àdùng
nókhônggiả
m
khảnăngdễđọc:khingườidùngđịnhnghĩacâutruyvấn.
Cácthídụchođếnlúcnàyđềuđềcậpđếnnhữngcâutruyvấnđượcbiếttrước.Đôikhi
bạnđểchongườidùngtựđịnhnghĩacâutruyvấn.Trườnghợpnàybạnsẽkhôngbiếtcáccột
trongkếtquả.
Dođó,dùnghà
m
sql_fetch_row()kè
m
vớicount()sẽxửlíhiệuquảcáccộttrong
m
ột
hàng:

kh
kh
kh
ô
ô
ô
ô
ng
ng
ng
ng
l
l
l
l




y
y
y
y
nh
nh
nh
nh







n
n
n
n
PHPprogrammingdynamicwebforewreybody
21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughes
NGUYENANHKHOA

Class27K0A

DepartmentOfInformationTechnology
15
15
15
15
Dormitory204.B518:20
PM
April
7,
2006
Nhưlàvấnđềcủathựchành,đơngiảnlàsẽsailầ
m
khidùngPHPxửlí
m
ọidòngcủa
CSDL.TôiđãbắtgặpngườitadùngPHPđểchạy
m

SQL
SQL
)đượcthiếtkếđặcbiệtđể
truyvấnvàlấydữliệutừcácbảngcủabạn.Ýtưởnglàdùngnóđểlọcdữliệukhôngcầnthiết,
đểlạicácthôngtinliênquanchoPHPxửlí.
Nếubạnlấynhiềudữliệuhơncầnthiết,đólàdấuhiệuchắcchắnrằng
m
ãSQLđang
dùngchưađượctốiưuhoá.
2.1.
2.1.
2.1.
2.1.
M
M
M
M




nh
nh
nh
nh
đề
đề
đề
đề
WHERE

?>
Đoạn
m
ãtrênchưađượctốiưu:chúngtađangdùngPHPđểtì
m
kiế
m
trongtoànbộ
CSDL!NếunhưđiềunàykhôngquantrọngđốivớicácCSDLnhỏ,khikíchthướcCSDLtănglên
bạnsẽcả
m
thấy
m
ộtcúđấ
m
nặngnềvềhiệunăng.
Lờigiảirấtđơngiản:sửacâuSQLđểchứa
m
ệnhđềWHERE:
$strsql="SELECT*FROMSINHVIEN";
$strsql.="WHEREMASV='511203008'";
PHPprogrammingdynamicwebforewreybody
21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughes
NGUYENANHKHOA

Class27K0A

DepartmentOfInformationTechnology
16
16

D
D
D
D
ù
ù
ù
ù
ng
ng
ng
ng
PHP
PHP
PHP
PHP
s
s
s
s




p
p
p
p
x
x

Nhiềungườilấydữliệuởtìnhtrạngkhôngcóthứtự,nhưngrồiđoạn
m
ãPHPtiếptheolại
sắpthứtựchúng.NênchớrằngsắpxếpbằngSQLnhanhhơnPHP.
DùngcúphápORDERBYcủaSQLđểsắpxếpthayvìhà
m
ksort()củaPHP.
Thídụdướiđâydùngksort()đểsắpxếptheotên:
$strsql="SELECTname,email,phoneFROMsome_table";
$strsql.="WHEREnameISLIKE'%baggins'";
$truyvan=@sql_db_query($strsql,"samp_db",$ketnoi);
if(!$truyvan){
die(sprintf("Error[%d]:%s",
sql_errno(),sql_error()));
}
while($mautin=@sql_fetch_array$truyvan)){
$matches[$mautin[name]]=array($mautin[email],
$mautin[phone]);
}
ksort($matches);
Nhưngtạisaokhôngsắpxếpdữliệu
ngayvàolúc
nóđượcđịnhnghĩa?Nógiúpchúngta
đỡphảiduyệtquatậpkếtquảlầnthứhai.
Dovậy,bỏhà
m
ksort()rakhỏichươngtrìnhtrênvàthayđoạn
m
ãSQLbằngđoạndưới
đây,códùngdùngcúphápORDERBY:





m
m
m
m
l
l
l
l




i
i
i
i
Tôiđãthấynhiềuchươngtrìnhthiếu
m
ộtlượngkiể
m
tralỗiđầyđủ.Nguyênnhânphần
lớnlàdolậptrìnhviênkhôngdànhthờigianđểlên
m
ộtkếhoạchthíchhợpchochươngtrình
của
m

i
i
i
đ
đ
đ
đ
i
i
i
i




u
u
u
u
t
t
t
t




nh
nh
nh

2006
Kiể
m
trakếtquảlờigọihà
m

Kiể
m
trakếtquảlờigọihệthống
Đặt
m
ứcerror_reportinglàE_ALLtrongtậptinphp.ini
1.1.
1.1.
1.1.
1.1.
Ki
Ki
Ki
Ki




m
m
m
m
tra
tra

i
i
i
i
g
g
g
g




i
i
i
i
h
h
h
h
à
à
à
à
m
m
m
m
Mỗikhibạngọi
m

?>
12.
12.
12.
12.
Thi
Thi
Thi
Thi
ế
ế
ế
ế
u
u
u
u
s
s
s
s




ki
ki
ki
ki


m
tralỗikhôngnênthựchiện
saukhi
viếtchươngtrình.Sựthiếusóttrongtầ
m
nhìntrướccóthểdẫnđếnnhữnglỗinghiê
m
trọng,
khôngnhữnggâyrakếtquảsai
m
àthậ
m
chícònlà
m
hỏnghệthống(evencauseyoursystem
tocrash)!
1.
1.
1.
1.
Mong
Mong
Mong
Mong
đợ
đợ
đợ
đợ
i
i





t
t
t
t
Mọichươngtrìnhđềucókhảnănghưhỏngtrongnhữngtìnhhuống
sai
.Đểgiả
m
thiểu
nhữngrủironhưthế,bạncầnlênkếhoạchđể:
Kiể
m
trakếtquảlờigọihà
m
Kiể
m
trakếtquảlờigọihệthống
Đặt
m
ứcerror_reportinglàE_ALLtrongtậptinphp.ini
1.1.
1.1.
1.1.
1.1.
Ki
Ki





l
l
l
l




i
i
i
i
g
g
g
g




i
i
i
i
h
h

=
$j
=
0.
<?php
mt_srand((double)microtime()*10000000);
functiondo_math($a,$b){
return(($a-$b)*2)/mt_rand();
}
for($i=5,$j=-5;$i>-5;$i ,$j++){
print$j/do_math($i,$j)."\n";
}
?>
1.2.
1.2.
1.2.
1.2.
Ki
Ki
Ki
Ki




m
m
m
m
tra


i
i
i
i
g
g
g
g




i
i
i
i
h
h
h
h




th
th
th
th


đềuvậnhànhđúng.
Mộtthídụtuyệtvờilàviệckiể
m
trađầuracủa
m
ộtlờigọihệthốngkhidùnghà
m
sql_connect().Xácnhậnđầurađểkiể
m
traliênkếtđếnCSDLlàđúng.Là
m
saiđiềunàycóthể
dẫnđếncáctruyvấnhỏngvà
m
ấtdữliệutrongkhithậ
m
chíbạnkhôngbiết.
$ketnoi=@sql_connect($host,$user,$pass);
if(!$ketnoi){
die(sprintf("Error[%d]:%s",sql_errno(),sql_error()));
}
1.3.
1.3.
1.3.
1.3.
Đặ
Đặ
Đặ
Đặ
t

E_ALL
trong
trong
trong
trong
t
t
t
t




p
p
p
p
tin
tin
tin
tin
php.ini
php.ini
php.ini
php.ini
Hãyđả
m
bảobạncấuhìnhvới
m
ứcđộbáolỗicaonhấtcóthể.Nếubạnkhôngđặtnóở

-7713.5
?
-4702.5
-488.5
-928.5
-1394.75
2.
2.
2.
2.
B
B
B
B




qu
qu
qu
qu




n
n
n
n

ch
ch




nh
nh
nh
nh
PHPthườnghiểnthịcáclỗithựcthi(executionerrors)ratrìnhduyệt,ngănbạnxoá
(suppress)hoặcbắt(capture)nó.Tuynhiên,vớiPHP4bạnđãcóthểbắtlỗibằnghà
m
set_error_handler().

m
set_error_handler()cóthểđượcdùngđểghilạicáclỗixảyravớichươngtrìnhcủa
bạn.Thayvìlà
m
phiềnngườidùngvớicácthôngbáolỗi,bạncóthểghilạichoriêngbạn,bằng
cáchđặt
m
ộthà
m
quảnlílỗituỳchỉnh(acustomerrorhandlingfunction).
PHPprogrammingdynamicwebforewreybody
21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughes
NGUYENANHKHOA

Class27K0A

//function.
functionerror_handler($type,
$message,
$file=__FILE__,
$line=__LINE__)
{
error_log("$message,$file,$line",3,'error_file');
if($type&E_ERROR){
print'Anerroroccurred,ithasbeenlogged
anditwillbeaddressed.';
exit;
}
}
set_error_handler('error_handler');
?>
11.
11.
11.
11.
L
L
L
L




m
m
m

i
i
i
t
t
t
t
ượ
ượ
ượ
ượ
ng
ng
ng
ng
(H
(H
(H
(H
Đ
Đ
Đ
Đ
T)
T)
T)
T)
Môhìnhhướngđốitượnglà
m
ộtkháiniệ

ãhỗtrợHĐTcủaPHPkhôngđượctinhchỉnhvàcũngkhônghiệuquả.Nghĩalànếu
bạndùng
m
ôhìnhHĐTtrongPHP,bạncóthểlà
m
chậ
m
chươngtrìnhđángkể.
Nóichung,
m
ộtứngdụngdùngHĐTsẽchậ
m
đi,cũngnhưlàbạndùngeval()thìsẽ
chậ
m
hơnlàdùng
m
ãbìnhthường.ĐểminhhoạđầyđủhơnviệcHĐTcógìđókhôngtốt,tôi
đãtừngphảidùngnhữngtínhnăngvàkháiniệ
m
caocấpcủaPHP,
m
ộtvàitrongsốđóthậ
m
chíchưacótàiliệuchỉdẫn.
1.
1.
1.
1.
Ch


l
l
l
l
à
à
à
à
m
m
m
m
g
g
g
g
ì
ì
ì
ì
m
m
m
m
à
à
à
à
kh

Đ
T?
T?
T?
T?
NếubạnchuyểnsangPHPtừcácngônngữnhưJavahayC++(nơibạnbạnthựcsự
khôngthểtạocácchươngtrìnhphứctạp
m
àkhôngdùngcáctínhnăngHĐT),việcbỏquakhả
năngHĐTcủaPHPcóthểsẽkhókhăn.Dùsao,tôivẫncóthểtrấnanbạnlàcácchươngtrình
rất
m
ạnh
cóthể
đượcviết
m
àkhôngdùng
m
ấtcứkháiniệ
m

m
ôhìnhHĐTnào(PHPđược
viếtbằngC,ngônngữkhônghỗtrợHĐT).
Đểdànhchonhữngaikhôngquenvớikĩnăngphi-HĐT,dướiđâylàvàikĩthuậtđểtạo
chươngtrìnhcótínhkếtdínhvàdễ
m
ởrộng
m
àkhôngdùng

m
ộttậptin
1.1.
1.1.
1.1.
1.1.
T
T
T
T




o
o
o
o
m
m
m
m




t
t
t
t

return(1.7);
}
//TheAPIislayer2
//doublecalculate_mortgage_rate(intmoney,inttime,intmonth)
//Calculatethemortgagerategiventhe
//thetotalmoney,timeitspaidoverand
//theintervals
functioncalculate_mortgage_rate($money,$time,$month){
$rate=_mort_find_interest_rate($money)/100;
$money/=($time/$month);
return($rate*$money)+$money;
}
?>
CalcMortgage.php
<?php
//Theactualapplicationislayer3
//$money,$timeand$periodaresubmitted
//fromaform
include_once'MortgageRate.php';
$price=calculate_mortgage_rate($money,$time,$period);
print"Your$periodmonthcostis$price";
?>
PHPprogrammingdynamicwebforewreybody
21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughes
NGUYENANHKHOA

Class27K0A

DepartmentOfInformationTechnology
21



t
t
t
t
tr
tr
tr
tr
ì
ì
ì
ì
nh
nh
nh
nh
t
t
t
t




t
t
t
t

tu
tu
â
â
â
â
n
n
n
n
th
th
th
th




Mộttrongnhữngvấnđềchínhtrongbấtcứ
m
ộtdựánlớnnàolàsựxungđộtvềtên.Các
lớpcóthểphânđoạntên.Dođó,cáclớpkhácnhaucóthể:
Đượcgán
m
ộtthuộctínhvớitêngiốngnhau
Chứacácphươngthứcvớitêngiốngnhau
Thídụ,lớpPhillipsvàlớpNormalcóthểcùngcóphươngthứctênscrewdriver.
Nóichung,trướckhibắtđầu
m
ộtdựánlớnnào,bạnnêncó

á
c
c
c
c
ý
ý
ý
ý
ni
ni
ni
ni




m
m
m
m
chung
chung
chung
chung
v
v
v
v
à

p
tin
tin
tin
tin
Nhó
m
cáchà
m
APItươngtựvàochung
m
ộttậptincũnggiốngnhưnhó
m
cácphương
thứctươngtựvào
m
ộtlớp.Cốgắngtưởngtượng
m
ỗitậptinbạntạolà
m
ộtlớp,
m
ỗihà
m
trong
đólà
m
ộtphươngthức.Bằngcáchnày,cáchà
m
củabạnsẽcóđịnhnghĩavàcấutrúcsángsủa.



ng
ng
ng
ng
m
m
m
m




i
i
i
i
th
th
th
th




,
,
,
,

i
i




u
u
u
u
độ
độ
độ
độ
Đểtôilà
m
sángtỏ
m
ộtviệc.Tôikhôngphảiđangcốbiệnhộđểbạntừbỏ
hẳn
HĐTtrong
PHP.Đúngra,tôichỉđangcốcảnhbáobạnđừngnêndùngPHPnhưJavahayC++,nơi
m
à
HĐTcóthểdùngthoải
m
ái.
Hãycẩnthậnđánhgiálợivàhạitrướckhibạndùng
m
ộttiếpcậnHĐTvớiPHP.

Bi
Bi




u
u
u
u
th
th
th
th




c
c
c
c
Ch
Ch
Ch
Ch
í
í
í
í

m
ớicủaPHPcóthểlà
m
như
sau:
<?php
$URL="";
$fp=@fopen($URL,"r");
if(!$fp){
die("Cannotopenwebsite$URL!");
}
while($line=@fgets($fp,1024)){
$data.=$line;
}
@fclose($fp)
orwarn("Cannotclosewebsitehandle,$URL");
$data=ereg_replace("[a-z]","[A-Z]",$data);
print$data;
?>
Tuynhiên,sẽphíthờigiankhibạndùnghà
m
ereg_replace()(chậ
m
hơn)đểlà
m
công
việc
m
àstrtoupper()(nhanhhơn)cóthểthựchiệntốthơn.
$data=strtoupper($data);

á
á
c
c
c
c
h
h
h
h
à
à
à
à
m
m
m
m
c
c
c
c




n
n
n
n

việcvớicácchuỗilớn.
9.
9.
9.
9.
L
L
L
L




p
p
p
p
tr
tr
tr
tr
ì
ì
ì
ì
nh
nh
nh
nh
PHP

ô
n
n
n
n
ng
ng
ng
ng




kh
kh
kh
kh
á
á
á
á
c
c
c
c
NhiềungườibắtđầuPHPsaukhiđãthuầnthục
m
ộtngônngữkhácnhưPerl,C,Javahay
ASP.Là
m

"1
d
d
d
d
ò
ò
ò
ò
ng"
ng"
ng"
ng"
PHPlà
m
ộtngônngữkhôngthựcsựtốiưuchocáchtiếpcận1dòngkhiviếtchươngtrình.
Thayvàođó,nó
m
ởrộngcáctậphà
m
phứctạpvàcácbiểuthứcchínhquytheo
m
ộtđịnh
dạngcócấpbậchơn
M
M
M
M
ã
ã

ã
ã
l
l
l
l




nh
nh
nh
nh
PHP)
PHP)
PHP)
PHP)
<?php
$fp=@fopen('php://stdin','r');
if(!$fp){
die('CannotopenSTDIN');
}
while($line=@fgets($fp,1024)){
list($name,$quote)=explode(':',$line);
$quotes[$name]=$quote;
}
foreach($quotesas$name=>$quote){
print"$name:";
printimplode("",array_reverse(preg_split('//',

ng
ng
ng
d
d
d
d
ù
ù
ù
ù
ng
ng
ng
ng
c
c
c
c
á
á
á
á
c
c
c
c
h
h
h


m
sẵncógiúpthaythếcácđoạn
m
ãdài.NếubạnđếnvớiPHPtừC,tôikhuyênbạnnênđọc
quatàiliệutrướckhiviết
m
ộtkhốilệnhđểxemPHPcósẵnhà
m
nàogiúpcuộcsốngcủabạn
dễdànghơnkhông.
Đổ
Đổ
Đổ
Đổ
i
i
i
i
t
t
t
t
ê
ê
ê
ê
n
n
n

đã
đã
đã
c
c
c
c
ó
ó
ó
ó
Tôiđãthấyngườitađổitêncáchà
m
đãcócủaPHPchỉđểgiúphọdễnhớhơn.Điềunày
khôngchỉlà
m
chậ
m
chươngtrình,
m
àlà
m
chođoạn
m
ãkhóđọchơn.
D
D
D
D
ù

t
ượ
ượ
ượ
ượ
ng
ng
ng
ng
qu
qu
qu
qu
á
á
á
á
m
m
m
m




c
c
c
c
PHPkhôngphảilà

ô
ng
ng
ng
ng
tin
tin
tin
tin




đâ
đâ
đâ
đâ
u?
u?
u?
u?
May
m
ắnlàcórấtnhiềuthôngtinvềviệc
làmthếnào
đểlậptrìnhPHP.Vàinơitốtnhất

Zend.combảngốccủabàiviếtnàylàởđó

ProfessionalPHP





n
n
n
n
th
th
th
th




c
c
c
c
đầ
đầ
đầ
đầ
y
y
y
y
đủ
đủ

t
t
t
t
Nhữngngườidùngkhôngphảilúcnàocũnglà
m
việcvớihệthốngcủachúngta.Vớitư
cáchlàlậptrìnhviên,tráchnhiệ
m
củachúngta
làthiếtkế
m
ộthệthốngantoàn,dễchịucó
thểlà
m
việcđượcchungvớilỗicủangườidùng.
Khithiếtkếhệthống,bạnphảiđặt
m
ìnhvàovịtríngườidùng.Xemxétnhữngchỗhọcó
thểgặplỗivàtì
m
kiế
m
nhữnglỗhổngbảo
m
ậttiề
m
tàng.Rồibạnthiếtkếchươngtrìnhcókhả
năngsửachữalỗinàyvàlấpcáclỗhổngbảo
m

ĐỪ
NG
NG
NG
NG
BAO
BAO
BAO
BAO
GI
GI
GI
GI




TIN
TIN
TIN
TIN
NG
NG
NG
NG
ƯỜ
ƯỜ
ƯỜ
ƯỜ
I

C
Á
Á
Á
Á
CH
CH
CH
CH
M
M
M
M
Ù
Ù
Ù
Ù
QU
QU
QU
QU
Á
Á
Á
Á
NG
NG
NG
NG
KHI

U
C
C
C
C




A
A
A
A
H
H
H
H




V
V
V
V
À
À
À
À
O

H




TH
TH
TH
TH




NG
NG
NG
NG
M
M
M
M
À
À
À
À
KH
KH
KH
KH
Ô

ƯỚ
C
C
C
C
.
Khiđăngkíngườidùng.Nếubạntrôngmongcókếtquảchínhxác,luônkiểmtra
vàđảmbảobảnđăngkíđượckiểmtranhữngchỗcầnthiết.Trướctiên,cónhiều
cáchđểkiểmtramộtđịachỉe-mailhợplệ.Hơnnữa,bạnnênkiểmtratuổicủa
ngườidùngcónằmtrongphạmvithíchhợpkhông.Vớimộtsựsuyrộng,bạncó
PHPprogrammingdynamicwebforewreybody
21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughes
NGUYENANHKHOA

Class27K0A

DepartmentOfInformationTechnology
24
24
24
24
Dormitory204.B518:20
PM
April
7,
2006
thểkhẳngđịnhkháchắcchắnrằngkhôngcómộtngười200tuổinàocókhảnăng
dùngmáyvitính.
Khichấpnhậnthẻtíndụng.Mộtsốlậptrìnhviênchỉdùngnhữngthuậttoánđơn
giảnmàcóthểdễdàngbịđánhlừakhithựchiệnkiếmtrathẻtíndụng.Chỉchấp

ƯỞ
ƯỞ
ƯỞ
NG
NG
NG
NG
M
M
M
M




T
T
T
T
THU
THU
THU
THU




T
T
T

m
m
m




t
t
t
t
c
c
c
c




a
a
a
a
l
l
l
l







ng
ng
ng
ng
Mỗikhibạnđưadữliệucủangườidùngvàolờigọihệthống,bạncần
tỉnhtáokiểmtra
dữliệuđó.Đả
m
bảorằngkhôngcógìnguyhiể
m
nằ
m
trongdữliệuđócóthểlừaphỉnhhệ
thốngthựchiệnnhữnglệnhkhôngmongmuốn.PHPcungcấp
m
ộthà
m

m
điềuđó:
EscapeShellCmd()
Bấtcứkhinàobạnchuyển
m
ộtlệnhcóchứadữliệunhạycảm,trốnthoátdữliệuđó
bằnghà
m
EscapeShellCmd

<
/head
>
<
body
>
<
h1>NameLookup</h1
>
<?php
if($name){
system(EscapeShellCmd("lookup$name"));
print"
nn";
}
?>
<
formaction="<[color=blue]?phpprint$PHP_SELF;?>[/color]"
method="GET">
Enteranametolookup:
<
inputtype="text"name="name">
<
inputtype="submit"value="LookupName">
<
/form
>
<
/body
>

i
i
i
xa
xa
xa
xa
h
h
h
h
ơ
ơ
ơ
ơ
n
n
n
n
m
m
m
m




t
t
t

2.
2.
2.
Ki
Ki
Ki
Ki




m
m
m
m
tra
tra
tra
tra
đị
đị
đị
đị
a
a
a
a
ch
ch
ch

Dormitory204.B518:20
PM
April
7,
2006
m
ộtnhó
m
thưtín,haytrong
m
ộtkho
m
ãnguồnnàođó).Tuynhiên,
m
ộtbiểuthứcchínhquy
khôngđủnếubạnmuốncókếtquảchínhxác.Cóvàicáchantoànhơn
m
àbạncóthểdùng:
2.1.
2.1.
2.1.
2.1.
Ki
Ki
Ki
Ki





i
i
(socket
(socket
(socket
(socket
validation)
validation)
validation)
validation)
Mộtcáchđểkiể
m
địnhđịachỉe-mail
m
àkhôngquấyrầytrựctiếpđếnngườidùnglàtạo
m
ộtkếtnốiđếnservernhậnđượctrongđịachỉe-mail,sauđótì
m
tênđăngkícủahọ.
2.1.1.
2.1.1.
2.1.1.
2.1.1.
Ư
Ư
Ư
Ư
u
u
u

Khuy
ế
ế
ế
ế
t
t
t
t
đ
đ
đ
đ
i
i
i
i




m
m
m
m

Khôngpháthiệnđượcđịachỉbịđánhcắp.Thídụ,nếuJohnDoeđưađịachỉe-
mailcủatôi(),
m
ọithứvẫntiếnhànhbìnhthường,dùnólàđịa

m
tra
tra
tra
tra
t
t
t
t
ươ
ươ
ươ
ươ
ng
ng
ng
ng
t
t
t
t
á
á
á
á
c
c
c
c
Mộtcáchkhácđểkiể





m
m
m
m
Làcáchtốtnhấtđểkiể
m
trangườidùngcó
m
ộtđịachỉe-mailhợplệ
2.2.2.
2.2.2.
2.2.2.
2.2.2.
Khuy
Khuy
Khuy
Khuy
ế
ế
ế
ế
t
t
t
t
đ

ộtđịachỉtạ
m
ởHotmailhayNetaddressvàsau


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status