Danh mục: Kỹ thuật lập trình
... 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><? PHP programmingdynamic web for ewreybody21Fatalerrorsinprogrammingwith PHP –CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology10101010Dormitory204.B518:20PMApril7,2006PHẦN2–LỖINGHIÊMTRỌNG14.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ắnkhôngliênquanđếnngữcảnhkhô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ệệệệttttTrong PHP, 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); PHP programmingdynamic web for ewreybody21Fatalerrorsinprogrammingwith PHP –CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology21212121Dormitory204.B518:20PMApril7,20061.2.1.2.1.2.1.2.TTTTạạạạoooommmmộộộộtttttrtrtrtrììììnhnhnhnhttttựựựựttttêêêênnnnvvvvààààlulululuôôôônnnntutututuâââânnnnththththủủủủMộttrongnhữngvấnđềchínhtrongbấtcứmộtdựánlớnnàolàsựxungđộtvềtên.Cáclớpcóthểphânđoạntên.Dođó,cáclớpkhácnhaucóthể:ĐượcgánmộtthuộctínhvớitêngiốngnhauChứacácphươngthứcvớitêngiốngnhauThídụ,lớpPhillipsvàlớpNormalcóthểcùngcóphươngthứctênscrewdriver.Nóichung,trướckhibắtđầumộtdựánlớnnào,bạnnêncómộttrìnhtựtênchomọithứ,cụthểlàcáchbạntáchcácbiếntoàncụcracácbiếnthôngthường,cáchđịnhnghĩahàmtrongthưviệnv.v.1.3.1.3.1.3.1.3.NhNhNhNhóóóómmmmccccááááccccýýýýninininiệệệệmmmmchungchungchungchungvvvvààààoooommmmộộộộttttttttậậậậpppptintintintinNhómcáchàmAPItươngtựvàochungmộttậptincũnggiốngnhưnhómcácphươngthứctươngtựvàomộtlớp.Cốgắngtưởngtượngmỗitậptinbạntạolàmộtlớp,mỗihàmtrongđólàmộtphươngthức.Bằngcáchnày,cáchàmcủabạnsẽcóđịnhnghĩavàcấutrúcsángsủa.Thídụ,bạncóthểmuốnnhómmọihàmliênquanđếntruycậpCSDLvàomộttậptinDB .php. 2.2.2.2.HHHHĐĐĐĐT,T,T,T,gigigigiốốốốngngngngmmmmọọọọiiiiththththứứứứ,,,,ttttốốốốttttkhikhikhikhiccccóóóóđđđđiiiiềềềềuuuuđộđộđộđộĐểtôilàmsángtỏmộtviệc.TôikhôngphảiđangcốbiệnhộđểbạntừbỏhẳnHĐTtrong PHP. Đúngra,tôichỉđangcốcảnhbáobạnđừngnêndùng PHP nhưJavahayC++,nơimàHĐTcóthểdùngthoảimái.HãycẩnthậnđánhgiálợivàhạitrướckhibạndùngmộttiếpcậnHĐTvới PHP. 10.10.10.10.DDDDùùùùngngngngnhnhnhnhầầầầmmmmBiBiBiBiểểểểuuuuththththứứứứccccChChChChíííínhnhnhnhquyquyquyquyBiểuthứcchínhquy(Regularexpressions)làcôngcụmạnhđểtìmvàtổchứcdữliệu,nhưlàkiểmđịnhđịachỉe-mailhoặckiểmtramộtURL.Tuynhiên,nóchậmhơncáccôngcụcủa PHP trongmộtsốtácvụđơngiản.Thídụ,nếubạnmuốnviếthoatoànbộmôtchuỗi,mộtlínhmớicủa PHP cóthểlàmnhưsau:< ?php $URL="http://www .php. net";$fp=@fopen($URL,"r");if(!$fp){die("Cannotopenwebsite$URL!");}while($line=@fgets($fp,1024)){$data.=$line;}@fclose($fp)orwarn("Cannotclosewebsitehandle,$URL");$data=ereg_replace("[a-z]","[A-Z]",$data);print$data;?>Tuynhiên,sẽphíthờigiankhibạndùnghàmereg_replace()(chậmhơn)đểlàmcôngviệcmàstrtoupper()(nhanhhơn)cóthểthựchiệntốthơn.$data=strtoupper($data);Nóichung,bạnluôncốgắngdùngcácthaythếđơngiảncủabiểuthứcchínhquyvìnósẽlàmtăngkhánhiềutốcđộchươngtrình. PHP programmingdynamic web for ewreybody21Fatalerrorsinprogrammingwith PHP –CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology22222222Dormitory204.B518:20PMApril7,20061.1.1.1.CCCCáááácccchhhhààààmmmmccccầầầầnnnnbibibibiếếếếttttCóvàihàmrấtthiếtyếuđểtiếtkiệmthờigianthihànhchươngtrìnhkhidùngthaychobiểuthứcchínhquy.Dướiđâylàdanhsáchcáchàmthiếtyếuđó:strtoupper();strtolower();ucfirst();strtr();str_replace();trim();explode();implode();substr();strcmp()Nếubạnthaythếcácbiểuthứcchínhquycủabạnbằngcáchàmtrên,bạncóthểtrôngđợimộtsựnhảyvọtvềhiệunăng,đặcbiệtkhibạnlàmviệcvớicácchuỗilớn.9.9.9.9.LLLLậậậậpppptrtrtrtrììììnhnhnhnh PHP PHP PHP PHPnhnhnhnhưưưưccccááááccccngngngngôôôônnnnngngngngữữữữkhkhkhkhááááccccNhiềungườibắtđầu PHP saukhiđãthuầnthụcmộtngônngữkhácnhưPerl,C,JavahayASP.Làmnhưvậy,họcũngmangtheonhữngmôhìnhmàcóthểkhôngluônluônđượcdùngbởi PHP. Khôngmaythay,vàicánhântrongsốhàykhôngchịubỏthờigianđểhọccáchlậptrình PHP theocáchphùhợpvới PHP. Thayvàođó,họthích PHP hoạtđộngvớicácítkháiniệmmớicàngtốtKhibạnlậptrình PHP nhưlàtrongcácngônngữkhác,nóthườngdẫnđếnviệclàmchươngtrìnhchậmhơnvàkhóbảotrìmã.Bạnsẽthườngthấyhọphạmvàomộttrongcáclỗisau:PerlPerlPerlPerl"1"1"1"1ddddòòòòng"ng"ng"ng" PHP làmộtngônngữkhôngthựcsựtốiưuchocáchtiếpcận1dòngkhiviếtchươngtrình.Thayvàođó,nómởrộngcáctậphàmphứctạpvàcácbiểuthứcchínhquytheomộtđịnhdạngcócấpbậchơnMMMMããããllllệệệệnhnhnhnhPerlPerlPerlPerlwhile(<STDIN>){@_=split/:/;$quotes{shift}=shift;}printmap{"$_:",reversesplit//,$quotes->{$_},"\n";}keys%quotes;MMMMããããllllệệệệnhnhnhnh PHP) PHP) PHP) PHP) < ?php $fp=@fopen(&apos ;php: //stdin','r');if(!$fp){die('CannotopenSTDIN');}while($line=@fgets($fp,1024)){list($name,$quote)=explode(':',$line);$quotes[$name]=$quote;}foreach($quotesas$name=>$quote){print"$name:";printimplode("",array_reverse(preg_split('//',$quote)));print"\n";}@fclose($fp);?> PHP programmingdynamic web for ewreybody21Fatalerrorsinprogrammingwith PHP –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ườitronggiaiđoạnquáđộ(mớichuyểntừmộtngônngữnàođósang PHP) 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ệu PHP. Hầuhếtnóđượccậpnhậtmới.Nócũngdùngcáchàmmớinhấtcủa PHP trongthídụcủamình.Nênthườngxuyênkiểmtratàiliệukhibạncóýmuốnmởrộngtínhnăngnàođócủa PHP. 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ên PHP mắcphải.Nhữnglỗigiáokhoanàybaogồm:SSSSửửửửddddụụụụngngngngsaisaisaisaihhhhààààmmmmprintf()printf()printf()printf()ÁÁÁÁppppddddụụụụngngngngsaisaisaisaingngngngữữữữnghnghnghnghĩĩĩĩaaaaThiThiThiThiếếếếuuuuttttààààiiiililililiệệệệuuuutrongtrongtrongtrongmmmmãããã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// (the codecouldbeoptimizedthough)while(1){print"5";if($idx++==5){break;}}?> PHP programmingdynamic web for ewreybody21Fatalerrorsinprogrammingwith PHP –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àm PHP error_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,setby the set_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: PHP khôngphảilàmộtngônngữHĐT.Mặcdù PHP có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ủa PHP khôngđượcpháttriểnmạnh.Trongkhicóhầuhếtcácphầntửchínhyếu, PHP vẫ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ủa PHP khôngđượctinhchỉnhvàcũngkhônghiệuquả.NghĩalànếubạndùngmôhìnhHĐTtrong 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ủa PHP, 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ểnsang PHP từ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ủa PHP có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: PHP programmingdynamic web for ewreybody21Fatalerrorsinprogrammingwith PHP –CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology23232323Dormitory204.B518:20PMApril7,2006KhKhKhKhôôôôngngngngddddùùùùngngngngccccáááácccchhhhààààmmmmssssẵẵẵẵnnnnccccóóóóNhiềulậptrìnhviên PHP cónềntảngCcóvẻkhôngnhậnrarằng PHP cungcấpnhiềuhàmsẵncógiúpthaythếcácđoạnmãdài.Nếubạnđếnvới PHP từC,tôikhuyênbạnnênđọcquatàiliệutrướckhiviếtmộtkhốilệnhđểxem PHP cósẵnhàmnàogiúpcuộcsốngcủabạndễdànghơnkhông.ĐổĐổĐổĐổiiiittttêêêênnnnccccáááácccchhhhààààmmmm PHP PHP PHP PHPđãđãđãđãccccóóóóTôiđãthấyngườitađổitêncáchàmđãcócủa PHP chỉđểgiúphọdễnhớhơn.Điềunàykhôngchỉlàmchậmchươngtrình,màlàmchođoạnmãkhóđọchơn.DDDDùùùùngngngnghhhhướướướướngngngngđốđốđốđốiiiittttượượượượngngngngququququáááámmmmứứứứcccc PHP khôngphảilàmộtngônngữHĐT,dùnócungcấpcáctínhnăngHĐT.BạncầnluônnhậnthứcrằngHĐTtrong PHP sẽlàmchậmđángkểchươngtrình.1.1.1.1.LLLLấấấấyyyyththththôôôôngngngngtintintintinởởởởđâđâđâđâu?u?u?u?Maymắnlàcórấtnhiềuthôngtinvềviệclàmthếnàođểlậptrình PHP. VàinơitốtnhấtlàZend.combảngốccủabàiviếtnàylàởđóProfessional PHP mộttrongnhữngsáchtoàndiệntốtnhấtvề PHP, tốtchocảlậptrìnhviênvàkhông-lậptrìnhviên. Web ApplicationDevelopmentwith PHP Mộtquyểnsáchtuyệtvờidạybạncảcáchpháttriển web lẫnvàitínhnăngcaocấpcủa PHP. BaogồmcáctàiliệuchínhthứcvềZendAPI. The PHP Developer'sCookbookMộtquyểnsáchthiênvềlờigiảiđápchocácvấnđềgặpphảitrong PHP (dotui-SterlingHughes-viếtcùngAndreiZmievski)8.8.8.8.KhKhKhKhôôôôngngngngnhnhnhnhậậậậnnnnththththứứứứccccđầđầđầđầyyyyđủđủđủđủvvvvềềềềbbbbảảảảoooommmmậậậậttttNhữngngườidùngkhôngphảilúcnàocũnglàmviệcvớihệthốngcủachúngta.Vớitưcáchlàlậptrìnhviên,tráchnhiệmcủachúngtalàthiếtkếmộthệthốngantoàn,dễchịucóthểlàmviệcđượcchungvớilỗicủangườidùng.Khithiếtkếhệthống,bạnphảiđặtmìnhvàovịtríngườidùng.Xemxétnhữngchỗhọcóthểgặplỗivàtìmkiếmnhữnglỗhổngbảomậttiềmtàng.Rồibạnthiếtkếchươngtrìnhcókhảnăngsửachữalỗinàyvàlấpcáclỗhổngbảomật.Mộtđiềukháccũngquantrọnglà:dùxảyrahưhỏnghayhệthốngbịtấncônglàdolỗicủangườidùng,chínhbạnlàngườichịutráchnhiệmnếubạnđãviếtchươngtrìnhcónhiềulỗihaythiếunhữngbướckiểmtracầnthiếtdẫnđếnhỏngdữliệu.Thídụ,tôiđãthấynhiềuchươngtrìnhkhôngdùnghàmđãcócủa PHP mail()vốnantoànmàlạiđidùngsendmailthôngquapopen().Nócóthểdẫnđếnnhiềulỗhổngbảomật(thídụnhư/etc/passwdđượcgửiđếnngườidùngcuối).Cóvàinơithườngxảyracácsựcốvềbảomật,hoặctiềmnănggâyrahỏngdữliệurấtlớn:Thựchiệnlờigọihệthống.Tôikhôngcócáchnàodiễntảđượcmứcđộnguyhiểmcủavấnđềnày.Luônđảmbảorằngmọidữliệungườidùngđưavàolàantoàntrướckhichuyểnnóchomộtlờigọihệthống.ĐỪĐỪĐỪĐỪNGNGNGNGBAOBAOBAOBAOGIGIGIGIỜỜỜỜTINTINTINTINNGNGNGNGƯỜƯỜƯỜƯỜIIIIDDDDÙÙÙÙNGNGNGNGMMMMỘỘỘỘTTTTCCCCÁÁÁÁCHCHCHCHMMMMÙÙÙÙQUQUQUQUÁÁÁÁNGNGNGNGKHIKHIKHIKHIĐƯĐƯĐƯĐƯAAAADDDDỮỮỮỮLILILILIỆỆỆỆUUUUCCCCỦỦỦỦAAAAHHHHỌỌỌỌVVVVÀÀÀÀOOOOLLLLỜỜỜỜIIIIGGGGỌỌỌỌIIIIHHHHỆỆỆỆTHTHTHTHỐỐỐỐNGNGNGNGMMMMÀÀÀÀKHKHKHKHÔÔÔÔNGNGNGNGKIKIKIKIỂỂỂỂMMMMTRATRATRATRATRTRTRTRƯỚƯỚƯỚƯỚCCCC.Khiđăngkíngườidùng.Nếubạntrôngmongcókếtquảchínhxác,luônkiểmtravàđảmbảobảnđăngkíđượckiểmtranhữngchỗcầnthiết.Trướctiên,cónhiềucáchđểkiểmtramộtđịachỉe-mailhợplệ.Hơnnữa,bạnnênkiểmtratuổicủangườidùngcónằmtrongphạmvithíchhợpkhông.Vớimộtsựsuyrộng,bạncó PHP programmingdynamic web for ewreybody21Fatalerrorsinprogrammingwith PHP –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:< ?php if(sql_num_rows($truyvan)<=0){print"Motloidaxayra:Khongcomautinnao!";exit;}while($mautin=sql_fetch_array($truyvan)){print"$mautin[name]:$mautin[phone_number]\n<br>\n";}?>1.6.1.6.1.6.1.6.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ủa the sql_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:< ?php for ($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ầầầầnnnn PHP programmingdynamic web for ewreybody21Fatalerrorsinprogrammingwith PHP –CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology24242424Dormitory204.B518:20PMApril7,2006thểkhẳngđịnhkháchắcchắnrằngkhôngcómộtngười200tuổinàocókhảnăngdùngmáyvitính.Khichấpnhậnthẻtíndụng.Mộtsốlậptrìnhviênchỉdùngnhữngthuậttoánđơngiảnmàcóthểdễdàngbịđánhlừakhithựchiệnkiếmtrathẻtíndụng.Chỉchấpnhậnthẻcủacáccôngtylớnđểkiểmtratínhhợplệcủasốthẻtrướckhichấpnhậnthẻcủangườidùng.ĐỪĐỪĐỪĐỪNGNGNGNGBAOBAOBAOBAOGIGIGIGIỜỜỜỜTINTINTINTINTTTTƯỞƯỞƯỞƯỞNGNGNGNGMMMMỘỘỘỘTTTTTHUTHUTHUTHUẬẬẬẬTTTTTOTOTOTOÁÁÁÁNNNN1.1.1.1.BBBBảảảảoooommmmậậậậttttccccủủủủaaaallllờờờờiiiiggggọọọọiiiihhhhệệệệththththốốốốngngngngMỗikhibạnđưadữliệucủangườidùngvàolờigọihệthống,bạncầntỉnhtáokiểmtradữliệuđó.Đảmbảorằngkhôngcógìnguyhiểmnằmtrongdữliệuđócóthểlừaphỉnhhệthốngthựchiệnnhữnglệnhkhôngmongmuốn. PHP cungcấpmộthàmlàmđiềuđó:EscapeShellCmd()Bấtcứkhinàobạnchuyểnmộtlệnhcóchứadữliệunhạycảm,trốnthoátdữliệuđóbằnghàmEscapeShellCmdEscapeShellCmdEscapeShellCmdEscapeShellCmd():Trốnthoát(escaping)dữliệucónghĩalàthêmdấusổngược(backslash\)trướckítựcóthểlừaphìnhhệthống(chínhxáclàcáckítự#&;?'\"|*?~<>^()[]{}$\\\x0A\xFF).MMMMããããHTMLHTMLHTMLHTML<html><head><title>NameLookup</title></head><body><h1>NameLookup</h1>< ?php if($name){system(EscapeShellCmd("lookup$name"));print"nn";}?><formaction="<[color=blue] ?php print $PHP_ SELF;?>[/color]"method="GET">Enteranametolookup:<inputtype="text"name="name"><inputtype="submit"value="LookupName"></form></body></html>DùEscapeShellCmd()làmộthàmtốtđểkiểmtralệnh,bạnvẫnnênthửvàthựchiệncáckiểmtrađặcthùphụthuộcvàoloạidữliệu.HàmEscapeShellCmd()sẽkhôngkiểmtratínhđúngđắncủadữliệuđượcđệtrình,nósẽchỉngăncảnngườidùnglàmcácviệckhôngđượcphép.1.1.1.1.1.1.1.1.ĐĐĐĐiiiixaxaxaxahhhhơơơơnnnnmmmmộộộộttttbbbbướướướướccccNhưmộtquyluật,nênkiểmtracáckítựđượcphéphơnlàkiểmcáckítựkhôngđượcphép.Thídụ,đảmbảorằng$namechỉchứacáckítựchữvàsố(alphanumericcharacters).Bằngcáchnày,rấtkhóđểkhaitháclỗhổngtronghệthốngcủabạn.2.2.2.2.KiKiKiKiểểểểmmmmtratratratrađịđịđịđịaaaachchchchỉỉỉỉe-maile-maile-maile-mailMộttrongnhữnghìnhthứckiểmtraphổbiếnnhấtlàxemmộtđịachỉe-mailcóhợplệkhông.Mấytaymớivàonghềsẽchỉdùngcácbiểuthứcchínhquy(màhọlượmđượctrong PHP programmingdynamic web for ewreybody21Fatalerrorsinprogrammingwith PHP –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ácscript PHP chủ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)//Reverseallof the charactersinastring.functionreverse_characters($str){returnimplode("",array_reverse(preg_split("//",$str)));}//stringreverse_characters(stringstr)//Reverseallof the charactersinastring.functionreverse_characters($str){$characters=preg_split("//",$str);$characters=array_reverse($characters);returnimplode("",$characters);}<?functionlen($str){ PHP programmingdynamic web for ewreybody21Fatalerrorsinprogrammingwith PHP –CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology1111Dormitory204.B518:20PMApril7,2006àiviếtnàydànhchonhữnglậptrìnhviên PHP quantâmđếnviệctránhnhữnglỗithườnggặpkhisửdụng PHP. Ngườiđọcphảibiếtcáccúphápcủa PHP, vànênbiếtcôngdụngcủacáchàmtrong PHP. Mộttrongnhữngđiểmmạnhnhấtcủa PHP vôtìnhtrởthànhmộttrongnhữngđiểmyếunhấtcủanó:ttttíííínhnhnhnhddddễễễễssssửửửửddddụụụụngngngng.Nhiếungườichọn PHP vìtínhdễsửdụng,đãkhôngnhậnrarằng:sửdụngđúng PHP PHP PHP PHPccccòòòò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ÁOKHOA21.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) <?/* The threefacesofΠ*/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ơnHiể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 PHP programmingdynamic web for ewreybody21Fatalerrorsinprogrammingwith PHP –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ềCSDLDùngsaiSQL:khônglấynhữngthứbạncầnDùng PHP để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 ... ,$j++){print$j/do_math($i,$j)."\n";}?>1.2.1.2.1.2.1.2.KiKiKiKiểểểểmmmmtratratratrakkkkếếếếttttququququảảảảllllờờờờiiiiggggọọọọiiiihhhhệệệệththththốốốốngngngng PHP programmingdynamic web for ewreybody21Fatalerrorsinprogrammingwith PHP –CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology6666Dormitory204.B518:20PMApril7,2006Lạicómộtsốngườicốgắngviếtlạicáchàm PHP thôngdụngthayvìđihọcvềhàmđótrongcáctàiliệu PHP cungcấ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ởi PHP. 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ủa PHP ngayđượ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ẫn PHP ( PHP manual)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ộngcho PHP, tôiđọclướtquatàiliệuđểxemhàmđócóchưa.Tuynhiên,cầnchúýlà,dobảnchấtmãnguồnmởcủa PHP, bạncóthểtìmđượccáchàmdongườidùngđịnhnghĩatrướckhinóđượcthêmvào PHP (thídụnhưhàmtìmphầntửkhácnhaugiữahaimảng).Điềunàykhôngcónghĩalàbạnphảihiệuchỉnhlạimã(Thisdoesn'tnecessarilymeanthatyoushouldhavetocorrect the code.-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ỗtrongtrang web. Thídụdướiđâyminhhoạđiềunày:index .php index .php index .php index .php -phầnkháchreturnstrlen($str);}?>HTMLHTMLHTMLHTML< ?php include_once("site.lib");?><html><head><title>< ?php print_header();?></title></head><body><h1>< ?php print_header();?></h1><tableborder="0"cellpadding="0"cellspacing="0"><tr> PHP programmingdynamic web for ewreybody21Fatalerrorsinprogrammingwith PHP –CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology18181818Dormitory204.B518:20PMApril7,2006Luônđảmbảorằng,khibạnlàmviệcvớicáctiếntrìnhhoặctậptinngoài PHP, 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ậậậậpppptintintintin php. ini php. ini php. ini php. 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ả.< ?php error_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 ... while,cáccâugọinhiềulần,vàcáchàmsql_result()trongvòng for. 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. PHP programmingdynamic web for ewreybody21Fatalerrorsinprogrammingwith PHP –CollectfromwrittingofSterlingHughesNGUYENANHKHOA–Class27K0A–DepartmentOfInformationTechnology26262626Dormitory204.B518:20PMApril7,2006PHẦN3:7LỖICHẾTNGƯỜI7.7.7.7.ChChChChééééppppvvvvààààddddáááán:n:n:n:khkhkhkhôôôôngngngngphphphphảảảảiiiihhhhướướướướngngngngđđđđiiiittttốốốốttttTôiđãgặpnhiềutaylậptrìnhmớivàonghềđichépnhữngđoạnmã(thídụnhưlàkiểmtrađịachỉe-mail,gửie-mail,lấygiátrịtừformđểsoạne-mail).Họthườngdánchúngvàochươngtrìnhcủamìnhvàrồikếtquảlàmộtđốngnhữngcâulệnhgửiformkhôngantoàn.Dùrằngmộtđoạnmãchạyđượctrongnhữngđiềukiệntốiưu,nóthườnggặplỗitrongbấtkìsựkiểmtra"mãtốt"nàoCôngviệcchắpvásẽkhkhkhkhôôôôngngngngcócácưuđiểmsau:MMMMởởởởrrrrộộộộngngngngđượđượđượđược:c:c:c:đoạnmãtrôngnhưcácmảnhriêngrẽrápvávàonhau.Nếunhờmộtlậptrìnhviêncókinhnghiệmsửachươngtrìnhcủabạn,họthườngthíchviếtlạitoànbộĐoạnmãkhôngđọcđượcsẽkhôngmởrộngđược.AnAnAnAntotototoààààn:n:n:n:bạncóthểđangchépmãcủangườikhácvàochươngtrìnhcủamìnhmàlạikhônghiểurõràngđoạnmãđó.Hãytưởngtưởngxem.NếuđoạnmãđócómộtlỗilàmxoátoànbộđĩacủabạnHơnnữa,cùngmộtđoạnmãthìtínhantoànkhônggiốngnhautrêncáchệthốngkhácnhau.Cuốicùng,chươngtrìnhcủabạnsẽkếthừalỗicủangườikhác.Nhanh:Nhanh:Nhanh:Nhanh:khicắtdáncácđoạnmã,kếtquảthườngsẽchạykhôngnhanh,vìchúngkhôngcómộttiếntrìnhchunghợplí(đâylàđiềuquantrọngnhấtkhiviếtcácchươngtrìnhnhanh)1.1.1.1.LLLLààààmmmmđúđúđúđúngngngngphphphphươươươươngngngngphphphphááááp:p:p:p:ttttììììmmmmhihihihiểểểểuuuutrtrtrtrướướướước,c,c,c,saosaosaosaochchchchééééppppsausausausauNghiêncứumãcủangườikháckĩlưỡngtrướckhisaochép.Phântíchxemnólàmgì.Chỉkhinàođoạnmãấyđọcđược,nhấtquánvớilogicchươngtrìnhcủabạn,vàkhôngcólỗi,thìmớinênsaochépnó.Tiếnhànhlúcnàysẽgiúpbạnchỉnhsửanóphùhợpvớicácphầncònlạicủachươngtrìnhmộtcáchthoảimáihơn.2.2.2.2.CCCCááááccccththththưưưưviviviviệệệệnnnnrrrrấấấấttttttttốốốốttttChỉdùngcácthưviện PHP từcácnguồntincậynhưPEARhoặckhocáclớpcủa PHP (PHP ClassesRepository).VớicácgóiAPIcósẵn,việcdùngcáchàmcủanócũngkhôngthànhvấnđề.Thựcra,nếubạntìmđượcmộtthưviệnviếtsẵnbởimộtnguồntincậy,thìthườngnósẽlàmộtlựachọntốtđểdùngchochươngtrình(thayvìtựviếtlấy).6.6.6.6.KhKhKhKhôôôôngngngngccccóóóóđườđườđườđườngngngngllllốốốốiiii((((guidelines))))chochochochođồđồđồđồáááánnnnMộtlầnkhitôimớibắtđầulậptrình,tôilàmviệctrênmộtđồánkhácơbản(vớiPerl)cùng3lậptìnhviênkhác.Vìtôicòntrẻ(vàkhôngphảitrưởngnhóm),chúngtôikhôngcóđườnglốiviếtmãchođồán.Mỗingườiđượcgiaomộtphầncôngviệc,vàlàmriêngrẽ.Khichúngtôinhậpchunglạiđểchạychươngtrìnhcuốicùng,mỗiphầncủađồánnhìnkháchẳnnhau PHP programmingdynamic web for ewreybody21Fatalerrorsinprogrammingwith PHP –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ụng PHP mà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...