... whilecầnthiết trong trườ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–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ápNókhôngtươngthíchvớingônngữkhác,nghĩalànótrởnênkhóđọcđốivớinhữngngười trong giaiđ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ết trong tàiliệuPHP.Hầuhếtnóđượccậpnhậtmới.NócũngdùngcáchàmmớinhấtcủaPHP trong thí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ếếếếtttt Trong bàinàybạnđãđiqua7trêntổngsố21lỗimàlậptrìnhviênPHPmắcphải.Nhữnglỗigiáokhoanàybaogồm:SSSSửửửửddddụụụụngngngng sai sai sai saihhhhààààmmmmprintf()printf()printf()printf()ÁÁÁÁppppddddụụụụngngngng sai sai sai saingngngngữữữữnghnghnghnghĩĩĩĩaaaaThiThiThiThiếếếếuuuuttttààààiiiililililiệệệệuuuu trong trong trong trongmmmmããããngungungunguồồồồnnnnDDDDùùùùngngngngququququáááánhinhinhinhiềềềềuuuubibibibiếếếếnnnnttttạạạạmmmmViViViViếếếếttttllllạạạạiiiiccccáááácccchhhhààààmmmmccccóóóóssssẵẵẵẵnnnnKhKhKhKhôôôô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–DepartmentOfInformationTechnology13131313Dormitory204.B518:20PMApril7,2006Tạisaovòngdo ... 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–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ụng sai cáchàmvềCSDLDùng sai SQL:khônglấynhữngthứbạncầnDùngPHPđểsắpxếpkếtquả1.1.1.1.DDDDùùùùngngngng sai sai sai saiccccáááá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 ... ,$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,2006 Trong thí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. Trong khicó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ĐT trong PHP,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ài trong sốđó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–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ối trong print(),nhưdướiđây:Dùngtoántử.nhanhhơnviệcdùngprintf()20.20.20.20.ÁÁÁÁppppddddụụụụngngngng sai sai sai saingngngngữữữữ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ột trong nhữ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...