0
  1. Trang chủ >
  2. Kinh Doanh - Tiếp Thị >
  3. Kỹ năng bán hàng >

Năm sai lầm chết người trong bán lẻ

Năm sai lầm chết người trong bán lẻ

Năm sai lầm chết người trong bán lẻ

... Năm sai lầm chết người trong bán lẻ Jun 16,2008 00:00 by nhuy3007 Trong một môi trường kinh doanh thay đổi và phát triển từng ngày như hiện nay, các sai lầm có thể " ;chết người& quot;. ... 4/ Đánh giá thấp về các yêu cầu bán lẻ Bán lẻ không phải dành cho những người ẻo lả và yếu đuối. Các yêu cầu của việc vận hành thành công một cỗ máy bán lẻ là rất nhiều, không ngớt, và nói ... nhà bán lẻ của tương lai nhìn nhận rằng họ có thể mở và điều hành một cửa hàng bán lẻ mà vẫn dư dả thời gian. Bán lẻ liên quan tới vòng quay không ngừng của việc mua, tiếp thị, trình diễn và bán...
  • 3
  • 958
  • 2
Tài liệu 5 sai lầm chết người trong bán lẻ docx

Tài liệu 5 sai lầm chết người trong bán lẻ docx

... 5 sai lầm chết người trong bán lẻ Trong một môi trường kinh doanh thay đổi và phát triển từng ngày như hiện nay, các sai lầm có thể " ;chết người& quot;. Thậm chí cả trong điều ... chuyên gia thực thụ về bán lẻ, và quan trọng hơn nữa là về những sai lầm mà rất nhiều nhà bán lẻ mắc phải, khiến họ đối mặt với thất bại. Khi mà danh sách những sai lầm bán lẻ là rất dài, Ronald ... đúc kết được 5 sai lầm lớn nhất và có tác động tiêu cực nhất lên hoạt động bán lẻ thông thường: 1/ Thất bại trong những hoạch định hiệu quả và có mục đích Nhiều nhà bán lẻ mới thành lập...
  • 6
  • 433
  • 0
 10 sai lầm chết người trong hoạt động bán hàng

10 sai lầm chết người trong hoạt động bán hàng

... 10 sai lầm chết người trong hoạt động bán hàngThật khó tin nếu một doanh nhân tự đắc cho rằng: "Tôi chưa từng vấp ngã, không sai lầm& quot;. Thật ra, ai cũng có sai lầm, có lúc vấp ... nghiệm gì cho công việc sau này. Dưới đây là những sai lầm phổ biến nhất trong hoạt động bán hàng .Sai lầm 1: Thiếu một hình ảnh chuyên nghiệpĐể mọi người lắng nghe bạn và chú ý tới những gì bạn giới ... Thay vào đó, bạn hãy hỏi khách hàng về nhu cầu của họ .Sai lầm 3: Sử dụng ngôn từ... không đúng chỗTừ ngữ tạo ra hình ảnh trong tâm trí con người. Có một số từ ngữ luôn khiến cho khách hàng bỏ...
  • 2
  • 1,021
  • 9
 10 sai lầm chết người trong hoạt động bán hàng.

10 sai lầm chết người trong hoạt động bán hàng.

... 10 sai lầm chết người trong hoạt động bán hàngThật khó tin nếu một doanh nhân tự đắc cho rằng: "Tôi chưa từng vấp ngã, không sai lầm& quot;. Thật ra, ai cũng có sai lầm, có lúc vấp ... nghiệm gì cho công việc sau này. Dưới đây là những sai lầm phổ biến nhất trong hoạt động bán hàng .Sai lầm 1: Thiếu một hình ảnh chuyên nghiệpĐể mọi người lắng nghe bạn và chú ý tới những gì bạn giới ... Thay vào đó, bạn hãy hỏi khách hàng về nhu cầu của họ .Sai lầm 3: Sử dụng ngôn từ... không đúng chỗTừ ngữ tạo ra hình ảnh trong tâm trí con người. Có một số từ ngữ luôn khiến cho khách hàng bỏ...
  • 2
  • 465
  • 5
Những sai lầm chết người trong xây dựng chiến lược khách hàng

Những sai lầm chết người trong xây dựng chiến lược khách hàng

... nhân của các sai lầm về tiếp thị trước đây là do thiếu kiến thức và hiện nay sẽ chẳng ai mắc những sai lầm kiểu đó nữa. Nhưng trên thực tế, các công ty vẫn liên tục vấp phải sai lầm, mặc dù họ ... Những sai lầm muôn thuở trong hoạt động tiếp thị Đã năm mươi năm trôi qua kể từ khi các công ty bắt đầu hiểu được tầm quan trọng ... hay không thể tiếp cận với nguồn thông tin chính xác. Chẳng hạn, sai số thường xảy ra trong các cuộc điều tra khách hàng, khi người trực tiếp điều tra đưa ra câu hỏi không chính xác. Điều quan...
  • 7
  • 527
  • 3
Những sai lầm chết người trong xây dựng chiến lược khách hàng

Những sai lầm chết người trong xây dựng chiến lược khách hàng

... Những sai lầm chết người trong xây dựng chiến lược khách hàngĐể thành công thì người kinh doanh nào cũng cần khách hàng và mọi công tỵ đều ... bại trong nhiệm vụ quan trọng nhất của họ: thu hút và giữ khách hàng? Lior Arussy, một chuyên gia về chiến lược khách hàng cho rằng có nhiều lý do, mà ông gọi là "những sai lầm chết người& quot;. ... "thích nghi" từ chính bài học mà họ vừa nhận được - tìm người bán hàng mới để được cư xử như một khách hàng mới! Sai lầm thứ 2: “Tô son trát phấn” cho vẻ bề ngoài Với nhiều công ty,...
  • 1
  • 520
  • 0
Những sai lầm chết người trong xây dựng chiến lược khách hàng

Những sai lầm chết người trong xây dựng chiến lược khách hàng

... Những sai lầm chết người trong xây dựng chiến lược khách hàng Để thành công thì người kinh doanh nào cũng cần khách hàng và mọi công tỵ đều ... bại trong nhiệm vụ quan trọng nhất của họ: thu hút và giữ khách hàng? Lior Arussy, một chuyên gia về chiến lược khách hàng cho rằng có nhiều lý do, mà ông gọi là "những sai lầm chết người& quot;. ... "thích nghi" từ chính bài học mà họ vừa nhận được - tìm người bán hàng mới để được cư xử như một khách hàng mới! Sai lầm thứ 2: “Tô son trát phấn” cho vẻ bề ngoài Với nhiều công ty,...
  • 2
  • 576
  • 0
21 sai lam chet nguoi trong lap trinh voi PHP

21 sai lam chet nguoi trong lap trinh voi PHP

... PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology1111Dormitory204.B518:20PMApril7,2006àiviếtnàydànhchonhữnglậptrìnhviênPHPquantâmđếnviệctránhnhữnglỗithườnggặpkhisửdụngPHP .Người ọcphảibiếtcáccúphápcủaPHP,vànênbiếtcôngdụngcủacáchàmtrongPHP.MộttrongnhữngđiểmmạnhnhấtcủaPHPvôtìnhtrởthànhmộttrongnhữngđiểmyếunhấtcủanó:ttttíííínhnhnhnhddddễễễễssssửửửửddddụụụụngngngng.NhiếungườichọnPHPvìtínhdễsửdụng,đãkhôngnhậnrarằng:sửdụngđúngPHPPHPPHPPHPccccòòòònnnnkhkhkhkhóóóóhhhhơơơơnnnnccccááááccccngngngngôôôônnnnngngngngữữữữkhkhkhkháááácccc.Trongloạtbàinàysẽlầnlượtnêura21lỗi,từnhữngsailầmgiáokhoa(làmscripttrởnênchậmvàkhóquảnlí)đếnnhữngsailầmchếtngười-cóthểxemlànguồngốccủanhữngsailầmsơđẳng.PHẦN1:7LỖIGIÁOKHOA21.21.21.21.SSSSửửửửddddụụụụngngngngprintf()printf()printf()printf()khkhkhkhôôôôngngngngththththííííchchchchhhhhợợợợppppHàmprintf()dùngđểindữliệucóđịnhdạngNócóthểđượcdùng,thídụ,khibạnmộtinmộtsốkiểudoublevới2s lẻ, hoặctrongbấtkìtìnhhuốngnàobạnmuốnthayđổiđịnhdạngtrướckhiin.Thídụdướiđâyminhhoạcáchdùngđúngcủaprintf():địnhdạngsốPivớiđộchínhxáctheoýmuốnMMMMããããllllệệệệnhnhnhnh(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);?>ChChChChúúúúýýýý....Tôiđãtừnggặpnhữngngườisợdùngprintf(),thayvàođólạidùngnhữnghàmđịnhdạngtựviết,dàiđến30-40dòng ,trong imộtcâuprintf()cóthểlàmmọithứanhtamongmuốn.Nhiếulậptrìnhviêndùngsaiprintf():incácbiến,cácgiátrịtrảvềcủahàmhoặcthỉnhthoảng,chỉlàdữliệuthôngthường.Thườngxảyratronghaitìnhhuống:Câulệnhprint()thíchhợphơnHiểnthịgiátrịtrảvềcủamộthàm1.1.1.1.KhiKhiKhiKhinnnnààààooooprint()print()print()print()ththththííííchchchchhhhhợợợợpppphhhhơơơơn?n?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='khoa_computer2004@yahoo.com';printf("Tencuatuila:%s\n<br>\nHiendangla:%s,%s\n<br>\nLienhevoitoiquaEmail:%s\n<br>\n",$name,$nghenghiep,$diachi,$email);?>Hàmprint()print()print()print()cóthểdùngthaychoprintf()nhưsau:BPHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology2222Dormitory204.B518:20PMApril7,2006printprintprintprint"Tencuatuila:$name\n\n\n\n<br>\n\n\n\nHiendangla:$nghenghiep,$diachi\n\n\n\n<br>\n\n\n\nLienhevoitoiquaEmail:$email\n\n\n\n<br>\n\n\n\n";;;;Khikhôngcầnđịnhdạngsửliệu,dùngprint()thaychoprintf()cónhữnglợiíchsau:ThiThiThiThihhhhàààànhnhnhnhnhanhnhanhnhanhnhanhhhhhơơơơn:n:n:n:hàmprintf()địnhdạngdữliệucủabạntrướckhihiểnthị,nósẽchậmhơnprint()hoặcecho()MMMMããããssssáááángngngngssssủủủủ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ến2.2.2.2.DDDDùùùùngngngngprintf()printf()printf()printf()đểđểđểđểxuxuxuxuấấấấttttddddữữữữlilililiệệệệuuuutrtrtrtrảảảảvvvvềềềềttttừừừừggggọọọọiiiihhhhààààmmmmMộtlỗithườnggặpkháclàdùnprintf()đểxuấtdữliệutrảvềtừgọihàm,thídụnhưhàmđếmdướiđây:Khixuấtgiátrịdohàmtrảvề,toántử.nêndùngđểnốitrongprint(),nhưdướiđây:Dùngtoántử.nhanhhơnviệcdùngprintf()20.20.20.20.ÁÁÁÁppppddddụụụụngngngngsaisaisaisaingngngngữữữữnghnghnghnghĩĩĩĩaaaa(semantics)(semantics)(semantics)(semantics)NhiềulậptrìnhviênsửdụngPHPmàkhôngbiếtđếnnhữngđiểmtinhtếcủangônngữnày.Mộttrongnhữngđiểmđólàsựkhácnhaugiữacúpháp(syntax)vàngữnghĩa(semantics).CCCCúúúúphphphphááááp:p:p:p:nhữngquytắcđịnhnghĩamộtphầntử.Thídụ:dấu$đểtrướcdùngđịnhnghĩabiến,dùngdấu()vàcácthamsốđịnhnghĩamộthàm...NgNgNgNgữữữữnghnghnghnghĩĩĩĩa:a:a:a:nhữngquytắcápdụngtrongcúpháp.Thídụ:mộthàmcó2biếnđịnhnghĩabởicúphápcủanó,haibiếnnàycókiểustring-đólàngữnghĩa.TrongmộtngônngữlỏnglẻonhưPHP,bạncónhiềulựachọnđểviếtlệnh.Cácbiếnkhôngcầncókiểuxácđịnh...Thídụsaumởtậptinvàintừngdòng:Thídụtrênsẽtạolỗi:Warning:Warning:Warning:Warning:SuppliedSuppliedSuppliedSuppliedargumentargumentargumentargumentisisisisnotnotnotnotaaaavalidvalidvalidvalidFile-HandleFile-HandleFile-HandleFile-HandleresourceresourceresourceresourceininininC:\Inetpub\wwwroot\tst.phpC:\Inetpub\wwwroot\tst.phpC:\Inetpub\wwwroot\tst.phpC:\Inetpub\wwwroot\tst.phpononononlinelinelineline4.4.4.4.<?printfprintfprintfprintf("%doccurrencesof%sfound.",count($truyvan),$search_term);?><?printprintprintprintcount($truyvan)."occurrencesof$search_termfound.";?><?$fp=@fopen('vanban.txt','r')ordie('Khongthemofilevanban.txt');while($line=@fgets("$fp",1024))//Loi{print$line;}@fclose("$fp")//Loiordie('Khongthedongvanban.txt');?>PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology3333Dormitory204.B518:20PMApril7,2006Đólàdobiến$fpđặttrongdấunháyképnênđượcchuyểnthànhchuỗi.Thếmàhàmfopen()nhậnmộtđịnhdanhtàinguyên(resourceidentifier)trongthamsốđầucủanó,chứkhôngnhậnmộtchuỗi.Đểgiảiquyếtvấnđề,bạnchỉđơngiảnbỏdấunháyképđi1.1.1.1.CCCCóóóóththththểểểểtrtrtrtráááánhnhnhnhviviviviệệệệccccááááppppddddụụụụngngngngsaisaisaisaingngngngữữữữnghnghnghnghĩĩĩĩa?a?a?a?Ourexampleabovegeneratedanerrorstatement.ButPHPenablesyoutocustomizeyourscriptstofitauniquescenariooroutputrequirement.So,itisatleasttheoreticallypossibleto"getaway"withmisapplyingasemantic.Tôikhônghiểu,nhưngdịchthếnàyđượckhông?Thídụtrêncủachúngtatạoramộtthôngbáolỗi.NhưngPHPchophépbạntuỳbiếncácscriptđểthíchhợpvớimộtkịchbảnkhácthườnghoặcvớicácđòihỏicủathôngtinra.Dođó,ítnhấttrênlíthuyết,bạncókhảnăngtránhviệcápdụngsaingữnghĩa.Vậy,bạncầnbiếtnhữnghậuquảcóthểcó(possibleoutcomes)nếubạnquyếtđịnhhọcvềngữnghĩa.Ápdụngsaidẫnđếnnhữnglỗikhátinhvinếubạnkhôngchúý.Nếubạnmuốntuỳbiếnscript,bạncầnhiểunhữngchủđềchínhsau:KiKiKiKiểểểểu:u:u:u:trongPHP,mỗibiếncómộtkiểuxácđịnhởmộtthờiđiểmxácđịnh,chodùbạncóthểtựdochuyểnđổikiểumộtbiến.Nóimộtcáchkhác,khôngcóbiếnnàolạikhôngkèmtheotínhchấtcủakiểucủanó.PHPcó7kiểucơbản:boolean,resource,integer,double,string,arrayvàobject.TTTTầầầầmmmmvvvvựựựực:c:c:c:trongPHP,mỗibiếncómộttầmvựcriêng.Tầmvựcbiếnquyđịnhbiếncóthểđượctruycậptừđâu,tồntạitrongthờigiannào.Hiểusaikháiniệmcơbảnvề"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ằngkhô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.19.19.ThiThiThiThiếếếếuuuughighighighichchchchúúúúTheoýtôi,mãnguồnthiếughichúlàcănnguyêncủasựlậptrìnhíchkỉ.Nódẫntớinhữnghiệuchỉnhsailầm,hiểusaiýnghĩavàlàmngườiđọcmệtmỏi.Nóichung,lậptrìnhghichú(inlinedocumentation)đượcmọingườikhẳngnhậnlàđiềutốt,nhưnghiếmkhinótồntại.Mộtvấnđềkháclàquánhiềughichú.Dùhiếmgặp,nhưngnólàmchocácđoạnmã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";//Vonglapforinratatcatuoitruocdofor($idx=0;$idx<$age;$idx++){<?$fp=@fopen('vanban.txt','r')ordie(‘Khongthemofiletailieuphp.txt');while($line=@fgets($fp,1024)){print$line;}@fclose($fp)ordie(Khongthedongfilevanban.txt');?>PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology4444Dormitory204.B518:20PMApril7,2006//Inratuoicanhanprint"$idxyearsold\n<br>\n";}//KetthucmaPHP?>1.1.1.1.BaoBaoBaoBaonhinhinhinhiêêêêuuuughighighighichchchchúúúúththththììììđủđủđủđủ????Nhiếuđếnmứcnào,điềuđótuỳthuộcngânsáchcủabạn,vàochínhsáchcủacôngtyvàvàođộphứctạpcủachươngtrình.Tuynhiên,cũngcómộtvàigợiýchobạnLuôncómộtmôtảngắnvềmụcđíchcủahàmngaytrướcđịnhnghĩacủahàmđóThêmghichúvàonhữngchỗcóthểbịhack,hoặcnhữngchỗtưởngrằngsainhưnglạichạyđúngNếumộtđoạnmãnàođócóthểgâynhầmlẫn,hãythêmmộtítghichúvềmụcđíchcủađoạnđó.SaunàybạnsẽthấyđượclợiíchcủanóDùngmộtkiểughichúnhấtquán,/*/*/*/**/*/*/*/hoặclà////////(tr(tr(tr(tráááánhnhnhnhddddùùùùngngngng#)#)#)#)Dướiđâylàmộtthídụvềghichútốt:<?//Random_Numbers.lib//Generatedifferenttypesofrandomnumbers.mt_srand((double)microtime()*1000000);//mixedrandom_element(arrayelements[,arrayweights])//Extractarandomelementfromelements.Weightsis//therelativeprobabilitythateachelementwillbe//selected.functionrandom_element($elements,$weights=array()){//Theremustbeexactlythesameamountofelementsas//thereareweightsforthisalgorithmtoworkproperlyif(count($weights)==count($elements)){foreach($elementsas$element){foreach($weightsas$idx){//Note:wedon'tuse$idx,sincewe//don'twanttooverrideelements.$randomAr[]=$element;}}}else{$randomAr=$elements;}$random_element=mt_rand(0,count($randomAr)-1);return$randomAr[$random_element];}?>18.18.18.18.NhiNhiNhiNhiềềềềuuuubibibibiếếếến,n,n,n,ttttốốốốnnnnnhinhinhinhiềềềềuuuuththththờờờờiiiigiangiangiangianCóvàingườibịámảnhbởibiếntrunggian.Tôikhôngthểhiểunổitạisaoaiđócóthểviếtnhưthếnày:PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology5555Dormitory204.B518:20PMApril7,2006Tạisaophảidùngbiếntrunggian?NókhôngcầnthiếtRủithay,cóvẻnhưrấtnhiềungườikhóbỏđượcthóiquenxấunày.Biếntạmlàmchậmthờigianthihànhchươngtìnhcủabạn.Tốthơnlànênbỏquađóvàgộpcáclờigọihàmvớinhau.Nhữngngườidùngbiếntạmthườnglàmchươngcủahọchạychậmđến25%.Mộtlídokhácđểtránhcóquánhiềubiếntạmlàvìtrôngnókhôngđượcđẹpmắt.Tronghaithídụtrên,thídụnàosúctíchhơn?Thídụnàolàmconmắtdễchịuhơn?Dùngquánhiềubiếntạmcóthểdẫnđếnmãchươngtrìnhkhóđọcvàkhôngsúctích.1.1.1.1.LLLLợợợợiiiiđđđđiiiiểểểểmmmmccccủủủủaaaaddddùùùùngngngngbibibibiếếếếnnnnttttạạạạmmmmCácbiếntạmcólợitrongviệcthaythếcáchàmhaybiểuthứcdàilêthê.Nócóvaitrònhưbídanhgiả.Điềunàyđặcbiệtđúngkhibạndùngmộthàmhaybiểuthứcnhiềulần.Xemxétthídụđây,nókhôngdùngnhiềubiếnhơnmứctốithiểuNộidungtronghàmimplode()dàivàdođókhóđọc.Dùngmộthoặcnhiềubiếntạmcóthểgiúpchúngta:2.2.2.2.CCCCáááácccclulululuậậậậttttchungchungchungchungccccủủủủaaaangngngngóóóónnnntaytaytaytayccccááááiiiiKhiquyếtđịnhcódùngbiếntạmhoặckhông,bạnnênsuynghĩvề2câuhỏi:Bạncódùngbiếnđóítnhấthailần?Tínhđọcđượccủamãcótăngđángkểkhông?Nếuítnhấtmộtcâutrảlờilàcó,thìnêndùngbiếntạm.Cònkhông,vứtnóđivàtổhợpcáchàmlại(nếucần).17.17.17.17.ViViViViếếếếttttllllạạạạiiiiccccáááácccchhhhààààmmmmccccóóóóssssẵẵẵẵnnnnMộtsốnơiphổbiếnmãnguồncácscriptPHPchủtrươngđổitêncáchàmsẵncóđểtạosựdễdàngchocáclậptrìnhviênchuyểntừVBsang.Thídụ:<?$tmp=date("Fd,h:ia");/*ieJanuary3,2:30pm*/print$tmp;?><?printdate("Fd,h:ia");?>//stringreverse_characters(stringstr)//Reverseallofthecharactersinastring.functionreverse_characters($str){returnimplode("",array_reverse(preg_split("//",$str)));}//stringreverse_characters(stringstr)//Reverseallofthecharactersinastring.functionreverse_characters($str){$characters=preg_split("//",$str);$characters=array_reverse($characters);returnimplode("",$characters);}<?functionlen($str){PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology6666Dormitory204.B518:20PMApril7,2006LạicómộtsốngườicốgắngviếtlạicáchàmPHPthô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àmchonhữngngườiđọc(vàsửa)chươngtrìnhcủabạnkhóhiểuvàcảmthấycóquánhiềuhàmdưthừa.Họtựhỏitạisaobạnlạiđiđịnhnghĩahàmtheokiểuđó,thayvìsửdụngcáchàmđịnhnghĩasẵnbởiPHP.Thứhai,địnhnghĩahàmnhưvậycũngsẽlàmchậmchươngtrìnhcủabạn(mộtcáchkhôngcầnthiết).Khôngchỉphảixửlínhiềumãhơn,màmỗilầngọihàmdobạnđịnhnghĩa,bạnđãtốnthờigianchochínhhàmđó,trướckhihàmnguyênthuỷđượcgọi.1.1.1.1.TrTrTrTráááánhnhnhnhviviviviếếếếttttllllạạạạiiiiccccáááácccchhhhààààmmmmccccóóóóssssẵẵẵẵnnnnHãyđươngđầuvớinó.Đôikhithậtlàkhóđểtránhchuyệnnày.Trướctiên,mộtlậptrìnhviênkhôngthểtheokịpcáchàmcủaPHPngayđược.Vàaicóthờigianmàtracứu.Tạisaokhôngviếtlạichokhoẻ?CáchlàmcủatôilàluôncósẵnmộttàiliệuchỉdẫnPHP(PHPmanual)mỗikhiviếtchươngtrình(tácgiảbàinàydùngmộtbảnPDFcótạochỉmục,riêngtôi,ngườidịch,thìdùngmộttàiliệuCHMđầyđủthôngtinvàcócảgópýcủangườisửdụngmàbạncóthểlấyởhttp://www.php.net/docs.php).Sauđó,mỗikhiđịnhviếtmộthàmmởrộngchoPHP,tôiđọclướtquatàiliệuđểxemhàmđócóchưa.Tuynhiên,cầnchúýlà,dobảnchấtmãnguồnmởcủaPHP,bạncóthểtìmđượccáchàmdongườidùngđịnhnghĩatrướckhinóđượcthêmvàoPHP(thídụnhưhàmtìmphầntửkhácnhaugiữahaimảng).Điềunàykhôngcónghĩalàbạnphảihiệuchỉnhlạimã(Thisdoesn'tnecessarilymeanthatyoushouldhavetocorrectthecode.-don'tunderstand)16.16.16.16.KhKhKhKhôôôôngngngngttttááááchchchchbibibibiệệệệttttphphphphầầầầnnnnserverserverserverservervvvvààààclientclientclientclientVàilậptrìnhviêncốkếtnốicảchươngtrìnhvớinhau,nghĩalàghépchungmãHTML(client-side-phầnkhách)vớimãPHP(server-side-phầnchủ)vàotrongmộttậptinlớn.Mặcdùđiềunàytốtchocácsitenhỏ,nhưngnócóthểtrởthànhvấnđềlớnkhicácsiteđótrởnênlớnhơnvàđượcbổsungthêmtínhnăng.Lậptrìnhtheocáchnàylàmnảysinhvấnđềkhóbảotrìvàcáctậptintrởnêncồngkềnh.1.1.1.1.HHHHààààmmmmAPIAPIAPIAPIKhimuốntáchbiệtphầnkhách-chủ,bạncóvàilựachọn.Mộtcáchlàviếtnhữnghàmhiểnthịnộidunglinhđộngvàđặtchúngđúngchỗtrongtrangweb.Thídụdướiđâyminhhoạđiềunày:index.phpindex.phpindex.phpindex.php-phầnkháchreturnstrlen($str);}?>HTMLHTMLHTMLHTML<?phpinclude_once("site.lib");?><html><head><title><?phpprint_header();?></title></head><body><h1><?phpprint_header();?></h1><tableborder="0"cellpadding="0"cellspacing="0"><tr>PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology7777Dormitory204.B518:20PMApril7,2006site.libsite.libsite.libsite.lib-phầnchủNhưbạnthấytrongthídụtrên,táchbiệtkháchchủlàmtăngtínhdễđọctrongchươngtrìnhcủabạn.MộtlợiíchkháclàmộtkhibạnđãcócáchàmAPIhiểnthịnộidung,bạncóthểđểchothiếtkếviênthamgiathayđổibốcụcmàkhôngcầnsửamãchươngtrình.1.1.1.1.1.1.1.1.LLLLợợợợiiiiííííchchchchccccủủủủaaaahhhhààààmmmmAPIAPIAPIAPITươngđốisángsủaNhanh,hầunhưkhônglãngphíthờigian(overhead)1.2.1.2.1.2.1.2.BBBBấấấấttttllllợợợợiiii<tdwidth="25%"><?phpprint_links();?></td><td><?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(){global$site_info;print$site_info->header;}functionprint_body(){global$site_info;printnl2br($site_info->body);}functionprint_links(){global$site_info;$links=explode("\n",$site_info->links);$names=explode("\n",$site_info->link_names);for($i=0;$i<count($links);$i++){print"\t\t\t<axhref=\"$links[$i]\">$names[$i]</a>\n<br>\n";}}?>PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology8888Dormitory204.B518:20PMApril7,2006Khôngsángsủavàdễdàngbằnghệthốngmẫu(templatesystem)CầnmộtítkiếnthứcPHPđểsửamẫu2.2.2.2.HHHHệệệệththththốốốốngngngngkhukhukhukhuôôôônnnnmmmmẫẫẫẫuuuuMộtcáchkhácđểtáchbiệtkháchchủlàdùnghệthốngkhuônmẫu.Nghĩalà,cómộtsốđánhdấunộidungsauđódùngchươngtrìnhphântích,thaythếcácđánhdấuđóbằngthôngtincầnthiết.Thídụ,bạncóthểtạomộ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ônmẫukhátốtlàlớpFastTemplate,cóởwww.thewebmasters.net2.1.2.1.2.1.2.1.ƯƯƯƯuuuuđđđđiiiiểểểểmmmmccccủủủủaaaahhhhệệệệththththốốốốngngngngkhukhukhukhuôôôônnnnmmmmẫẫẫẫuuuuRấttrongsángKhôngcầnkiếnthứcPHPđểsửakhuônmẫu2.2.2.2.2.2.2.2.NhNhNhNhượượượượccccđđđđiiiiểểểểmmmmChậmhơn,bạncầnphântáchtậptinkhuônmẫu,sauđóxuấtraViệchiệnthựcphứctạphơn15.15.15.15.DDDDùùùùngngngngccccááááccccccccấấấấuuuutrtrtrtrúúúúccccllllỗỗỗỗiiiiththththờờờờiiiiCónhiềungườicứdùngmãicácmãvàthưviệnlỗithời.ThídụnhưhọđãviếtmộthàmdùngởPHP2,vàvẫncòndùngnóởPHP4,mặcdùmộthàmcócùngmụcđíchnhưthếđãđượcthêmvàoởPHP3Dùngcáccấutrúclỗithờicóthểlàmchậmchươngtrìnhcủabạn,cũngnhưlàmchonótrởnênkhóhiểu .Người ọccácchươngtrìnhcủabạncóthểkhôngquenvớicáchàmlỗithờicủaPHP.Tuynhiên,khipháthiệnmộtđoạnmã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ắmlấy,làcúphápbeginControlStructurebeginControlStructurebeginControlStructurebeginControlStructure........endControlStructureendControlStructureendControlStructureendControlStructure;HTMLHTMLHTMLHTML<html><head><title>%%PAGE_TITLE%%</title></head><body%%BODY_PROPERTIES%%><h1>%%PAGE_TITLE%%</h1><tableborder="0"cellpadding="0"cellspacing="0"><tr><tdwidth="25%">%%PAGE_LINKS%%</td><td>%%PAGE_CONTENT%%</td></tr></table></body></html><?PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology9999Dormitory204.B518:20PMApril7,2006ĐâylàmộtthóiquenxấuvìNókhôngđượcdùngrộngrãi,chonênnhiềungườihọcsẽbịlẫnlộngiữahaicúphápNókhôngtươngthíchvớingônngữkhác,nghĩalànótrởnênkhóđọcđốivớinhữngngườitronggiaiđoạnquáđộ(mớichuyểntừmộtngônngữnàođósangPHP)Quantrọngnhất,làmộtngàynàođótínhnăngnàysẽbịxoáxổ,bắtbuộcbạnphảiviếtlạitoànbộmãcódùngnó.DấungoặcnhọnluônluônlàmộtphầncủangônngữPHP.Ởtrênchỉlàmộtthídụvềcấutrúclỗithời.Nócònnhiềunữa.Nhưmộtquytắc,bạnnêntheonhữngcácviếttrongtàiliệuPHP.Hầuhếtnóđượccậpnhậtmới.NócũngdùngcáchàmmớinhấtcủaPHPtrongthídụcủamình.NênthườngxuyênkiểmtratàiliệukhibạncóýmuốnmởrộngtínhnăngnàođócủaPHP.Theocáchnày,bạnsẽkhôngphảiviếtlạicáchàmcósẵn.TTTTổổổổngngngngkkkkếếếếttttTrongbàinàybạnđãđiqua7trêntổngsố21lỗimàlậptrìnhviênPHPmắcphải.Nhữnglỗigiáokhoanàybaogồm:SSSSửửửửddddụụụụngngngngsaisaisaisaihhhhààààmmmmprintf()printf()printf()printf()ÁÁÁÁppppddddụụụụngngngngsaisaisaisaingngngngữữữữnghnghnghnghĩĩĩĩaaaaThiThiThiThiếếếếuuuuttttààààiiiililililiệệệệuuuutrongtrongtrongtrongmmmmããããngungungunguồồồồnnnnDDDDùùùùngngngngququququáááánhinhinhinhiềềềềuuuubibibibiếếếếnnnnttttạạạạmmmmViViViViếếếếttttllllạạạạiiiiccccáááácccchhhhààààmmmmccccóóóóssssẵẵẵẵnnnnKhKhKhKhôôôôngngngngttttááááchchchchbibibibiệệệệttttphphphphầầầầnnnnkhkhkhkháááách/chch/chch/chch/chủủủủDDDDùùùùngngngngccccááááccccccccấấấấuuuutrtrtrtrúúúúccccllllỗỗỗỗiiiiththththờờờờiiii//Bad/OutdatedPracticewhile(1):print"5";if($idx++==5):break;endif;endwhile;//BetterPractice//(thecodecouldbeoptimizedthough)while(1){print"5";if($idx++==5){break;}}?>PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology10101010Dormitory204.B518:20PMApril7,2006PHẦN2–LỖINGHIÊMTRỌNG14.14.14.14.KhKhKhKhôôôôngngngngtutututuâââânnnnththththủủủủccccááááccccquyquyquyquyướướướướccccđặđặđặđặttttttttêêêênnnnMộttrongnhữnglỗinghiêmtrọngmàngườilậptrìnhcóthểphạmphảilàđịnhnghĩamộtquyướcđặttêntồi.Tôiđãtiếpquảnnhiềudựánm 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đếnmộtdựánmàngườilậptrìnhcũđãquyếtđịnhđưavàotoànbộchươngtrìnhmộtkiểuđặttênkìlạ(aFlinstonesnamingtheme),khôngphảitôiđùađâu.Cáchbạnđặttênbiếnvàhàmlàtrungtâmcủaviệcxâydựngmộtchươngtrìnhdễđọc.Cónhiềulậptrìnhviênphạmlỗikhiđặttênbiếnvàhàmmànó:quádàihoặcquángắnkhôngliênquanđếnngữcảnhkhôngđểýđếncách-viết-phân-biệt(casesensitivity)ngăncảnkhảnăngdễđọc(đặcbiệtlàcáchàm)1.1.1.1.ĐặĐặĐặĐặttttttttêêêênnnnbibibibiếếếếnnnn1.1.1.1.1.1.1.1.CCCCááááchchchchviviviviếếếếttttphphphphâââânnnnbibibibiệệệệttttTrongPHP,tênbiếncócáchviếtphânbiệt,nghĩalà$uservà$Userlàhoàntoànkhácnhau.Vàingườidùnglợidụngđiểmnà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ỗitênbiến,trongcùngtầmvực(scope),nêncólàtuyệtđốiduynhất.1.2.1.2.1.2.1.2.TTTTêêêênnnnququququáááángngngngắắắắnnnnNhiềungườisửdụngnhữngchữviếttắtđầu(crypticacronym)bíẩnchocácbiếncủahọ,đểrồisaunàyhốitiếcvìquênmấthọđãmuốnámchỉđiềugìkhiđó.Tênbiếnnênmôtảnộidungnó(sẽ)chứa,dùngnguyêntừhoặcnhữngchữviếttắtcóthểhiểuđược.1.3.1.3.1.3.1.3.TTTTêêêênnnnququququááááddddààààiiiiỞkhíacạnhkhác,vàingườilạisửdụngtênbiếnquádài.Nóichung,tênbiếnkhôngnêndàiquáhaitừ.Haitừcóthểđượctáchbiệtbằngdấuphâncách"_"hoặclàviếthoachữđầucủatừthứhai.1.4.1.4.1.4.1.4.ThThThThóóóóiiiiquenquenquenquenttttốốốốttttDướ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);PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology11111111Dormitory204.B518:20PMApril7,20061.5.1.5.1.5.1.5.ThThThThóóóóiiiiquenquenquenquenxxxxấấấấuuuuDướ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.ĐặĐặĐặĐặttttttttêêêênnnnhhhhààààmmmmMọikháiniệmápdụngchotênbiếncũngápdụngchođặttênhàm.Tuynhiên,ngữphápđóngvaitròđặcbiệttrongcáchàm.CáchàmPHP,địnhnghĩasẵnhoặcdongườidùngđịnhnghĩa,làkhông-phân-biệt-cách-viết(notcasesensitive)2.1.2.1.2.1.2.1.DDDDùùùùngngngngđộđộđộđộngngngngttttừừừừHàmcủaPHPtươngđươngvớimộtđộngtừkhinói.Tênhàm,dođó,nênđượchướnghànhđộng(actionoriented).Nócũngnênđượcdùngởthìhiệntại.Thídụ,bạncómộthàmtạomộtsốngẫunhiênvớiphânbốGausse(agaussianrandomnumber),bạnnênđặttênnólàgenerate_gaussian_rand().Chúýcácsửdụngđộngtừhànhđộngtrongtênhàm.Nósẽđặthàmvàongữcảnhthíchhợp<?phplist($num1,$num2)=generate_gaussian_rand();list($num3,$num4)=generate_gaussian_rand();?>Đểsosánh,hãyxemthídụ:<?phplist($num1,$num2)=gaussian_rand_generator();list($num1,$num2)=gaussian_rand_generator();?>Bạncóthấysựkhácbiệt?Thídụthứhaisửdụngdanhtừ,mặcdùvẫnchuyểntảiđượcmụctiêucủahàm,nhưngnóngănngườitađọcmộtcáchtrôichảy.Hãysửdụngđộngtừ!13.13.13.13.KhKhKhKhôôôôngngngngsuysuysuysuynghnghnghnghĩĩĩĩththththấấấấuuuuđáđáđáđáo:o:o:o:CSDLCSDLCSDLCSDL&&&&SQLSQLSQLSQLSốcáchngườitatruycậpcơsởdữliệu(CSDL-database)vàlấykếtquảnhiềuđếnmứcthựcsựngạcnhiên.Nhữngthídụtôiđãgặpbaogồmnhữngtổhợplệnhifvàvònglặpdo..while,cáccâugọinhiềulần,vàcáchàmsql_result()trongvòngfor.Nhữngngườinàycónghĩhọđanglàmgìkhông?Việcviếtcácmã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đúngcôngviệc,kếtquảlàlàmchocácôngchủquăngthờigianvàtiềnbạcrađường.PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology12121212Dormitory204.B518:20PMApril7,2006Sựlấymẫukhôngchínhxáclàmộtthídụhayvềvấnđềnày.Vàingườiviếtlệnhkhôngdànhthờigianđểnghĩthấuđáo.Đúnglàkhôngchỉcóduynhấtmộtcách“đúng”đểlấymẫudữliệu,nhưngnócórấtnhiềucáchkhôngđúng.Phầnnàybaogồmcácchủđề:ÁpdụngsaicáchàmvềCSDLDùngsaiSQL:khônglấynhữngthứbạncầnDùngPHPđểsắpxếpkếtquả1.1.1.1.DDDDùùùùngngngngsaisaisaisaiccccáááácccchhhhààààmmmmCSDLCSDLCSDLCSDLMộtđoạnmãPHPđãdùngcúphápsauđểlấykếtquảtừCSDL(presentedbelowusingageneralizedsetofSQLfunctions):if(!($mautin=sql_fetch_row($truyvan))){print"Motloixayra:Khongtimthaymautinnao!";exit;}do{print"$mautin[0]:$mautin[1]\n<br>\n";}while($mautin=sql_fetch_row($truyvan));ChChChChúúúúýýýý::::Ởtrên,vàcácthídụsaunữa,$truyvandiễntảhandlehoặcpointerđếnmộttậpkế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ề.Cómộtvàivấnđềvớiđoạnmãtrên:Nókiểmtracáctrườnghợp“khôngtìmthấy”("noincidents"case)bằngcáchlấymộtdòngNókhônglưukếtquảvàomảngliênkết(associativearray)1.1.1.1.1.1.1.1.KiKiKiKiểểểểmmmmtratratratratrtrtrtrườườườườngngngnghhhhợợợợppppkhkhkhkhôôôôngngngngttttììììmmmmththththấấấấy:y:y:y:ccccááááchchchchllllààààmmmmsaisaisaisaiBằngcáchdùngsql_fetch_row(),PHPchủtrươngmộtcáchtiếpcậnhàmẩnchoviệcxácđịnhcókếtquảtìmthấyhaykhông.Mộtcáchkháctrựctiếpvàtườngminhlàđếmsốdòngcủakếtquảbằngsql_num_rows()nhưdướiđây:<?phpif(sql_num_rows($truyvan)<=0){print"Motloixayra:Khongtimthaymautinnao!";exit;}while($mautin=sql_fetch_row($truyvan)){print"$mautin[0]:$mautin[1]\n<br>\n";}?>1.2.1.2.1.2.1.2.TTTTừừừừbbbbỏỏỏỏvvvvòòòòngngngngllllặặặặppppDo..WhileDo..WhileDo..WhileDo..WhileTrướchếtvàtrênhết,vònglặpthôtụcdo..whilekhôngbaogiờcầnnữavìkhidùngsql_num_row(),chúngtakhôngphảilấydòngđầutiêncủakếtquảkhimuốnkiểmtrakếtquảtrống.Thídụcũđãdiễntảmộtthídụm trong ó,nếukếtquảkhôngrỗng,dòngđầutiênđãđượclấybằnghàmsql_fetch_row()trongcâulệnhif.Cấutrúcdo..whilecầnthiếttrongtrườnghợpnàyvìkhiđó,bộđếmcủaCSDLđãtănglênvàchuyểnsangdòngkếtiếp.Dođó,bạnphảixửlí(lệnhdo)dòngđầutiênvìnóđãđượclấy.Cáclệnhtiếptheolấycácdòngkế,vàcứthế.PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology13131313Dormitory204.B518:20PMApril7,2006Tạisaovòngdo..whiledo..whiledo..whiledo..whilebịcoinhưthôtục,xấuxa(nasty)?Trongthídụtrên,chỉcó1lệnhinkếtquảtrongvònglặp.Hãytưởngtượng,nếucó10lệnh ,người ọcmãphảitìmđiềukiệnwhilesaucáccâulệnhđó.Mộtcôngviệcphiềntoái.ĐiềukiệnWhilebắtđầucấutrúcthườngxuyênhơnlàkếtthúc.Mộtnhànghiêncứusẽphảicẩnthậnhơnđểkhôngnhầmlẫnđiềukiệnwhilecuốivớiđiềukiệnwhileđầu.1.3.1.3.1.3.1.3.GiGiGiGiữữữữmmmmọọọọiiiiththththứứứứggggọọọọnnnnggggààààngngngngvvvvààààđơđơđơđơnnnngigigigiảảảảnnnnVớitrườnghợpkếtquảrỗng,sql_num_rows()đưađếnngaykếtquả,trongkhisql_fetch_row()thìkhôngsql_fetch_row()sql_fetch_row()sql_fetch_row()sql_fetch_row()nóirằng"Tôitìmthấy0dòngtrongtậpkếtquả.Điềunàynghĩalàcó0kếtquả”(Ifoundnorowsintheresultset.Thismustmeanthattherearenone.)sql_num_rows()sql_num_rows()sql_num_rows()sql_num_rows()nóirằng“Sốdòngtrongkếtquảlà0”(Thenumberofrowsintheresultsetis0).Nhưngđiềuđóthựcsựtạonênsựkhácbiệtnào?Xétcùngmộtsựsosánh,nhưngbâygiờlàtrongngữcảnhcủađiềukiệnifvàcủabiểuthức ,trong oạnlệnhgiả(Pseudo-code):****if(!($mautinif(!($mautinif(!($mautinif(!($mautin====sql_fetch_row($truyvan)))sql_fetch_row($truyvan)))sql_fetch_row($truyvan)))sql_fetch_row($truyvan))){{{{PrintPrintPrintPrintErrorErrorErrorError}:}:}:}: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;$mautinkhôngphảilàzerovàcógiátrịlàTrue.Dođó!(True)=False,vàtiếptụcvớ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){{{{PrintPrintPrintPrintErrorErrorErrorError}:}:}:}:ođếmsốdòngtrongtậpkếtquả.oNếunhỏhơnhaybằng0,inthôngbáolỗi.oNếukhông,tiếptục.Biểuthứcnàodểhiểuhơn?Rõrànglàcáchđếmsẽtrựctiếpvàgọngànghơn.Sựkhácbiệtthựctếlàgì?Vớimộtlệnhifđơngiản,chúngtakhôngthuđượclợinhều.Tuynhiên,vớihơn10000dònglệnh,hãydànhthờigiannghĩđếncáchrõràngnhất,nósẽtiếtkiệmchongườiphântíchchươngtrìnhnhiềugiờsuynghĩa.Lợiíchkháccóthểkểđếnlàchươngtrìnhcủabạnsẽnhanhhơnvàdễpháttriểnhơn.PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology14141414Dormitory204.B518:20PMApril7,20061.4.1.4.1.4.1.4.KhiKhiKhiKhimmmmààààDBMSDBMSDBMSDBMSccccủủủủaaaabbbbạạạạnnnnkhkhkhkhôôôôngngngnghhhhỗỗỗỗtrtrtrtrợợợợsql_num_row()sql_num_row()sql_num_row()sql_num_row()VàiDBMScóthểkhônghỗtrợhàmsql_num_row().TôixinchiasẻvớibạnnếuDBMScủabạnlàmộttrongsốđó.Bạnsẽphảitìmtrongkếtquảrỗngbằngcáchlấydòng.Tuynhiên,trongtrườnghợpnày,nónêndùngmộtbiếnbooleannhưsau:<?php$timthay=false;while($mautin=sql_fetch_array($truyvan)){$timthay=true;}if(!$timthay){print"Loi!";}?>1.5.1.5.1.5.1.5.LLLLấấấấyyyykkkkếếếếttttququququảảảả::::hhhhããããyyyychchchchọọọọnnnnccccááááchchchchccccóóóóííííchchchchVấnđềthứhaitrongđoạnmãnàylànódùngsql_fetch_row()đểlấytậpkếtquả.Hàmsql_fetch_row()chỉtrảvềmảngđánhchỉsố,trongkhiđósql_fetch_array()trảvềmảngđánhchỉsốvàmảngdùngchuỗi.$mautin=sql_fetch_array($truyvan);print$mautin[1];//Cotthu2print$mautin[name];//TencotChChChChúúúúýýýý::::Cónhiềuquyướckhácnhauvềviệcdùngdấunháykhithêmmộtđốisốkiểuchuỗi.Trongthídụvềtêncộtởtrên,vàsuốtbàiviếtnày,nósẽđượcbỏ.Từquanđiểmcủanhàpháttriển,hàmnàocólợihơn?Mảngdùngchuỗigiúpchongườiđọchiểuđượcbạnđanglấycáigìchỉthôngquaviệcđọcmã,nhưthídụđúngdướiđây:<?phpif(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.KhiKhiKhiKhinnnnààààoooosql_fetch_row($truyvan)sql_fetch_row($truyvan)sql_fetch_row($truyvan)sql_fetch_row($truyvan)nnnnêêêênnnnđượđượđượđượccccddddùùùùngngngngTôikhôngthựcsựlàfancủathesql_fetch_row().Tuynhiên,cómộttìnhhuốngmàdùngnókhônggiảmkhả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.Đôikhibạnđểchongườidùngtựđịnhnghĩacâutruyvấn.Trườnghợpnàybạnsẽkhôngbiếtcáccộttrongkếtquả.Dođó,dùnghàmsql_fetch_row()kèmvớicount()sẽxửlíhiệuquảcáccộttrongmộthàng:<?phpfor($i=0;$i<count($mautin);$i++){print"Column".($i+1).$mautin[$i]."\n<BR>\n";}?>2.2.2.2.DDDDùùùùngngngngsaisaisaisaiSQL:SQL:SQL:SQL:khkhkhkhôôôôngngngngllllấấấấyyyynhnhnhnhữữữữngngngngggggììììbbbbạạạạnnnnccccầầầầnnnnPHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology15151515Dormitory204.B518:20PMApril7,2006Nhưlàvấnđềcủathựchành,đơngiảnlàsẽsailầmkhidùngPHPxửlímọidòngcủaCSDL.TôiđãbắtgặpngườitadùngPHPđểchạymộtchươngtrìnhtìmkiếmđơngiảntrên2MBdữliệuvàtựhỏitạisaocáingônngữnàychạylâuthế.Lấy2MBdữliệutừCSDLcóthểlàmbạnchờmãimãi.Ngônngữtruyvấnchuẩn(StandardStandardStandardStandardQueryQueryQueryQueryLanguageLanguageLanguageLanguage----SQLSQLSQLSQL)đượ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ằngmãSQLđangdùngchưađượctốiưuhoá.2.1.2.1.2.1.2.1.MMMMệệệệnhnhnhnhđềđềđềđềWHEREWHEREWHEREWHEREMộtthídụkinhđiểnvềsựhiểuquảcủaSQLliênquanđếnmệnhđềwhere.ĐoạnmãsausẽlấycáckếtquảvàinratênvàmãsinhviêncủasinhviêncóMASV='511203008':<?phpinclude(“includes/taptinketnoi.inc”);$strsql="SELECTMASV,HOTENFROMSINHVIEN";$truyvan=@sql_query($strsql,$ketnoi);if(!$truyvan){die(sprintf("LOI:[%d]:%s",sql_errno(),sql_error()));}if(@sql_num_rows($truyvan)<=0){die("KhongketquatimduoctuCSDL!");}while($mautin=@sql_fetch_array($truyvan)){if($mautin[MASV]==“511203008”){print"MASV:$mautin[MASV]\n<br>\n";print"Hoten:$mautin[HOTEN]\n<br>\n";break;}}?>Đoạnmãtrênchưađượctốiưu:chúngtađangdùngPHPđểtìmkiếmtrongtoànbộCSDL!NếunhưđiềunàykhôngquantrọngđốivớicácCSDLnhỏ,khikíchthướcCSDLtănglênbạnsẽcảmthấymộtcúđấmnặngnềvềhiệunăng.Lờigiảirấtđơngiản:sửacâuSQLđểchứamệnhđềWHERE:$strsql="SELECT*FROMSINHVIEN";$strsql.="WHEREMASV='511203008'";PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology16161616Dormitory204.B518:20PMApril7,2006MệnhđềWHEREchophépbạntìmkiếmchọnlọchơn.Giớihạnchọnlọccủamệnhđềwherechínhlàmộthàmvớiđốisốcủanó.Trongthídụtrênđốisốlà"MASV='511203008'".Bâygiờchúngtađãchọnđượcdữliệucầnthiết,bạnchỉviệcdùngPHPđểinrasauđó:if(@sql_num_rows($truyvan)!=1){die("KhongdungsomautinnhanduoctuCSDL!");}$mautin=@sql_fetch_array($truyvan);print"Hovaten:$mautin[HOTEN]\n<br>\n";print"MASV:$mautin[MASV]\n<br>\n";3.3.3.3.DDDDùùùùngngngngPHPPHPPHPPHPssssắắắắppppxxxxếếếếppppkkkkếếếếttttququququảảảảNhiềungườilấydữliệuởtìnhtrạngkhôngcóthứtự,nhưngrồiđoạnmãPHPtiếptheolạisắpthứtựchúng.NênchớrằngsắpxếpbằngSQLnhanhhơnPHP.DùngcúphápORDERBYcủaSQLđểsắpxếpthayvìhàmksort()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ệungayvàolúcnóđượcđịnhnghĩa?Nógiúpchúngtađỡphảiduyệtquatậpkếtquảlầnthứhai.Dovậy,bỏhàmksort()rakhỏichươngtrìnhtrênvàthayđoạnmãSQLbằngđoạndướiđây,códùngdùngcúphápORDERBY:$strsql="SELECTname,email,phoneFROMsome_table";$strsql.="WHEREnameISLIKE'%baggins'ORDERBYname";12.12.12.12.ThiThiThiThiếếếếuuuussssựựựựkikikikiểểểểmmmmllllỗỗỗỗiiiiTôiđãthấynhiềuchươngtrìnhthiếumộtlượngkiểmtralỗiđầyđủ.Nguyênnhânphầnlớnlàdolậptrìnhviênkhôngdànhthờigianđểlênmộtkếhoạchthíchhợpchochươngtrìnhcủamình,vàxácđịnhnhữngvịtrícóthểdẫnđếnlỗi.Kiểmtralỗikhôngnênthựchiệnsaukhiviếtchươngtrình.Sựthiếusóttrongtầmnhìntrướccóthểdẫnđếnnhữnglỗinghiêmtrọng,khôngnhữnggâyrakếtquảsaimàthậmchícònlàmhỏnghệthống(evencauseyoursystemtocrash)!1.1.1.1.MongMongMongMongđợđợđợđợiiiiđđđđiiiiềềềềuuuuttttệệệệnhnhnhnhấấấấttttMọichươngtrìnhđềucókhảnănghưhỏngtrongnhữngtìnhhuốngsai.Đểgiảmthiểunhữngrủironhưthế,bạncầnlênkếhoạchđể:PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology17171717Dormitory204.B518:20PMApril7,2006KiểmtrakếtquảlờigọihàmKiểmtrakếtquảlờigọihệthốngĐặtmứcerror_reportinglàE_ALLtrongtậptinphp.ini1.1.1.1.1.1.1.1.KiKiKiKiểểểểmmmmtratratratrakkkkếếếếttttququququảảảảllllờờờờiiiiggggọọọọiiiihhhhààààmmmmMỗikhibạngọimộthàmlàmthayđổinhiềudữliệu,luônkiểmtrađểđảmbảorằngkếtquảtrảvềtrongphạmvigiátrịđượcchấpnhận(arangeofallowablevalues).Trongthídụdướiđây,mộtlỗiillegaldivisionbyzerosinhratronglầnlặpthứ6củavòngfor($iđượctănglên1trongkhi$jbịgiảmđi1).Vàolầnthứ6,khiđó$i=$j=0.<?phpmt_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";}?>12.12.12.12.ThiThiThiThiếếếếuuuussssựựựựkikikikiểểểểmmmmllllỗỗỗỗiiiiTôiđãthấynhiềuchươngtrìnhthiếumộtlượngkiểmtralỗiđầyđủ.Nguyênnhânphầnlớnlàdolậptrìnhviênkhôngdànhthờigianđểlênmộtkếhoạchthíchhợpchochươngtrìnhcủamình,vàxácđịnhnhữngvịtrícóthểdẫnđếnlỗi.Kiểmtralỗikhôngnênthựchiệnsaukhiviếtchươngtrình.Sựthiếusóttrongtầmnhìntrướccóthểdẫnđếnnhữnglỗinghiêmtrọng,khôngnhữnggâyrakếtquảsaimàthậmchícònlàmhỏnghệthống(evencauseyoursystemtocrash)!1.1.1.1.MongMongMongMongđợđợđợđợiiiiđđđđiiiiềềềềuuuuttttệệệệnhnhnhnhấấấấttttMọichươngtrìnhđềucókhảnănghưhỏngtrongnhữngtìnhhuốngsai.Đểgiảmthiểunhữngrủironhưthế,bạncầnlênkếhoạchđể:KiểmtrakếtquảlờigọihàmKiểmtrakếtquảlờigọihệthốngĐặtmứcerror_reportinglàE_ALLtrongtậptinphp.ini1.1.1.1.1.1.1.1.KiKiKiKiểểểểmmmmtratratratrakkkkếếếếttttququququảảảảllllờờờờiiiiggggọọọọiiiihhhhààààmmmmMỗikhibạngọimộthàmlàmthayđổinhiềudữliệu,luônkiểmtrađểđảmbảorằngkếtquảtrảvềtrongphạmvigiátrịđượcchấpnhận(arangeofallowablevalues).Trongthídụdướiđây,mộtlỗiillegaldivisionbyzerosinhratronglầnlặpthứ6củavòngfor($iđượctănglên1trongkhi$jbịgiảmđi1).Vàolầnthứ6,khiđó$i=$j=0.<?phpmt_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.KiKiKiKiểểểểmmmmtratratratrakkkkếếếếttttququququảảảảllllờờờờiiiiggggọọọọiiiihhhhệệệệththththốốốốngngngngPHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology18181818Dormitory204.B518:20PMApril7,2006Luônđảmbảorằng,khibạnlàmviệcvớicáctiếntrìnhhoặctậptinngoàiPHP,mọithứđềuvậnhànhđúng.Mộtthídụtuyệtvờilàviệckiểmtrađầuracủamộtlờigọihệthốngkhidùnghàmsql_connect().XácnhậnđầurađểkiểmtraliênkếtđếnCSDLlàđúng.Làmsaiđiềunàycóthểdẫnđếncáctruyvấnhỏngvàmấtdữliệutrongkhithậmchí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.ĐặĐặĐặĐặttttmmmmứứứứccccerror_reportingerror_reportingerror_reportingerror_reportingllllààààE_ALLE_ALLE_ALLE_ALLtrongtrongtrongtrongttttậậậậpppptintintintinphp.iniphp.iniphp.iniphp.iniHãyđảmbảobạncấuhìnhvớimứcđộbáolỗicaonhấtcóthể.Nếubạnkhôngđặtnóởmứccaonhất,ítnhấtlàtrongquátrìnhtìmlỗi(debugging),bạncóthểbỏquanhữnglỗinhưlàbiểuthứcchínhquy(regularexpressions)khônghợplệvàcácgiátrịkhôngchínhxác.XemlạilầnnữathídụtôiđãđưatrongphầnKiểmtrakếtquảlờigọihàm,ởdướiđây.Giảsửbạnđặterrorreportingởmứcthấp,E_ERROR.Chúýrằngkếtquảinrakhichươngtrìnhthihànhhàmdo_math:khôngcóthôngbáoillegaldivisionbyzerođãtừnghiệnralầntrước,phần$i=$j=0đơnthuầnkhônghiệnkếtquả.<?phperror_reporting(E_ERROR);mt_srand((double)microtime()*1000000);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";}?>Kếtquảhiệnra:-5148.25-5271-323.75-4931-7713.5?-4702.5-488.5-928.5-1394.752.2.2.2.BBBBộộộộququququảảảảnnnnllllííííllllỗỗỗỗiiiitutututuỳỳỳỳchchchchỉỉỉỉnhnhnhnhPHPthườ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àmset_error_handler().Hàmset_error_handler()cóthểđượcdùngđểghilạicáclỗixảyravớichươngtrìnhcủabạn.Thayvìlàmphiềnngườidùngvớicácthôngbáolỗi,bạncóthểghilạichoriêngbạn,bằngcáchđặtmộthàmquảnlílỗituỳchỉnh(acustomerrorhandlingfunction).PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology19191919Dormitory204.B518:20PMApril7,2006Trongthídụdưới,set_error_handler()đượcdùngđểchỉđịnhhàmerror_handler()làbộquảnlílỗimặcđịnh.Khimộtlỗixảyra,error_handler()đượcgọivàhàmPHPerror_log()đượcdùngđểghilỗivàotậptinerror_file.NếumàlỗithuộcloạiE_ERROR,chúngtasẽthoátchươngtrìnhvàinthôngbáolỗi.<?php//voiderror_handler(stringtype,stringmessage,stringfile,intline)//Customerrorhandler,setbytheset_error_handler()//function.functionerror_handler($type,$message,$file=__FILE__,$line=__LINE__){error_log("$message,$file,$line",3,'error_file');if($type&E_ERROR){print'Anerroroccurred,ithasbeenloggedanditwillbeaddressed.';exit;}}set_error_handler('error_handler');?>11.11.11.11.LLLLạạạạmmmmddddụụụụngngngngHHHHướướướướngngngngđốđốđốđốiiiittttượượượượngngngng(H(H(H(HĐĐĐĐT)T)T)T)Môhìnhhướngđốitượnglàmộtkháiniệmtuyệtvời.Nócórấtnhiềulợiđiểm,màđángchúýnhấtlàkhảnăngdùnglạimãdễdàng.Tuynhiê,theonhưchúngtađượchiểu:PHPkhôngphảilàmộtngônngữHĐT.MặcdùPHPcómộtsựhỗtrợđầyđủvềHĐT,nókhônghiệuquảlẫnkhôngkhônngoannếudùngtínhnăngHĐTcủanókhibạncócáchàmkhácđểđạtđượccùngkếtquả.LídolàsựhỗtrợHĐTcủaPHPkhôngđượcpháttriểnmạnh.Trongkhicóhầuhếtcácphầntửchínhyếu,PHPvẫncònthiếuvàitínhnăngcaocấp(nhưcáckháiniệmprotected,private)màmộtngônngữHĐTthựcsự(thídụnhưC++,Java)phảicó.CácmãhỗtrợHĐTcủaPHPkhôngđượctinhchỉnhvàcũngkhônghiệuquả.NghĩalànếubạndùngmôhìnhHĐTtrongPHP,bạncóthểlàmchậmchươngtrìnhđángkể.Nóichung,mộtứngdụngdùngHĐTsẽchậmđi,cũngnhưlàbạndùngeval()thìsẽchậmhơnlàdùngmãbìnhthường.ĐểminhhoạđầyđủhơnviệcHĐTcógìđókhôngtốt,tôiđãtừngphảidùngnhữngtínhnăngvàkháiniệmcaocấpcủaPHP,mộtvàitrongsốđóthậmchíchưacótàiliệuchỉdẫn.1.1.1.1.ChChChChúúúúngngngngtatatataccccóóóóththththểểểểllllààààmmmmggggììììmmmmààààkhkhkhkhôôôôngngngngccccầầầầnnnnHHHHĐĐĐĐ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ạpmà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ìnhrấtmạnhcóthểđượcviếtmàkhôngdùngmấtcứkháiniệmvàmôhìnhHĐTnào(PHPđượcviế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ạochươngtrìnhcótínhkếtdínhvàdễmởrộngmàkhôngdùngmôhìnhHĐT:PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology20202020Dormitory204.B518:20PMApril7,2006TạomộtAPITạomộttrìnhtựtênNhómcáchàmliênquanvàomộttậptin1.1.1.1.1.1.1.1.TTTTạạạạoooommmmộộộộttttAPIAPIAPIAPIÁpdụng3lớpchochươngtrìnhcủabạn:Thứnhất,cáchàmthựcsựthựchiệncôngviệccủabạnThứhai,mộthàmAPI.ĐâylàhàmgiúpbạnxâydựngcácchươngtrìnhđặcthùChươngtrìnhMortgageRate.php<?php//Theinternalfunctionsarelayer1//Internalfunctiontocalculatethecorrect//interestratetobeusedgiventheamountpermonth//andthetimeitistobepaidinfunction_mort_find_interest_rate($total){if($total<30000)return(7.4);elseif($total>30000)return(3.2);elseif($total>50000)return(2.5);elsereturn(1.7);}//TheAPIislayer2//doublecalculate_mortgage_rate(intmoney,inttime,intmonth)//Calculatethemortgagerategiventhe//thetotalmoney,timeitspaidoverand//theintervalsfunctioncalculate_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//fromaforminclude_once'MortgageRate.php';$price=calculate_mortgage_rate($money,$time,$period);print"Your$periodmonthcostis$price";?> ... PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology1111Dormitory204.B518:20PMApril7,2006àiviếtnàydànhchonhữnglậptrìnhviênPHPquantâmđếnviệctránhnhữnglỗithườnggặpkhisửdụngPHP .Người ọcphảibiếtcáccúphápcủaPHP,vànênbiếtcôngdụngcủacáchàmtrongPHP.MộttrongnhữngđiểmmạnhnhấtcủaPHPvôtìnhtrởthànhmộttrongnhữngđiểmyếunhấtcủanó:ttttíííínhnhnhnhddddễễễễssssửửửửddddụụụụngngngng.NhiếungườichọnPHPvìtínhdễsửdụng,đãkhôngnhậnrarằng:sửdụngđúngPHPPHPPHPPHPccccòòòònnnnkhkhkhkhóóóóhhhhơơơơnnnnccccááááccccngngngngôôôônnnnngngngngữữữữkhkhkhkháááácccc.Trongloạtbàinàysẽlầnlượtnêura21lỗi,từnhữngsailầmgiáokhoa(làmscripttrởnênchậmvàkhóquảnlí)đếnnhữngsailầmchếtngười-cóthểxemlànguồngốccủanhữngsailầmsơđẳng.PHẦN1:7LỖIGIÁOKHOA21.21.21.21.SSSSửửửửddddụụụụngngngngprintf()printf()printf()printf()khkhkhkhôôôôngngngngththththííííchchchchhhhhợợợợppppHàmprintf()dùngđểindữliệucóđịnhdạngNócóthểđượcdùng,thídụ,khibạnmộtinmộtsốkiểudoublevới2s lẻ, hoặctrongbấtkìtìnhhuốngnàobạnmuốnthayđổiđịnhdạngtrướckhiin.Thídụdướiđâyminhhoạcáchdùngđúngcủaprintf():địnhdạngsốPivớiđộchínhxáctheoýmuốnMMMMããããllllệệệệnhnhnhnh(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);?>ChChChChúúúúýýýý....Tôiđãtừnggặpnhữngngườisợdùngprintf(),thayvàođólạidùngnhữnghàmđịnhdạngtựviết,dàiđến30-40dòng ,trong imộtcâuprintf()cóthểlàmmọithứanhtamongmuốn.Nhiếulậptrìnhviêndùngsaiprintf():incácbiến,cácgiátrịtrảvềcủahàmhoặcthỉnhthoảng,chỉlàdữliệuthôngthường.Thườngxảyratronghaitìnhhuống:Câulệnhprint()thíchhợphơnHiểnthịgiátrịtrảvềcủamộthàm1.1.1.1.KhiKhiKhiKhinnnnààààooooprint()print()print()print()ththththííííchchchchhhhhợợợợpppphhhhơơơơn?n?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='khoa_computer2004@yahoo.com';printf("Tencuatuila:%s\n<br>\nHiendangla:%s,%s\n<br>\nLienhevoitoiquaEmail:%s\n<br>\n",$name,$nghenghiep,$diachi,$email);?>Hàmprint()print()print()print()cóthểdùngthaychoprintf()nhưsau:BPHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology2222Dormitory204.B518:20PMApril7,2006printprintprintprint"Tencuatuila:$name\n\n\n\n<br>\n\n\n\nHiendangla:$nghenghiep,$diachi\n\n\n\n<br>\n\n\n\nLienhevoitoiquaEmail:$email\n\n\n\n<br>\n\n\n\n";;;;Khikhôngcầnđịnhdạngsửliệu,dùngprint()thaychoprintf()cónhữnglợiíchsau:ThiThiThiThihhhhàààànhnhnhnhnhanhnhanhnhanhnhanhhhhhơơơơn:n:n:n:hàmprintf()địnhdạngdữliệucủabạntrướckhihiểnthị,nósẽchậmhơnprint()hoặcecho()MMMMããããssssáááángngngngssssủủủủ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ến2.2.2.2.DDDDùùùùngngngngprintf()printf()printf()printf()đểđểđểđểxuxuxuxuấấấấttttddddữữữữlilililiệệệệuuuutrtrtrtrảảảảvvvvềềềềttttừừừừggggọọọọiiiihhhhààààmmmmMộtlỗithườnggặpkháclàdùnprintf()đểxuấtdữliệutrảvềtừgọihàm,thídụnhưhàmđếmdướiđây:Khixuấtgiátrịdohàmtrảvề,toántử.nêndùngđểnốitrongprint(),nhưdướiđây:Dùngtoántử.nhanhhơnviệcdùngprintf()20.20.20.20.ÁÁÁÁppppddddụụụụngngngngsaisaisaisaingngngngữữữữnghnghnghnghĩĩĩĩaaaa(semantics)(semantics)(semantics)(semantics)NhiềulậptrìnhviênsửdụngPHPmàkhôngbiếtđếnnhữngđiểmtinhtếcủangônngữnày.Mộttrongnhữngđiểmđólàsựkhácnhaugiữacúpháp(syntax)vàngữnghĩa(semantics).CCCCúúúúphphphphááááp:p:p:p:nhữngquytắcđịnhnghĩamộtphầntử.Thídụ:dấu$đểtrướcdùngđịnhnghĩabiến,dùngdấu()vàcácthamsốđịnhnghĩamộthàm...NgNgNgNgữữữữnghnghnghnghĩĩĩĩa:a:a:a:nhữngquytắcápdụngtrongcúpháp.Thídụ:mộthàmcó2biếnđịnhnghĩabởicúphápcủanó,haibiếnnàycókiểustring-đólàngữnghĩa.TrongmộtngônngữlỏnglẻonhưPHP,bạncónhiềulựachọnđểviếtlệnh.Cácbiếnkhôngcầncókiểuxácđịnh...Thídụsaumởtậptinvàintừngdòng:Thídụtrênsẽtạolỗi:Warning:Warning:Warning:Warning:SuppliedSuppliedSuppliedSuppliedargumentargumentargumentargumentisisisisnotnotnotnotaaaavalidvalidvalidvalidFile-HandleFile-HandleFile-HandleFile-HandleresourceresourceresourceresourceininininC:\Inetpub\wwwroot\tst.phpC:\Inetpub\wwwroot\tst.phpC:\Inetpub\wwwroot\tst.phpC:\Inetpub\wwwroot\tst.phpononononlinelinelineline4.4.4.4.<?printfprintfprintfprintf("%doccurrencesof%sfound.",count($truyvan),$search_term);?><?printprintprintprintcount($truyvan)."occurrencesof$search_termfound.";?><?$fp=@fopen('vanban.txt','r')ordie('Khongthemofilevanban.txt');while($line=@fgets("$fp",1024))//Loi{print$line;}@fclose("$fp")//Loiordie('Khongthedongvanban.txt');?>PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology3333Dormitory204.B518:20PMApril7,2006Đólàdobiến$fpđặttrongdấunháyképnênđượcchuyểnthànhchuỗi.Thếmàhàmfopen()nhậnmộtđịnhdanhtàinguyên(resourceidentifier)trongthamsốđầucủanó,chứkhôngnhậnmộtchuỗi.Đểgiảiquyếtvấnđề,bạnchỉđơngiảnbỏdấunháyképđi1.1.1.1.CCCCóóóóththththểểểểtrtrtrtráááánhnhnhnhviviviviệệệệccccááááppppddddụụụụngngngngsaisaisaisaingngngngữữữữnghnghnghnghĩĩĩĩa?a?a?a?Ourexampleabovegeneratedanerrorstatement.ButPHPenablesyoutocustomizeyourscriptstofitauniquescenariooroutputrequirement.So,itisatleasttheoreticallypossibleto"getaway"withmisapplyingasemantic.Tôikhônghiểu,nhưngdịchthếnàyđượckhông?Thídụtrêncủachúngtatạoramộtthôngbáolỗi.NhưngPHPchophépbạntuỳbiếncácscriptđểthíchhợpvớimộtkịchbảnkhácthườnghoặcvớicácđòihỏicủathôngtinra.Dođó,ítnhấttrênlíthuyết,bạncókhảnăngtránhviệcápdụngsaingữnghĩa.Vậy,bạncầnbiếtnhữnghậuquảcóthểcó(possibleoutcomes)nếubạnquyếtđịnhhọcvềngữnghĩa.Ápdụngsaidẫnđếnnhữnglỗikhátinhvinếubạnkhôngchúý.Nếubạnmuốntuỳbiếnscript,bạncầnhiểunhữngchủđềchínhsau:KiKiKiKiểểểểu:u:u:u:trongPHP,mỗibiếncómộtkiểuxácđịnhởmộtthờiđiểmxácđịnh,chodùbạncóthểtựdochuyểnđổikiểumộtbiến.Nóimộtcáchkhác,khôngcóbiếnnàolạikhôngkèmtheotínhchấtcủakiểucủanó.PHPcó7kiểucơbản:boolean,resource,integer,double,string,arrayvàobject.TTTTầầầầmmmmvvvvựựựực:c:c:c:trongPHP,mỗibiếncómộttầmvựcriêng.Tầmvựcbiếnquyđịnhbiếncóthểđượctruycậptừđâu,tồntạitrongthờigiannào.Hiểusaikháiniệmcơbảnvề"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ằngkhô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.19.19.ThiThiThiThiếếếếuuuughighighighichchchchúúúúTheoýtôi,mãnguồnthiếughichúlàcănnguyêncủasựlậptrìnhíchkỉ.Nódẫntớinhữnghiệuchỉnhsailầm,hiểusaiýnghĩavàlàmngườiđọcmệtmỏi.Nóichung,lậptrìnhghichú(inlinedocumentation)đượcmọingườikhẳngnhậnlàđiềutốt,nhưnghiếmkhinótồntại.Mộtvấnđềkháclàquánhiềughichú.Dùhiếmgặp,nhưngnólàmchocácđoạnmã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";//Vonglapforinratatcatuoitruocdofor($idx=0;$idx<$age;$idx++){<?$fp=@fopen('vanban.txt','r')ordie(‘Khongthemofiletailieuphp.txt');while($line=@fgets($fp,1024)){print$line;}@fclose($fp)ordie(Khongthedongfilevanban.txt');?>PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology4444Dormitory204.B518:20PMApril7,2006//Inratuoicanhanprint"$idxyearsold\n<br>\n";}//KetthucmaPHP?>1.1.1.1.BaoBaoBaoBaonhinhinhinhiêêêêuuuughighighighichchchchúúúúththththììììđủđủđủđủ????Nhiếuđếnmứcnào,điềuđótuỳthuộcngânsáchcủabạn,vàochínhsáchcủacôngtyvàvàođộphứctạpcủachươngtrình.Tuynhiên,cũngcómộtvàigợiýchobạnLuôncómộtmôtảngắnvềmụcđíchcủahàmngaytrướcđịnhnghĩacủahàmđóThêmghichúvàonhữngchỗcóthểbịhack,hoặcnhữngchỗtưởngrằngsainhưnglạichạyđúngNếumộtđoạnmãnàođócóthểgâynhầmlẫn,hãythêmmộtítghichúvềmụcđíchcủađoạnđó.SaunàybạnsẽthấyđượclợiíchcủanóDùngmộtkiểughichúnhấtquán,/*/*/*/**/*/*/*/hoặclà////////(tr(tr(tr(tráááánhnhnhnhddddùùùùngngngng#)#)#)#)Dướiđâylàmộtthídụvềghichútốt:<?//Random_Numbers.lib//Generatedifferenttypesofrandomnumbers.mt_srand((double)microtime()*1000000);//mixedrandom_element(arrayelements[,arrayweights])//Extractarandomelementfromelements.Weightsis//therelativeprobabilitythateachelementwillbe//selected.functionrandom_element($elements,$weights=array()){//Theremustbeexactlythesameamountofelementsas//thereareweightsforthisalgorithmtoworkproperlyif(count($weights)==count($elements)){foreach($elementsas$element){foreach($weightsas$idx){//Note:wedon'tuse$idx,sincewe//don'twanttooverrideelements.$randomAr[]=$element;}}}else{$randomAr=$elements;}$random_element=mt_rand(0,count($randomAr)-1);return$randomAr[$random_element];}?>18.18.18.18.NhiNhiNhiNhiềềềềuuuubibibibiếếếến,n,n,n,ttttốốốốnnnnnhinhinhinhiềềềềuuuuththththờờờờiiiigiangiangiangianCóvàingườibịámảnhbởibiếntrunggian.Tôikhôngthểhiểunổitạisaoaiđócóthểviếtnhưthếnày:PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology5555Dormitory204.B518:20PMApril7,2006Tạisaophảidùngbiếntrunggian?NókhôngcầnthiếtRủithay,cóvẻnhưrấtnhiềungườikhóbỏđượcthóiquenxấunày.Biếntạmlàmchậmthờigianthihànhchươngtìnhcủabạn.Tốthơnlànênbỏquađóvàgộpcáclờigọihàmvớinhau.Nhữngngườidùngbiếntạmthườnglàmchươngcủahọchạychậmđến25%.Mộtlídokhácđểtránhcóquánhiềubiếntạmlàvìtrôngnókhôngđượcđẹpmắt.Tronghaithídụtrên,thídụnàosúctíchhơn?Thídụnàolàmconmắtdễchịuhơn?Dùngquánhiềubiếntạmcóthểdẫnđếnmãchươngtrìnhkhóđọcvàkhôngsúctích.1.1.1.1.LLLLợợợợiiiiđđđđiiiiểểểểmmmmccccủủủủaaaaddddùùùùngngngngbibibibiếếếếnnnnttttạạạạmmmmCácbiếntạmcólợitrongviệcthaythếcáchàmhaybiểuthứcdàilêthê.Nócóvaitrònhưbídanhgiả.Điềunàyđặcbiệtđúngkhibạndùngmộthàmhaybiểuthứcnhiềulần.Xemxétthídụđây,nókhôngdùngnhiềubiếnhơnmứctốithiểuNộidungtronghàmimplode()dàivàdođókhóđọc.Dùngmộthoặcnhiềubiếntạmcóthểgiúpchúngta:2.2.2.2.CCCCáááácccclulululuậậậậttttchungchungchungchungccccủủủủaaaangngngngóóóónnnntaytaytaytayccccááááiiiiKhiquyếtđịnhcódùngbiếntạmhoặckhông,bạnnênsuynghĩvề2câuhỏi:Bạncódùngbiếnđóítnhấthailần?Tínhđọcđượccủamãcótăngđángkểkhông?Nếuítnhấtmộtcâutrảlờilàcó,thìnêndùngbiếntạm.Cònkhông,vứtnóđivàtổhợpcáchàmlại(nếucần).17.17.17.17.ViViViViếếếếttttllllạạạạiiiiccccáááácccchhhhààààmmmmccccóóóóssssẵẵẵẵnnnnMộtsốnơiphổbiếnmãnguồncácscriptPHPchủtrươngđổitêncáchàmsẵncóđểtạosựdễdàngchocáclậptrìnhviênchuyểntừVBsang.Thídụ:<?$tmp=date("Fd,h:ia");/*ieJanuary3,2:30pm*/print$tmp;?><?printdate("Fd,h:ia");?>//stringreverse_characters(stringstr)//Reverseallofthecharactersinastring.functionreverse_characters($str){returnimplode("",array_reverse(preg_split("//",$str)));}//stringreverse_characters(stringstr)//Reverseallofthecharactersinastring.functionreverse_characters($str){$characters=preg_split("//",$str);$characters=array_reverse($characters);returnimplode("",$characters);}<?functionlen($str){PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology6666Dormitory204.B518:20PMApril7,2006LạicómộtsốngườicốgắngviếtlạicáchàmPHPthô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àmchonhữngngườiđọc(vàsửa)chươngtrìnhcủabạnkhóhiểuvàcảmthấycóquánhiềuhàmdưthừa.Họtựhỏitạisaobạnlạiđiđịnhnghĩahàmtheokiểuđó,thayvìsửdụngcáchàmđịnhnghĩasẵnbởiPHP.Thứhai,địnhnghĩahàmnhưvậycũngsẽlàmchậmchươngtrìnhcủabạn(mộtcáchkhôngcầnthiết).Khôngchỉphảixửlínhiềumãhơn,màmỗilầngọihàmdobạnđịnhnghĩa,bạnđãtốnthờigianchochínhhàmđó,trướckhihàmnguyênthuỷđượcgọi.1.1.1.1.TrTrTrTráááánhnhnhnhviviviviếếếếttttllllạạạạiiiiccccáááácccchhhhààààmmmmccccóóóóssssẵẵẵẵnnnnHãyđươngđầuvớinó.Đôikhithậtlàkhóđểtránhchuyệnnày.Trướctiên,mộtlậptrìnhviênkhôngthểtheokịpcáchàmcủaPHPngayđược.Vàaicóthờigianmàtracứu.Tạisaokhôngviếtlạichokhoẻ?CáchlàmcủatôilàluôncósẵnmộttàiliệuchỉdẫnPHP(PHPmanual)mỗikhiviếtchươngtrình(tácgiảbàinàydùngmộtbảnPDFcótạochỉmục,riêngtôi,ngườidịch,thìdùngmộttàiliệuCHMđầyđủthôngtinvàcócảgópýcủangườisửdụngmàbạncóthểlấyởhttp://www.php.net/docs.php).Sauđó,mỗikhiđịnhviếtmộthàmmởrộngchoPHP,tôiđọclướtquatàiliệuđểxemhàmđócóchưa.Tuynhiên,cầnchúýlà,dobảnchấtmãnguồnmởcủaPHP,bạncóthểtìmđượccáchàmdongườidùngđịnhnghĩatrướckhinóđượcthêmvàoPHP(thídụnhưhàmtìmphầntửkhácnhaugiữahaimảng).Điềunàykhôngcónghĩalàbạnphảihiệuchỉnhlạimã(Thisdoesn'tnecessarilymeanthatyoushouldhavetocorrectthecode.-don'tunderstand)16.16.16.16.KhKhKhKhôôôôngngngngttttááááchchchchbibibibiệệệệttttphphphphầầầầnnnnserverserverserverservervvvvààààclientclientclientclientVàilậptrìnhviêncốkếtnốicảchươngtrìnhvớinhau,nghĩalàghépchungmãHTML(client-side-phầnkhách)vớimãPHP(server-side-phầnchủ)vàotrongmộttậptinlớn.Mặcdùđiềunàytốtchocácsitenhỏ,nhưngnócóthểtrởthànhvấnđềlớnkhicácsiteđótrởnênlớnhơnvàđượcbổsungthêmtínhnăng.Lậptrìnhtheocáchnàylàmnảysinhvấnđềkhóbảotrìvàcáctậptintrởnêncồngkềnh.1.1.1.1.HHHHààààmmmmAPIAPIAPIAPIKhimuốntáchbiệtphầnkhách-chủ,bạncóvàilựachọn.Mộtcáchlàviếtnhữnghàmhiểnthịnộidunglinhđộngvàđặtchúngđúngchỗtrongtrangweb.Thídụdướiđâyminhhoạđiềunày:index.phpindex.phpindex.phpindex.php-phầnkháchreturnstrlen($str);}?>HTMLHTMLHTMLHTML<?phpinclude_once("site.lib");?><html><head><title><?phpprint_header();?></title></head><body><h1><?phpprint_header();?></h1><tableborder="0"cellpadding="0"cellspacing="0"><tr>PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology7777Dormitory204.B518:20PMApril7,2006site.libsite.libsite.libsite.lib-phầnchủNhưbạnthấytrongthídụtrên,táchbiệtkháchchủlàmtăngtínhdễđọctrongchươngtrìnhcủabạn.MộtlợiíchkháclàmộtkhibạnđãcócáchàmAPIhiểnthịnộidung,bạncóthểđểchothiếtkếviênthamgiathayđổibốcụcmàkhôngcầnsửamãchươngtrình.1.1.1.1.1.1.1.1.LLLLợợợợiiiiííííchchchchccccủủủủaaaahhhhààààmmmmAPIAPIAPIAPITươngđốisángsủaNhanh,hầunhưkhônglãngphíthờigian(overhead)1.2.1.2.1.2.1.2.BBBBấấấấttttllllợợợợiiii<tdwidth="25%"><?phpprint_links();?></td><td><?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(){global$site_info;print$site_info->header;}functionprint_body(){global$site_info;printnl2br($site_info->body);}functionprint_links(){global$site_info;$links=explode("\n",$site_info->links);$names=explode("\n",$site_info->link_names);for($i=0;$i<count($links);$i++){print"\t\t\t<axhref=\"$links[$i]\">$names[$i]</a>\n<br>\n";}}?>PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology8888Dormitory204.B518:20PMApril7,2006Khôngsángsủavàdễdàngbằnghệthốngmẫu(templatesystem)CầnmộtítkiếnthứcPHPđểsửamẫu2.2.2.2.HHHHệệệệththththốốốốngngngngkhukhukhukhuôôôônnnnmmmmẫẫẫẫuuuuMộtcáchkhácđểtáchbiệtkháchchủlàdùnghệthốngkhuônmẫu.Nghĩalà,cómộtsốđánhdấunộidungsauđódùngchươngtrìnhphântích,thaythếcácđánhdấuđóbằngthôngtincầnthiết.Thídụ,bạncóthểtạomộ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ônmẫukhátốtlàlớpFastTemplate,cóởwww.thewebmasters.net2.1.2.1.2.1.2.1.ƯƯƯƯuuuuđđđđiiiiểểểểmmmmccccủủủủaaaahhhhệệệệththththốốốốngngngngkhukhukhukhuôôôônnnnmmmmẫẫẫẫuuuuRấttrongsángKhôngcầnkiếnthứcPHPđểsửakhuônmẫu2.2.2.2.2.2.2.2.NhNhNhNhượượượượccccđđđđiiiiểểểểmmmmChậmhơn,bạncầnphântáchtậptinkhuônmẫu,sauđóxuấtraViệchiệnthựcphứctạphơn15.15.15.15.DDDDùùùùngngngngccccááááccccccccấấấấuuuutrtrtrtrúúúúccccllllỗỗỗỗiiiiththththờờờờiiiiCónhiềungườicứdùngmãicácmãvàthưviệnlỗithời.ThídụnhưhọđãviếtmộthàmdùngởPHP2,vàvẫncòndùngnóởPHP4,mặcdùmộthàmcócùngmụcđíchnhưthếđãđượcthêmvàoởPHP3Dùngcáccấutrúclỗithờicóthểlàmchậmchươngtrìnhcủabạn,cũngnhưlàmchonótrởnênkhóhiểu .Người ọccácchươngtrìnhcủabạncóthểkhôngquenvớicáchàmlỗithờicủaPHP.Tuynhiên,khipháthiệnmộtđoạnmã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ắmlấy,làcúphápbeginControlStructurebeginControlStructurebeginControlStructurebeginControlStructure........endControlStructureendControlStructureendControlStructureendControlStructure;HTMLHTMLHTMLHTML<html><head><title>%%PAGE_TITLE%%</title></head><body%%BODY_PROPERTIES%%><h1>%%PAGE_TITLE%%</h1><tableborder="0"cellpadding="0"cellspacing="0"><tr><tdwidth="25%">%%PAGE_LINKS%%</td><td>%%PAGE_CONTENT%%</td></tr></table></body></html><?PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology9999Dormitory204.B518:20PMApril7,2006ĐâylàmộtthóiquenxấuvìNókhôngđượcdùngrộngrãi,chonênnhiềungườihọcsẽbịlẫnlộngiữahaicúphápNókhôngtươngthíchvớingônngữkhác,nghĩalànótrởnênkhóđọcđốivớinhữngngườitronggiaiđoạnquáđộ(mớichuyểntừmộtngônngữnàođósangPHP)Quantrọngnhất,làmộtngàynàođótínhnăngnàysẽbịxoáxổ,bắtbuộcbạnphảiviếtlạitoànbộmãcódùngnó.DấungoặcnhọnluônluônlàmộtphầncủangônngữPHP.Ởtrênchỉlàmộtthídụvềcấutrúclỗithời.Nócònnhiềunữa.Nhưmộtquytắc,bạnnêntheonhữngcácviếttrongtàiliệuPHP.Hầuhếtnóđượccậpnhậtmới.NócũngdùngcáchàmmớinhấtcủaPHPtrongthídụcủamình.NênthườngxuyênkiểmtratàiliệukhibạncóýmuốnmởrộngtínhnăngnàođócủaPHP.Theocáchnày,bạnsẽkhôngphảiviếtlạicáchàmcósẵn.TTTTổổổổngngngngkkkkếếếếttttTrongbàinàybạnđãđiqua7trêntổngsố21lỗimàlậptrìnhviênPHPmắcphải.Nhữnglỗigiáokhoanàybaogồm:SSSSửửửửddddụụụụngngngngsaisaisaisaihhhhààààmmmmprintf()printf()printf()printf()ÁÁÁÁppppddddụụụụngngngngsaisaisaisaingngngngữữữữnghnghnghnghĩĩĩĩaaaaThiThiThiThiếếếếuuuuttttààààiiiililililiệệệệuuuutrongtrongtrongtrongmmmmããããngungungunguồồồồnnnnDDDDùùùùngngngngququququáááánhinhinhinhiềềềềuuuubibibibiếếếếnnnnttttạạạạmmmmViViViViếếếếttttllllạạạạiiiiccccáááácccchhhhààààmmmmccccóóóóssssẵẵẵẵnnnnKhKhKhKhôôôôngngngngttttááááchchchchbibibibiệệệệttttphphphphầầầầnnnnkhkhkhkháááách/chch/chch/chch/chủủủủDDDDùùùùngngngngccccááááccccccccấấấấuuuutrtrtrtrúúúúccccllllỗỗỗỗiiiiththththờờờờiiii//Bad/OutdatedPracticewhile(1):print"5";if($idx++==5):break;endif;endwhile;//BetterPractice//(thecodecouldbeoptimizedthough)while(1){print"5";if($idx++==5){break;}}?>PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology10101010Dormitory204.B518:20PMApril7,2006PHẦN2–LỖINGHIÊMTRỌNG14.14.14.14.KhKhKhKhôôôôngngngngtutututuâââânnnnththththủủủủccccááááccccquyquyquyquyướướướướccccđặđặđặđặttttttttêêêênnnnMộttrongnhữnglỗinghiêmtrọngmàngườilậptrìnhcóthểphạmphảilàđịnhnghĩamộtquyướcđặttêntồi.Tôiđãtiếpquảnnhiềudựánm 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đếnmộtdựánmàngườilậptrìnhcũđãquyếtđịnhđưavàotoànbộchươngtrìnhmộtkiểuđặttênkìlạ(aFlinstonesnamingtheme),khôngphảitôiđùađâu.Cáchbạnđặttênbiếnvàhàmlàtrungtâmcủaviệcxâydựngmộtchươngtrìnhdễđọc.Cónhiềulậptrìnhviênphạmlỗikhiđặttênbiếnvàhàmmànó:quádàihoặcquángắnkhôngliênquanđếnngữcảnhkhôngđểýđếncách-viết-phân-biệt(casesensitivity)ngăncảnkhảnăngdễđọc(đặcbiệtlàcáchàm)1.1.1.1.ĐặĐặĐặĐặttttttttêêêênnnnbibibibiếếếếnnnn1.1.1.1.1.1.1.1.CCCCááááchchchchviviviviếếếếttttphphphphâââânnnnbibibibiệệệệttttTrongPHP,tênbiếncócáchviếtphânbiệt,nghĩalà$uservà$Userlàhoàntoànkhácnhau.Vàingườidùnglợidụngđiểmnà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ỗitênbiến,trongcùngtầmvực(scope),nêncólàtuyệtđốiduynhất.1.2.1.2.1.2.1.2.TTTTêêêênnnnququququáááángngngngắắắắnnnnNhiềungườisửdụngnhữngchữviếttắtđầu(crypticacronym)bíẩnchocácbiếncủahọ,đểrồisaunàyhốitiếcvìquênmấthọđãmuốnámchỉđiềugìkhiđó.Tênbiếnnênmôtảnộidungnó(sẽ)chứa,dùngnguyêntừhoặcnhữngchữviếttắtcóthểhiểuđược.1.3.1.3.1.3.1.3.TTTTêêêênnnnququququááááddddààààiiiiỞkhíacạnhkhác,vàingườilạisửdụngtênbiếnquádài.Nóichung,tênbiếnkhôngnêndàiquáhaitừ.Haitừcóthểđượctáchbiệtbằngdấuphâncách"_"hoặclàviếthoachữđầucủatừthứhai.1.4.1.4.1.4.1.4.ThThThThóóóóiiiiquenquenquenquenttttốốốốttttDướ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);PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology11111111Dormitory204.B518:20PMApril7,20061.5.1.5.1.5.1.5.ThThThThóóóóiiiiquenquenquenquenxxxxấấấấuuuuDướ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.ĐặĐặĐặĐặttttttttêêêênnnnhhhhààààmmmmMọikháiniệmápdụngchotênbiếncũngápdụngchođặttênhàm.Tuynhiên,ngữphápđóngvaitròđặcbiệttrongcáchàm.CáchàmPHP,địnhnghĩasẵnhoặcdongườidùngđịnhnghĩa,làkhông-phân-biệt-cách-viết(notcasesensitive)2.1.2.1.2.1.2.1.DDDDùùùùngngngngđộđộđộđộngngngngttttừừừừHàmcủaPHPtươngđươngvớimộtđộngtừkhinói.Tênhàm,dođó,nênđượchướnghànhđộng(actionoriented).Nócũngnênđượcdùngởthìhiệntại.Thídụ,bạncómộthàmtạomộtsốngẫunhiênvớiphânbốGausse(agaussianrandomnumber),bạnnênđặttênnólàgenerate_gaussian_rand().Chúýcácsửdụngđộngtừhànhđộngtrongtênhàm.Nósẽđặthàmvàongữcảnhthíchhợp<?phplist($num1,$num2)=generate_gaussian_rand();list($num3,$num4)=generate_gaussian_rand();?>Đểsosánh,hãyxemthídụ:<?phplist($num1,$num2)=gaussian_rand_generator();list($num1,$num2)=gaussian_rand_generator();?>Bạncóthấysựkhácbiệt?Thídụthứhaisửdụngdanhtừ,mặcdùvẫnchuyểntảiđượcmụctiêucủahàm,nhưngnóngănngườitađọcmộtcáchtrôichảy.Hãysửdụngđộngtừ!13.13.13.13.KhKhKhKhôôôôngngngngsuysuysuysuynghnghnghnghĩĩĩĩththththấấấấuuuuđáđáđáđáo:o:o:o:CSDLCSDLCSDLCSDL&&&&SQLSQLSQLSQLSốcáchngườitatruycậpcơsởdữliệu(CSDL-database)vàlấykếtquảnhiềuđếnmứcthựcsựngạcnhiên.Nhữngthídụtôiđãgặpbaogồmnhữngtổhợplệnhifvàvònglặpdo..while,cáccâugọinhiềulần,vàcáchàmsql_result()trongvòngfor.Nhữngngườinàycónghĩhọđanglàmgìkhông?Việcviếtcácmã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đúngcôngviệc,kếtquảlàlàmchocácôngchủquăngthờigianvàtiềnbạcrađường.PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology12121212Dormitory204.B518:20PMApril7,2006Sựlấymẫukhôngchínhxáclàmộtthídụhayvềvấnđềnày.Vàingườiviếtlệnhkhôngdànhthờigianđểnghĩthấuđáo.Đúnglàkhôngchỉcóduynhấtmộtcách“đúng”đểlấymẫudữliệu,nhưngnócórấtnhiềucáchkhôngđúng.Phầnnàybaogồmcácchủđề:ÁpdụngsaicáchàmvềCSDLDùngsaiSQL:khônglấynhữngthứbạncầnDùngPHPđểsắpxếpkếtquả1.1.1.1.DDDDùùùùngngngngsaisaisaisaiccccáááácccchhhhààààmmmmCSDLCSDLCSDLCSDLMộtđoạnmãPHPđãdùngcúphápsauđểlấykếtquảtừCSDL(presentedbelowusingageneralizedsetofSQLfunctions):if(!($mautin=sql_fetch_row($truyvan))){print"Motloixayra:Khongtimthaymautinnao!";exit;}do{print"$mautin[0]:$mautin[1]\n<br>\n";}while($mautin=sql_fetch_row($truyvan));ChChChChúúúúýýýý::::Ởtrên,vàcácthídụsaunữa,$truyvandiễntảhandlehoặcpointerđếnmộttậpkế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ề.Cómộtvàivấnđềvớiđoạnmãtrên:Nókiểmtracáctrườnghợp“khôngtìmthấy”("noincidents"case)bằngcáchlấymộtdòngNókhônglưukếtquảvàomảngliênkết(associativearray)1.1.1.1.1.1.1.1.KiKiKiKiểểểểmmmmtratratratratrtrtrtrườườườườngngngnghhhhợợợợppppkhkhkhkhôôôôngngngngttttììììmmmmththththấấấấy:y:y:y:ccccááááchchchchllllààààmmmmsaisaisaisaiBằngcáchdùngsql_fetch_row(),PHPchủtrươngmộtcáchtiếpcậnhàmẩnchoviệcxácđịnhcókếtquảtìmthấyhaykhông.Mộtcáchkháctrựctiếpvàtườngminhlàđếmsốdòngcủakếtquảbằngsql_num_rows()nhưdướiđây:<?phpif(sql_num_rows($truyvan)<=0){print"Motloixayra:Khongtimthaymautinnao!";exit;}while($mautin=sql_fetch_row($truyvan)){print"$mautin[0]:$mautin[1]\n<br>\n";}?>1.2.1.2.1.2.1.2.TTTTừừừừbbbbỏỏỏỏvvvvòòòòngngngngllllặặặặppppDo..WhileDo..WhileDo..WhileDo..WhileTrướchếtvàtrênhết,vònglặpthôtụcdo..whilekhôngbaogiờcầnnữavìkhidùngsql_num_row(),chúngtakhôngphảilấydòngđầutiêncủakếtquảkhimuốnkiểmtrakếtquảtrống.Thídụcũđãdiễntảmộtthídụm trong ó,nếukếtquảkhôngrỗng,dòngđầutiênđãđượclấybằnghàmsql_fetch_row()trongcâulệnhif.Cấutrúcdo..whilecầnthiếttrongtrườnghợpnàyvìkhiđó,bộđếmcủaCSDLđãtănglênvàchuyểnsangdòngkếtiếp.Dođó,bạnphảixửlí(lệnhdo)dòngđầutiênvìnóđãđượclấy.Cáclệnhtiếptheolấycácdòngkế,vàcứthế.PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology13131313Dormitory204.B518:20PMApril7,2006Tạisaovòngdo..whiledo..whiledo..whiledo..whilebịcoinhưthôtục,xấuxa(nasty)?Trongthídụtrên,chỉcó1lệnhinkếtquảtrongvònglặp.Hãytưởngtượng,nếucó10lệnh ,người ọcmãphảitìmđiềukiệnwhilesaucáccâulệnhđó.Mộtcôngviệcphiềntoái.ĐiềukiệnWhilebắtđầucấutrúcthườngxuyênhơnlàkếtthúc.Mộtnhànghiêncứusẽphảicẩnthậnhơnđểkhôngnhầmlẫnđiềukiệnwhilecuốivớiđiềukiệnwhileđầu.1.3.1.3.1.3.1.3.GiGiGiGiữữữữmmmmọọọọiiiiththththứứứứggggọọọọnnnnggggààààngngngngvvvvààààđơđơđơđơnnnngigigigiảảảảnnnnVớitrườnghợpkếtquảrỗng,sql_num_rows()đưađếnngaykếtquả,trongkhisql_fetch_row()thìkhôngsql_fetch_row()sql_fetch_row()sql_fetch_row()sql_fetch_row()nóirằng"Tôitìmthấy0dòngtrongtậpkếtquả.Điềunàynghĩalàcó0kếtquả”(Ifoundnorowsintheresultset.Thismustmeanthattherearenone.)sql_num_rows()sql_num_rows()sql_num_rows()sql_num_rows()nóirằng“Sốdòngtrongkếtquảlà0”(Thenumberofrowsintheresultsetis0).Nhưngđiềuđóthựcsựtạonênsựkhácbiệtnào?Xétcùngmộtsựsosánh,nhưngbâygiờlàtrongngữcảnhcủađiềukiệnifvàcủabiểuthức ,trong oạnlệnhgiả(Pseudo-code):****if(!($mautinif(!($mautinif(!($mautinif(!($mautin====sql_fetch_row($truyvan)))sql_fetch_row($truyvan)))sql_fetch_row($truyvan)))sql_fetch_row($truyvan))){{{{PrintPrintPrintPrintErrorErrorErrorError}:}:}:}: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;$mautinkhôngphảilàzerovàcógiátrịlàTrue.Dođó!(True)=False,vàtiếptụcvớ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){{{{PrintPrintPrintPrintErrorErrorErrorError}:}:}:}:ođếmsốdòngtrongtậpkếtquả.oNếunhỏhơnhaybằng0,inthôngbáolỗi.oNếukhông,tiếptục.Biểuthứcnàodểhiểuhơn?Rõrànglàcáchđếmsẽtrựctiếpvàgọngànghơn.Sựkhácbiệtthựctếlàgì?Vớimộtlệnhifđơngiản,chúngtakhôngthuđượclợinhều.Tuynhiên,vớihơn10000dònglệnh,hãydànhthờigiannghĩđếncáchrõràngnhất,nósẽtiếtkiệmchongườiphântíchchươngtrìnhnhiềugiờsuynghĩa.Lợiíchkháccóthểkểđếnlàchươngtrìnhcủabạnsẽnhanhhơnvàdễpháttriểnhơn.PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology14141414Dormitory204.B518:20PMApril7,20061.4.1.4.1.4.1.4.KhiKhiKhiKhimmmmààààDBMSDBMSDBMSDBMSccccủủủủaaaabbbbạạạạnnnnkhkhkhkhôôôôngngngnghhhhỗỗỗỗtrtrtrtrợợợợsql_num_row()sql_num_row()sql_num_row()sql_num_row()VàiDBMScóthểkhônghỗtrợhàmsql_num_row().TôixinchiasẻvớibạnnếuDBMScủabạnlàmộttrongsốđó.Bạnsẽphảitìmtrongkếtquảrỗngbằngcáchlấydòng.Tuynhiên,trongtrườnghợpnày,nónêndùngmộtbiếnbooleannhưsau:<?php$timthay=false;while($mautin=sql_fetch_array($truyvan)){$timthay=true;}if(!$timthay){print"Loi!";}?>1.5.1.5.1.5.1.5.LLLLấấấấyyyykkkkếếếếttttququququảảảả::::hhhhããããyyyychchchchọọọọnnnnccccááááchchchchccccóóóóííííchchchchVấnđềthứhaitrongđoạnmãnàylànódùngsql_fetch_row()đểlấytậpkếtquả.Hàmsql_fetch_row()chỉtrảvềmảngđánhchỉsố,trongkhiđósql_fetch_array()trảvềmảngđánhchỉsốvàmảngdùngchuỗi.$mautin=sql_fetch_array($truyvan);print$mautin[1];//Cotthu2print$mautin[name];//TencotChChChChúúúúýýýý::::Cónhiềuquyướckhácnhauvềviệcdùngdấunháykhithêmmộtđốisốkiểuchuỗi.Trongthídụvềtêncộtởtrên,vàsuốtbàiviếtnày,nósẽđượcbỏ.Từquanđiểmcủanhàpháttriển,hàmnàocólợihơn?Mảngdùngchuỗigiúpchongườiđọchiểuđượcbạnđanglấycáigìchỉthôngquaviệcđọcmã,nhưthídụđúngdướiđây:<?phpif(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.KhiKhiKhiKhinnnnààààoooosql_fetch_row($truyvan)sql_fetch_row($truyvan)sql_fetch_row($truyvan)sql_fetch_row($truyvan)nnnnêêêênnnnđượđượđượđượccccddddùùùùngngngngTôikhôngthựcsựlàfancủathesql_fetch_row().Tuynhiên,cómộttìnhhuốngmàdùngnókhônggiảmkhả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.Đôikhibạnđểchongườidùngtựđịnhnghĩacâutruyvấn.Trườnghợpnàybạnsẽkhôngbiếtcáccộttrongkếtquả.Dođó,dùnghàmsql_fetch_row()kèmvớicount()sẽxửlíhiệuquảcáccộttrongmộthàng:<?phpfor($i=0;$i<count($mautin);$i++){print"Column".($i+1).$mautin[$i]."\n<BR>\n";}?>2.2.2.2.DDDDùùùùngngngngsaisaisaisaiSQL:SQL:SQL:SQL:khkhkhkhôôôôngngngngllllấấấấyyyynhnhnhnhữữữữngngngngggggììììbbbbạạạạnnnnccccầầầầnnnnPHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology15151515Dormitory204.B518:20PMApril7,2006Nhưlàvấnđềcủathựchành,đơngiảnlàsẽsailầmkhidùngPHPxửlímọidòngcủaCSDL.TôiđãbắtgặpngườitadùngPHPđểchạymộtchươngtrìnhtìmkiếmđơngiảntrên2MBdữliệuvàtựhỏitạisaocáingônngữnàychạylâuthế.Lấy2MBdữliệutừCSDLcóthểlàmbạnchờmãimãi.Ngônngữtruyvấnchuẩn(StandardStandardStandardStandardQueryQueryQueryQueryLanguageLanguageLanguageLanguage----SQLSQLSQLSQL)đượ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ằngmãSQLđangdùngchưađượctốiưuhoá.2.1.2.1.2.1.2.1.MMMMệệệệnhnhnhnhđềđềđềđềWHEREWHEREWHEREWHEREMộtthídụkinhđiểnvềsựhiểuquảcủaSQLliênquanđếnmệnhđềwhere.ĐoạnmãsausẽlấycáckếtquảvàinratênvàmãsinhviêncủasinhviêncóMASV='511203008':<?phpinclude(“includes/taptinketnoi.inc”);$strsql="SELECTMASV,HOTENFROMSINHVIEN";$truyvan=@sql_query($strsql,$ketnoi);if(!$truyvan){die(sprintf("LOI:[%d]:%s",sql_errno(),sql_error()));}if(@sql_num_rows($truyvan)<=0){die("KhongketquatimduoctuCSDL!");}while($mautin=@sql_fetch_array($truyvan)){if($mautin[MASV]==“511203008”){print"MASV:$mautin[MASV]\n<br>\n";print"Hoten:$mautin[HOTEN]\n<br>\n";break;}}?>Đoạnmãtrênchưađượctốiưu:chúngtađangdùngPHPđểtìmkiếmtrongtoànbộCSDL!NếunhưđiềunàykhôngquantrọngđốivớicácCSDLnhỏ,khikíchthướcCSDLtănglênbạnsẽcảmthấymộtcúđấmnặngnềvềhiệunăng.Lờigiảirấtđơngiản:sửacâuSQLđểchứamệnhđềWHERE:$strsql="SELECT*FROMSINHVIEN";$strsql.="WHEREMASV='511203008'";PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology16161616Dormitory204.B518:20PMApril7,2006MệnhđềWHEREchophépbạntìmkiếmchọnlọchơn.Giớihạnchọnlọccủamệnhđềwherechínhlàmộthàmvớiđốisốcủanó.Trongthídụtrênđốisốlà"MASV='511203008'".Bâygiờchúngtađãchọnđượcdữliệucầnthiết,bạnchỉviệcdùngPHPđểinrasauđó:if(@sql_num_rows($truyvan)!=1){die("KhongdungsomautinnhanduoctuCSDL!");}$mautin=@sql_fetch_array($truyvan);print"Hovaten:$mautin[HOTEN]\n<br>\n";print"MASV:$mautin[MASV]\n<br>\n";3.3.3.3.DDDDùùùùngngngngPHPPHPPHPPHPssssắắắắppppxxxxếếếếppppkkkkếếếếttttququququảảảảNhiềungườilấydữliệuởtìnhtrạngkhôngcóthứtự,nhưngrồiđoạnmãPHPtiếptheolạisắpthứtựchúng.NênchớrằngsắpxếpbằngSQLnhanhhơnPHP.DùngcúphápORDERBYcủaSQLđểsắpxếpthayvìhàmksort()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ệungayvàolúcnóđượcđịnhnghĩa?Nógiúpchúngtađỡphảiduyệtquatậpkếtquảlầnthứhai.Dovậy,bỏhàmksort()rakhỏichươngtrìnhtrênvàthayđoạnmãSQLbằngđoạndướiđây,códùngdùngcúphápORDERBY:$strsql="SELECTname,email,phoneFROMsome_table";$strsql.="WHEREnameISLIKE'%baggins'ORDERBYname";12.12.12.12.ThiThiThiThiếếếếuuuussssựựựựkikikikiểểểểmmmmllllỗỗỗỗiiiiTôiđãthấynhiềuchươngtrìnhthiếumộtlượngkiểmtralỗiđầyđủ.Nguyênnhânphầnlớnlàdolậptrìnhviênkhôngdànhthờigianđểlênmộtkếhoạchthíchhợpchochươngtrìnhcủamình,vàxácđịnhnhữngvịtrícóthểdẫnđếnlỗi.Kiểmtralỗikhôngnênthựchiệnsaukhiviếtchươngtrình.Sựthiếusóttrongtầmnhìntrướccóthểdẫnđếnnhữnglỗinghiêmtrọng,khôngnhữnggâyrakếtquảsaimàthậmchícònlàmhỏnghệthống(evencauseyoursystemtocrash)!1.1.1.1.MongMongMongMongđợđợđợđợiiiiđđđđiiiiềềềềuuuuttttệệệệnhnhnhnhấấấấttttMọichươngtrìnhđềucókhảnănghưhỏngtrongnhữngtìnhhuốngsai.Đểgiảmthiểunhữngrủironhưthế,bạncầnlênkếhoạchđể:PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology17171717Dormitory204.B518:20PMApril7,2006KiểmtrakếtquảlờigọihàmKiểmtrakếtquảlờigọihệthốngĐặtmứcerror_reportinglàE_ALLtrongtậptinphp.ini1.1.1.1.1.1.1.1.KiKiKiKiểểểểmmmmtratratratrakkkkếếếếttttququququảảảảllllờờờờiiiiggggọọọọiiiihhhhààààmmmmMỗikhibạngọimộthàmlàmthayđổinhiềudữliệu,luônkiểmtrađểđảmbảorằngkếtquảtrảvềtrongphạmvigiátrịđượcchấpnhận(arangeofallowablevalues).Trongthídụdướiđây,mộtlỗiillegaldivisionbyzerosinhratronglầnlặpthứ6củavòngfor($iđượctănglên1trongkhi$jbịgiảmđi1).Vàolầnthứ6,khiđó$i=$j=0.<?phpmt_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";}?>12.12.12.12.ThiThiThiThiếếếếuuuussssựựựựkikikikiểểểểmmmmllllỗỗỗỗiiiiTôiđãthấynhiềuchươngtrìnhthiếumộtlượngkiểmtralỗiđầyđủ.Nguyênnhânphầnlớnlàdolậptrìnhviênkhôngdànhthờigianđểlênmộtkếhoạchthíchhợpchochươngtrìnhcủamình,vàxácđịnhnhữngvịtrícóthểdẫnđếnlỗi.Kiểmtralỗikhôngnênthựchiệnsaukhiviếtchươngtrình.Sựthiếusóttrongtầmnhìntrướccóthểdẫnđếnnhữnglỗinghiêmtrọng,khôngnhữnggâyrakếtquảsaimàthậmchícònlàmhỏnghệthống(evencauseyoursystemtocrash)!1.1.1.1.MongMongMongMongđợđợđợđợiiiiđđđđiiiiềềềềuuuuttttệệệệnhnhnhnhấấấấttttMọichươngtrìnhđềucókhảnănghưhỏngtrongnhữngtìnhhuốngsai.Đểgiảmthiểunhữngrủironhưthế,bạncầnlênkếhoạchđể:KiểmtrakếtquảlờigọihàmKiểmtrakếtquảlờigọihệthốngĐặtmứcerror_reportinglàE_ALLtrongtậptinphp.ini1.1.1.1.1.1.1.1.KiKiKiKiểểểểmmmmtratratratrakkkkếếếếttttququququảảảảllllờờờờiiiiggggọọọọiiiihhhhààààmmmmMỗikhibạngọimộthàmlàmthayđổinhiềudữliệu,luônkiểmtrađểđảmbảorằngkếtquảtrảvềtrongphạmvigiátrịđượcchấpnhận(arangeofallowablevalues).Trongthídụdướiđây,mộtlỗiillegaldivisionbyzerosinhratronglầnlặpthứ6củavòngfor($iđượctănglên1trongkhi$jbịgiảmđi1).Vàolầnthứ6,khiđó$i=$j=0.<?phpmt_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.KiKiKiKiểểểểmmmmtratratratrakkkkếếếếttttququququảảảảllllờờờờiiiiggggọọọọiiiihhhhệệệệththththốốốốngngngngPHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology18181818Dormitory204.B518:20PMApril7,2006Luônđảmbảorằng,khibạnlàmviệcvớicáctiếntrìnhhoặctậptinngoàiPHP,mọithứđềuvậnhànhđúng.Mộtthídụtuyệtvờilàviệckiểmtrađầuracủamộtlờigọihệthốngkhidùnghàmsql_connect().XácnhậnđầurađểkiểmtraliênkếtđếnCSDLlàđúng.Làmsaiđiềunàycóthểdẫnđếncáctruyvấnhỏngvàmấtdữliệutrongkhithậmchí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.ĐặĐặĐặĐặttttmmmmứứứứccccerror_reportingerror_reportingerror_reportingerror_reportingllllààààE_ALLE_ALLE_ALLE_ALLtrongtrongtrongtrongttttậậậậpppptintintintinphp.iniphp.iniphp.iniphp.iniHãyđảmbảobạncấuhìnhvớimứcđộbáolỗicaonhấtcóthể.Nếubạnkhôngđặtnóởmứccaonhất,ítnhấtlàtrongquátrìnhtìmlỗi(debugging),bạncóthểbỏquanhữnglỗinhưlàbiểuthứcchínhquy(regularexpressions)khônghợplệvàcácgiátrịkhôngchínhxác.XemlạilầnnữathídụtôiđãđưatrongphầnKiểmtrakếtquảlờigọihàm,ởdướiđây.Giảsửbạnđặterrorreportingởmứcthấp,E_ERROR.Chúýrằngkếtquảinrakhichươngtrìnhthihànhhàmdo_math:khôngcóthôngbáoillegaldivisionbyzerođãtừnghiệnralầntrước,phần$i=$j=0đơnthuầnkhônghiệnkếtquả.<?phperror_reporting(E_ERROR);mt_srand((double)microtime()*1000000);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";}?>Kếtquảhiệnra:-5148.25-5271-323.75-4931-7713.5?-4702.5-488.5-928.5-1394.752.2.2.2.BBBBộộộộququququảảảảnnnnllllííííllllỗỗỗỗiiiitutututuỳỳỳỳchchchchỉỉỉỉnhnhnhnhPHPthườ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àmset_error_handler().Hàmset_error_handler()cóthểđượcdùngđểghilạicáclỗixảyravớichươngtrìnhcủabạn.Thayvìlàmphiềnngườidùngvớicácthôngbáolỗi,bạncóthểghilạichoriêngbạn,bằngcáchđặtmộthàmquảnlílỗituỳchỉnh(acustomerrorhandlingfunction).PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology19191919Dormitory204.B518:20PMApril7,2006Trongthídụdưới,set_error_handler()đượcdùngđểchỉđịnhhàmerror_handler()làbộquảnlílỗimặcđịnh.Khimộtlỗixảyra,error_handler()đượcgọivàhàmPHPerror_log()đượcdùngđểghilỗivàotậptinerror_file.NếumàlỗithuộcloạiE_ERROR,chúngtasẽthoátchươngtrìnhvàinthôngbáolỗi.<?php//voiderror_handler(stringtype,stringmessage,stringfile,intline)//Customerrorhandler,setbytheset_error_handler()//function.functionerror_handler($type,$message,$file=__FILE__,$line=__LINE__){error_log("$message,$file,$line",3,'error_file');if($type&E_ERROR){print'Anerroroccurred,ithasbeenloggedanditwillbeaddressed.';exit;}}set_error_handler('error_handler');?>11.11.11.11.LLLLạạạạmmmmddddụụụụngngngngHHHHướướướướngngngngđốđốđốđốiiiittttượượượượngngngng(H(H(H(HĐĐĐĐT)T)T)T)Môhìnhhướngđốitượnglàmộtkháiniệmtuyệtvời.Nócórấtnhiềulợiđiểm,màđángchúýnhấtlàkhảnăngdùnglạimãdễdàng.Tuynhiê,theonhưchúngtađượchiểu:PHPkhôngphảilàmộtngônngữHĐT.MặcdùPHPcómộtsựhỗtrợđầyđủvềHĐT,nókhônghiệuquảlẫnkhôngkhônngoannếudùngtínhnăngHĐTcủanókhibạncócáchàmkhácđểđạtđượccùngkếtquả.LídolàsựhỗtrợHĐTcủaPHPkhôngđượcpháttriểnmạnh.Trongkhicóhầuhếtcácphầntửchínhyếu,PHPvẫncònthiếuvàitínhnăngcaocấp(nhưcáckháiniệmprotected,private)màmộtngônngữHĐTthựcsự(thídụnhưC++,Java)phảicó.CácmãhỗtrợHĐTcủaPHPkhôngđượctinhchỉnhvàcũngkhônghiệuquả.NghĩalànếubạndùngmôhìnhHĐTtrongPHP,bạncóthểlàmchậmchươngtrìnhđángkể.Nóichung,mộtứngdụngdùngHĐTsẽchậmđi,cũngnhưlàbạndùngeval()thìsẽchậmhơnlàdùngmãbìnhthường.ĐểminhhoạđầyđủhơnviệcHĐTcógìđókhôngtốt,tôiđãtừngphảidùngnhữngtínhnăngvàkháiniệmcaocấpcủaPHP,mộtvàitrongsốđóthậmchíchưacótàiliệuchỉdẫn.1.1.1.1.ChChChChúúúúngngngngtatatataccccóóóóththththểểểểllllààààmmmmggggììììmmmmààààkhkhkhkhôôôôngngngngccccầầầầnnnnHHHHĐĐĐĐ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ạpmà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ìnhrấtmạnhcóthểđượcviếtmàkhôngdùngmấtcứkháiniệmvàmôhìnhHĐTnào(PHPđượcviế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ạochươngtrìnhcótínhkếtdínhvàdễmởrộngmàkhôngdùngmôhìnhHĐT:PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology20202020Dormitory204.B518:20PMApril7,2006TạomộtAPITạomộttrìnhtựtênNhómcáchàmliênquanvàomộttậptin1.1.1.1.1.1.1.1.TTTTạạạạoooommmmộộộộttttAPIAPIAPIAPIÁpdụng3lớpchochươngtrìnhcủabạn:Thứnhất,cáchàmthựcsựthựchiệncôngviệccủabạnThứhai,mộthàmAPI.ĐâylàhàmgiúpbạnxâydựngcácchươngtrìnhđặcthùChươngtrìnhMortgageRate.php<?php//Theinternalfunctionsarelayer1//Internalfunctiontocalculatethecorrect//interestratetobeusedgiventheamountpermonth//andthetimeitistobepaidinfunction_mort_find_interest_rate($total){if($total<30000)return(7.4);elseif($total>30000)return(3.2);elseif($total>50000)return(2.5);elsereturn(1.7);}//TheAPIislayer2//doublecalculate_mortgage_rate(intmoney,inttime,intmonth)//Calculatethemortgagerategiventhe//thetotalmoney,timeitspaidoverand//theintervalsfunctioncalculate_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//fromaforminclude_once'MortgageRate.php';$price=calculate_mortgage_rate($money,$time,$period);print"Your$periodmonthcostis$price";?> ... PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology1111Dormitory204.B518:20PMApril7,2006àiviếtnàydànhchonhữnglậptrìnhviênPHPquantâmđếnviệctránhnhữnglỗithườnggặpkhisửdụngPHP .Người ọcphảibiếtcáccúphápcủaPHP,vànênbiếtcôngdụngcủacáchàmtrongPHP.MộttrongnhữngđiểmmạnhnhấtcủaPHPvôtìnhtrởthànhmộttrongnhữngđiểmyếunhấtcủanó:ttttíííínhnhnhnhddddễễễễssssửửửửddddụụụụngngngng.NhiếungườichọnPHPvìtínhdễsửdụng,đãkhôngnhậnrarằng:sửdụngđúngPHPPHPPHPPHPccccòòòònnnnkhkhkhkhóóóóhhhhơơơơnnnnccccááááccccngngngngôôôônnnnngngngngữữữữkhkhkhkháááácccc.Trongloạtbàinàysẽlầnlượtnêura21lỗi,từnhữngsailầmgiáokhoa(làmscripttrởnênchậmvàkhóquảnlí)đếnnhữngsailầmchếtngười-cóthểxemlànguồngốccủanhữngsailầmsơđẳng.PHẦN1:7LỖIGIÁOKHOA21.21.21.21.SSSSửửửửddddụụụụngngngngprintf()printf()printf()printf()khkhkhkhôôôôngngngngththththííííchchchchhhhhợợợợppppHàmprintf()dùngđểindữliệucóđịnhdạngNócóthểđượcdùng,thídụ,khibạnmộtinmộtsốkiểudoublevới2s lẻ, hoặctrongbấtkìtìnhhuốngnàobạnmuốnthayđổiđịnhdạngtrướckhiin.Thídụdướiđâyminhhoạcáchdùngđúngcủaprintf():địnhdạngsốPivớiđộchínhxáctheoýmuốnMMMMããããllllệệệệnhnhnhnh(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);?>ChChChChúúúúýýýý....Tôiđãtừnggặpnhữngngườisợdùngprintf(),thayvàođólạidùngnhữnghàmđịnhdạngtựviết,dàiđến30-40dòng ,trong imộtcâuprintf()cóthểlàmmọithứanhtamongmuốn.Nhiếulậptrìnhviêndùngsaiprintf():incácbiến,cácgiátrịtrảvềcủahàmhoặcthỉnhthoảng,chỉlàdữliệuthôngthường.Thườngxảyratronghaitìnhhuống:Câulệnhprint()thíchhợphơnHiểnthịgiátrịtrảvềcủamộthàm1.1.1.1.KhiKhiKhiKhinnnnààààooooprint()print()print()print()ththththííííchchchchhhhhợợợợpppphhhhơơơơn?n?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='khoa_computer2004@yahoo.com';printf("Tencuatuila:%s\n<br>\nHiendangla:%s,%s\n<br>\nLienhevoitoiquaEmail:%s\n<br>\n",$name,$nghenghiep,$diachi,$email);?>Hàmprint()print()print()print()cóthểdùngthaychoprintf()nhưsau:BPHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology2222Dormitory204.B518:20PMApril7,2006printprintprintprint"Tencuatuila:$name\n\n\n\n<br>\n\n\n\nHiendangla:$nghenghiep,$diachi\n\n\n\n<br>\n\n\n\nLienhevoitoiquaEmail:$email\n\n\n\n<br>\n\n\n\n";;;;Khikhôngcầnđịnhdạngsửliệu,dùngprint()thaychoprintf()cónhữnglợiíchsau:ThiThiThiThihhhhàààànhnhnhnhnhanhnhanhnhanhnhanhhhhhơơơơn:n:n:n:hàmprintf()địnhdạngdữliệucủabạntrướckhihiểnthị,nósẽchậmhơnprint()hoặcecho()MMMMããããssssáááángngngngssssủủủủ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ến2.2.2.2.DDDDùùùùngngngngprintf()printf()printf()printf()đểđểđểđểxuxuxuxuấấấấttttddddữữữữlilililiệệệệuuuutrtrtrtrảảảảvvvvềềềềttttừừừừggggọọọọiiiihhhhààààmmmmMộtlỗithườnggặpkháclàdùnprintf()đểxuấtdữliệutrảvềtừgọihàm,thídụnhưhàmđếmdướiđây:Khixuấtgiátrịdohàmtrảvề,toántử.nêndùngđểnốitrongprint(),nhưdướiđây:Dùngtoántử.nhanhhơnviệcdùngprintf()20.20.20.20.ÁÁÁÁppppddddụụụụngngngngsaisaisaisaingngngngữữữữnghnghnghnghĩĩĩĩaaaa(semantics)(semantics)(semantics)(semantics)NhiềulậptrìnhviênsửdụngPHPmàkhôngbiếtđếnnhữngđiểmtinhtếcủangônngữnày.Mộttrongnhữngđiểmđólàsựkhácnhaugiữacúpháp(syntax)vàngữnghĩa(semantics).CCCCúúúúphphphphááááp:p:p:p:nhữngquytắcđịnhnghĩamộtphầntử.Thídụ:dấu$đểtrướcdùngđịnhnghĩabiến,dùngdấu()vàcácthamsốđịnhnghĩamộthàm...NgNgNgNgữữữữnghnghnghnghĩĩĩĩa:a:a:a:nhữngquytắcápdụngtrongcúpháp.Thídụ:mộthàmcó2biếnđịnhnghĩabởicúphápcủanó,haibiếnnàycókiểustring-đólàngữnghĩa.TrongmộtngônngữlỏnglẻonhưPHP,bạncónhiềulựachọnđểviếtlệnh.Cácbiếnkhôngcầncókiểuxácđịnh...Thídụsaumởtậptinvàintừngdòng:Thídụtrênsẽtạolỗi:Warning:Warning:Warning:Warning:SuppliedSuppliedSuppliedSuppliedargumentargumentargumentargumentisisisisnotnotnotnotaaaavalidvalidvalidvalidFile-HandleFile-HandleFile-HandleFile-HandleresourceresourceresourceresourceininininC:\Inetpub\wwwroot\tst.phpC:\Inetpub\wwwroot\tst.phpC:\Inetpub\wwwroot\tst.phpC:\Inetpub\wwwroot\tst.phpononononlinelinelineline4.4.4.4.<?printfprintfprintfprintf("%doccurrencesof%sfound.",count($truyvan),$search_term);?><?printprintprintprintcount($truyvan)."occurrencesof$search_termfound.";?><?$fp=@fopen('vanban.txt','r')ordie('Khongthemofilevanban.txt');while($line=@fgets("$fp",1024))//Loi{print$line;}@fclose("$fp")//Loiordie('Khongthedongvanban.txt');?>PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology3333Dormitory204.B518:20PMApril7,2006Đólàdobiến$fpđặttrongdấunháyképnênđượcchuyểnthànhchuỗi.Thếmàhàmfopen()nhậnmộtđịnhdanhtàinguyên(resourceidentifier)trongthamsốđầucủanó,chứkhôngnhậnmộtchuỗi.Đểgiảiquyếtvấnđề,bạnchỉđơngiảnbỏdấunháyképđi1.1.1.1.CCCCóóóóththththểểểểtrtrtrtráááánhnhnhnhviviviviệệệệccccááááppppddddụụụụngngngngsaisaisaisaingngngngữữữữnghnghnghnghĩĩĩĩa?a?a?a?Ourexampleabovegeneratedanerrorstatement.ButPHPenablesyoutocustomizeyourscriptstofitauniquescenariooroutputrequirement.So,itisatleasttheoreticallypossibleto"getaway"withmisapplyingasemantic.Tôikhônghiểu,nhưngdịchthếnàyđượckhông?Thídụtrêncủachúngtatạoramộtthôngbáolỗi.NhưngPHPchophépbạntuỳbiếncácscriptđểthíchhợpvớimộtkịchbảnkhácthườnghoặcvớicácđòihỏicủathôngtinra.Dođó,ítnhấttrênlíthuyết,bạncókhảnăngtránhviệcápdụngsaingữnghĩa.Vậy,bạncầnbiếtnhữnghậuquảcóthểcó(possibleoutcomes)nếubạnquyếtđịnhhọcvềngữnghĩa.Ápdụngsaidẫnđếnnhữnglỗikhátinhvinếubạnkhôngchúý.Nếubạnmuốntuỳbiếnscript,bạncầnhiểunhữngchủđềchínhsau:KiKiKiKiểểểểu:u:u:u:trongPHP,mỗibiếncómộtkiểuxácđịnhởmộtthờiđiểmxácđịnh,chodùbạncóthểtựdochuyểnđổikiểumộtbiến.Nóimộtcáchkhác,khôngcóbiếnnàolạikhôngkèmtheotínhchấtcủakiểucủanó.PHPcó7kiểucơbản:boolean,resource,integer,double,string,arrayvàobject.TTTTầầầầmmmmvvvvựựựực:c:c:c:trongPHP,mỗibiếncómộttầmvựcriêng.Tầmvựcbiếnquyđịnhbiếncóthểđượctruycậptừđâu,tồntạitrongthờigiannào.Hiểusaikháiniệmcơbảnvề"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ằngkhô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.19.19.ThiThiThiThiếếếếuuuughighighighichchchchúúúúTheoýtôi,mãnguồnthiếughichúlàcănnguyêncủasựlậptrìnhíchkỉ.Nódẫntớinhữnghiệuchỉnhsailầm,hiểusaiýnghĩavàlàmngườiđọcmệtmỏi.Nóichung,lậptrìnhghichú(inlinedocumentation)đượcmọingườikhẳngnhậnlàđiềutốt,nhưnghiếmkhinótồntại.Mộtvấnđềkháclàquánhiềughichú.Dùhiếmgặp,nhưngnólàmchocácđoạnmã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";//Vonglapforinratatcatuoitruocdofor($idx=0;$idx<$age;$idx++){<?$fp=@fopen('vanban.txt','r')ordie(‘Khongthemofiletailieuphp.txt');while($line=@fgets($fp,1024)){print$line;}@fclose($fp)ordie(Khongthedongfilevanban.txt');?>PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology4444Dormitory204.B518:20PMApril7,2006//Inratuoicanhanprint"$idxyearsold\n<br>\n";}//KetthucmaPHP?>1.1.1.1.BaoBaoBaoBaonhinhinhinhiêêêêuuuughighighighichchchchúúúúththththììììđủđủđủđủ????Nhiếuđếnmứcnào,điềuđótuỳthuộcngânsáchcủabạn,vàochínhsáchcủacôngtyvàvàođộphứctạpcủachươngtrình.Tuynhiên,cũngcómộtvàigợiýchobạnLuôncómộtmôtảngắnvềmụcđíchcủahàmngaytrướcđịnhnghĩacủahàmđóThêmghichúvàonhữngchỗcóthểbịhack,hoặcnhữngchỗtưởngrằngsainhưnglạichạyđúngNếumộtđoạnmãnàođócóthểgâynhầmlẫn,hãythêmmộtítghichúvềmụcđíchcủađoạnđó.SaunàybạnsẽthấyđượclợiíchcủanóDùngmộtkiểughichúnhấtquán,/*/*/*/**/*/*/*/hoặclà////////(tr(tr(tr(tráááánhnhnhnhddddùùùùngngngng#)#)#)#)Dướiđâylàmộtthídụvềghichútốt:<?//Random_Numbers.lib//Generatedifferenttypesofrandomnumbers.mt_srand((double)microtime()*1000000);//mixedrandom_element(arrayelements[,arrayweights])//Extractarandomelementfromelements.Weightsis//therelativeprobabilitythateachelementwillbe//selected.functionrandom_element($elements,$weights=array()){//Theremustbeexactlythesameamountofelementsas//thereareweightsforthisalgorithmtoworkproperlyif(count($weights)==count($elements)){foreach($elementsas$element){foreach($weightsas$idx){//Note:wedon'tuse$idx,sincewe//don'twanttooverrideelements.$randomAr[]=$element;}}}else{$randomAr=$elements;}$random_element=mt_rand(0,count($randomAr)-1);return$randomAr[$random_element];}?>18.18.18.18.NhiNhiNhiNhiềềềềuuuubibibibiếếếến,n,n,n,ttttốốốốnnnnnhinhinhinhiềềềềuuuuththththờờờờiiiigiangiangiangianCóvàingườibịámảnhbởibiếntrunggian.Tôikhôngthểhiểunổitạisaoaiđócóthểviếtnhưthếnày:PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology5555Dormitory204.B518:20PMApril7,2006Tạisaophảidùngbiếntrunggian?NókhôngcầnthiếtRủithay,cóvẻnhưrấtnhiềungườikhóbỏđượcthóiquenxấunày.Biếntạmlàmchậmthờigianthihànhchươngtìnhcủabạn.Tốthơnlànênbỏquađóvàgộpcáclờigọihàmvớinhau.Nhữngngườidùngbiếntạmthườnglàmchươngcủahọchạychậmđến25%.Mộtlídokhácđểtránhcóquánhiềubiếntạmlàvìtrôngnókhôngđượcđẹpmắt.Tronghaithídụtrên,thídụnàosúctíchhơn?Thídụnàolàmconmắtdễchịuhơn?Dùngquánhiềubiếntạmcóthểdẫnđếnmãchươngtrìnhkhóđọcvàkhôngsúctích.1.1.1.1.LLLLợợợợiiiiđđđđiiiiểểểểmmmmccccủủủủaaaaddddùùùùngngngngbibibibiếếếếnnnnttttạạạạmmmmCácbiếntạmcólợitrongviệcthaythếcáchàmhaybiểuthứcdàilêthê.Nócóvaitrònhưbídanhgiả.Điềunàyđặcbiệtđúngkhibạndùngmộthàmhaybiểuthứcnhiềulần.Xemxétthídụđây,nókhôngdùngnhiềubiếnhơnmứctốithiểuNộidungtronghàmimplode()dàivàdođókhóđọc.Dùngmộthoặcnhiềubiếntạmcóthểgiúpchúngta:2.2.2.2.CCCCáááácccclulululuậậậậttttchungchungchungchungccccủủủủaaaangngngngóóóónnnntaytaytaytayccccááááiiiiKhiquyếtđịnhcódùngbiếntạmhoặckhông,bạnnênsuynghĩvề2câuhỏi:Bạncódùngbiếnđóítnhấthailần?Tínhđọcđượccủamãcótăngđángkểkhông?Nếuítnhấtmộtcâutrảlờilàcó,thìnêndùngbiếntạm.Cònkhông,vứtnóđivàtổhợpcáchàmlại(nếucần).17.17.17.17.ViViViViếếếếttttllllạạạạiiiiccccáááácccchhhhààààmmmmccccóóóóssssẵẵẵẵnnnnMộtsốnơiphổbiếnmãnguồncácscriptPHPchủtrươngđổitêncáchàmsẵncóđểtạosựdễdàngchocáclậptrìnhviênchuyểntừVBsang.Thídụ:<?$tmp=date("Fd,h:ia");/*ieJanuary3,2:30pm*/print$tmp;?><?printdate("Fd,h:ia");?>//stringreverse_characters(stringstr)//Reverseallofthecharactersinastring.functionreverse_characters($str){returnimplode("",array_reverse(preg_split("//",$str)));}//stringreverse_characters(stringstr)//Reverseallofthecharactersinastring.functionreverse_characters($str){$characters=preg_split("//",$str);$characters=array_reverse($characters);returnimplode("",$characters);}<?functionlen($str){PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology6666Dormitory204.B518:20PMApril7,2006LạicómộtsốngườicốgắngviếtlạicáchàmPHPthô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àmchonhữngngườiđọc(vàsửa)chươngtrìnhcủabạnkhóhiểuvàcảmthấycóquánhiềuhàmdưthừa.Họtựhỏitạisaobạnlạiđiđịnhnghĩahàmtheokiểuđó,thayvìsửdụngcáchàmđịnhnghĩasẵnbởiPHP.Thứhai,địnhnghĩahàmnhưvậycũngsẽlàmchậmchươngtrìnhcủabạn(mộtcáchkhôngcầnthiết).Khôngchỉphảixửlínhiềumãhơn,màmỗilầngọihàmdobạnđịnhnghĩa,bạnđãtốnthờigianchochínhhàmđó,trướckhihàmnguyênthuỷđượcgọi.1.1.1.1.TrTrTrTráááánhnhnhnhviviviviếếếếttttllllạạạạiiiiccccáááácccchhhhààààmmmmccccóóóóssssẵẵẵẵnnnnHãyđươngđầuvớinó.Đôikhithậtlàkhóđểtránhchuyệnnày.Trướctiên,mộtlậptrìnhviênkhôngthểtheokịpcáchàmcủaPHPngayđược.Vàaicóthờigianmàtracứu.Tạisaokhôngviếtlạichokhoẻ?CáchlàmcủatôilàluôncósẵnmộttàiliệuchỉdẫnPHP(PHPmanual)mỗikhiviếtchươngtrình(tácgiảbàinàydùngmộtbảnPDFcótạochỉmục,riêngtôi,ngườidịch,thìdùngmộttàiliệuCHMđầyđủthôngtinvàcócảgópýcủangườisửdụngmàbạncóthểlấyởhttp://www.php.net/docs.php).Sauđó,mỗikhiđịnhviếtmộthàmmởrộngchoPHP,tôiđọclướtquatàiliệuđểxemhàmđócóchưa.Tuynhiên,cầnchúýlà,dobảnchấtmãnguồnmởcủaPHP,bạncóthểtìmđượccáchàmdongườidùngđịnhnghĩatrướckhinóđượcthêmvàoPHP(thídụnhưhàmtìmphầntửkhácnhaugiữahaimảng).Điềunàykhôngcónghĩalàbạnphảihiệuchỉnhlạimã(Thisdoesn'tnecessarilymeanthatyoushouldhavetocorrectthecode.-don'tunderstand)16.16.16.16.KhKhKhKhôôôôngngngngttttááááchchchchbibibibiệệệệttttphphphphầầầầnnnnserverserverserverservervvvvààààclientclientclientclientVàilậptrìnhviêncốkếtnốicảchươngtrìnhvớinhau,nghĩalàghépchungmãHTML(client-side-phầnkhách)vớimãPHP(server-side-phầnchủ)vàotrongmộttậptinlớn.Mặcdùđiềunàytốtchocácsitenhỏ,nhưngnócóthểtrởthànhvấnđềlớnkhicácsiteđótrởnênlớnhơnvàđượcbổsungthêmtínhnăng.Lậptrìnhtheocáchnàylàmnảysinhvấnđềkhóbảotrìvàcáctậptintrởnêncồngkềnh.1.1.1.1.HHHHààààmmmmAPIAPIAPIAPIKhimuốntáchbiệtphầnkhách-chủ,bạncóvàilựachọn.Mộtcáchlàviếtnhữnghàmhiểnthịnộidunglinhđộngvàđặtchúngđúngchỗtrongtrangweb.Thídụdướiđâyminhhoạđiềunày:index.phpindex.phpindex.phpindex.php-phầnkháchreturnstrlen($str);}?>HTMLHTMLHTMLHTML<?phpinclude_once("site.lib");?><html><head><title><?phpprint_header();?></title></head><body><h1><?phpprint_header();?></h1><tableborder="0"cellpadding="0"cellspacing="0"><tr>PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology7777Dormitory204.B518:20PMApril7,2006site.libsite.libsite.libsite.lib-phầnchủNhưbạnthấytrongthídụtrên,táchbiệtkháchchủlàmtăngtínhdễđọctrongchươngtrìnhcủabạn.MộtlợiíchkháclàmộtkhibạnđãcócáchàmAPIhiểnthịnộidung,bạncóthểđểchothiếtkếviênthamgiathayđổibốcụcmàkhôngcầnsửamãchươngtrình.1.1.1.1.1.1.1.1.LLLLợợợợiiiiííííchchchchccccủủủủaaaahhhhààààmmmmAPIAPIAPIAPITươngđốisángsủaNhanh,hầunhưkhônglãngphíthờigian(overhead)1.2.1.2.1.2.1.2.BBBBấấấấttttllllợợợợiiii<tdwidth="25%"><?phpprint_links();?></td><td><?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(){global$site_info;print$site_info->header;}functionprint_body(){global$site_info;printnl2br($site_info->body);}functionprint_links(){global$site_info;$links=explode("\n",$site_info->links);$names=explode("\n",$site_info->link_names);for($i=0;$i<count($links);$i++){print"\t\t\t<axhref=\"$links[$i]\">$names[$i]</a>\n<br>\n";}}?>PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology8888Dormitory204.B518:20PMApril7,2006Khôngsángsủavàdễdàngbằnghệthốngmẫu(templatesystem)CầnmộtítkiếnthứcPHPđểsửamẫu2.2.2.2.HHHHệệệệththththốốốốngngngngkhukhukhukhuôôôônnnnmmmmẫẫẫẫuuuuMộtcáchkhácđểtáchbiệtkháchchủlàdùnghệthốngkhuônmẫu.Nghĩalà,cómộtsốđánhdấunộidungsauđódùngchươngtrìnhphântích,thaythếcácđánhdấuđóbằngthôngtincầnthiết.Thídụ,bạncóthểtạomộ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ônmẫukhátốtlàlớpFastTemplate,cóởwww.thewebmasters.net2.1.2.1.2.1.2.1.ƯƯƯƯuuuuđđđđiiiiểểểểmmmmccccủủủủaaaahhhhệệệệththththốốốốngngngngkhukhukhukhuôôôônnnnmmmmẫẫẫẫuuuuRấttrongsángKhôngcầnkiếnthứcPHPđểsửakhuônmẫu2.2.2.2.2.2.2.2.NhNhNhNhượượượượccccđđđđiiiiểểểểmmmmChậmhơn,bạncầnphântáchtậptinkhuônmẫu,sauđóxuấtraViệchiệnthựcphứctạphơn15.15.15.15.DDDDùùùùngngngngccccááááccccccccấấấấuuuutrtrtrtrúúúúccccllllỗỗỗỗiiiiththththờờờờiiiiCónhiềungườicứdùngmãicácmãvàthưviệnlỗithời.ThídụnhưhọđãviếtmộthàmdùngởPHP2,vàvẫncòndùngnóởPHP4,mặcdùmộthàmcócùngmụcđíchnhưthếđãđượcthêmvàoởPHP3Dùngcáccấutrúclỗithờicóthểlàmchậmchươngtrìnhcủabạn,cũngnhưlàmchonótrởnênkhóhiểu .Người ọccácchươngtrìnhcủabạncóthểkhôngquenvớicáchàmlỗithờicủaPHP.Tuynhiên,khipháthiệnmộtđoạnmã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ắmlấy,làcúphápbeginControlStructurebeginControlStructurebeginControlStructurebeginControlStructure........endControlStructureendControlStructureendControlStructureendControlStructure;HTMLHTMLHTMLHTML<html><head><title>%%PAGE_TITLE%%</title></head><body%%BODY_PROPERTIES%%><h1>%%PAGE_TITLE%%</h1><tableborder="0"cellpadding="0"cellspacing="0"><tr><tdwidth="25%">%%PAGE_LINKS%%</td><td>%%PAGE_CONTENT%%</td></tr></table></body></html><?PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology9999Dormitory204.B518:20PMApril7,2006ĐâylàmộtthóiquenxấuvìNókhôngđượcdùngrộngrãi,chonênnhiềungườihọcsẽbịlẫnlộngiữahaicúphápNókhôngtươngthíchvớingônngữkhác,nghĩalànótrởnênkhóđọcđốivớinhữngngườitronggiaiđoạnquáđộ(mớichuyểntừmộtngônngữnàođósangPHP)Quantrọngnhất,làmộtngàynàođótínhnăngnàysẽbịxoáxổ,bắtbuộcbạnphảiviếtlạitoànbộmãcódùngnó.DấungoặcnhọnluônluônlàmộtphầncủangônngữPHP.Ởtrênchỉlàmộtthídụvềcấutrúclỗithời.Nócònnhiềunữa.Nhưmộtquytắc,bạnnêntheonhữngcácviếttrongtàiliệuPHP.Hầuhếtnóđượccậpnhậtmới.NócũngdùngcáchàmmớinhấtcủaPHPtrongthídụcủamình.NênthườngxuyênkiểmtratàiliệukhibạncóýmuốnmởrộngtínhnăngnàođócủaPHP.Theocáchnày,bạnsẽkhôngphảiviếtlạicáchàmcósẵn.TTTTổổổổngngngngkkkkếếếếttttTrongbàinàybạnđãđiqua7trêntổngsố21lỗimàlậptrìnhviênPHPmắcphải.Nhữnglỗigiáokhoanàybaogồm:SSSSửửửửddddụụụụngngngngsaisaisaisaihhhhààààmmmmprintf()printf()printf()printf()ÁÁÁÁppppddddụụụụngngngngsaisaisaisaingngngngữữữữnghnghnghnghĩĩĩĩaaaaThiThiThiThiếếếếuuuuttttààààiiiililililiệệệệuuuutrongtrongtrongtrongmmmmããããngungungunguồồồồnnnnDDDDùùùùngngngngququququáááánhinhinhinhiềềềềuuuubibibibiếếếếnnnnttttạạạạmmmmViViViViếếếếttttllllạạạạiiiiccccáááácccchhhhààààmmmmccccóóóóssssẵẵẵẵnnnnKhKhKhKhôôôôngngngngttttááááchchchchbibibibiệệệệttttphphphphầầầầnnnnkhkhkhkháááách/chch/chch/chch/chủủủủDDDDùùùùngngngngccccááááccccccccấấấấuuuutrtrtrtrúúúúccccllllỗỗỗỗiiiiththththờờờờiiii//Bad/OutdatedPracticewhile(1):print"5";if($idx++==5):break;endif;endwhile;//BetterPractice//(thecodecouldbeoptimizedthough)while(1){print"5";if($idx++==5){break;}}?>PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology10101010Dormitory204.B518:20PMApril7,2006PHẦN2–LỖINGHIÊMTRỌNG14.14.14.14.KhKhKhKhôôôôngngngngtutututuâââânnnnththththủủủủccccááááccccquyquyquyquyướướướướccccđặđặđặđặttttttttêêêênnnnMộttrongnhữnglỗinghiêmtrọngmàngườilậptrìnhcóthểphạmphảilàđịnhnghĩamộtquyướcđặttêntồi.Tôiđãtiếpquảnnhiềudựánm 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đếnmộtdựánmàngườilậptrìnhcũđãquyếtđịnhđưavàotoànbộchươngtrìnhmộtkiểuđặttênkìlạ(aFlinstonesnamingtheme),khôngphảitôiđùađâu.Cáchbạnđặttênbiếnvàhàmlàtrungtâmcủaviệcxâydựngmộtchươngtrìnhdễđọc.Cónhiềulậptrìnhviênphạmlỗikhiđặttênbiếnvàhàmmànó:quádàihoặcquángắnkhôngliênquanđếnngữcảnhkhôngđểýđếncách-viết-phân-biệt(casesensitivity)ngăncảnkhảnăngdễđọc(đặcbiệtlàcáchàm)1.1.1.1.ĐặĐặĐặĐặttttttttêêêênnnnbibibibiếếếếnnnn1.1.1.1.1.1.1.1.CCCCááááchchchchviviviviếếếếttttphphphphâââânnnnbibibibiệệệệttttTrongPHP,tênbiếncócáchviếtphânbiệt,nghĩalà$uservà$Userlàhoàntoànkhácnhau.Vàingườidùnglợidụngđiểmnà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ỗitênbiến,trongcùngtầmvực(scope),nêncólàtuyệtđốiduynhất.1.2.1.2.1.2.1.2.TTTTêêêênnnnququququáááángngngngắắắắnnnnNhiềungườisửdụngnhữngchữviếttắtđầu(crypticacronym)bíẩnchocácbiếncủahọ,đểrồisaunàyhốitiếcvìquênmấthọđãmuốnámchỉđiềugìkhiđó.Tênbiếnnênmôtảnộidungnó(sẽ)chứa,dùngnguyêntừhoặcnhữngchữviếttắtcóthểhiểuđược.1.3.1.3.1.3.1.3.TTTTêêêênnnnququququááááddddààààiiiiỞkhíacạnhkhác,vàingườilạisửdụngtênbiếnquádài.Nóichung,tênbiếnkhôngnêndàiquáhaitừ.Haitừcóthểđượctáchbiệtbằngdấuphâncách"_"hoặclàviếthoachữđầucủatừthứhai.1.4.1.4.1.4.1.4.ThThThThóóóóiiiiquenquenquenquenttttốốốốttttDướ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);PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology11111111Dormitory204.B518:20PMApril7,20061.5.1.5.1.5.1.5.ThThThThóóóóiiiiquenquenquenquenxxxxấấấấuuuuDướ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.ĐặĐặĐặĐặttttttttêêêênnnnhhhhààààmmmmMọikháiniệmápdụngchotênbiếncũngápdụngchođặttênhàm.Tuynhiên,ngữphápđóngvaitròđặcbiệttrongcáchàm.CáchàmPHP,địnhnghĩasẵnhoặcdongườidùngđịnhnghĩa,làkhông-phân-biệt-cách-viết(notcasesensitive)2.1.2.1.2.1.2.1.DDDDùùùùngngngngđộđộđộđộngngngngttttừừừừHàmcủaPHPtươngđươngvớimộtđộngtừkhinói.Tênhàm,dođó,nênđượchướnghànhđộng(actionoriented).Nócũngnênđượcdùngởthìhiệntại.Thídụ,bạncómộthàmtạomộtsốngẫunhiênvớiphânbốGausse(agaussianrandomnumber),bạnnênđặttênnólàgenerate_gaussian_rand().Chúýcácsửdụngđộngtừhànhđộngtrongtênhàm.Nósẽđặthàmvàongữcảnhthíchhợp<?phplist($num1,$num2)=generate_gaussian_rand();list($num3,$num4)=generate_gaussian_rand();?>Đểsosánh,hãyxemthídụ:<?phplist($num1,$num2)=gaussian_rand_generator();list($num1,$num2)=gaussian_rand_generator();?>Bạncóthấysựkhácbiệt?Thídụthứhaisửdụngdanhtừ,mặcdùvẫnchuyểntảiđượcmụctiêucủahàm,nhưngnóngănngườitađọcmộtcáchtrôichảy.Hãysửdụngđộngtừ!13.13.13.13.KhKhKhKhôôôôngngngngsuysuysuysuynghnghnghnghĩĩĩĩththththấấấấuuuuđáđáđáđáo:o:o:o:CSDLCSDLCSDLCSDL&&&&SQLSQLSQLSQLSốcáchngườitatruycậpcơsởdữliệu(CSDL-database)vàlấykếtquảnhiềuđếnmứcthựcsựngạcnhiên.Nhữngthídụtôiđãgặpbaogồmnhữngtổhợplệnhifvàvònglặpdo..while,cáccâugọinhiềulần,vàcáchàmsql_result()trongvòngfor.Nhữngngườinàycónghĩhọđanglàmgìkhông?Việcviếtcácmã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đúngcôngviệc,kếtquảlàlàmchocácôngchủquăngthờigianvàtiềnbạcrađường.PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology12121212Dormitory204.B518:20PMApril7,2006Sựlấymẫukhôngchínhxáclàmộtthídụhayvềvấnđềnày.Vàingườiviếtlệnhkhôngdànhthờigianđểnghĩthấuđáo.Đúnglàkhôngchỉcóduynhấtmộtcách“đúng”đểlấymẫudữliệu,nhưngnócórấtnhiềucáchkhôngđúng.Phầnnàybaogồmcácchủđề:ÁpdụngsaicáchàmvềCSDLDùngsaiSQL:khônglấynhữngthứbạncầnDùngPHPđểsắpxếpkếtquả1.1.1.1.DDDDùùùùngngngngsaisaisaisaiccccáááácccchhhhààààmmmmCSDLCSDLCSDLCSDLMộtđoạnmãPHPđãdùngcúphápsauđểlấykếtquảtừCSDL(presentedbelowusingageneralizedsetofSQLfunctions):if(!($mautin=sql_fetch_row($truyvan))){print"Motloixayra:Khongtimthaymautinnao!";exit;}do{print"$mautin[0]:$mautin[1]\n<br>\n";}while($mautin=sql_fetch_row($truyvan));ChChChChúúúúýýýý::::Ởtrên,vàcácthídụsaunữa,$truyvandiễntảhandlehoặcpointerđếnmộttậpkế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ề.Cómộtvàivấnđềvớiđoạnmãtrên:Nókiểmtracáctrườnghợp“khôngtìmthấy”("noincidents"case)bằngcáchlấymộtdòngNókhônglưukếtquảvàomảngliênkết(associativearray)1.1.1.1.1.1.1.1.KiKiKiKiểểểểmmmmtratratratratrtrtrtrườườườườngngngnghhhhợợợợppppkhkhkhkhôôôôngngngngttttììììmmmmththththấấấấy:y:y:y:ccccááááchchchchllllààààmmmmsaisaisaisaiBằngcáchdùngsql_fetch_row(),PHPchủtrươngmộtcáchtiếpcậnhàmẩnchoviệcxácđịnhcókếtquảtìmthấyhaykhông.Mộtcáchkháctrựctiếpvàtườngminhlàđếmsốdòngcủakếtquảbằngsql_num_rows()nhưdướiđây:<?phpif(sql_num_rows($truyvan)<=0){print"Motloixayra:Khongtimthaymautinnao!";exit;}while($mautin=sql_fetch_row($truyvan)){print"$mautin[0]:$mautin[1]\n<br>\n";}?>1.2.1.2.1.2.1.2.TTTTừừừừbbbbỏỏỏỏvvvvòòòòngngngngllllặặặặppppDo..WhileDo..WhileDo..WhileDo..WhileTrướchếtvàtrênhết,vònglặpthôtụcdo..whilekhôngbaogiờcầnnữavìkhidùngsql_num_row(),chúngtakhôngphảilấydòngđầutiêncủakếtquảkhimuốnkiểmtrakếtquảtrống.Thídụcũđãdiễntảmộtthídụm trong ó,nếukếtquảkhôngrỗng,dòngđầutiênđãđượclấybằnghàmsql_fetch_row()trongcâulệnhif.Cấutrúcdo..whilecầnthiếttrongtrườnghợpnàyvìkhiđó,bộđếmcủaCSDLđãtănglênvàchuyểnsangdòngkếtiếp.Dođó,bạnphảixửlí(lệnhdo)dòngđầutiênvìnóđãđượclấy.Cáclệnhtiếptheolấycácdòngkế,vàcứthế.PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology13131313Dormitory204.B518:20PMApril7,2006Tạisaovòngdo..whiledo..whiledo..whiledo..whilebịcoinhưthôtục,xấuxa(nasty)?Trongthídụtrên,chỉcó1lệnhinkếtquảtrongvònglặp.Hãytưởngtượng,nếucó10lệnh ,người ọcmãphảitìmđiềukiệnwhilesaucáccâulệnhđó.Mộtcôngviệcphiềntoái.ĐiềukiệnWhilebắtđầucấutrúcthườngxuyênhơnlàkếtthúc.Mộtnhànghiêncứusẽphảicẩnthậnhơnđểkhôngnhầmlẫnđiềukiệnwhilecuốivớiđiềukiệnwhileđầu.1.3.1.3.1.3.1.3.GiGiGiGiữữữữmmmmọọọọiiiiththththứứứứggggọọọọnnnnggggààààngngngngvvvvààààđơđơđơđơnnnngigigigiảảảảnnnnVớitrườnghợpkếtquảrỗng,sql_num_rows()đưađếnngaykếtquả,trongkhisql_fetch_row()thìkhôngsql_fetch_row()sql_fetch_row()sql_fetch_row()sql_fetch_row()nóirằng"Tôitìmthấy0dòngtrongtậpkếtquả.Điềunàynghĩalàcó0kếtquả”(Ifoundnorowsintheresultset.Thismustmeanthattherearenone.)sql_num_rows()sql_num_rows()sql_num_rows()sql_num_rows()nóirằng“Sốdòngtrongkếtquảlà0”(Thenumberofrowsintheresultsetis0).Nhưngđiềuđóthựcsựtạonênsựkhácbiệtnào?Xétcùngmộtsựsosánh,nhưngbâygiờlàtrongngữcảnhcủađiềukiệnifvàcủabiểuthức ,trong oạnlệnhgiả(Pseudo-code):****if(!($mautinif(!($mautinif(!($mautinif(!($mautin====sql_fetch_row($truyvan)))sql_fetch_row($truyvan)))sql_fetch_row($truyvan)))sql_fetch_row($truyvan))){{{{PrintPrintPrintPrintErrorErrorErrorError}:}:}:}: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;$mautinkhôngphảilàzerovàcógiátrịlàTrue.Dođó!(True)=False,vàtiếptụcvớ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){{{{PrintPrintPrintPrintErrorErrorErrorError}:}:}:}:ođếmsốdòngtrongtậpkếtquả.oNếunhỏhơnhaybằng0,inthôngbáolỗi.oNếukhông,tiếptục.Biểuthứcnàodểhiểuhơn?Rõrànglàcáchđếmsẽtrựctiếpvàgọngànghơn.Sựkhácbiệtthựctếlàgì?Vớimộtlệnhifđơngiản,chúngtakhôngthuđượclợinhều.Tuynhiên,vớihơn10000dònglệnh,hãydànhthờigiannghĩđếncáchrõràngnhất,nósẽtiếtkiệmchongườiphântíchchươngtrìnhnhiềugiờsuynghĩa.Lợiíchkháccóthểkểđếnlàchươngtrìnhcủabạnsẽnhanhhơnvàdễpháttriểnhơn.PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology14141414Dormitory204.B518:20PMApril7,20061.4.1.4.1.4.1.4.KhiKhiKhiKhimmmmààààDBMSDBMSDBMSDBMSccccủủủủaaaabbbbạạạạnnnnkhkhkhkhôôôôngngngnghhhhỗỗỗỗtrtrtrtrợợợợsql_num_row()sql_num_row()sql_num_row()sql_num_row()VàiDBMScóthểkhônghỗtrợhàmsql_num_row().TôixinchiasẻvớibạnnếuDBMScủabạnlàmộttrongsốđó.Bạnsẽphảitìmtrongkếtquảrỗngbằngcáchlấydòng.Tuynhiên,trongtrườnghợpnày,nónêndùngmộtbiếnbooleannhưsau:<?php$timthay=false;while($mautin=sql_fetch_array($truyvan)){$timthay=true;}if(!$timthay){print"Loi!";}?>1.5.1.5.1.5.1.5.LLLLấấấấyyyykkkkếếếếttttququququảảảả::::hhhhããããyyyychchchchọọọọnnnnccccááááchchchchccccóóóóííííchchchchVấnđềthứhaitrongđoạnmãnàylànódùngsql_fetch_row()đểlấytậpkếtquả.Hàmsql_fetch_row()chỉtrảvềmảngđánhchỉsố,trongkhiđósql_fetch_array()trảvềmảngđánhchỉsốvàmảngdùngchuỗi.$mautin=sql_fetch_array($truyvan);print$mautin[1];//Cotthu2print$mautin[name];//TencotChChChChúúúúýýýý::::Cónhiềuquyướckhácnhauvềviệcdùngdấunháykhithêmmộtđốisốkiểuchuỗi.Trongthídụvềtêncộtởtrên,vàsuốtbàiviếtnày,nósẽđượcbỏ.Từquanđiểmcủanhàpháttriển,hàmnàocólợihơn?Mảngdùngchuỗigiúpchongườiđọchiểuđượcbạnđanglấycáigìchỉthôngquaviệcđọcmã,nhưthídụđúngdướiđây:<?phpif(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.KhiKhiKhiKhinnnnààààoooosql_fetch_row($truyvan)sql_fetch_row($truyvan)sql_fetch_row($truyvan)sql_fetch_row($truyvan)nnnnêêêênnnnđượđượđượđượccccddddùùùùngngngngTôikhôngthựcsựlàfancủathesql_fetch_row().Tuynhiên,cómộttìnhhuốngmàdùngnókhônggiảmkhả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.Đôikhibạnđểchongườidùngtựđịnhnghĩacâutruyvấn.Trườnghợpnàybạnsẽkhôngbiếtcáccộttrongkếtquả.Dođó,dùnghàmsql_fetch_row()kèmvớicount()sẽxửlíhiệuquảcáccộttrongmộthàng:<?phpfor($i=0;$i<count($mautin);$i++){print"Column".($i+1).$mautin[$i]."\n<BR>\n";}?>2.2.2.2.DDDDùùùùngngngngsaisaisaisaiSQL:SQL:SQL:SQL:khkhkhkhôôôôngngngngllllấấấấyyyynhnhnhnhữữữữngngngngggggììììbbbbạạạạnnnnccccầầầầnnnnPHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology15151515Dormitory204.B518:20PMApril7,2006Nhưlàvấnđềcủathựchành,đơngiảnlàsẽsailầmkhidùngPHPxửlímọidòngcủaCSDL.TôiđãbắtgặpngườitadùngPHPđểchạymộtchươngtrìnhtìmkiếmđơngiảntrên2MBdữliệuvàtựhỏitạisaocáingônngữnàychạylâuthế.Lấy2MBdữliệutừCSDLcóthểlàmbạnchờmãimãi.Ngônngữtruyvấnchuẩn(StandardStandardStandardStandardQueryQueryQueryQueryLanguageLanguageLanguageLanguage----SQLSQLSQLSQL)đượ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ằngmãSQLđangdùngchưađượctốiưuhoá.2.1.2.1.2.1.2.1.MMMMệệệệnhnhnhnhđềđềđềđềWHEREWHEREWHEREWHEREMộtthídụkinhđiểnvềsựhiểuquảcủaSQLliênquanđếnmệnhđềwhere.ĐoạnmãsausẽlấycáckếtquảvàinratênvàmãsinhviêncủasinhviêncóMASV='511203008':<?phpinclude(“includes/taptinketnoi.inc”);$strsql="SELECTMASV,HOTENFROMSINHVIEN";$truyvan=@sql_query($strsql,$ketnoi);if(!$truyvan){die(sprintf("LOI:[%d]:%s",sql_errno(),sql_error()));}if(@sql_num_rows($truyvan)<=0){die("KhongketquatimduoctuCSDL!");}while($mautin=@sql_fetch_array($truyvan)){if($mautin[MASV]==“511203008”){print"MASV:$mautin[MASV]\n<br>\n";print"Hoten:$mautin[HOTEN]\n<br>\n";break;}}?>Đoạnmãtrênchưađượctốiưu:chúngtađangdùngPHPđểtìmkiếmtrongtoànbộCSDL!NếunhưđiềunàykhôngquantrọngđốivớicácCSDLnhỏ,khikíchthướcCSDLtănglênbạnsẽcảmthấymộtcúđấmnặngnềvềhiệunăng.Lờigiảirấtđơngiản:sửacâuSQLđểchứamệnhđềWHERE:$strsql="SELECT*FROMSINHVIEN";$strsql.="WHEREMASV='511203008'";PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology16161616Dormitory204.B518:20PMApril7,2006MệnhđềWHEREchophépbạntìmkiếmchọnlọchơn.Giớihạnchọnlọccủamệnhđềwherechínhlàmộthàmvớiđốisốcủanó.Trongthídụtrênđốisốlà"MASV='511203008'".Bâygiờchúngtađãchọnđượcdữliệucầnthiết,bạnchỉviệcdùngPHPđểinrasauđó:if(@sql_num_rows($truyvan)!=1){die("KhongdungsomautinnhanduoctuCSDL!");}$mautin=@sql_fetch_array($truyvan);print"Hovaten:$mautin[HOTEN]\n<br>\n";print"MASV:$mautin[MASV]\n<br>\n";3.3.3.3.DDDDùùùùngngngngPHPPHPPHPPHPssssắắắắppppxxxxếếếếppppkkkkếếếếttttququququảảảảNhiềungườilấydữliệuởtìnhtrạngkhôngcóthứtự,nhưngrồiđoạnmãPHPtiếptheolạisắpthứtựchúng.NênchớrằngsắpxếpbằngSQLnhanhhơnPHP.DùngcúphápORDERBYcủaSQLđểsắpxếpthayvìhàmksort()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ệungayvàolúcnóđượcđịnhnghĩa?Nógiúpchúngtađỡphảiduyệtquatậpkếtquảlầnthứhai.Dovậy,bỏhàmksort()rakhỏichươngtrìnhtrênvàthayđoạnmãSQLbằngđoạndướiđây,códùngdùngcúphápORDERBY:$strsql="SELECTname,email,phoneFROMsome_table";$strsql.="WHEREnameISLIKE'%baggins'ORDERBYname";12.12.12.12.ThiThiThiThiếếếếuuuussssựựựựkikikikiểểểểmmmmllllỗỗỗỗiiiiTôiđãthấynhiềuchươngtrìnhthiếumộtlượngkiểmtralỗiđầyđủ.Nguyênnhânphầnlớnlàdolậptrìnhviênkhôngdànhthờigianđểlênmộtkếhoạchthíchhợpchochươngtrìnhcủamình,vàxácđịnhnhữngvịtrícóthểdẫnđếnlỗi.Kiểmtralỗikhôngnênthựchiệnsaukhiviếtchươngtrình.Sựthiếusóttrongtầmnhìntrướccóthểdẫnđếnnhữnglỗinghiêmtrọng,khôngnhữnggâyrakếtquảsaimàthậmchícònlàmhỏnghệthống(evencauseyoursystemtocrash)!1.1.1.1.MongMongMongMongđợđợđợđợiiiiđđđđiiiiềềềềuuuuttttệệệệnhnhnhnhấấấấttttMọichươngtrìnhđềucókhảnănghưhỏngtrongnhữngtìnhhuốngsai.Đểgiảmthiểunhữngrủironhưthế,bạncầnlênkếhoạchđể:PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology17171717Dormitory204.B518:20PMApril7,2006KiểmtrakếtquảlờigọihàmKiểmtrakếtquảlờigọihệthốngĐặtmứcerror_reportinglàE_ALLtrongtậptinphp.ini1.1.1.1.1.1.1.1.KiKiKiKiểểểểmmmmtratratratrakkkkếếếếttttququququảảảảllllờờờờiiiiggggọọọọiiiihhhhààààmmmmMỗikhibạngọimộthàmlàmthayđổinhiềudữliệu,luônkiểmtrađểđảmbảorằngkếtquảtrảvềtrongphạmvigiátrịđượcchấpnhận(arangeofallowablevalues).Trongthídụdướiđây,mộtlỗiillegaldivisionbyzerosinhratronglầnlặpthứ6củavòngfor($iđượctănglên1trongkhi$jbịgiảmđi1).Vàolầnthứ6,khiđó$i=$j=0.<?phpmt_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";}?>12.12.12.12.ThiThiThiThiếếếếuuuussssựựựựkikikikiểểểểmmmmllllỗỗỗỗiiiiTôiđãthấynhiềuchươngtrìnhthiếumộtlượngkiểmtralỗiđầyđủ.Nguyênnhânphầnlớnlàdolậptrìnhviênkhôngdànhthờigianđểlênmộtkếhoạchthíchhợpchochươngtrìnhcủamình,vàxácđịnhnhữngvịtrícóthểdẫnđếnlỗi.Kiểmtralỗikhôngnênthựchiệnsaukhiviếtchươngtrình.Sựthiếusóttrongtầmnhìntrướccóthểdẫnđếnnhữnglỗinghiêmtrọng,khôngnhữnggâyrakếtquảsaimàthậmchícònlàmhỏnghệthống(evencauseyoursystemtocrash)!1.1.1.1.MongMongMongMongđợđợđợđợiiiiđđđđiiiiềềềềuuuuttttệệệệnhnhnhnhấấấấttttMọichươngtrìnhđềucókhảnănghưhỏngtrongnhữngtìnhhuốngsai.Đểgiảmthiểunhữngrủironhưthế,bạncầnlênkếhoạchđể:KiểmtrakếtquảlờigọihàmKiểmtrakếtquảlờigọihệthốngĐặtmứcerror_reportinglàE_ALLtrongtậptinphp.ini1.1.1.1.1.1.1.1.KiKiKiKiểểểểmmmmtratratratrakkkkếếếếttttququququảảảảllllờờờờiiiiggggọọọọiiiihhhhààààmmmmMỗikhibạngọimộthàmlàmthayđổinhiềudữliệu,luônkiểmtrađểđảmbảorằngkếtquảtrảvềtrongphạmvigiátrịđượcchấpnhận(arangeofallowablevalues).Trongthídụdướiđây,mộtlỗiillegaldivisionbyzerosinhratronglầnlặpthứ6củavòngfor($iđượctănglên1trongkhi$jbịgiảmđi1).Vàolầnthứ6,khiđó$i=$j=0.<?phpmt_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.KiKiKiKiểểểểmmmmtratratratrakkkkếếếếttttququququảảảảllllờờờờiiiiggggọọọọiiiihhhhệệệệththththốốốốngngngngPHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology18181818Dormitory204.B518:20PMApril7,2006Luônđảmbảorằng,khibạnlàmviệcvớicáctiếntrìnhhoặctậptinngoàiPHP,mọithứđềuvậnhànhđúng.Mộtthídụtuyệtvờilàviệckiểmtrađầuracủamộtlờigọihệthốngkhidùnghàmsql_connect().XácnhậnđầurađểkiểmtraliênkếtđếnCSDLlàđúng.Làmsaiđiềunàycóthểdẫnđếncáctruyvấnhỏngvàmấtdữliệutrongkhithậmchí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.ĐặĐặĐặĐặttttmmmmứứứứccccerror_reportingerror_reportingerror_reportingerror_reportingllllààààE_ALLE_ALLE_ALLE_ALLtrongtrongtrongtrongttttậậậậpppptintintintinphp.iniphp.iniphp.iniphp.iniHãyđảmbảobạncấuhìnhvớimứcđộbáolỗicaonhấtcóthể.Nếubạnkhôngđặtnóởmứccaonhất,ítnhấtlàtrongquátrìnhtìmlỗi(debugging),bạncóthểbỏquanhữnglỗinhưlàbiểuthứcchínhquy(regularexpressions)khônghợplệvàcácgiátrịkhôngchínhxác.XemlạilầnnữathídụtôiđãđưatrongphầnKiểmtrakếtquảlờigọihàm,ởdướiđây.Giảsửbạnđặterrorreportingởmứcthấp,E_ERROR.Chúýrằngkếtquảinrakhichươngtrìnhthihànhhàmdo_math:khôngcóthôngbáoillegaldivisionbyzerođãtừnghiệnralầntrước,phần$i=$j=0đơnthuầnkhônghiệnkếtquả.<?phperror_reporting(E_ERROR);mt_srand((double)microtime()*1000000);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";}?>Kếtquảhiệnra:-5148.25-5271-323.75-4931-7713.5?-4702.5-488.5-928.5-1394.752.2.2.2.BBBBộộộộququququảảảảnnnnllllííííllllỗỗỗỗiiiitutututuỳỳỳỳchchchchỉỉỉỉnhnhnhnhPHPthườ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àmset_error_handler().Hàmset_error_handler()cóthểđượcdùngđểghilạicáclỗixảyravớichươngtrìnhcủabạn.Thayvìlàmphiềnngườidùngvớicácthôngbáolỗi,bạncóthểghilạichoriêngbạn,bằngcáchđặtmộthàmquảnlílỗituỳchỉnh(acustomerrorhandlingfunction).PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology19191919Dormitory204.B518:20PMApril7,2006Trongthídụdưới,set_error_handler()đượcdùngđểchỉđịnhhàmerror_handler()làbộquảnlílỗimặcđịnh.Khimộtlỗixảyra,error_handler()đượcgọivàhàmPHPerror_log()đượcdùngđểghilỗivàotậptinerror_file.NếumàlỗithuộcloạiE_ERROR,chúngtasẽthoátchươngtrìnhvàinthôngbáolỗi.<?php//voiderror_handler(stringtype,stringmessage,stringfile,intline)//Customerrorhandler,setbytheset_error_handler()//function.functionerror_handler($type,$message,$file=__FILE__,$line=__LINE__){error_log("$message,$file,$line",3,'error_file');if($type&E_ERROR){print'Anerroroccurred,ithasbeenloggedanditwillbeaddressed.';exit;}}set_error_handler('error_handler');?>11.11.11.11.LLLLạạạạmmmmddddụụụụngngngngHHHHướướướướngngngngđốđốđốđốiiiittttượượượượngngngng(H(H(H(HĐĐĐĐT)T)T)T)Môhìnhhướngđốitượnglàmộtkháiniệmtuyệtvời.Nócórấtnhiềulợiđiểm,màđángchúýnhấtlàkhảnăngdùnglạimãdễdàng.Tuynhiê,theonhưchúngtađượchiểu:PHPkhôngphảilàmộtngônngữHĐT.MặcdùPHPcómộtsựhỗtrợđầyđủvềHĐT,nókhônghiệuquảlẫnkhôngkhônngoannếudùngtínhnăngHĐTcủanókhibạncócáchàmkhácđểđạtđượccùngkếtquả.LídolàsựhỗtrợHĐTcủaPHPkhôngđượcpháttriểnmạnh.Trongkhicóhầuhếtcácphầntửchínhyếu,PHPvẫncònthiếuvàitínhnăngcaocấp(nhưcáckháiniệmprotected,private)màmộtngônngữHĐTthựcsự(thídụnhưC++,Java)phảicó.CácmãhỗtrợHĐTcủaPHPkhôngđượctinhchỉnhvàcũngkhônghiệuquả.NghĩalànếubạndùngmôhìnhHĐTtrongPHP,bạncóthểlàmchậmchươngtrìnhđángkể.Nóichung,mộtứngdụngdùngHĐTsẽchậmđi,cũngnhưlàbạndùngeval()thìsẽchậmhơnlàdùngmãbìnhthường.ĐểminhhoạđầyđủhơnviệcHĐTcógìđókhôngtốt,tôiđãtừngphảidùngnhữngtínhnăngvàkháiniệmcaocấpcủaPHP,mộtvàitrongsốđóthậmchíchưacótàiliệuchỉdẫn.1.1.1.1.ChChChChúúúúngngngngtatatataccccóóóóththththểểểểllllààààmmmmggggììììmmmmààààkhkhkhkhôôôôngngngngccccầầầầnnnnHHHHĐĐĐĐ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ạpmà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ìnhrấtmạnhcóthểđượcviếtmàkhôngdùngmấtcứkháiniệmvàmôhìnhHĐTnào(PHPđượcviế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ạochươngtrìnhcótínhkếtdínhvàdễmởrộngmàkhôngdùngmôhìnhHĐT:PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology20202020Dormitory204.B518:20PMApril7,2006TạomộtAPITạomộttrìnhtựtênNhómcáchàmliênquanvàomộttậptin1.1.1.1.1.1.1.1.TTTTạạạạoooommmmộộộộttttAPIAPIAPIAPIÁpdụng3lớpchochươngtrìnhcủabạn:Thứnhất,cáchàmthựcsựthựchiệncôngviệccủabạnThứhai,mộthàmAPI.ĐâylàhàmgiúpbạnxâydựngcácchươngtrìnhđặcthùChươngtrìnhMortgageRate.php<?php//Theinternalfunctionsarelayer1//Internalfunctiontocalculatethecorrect//interestratetobeusedgiventheamountpermonth//andthetimeitistobepaidinfunction_mort_find_interest_rate($total){if($total<30000)return(7.4);elseif($total>30000)return(3.2);elseif($total>50000)return(2.5);elsereturn(1.7);}//TheAPIislayer2//doublecalculate_mortgage_rate(intmoney,inttime,intmonth)//Calculatethemortgagerategiventhe//thetotalmoney,timeitspaidoverand//theintervalsfunctioncalculate_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//fromaforminclude_once'MortgageRate.php';$price=calculate_mortgage_rate($money,$time,$period);print"Your$periodmonthcostis$price";?>...
  • 27
  • 636
  • 2
Tài liệu 7 sai lầm chết người trong đầu tư ppt

Tài liệu 7 sai lầm chết người trong đầu tư ppt

... 7 sai lầm chết người trong đầu tư Hầu hết các nhà đầu tư đều phải lãnh hậu quả do đặt niềm tin sai lầm vào con đường dẫn đến những thương vụ thành công. Có 7 sai lầm thường gặp ... được gọi là sai lầm chết người trong lĩnh vực đầu tư. Trên con đường thành công của các nhà đầu tư bậc thầy như Warren Buffett và George Soros không bao giờ xuất hiện những sai lầm này. Nếu ... xét xem chúng sai ở điểm nào. Sai lầm thứ nhất: Tin rằng việc dự đoán động thái kế tiếp của thị trường chắc chắn sẽ mang về những khoản lợi nhuận khổng lồ. Sai lầm thứ năm: Tin rằng phải...
  • 13
  • 517
  • 0
Sai lầm chết người trong chơi tiểu cảnh, non bộ và cách chơi đúng pptx

Sai lầm chết người trong chơi tiểu cảnh, non bộ và cách chơi đúng pptx

... đi, nếu nước chảy hướng vào trong nhà thì tài lộc sẽ vào nhà. Sai lầm chết người trong chơi tiểu cảnh, non bộ và cách chơi đúng NHỮNG SAI LẦM CHẾT NGƯỜI TRONG CHƠI TIỂU CẢNH NON BỘ ... được về sức khỏe và tài lộc cho gia đình. 1. Những sai lầm chết người của người chơi Tiểu cảnh và Non bộ - Như mọi người đều biết, trong các gia đình có khuôn viên sân vườn rộng, có khoảng ... núi tại trước nhà thì người trong nhà sẽ bị chết. Và nếu đặt thế núi tại đó thì sẽ giải thoát sơn thần không mắc cạn, do đó người trong gia đình không bị thương tật hay chết chóc. Ngược lại...
  • 10
  • 426
  • 2

Xem thêm

Từ khóa: 5 sai lầm chết người trong đầu tư chứng khoán10 sai lầm chết người trong marketingmười sai lầm chết người trong tiếp thị10 sai lầm chết người trong tiếp thịmười sai lầm chết người trong tiếp thị ebook10 sai lầm chết người trong tiếp thị ebooknhung sai lam chet nguoi cua doanh nghiep nho20 sai lầm lớn nhất trong bán hàngnghiên cứu lựa chọn một số bài tập nhằm sửa chữa những sai lầm thường mắc trong học kĩ thuật nhảy xa ưỡn thân cho nam học sinh lớp 11 trường thpt thạch thành i thanh hoáskkn một số biện pháp khắc phục những sai lầm thường mắc trong khi học kỹ thuật nhảy cao kiểu nằm nghiêng của học sinh lớp 10 trường thpt lộc hưngli thực trạng chiến lược thâm nhập thị trường bán lẻ việt nam của một số tập đoàn bán lẻ nước ngoài trong bói cảnh toàn cầu hóali thực trạng hành vi người tiêu dùng việt nam và mô hình cửa hàng bán lẻ hiện đại của các doanh nghiệp việt nam tại thị trường nội địado số lượng lao động tăng lên 4 người hay tăng 16 67 so với năm 2009 làm cho doanh thu tăng lên 1 769 5 trđdo số lượng lao động tăng lên 4 người hay tăng 16 67 so với năm 2009 làm cho doanh thu tăng lên 1 778 16 trđtạo thêm nhiều công ăn việc làm cho người trong làng và các khu vực lân cận phấn đấu trở thành khu vực kinh tế trọng điểm của thành phố đến năm 2020 đạt mức thu nhập 6000 usd người nămNghiên cứu tổ chức chạy tàu hàng cố định theo thời gian trên đường sắt việt namBiện pháp quản lý hoạt động dạy hát xoan trong trường trung học cơ sở huyện lâm thao, phú thọGiáo án Sinh học 11 bài 13: Thực hành phát hiện diệp lục và carôtenôitGiáo án Sinh học 11 bài 13: Thực hành phát hiện diệp lục và carôtenôitĐỒ ÁN NGHIÊN CỨU CÔNG NGHỆ KẾT NỐI VÔ TUYẾN CỰ LY XA, CÔNG SUẤT THẤP LPWANPhát triển mạng lưới kinh doanh nước sạch tại công ty TNHH một thành viên kinh doanh nước sạch quảng ninhTrả hồ sơ điều tra bổ sung đối với các tội xâm phạm sở hữu có tính chất chiếm đoạt theo pháp luật Tố tụng hình sự Việt Nam từ thực tiễn thành phố Hồ Chí Minh (Luận văn thạc sĩ)Phát hiện xâm nhập dựa trên thuật toán k meansNghiên cứu, xây dựng phần mềm smartscan và ứng dụng trong bảo vệ mạng máy tính chuyên dùngNghiên cứu khả năng đo năng lượng điện bằng hệ thu thập dữ liệu 16 kênh DEWE 5000Thơ nôm tứ tuyệt trào phúng hồ xuân hươngThiết kế và chế tạo mô hình biến tần (inverter) cho máy điều hòa không khíKiểm sát việc giải quyết tố giác, tin báo về tội phạm và kiến nghị khởi tố theo pháp luật tố tụng hình sự Việt Nam từ thực tiễn tỉnh Bình Định (Luận văn thạc sĩ)Tranh tụng tại phiên tòa hình sự sơ thẩm theo pháp luật tố tụng hình sự Việt Nam từ thực tiễn xét xử của các Tòa án quân sự Quân khu (Luận văn thạc sĩ)Giáo án Sinh học 11 bài 15: Tiêu hóa ở động vậtchuong 1 tong quan quan tri rui roGiáo án Sinh học 11 bài 14: Thực hành phát hiện hô hấp ở thực vậtGiáo án Sinh học 11 bài 14: Thực hành phát hiện hô hấp ở thực vậtGiáo án Sinh học 11 bài 14: Thực hành phát hiện hô hấp ở thực vậtQUẢN LÝ VÀ TÁI CHẾ NHỰA Ở HOA KỲ