21 sai lam chet nguoi trong lap trinh voi PHP

27 636 2
21 sai lam chet nguoi trong lap trinh voi PHP

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

21 sai lam chet nguoi trong lap trinh voi PHP Cuối tháng 12/2012, thành phố Hà Nội rớt hạng xuống thứ 10 (từ vị trí thứ 7 năm 2011) về Chỉ số sẵn sàng cho Phát triển và ứng dụng CNTT-TT Việt Nam do Hội tin học Việt Nam (VAIP) thống kê. Các chuyên gia cho rằng nguyên nhân chủ yếu là do việc sáp nhập với Hà Tây khiến điểm số trong hầu hết các tiêu chí xếp hạng của Hà Nội đều bị giảm. Với bản Quy hoạch vừa được công bố, Hà Nội quyết tâm đi đầu cả nước về phát triển kinh tế tri thức và xã hội thông tin trên cơ sở hạ tầng đô thị "thông minh".

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:B 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ố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); [...]... lớn 9 Lập tr ình PHP nh ư các ng ôn ng ữ kh ác trì như ngô ngữ Nhi ều người bắt đầu PHP sau khi đã thuần thục một ngôn ngữ khác như Perl, C, Java hay ASP Làm như vậy, họ cũng mang theo những mô hình mà có thể không luôn luôn được dùng bởi PHP Kh ông may thay, vài cá nhân trong số hày kh ông chịu bỏ thời gian để học cách lập trình PHP theo cách phù hợp với PHP Thay vào đó, họ thích PHP hoạt động với... April 7, 2006 22 PHP programming dynamic web for ewreybody 21 Fatal errors in programming with PHP – Collect from writting of Sterling Hughes Kh ông d ùng các hàm sẵn có Nhi ều lập trình viên PHP có nền tảng C có vẻ không nhận ra rằng PHP cung cấp nhiều hàm sẵn có giúp thay thế các đoạn mã dài Nếu bạn đến với PHP từ C, tôi khuy ên bạn nên đọc qua tài liệu trước khi viết một khối lệnh để xem PHP có sẵn hàm... nào để lập trình PHP Vài nơi tốt nhất là  Zend.com bản gốc của bài viết này là ở đó  Professional PHP một trong những sách toàn diện tốt nhất về PHP, tốt cho cả lập trình viên và kh ông-lập trình viên  Web Application Development with PHP Một quy ển sách tuyệt vời dạy bạn cả cách phát triển web lẫn vài tính năng cao cấp của PHP Bao gồm các tài liệu chính thức về Zend API  The PHP Developer's Cookbook... PM April 7, 2006 13 PHP programming dynamic web for ewreybody 21 Fatal errors in programming with PHP – Collect from writting of Sterling Hughes 1.4 Khi mà DBMS củ a b ạn kh ông h ỗ trợ sql_num _row() khô trợ Vài DBMS có thể kh ông hỗ trợ hàm sql_num_row() Tôi xin chia sẻ với bạn nếu DBMS của bạn là một trong số đó Bạn sẽ phải tìm trong kết quả rỗng bằng cách lấy dòng Tuy nhi ên, trong trường hợp này,... 16 PHP programming dynamic web for ewreybody 21 Fatal errors in programming with PHP – Collect from writting of Sterling Hughes  Ki ểm tra kết quả lời gọi hàm  Ki ểm tra kết quả lời gọi hệ thống  Đặt mức error _reporting là E_ALL trong tập tin php. ini 1.1 Ki ểm tra kết qu ả l ời gọ i hàm Kiể quả Mỗi khi bạn gọi một hàm làm thay đổi nhi ều dữ liệu, luôn kiểm tra để đảm bảo rằng kết quả trả về trong. .. error _reporting là E_ALL trong tập tin php. ini 1.1 Ki ểm tra kết qu ả l ời gọ i hàm Kiể quả Mỗi khi bạn gọi một hàm làm thay đổi nhi ều dữ liệu, luôn kiểm tra để đảm bảo rằng kết quả trả về trong phạm vi giá trị được chấp nhận (a range of allowable values) Trong thí dụ dưới đây, một lỗi illegal division by zero sinh ra trong lần lặp thứ 6 của vòng for ($i được tăng lên 1 trong khi $j bị giảm đi 1)... không biết các cột trong kết quả Do đó, dùng hàm sql_f etch_row() kèm với count() sẽ xử lí hiệu quả các cột trong một hàng: < ?php for ($i = 0; $i < count($mautin); $i++){ print "Column" ($i+1) $mautin[$i] "\n\n"; } ?> 2 Dùng sai SQL: kh ô ng lấy nh ững gì b ạn cần khô nhữ NGUYENANH KHOA– Class27K0A – DepartmentOf Information Technology Dormitory 204.B5 18:20 PM April 7, 2006 14 PHP programming dynamic... Information Technology Dormitory 204.B5 18:20 PM April 7, 2006 18 PHP programming dynamic web for ewreybody 21 Fatal errors in programming with PHP – Collect from writting of Sterling Hughes Trong thí dụ dưới, set_error_handler() được dùng để chỉ định hàm error _handler() là bộ quản lí lỗi mặc định Khi một lỗi xảy ra, error _handler() được gọi và hàm PHP error _log() được dùng để ghi lỗi vào tập tin error _file... lại mã dễ dàng Tuy nhiê, theo như chúng ta được hiểu: PHP không phải là một ngôn ngữ HĐT Mặc dù PHP có một sự hỗ trợ đầy đủ về HĐT, nó không hiệu quả lẫn kh ông khôn ngoan nếu dùng tính năng HĐT của nó khi bạn có các hàm khác để đạt được cùng kết quả Lí do là sự hỗ trợ HĐT của PHP không được phát triển mạnh Trong khi có hầu hết các phần tử chính yếu, PHP vẫn còn thiếu vài tính năng cao cấp (như các kh... trợ HĐT của PHP không được tinh chỉnh và cũng không hiệu quả Ngh ĩa là nếu bạn dùng mô hình HĐT trong PHP, bạn có thể làm chậm chương trình đáng kể Nói chung, một ứng dụng dùng HĐT sẽ chậm đi, cũng như là bạn dùng eval() thì sẽ chậm hơn là dùng mã bình thường Để minh hoạ đầy đủ hơn việc HĐT có gì đó không tốt, tôi đã từng phải dùng những tính năng và kh ái niệm cao cấp của PHP, một vài trong số đó . 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 <br> ",M_PI);printf("Piisalso:%.3f <br> ",M_PI);printf("Piisalso:%.4f <br> ",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 <br> Hiendangla:%s,%s <br> LienhevoitoiquaEmail:%s <br> ",$name,$nghenghiep,$diachi,$email);?>Hàmprint()print()print()print()cóthểdùngthaychoprintf()nhưsau:B PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology2222Dormitory204.B518:20PMApril7,2006printprintprintprint"Tencuatuila:$name <br> Hiendangla:$nghenghiep,$diachi <br> LienhevoitoiquaEmail:$email <br> ";;;;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:Inetpubwwwroot st.phpC:Inetpubwwwroot st.phpC:Inetpubwwwroot st.phpC:Inetpubwwwroot st.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" <br> <br> ";//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 <br> ";}//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(" ",$site_info->links);$names=explode(" ",$site_info->link_names);for($i=0;$i<count($links);$i++){print" <axhref="$links[$i]">$names[$i]</a> <br> ";}}?> 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 PHP3 Dù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–DepartmentOfInformationTechnology 1212 1212 Dormitory204.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] <br> ";}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] <br> ";}?>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] <br> ";}?>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]." <BR> ";}?>2.2.2.2.DDDDùùùùngngngngsaisaisaisaiSQL:SQL:SQL:SQL:khkhkhkhôôôôngngngngllllấấấấyyyynhnhnhnhữữữữngngngngggggììììbbbbạạạạnnnnccccầầầầnnnn PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–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] <br> ";print"Hoten:$mautin[HOTEN] <br> ";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] <br> ";print"MASV:$mautin[MASV] <br> ";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)." ";}?>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)." ";}?>1.2.1.2.1.2.1.2.KiKiKiKiểểểểmmmmtratratratrakkkkếếếếttttququququảảảảllllờờờờiiiiggggọọọọiiiihhhhệệệệththththốốốốngngngng PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–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)." ";}?>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& lt; ?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& lt; ?php/ /Theactualapplicationislayer3//$money,$timeand$periodaresubmitted//fromaforminclude_once'MortgageRate .php& apos;;$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 <br> ",M_PI);printf("Piisalso:%.3f <br> ",M_PI);printf("Piisalso:%.4f <br> ",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 <br> Hiendangla:%s,%s <br> LienhevoitoiquaEmail:%s <br> ",$name,$nghenghiep,$diachi,$email);?>Hàmprint()print()print()print()cóthểdùngthaychoprintf()nhưsau:B PHPprogrammingdynamicwebforewreybody21FatalerrorsinprogrammingwithPHP–CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology2222Dormitory204.B518:20PMApril7,2006printprintprintprint"Tencuatuila:$name <br> Hiendangla:$nghenghiep,$diachi <br> LienhevoitoiquaEmail:$email <br> ";;;;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:Inetpubwwwroot st.phpC:Inetpubwwwroot st.phpC:Inetpubwwwroot st.phpC:Inetpubwwwroot st.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" <br> <br> ";//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 <br> ";}//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ốith

Ngày đăng: 23/01/2013, 15:02

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan