- Nr. 2 - 2OO3 - I OO.

OOO lei -

fs s N

I 453-7079

1".f..^ '$ $
0e

$ecurltate
Gele bune mai

Trp 7p, Tnlc 16'
Apache 1.3.27 4.3.1, 3.23 Windows Linux; Browere:Opera 7.03, 9i2.0.44,PHP MySQL pentru 9i Mozilla 1.2.1: phpMyAdmin, Scripturi phpAdsNew, complete: PhpBB 2.0.4, Gattery, PHPOpenChat, MyPhpMoney; Editoare gi HTML: PhpEdit, PHP Programmer Studio, EditPlus, Quanta, conText MySQL GUI:MySQLFront SQLyog, Security 2.5, JSoft Manager mySQL, for myFrontEnd Acceleratoare PHP:Turck MMCache PHP, for PHP Accelerator'; ClienliFTP:FlashFXP, BulletProof FTP

3

Editorial

6

Introducere

Dezvoltarea Internetului este in al treileastadiude dezvoltare, gi iar,,dinamic" ,,interactiv" atributele sunt esenlialeale oricdrui PHP 9i MySQLsunt uneltele idealepentruun site de succes.site dinamic. 7 Cei trei magnifici

pentru instalare pentru Sfaturi o rapidd uneltelor a necesare constructia sitefolosindunui pe 9 Gu creionul hdrtie
Stabilirea obiectivelor. 11 SQL-ulmeu si-al tdu
*tr e. ..3.,9 ,: 'g
ilewsline

In vertebrald unuisitedinamic. a Bazade dateestecoloana veli sd a acestcapitol invdlatot ce avelinevoie gtitipeniru gi construi a lucracu o bazdde date. pentrutoti 20 Programare
- i

in PHP lntroducere limbaiul folosind PHPin combinalie formularele HTML Interactivitate cu invSlalicum sd folosiliPHP 9i MySQLpentrua induce in dumneavoastrd. dinamism paginile 36 Noul site pas cu pas ale Creali primelepaginidinamicegi interactive site-ului. 51 Stipdnul datelor

de a site-ului. Secliunea administrare 65 Tips & Tricks
de Cum sd vd protejali nepldceri.

Redacliaooate fi contactala a: Tefefon: 0268-415158,418728, 0723-57451 0744-754943; 1, ' Fax: 0268418728; E-mail: redactie@chlp.ro Adresa redaciiei:2200 - Bra$ov,str. N.D. Cocea nr.12 Adresa Dentf coresoondente: u 2200 - Bra9ov,Oficiul Pogtal2, Cbsuta PoSlalS 4 Director Generali Dan Bedescu (dan_badescu@vogelburda.ro) Directo. tehnic: Daniel D;niE-B6k6si (dan_danila@vogelburda.ro) Redactor: Oana Sdulescu(oana@chip.ro) Secretar de rcdaclie: CristianaVr5bioiu (cristiana_vrabioiu@chip.ro) Coperta: Virgil Popa (virgil@chip.rc) Grafici, DTP: Virgil Popa (vi$il@chip.ro) Contabilitate $i administralie: Maia Pa€e, Eva Szaszka,Adrian Dumitru {contabilitaie@vogelburda.ro) Reclami: Zsolt Bodola (zsollbodola@vogelburda.ro), Cfistian Pop (cristian_pop@vogelburda.ro) Marketing: Leonte Merglnean(leonte marginean@vogelburda-ro), Oana Leu (oana-leu@vogelburda.ro) Distributie : loana B6descu (loana_badescu@vogelburda.ro), loan Soiu (iancu_soiu@vogelburda.ro)

Pregetire filme: Artrlr Repro LTD. l\rontaj9i tipan Veszpremi NyomdaRT, Ungaia Relatii intemalionale: http://www.chip-ro/html/abouuinternaiional.php3 Editura: Vogel Bufda Communicalions SRL Sediul edilurii: 2200-Bragov Str. N.D. Cocea nr.12 Copyright: ^ ln Romania: Vogel Burda Communicailons SRL Bragov In Germaniaj Vogel Burda HoldingGmbH, Wizburg, DirectoriHermannPaul tssN 1453,7079 Manusuisele.inclusivin fonat electronic,expediatercdacliei devlnpropietatea editutii. Editun ili rczeNA dreptulde nodjficarc a mabnalelar pnnite, precun ri intesrata sau padjal' a atticatetot,infornaliito. a datei de aparle. Reprcducerea sau a inaginibr apante ln rcvis/,a esta pemisA nunai cu acordul scnsal edilurii. Redaclia nu iii asume dspunderea penttu gregeqti inadvettenle apetute in natenalele colaboratoilor 9i ale inse.enlilot.

CHIPSPECIAL SITE DINAI4IC

Solufia completi,r,
Sub acestmoto am reunit pe CD o colec{iea celor mai bune aplicatii pentru creareaunui siteweb dinamic, in mare parte absolut gratuite.

Uneltele de bazi
Bineinleles, creareaunui site performant, aici intelegandunul dinamic, precum gi punerealui in functiune,nu poate fi ficutd fird anumite programe, dedicate. Din acastmotiv, pe CD am inclus servcrul web Apache, sistemul de baze de date MysQL 9i PHP.

Macromedia
Nu este designer web care si nu fi auzit de firma Macromedia gi produsele sale.Acesteau$ureazd foarte mult munca de creare,programareqi finalizare a unui site web, datoritd unor unelte ca Homesitc, Flahsh MX, Dreamweaver, c a s d a m i n l i mn u m a ic a r e r a i n r e r s i u d nile de probd incluse pe CD-ul ata;aL revistei.FolosindHomesite sauDrearn5 weaver MX, creareade site-uri web dinamicer a fi mai uSoard deoarece amdndoueoferdtag-tipsgi autocomplete penhll HTML qi PHP.

unealtd cuajutorulafueia vdputeliconecta la bazade datede orir.rndc fi, Gallcry, a{i c u c a r e v d p u t e t ip u n c p o z e l eo n l i n e , phpMyChat, un sistem de chat webbased,precurngi multe altele.

Browsere
Pentru testarca paginilor pe care le veti face esteclar nevoie de un browser. Acestaa fost $i unul din motivele pentru caream inclus pe CD ultimele versium a d o u a b r o u s e r ec o n s a c r a t c : o z i l l a ; i V Opera.
lntfl!.1!l<

Ajutor in caz de nevoie
Pe CD pe ldngd Apache 1.3.27 qi 2.0.44,PHP 1.3.19i MySQL 3.23pentru Windows qi Linux veli gisi qi manualele PHP 9i MySQLin fonnatHTML 9i CHM (Windows Help).
CD-ul inclus poate fi utilizat in coniormttale cu pa netrii definili in standardulPhilips - Yellow Book. Editura nu-ti asumAresponsabilitatea asupra evenlualelor paglbe provocatede utilizareaCD-ului in alii paranerri decat cei stabilili i11standardul merlionat anlerior.

* . ) = = -r;:r:]]:'::1_-:::. ft/,l|']]];;."

Clienti FTP
DupA rcalizarea $i testareasite-ului r i n e 5 i m o m e n t uiln e a r ea c e s t ar e b u i e t pe translerat un sen er coneciat Interla net. Pe CD vefi gdsi cei mai populari Extras clienli de FTP cu care ve{i putearealiza Ce ar insemna crcarea/programarea transferulrapid qi uqor. unui sitc web fird ajutorul micilor proF-::_w,:.. grimele caresalveazd timp? O muncdde ::-:,n* I u n i d e z i l e . D e a c e e ap e C D r e r i g i s r . n u m e r o a sa s t f e J e u t i l i r a r ec:l i e n t ir i e l zuali pentm conectarea lucrul cu baza qi de date, editoarePHP, driverc MySQL pentru concctareadin .Net, Java qi Python.

NoTA
Interfata CD-ului CHIP Special este conceputd sa ruleze optim pe o placd grafica ce srporta minim o rezolulie de 800 x 600 Si o addncimea culorii de 16 bjli. De aceea, este nu recomandatA folosireaacesteia inh-un mediu cc nu oferi ninimul nccesar! Inierfala poate fi rulati atat sub Windows 95/98/Me, car $i sub Windows NT/2000/XP. Din cauza multitudinii de configurattl, r c d a c r i a H I P S p e c r d l n U i p o a r e a s u n naL . C iS ri rcsponsabilitatcin eventualitaleain care apar probleme in funclionarea interfelei $i a aplicaurlor. .ogramele are au inrra. in P c compo.enJa CD-ului CHIP Special au fost testate ti selectatecu gri.je in redaclia CHIP S p c c r a J .o r u $ i r c d a c t i a u i ; r p o : r ea s u r a r i L i T . n o responsabililate penlru firncrionarea anormalA a software-uhriSi nici nu poatefi feculi responsabihpentrueventualelcdauneproduse. CD-u1 CHIP Speciala fost verificat tmpotsivavinrqilor cu umatoarele programe antjvirxs (in ordine allabetice): BitDetender Professional 6.4 (tumizat de Softwin), F-SecureAnlivirus 5.40 r h l r i z a r d e I n f o d c s i g n iK a \ p c r . k ) L a b A n r i . Vinis 4.0 rtumi,,arde Kaspef.Ly I ab . Rusia)$r RAV 8.5 (tumizat de CeCAD). Pentru orice inlrebtui legare de aplicaliite de pe CD, vArugim sAcontactalitelefonic,prin fax sau pnn e-mail. aurorii nrogramelorrespecrivc ATENTTFI PentrurulareacorcctAa Inlerfelei CD-ului vA recomandim setarea unei rezolulll minine de 800x 600, o adancimeaculorii de 16 bili $i folosireaopliunii Small Fontsl

Scripturicomplete
Am inclus qi o seriede scripturi complete, gratuite, pe care le putefi utiliza pentru a vd imbogdli site-ul. Printre cele ma1lmportantese numdrdPhpBB 2.0.4, un forum pe care trebuie doar sd il configura(i pentru a inchega o comunltate pe site-ul dvs., phpMyAdmin, o

CHIP SPECIALSITE DINAI4IC

De aici se pot ridica o serie de problemede compatibilitate.. A doua generafi€a inceput odatAcu specificaliilepentru HTML 1 9i competitia pentu dominareapiefei.tiona.fird si instalatiun nou sistemde iar site-ul operare. Pentrua sta in fala concurenlei. ln 1960. de sau o bazi de date.EDTToRTAL . A i nimeni nu $i-ar fi imaginat unde se va ajungedoar 40 de ani mai tArziu.98 miliarde de dolari.com. Se cere. Site-urile care runt produse servicii intr-o conlinuA ofera sau rind crcllere.vizual" ca mod de comunicare.^ ^ ^ intr-o statistici ficutd pe ejobs. toate electrcnlcain la ccle din jurul nostrusi fle conectate lntemet... Un studiual relevd faptul cI vAnzirile online Cyberadas au ccl mai maJepotenqial dezvoltaredin de intreg sectoruleconomic.Crearing liller $ebsites" periorelerdla site-urile creale aceasla in adi ca. sau De asemenea. in maipufn dern an. llllEtiltlGln.pulea care allsaLexl ima:i gini . . in ziuade astizi oricinepoate faceun sitecu ajutorulaplicaliilorvizuale precum MacromediaDreamWeaversau Microsoft Frontpage...i personaliza online. o modificafi 9i si o uploada{i tal !|I i. Metodelepusela dispozitiede aplicaliileserver-sidene pot ajuta sd tansformdm un simplu site intr-o comunitate activa. AdSugarea sau nrodificarea estefloarela urechegi atdtde continutului pe sd simpluincatpulelrdclega oricine se ocupe de aceasta sarcini. cererea de programafori HTML estein cidere liberdin timp ce limbajeleserver-sid€ sunt cele mai cerute. ci oferd posibilitatea a interac. a renunlat limbajul\eu nropnehr. se autorui c64ii .1% din utilizatorii de lntemet au fEcutcunpfuAturicu o valoaretotali estimad la 47. CREARE... exemplele in I ! l i l pe Articoleleprezente amandoudpaginile au fost introduseo singuri dati qi s-au aranjat. Mosaic.sepoatecreafoarteu$orun duplicatal site-uluioriginal.. Utilr/alonr s..Site-urile firmelor in utilizanumaisunt doar lonnatir ci oferd e produse torului posibilitatea a comanda de sau seryicii.cu un fomat potrivit destinatiei.Aceasta inseamni P nu dimpotriri. oRGANTzARE .. Un pensitecreatp€ntruweb va trebuirecrcat tru a puteafi accesibilqi de pe telefonul mobil sauultimul ricnct dc mp3 playercu conectarela Intemet.. iar Intr-un site dinamicse pot adiuga elemente de interactivitate foarle u$or.in lavoareaHP. la sfi4it doarsdtransferafi pe serverulLimx qi sdrulezefird probleme.Site-uri primdgenerafie". TNsTALARE srTE . utilizatorului de experienla Dinade a-. Lumea progreseazdpa' rapidiaru ebdesignerii in trebuiesa !ina pasul. Avand continutul intrseparat strucfurd deprezentare. la fel ca ii a$teptarile ei doresc lor: qi informafieproaspdtd posibilitatea a de intemcliona. \ eb designer un trebuiesa oferemai mult gi mai rapid decatceilalti.Yahool.lol ce va trebuisa acesl faceliestesdcititi Sisdexenali chiarvoi toate prezentate continuare.ifi11r'1r::i r- Yahoo! a renunlat la limbajul proprietar yscript in favoarea PHP . pHp. ne a dinamismului$i interactivitifii. Numdrulintemau{ilor creste la o zi la de alta. Deoarec€ in conlinutulestestocat bazade datesauln fiiiere text. puteli creaun intreg websitepe calculatorul personal. l r e l e a u aM i n i s t e r u l u i p a r d r ia l S U A . Tendintaeste viitor. CHIP SPECIAL SITEDINAMIC Avantaje a P r i n c i p a l a v a n r a jl u n u i 5 r l e i n a m i c ul d unuiastaticesteu$urinla admlnrin asupra strare. chiargipenhuceinefamiliarizalcuprogamaAcestSpecial dorcqte se reasau bazele date. la Darid siegel. ne on adaptdm noilor cerin{ei ingrogimcoada ori la Ofrciul fo4elor de muncd.Ca webdesigneri.in aceastd meserie evoluliaestecuvantcheie.interactiv" sunt atributele esen{ialeale oricirui site de succes.cei careseocupddecontinutnu au nevoiesA$tie vreunpic de HTML sau organizarea layoutulpaginilor.dinamic" gi . cdPHP complicar dilicil: este sau PHP qi MySQL sunt foarteu$or de invd.tat.c u m p d r A l osrp u n c d i intenlioneazA crunpereonline gi in viitor sa datoriti u$urintei$i comoditilii. dacd trebuie sI schimbafi logo-ul pe fiecarepagini a site-ului estede ajurs si faccli modificarea intr-un singur in fi5ier locsdlualillecare sa faginain pane.ource oricinele poaleutilizahra 5i costuri 5uplimenure. alt motir estecd Ln platlorm: PllPsi aplicaliile creatc cross sunt Linu-r5i MySQL rulea7e pe sisteme atdt Windows precum gi pe o muUime de alte sistemede openre mai rar intalnite.odatdcu lansarea graruit. la y'cript.singure": cele mai noi la inceput. Netscape-Microsoft perioadda fost inspre in Odentarea aceasta . ^ . Paginile static€ mai suntde nu ajunspentrua asigura fidelizarea utilizatorilor.. inapoipe server. Deja putem accesa site-uri wap prin intermediultelefonului mobil qi s-a inventatpdnd9i frigiderulcarefacesingur comenzileonline. De ce PHP 9i MySQL? Cel mai putemic motiv pentru folosrea penhu PHPsi \4ySQL unelle ca crcarca unui site dinamic este faptul cd amandouA sunt open-.nurndrul lizatouti rilor a ajLrrs 2 milioane. de lineare. limitate ca posibilitili dar indeajuns de pentru functionale transmiterea informaliei. ADMTNTsTRARE . inplus. prefere culnpArdturile onlinedatoritdcomoditaliidea comanlird Aproxidaunprodus elonsaudeplasare. In prczenlrHr este aut oe pur€rruc $l veNatil incat peni $i liderul portalurilor. Trps&TRrc Intoducere lncotro ne indreptdm? Dezvoltarea Internetului este in al treilea stadiu de dezvoltare. cdnda lost lansat ARPANLT.Dezvoltarca Intemetului a inceput cu adevemtin primului browser 1993. I . de demonstreze lucru .La fel qi site-urilecare oferd qtiri: ele nu mai sunt demult doar simple pagini de ziar in format electonic.in populagia 2002 39. in prezent aproapejumdtate miliard din de globuluiare accesla Intemet. MysQL . misltrul gi interactivitatea sunt elemente obligatoriipentruun sitede succes. in prezent afldm in a teia generalie. Astfbl. cele mai vechi la sfarsit. m a r i \ g 8 o od i n e .

ali puteaintreba? bine. mbuie si il irsralaEi inuii ca atarc. n m o t l mentul in care r i se vor cere inlormalii despreserver.tebuie intdi p9 un servel secunzat. va Dacd uitatr sursa in paginiinu serveratunci candscrieliinbara deadrese vegi vedea dec6t HTML. Alegerea pagini cu acaastA extensieqi ce program se noastrd s-a indreptat spre Apache daocupd de ele.:e alaturat puteti gasidoui r ersiuni Apache.douava trebuicadupdjnstalarea sdmodilor nile HTML pot fi deja pe server sau ficati fiqierelede conligurale. ocupd-tede aceastd pentru cele mai popularesistemede opcerere da-mi inapoio pagind caresAo pe erare.44. create. Pentru a putea servi pagini. ruleazd procesulde instalarepe un sistem Wincodul din progam qi daci vede cd se cer dows aga cum majoritatea dintre informatii din baza de date MySQL. in Windows95 98 exisr.4 folosili-o doar pentruuzul personal. pHp CREARESTTE. O pagineHTML gi scrisede utilizator servitdde Apache. 2000 9i )G.chip. PHP gi HTML browserului clientului.0.../clientu lui PHPpreia cererea. Pentrua nu fi nevoit' ca de fiecare datd cand r. acceseaz5.. Totu$i.44\binary sd o serveascd clientului.. o dumneavoastrd aveti. deschidefiun browser 9i accesali adresa http://lo.binary. pe server(de aceease ti nume$te s p r e e x e m p l u .*hu a putea facepagini dinamice {Erdsdfiti ffinevoili sdvd cumptualihostingla un ISP sau sA pierdeti timp cu configuriri exhaustive.esteinstalat A sa >isen iciLrJ pache..Vi \oi ghida in continuare 5i prin '.phpasite-uluiwww.alho.in vederea server) colaborariiintre cele browseruluidoar pagini HTML. p o n a b i l i t d ! i i . gtiesi Apache Apachenu estepredefinitsdlucrezecu PHP (de serveascd aceea Sinume$te se gi vicevena.in cod a br ow serului httptlvtyty<hlp. penF.S/i7ll > Programs > Apache HTTP Set'ver> StqrtApachein consolecareva pomi programulintr-o consola. Pe CD-ul trimitemai departe cererea citre PI{P. serverul estepomit qi funcfioneazd. serverul lrebuie sd fie pomit.0. f l e x i b i l i r a r i s al e . r + T " .datoriti faptului ci suporUn exempluconcret:prima paginl a sitetul PHP p€ntruApache2 esteinci expenmental.ro". 1 * l line site-urile.ir Windor.afigeazd.la tot ln continuarevd voi ghida prin instacerereaserverului de web gi servite ca larea gi configurarea Apache.ro hnp: o cerere:. linigtein vederea publictuii lor ulterioare ar de ce e atetde complicat. . mentul in carecerempaginatest.reqisd aveti ssrverulpomit sArulati progamul manual.clientului un rczultat intelpetabil de cdte mipagina 1. asa ului chipro este fi9ierPFIPcareia din baza lm dedatecelemainoi gtiriadiugatederedactori piletrimireinapoicdneA pache leafiSeaza care sAvi povestescce se petece de fapt pe vizitatorului. PtlPruleaZ.r.Vi va Ii muh mai u$or sd instalali aceastl versiune dar l. Apache Daci in schimb cerem o pagini cu altd php in cazulde faf6. acolo.The J .serverside'9iconlucreazicuApache ) browserul lnmtlecarre sen eruldeHTTP astrel hcat acestadin ulmd sd poad afiEa 'wwr. atunci cend cercm o r o r i r . TNTR0DUCERE @ oRGANTzARI.in acest caz o paginn HTML.il pute! seta pomeascii automataccesand Services(Windows Service Control Manager) din Control Panel t Administatire Toolsin Windows2000. cere un fiqier PHP. pe CD. Noti: Daci instalali Apache 2.de cdtrealte aplicaJii. serverul Apacheva sigurantei $i extensibilitdtii.\t Dacd pagina afi$atd arate ca in imaginea aldturatd. C d n d a p a s a t i E n t e r .). loloriti serverul Nu Apache pe Windows 95 sau98 pentrua vd pune on. ryysQl. umbrd".sfatulmeu estesdinstalafi Apache pe 1..Pentrua testa.. TrpscTRrcKS " Instalare cerinfede sistem 9i Gei trei magnifici Instalareacelor trei componente necesare funcfionirii unui server webpoateda bitii decapchiar qiunui utilizator experimentat ale in calculatoarelor. in moMysQL.Omiterea adaugirii unei linii intr-un fiqier de configurare vi poate scoateperi albi incercind si aflati de ce lucrurile nu functioneaza cum ar trebui. Prima pagine servite de server dupd instalare.EDTTORTAL. browser .3.0.tq lpltp.apache". Ia fel ca orice aplica.folosifi urmbtoareledate: Network domain: localhost Server name: localhost Administrator's Email Address: adresa dvs. r n l l m p u t I n s l a t a nA p a c h e .14\binaty\patchde pe CD. limbaj. Facetiacestlucm accesand meniul . Pentru un site aveli in primul rAnd sd vadi dacdesreconfiguratsAsen eascd nevoie de un seryer HTTP. CHIPSPECIAL SITE DINAMIC .tie. va hebui ca dupa incheierea insralirii sii suprascrieli manualfigierul libapr. Pagi.2.pentru Ei vd explica acest lucru. puteq sd il pomi! ca seniciu 5i el va pomi automalodatAcu Windows. PentrucaApache sApomeasca automatla fiecarercpomire a calculatorului. Astfel.Apachecauti extensie. Kitul de instalare il trimite sewerului Apache pentru ca acesta gdsili in directorul apache2.Apache o serve$te imediat.chip. exfage inlormaliile cerureSi Ultima versiuneApache pentru Winconstrule$teo pagind HTML pe care o va dows este 2 . i paginicuextensiaphp. Folosi(i o consolSMS-DOS prompt pentru a intm in directorul C)Program FilesVpacheGroup\Apache atasta qi apachb -i -n. doarpenn'u le creain ci a Configurarea serveruluiApache. ADtlrNrsrMRE.27 careil gisi{i pe CD in directorul apache LJ.dll din ctProgram FilesVpache Groupl4pache 2\ bin cu cel din dtrectorul apache 2.rs M.i suponpentru servicii irxi este doarexperimental. afi)e. Daci mesajul primit este. Aceslserver esteApache.htmlde pe server. odatdcu instalarea programului. de mail.

pip gi accesa(i URL-ul http://l ocalhost/test.htrnl 9i modificafi-o in DirectoryIndex index.exe din directorul zysql 3.23\binary.apache"gi sewtctul va fi dezinstalat.e E!5 i "!-. s5 suprascrieficu acestacorespondentul siu din directorul C:\Program FilesVpache Groupl4pache\conf. dl1 Documentroot Document root estedirectorul in care afld fiqierele HTML 9i PHP ce vor ti servitede server. Pentruaql\bin\ mysqld. deschideFcu Notepad fisierul C:\Program Files l4pache GroupL4pache\conf\httpd.: _ ! .php. CREARESTTE . in fi accesatd deoarece cazulacesta aretidoudsolutii:ori continuali si lucragicu Nolepad-dar va trebui si dezactivali ascundereaextensiilor pentru fiqierele cunoscute..php print "Acesra este un l:est. frind suficient CHIP SPECIAL SITEDINAMIC MySQL Pentrua instalaultima versiuneMySQL pentru Windows nu este nevoie decet sd po:r'iti setup. cum Sdtestemdac6totul funclioneaze trebuie." .MySQL are nevoie de protocolul TCP/IP.ere).Dacd dorili sA faceli configurareamanual (in cazulin careaJiinstalatPHP in alt director decat cel indicat aici). ori folosiS un editor PHP din cele puse la dispozilie pe CD. etc.. Altemativ. celui DacAouQut-ul esteasemdnetor din fereastraaldhrate. httpd. pentru a vd u$urainstain continuare.txt $i nu adresahttp:/ oca." putef sdqipomi! imediatserviciul(1iri a reboota)scriind in consold: . AddModuLe modjhP4. in documentrootvafi disponibil1aadresa htto://locallnst/numqfiigL Puteti testa acestlucru creend o pagini test. it mears that the webserversoftinstallationofthe Apache ware on this systemwas successful.ca 5i Apache. htmL nu Daci rezultatul aratdca in pagina anterioari.in cazul de faJdel este directorul C:\Program Files\Apache Oricefi gierpuneJi Group\Apache\htdocs.il puteli w.XP. ServerulMySQL Noti: Pentruca sdruleze.microsoJi. tL €d Y* FIErB I. M)6QL PHP. Apache+PHl funciioneaza". . in drrectorul chip.c Cduta{i apoi linia Directorylndex index.0\binary\php-4. PWS. Ca sen erul de MySQL sApomeasci automatla fiecarerepomire a Windows...com/w indows95/downi o I oads conterrts/wuadmint oIs/s_wunet / asp ssockets 2/default. Pentru ca va schimbdrilesd fie recunoscute hebui sa repomiti Apache.html in care sd scdeli: <p>Aceastaesteo paginAde test</p> Copiali fiqierul test.ti se faceli configurarea manual. cu Notepadva fi de faptn!tr:. Salvali-lcunumele/esl.it test. TlPs&TRlcK . gata pregdtit. i n p i c o p i a l i -iln d i r e c torul Windows.dll ir't c: \wil1dows\s). puteli addugaun shortcvtin Start Menu/ Start up adtre C:\mysql\bin\mysqld. rulaf C.dll $i /windows. verificali intai daci serverulestepomit $i dace nu cumva aveJi alt server HTTP (PWS.ri http ://loc aIlpst/test.mcrosoft. Pe sistemele cu Windows NT4 tlebuie sd ave. \ .ME $i2000nu aunevoie acest update. . i r e d e n u m i l iplh p .exepe 1pomi.IIS) caxe ruleazd. wotki gtoo|s/wg Windows XP Penku a puteafolosi Apachepe sistemelewindorvsxP tebuie sAaveliwirdowsXP SewicePack I instalat.conf. deschideli frgierul c:lphp\php.8 j Aceita e* sb' 1@ ?4 .. lareaputeli copia fi1terd php. Apache+PHP incd nu vom putea accesaPHP din Apache deoareceacestadin urmd este doar deocamdatd configuratsdserveasca pagini staticeHTML.0. Dace ve hotaraf sd nu mai folosifi sewiciul Apache. :&irel€l n|g/rctunsrdp m En i l l n !s! iei9!1 l1-!! I i l " J l'!t -44ach. Notepentruinstalarea rulareaApache Si Nu funelioneazi? a&esahttp:/ Dacaah. tastati in command prompt apache-u -n .dllphp4ts.".98.Windows incepeinstalarea de 4.php va putea te't.configde pe CD veli g6si figierul de configurare pentru Apach€.cdutali textul doc_root: $i schimbali-l cu doc rooF"C:\Program Files\Apache Ciutafi apoilinia GroupL4pache\htdocs".config de pe CD in c:\windows. serverulMySQL functioneazd.ini-dii cu Notepad. " has apache service beeninstalledsuccessfully.DeoareceMySQL este un server.Crea{i cu Notepadun document text in care scrieli: test.-// www.. iar apoi figierul C \php\php 4ts. |NTR0DUCERF "@ ADM|NiSTRARE oRGANtzARE ..EDTToRTAL ..0-lItin32 de pe CD 4.ti I instalat ServicePack 3.C:\php". .repe NT/2000.lhosttest.rnci cendaccesa. DacA ati umat instalareapas cu pas dupa recomanddrile noastre. serviciul MySQL sdpomeascA Se testdm:dupd ce a{i pomit serverul mysqld scdeli urmitoarea linie in commano prompr: c: \mysqL\bi.\hysqla.asp Atentie ! poatefi necesar si Pe unelesisteme copialifi tierelephp4apache.lnrn version s ta- PHP Copiali conJinutul directorulul plp . Salvatifrgierul.php. Windows 95 si Dacaaveli Windows95 trebuie WindowsSocket downloadali seinstala{i $i 2 Update de la Microsoft inainte de a NT Apache.Adresade downloadeste:l'@. din directorul /php/in directorul Windows 95/98 sau C)mysql\bin\mysqldnr e.exe (tespectiv mysqld-nl.3 in c:\php.r:. .html index. Vzys afost instalatgi ruleaza.stem. daci dori.ini din directorul chip.+?EP Fsdionee script PHP! Atenfe! DacA Windows-ul dumneaextensiilepenvoastrdestesetatsdascundd documenh.).php nu exjsti. asigurali-vd c6 nu exista un alt sewer HTTP pomit (IIS.iar programul nu va mai fi pomit automatodatacu Windows.com/ obline de la http://wn / /s wi ndowsxp/pr o/ downIoads en i cepacks sp1/defauh..htmlin document root $i tastatiin baxade adrese abrowserul.conf $i adeugaliurmdtoarele3 linii: loadModuLe pnp4 module c: /php/sapi/ php4apache.3.ti cu /localhost vedelio pagine mesajul nu "If you can see this. extension di1 : Ei schimbali-o cu extension dir=.rl cleat tru fiEierelerecruroscute. Este recomandat cape Windows NT/2000/XP sdsetali automat.va trebui intai sd-l pomili dacddorifi sSlucrali cu el.php.

Ce cirti aveti despre PHP?". Av6nd 1a dispoziliecomentariile celorlalfl putem alege o povestire SF bund pentru pnetenul nostru chiar dacd n-am citit-o niciodatd. Cam acelagilucru vom face qi in site-ul nostfu.EDITORIAL. . Valoareainsumate cd4ilor a addugatein cog o vom afiga permanent . i n v i t r i n ds e e . Cogulde cumperdturi Atunci cdnd un vizitator va apisa butonul . . Vitrina Ne afl5m la ugalibrdriei.. D a c d5 r i m d i n a i n r e u m \ r e m s a c functioneze o aplicalie.IVIYSQL. . i5ipuna doua-trei sa flecare carte intr-un ao$ de cumpirdturi Ei la sfargit sd se ducd la cas6pentru a pliti. PHP. afld ceteva ce4i alesepe sprAnceanide cdhe librar: cdrlile foafie populare gr noile aparilii. Vom mai adduga gi o secJitmein care si putem vedea comentaxiilecelor ce au citit deja cartea. Cartea in magazinul real putem lua o carte din raft penh! a-i vedeacopefta$i a o rdsfoi. cdnd trecem la scrisul codului com putea sd ne concentrdmexclu:iv asupra programArii sA fera avem alte preocuperi.. best-:eller-urile. Deoarece magazinvirtual un aduceloafle mull cu unul real..GffillTilT. ... Pentru ci spaliul virhral ne pcrmite.*=lE6{L Detaliile ce4ii. la fel cum ne ducem intr-o libririe realddirect la primul angajatsdil inhebdm atunci cand cdutdm o anume carte. Fiecare carte va fi insolita 9i de o scurti descrieredeoarecenu vom avea un librar care sd facd acestlucru pentru noi. la fel ca intr-un magazin . aplicaJia noastrava fne minte alegerea vizitatorului pentru a i-o purea afi$a la o noui privire in coq. precumqiposibilitatea a adduga nou de un comenta u.€!r' tor. S F " ...Poezii". tot de la intrare vom oferi vizitatorului gi un cogde cumpdrituri precum )i opliuneade cdutarepenFu a gasj o carte rapid. INTRODUCERE.real"..Adaugi in co9" el va fi redireclionatspre o noua pagina in care ii e s t e a f i i a l c o n l i n u r u c o g u l u ip i d o u a l opliuni:sAcontinue cumparAturile sa 5au meargi la casi pentm a pldti. F r d r i s afld in$irate cd4ile apaftinandacestuia. precum5i cele mai noi intrdri.Dati-mi seriaFundajiei de Asimov" sau. sdrdsfoiasca pagini. C a l c u l a t o a re t"c .. vom pune la dispozitia vizitatodlor nogtri un motor de cdutarepentru a gisi rapid ceeace ii intercseazd ferd a fi nevoili sd piardd timp prelios cdutdnd prin rafturi..sg.u n c r i o n a l i r E lelie i a i 5 modul in careutilizatorul va interactiona cu elementeleacesteia. . .o sd \d prezint in continuarefiecarepagind a slte-ului pdn analogiecu o librdrie reald. in cazul in care dor€lte sd mai cumpere. Putemyedea rafturilede cd4i marcate sugestiv. Acestuiaii placpovestirile SF ata cd ne indrcptdm spregirul de rafturi deasupra cdruiascrie.Medicind'-.SF"pentrua vedea ce am pulea alege.De aceeavom lua uncreion gi oh6rtie gi vomdescriefiecare p a g i n d s i r c . CAtevaminute de organizare preliminari ne pot scuti de revenirea la cod pentru a aduce modificiri sau chiar rescrierea intregii aplica{ii.Li vor purea seplimbeprin sd spatiulvirtual.#aEe tiJ. TIPSETRICKS Organizarea preliminari Gu creionul pe hartie Regula numirul I in programare esteorganizarea preliminari. CHIP SPECIAL SITEDINAMIC .. CREARESITE... Titlul c64ii va fi subform6de linl< asrfel incdt\ izitarorul poariapasa ra pe el qi si vadi mai multe detalii despre cartearespectryd. De acesta depinde succesulac{iunii la care ne vom inhima.pre{ul Si butonul de pentru addugarea cdrtii in cog. Aceasta funclie ested€osebit de utild atunci cend cumpfudm o carte pentru cineva gi domeniul ne estestriin. $i tot pentru cA nu avem un librar cdruia si ii ceremdirect.. .Apdsandpe link-ul reprezentat de l i l l u l c d n i i: e d e s c h i do n o u a a g i n a n e p i carevom prezentadetaliile cA4ii.Avennri". INSTAI-ARE.u l u if. Sd definim intdi ce dorim sd oblinem de la site-ulnostru. cdr{ile vor fi aranjate dupd domeniul cdruia apartin a . pentru a scrie cod bun trebuie sI gtim destul de clar care ne sunt obiectivele inainte de a scrie chiar qi un tag HTML. ' eJB g. imagrneacopertei. Accsliucruenle echivalent cu a da click pe unul din domeniile prezenlate prima pagina5i a inna in pe pagina dedicatdacelui domeniu unde se ttrDraN tneJ !=tl o. sAvaddcopefielecd4ilor. pentru a le putealocalizamai uqor. La fel ca la librdrie. ADMINISTMRE. Peaceastdnouipagind vom ardtavizitaii torului ca4ile ordonate dupe autor qi titlu insotitefiecarede o scurti descriere de qi prelul cd4ii. La fel va fi 9i prima pagind a magazinului nostru virtual: vom prezentagenuriledecdnipecareleavemdisponibile. Lista rezultatelor cdutdrii.Manuale".Dorim ca vizitatorii sd cumpereod4i.. + -J Pe raft Intlim in magazin pentru a cumpira o cartepenbu un pneten a cdrui zi de na$tere esteduminici. rganlzarea preliminard este o prac-ticd obi$nuita in firmele de software qi ar trebui si fie legea de cdpdteia oricdrui programator w e b .

EDTTORTAL ,, TNTRODUCERE ,, TNSTALARE @

MFQL,, pHp,, CREARE , ADM|N|STMRE stTE ,, TtPs&TRtc

talii va apisa pe ,,incheietranzaclia",ii va fi afiqatd o pagini de mullumire qi dumneavoastdveti fi anun{atprin email pentrua o puteaonoracal mai de cerere rapid.

+

.

d l r i

q

i,;i"";i

Ir t0r4na med 't
h.-,r,, tu-j :;-1

I.

r

.

Administrare
aveanevoiegi de Pelangaacesteavom o sec{iunede administare cu ajutorul sau ce4i din cireia sdaddugdm sdscoatem vinual. sd definim rafturilemagazinuJui vrzrdomenii gi sErevizuim comentariile tatorilor (existSqi posibilitateaca vrcun glumel sd adaugeun comentariuneposau modificat.1. tri\il carear trebuiSters de Tot in sectiunea administarevom avea o pagina unde.d vedem ultimele cereri 5i sd bifEm tranzac{iileefectuatecu succes dupi primireabanilorgitdmitereacA4ilor cerute cdtre destinatar.

litt;.i,l - t

:..l' ,f u*0,-*
, f;*J
il l !*ij:li*!i

::""J#

-'""' jr"".,*-

PrimapaginS: cele mai noigimai populare ci4i. intr-un coll al paginii, pentruaimbunatdli expedenlavizitatorilor pe site-ul nostru (ace$tianu vor mai trebui sa calculeze perrnanenl minle s(area de in bugetului va caredispun). Utilizatoru) puteaapdsa pe in oricemoment co) pentrua-i re\ i/ui conlinutul (c64ile alesepAndin momentul respectiv). Daci totalul depdge$te bugetul alocat el poate scoate o caftedoud din coq.Daci in schimb igi aducem a m i n t e n u l t i m u lm o m e n c d u n a l t p r i i t eten cduta aceeaqicarte ca cea pe care doregtesi o ddruiascd, utilizatorul poate modifica numdrul de bucdti din co$pentm a cumpdm doue in loc de una.

iilta ca4itor oin domeniul Poezii. cumpdrituri casa. php - formularul de introducere a datelorpenmrexpediere platd 5i prelucrare. php paginacare va prelucra datele trimise prin formularul din casa.php:le inhoduce in baza de date,vd trimite un emailde norificare 5i apoi ahgeazd,,Multumim pentru ca a.ti cumpdmt de la noi". Zona de administrare zone vor fi Toatepaginile din aceastd prolejate de parola pentru ca numai sd dumneavoastrd aveli acces$1se vor afla in directorul admin: index. php - afi$eaziun formular de login; login . php-verificd informaliile din formular qi autoizeazd sau nu accesul mai departe,la pagina urmitoare; cu ajuton-rl acestei om-n--. oho pagini vom facecelemai deseacliuni. Ea va conlinecomenzileinciL neonorate 5i vi va da posibilitatea a le marca.in de momentul in care primiji banii pentru o comandd o puteti marca ,,Vdnduf' 9i in aceasta \ a mai apdrea listd.DacI in nu schimb o comandi estemai veche de o lunA o puteti gterge deoareceprobabil cumpddtorul s-a dzgdndit 9i nu s-a mat dus la pogti pentru a vA t mite banir; sau adaugare. php penhuaddugare $tergercde cd4i $i domenii din e-magazin; n r o t n ac u ajutorul cdreia vom putea modifica sau datede pe site: cdrJi,autori,dome$terge nii comentadile opinii.php - afi$eazd neverificate inci de noi gi utilizatorilor ne dd posibilitatea de a Ie tterge sau modifrca pe cele nepotdvite. bain continuarevom fiece la crearea zet de date a magazinului virtual umand ca apoi sdfacempaginilcPIIP din careva

Structurasite
vom Dupd oeam terminatcu carinlele, trecela impd4ireapepagini.Astfel avem: Zona publici index . php prima pagint d o r ^ n r - . o r o p a g t n a e d t c a lu n u i d S domeniu (SF, Aventuri, etc.) in care afisdm cd4ile din domeniul respectiv pagina in care putem carte . php vedea detalii despre carte, coperta,comentariileutilizatorilor gi in carefiecare r un utilizaror a puteaadauga comentariu personal
_,!_.r,a .aat ,. rlr vaDJO_

Gdutare
va Sd presupunem vizitatorul veni ci pe site-ul nostru ciutand o anumecarte. Pentru aceasta situalier om aveafunctia de caulare. va puteacdutadupi mai El multe crite i: autor, numele c54ii sau descriere. Rezultarul va fi afiqatla fel ii d c a i n p a g i n a e d o m c n i ut:i t l u .a u l o rs i descriere, cutitlul subformi de link citre pagina dedicatAcd4ii.

cesa textul trimis de utilizatod gi il va adeugain baza de date cos.php - pagina unde vizitatorul poat€vedea$i editacon{inutulcoguluide

Casa
Deoarecein RomAniainci nu se pot face tranzac\ii online adevirate, solulia ceamai la indemdndpenhu a puteavinde onlineeslerrimiterea catrecumpdrdde tor a banilor prin mandatpo$talsauordin de plat6, urmand ca dupl confirmarea pliii vanzetorulsdii expediezeacestuia produsele comandate. Astfel.dupA \ ice zitatorulnostrus-ahotdretasupra c64ilor sd butonul ce dore$te le cumpere$i apasd la cas6", el va fi redireclionat ,,Mergi spre o noud pagind in care va putea introduce adresa undedoreqte le prisd meascd.Dupd introducereaacestor deCHIPSPECIAL SITED]NAM]C

Cogulde cumpareturi.

fi compus site-ul.

T

EDtToRtAL ,, TNTR0DUCERE ,, tNsTAuREoRGANtzARE ,, "@

pHp,, CREARE ADMIN|STRARE stTE Ttps&TRtc(s " "

Introducere MySQL in

SQL-ul meu gi-al tiu
Baza de date este coloana vertebral5 a unui site dinamic. in acest capitol vom afla tot ce avem nevoie si qtim pentru a construi qi a lucra cu o bazi de date.
a Iel ca inF-o librarie.cd(ile din I magazinul nostru vifiual vor fteI I buialaniate dupddomeniulcdru ra ii apa4in, nu vom pune laolaltd intr-o harababuri fird sensromane de aventuri cu manualeScolare ctu1ide psihologie li aprofundatd. in aplicalia noaslrAva rebui sd organizdm datele cdrJilor in a$afel incat se le putem gisi ugor dupd domeniu, sd 1eordondm dupa titlu sau si le alegem pe cele aparlindad unui anumit autor. So\ia cea mai flexibili care se corespundi acestor cerin{e estebaza de date.

r

^.

l8:00 tiri S 19:00 Deselle l'lica anilnate:sirend 20:00 Talksholtfinanciar 21:00Filnsefial:StarTrek(ep.140) pelltru 16:00 Progmln copii Canalul C 17:00 Dese|leanilnate:De)(ter (ep.l0l) 18:00 Fillll serialVlP 19:00 Stiri 20:00 Filln:Lofd Rillgs ofthe 22:00 Doculnentaralb ilareh Sd ne imaginem ce tiiem cu foarfeca din ziar fiecare numede program9i ori de difuzare. Atunci ne-am pulea ordona programele dupd ora difuzdrii astfel incat sd putem distinge mai ugor ce ne intereseazdintr-un anume interval orar: Ca||al 16:00 Desene animate: Balanel siMiaunel CanalulA Muztca Canalul B pellhu Prugm|Il copii Canalul C 17:00 Docu|nentar: mzboiln0ndial B Ald0iha Cdndlul Desene ani|nate: DeJ(ter canalul c 18:00til|n:lacereaInieilor Cdnalu A Stiri Canal|ll B (ep.101) Fil|n seialVlP CanalulC 19:00 Siiri CanalulA 0eserle allirnate:Lilo siStitch CanatulB Stiri CanalulC 20:00 Fil|n: atrix Canalul A TalkholY financiar CaIlal|llB Film:Lord flinqs ofthe CdndlulC 2l:00 Filnlserial:StarTrek knalulB Gp.140) 22:00 l,|uzica Canalul A DoclII|eniar dlb Marele CanalulC Av6nd o bazd de date scdpbmgi de ziar gi de foarfecd deoarece ne putem ordona programele dupa plac. pulem alege sa vizualizim doar programele intre ora 17 $i ora 22, putem afiSape ecranulcalculatorului doar filmele din program gi aga mai departe.

in miruntaiele bazei de date
Am spuscdbazade dateesteo coleclie organizatA. acum esle momentulsa vd arat Si cum este organizatd. O bazd de date estecompusddin unul saumai multe tabele (tables) care, la rAndul lor, sunt formate din inregistrdridispusein cdm-

pun (fields).
Daci a,ti lucrat \.TeodatAcu un program de calcul tabelarvd pute,tiimagina baza de date ca fiind documentul ce continemai multe foi de lucru (tabel€l€), gi cdmpurile fiind coloanele ca tabelelor o inregisfiaxe oarecare ca fiind un rdnd din tabel. SA ludm exemplul c64ii de telefon.Bazade dateva conlineun singur tabel cu 4 campuri: nume, prenume, adresd,numar de telefon. l{ulne PEnunE ldn6i llmrdr trl€fuir Andu Paul Lunii29 4567893 Baciu Biama Viforutuils 3456874 Cret|] l.lihai l'luncii4 2154686 tulq Ra|noIIa Republicijl4 1445320 Zim Ghe. Bd. GaiizA 6522554 Conlinuhrl fiecirei linii se numegte generic iffegistraxe (recortl . Drn pnma iffegistrare gtim cA Andu Paul locuieqte pe Lunii 29 9i are numlrul 456789. Valoareac6mpuluiNrize al primei inregistrlri esteAndu, iar valoarea c6mpultti Prenume a celei de-adoua inregistrdri este Paul. Baza de date a departamentului contabilitate a unui magazin de papetarie r a avea mai multe tabelecare si conlindtipuri diferitede dare.\iciunei conrabilenu ii va fi uLilsi aibd fumizorii amesteca!i stocurile chelruielile. cu ci ti va dori sd aibd aceste date separate, dar totodati puse laolaltA in acelaqi1oc.Ea va a\ ea nevoie de un tabel Sroc care sa conlini doub c6mpuri: prodns llume CreioaIle Pix|lri Plicu A4

Colecliide date
Baza de date este,in Fei cuvinte,o coleclieorganizatA. exemple Ca v-agputea da carteade telefon sauprogramul TV din jumalul pe careil citili diminea{a la cafea. in cartea de telefon gdsim numele si prenumele abonatului, adresagi numdrul de telefon, toateacestea ordonatedupi nume, pentru a cduta mai uqor o anumiti persoand.Dacd am avea carlea de telefon in format elechonic int-o bazd de date am putea face o ordonare dupd numlrul de telefon in ordine crescetoaxe pentru a afla cine are cel mai mic numfu. Am put€a de asemeneasd aflim ca,ti abona(i au nume care incep cu J, c61i dintre ei au prenumele lon. numarulde abonalidin ora9.pe care stradd sunt cele mai multe posturi telefoniceqi agamai departe. in programulTV informaliileau urmdtoareastructuri: canalul, ora difuzarii, numeleprogramului.Acestea suntde obicei ordonatedupecanal $i ora difizdrii, astfel: [analul I 16:00 Desene Balallelsi anill]ate: l'lia|lnel 18:00 Filln:TacereaInieilor 19:00 Sti 20:00 Fil|n:|liaiix 22:00 lli zica Ca||al{l B l6:00 l'luzica 17:00 Doculnentar:ll ln0ndial doilea mzboi

ora l*r|ne Droqra|n

llr.buc.stoc in
3511 5000 215

CHIPSPECIAL SITE DINAMIC

ED|TOR|AL,, TNTRODUCERE,, TNSTALARE,, ORGANTZARE,@ pHp,, CREARES|TE,, ADM|N|STRARE, Ttps&TRtc

gi Va mai aveanevoie de un tabelChelruieli caresd aibi umatoareasmchra: Produs$fliciu sax Decofdti|lni Repafatii Jatuze e

Baza noastrd de date
Pentru a ne putea face o bazi de datc trebuieca serverulMySQL si fie pomit. Dacd ali umat pagii descriqiin capitolul i n ' t a l a r es e n e r u l M y S Q L a r t r e b u is d . ruleze deja, el fiind repornit automat la fi ecarerestartarga calculatorului. in continuareva trebui sd folosim o aplicalie ajutorul cu careia comunicam sa cu serverul.Aplicalia se numegte simplu mysql.exegi segisegtein acelaqi director, c:\mysql\bin\. Vom intra in command promptapisdndpe Stan.apoi pe Run pi scriindcommand in campuldestinatprogramului ce urmeazasd fie rulat.Odata afla1iin linie de comandi, scriem:
n, c ,t ava _^ _.. . Ot

Cost Dati 5.000.000|ei 20.12.2002 700.00003.01.2003 h! 12.000.000lei 04.01.2003

Pe langdacestea vor mai trebui incd ii vanzari. cdleva tabelepentru salarii. etc.. penhu ca Ia sfer$itul anului sA centralizeze dateledin toate $i sd facd bilanlul. Din acestexemplu purem obierva cA existi cazuriin carearem nevoiede mai multe tabelepenhuorganizarea infonnaEiei, tabelepe carele linem inrr-osingurdbazi de date pentru o accesaremai ugoard sau pentru a intermedia relafii inhe ele. Dar despreastamai tarziu. O bazdde datepoatea\ea un numar uriagde tabelegi inregistriri. De pe site'sl h\rw.tnysaLcom afldm cAexistdla ora actualdbaze de date pe MySQL Server cu 60000 de tabeleqi 5 miliarde de inregistf'ri. lmpresionant, nu? Cum ar fi lost sdstocdmaceaste cantitatede informajie pe hartie,in cataloage, si cdutamprin 9i milioane de pagini ce ne intereseazd?

Acestea suntbazele datedisponibile de pe server. Rezultatulpdmit de la serverva arita ca in imagineade mai sus. Am incheiat interogareacu punct $i virguli deoarecetoate comenzile SQL (cuexcep{iaQUIT qiUSE) tlebuie incheiate astfelpentru a semnalaserveruluicd am terminatde scris propozi!ia$i ci poate tlece la procesarea cererii. Existd cazuriin careo interogarepoatefi foarle lungd gi atunci ar trebui si o ,,rupem"in cateva buciti mai mici, pe mai multe rSnduri.VySQL ar da eroaredaca ar observa cd propozitia este neterminate agacd nu uitali si incheiali interogdrile cu punct $i virguli. Sdinspectimunadin bazelede datede pe acestserver.Pentrua face acestluclu, spunem serverului cu ce baz6 de date dorim 5i inlerac!iondm conrinuare: in USE tes]] Vom primi mesajul ,,Database gi changed" baza date'test'\ a ramdne de pdnd ceain carene r om faccinrerogarile la deconeclarea la serversau dacd de decidem sd folosim o altd bazFt date, de cu aceeali comandA: USE alta_baza_de_date Setarea unei bazede dateca fiind cea curentA nu ne impiedicd totu$i sA accesdmtabeledin alte baze de date in forma nume bazd de date.nume-tebeL pentru comComandaUSE estepastratd patibilitate cu Sybase. Tot comandacomandaSHOW o vom folosi pentru a vedeace tabele exist[ in baza de date test in care ne afldm:
SHOW TABLES,,

Ce este MySQL?
MySQL este cel mai popular sistem de management pentru baze de date relaJionaledeoareceeste Open Source adici poatefi lolosit lbrd sa fim nevoili sd pldtim vreo sumd de bani. MySQL Servera fost creatpentrua lucra cu baze de date mai rapid decat soluliile exrstente deja 9i este folosit de ani buni in medii foarte solicitante. intr-o bazd de date relajionald datele srult stocatein mai multe tabele separate, fiind astfel imbundtdjite viteza 9i flexibilitatea. Tabelele pot fi legate prin rclatii dehnite de noi, fiind astfel posibil sd combinim la cfferc datele din mai multe tabele.

iar cdnd ni se cere parola apdsdmENTER. Daceserverul estepomit vom prinu mi mesajul de eroare,,Can't connectto 'localhost"'. MySQL server on Serverulde MySQL, ca orice server care se respecti, oferl posibilitatea de a avea mai multi posesoride datepe acelaqi sistem, fiecare cu dreptwile lui. Astfel, serverulunui ISP de exempluva puteafi folosit de mai multi oameni, fiecare av6.nd mai multe bazede dateqi neput6ndsdvadd ce au ceilal! utilizatori ai aceluiagiserver. Utilizatorul implicit (Ei cu drepturi depline, de altfel) este root, iar parola iniliali este goald. Vom lucra cu aceste date pentru inceput dar puteli consulta manualulMySQL inclus pe CD pentru a afla cum putefi adduga utilizatori noi sau schimba o paroli in MySQL.

SHOW
Odatd autentificali vom putea comunicacu serverulMySQL folosind comenzi SQL. Trimiterea unei comenzi SQL citre serverul de baze de date se mar numegteqi intsrogare. Sd facem prima noastrdinterogare$i sdaflAmdac6existd deja vreo bazi de datepe server: DATABASES; SHOW

Ce inseamni SQL?
SQL, acronimul pentru ,,Structured Query Language", este limbajul standard pentru comunicarea cu bazele de date. Comenzile SQL sunt folosite pentru a interactiona cu baza de date (de eremp)usi adauge. modifice sau sd si gteargddatele). Alte sisteme de baze de date care folosescSQL sunt Microsoft SQL Server, Access,0racle, Sybase, etc. CHIP SPECIAL SITEDINAM]C

Observdmcd baza de date test nu are are, nici un tabel. Sdvedemdac6cealaltd schimbind bazade dale cu caredorim sd interacjionem(USE mysql) qi repetAnd

R e z u l t a t u lu n e i i n t e r o g i r i S H O W COLUMNS.

Nu este nici un tabel in baza de date test.

Field. textul interogdrii ar fi: INSERT INTO carti(autor. este numele cdmpului. cu comenzile SHOW TABLES 9i SHOW COLUMNS. unul: CREATE TABLE tabel_test (camp_test TEXT).Toate sunt CREATE DATABASE fibrar. . In imaginea aletumtd putem vedea maimulteinlormarii despre fiecare cdmp..a doua.. Type.creeazetabelul De asemenea. INSERT Haideli si introducem catevadate in tabelul carti..Dacd prin am li specificat ce wem sd introducem valori in toate cele trei coloane am fi primit alt mesaj de eroare deoarece MySQL nu ar fi recunoscut textul 'Shakespeare' ca fiind string gi s-ar fi oprit din execufie. datele de pe coloana respectiva vor lr te\le.arie Am putea sd folosim interogarea SHOW TABLES qi aici. Si tlecem atunci la treabd. camp3 TINYNT).. vatoare2.. in cazul in care nu a fost sernnalata nlci o eroare.Key arali dacAeste inder. SELECT 'camp carui nume are 1\ EROM \tabel spatii . TEXT) are spatii' {'camp 1 . canp2/ camp3) values (va1oare1. tipuri de caractere din este tipul de date qi la ce folosegte MySQL precum create. Imagina{i-vdcam cum ar interpretaserverul comanda noastrd dace am scne numele autorului in forma Shakespeare. b a z a d e d a t e c u c a r e u r m e a z as a tftlu TEXT/ intenctiondm in continuare: descriere TEXT) t USE fibr. deci aqavor fi qi tipurile de cdmpuri aferentelor: Serverulne afigeazi. oRGANTZARE . cREARESTTE .nu rrei. deci. Siverificdm.introdu in cimpul I valoareal.EDTTORTAL . de dragulexerciliului. ncarti (autor. U E S( \ W i 1 l i a m 'Hamlet'). este tipul de date Interogdrile SQL se pot scrie pe mai conlinut de cdmp.P O l v \ L a b e _ a I c a ! . . titlu. a SHOW COLUMNS care afi5eazd informalii desprecoloaneleunui tabel. Williqm. Ar mai tebui sd qtiti c[ puteli folosi Si facemincdun tabel.ie t de tip text. NT ci vor fi numere integi gi comandaSHOW TABLES. Oo*'*'rr*r. in romdnegteaceastdcomandd s-ar traduce . Default Value. . consultatioglinda . 'rabe] Am pus ghilimele in jurul fiecarei valori ce urmeazi a fi introduse pentru a stabili cd acela este un text unitar.o*r** E al CREATE TABLE tabel_test2(camp I TE^XT.camp2 INT. Pentrua Sterge rabel.UES \Wilfiam Shakes'Romeo si Juliera. CHIPSPECIAI SITE DINAMIC . este specificatd CREATE DROP valoareaimplicitd $i ultima coloanearat6 Si ce alte propdetdti mai are cimpul. TEXT inseamnd multe randuri cu conditia ca ultima ci linie sd se incheie cu punct Si virguli.in a treia dace esteNULL sau nu.tabelelorsaucdmpurilor. ( VAI. in cAmpul2 valoarea2 qi in cAmpul3 valoarea3". Comanda pe care o vom folosi esteINSERT !i sintaxaeste: INSERT TNTO tabel valoare3 ) (canpl. rrebuisi Va CREATE TABLE carti ( mai spunem servemlui cA aceastaeste autor TEXT. un index sau o coloand dintr-un tabel folosimcomanda DROP astfel' DROPTABLE tabel_test. Temi: executati comenzile SHOW TABLES 9i SHOW COLLMNS penrru De5iMySQLare. puteli folosi ca nume de nu tabel_testcu un cdmp numit camp_text tabel sau de cemp cuvintele rezervate al cdrui tip esteTEXT. putem sdomitemuna din coloaneca in exemplul urmdtor unde nu addugdmnimic in cdmpul descriere: INSERT INTO carli V A I .QueryOK" deci ba.Tipuri de date". INTRODUCERF . Atunci. (auiror.. in a cincea.acest lucru. TEXT) inseamni. .cu trei coloane: numede tabele ca-re conlin spaliidar in practicdtrebuiesi incadralinumeleintre backticks " (semnul back-tick il gdsili pe tastaaflatAimediat sub Escape): . DROPDATABASE librarie. .tabelul nostru a fost creat.iar in format tabelarar adta in felul urmdtor: canpuLl valoareal cenpul2 valoarea2 carnl)ul3 valoarea3 Sa hecem Ia treabii 5i sa e\ersAm comandaINSERT: INSERT INTo descriere) peare'. ./ade datea fosl creara. Pentru a afla ce (nume de func1ii. TNSTALARE @" pHp. patra.o bazd de un date. Se facem. insi eanu ne-ar ardtamai mult decat Stim deja: cd noua bazdde datenu are inci nici un tabel.. \cea povesLe de ordqos-e "L1oosd a tuturor tinpurilor' ). un string de intlodus in cdmpul respectiv. William. sArecapituldmdatelede careavem de ce4i..prima coloanS.drop saucolumn). un titlu $i o scurti descriere. Hamlet) qi serverul MySQL ne-ar retuma urmdtoarea eroare: "Column count doesn't match value count at row 1" deoarecese aiteapta ca pentru doua coloane si aibi de inrodus rot doud r alori separate virgula.upon penhrdiacrir inouabazAdedategitabelulproaspdt creat. nizdm logic.. titlu) VALUES(Shakespeare. Fiecare carte are un autor. titlu) Campurile9i tipul de date continut de acesteadin tabelul tabel testi. TINYINT ci in coloanarespectivd fi vor O alt6 utilizare a lui SHOW este introdusedoar numereinfe -128 $i 127. Si le analizlm. DacAdorim. Shakespeare. ce qi setulde caractere 8859-2.esteprefeSd ludm cuvant cu cuvAntpropozitia: rabil sd nu folosili diacritice in numele CREATE TABLE tabel resfi camp_rest bazelorde date. CPIATE TABI nune are spalii'. An spus ci vom face o bazd de date Sd revenim la magazinul nostru de specialpentrusite-ul magazinuluinostru cd4i.Vom nevoie in site $i se incerc6m sd le orgascrie in linia de comandd. S H O I I^ O I U M N S . ^a-u_ nume \.

ile de date care apar in coloanele MySQL ar putea perea o complicaf. Sa IuAm primul tabeldin llcut de noi gi si afi.-u. volumul 3. .Dacd o valoare micede -128eava fi convertitt ceamai micevaloare mai in admis5. t -ro-se na!ional'). ObservSm cA nu am mai specihcat coloanelein careurmeazA introducem sd date. sintaxa fiind astfel mult simplificald. ceamai rmportant6 comanddSQL qi ii vom vedea c d t e r ad i n u l j l i z a r i n e x e m p l e l u n n d e toare. DacAdorim si beneficiem sinde pentru INSERT dar nu taxa prescurtatd pentru cemp. Am aflat cum putem vedea ce labelesunt intr-o bazd de dare. El estecompusimplicil din 14 caractere pentru formatul 'YYYYI4MDDhhmmss'darputemsAspecificem crearea tabelci dodmsi continA pulinecaractere: la unui mai Timestamp Column type TI\TTESTAM14) P( T \.iar intr-un campTEXT nu este.. r.1ESTAI\.4I\/-DD' YYYYI\4MDDhhmmss Temd: Adiugali folosind INSERT incd 5 ci4i in tabel specificdnd titlul. Tipul decampTIMESTAMPoferi posibilitatea a dataautomat de operaliiledetip INSERT qi UPDATE. cREARESTTE. b 127 32767 8388607 2147443647 922331203685477s807 Toatetipurile de mai susau un atribut oplional (nestandad).. UNSIGNED. Dace acela$i camp il setdm ca INT.ale .Puteli folosi acest atributilr definirea tipului de dateal unei coloane atuncicanddorii secontind doar valoripozitive. Iate $itipurilede datein bazelede dateMySQL.lli. Oarc nu am putea la o adicd sAad-iug5n datele in ce formi avem nevoie? Lucrurile nu stau chiar ata. .4MDDH It. ADMTNTsTMRE. YYY/IVIMDD YYMMDD \"Yl\ill\jl Stringuri (tiruri) Tipurile de string-uri in MySQL sunt BLOB.. ENUM 9i SET..SdincerCHIP SPECIAI SITEDINAMIC Campulde tip BLOB poatecontineo cantitate variabili de informalie.8 -9223372036854775AOA Pen.r Eninescu'.I P TIME YEAR 'YYYY-NIl\. o SELECT Acum avem baza de date.ieinutild la prima vedere. INTO carti VAI-L'ES .. 'Fire de Lort Poezii' . S (\t/.tionend doar valorile ce urmeazi a fi adiugate ca in exemplul urmitor: TNSTDT TN-O c. MySQL va aloca fiecdrei inregistdri in coloand 4 b)-tes. Valori numerice: Tip Bytes TINYINT 1 SIT4ALLINT 2 MEDIUI\.ca in exempleleurmdtoareunde introducen nu nici un text(\au un rerl gol. oo-7.4SS H YY|\ill\rDDHHli.i /Al jLS('l.1rha' Eminescu'.TINYINT LINSIGNED puteaaveavalori intre 0 ti 255. Pentru fiecare inregisharc in coloana zile concediu MySQL va aloca I blte de memorie. veli incercasa inftoducetio valoaremai mate de 127 ea va fi convefite in ceamai mare valoare admise fipul cdmpului. . indiferent de nurnirul de zile de concediu introduse si astfel pentru fiecare iffegishare (flecare angajal) se vor pierde 3 b). aulorul. " ) .i 'Poezii'.. TNSTALARE. ) t INSTBT T\TO cdL. go1..similar cu TEXT insddiferit printr-un singuraspect: cdutarea intr-un campBLOB estecasesensitive(seface diferenfdintre majusculegi minuscule). Tipul VARCHAR estesimilartipului TEXT cu deosebirea inh-o coloani de tip ci VARCHARputemspecifica numdrul maximde caractere ad$is. ) . TEXT.4 ESTAMP{12) TIVESTAMP(10) TTMESTAMP(8) TnIESTAMP(6) TTMESTAMP{4) TII\4ESTAI\4P(2) Displayformat YWYMtt4DDHHtVt\tSS YYI\.0RGANTzARE pHp. "). Tipu. \Poezir.Acesta este doar ur exemplu dar puteti avea la un moment dat o bMi de date cu I 0 milioane de inregistrdri Siatrmci pierderea a 3 bytes la fiecare inregistrare se haduce in cdteva zeci de MB de spaliu. camp tip TINYINT va putea Ur de conline numere intre-128ti 127in timp ce alt camp. in acest de 127 caz. TNTRODUCERE. INSERT INSEPT TN-O ca-LVAULS('f4 h. indiferent daci un angajat are 2 zile de concediu $i altul are 18.i Eminescu' . \Poezii.17 sec) Empty set inseamnd cA tabelul nu con{inedate. VARCHAR. Dati/timp: Column type DATETlI\.mc1ie de tipul de date specificat de utilizator. spaliulpe careil ocupiprecum5i valorile minime ii maxime pe care le pot avea.hai sd aflfun 5i ce conline un tabel..dacavrefi sa ii spuneli aqa)in campul descriere: INlO d--i VA-UES('Mrh".4-DD hh:mm:ss' ..In tabelulurmdtorputetivedea merimea maximdadmisd pentrucelemai folositedintre gi pe eleprecum spa(iul alocat discpentrufiecare: Tip TINYTEXT TINYBLOB sau T€XTor BIOB MEDIU[4TEX-' MEDIUIV1BLOB or LONGBLOB Miime maximd 2 A-1 2^16-1 (64K-1) 2 24-1 \16M"1) 2"32-1 (4G-1) Bytes 255 65535 16777215 4294967295 Ne va fi retumat urmdtorul mesaj: Empry set (0.i eventual scunadescriere. '. avem $i cateva date introduse. penau va SMALLINT valorile sunt d. Trps&TRrcKs @ Sintaxalui NSERT poatefi simplificati dacd ludm in calcul toate cdmpurile tabelului deoarece le putem omite.tes.am datele din el: SELECT * EROM tabel jrest.EDIT0RTAL.L .4I\. ). INSERT INTO carti VAI-UES( \Alexandru Mitru' 'Legendele Otimpului/ r.1INT 3 INT 4 BIGINT 8 De la . men. e Numirul dinparanteze reprezintdsecundele carei-au luat serveruluica sdretumezeun rezultat. MySQL alocd spaliu pe disc in f. Eminescu'.ceorge 1 Cosbuc'. Daci in tabelul salariati avem o coloand pentru numdrul de zile de concediu legal o vom seta ca fiind TINYINT deoareceaceastaeste valoarea mrmedci in care se incadreazd (un salaiat nu va avea mai mult de 127 de zile de concediu pe an!).ela -32768 pand \a 32'16'l in timp ce pentru SMALLINT I-INSIGNED pot fi intre0 9i 65535. -\SEPI Si nu amestecim mere cu pere.dar cum le vedem?Vom folosi SELECT. La 'Cele poma1 . avemo valoare putemsa un nu punem nimic intre ghilimelele care delimiteazdvaloarearespectira.128 -32768 -8388608 -21474436/. 'ceniu pustiu'.4E DATE TII\.YYYY-IT. volunul 2' . ele DacA intr-uncampTINYINT carearevaloriintre-128Si 127veli incerca introducefi se -128. CHAR.A . La fel.

Poezii".poezii" in titlu putem Poezii Mihai Eminescu faceacestlucru inlocuind Poezrr. Putemextindecomanda SELECTpentru a adauga nou crileriude.rnte{i Putem afi$acd4ile pentm pentm care deja cdmpul descriereeste gol astfel: obignuili este definit in SQL ca insemnand tot/toate$i l-am folosit deja atuncr SELECT * FROM carti WHERE cend am utilizat SELECT * FROM carti pentru a afiga toate inregistririle din litfu hrl I1i rm chrr..lHERE MySQL trateazi toate valorile dintr-un c d m pd e I i p T f X T c a f i i n dc a s e . tNSTALARE.astfel: SEIECT titlu FROM cartl Emjnescu' . TtPS&TRICKS cdm cu celAlalttabel.i n o r i c e c s te ordine (nu neapdrat ordineain carese in afl6 in tabel). volunul 3 ne va afi$adoar conlinutulcempuluititlu: titlu Harnlet Harnlet Poezii Poezii. |NTR0DUCERE. Avem suficiente date pentru a afla cateva utiliziri noi 9i foarte interesante ale comenzii SELECT.. Similar. .ED|TORIAL... autor FROM carti tirlu I Mihai I descriere Cele mai national frumoase EminescLl Poezii Folosind conditia titlu:'Poezii' nu vor fi afi.cain interogareaurmetoare unde afi9dm coloaneletitlu $i autor: SELECT tillu.p e c i f i c a de n o i . vom trimite cdtrebazade dateo interogarecu d o u d c r i t e r i i : . Semnul cu Geniu pustiu Mihai Eminescu functie de wildcard intr-o interogare MySQL este% (semnul * cu care probabil sr. LIKE Acum putem vedea foafte clar structura gi con(inutul tabelului.poezii": Putem selecta sd ne fie afi$ate mal m u l t e o l o a n e . volumul 2 Mihai Eminescu egalitatea cu opemtorul Poezii. indiferent de autor....poezii".Poezii Fire de tort Geniu pustlu SELECT * EROM cartj WHERE AND titlu autor:'Mihai Eminescu' LIKE '%poeziig'. Eminescu Hanlet. Eminescu M. un Daci dorim sdalegemtoate cd4ile de poezii de Mihai Eminescufird sd ne fie afi$at$iromanulscrisdeacesta cafiea sau de poezii a lui George Cogbuc. iar comandas-ar traducein limba romana.qnF:rc t^lilll:m H a mL e t . Putem adiuga condilii de selectie$i putem astfel alege sd ne fie afi$atedoar titlurile c54ilor de Mihai Eminescu. volumuf 2 Poezii. nhere tabel)..Poezil de Ceorge Coqbuc.(andru Mitru M. Poezlr.ate volunele 2 qi 3 din colectia de poezii de Mihai Eminescugi nici cartea intitulatd .tottoate". W H E R Et : t l u titlu FROM carti 'poezit?'.i n s e n s i tive astfelincdt nu va trebui silinefi cont de literele mari saumici aruncicand r 6 referiliintr-ointerogare valoarea la unui cAmp. M.electie. IatA cum functioneazdLIKE $i wildcardul %: SELECT auto(.m it o a t e iffegistdrile unde autonrl este Mihai Eminescu9i titl]ul cd4ii conline cuvantul poezii". Poez ii.. titLu autor:'Mihar tltlu Mihai ltihai Poezri.. CHIPSPECIAL SllE DINIl'illC .in careqtim sigur cd am introdus date $i sd vedem cum anti acestea: SELECT * FROM calti. i t e r i s c uill p u t e mi n l o c u i A cu numeleunui cdmppentruavedeadoar continutul acelui cAmp. Comanda: SE]. Eminescu Ale.Fire de tort Poezii" de Coqbuc.arat5-mi din tot t a b e l utle s t " .Dacd titlu vrem si obtinem toate rni I I i:m sh:La<na:rF Hamlet cdr{ile care au cuvantul qh:L. volu:nul 3 Mihar Emanescu Legendele oLrmpului Alexandru MiLru LIKE 9i folosind wildFire de tort Poezrr George Cosbuc card-uri. Sd afi9dm toate volumele de poezii din baza de date.. r e t u r n e a z d .poezii" oriunde in cadrul textului. CREARESTTE. SELECT * FROM carti LIKE '?poezii?'. ITHEREtitfu va afi$a toate inregistrdrilein carc titlul ce4ii conline cuvdntul .. ORGANTZARE @ pHp. Asteriscul * d i n S F L F C| * F R O I \ 4 a n i e s t e c h i r c e alentul lui . volunul Geniu pustlu hrinescu Enunescu Poezil Poezii.ECT * FROM carti LI(E 'apoezii't WHERE titlu P o ez i i ' volunul voLunuL 2 3 Poezii Fire de Lort Geniu pusriu ne va retumadoar carteaal cirui titlu este chiar .Astfel: SELECT titlu FROM carti. volumuf 3 Legendele olinpufui . ADII|NISTRARF. Dacd executim interogarea: SEInCT titlu=' * FROM carti i.-sna:ra yolumele Poezii de Mihai Eminescu gt Fire de tort . Vor afi$atetoateinregistririle in care titlul cnr{ii incepe cu cuvdntul . neludndule pe celelalte in considerare: ya afiSatoate inregistrdrilein care titlul ca4ii se termind cu cuvdntul ..

rnt (*) FROM carti. DELETE Putem afla cateinregistdri sunt pentru un criteriu de selectiecu ajutorul lui counto. Dacd avem 10000 de inregistrdri gr nu primele3. el frind inutil. S E L E C T * E R O Mc a T I i LIMIT 10. W H E R Et i t l u tii:lu NOT LIKE FROM cartl \P?'.li I I iam Ititlu I count (*) Hamfet | 8 t Mrtru Geor:qe Mihai Emrnescu iffegistrfuisuntin tabelal cAror saucarc camp'autor' esteMihai Eminescu: SELECT count(*) autor='Mihai FROM caTti t WHERE A$a cum putem afi5a doar inregistririle ce corespundconditiilor noastre. lautor l. EDTToRTAL. lor la felputemcondiliona 5tergerea in 5i func. tii:lu Analog.. Putem astfel afla aate inregistldri avem in total in tabel: SELECT co. Iate. pentru$tergerea DELETE sefolose$te inregistririlor dintr-un tabel (ne realabelelor a minrim ca pentruflergerea 5i DROP).grupa"rezultateleastfel incat sd nu vedem duplicatele qi sd vedem doar valorile unice.ECT autor autor ASC. TNSTAI-ARE.ii ^. Sinbazelorde datesefolosegte taxa lui DELETE este: D E L E T E F R O Mt a b l e WIERE conditii.. ca in exemplul urmAtor unde ordonarea seface dupd autor ascendent pentru Si. Putemg6si toatetitlurile cdrlilor pentru carecempul descriereestegol astfel: SELECT tatlu descriere l: FROM carti ". va $terge din tabel toate inregistrdrile pentrucarecempulautoreste Mihai Eminescu. lritlu william Hamlet Alexandru Mitr.u ceorge Cosbuc Mlhai Elrtinescu Mihai Eminescu Mihai Eminescu Mihai Eminescu shakespear:e william Dacddorim sdvedemiffegistririle de La3 la'7: sl. PHP.crescaordonarezultatele in tor saudescrescdtor. SEI-ECT * FROM cartl t'IHERE Eninescu' autor='Mihai Eminescu' t Teme de rezolvat: ..afi9aqi toatetitlurile cdrlilor de William Shakespeare. func1iede coloana aleasdpentru ordonare.ECT autor. folosind operatorul NOT LIKE putem alege toate c64ile al ciror titlu nu incep€ cu litera P: SELECT autor..TIPS&TRIC ADNIINISTRARE. ORDERBY autor titlu FRoM carti DESC.4 Mitru George iar pentru iffegistrdrile de la l0 la 15: Puternaveamai multe criterii de ordonare...folosim dorimsdredemdecdt LIMIT in felul umitor: sF -!ct ' FDoY r ar -IVT0.@. TNTRODUCERE " Itrtl-u Mihai Mihai Mihai Eminescu Eminescu Eminescu Poezii n^-f 'r I rri .afiga{i numele autorilor care nu se termind 0u litera U.ORGANIZARE.el (logic)o co)oand sau nu vapuleasa$teargd mai multe apa4inandunei inregistrdri. opus lui :): SEI. doudlucruri: asteriscula disObservSm pdrut.5. FRoM carti ORDERBY Pentru a limita numdrul de rezultate retumate.: I Alexandru Mitru Poezii / volumul 2 l 3 l Mihai Eminescu william Shakespeare Dacdvrem sdalegemtoateci4ile care nu sunt scrisede Mihai Eminescu folosim operatorulde inegalitate(semrul !:.. spre exemplu. in timp ce: DELETE FROM carti WHERE Cu ajutorul instructiunii GROUP BY putem . CREAREslTt.folosim instrucjiuneaLIMIT. Si vedem. W H E R Ea u t o r !: titlu 'Mlhai FROM carti Eminescu'.ca4ilesunl ordonate fiecare titlu descendent: sEl-EcT autor:. in al . I'IHERE Observdm ci primul numdr din LIde MIT esteinregistrarea la careseincegi numirul pe afigarea al doileanum[r este de inregistriri ce urmeazea fi retumate.. cum putem afiga CHIP SPECIAI SITEDINAMIC +-+ count (* ) I 4 l afigeazdtoate cirlile de Mihai Eminescu.ldsdndu-lepe celelalteneatinse. ORDER BY ASC.afisali toatetitlurile carecontin litera T oriunde in textul titlului. . . r. MySQL va gtergeun rdnd intreg la solicitareadumneavoastri. lolosindCROUP BY ce autori avem ti sd ii ordondm crescdtor: SELECT au|oT AUIOI EROM C Iti autoT GROUP BY autor:'Mihai Eminescu' . dupd autor. ASC.afi5atidoar titlurile cin-ilor ale cdror autori cu numelecaresetermini cu litera U. Putem folosi ORDER BY pentnt a unei selec!ii.rc_ ' Fpov Lar L ! ItMTl r.tiede critedile specificate. autorii din tabel in ordine crescdtoare: sEl. .

IKE '?poezii%..intr-o baza de dateid-ul serve$te aceste func1iila fel ca in viata de zi cu zi. In Urmaloarca nterogale \om modifica cdmpuldescdere tuturor ilregale istrdrilor al cdror titlu contine cuventul .luliete' . ALTER TABLE carti pr:et ADD IINSIGNED Ca sd addugdmo coloand altundeva I€DIUMINT AFTER descr:iere. CH]PSPECIAL SITEDINAMIC . WHERE -hck6spFo-o. e x e m p l u . UNSIGNED NOT NULL AUTO_INCREMENT EIRST. DELETE FROM carti WHERE AND tittu autor='Mrhai Eninescu/ I.. Id-ul esteun numdr unic de identificare pentru un element distinct (un rdnd) al unul tabel. Cele mai noi 10 titluri din librdrie le-am afla astfel foarte uqor folosind urmitoarea interogarc: SELECT Iitlu |ROM carti ORDERBY 0. TNSTALARE ..dat" in . Putem SET INSERT ID:# este folosit ca pentru fiecare carte deja adiugatd sd fie pus un id unic. ADD INDEX (id_carte). in plus ca sd adauge titluri noiin lista de casete disponibilenu vatrebui sdrescrie toatA lista. $i titlul cd4ii contine cuvantuIpoezl/". o sa redenumim din .f o l o s i m A L l t R T A B I I i n pot Condiliile fi extinse felcain sintaxa felul urmltor: la )ELts( t. Emines- Ne aducem aminte cd existd tipul DATE Eicd o datdcum e l2-12-2003 near putea li mai utild dacd s-ar afla intr-o coloand de tip DATE decat intr-una de tip TEXT aqacd vom modifica tipul de date al noii coloane: ALTER TABI. rnterogarea arita in felul urmitor: ar SEI. ORGANTZARE @ pHp .decAtlasffirqit.sinta-\a pentr:u$tergereseamanaca doud picdtud de apdcu sintaxa penhu selecfe. altfel ei i-ar lua citeva minute bune sd caute un film anumedin cdreva sule.]HERE UPDATE Atunci cand rrem sd modificdm conlinutul uneiinregisrrari eslenevoie nu gi si o ptergem sao ad5ugam \ arianta in noud.pentru a alege. TNDECAI Cel mai folosit tip de index esteid-ul.Lr-o 'W. nu corespunde pe El datei la care a fost editati carteaci datei in carc aceasta ajunspe rafturile virtuale ale a magazinului nostru. noud Sd addugdm noua coloand. Ce ne facem insi dace implementim rnterogarea aceastd in lormd in aplicalie intr-o bund zi primim spre vdnzare $i aceea$icarte dar cu un pre! diferit? Ar trebui sdrescrieminterogarea pentruane adaptasirua!ieipi atunci caurarea unei ca4i ar fi licutd cu interogarea: SELECT * FROM carti .IHERE Shakespeare. in care sd stocdm data adiugdrii cn4ii in baza de date. ALTERTABLE ALTERTABLEnepermite schrmsi bdmstructwa unuitabelexistent.. putem redenumi coloanesauchiar tabeluJ in sine qi putem schimbatipul de date conlinut de o coloand..Avand structura tabeluluicarti in foma actual5.poezii" qi c6mpul descriereestegol: UPDATE carti WHERE ittu t SET tike de poezii' . nu va cduta sa vadi unde ar intra din punctde vedere llabetic. ADtvINtsTRARE .intre descriere dati spre qi tru a observa modificarea.. putem folosi UPDATE care are urmatoareasintax': U P D A T Et a b e l valoare SET coloanal=. data.ci va adiuga doar titlurile noi la coadii.:'M. noua valoare 'o oqn' l. atunciconfuzia 5i ar fi qi mai mare.rd_.. De asemenea. Astfel. cREARE SITE. TNTRODUCERE .data": ALTER TABIE carti C H A N G Ed A t dAtA TEXT' a coloanei 1.Romeo si Julieta" de William Shakespeare. dupd cum considera fiecare. x Executali SELECT FROMcartipen. a mai alcscd titluri precum . si .. Shakespearel William clata DESC IIMIT Dacdamfolosir. incrementat automar..La fel ca in SELECTputem folosimaimulteconditii $i am putea $tergetoate inregistrdrile unde autorlulesteMihai Ewfuerc.m cAmpcaresAcontin. TIeS&TRICKS doilea rAnd.._i IIPDATE modificd conlinutul unuia sau mai multor campud in flrnclie de condiqiile \pecificale. U n e x e m p l u e i d d i n v i a r a e a l di m i d r vine in minte: ali lost weodati la un centru de inchidat casete video? Vd amintiti ordineaincareeraupuse casetele in rafturi? Un patron de centrude inchirieri numeroteazd ecare fi caseta pnmlnou ti gi o pune la coadi. cu aceastd exceptie.E carli C H A N G Ed a t a data DATE. Eminescu: U P D A T Ec a r t i cu' SET auto. Campul data ai tabelului carti ne \a fi util atunci cand vom afi$a vizitatorilor noutdlile din magazin primapagind.ihf tu a -o. cofoana2: . 10. !.. rnodificam.. AND pret:l00000. W H E R Ea u t o r = . DELETE FROM cafii esteechivalentul de $tcrgereal lui SELECT x FROM carti. eremplu. Sd addugdm o coloand. Am scri. Nu il vom pune in aplicaredar estebin€ de gtiut.in ordinea numerolSrii. Si modificim tabelul cafti astlelincat fiecare carte sd aibd un id unic: SET INSERT-ID=+.ED|TOR|AL .iilliam ANDlitfu='Rofi\eo I.I I ar AND trtlu=.pentlu toate cdrtile ce 1€veli adiuga de acum inainte va existaun id unic. Dumnea\ oa\ha pure!iastfel sd aflati rapid ce e nou doar aruncAnd o privire peultimapaginA ofertei. ALTSR TABLE cariri ADD dat TEXT. toate cd4ile ldri descriereal cdfor titlu continea cuventul poezii at) acum descrierea Carte de poezii.in SA de coloana autor toate inregistrdrile Mihai Eminescugi si le inlocuim cu M.%poeziit.Atuncl a cdnd cere{i o caseta intr-un centru de inchirieri specihca{i vanzdtoarei numdrul sub care se gdsegte titlul in listd. ALTER TABLE carti ADD id carte INT desc rr ere:' Carte and descr:iere=.The Firm" ar putea fi puse gi sub litera F qi sub litera T. adduga sau $terge coloane 9i indecqi. gresirnumelecoloanei..la sfArgitul tabelului. un numdr unic de identificare pentru fiecarecate cAutarea fi mult simplifiar catd: SELECT * EROM carti rci carle=15. adica va $tergetoate iuegistrdrile din tabel. in ordineanumerotdrii. M i h a i Eminescu.ECT * FROM carti autor=' I..

tr C H A N G E1 d a u t o r rd-AUTOT SMAILINT NOT NULL.Ar (rebuisa r e v e n i mu l t e r i o r l a t a b e l u la u t o r i .a r .uni" datele celedouitabele din astfel incat sA ne fie afiqate numele qi titlul pentru fiecare iffegishare: autor:r.A spaliu pe hard disc. id carti I.. r . TIps&TRtcK Sd ne folosim de index pentru a executa operalii in tabel: I N S E R TI N T O c a r t i texl sL_r. Rezultatul va fi: I rd carte 9 I tit.e' ) . regislririeste O folosimpentrua electua modificdri: UPDATE carti rnoolr rcac' SELECT ld SET titlu='un {r!HLinE c1 carte=y. SEIECT * FROM autori WHERE autor='Mlhai Eminescu' . U P D A T Ec a r t i id SET id autor=2 WHERE ln ap calla notslla \ a lleoul sa a\ em autor='ceorge Cosbuc' . Aceastd interogare ia coloana nume autor din tabelul autod $i coloana titlu din tabelulci4i Sile asociazidupdidul autorului carc este unic. .trebuie sd luali in posibilitateade a fi nevoit sd considerare vi extindeli intr-o zi peste numdrul de megabili oferit de confactul incheiat cu ISP-ul.autor) TemS: procedati in acelagi fel cu fiecate nume de autor din tabelul ci4i. Dacd una din coloanelepe care wem sd le afiEim are acelaginumein celedouitabele. Vomreduce numiLll de operatiinecesare cu ajutorul func{iei UPDATE. dinlipsdde spatiu..T \O' NOT NULL AUTO INCREMENT. autori.un nou tabel:aulori. caru: lid autor I titlu 3 Harnlet 1 Poezil 7)Poezii.Isaac Asimov".IsaacAsimov" vedemceacesta ocupdI 2 bytesin timp ce un numdr din 3 cifre (presupr. a u t o r ) . 1 Ce s-ar intdmpla dacd am avea toate cdrlile scrise de Isaac Asimov? Numdrul acestora depegeste qi coloanaautor 400 ar con{ine de tot atatea ori textul . a carte.in acestmod campulva con. ' l mOu autori. Putem.i si modificim manualfiecare parte. ADtvilNtsTMRE S|TE . Acum cd avem id-uri numericein loc de nume in coloana id autor.autor=carti. cdrlile ordonate dupd domenii. carti WHERE id_autor.. INDEX ( id autor) ). si modificAm labelul carli Si sA transformdm t i p u l c d m p u l u ii d _ a u t o r i n T E X T i n d SMALLINT: ALTER TABLE cai.id_aulor.s d ciutim id-ul corespondent fiecdrui autor camp in .IHERE id autor. deci. Leqendele olin!urui lautor Itit]u ldescriere lpret I text text text mediumint (8) unsigned id autor 1 nune autor Mihai Emlnescu UPDATEcarti id_a-Lo! SET id_autor=l WHERE 'Minai r-n_ escu'.Lu un text nodificat I U N I o U Ei i d .De ce sAplitili mai mult cand puteli sd normalizaJi? Normalizarea esteo practicd bund5i vd recomandsi o luati in calcul ori de cdte od faceli o bazAde date. lField Nu ii vom modifica deocamdatd tipul de datepe care il contine. CREART .tine numdr din cdtevacifie in loc de un CHIP SPECIAL SITEDINAMIC ]NSERT INTO autori values ( " . (titlu) values ( 'un oarecai. PRI|4ARY KEY(id..or "-t' TEXT. AL dP id AB.numecoloani astfel inc6t sd nu existe ambiguitili: SELECT au|orl. INSERT INTO autori values ( 1' . SELECT * EROM autori. autor=carti. Dacd scriem intr-un document text numele . fiind astfel deosebit de util6. TNTRODUCERE . id autor nume autor Mihai Eminescu id. Nu vom .in momentul de laje el este structuat in felul um6tor. Chiar dacd spafiul nu poate pAreao problemA. SA studiem penh! un moment tabelul carti al bazei noastrede date. CREATE TABLE autoli (id-AUtOT SMALLINT UNSIGNED DEFAU]. Cele doud tabele aratdacum a$a: autori: I id autor nune autor Mihai Eminescu George Cosbuc William Shakespeare I Alexandru Mitru I WHERE ld_carte:g.. L L J r P O | \.... volumul 3 4 lLegendele olinpului 2LFire de tort .o putem apela ca nume tabel. 0RGANIZARE @ " pHp .rndnd idcd ul autorului fi compus J cifre)ocupi ar din doar 3..Poezli L lGeniu pustiu 3lRoneo si Julieta Normalizarea Normalizarea inseamnd structurarea tabelelor bazei de date in a$a fel incat dalele acestea ocupecdt mai pulin din . Ce putemfaceestesAcre6mun nou tabel pentlu autori cu doud campuri: id_aulor Si nume_autorqi sd inlocuim campul text autor din tabelul ci4i cu un cdmp numit tot id_autor in caxe penhu toatecd4ile unui autorsdpunemid-ul din tabelulde autori. titfu F R O Mc a r t i text un text mult mai lung.. Addugamintaiautorulinnoultabel. Si facem. t autor C"ANGE -L. I Valoareaid_cartea acesteiultime inq. 1 2 3 4 gi sdredenumimcdmpulautordin tabelul carti in id_autor. \Mihal Eminescu') . autori.ED|TOR|AL . nume autor TEXT. volumul 2 l lPoezii.'d ar'-. Astfel inlocuind elementele repetitive dintr-un tabel cu un id facenr o economieserioasi de spa{iu. 'ceorge Cosbuc') . TNSTALARE .aflem id-ul unic repartizatde citre MySQL Si apoi inlocuim in tabelul carti numele autorului cu acestid.

.. 30) . cREARESITE.comenrarii. TNTRODUCERI.. fd_carte INT UNSIGNEDDXFAULT \0" nune-ulilizator adresa_emai] comertariu PRIMARY KEY (id_conentariu). l. 1 ) . AUTO INCREMENT. ( INSERTINTO vanzari VALUES 1. Ne reamintim cd la fiecare carte vizitatorii noSfti au posibilitatea sd-9i poat6 impdrtd$iimpresiile. Executatiurmdtoarele doud inrerogiri: INSERT INTO tranzactii (nunre_cumparator.unii Ion'.Pentruaceasta vom crea un nou tabel. cdnd vom lucra cu baza de date prin intermediul PHP.Cu toare aceslea..tranzactii Ei vanzari. autori gi domenii. adr:esa_cumparator) 'str. . CAmpulnr-buc ne \ a serviatunci cdndun utilizator cumpdrd md multe bucdti din aceeagi carteintr-o tanzacfie $i de asemenea pentru a putea folosi pentrua afla toate comentariile face statisticilepentru cele mai vAndute aferente cdrfi. . TEXT NOT NUI_|/ NOT NULL auto_incrernent.L default id_carte int ( unsigned NOT Cdmpul id_carte din acesttabel ne va unsigned NOT NULI Cet de mare poate fi un tabel? MySQL stocheazd fizic datele unui tabel intr-un fitier pe hard disc $i cu cat tabelul este mai mare.indiferent de numerul cA4ilor centte. loezii.). volunui 3 lLegendele Olinpului . 3 . \0. Am in\elar in acesrcapilol cum sa lacemo bazdde MySQL dareSi cum sa lucrim cu eapenhua oblinedatele caxe de avem nevoie.carte din tabelul carti: id_carte=1. I SEI.inainte de a tlece la capitolul urmator insafebuie sd vi qpuncApe CD veli gdsi cdEiva clienEi vizuali pentru serverul MySQL cu care vd ve(i putea constru strucRlra i bazeide daremult mai ugor. conform id-urile tabelul cu din domenii.@ pHp. ADIv]INISTRARE.0. NUI. In conlrnuare vom mvalatazeleprogramirii PHP urmdndca apoi sii folosim cuno$tinleleacumulatein acestedoud capitole penhu a obtine informalii din baza de date prin intermediul PHP 9i a le afiqa utilizatorilor intr-o pagind de web. ORGANIZARE. in contlnuare va trebui sd mai adlugim unul... sistemele opede rare pot avea propriile limitid ale mdrimil figierelor.4.22 a MySQL are o limite de 4GB pentru mdrimea unuiubel.rume cumparator ad:esa_cumparator Deocamdati avem in baza de date tabelelecarti.chinuit" cu sintaxa linia de in comandddeoarece mai tarziu.Introduce{i cdtevainregistdri in tabel folosind id_tranzactie din tabelul tranzacSELECT * FROM comentarii WHERE tii qi mai multe id. tinyrni NOT NULL defautt 3 I 1 I 4 2 1 amesteca romanelede rdzboi cu manugcolare alele gicupoeziile!Ne vatrebui in consecin{eo nouecoloand tabel. cdrui ale cdmpurinu Ie roi mai descrie deoarece numele9i tipul lor sunt de ajunsde clare: CREATE TABLE comentarii ( UNIQUE KEY id_tranzactie (id tranzactie) ) . Temd: modificali tabelul cafii penhu a adduga coloani id_domeniu 5i crealiLrn o nou tabel dornenii cu dou6 campuri: id _domeniu nume_domeniu. Si presupunem Pop Ion cumparadoua ci cafli in I maniesirevinepenrruacunpara incd alte trei ce4i in 2 mafiie. TEXT.tranzaclre NOT NUL]-. ln versiunile superioare aceasti limiti este exti$6 pand la 8 milioaneTB pentru ripul de label MyTSAM. ld_conentarru INT UNSTGNED DEFAULT \OI NOT NUI.anzactii { volumul 2 lPoezii. data.. cu atat mdrimea acestui fifier cre$te. Pe platforma Windows va Eebui sa folosili sistemulde fiqiere NTFS dacri dorili si aveli tabele mai mari de 4GB. Brasov'). vofumul 3 Legendele Ollnpului . CHiPSPECIAL SITE DINAMIC . |NSTA|-ARE.tranzactie int \0. 1 carte cu id_carte3 qi 30 de ca4i cu id carte 4. TEXT.V-am. in data de 3 martie cand vin banii pentru prrma comandinoi vom $li ca tebuie si lrimitem nigte c54i lui Pop Ion dar nu Stim exact care! Iatd de ce. 2 / 1 ) . Am setat campul data-hanzactie ca TIMESTAMP(I0) pentru cd astfel el va puteafi setatautomatde MySQL la fiecare noudinregisnare giva confne datainserdrii inregistrdrii in format YYYYMMDD.pentru in domeniulcd4ii: Legendele Olimpului vor apa4inedomeniului. comentariu) ). Temi: afiga1i titlurile cd4ilor din baza de date gi domeniile de care acestea apa4in (ca in exemplul de mai sus.. cu tabelul autori): Inlme domeniu I ti tl! C6mpul id tranzactie corespunde celui din tabelultranzactii iaxcampul id_carte celui din tabelulcarti.vafinecesarsdqtimcumseintroduc sauseextag datefolosindcomenziSQL. TIeS&TRTCKS lrd-autor I nume_autor William Shakespeare Mihai Eminescu Mihai Eminescu Mihai Eminescu Alexandru Mitru George Cosbuc Mihai Eninescu titlu llamlet Poezri. VALUES ( \pop 12. vandut: 1 carte cu id carte2.Poezii Fire de tort Geniu pustiu default nr_buc . ( ln lranzactta cu ld lranzac!te I r-au Pentru urmidrea vdnzdrilor vom folosi doui tabele. volumul 2 Poezir. Adaugali 5i numele de domenii pentru cfu1iledin baza de date gi id-urile acestorain tabelul cd4i. Versiunea 3. UNIoUE (id INDEX (id comentariu). I N S E R TI N T O v a n z a r i V A T U E S 1 .EDIOR|AL. pentru frecare comandS. numdr pe care il tinem in tabelulhanzactii aldturi de celelalte informalii care ne intereseazd: CREATE TABLE t.Poveqti".I. va trebui sd folosim un numdr unic de identificare. cdrlile de poezii domeniului Poezii Ei agamai depane. Mdrimea impliciti a tabelelor MySQL estede aproximaliv 4CB. Tabelul vdnzdri va con{ine informa{iile desprecdrtile vdndute fi ecare in tranzaclie: CREATE TABLI vanzarj rd. TEXT.ECT * FROM tranzactii.d tranzacf:re INT unsigned ( TIMESTAMP 10) TEXT NOT NULL.cuajutorul unei interogdrii cdr{i.Poezii de tor! lFire f. Pulelj verifica merimea maxime peltru un tabel cu ajurorulcomenzilorSHOW IABLE STATUS saumyisamchk-dv table_name. ] N S E R T I N T O v a n z a r i V A L U E S( 1 .

deoarece schimbatunul din elemenam inlelegem acum de ce sunt tele ecuaJiei.tia orice novice in tainele programirii PHP. Toatecelehei numeredin conversafa de mai sus le putem consideravariabile. cu Pe ldngd manipularea con. un confonabil. Valoareavariabilei $total seschimbe. are doud elementede baza: datele 9i Fiind open-source..Pe parcursulurmdtorilortrei anj limbajul a evoluat dar adeviratul succes a inceput sd il cunoascdde cdnd Zeev SuraskiEi Andi Gutmansau rescdsmotorul PHP de la cap la coadd. " " CnrnnrSrE AD|\IIN|STRARE .poatef1 rulat pe mai multe platfome gi se poate conectala mai multe tipuri de bazede date.. Al doilea numer este2. intre 2000 qi 2002 numdrul lor a crescut cu peste 13130% in timp ce numdrul site-urilor bazatepe tehnologia ASP doarcu 278%. Din loc in loc codul HTML esteintercalatcu cod PHP care extragedin baza de date cele mai noi gtiri. tabelele. Salvali fi5ierele extensia cu php. Puteli folosi orice editor de text. o combinafie de litere din prenuProgramarea oricefel. in document root (c:\Program Files\ApacheGroup\Apache\htdocs\) 9i le veli accesain browser la adresah!!p!: / locaIhost/numefisi er.@.n'@r.. s-au extras informa{iile pentruafilare. acronimul pentru PersonalHome Page.Notepad este bun pentru inceput dar pute{i alegesi folosili unul din editoarelePHP de pe CD. lonel a schimbatvaloareacelui de-al doilea numdr. dupd care le adundsi obline rezultatul: 5.. . = 2.TNSTALARE MySQL ED|TORTAL .ro de exemplu. Putem considera numerele respectiveca fiindvariabile gi atunci codul PHP pentru prima adunarear fi: $prifrul numar = 3.tinutului paginilordeweb.PHPpoatetrimiteheadereHTTP pentruautentificare. cunoscAndPHP va fi floare la ureche si trece{i apoi la VBScript. Datoriti similariti{ii intre limbajele de programare de uz comun. asiguraJi-vd serverulweb estepomit $i ci punefi-v6centurilede siguan!6.Sdne imaginamca Ionel qi Gigel auurmitoareaconversatie: Ionel: Pogiadunadoui numere? Gigel: Da.motor sare poartd din versiunea 4 a PHP numele Start! Zend. open-source. Variabile O variabildesleo zona de memorie c5ruia i se dd un nume pentru a putea fi recunoscuta ulterior $i penfu a ne putea referi mai tdrziu la ea. Vd recomand sdrulaJi chiar voi exempleleprezentate in continuaredeoarece veti intelege a$a cum functioneaza PHP la serfoarte u$or ver gi care este rezultatul in browser.. Fiti gata. Acesta esteunul din scopurile articolului de fa{i: de a ini. deacologi aufost ordonate explozive a numdrului site-urilor bazate pe PHP. El a denumitsetulde scdptud create PHP. Nu i-am uitat pe programatorii experimentafi in alte limbaje care yor afla in acest capitol particulariti{ile PHP. setacookie-ud sau redirecfiona utilizatodi. Putem aslfel crea pagini HTML statice 9i din loc in loc. primuluinumer. oRGANTZARE . Care esteprimul numdr? Ionel: Primul numir este3. + = $prinul $al dotlea nunar runar. Care esterezultatul adundrii? Gigel: Este 9. Limbajul PHP s-a . Java sau chiar C. apoi line minte valoarea celui de-al doileanumdr. SA ludm pnma paginda site-ului www. Disculia ar putea continua in felul utmdtor: Ionel: Cel de-al doilea mrmer este acum 6. anima{ii Shockwave Flash. acolo unde este nevoie.pho.PDF-uri sausepoateconectala un sunt doaxcateserverde mail iar acestea vadin funcfiile pe carele poateindeplini. + e"re limbajul ideal pentrucon!)He I :truirea de pagini \ eb dinamice. schimbd deja valoarea celui de-al doilea Si obline un nou rezultat: SaI doilea $total numar 6..nu doarPHP. Penhu a lucra cu datele de suport activ din partea comunitdlii hebuie siinlelegem ce suntvariabileleqi online. Cigelgine mintevaloarea 2.. La a douaoperagie adunare de Gigel fineminte valoareaprimului numdr. Marepate din structurasaestecompusd din cod HTML static (meniurile. PHP beneficiazd instructiunile. sd introducem dmamism cu ajutorul PHP. de mele creatorilor sdi: Zeev 9i Andi. T|PS&TRT PHP Programare pentru tofi Ca limbaj de programare..3. crea>i manipula imagini. Agezafi-vd deschideli editorde text. JavaServerPages cu 1594%6i ColdFusion 429To. in momentul in care (analipagina. cu ajutorul bibliotecilor extemede funcliipoateparsafi5iereXML. tipurile iar pentrua lucra cu instruc{runr de tebuie sd aflAmce sunt structurile controlqi funcfiile. Mai mult. rezultatul fiind de aceasta datA 9.acest este paISat apelafi cod gi executat)pe servergi zat linie cu linie esteafiqatdo pagini HTML fZri sd $ti!i crearea s-allcul o conexiune ei cdpentn-r labaza de date. in continuare voi indrumaprin elevd mentele de bazd ale PHP.nAscut"in 1994 din nevoia lui RasmusLerdorfde a afla cate persoaneit vrzsalizeazdCV-ul online. numite variabilele a$a:pentru cd valoarea lor poatefi schimbatdori direct. ori ca . al Cel mai importantaspect limbajului esteinsi posibilitateade a fi imbricat cu cod HTML. Este ugor de inveFt. PHP este foarte uqor de invi{at daci elementeleprogramirii sunt explicate pe in{elesul tuturor.. Pe locuri. aranjamentul in pagind). cum am schimbatin a doua opera{ievaloarea lui $al doilea numardin J in 6.chio. 5 in acestcaz. Gigel: Rezultatul adunirii este5. TNTRODUCERE . $al_doilea_numar $!o!al = Sprirul*nunar Sal doilea..acestafiind yi motir'tl cresterii CHIP SPECTAL SITEDINAMIC Valoarea variabilei $total este suma celor doud numere.

in pius.punctti virgula" esteceamai frecventd Fesealape careo fac programalorii incepdtori. */poate fi folosit pentru a delimita un comentariuce se extinde pe maimulte linii.lti.. Salvafi figierul in documentroot (directorul c:\Program files\Apache GroupLApache\htdocs\) accesaEi fu4' 9i lo.inn-un stnrrg puteli folosi celelalteghilimele normal. astfel: print "Semnul dolar \$.u 2 . alhov algtbta. prinr Numele variabilelor trebuie s[ contind (a-2.in eremplul prinr.putem face o comparatiecu algebra.Itatul afi$at in browser va fi simple(print . ctirec! = 1. Astfel. pentru a afita rezultatulfolosim print. 5o variabila ghilimelele il. Purem afi.2 .IalAcum va arata pagina afigatd: lil€ Edl Vieq Fivdit$ look H€tp B&t sbp Botre*r Afi$areadatelor Dacd do ti si afi$ali doar valoareaunci Cuajuroml luiprinr putem un!rring. abild cadrul din rningului parsata.. Ghilimelele trebuieprecedate semnul de doar dacasunl de acelasi cu celecare tip incadreaza string-ul..php accesat.Rezultatul p x i o t $ a L i a . variabilele gx $i $rezul. $ altaVariabila$i $-inca_o_variabila sunt $f.ci&e5i iiniure subliniere de (undencorcs)$ipot incepedoarcu Jitere sau liniule de subliniere.. doarIilere A-Z Sicaracterele ASCIIde la 127la 255t. x. Pentru mai multe detalii privind f o l o s i r e a l u i p r i n r v A r e c o m a n ds a consultati oglinda alituratd.Elpoatefi imbricatcu cu Pentru a afi$a caracterelespeciale foIosilede PHP rghilimclele uble .arariabilele dacdlolosim rezultatul estetrimis citre brcwser caHTML.5x+ 1. Pentru a intelege mai bine conceptul de variabild. I cu I esre DacA fi folositshilimele 2.'Un text oarecare".<br>/ tui r . saurezultatul functii. i a b i t a .i in lu. esre A.im iew Source nic da V in browserpentrufiqierul algebm. x . Un rext tat nu ar fi fost parsate output-ular fi fost $i oarccare". la fel ca r n r . 5i ghilimele simple. x 2 . D a c dx .l . = "Un text Salta-variabila p!int $alta_variabila. purem scrie umitorul cod PHP intr-un figier numit algebm.ingu lor ($irurilor): doud moduri: ori prin intreruDerea codului Dr14t 'Rezultarul inmultirii cu 1 este r..Testali acest lucru! plA deoarece.ezu1tat print este . Analog.p r i n t 9 o _ v a . alatural. linia de text care incepe cu // nu este afigatd.br&gt. forma-urmiiroare.Marcatorii comentariu de se pot folosi qiatmci cdnddorim cao bucati de cod si nu ruleze.(3r.vede"tagurile<?. back-slash\\'. CNTNNESTE. TIPS&TRICKS urmare a dependenleilor de alte variabile./. cum ziceam $i in introducere. i e = 1. Acesteasult comentaxiicarenu suntprocesatede cdtleseryercafiind cod executabilgi nci^nu sunttrimise mai depaftecdhe browser In aplicaliilemai mari decdtevalinii este ulil sacomenlam codulpenmra ne orienua mai bine saua explica acliunile intrepnnse. sring ce contjne un variabile ghilimele.. print "Ghilimelele duble\" dintr-unstnng rncadrat de ghilimeledubleuebuieprelot c e d a t c u s e m n u..@.. puteti se nu o incadrati inlre alisa o vanablla. de$i insh]]c.7 .. Alternativi print 'chilimelele simple tlebuie \. fel ca texhrl demarcat /* .tiunile de afigare se gx cu 1 estegrezuRezultatulinmultirii lui aflApe doualinii diferile.Daci ludm un numdr x qi ii ddm r a l o a r e al .. $o variabila prinr So-variabila.. I 8 :i x 2-q. ORGANIZARE.c a e li acestea nu au ne\oie se fie precedare dcoarecese aJia jnlr-un string iniadrat de ghilimele duble".l l . INSTAI-ARE.. rezu'. altfel valorile variabilelor ar fi fost schimbate dar nu ar fi fost afi$ate pe ecran.u n d o c u m e nH I M L ." a PutemlaceaceslILrcru in st.. Omiterea semnului .Puteti sdtestaliacestluuu comentand una din liniile carc contin insnr-rcliLurea pi ruldnddin noupagina.d 1 Srezullat prrnt este = Sx+1. &tt..rii lui Sr cu 1 "Rezulrarul srezultat<br>.Textulceurmeaunei zi a fi afiSat trebuie inclusintre ghilimele simple duble.'.... G h r l i r n e l esem p l e .'). / PHP.EDITORIAL.Aceasla inlemse Itat.backslash-ul semnul \. t valoarea unei variabile poate fi schimbatd dupd necesiteli(agacum am schimbat valoarea lui $x) sau ea va fi schimbati automatin funclie de celelalte variabiledecaredepinde(aqacunvaloarea lui $rezultats-aschimbatin funcfie de valoarealui $x). d ghilimelele simple '.. Atata vreme cdt parser-ulPHP nu. a$a: Rezulrdrul adern lui 1 eu I . INTRODUCERE.php: <h1>Variabile</h1> // sd setin valoarea tui x ca fii. CH]PSPECIAL SITE DINAMIC . \\Rezultatul adunirii lui Sx cu 2 $rezultat<br>". Folosind dubleoricevari.. inmultirii lui $x cu I esteSrezuital<br>": afiqeazd browserRezultad .v a r i a b i l a . am Observa(ici daci ruldm acestcod. sau rezultatul fiindugor difer= 1. /* 91 acum sa setaft valoarea 7 ql il von aduna tor Lui cu t Sx ca */ fiind cod HTML dupd cum putefi vedea in exemplul aliturat. sx. adun. Puteli chiar creapagrni HTML Iird pic de cod PHP in ele 9i si le dafi extensia php.php Si disecdmcodul pentrua invdla cateva lucruri: ' r o a r ei n s r r u c q i u n plH p s e t e l m i n a i e cu punct $i virguld..php.. MYSQL. variabile.a5acum seschimbd vajoarea variabilei $total in tunc{ie de valorile lui $primul numar qi $al_doilea-numar..ste 8 algebra.precedate inlr-Lrn smngincadrar ghilimele de s r m p l en l r m pc e " g h i l i m e l e ld u b l e 'n u . $o_variabila prtnt so valiabilat <br> = "Un rexi 9arta-variabila prinr $aIra_variablta.. go variabila.rupand" srrinsul iffersi Dace wem se ne fie afitate una sub alta va caldndul iariabile. x/ 9i la de nu apar i mdcar cacL.. $) trebuiesSleprecedelicu sennul\. putempune diacdticein cadrul unur string insd pentru ca browserul sd le afi5eze corecrva rrebuisarpecificdmin <head>setulde caractere folosit.. oii prih scrierea 1ui oarecare". el va trimite pagina HTML neschimbatd catre ser. fel. cu in trebui sd intercalim cod HTML intre cele folosind operatorul de concatenaae doudinstrucliuni. codul PHP incepeintotdeauna <? cu qisetermind ?>.sle 2 Rezdidlul adu&n lui 7 . Difercnfa inte cele doue notatii estecd // estefolosit pentru a comentao singud linie detextir timp ce/*. ".Srezultai.'l>.st. ADMINISTMR!..$ a r t a v a r i a b i l a .

string Un string este o succesiune caracde Lere(tirl.rul la 1024 9i aqa ne voh .! /* si Sfrlnel"qroaza"l r { print "5x este egaL cu $y".!=. Daci programarea PHP ar fi fost despre algebri gi numere. funcfia noastrAva retuma o valoare de adevfu: TRUE dacd este logat sau FALSE daca nu este Sl astlel vom qti dacd sd ii acordim saunu accesin sectiunea adminishare.Vi sprmeam fiecd carefilm esteindexat cu un numdr gi astfel CHIP SPECIAL SITEDINAMIC print 5filne [32] .. integer Variabilele de tip integersuntnumere intregi: 3... lolosind numamJrespemiv. Mai multe detaliidespre conversiatipurilor g6sili in manualul PHP de pe CD. esteoperatorul inegalide tateSi sefolose$te acelagi in scop. -o. Atunci cand sunl lolositein codul PHP stringurile trebuie incadrate intre ghilimele $i toate caracterele specialedin eleprecedate semnul\ (detalii cu 9iexplicaliigdsiliin oglindafuncliaprint). ADrvrNtsTMRE. nu $2vargi $a_qaptea sunt.a "va. daurm sfat:dali variabilelor vA nulne caxe sd defineasce pe cdt posibil destinaliavariabilei. "SF"=>"Mat! .a---^h' 9iilme = array ("Casablanca". rext terte filnul pri.. in secliunea Type casting. Opusulsdu. neaminrimde magasa zinul de casete video de carevd povesteam intr-un capitol anterior. pentru a testa egalitatea. Dacd dorili sd forfa{i evaluarea unei variabileca un anumit tip puteli folosi conversia tip. TNTRoDUcERE.Valoarea lui $x este I in timp ce valoarealui $y este7.DacSvi seva ceresdmodificaf aplicatia dupddoualuni de la crearea o sd ei preferali sd inghif{i tastahla nai degabd decdtsi vd chinuili sdafla1idin 500 de linii de cod ce reprezinti Sal sau$xGvHKr. cnrnnrsrr. mai ales dac6 aceasta va fi lolositd de mai multe ori in cadrul programului. IatA gi ceteva exemple de stringuri: Svariabila $va. Folosind opemtorul: de atdbulre ii putem acordalui $x valoarealui $y: 32=>"BLairwilch Project". ) if ($x r= gy) pentru prinr 5filne["actiune"] { print "Sx nu este eqal cu $y". rroject""/ .t /*lentru print $fi]mel1024l. definit prin semnul:.'qroaza"=>"B1aiftitch ?roject". " "-. de array Pute{i si considemtiun array ca fiind o coleclie de obiecte (matrice). "actiune"=>"Ranbo") /* Sa afitan "Blai'witch if (5x == Sy) plinr . 1024=>"Ranbo"). Tipuride variabile indexul numeric. ele nu sunt! Sd considedm umdtoarcle variabile: Variabilele fi de mai multetipuri. Este $x egal cu $y? Nu este. "Blairwitch Projeet'r. Trps&TR nume corectein timp ce $o-noua-variabila. a cere */ /rPentru prinr /* si t\Matrirr' scriem:*// Sfilnel2l. pentru Ranrbo */ plint Sfilnel3l. TRUE (adev[rat) sau FALSE (lals). om scriemai tdrr pentru ziu o lunctie secliunea admini:de tmre a site-ului cu ajutorul cdruia vom verifica dacd utilizatorul este logat ca adminishator.. Nu vi ldsaJi ingelali de asemdnareacu semnul = din InatematicA micar anrnci nici c6ndlacegi operaliicomplexe.Spreexemplu.iabila 9variabila = "ur = "10 = "10". 19=>"Matrix". -1 sunt valori integer.P. x". 0. adicd putem folosi stringuri in loc de integerspentrua ne referi Ia valorile unui array: Abia acum $x este7 $i esteegalcu $y care are qi el valoarea 7. sc. daca nu este Operatori Cel mai desintAlnit operatorestecel de atribuire. INsTALARE.Dacd scriem$rezultat : $x + $y nu inseamneci Srezultateste egalcu sumacelordoud. 783. a cere 9 filne "Maarix" scrien:*/' I19I .. neputemreferi la el ahmcicdndceremfilmul vdnzdtoarei. t \ E 1 . /* Nu pute( afisa direct valorile sd definim intdi variabila sau sd-i declardmtipul.EDTTORTAL. Operatorul de egalitateeste:= qi se l o l o s e s t ec e l m a i d e s i n p r o p o z i l i i condilionale.-lom. care. Pentru a inrelege conceptul.testafi urmdtoml cod: blanca". Rasbo*/ .@. pri. cdiam atribuit ci (acordat)valoareasumei celor doud.oRGANTzARE.\" 9filme ["sF" ]. $i : I va fi folosit ca integer sau string in functie de contextul in care este folosit. Arrayrile pot fi indexate qi asociativ. astfel:$i : (int) $i de sau$i:(bool) $i. por nu doarnumere cum amvdzutpenaacum. Am observat din exemplelede para acun cA daca scriem $x: 1 nu insearnndcd $x esteegal cu 1 ci ci i s-a acordatvaloarea L De$i la prima vedereegalitateaqi acordarea valonr pot pdreaa fi acelagilucru.t "Casablanca": Sfilmel0l. cum $ipatronul a$a unui magazin de casetevideo igi poate numerotacasetele dupl cum ii place. boolean Tipul boolean definegteo valoare de adevdr.Pentru a vd ldmuricumsrdtreaba egalitatea cu 5i atribuirea. t v = r . ) Pentru avansali: PHPnu este in nevoie ._en:. rurlsQL.pri. Q. Indexareaunui anay poate fi definitd de cdtreprogramator.Dupd ceva facetoatevenficdrile necesare.inainte dea trcce mai d€parte.n-agfi fost aici povestindu-vd cat de minunatd este! PHP are opttipuri de variabile dintre carevi levor descriepe cele mai importante4. -56. /* Acum caseta cu Rambo are Fi referi nun.

= "Qi ". . INTRODUCERE. CNTNNSSITE. parola !u pentru gx = 1.rilor Jogici.ceea ce nu e de dorir. pen. // pe ecranva fi afiqat. IArd sd hebuiascdsd rescriemcodul // pe ecranva fi afiEat. i operaiofl lolosi{i fbrmular care cere numele gi parola de Ace$l sunl pcntrua uni stringuri. Vom vedeacum. opemtorul && (AND) Rulali codul qi apoi modificati valorile lui $x ii $y cu $x = 13 9i $y: 13.= pentruatribuirea in sectiunea de administrare avem un $1 concalenArii.Am scns numdrul 5 5i un text oarecare" Si presupunem ar trebuica pentru cd toatenumerele la 0 la 99 ar trebuisi de .rie z u l t a t e ce m i v lu nim de cod.gnr. i f switch cu care vom putea executa cod doar dacasunt indeplinire numire a condifii. Operatorul de egalitate se folosegte pentru a compara egalitateaa doud valori. Un text oorecsre si nuinarul d l ii (Sx <= Sy) Operatorii logici vd vor veni la indemani in execu(ia scriptuluiatuncicand l a\ eti nevoie lucralicu valorideadevdr.. g o d rerumeaza raloarea aderir TRUE. Am scds un i. TIPS&]RICKS 9ie! oricare din valorile verificate e TRUE. a Am ydzut cum putem defini o vanabild $x qi cum putem obline ca rezultat o altd variabila $total: gx * l.a .. ORGANIZARE. r e x t ... innuilirii lui Sx cu "Rezulialul test2. Retumeazd FALSE doar dacdamdndoui suntFALSE. .. o a r e c a r e ' .Am scris un if(lFarola_e btrnd) . .Scriptul PHP ar putea vedfica acesteinformatii pentru a autowhile testl.es!I este permis tor celui cu care am pomit la inceputul capitolului gi sd vedem cum structurile Operatorul ! retumeazi TRUE daci de control ne pot u$uramunca.dlhost/tesl3 php I ''Sx este nai mare ca Sy.. . .ota folosim pentm testare cod asemanAun bun:.php...@. cu ajutorul lui while 9i for putem folosi aceeaqi bucatd de cod pentm mai multe variabile fbrd.php riza accesulin secfiunefolosind operaStructura de control while este fo// concatenarea stringurilor torii logici astfel: losilA penlru rulaacelaSi penrru a cod mai $ l e s t = ' A .iguri cd gi numele gi parola sunt valide.! Back Flvorites looh lletp Slop c i t Fekesh hlip://lo.ou ajutorul struoturilor de control sd man i p u l d m a r i a b i l e l e .. inftullirii rui gx cu " Rezultatul 5. e l s ei f ."".. valoarea iniliald de adevir e FALSE qi FALSE dacdvaloareaini[ial6esteTRUE.php /I atribuirea concatenlrii Stexi $tert Stexr = "Un text ". verificd dacdnumelesauparol a s u n tv a l i d e i d a c d r i c a r c i n e l ce s r e ..t . . buna) . AIfi operatori folosili pentru comparareavalorilor variabilelor sunt: > mal male >: mai mare sau egal < mal mlc <: mai mic sau egal test3. prin! $x este mai mic sau egat cu gr . . CHIP SPECIALSITE DINAMIC ...gir.= "oarecare . $x : 2 9i a$amai departe text oarecare" este buna. felul urmdtor: in accesin secllune. Eile Edit Vie' 9 x . . i-am acorda utilizatomlui accesmai departe.. "15 = 51*5. e l s e .Un text oarecare gi numdrul 6" Structuride control Structurile control suntinstrucIiunile de careaduc flexibiliratea programare in 5i u$ureaz munca programatorului...5 . tebuiascd serescriemcodul pensd tru fiecare valoare a variabilei. ADIYJNISTMRE. Irebuiesii fim . . as c r i s u n . dacaatatnumelecAtgi parola sunt valide putem acorda utilizatorului accesin sectiunea administrare. de Operatorul && rctumeazdTRIJE doar daci ambelevalori verifi catesuntTRUE. Si ' Loolo. in de acest exemplu de pseudocoddacd numele ar fi valid dar parolanu. operatorul! (NOT) multe valori ale unei variabile oarecare $x. // pe ecran va fi afiEat .. INSTALARE.. Vom i n r d t a5 i s r r u c t u r i lie. $rezultat print t"i.EDITORIAL. scris numaiut .. .ext odecare { operatorulll (OR) r.// concatenarea stringurilor cu variabile p. ac. El retumeazdFALSE dacd oricare din eleesteFALSE (saudacdamandoud sunt FALSE).' si 5 esle $rezulrat<b!>'. rutoarut .. Operatorul retumeaza TRUF daca I $fezultar prinr * 5x*5. sA Vom faceuncxerciqiude imaginaliepentru a explica funclia $i utilitateaoperatoOpemtodi pentru stringuri sunt. accesul este interzis pentru fiecare valoare a variabilei. p". .Sdpresupunem la intrarea cd tru concatenare . MYSQL... ..r:: J1 ie:i 't: ' .""tLtut<ltt". puteur. .

ln . pentru $x = $x + l. Qurtarea D e s i g u r . { r. 1. E ld' y. ORGANTZARE .EDTTORTAL .. acoladelepot fi omise. in unele cazuri. $x<23. nu mai esteindeplinitd a$aca PHP inceleazirularealoop-ului 5i continui cu restul de cod. in romane$te.nrnultirii lui 4 cu J esi8 20 Reritatulinmulti.l r-. $x = 9rezulrart rhile ($x < 100) l print $rezultat pr. exemplulurln mitor vom afiqa rezultatulinrnullirii lui $x cu 2. Apoi.La prima rularese calculeazi variabila Srezultatcareeste$x * 2:3 * 2:6 $i seafigeazdpe ecran.tinute toate instructiunileqi condiliile necesare ruldrii loop-ului.:a'.4 - O l4 e -!r ? Structura for in acliune! Iat5.rii lui 6 cu J este30 Rerultaiul irllnulti. spre exemplu. Sx < 99.tia larea loop-ului. apoi ii vom atribui lui $x valoarea rezultatului inmul{irii 9i vom repeta loop-ul cu noul $x pdnd cAnd $x estemai mic decat23: for /br este echivalentul lui while.-nl. Structura lbr este preferatd de prog r a m a r o r id e o a r c c ei n t r e c e l e d o u d parantezece o precedd sunt con.irulatAin cazulunei stmcturi de control. TNSTALARE .ez!ltar p.. a treia pafie o constituie actiunile ce umeazd a fi inhepdnse cu variabila in loop. Fld6 ta t$ x este3 si tezultntul ste6 e x este6 si rezultalul este12 24 x estel? EiretultatuleEte sf&sitl Rezultatl-rllr.ce am lEcut: am luat valoarea initiald a lui $x.="in Sx:$rezultat ii ddm lui $x valoarea lui $rezultat care este 6 Ei loop-ul este reluat de la capatcu noua valoare $x : 6. Cu $x : 24 condilia pentru rularea loop-ului. piint " RezuLtatul inmulti!it lur $x cu 5 esle Srezuitat<br>". t-t. prima parte. vom vedea. reprezinta condiliile cetebuie indeplinite pentru ca loop-ul se fie rulat.@ " Cnrnnr . Pentru $x: i 2 valoarea $rezultatvafi24. S\ . T|PS&TRT calculdmvariabila $rezultat $i sdafiqdm textul . ADNITN|STRARE SrE .. { cu 5 este tes lools lelp Eile Edit Yiew FEvo l print "sfarsit | ". in exemplul nostru variabilaesteincrementaticu 1 lafiecare rulare. Ia sfArgit atribuim lui $x aceastdvaloare. pas cu pas.n = $x* 5. P-z I . incadrarea acoladeservegte in pentru recunoaqterea bucilii de cod ce urmeazda f.Si vedem 9r cum: ac{iunecu $x inainte de a relua loop-ul.Ei programul o ia din nou de la capdt $x: 2. r4ySQL . Astfel. apoicu $x: 3 9i tot cu aqapdndcAnd$x ajungela 100. cum am putea scrie toate instrucliunilepentru manipularea lui $x in ultima sec{iune dintre parantezele for: lui . $x < 100. cel mai simplu tip de loop qi vom scrie o singuri bucata de cod care va prelua automattoatevalorile lui $x de la 0 la 99 9i pentrufiecareva inmulli cu 5 9i va afiga rezultatul automat.. r. Sdmai observim un lucru inaintede a trecemai departe:codul ce urmeazda fi executatesteincadratde acolade$i acoladade inchiderenu esteurmatAde punct qi virguli.t. .. la instructiunea print "sfhrqit!".+ g E l Befresh N http://localhosl/in€rementare.i 1n.riilui 2 cu J esie 10 Reriltatuli. in ($x : 0. Pentru$x:6 conditia$x < 32 este indepliniti. Sx++) print l automati a numerelorde la Si vedem.Dacdarfi sdscriemcodul de inmullire gi afiqare pentru fiecare valoarea lui $x de la 0 la 99 ne-ar apuca r d i m i n e a l a . intdi am tlefinit valoarea ini1ial6 a lui $x. valoare atribuiti din nou variabilei $x. Eile Edit View Fgvotes Iools tick Aldressg l F. iar in final $x esteincrementat (adunat) cu 1. " Srezultat<br>". $x < 100.r.php a rezultate: whiLe (S: < 23) for (Sx = 0. nu ooar lncremenrarea.i funclioneazi in mare mdsurd la fel.: Stop lLelp + . i P while. 3.x este 3 $i rezultatul este 6".eparandu-le vircu aceasl6sec!iuneguld.. cu cdteva mici diferenle. ' "sfarqii l ". A doua parte. $rezultatva fi 12 9i. Si rescriem cu ajutorul lui for codul din fiEierul penmr obtincacelcari incrementare.. qi am inceputloop-ul.| 6-u -a6s_6 slezulrar=$x*5. S"tt) { S. PuteJirula urmdtorul cod ca si obseryati cd loop-ul nuva fi rulat deoarece condiliaca $x si fie mai mic decdt99 nu esteindeplinitd.i'n i--lnriri 1.Rezultatulinmullirii lui $x cu 5 este$rezultat"..php accesali-1 browsdin $i er pentru a vedearezultatul. in sfirqit.$x#). Iatd. pentru flecare valoarea lui Sx mai micd strict decdt 100 (0.rr. for ($x = 1000.ph Salva!i acest cod intr-un figler incrementare. TNTRODUCERE .pdnl cdnd$x ajunge 99) se la calculeazl variabila $rezultat li se afi$eaza textul. p u t e m i n t r e p r i n d eo r i c e CHiP SPECIAI .CAnd$x ajungela 100 condiliadin while. Sxezrltar <br>". cipitdnd astfel o nouEvaloare... Apoi. cum funcfioneazd while. l print "sfar9it | ".2. SITEDINAMIC { 9x.$x:0 reprczinte iniliald de la carese pome$terusitua.. + B6ck i-. / * -s-S: *2. nu seva indeplini gi PHP va trece mai departe. 3.. $x < 100.rnultidi 0 cuJ esie 0 lui Rezultatulbrnulti. e n t r ua c e a s r ao m f o l o . Stop 9 Flefresh E ' * ! . M a i p u r e m a d d u g ai n s r r u c l i u n i n .1'. 5* < rOO. $ ' este o expresie p u l i nm a i s p e c i a l!a e s l ee c h i v a l c n t a cu i incrementareacu $x++esteastfelpres1. folosind operatoruldeatdbuire.riilui 8 cu J esie 40 p. Vd recomand se testa.tiacest cod personal.

mere" rezultatulafi$at pe ecranva fi . Eile Edit yievr Fgvoites lools ' € E Stop Flefresh 0 .Testati acestlucru ruldnd codul pentru ambele cazuri. in urmAtorul cod afi. Cum am {Ecutacest l u c r u ? I n d i c a n d u -liu i f o r d e u n d e s d inceapd afigareaelernentelorarray-ului if($n! print caraclere > 5) tr unde sd se opreasci din loop.. 5i < Snr_filme. \"Srert\" ul nu este definit. "Blair$ircn "Matrix". u i r a 'c o l a d e l1 i s c r i e ae codul asfel: if.]e 5 print "sfalsit | ".Textul are mai putin de 5 caractere" $i pentru stringul .Sdafi$dmlista noastrdde hlme: Daci dorim sd rulim o bucatdde cod doar cdnd este indepliniti o condilie anume.. C a s a b l a n c ar"e b u i a . else putem omite acoladele dac6instruc!iunile urmeaza ce a fi executatesunt pe o singuri linie: ii(snr are caractere mai nult priit > 5) prinr . count(Shlme)este4 in cazul de faq6..Pentru$text: "mere". Incercalt acetaft coo cu un sfflngmal mic.. v a l o a r e a v a r i a b il e i $1rI caractere = strlen($text) va fi 12 (spatiileconteazi).@ STE .EDITORIAL .e Pentrustringul. if {$n. Steri snr = "Ana caractere = strlen > 5) (Stex!). astlel: Te\tu1 . I. pllnt "Sa<b. La a doua rulare a loop-ului $i a u n l e x td a c a c o n d i t i e s r en d e p l i n i r$ i o i a a\. else t scriemprint $filme[0] 9i am fEcutacelaqi Ce facem arunci canddorim ..>". TIPS&TRICKS lor (5x - 0.. Functia counto estefolositd pentru a Srext = "mere".a5amai indepliniti?Folosimif. ] { pr:nt "Textul are Fi @i nai nult pulin de 5 calacaere de 12". caracteie > 5) Teme: I LAdiugati mai multe filme in affay qi prrnt Tertul are 6a: muLt de 5 rulati din nou scriptul.. dacaindexare nai mutt de 5 caracrere. ORGANIZARE ... if l print "Textul are nai putin . are mai Fulin de 5 5filme = array ("casebLanca". CHIP SPECIAL SITEDINAMiC ..! caractere -5) l else if (5nr_caracrere > 12) { piint'iTexrul are mai mllr de 12 caractere". in construcfiaif .. pome$te de la 0 Ei p e n t r ua a f i l a . "Rambo'. . $t filme = count (5fi]me)..) . $text = "Ana" sau $text = "mere" penlrua vedeaci daci stringulare mai putln de 5 caractere textul nu va fi afi$at..Elairwitch Proj sct ? .Texrul are mai va mult de 5 caractere". intdi este afi9at $x dupi care esteincrementat$i loop-ulo iade lacap6t pdni cdnd $x ajunge1a100qi condi{iade rulare nu mai esteindepliniti. are rd1 de 5 caracte:e". Am folosit in acest exemplu func1ia strlen care calculeazd numirul de caractere intr-un string... Observam nici nu maiavemnevoie cd de acolade.. rumdra elementele dintr-un array.utvaloarea ti a afi9atfilmul $filme[1] I alt text dacd aceeagiconditie nu este careeste.Casablonca I .Ana are mere' are mai mult de 5 camctere. !f (snr caracte.Am un text doar dacdnumdrul de caracteredintr-un string este mai mare decat5.4YSQL . Schimba!$nr-filme= count($filme) cu Snr_filme : count(Sfilme)-19i rula! din nou scriptul. else: 9i departepentru fiecareelementdin array. Ne-am "Textul adusaminlecAinrr-un array. INTRODUCERE . CNTNNT . elseqi repetdm elseif de cdteori avem nevole. serye$te pentru toate celelalte cazuri care nu indeplinesc condiliile specificate in if 9i else il Testafi exemplul de mai sus folosind diverse valori pentru $text.in cazul lui if.$texr\. .Mah:x 3 . Si++) for(g: = 0.Ana are mere--rezulrarul fi. 3. else Dar dacddorim si folosim mai multe condilii qi in functie de fiecare dinte acestea afig5m altceva?Folosim if . ADI4INISTRART . $iext snr = "prune".. sd elseif. else "Tertul Project". Observdmfolosireasemnului\ de precedarea caracterelor specialepentru afi!a a ghilimelele in rezultatul de pe ecran..Ele nu ne-ar servi la nimrc deoarece toateinstruc{iunile privind varrabila $x se atld in a treia parte din paranteze.A afitdm luclu. a r if. { print l "Si g f i t m eJ S il < b r > " . 2.te:tur { print "Textul \... Schimbati :0 cu $i : I $i rulati $i scnptul. in acestexempluvedemci elsecare este folosit chiar la smrgit.. va $nr_caractere fi 4. Pentru $text : "Ana a r e m e r e " . Sx < i00.. caractere = srilen < s) (stext)... if (Snr caractere { prlnt "Te:!!l are mar pulin de 5 ] else I prinr "Textul are exact 5 if (5. dacdparteadintre acoladeesteo srng u r al i n i ep u r e m .folosim il Iaticum. Vi spuneam susca in unele mai ca.Rambo Rulati scdptul Si observali cA au fost afi9atetoatefilmele. INSTALARE ..Blainr irchprojecr'.. elseif. Putem folosi for pentru afiqareaelem e n t e l ou n u ia r r a lc u u n i n d e x u m e r i c r n ordonat../uri putem sa omitem acoladele.. = strlen($text) 5nr_caractere .

Putem da unei variabile valoarearezultatului unei lunctii dacdacestaesteo variabil6: v-riabilr ' Frint Svariabila. Instrucliunea break. Este if preferabil in cazul in care codul dintre acolade este mai mare gi ne-am putea pierde in propozilii condigionale i q paranteze.@. Iatd un exemplu: p.func1ia f(x):x+1 executao operaliecu x gi dldea un rezultalin func1ie valoarea x. s v = 6 . else.imSa plu cum se folosegtewhile. 9b = 10. T|PS&TR switch switchestealtemativapentrublocudle condifionale . legali-vi de scaun pentru cd acoloam intAlnit termenulgi in continuare vd voi explica funclionareafuncliilor (hmm. * $y.. de lui Acelagi lucru il face 9i o func{ie PHP function adunare (Sx ) { $rezultat*$x+1. else if .sy-r0)' Functii switch ($litera) inpasarea uneivariabilecdtreo func{ie nu conteazdnumele variabilei ci doar raloareaace:teia. lunc!iapreludnd aceastd valoare.Iata doua exemple de folosire a stringurilor intr-o structurade control.Ara BarbuClaudia doar. 6.. putem lolosistringuri darra trebui le incadrim sd cu ghilimele (cum nu am fost nevoili sd lacem in cazui numerelor).. // iunct!ile trebuie definite inainte I n a c e s l e x e m p l uv e o e m c a q o a r valoareavariabilei estecea care conteaza. !ecatculare // va afira (Sx).la incheieracazurilorrulareacoduCHIP SPECIAL SITEDINAMIC VA mai amintili unde am mai intahit temenul de funclie? Dacd vd spun cI la algebri o si fugiJi mdncdndpdmentul? Ei bine.Ana esteun nume" ala cum ne-am fi a$teptat.rnt "Acesla este nme de baiat". 9y = 59). pe eclan 1? { ) print "Textul are 4 caractere".. TNTRODUCERF. pe ecran 2 <br>Puten Stexr = "Ana = srrlen (Stext) . lui nu s-a oprit.. Elpoatefi omis gi astfelsi executdm cod doardaciuna din condilii esteindeplinita. respectiv stringuri: I S t o t a l = $ x + 1 . in continuare vomafla ce sunt func1iile qi cum acesteane fac munca chial mai ugoard.. TNSTALARE.. Putemde asemenea sAddmparamehii direct. Funcfiile pot accepta mai mulli ] Al doilea exemplu: I SrezuLtat = $x p -n "1-x u if {Snume == "Ana") 5 nici 12 caractere". Sy) . print "Ana ". Am invdlal pandacum ce sunt variabilele qi ce lel de structuri de control avem la dispoziJiepentru a lucm cu ele astfel incat sd oblinem rezultateledorite cuminim de efort. print adunare (Sa) .0RGANIZARE. un n!me". pot Funcliile fi definire rulaleftrA a )i li se specificavreun argument: . Print l print "es!e "Claudia rr. elseif.. if { prinr "Si este par". { Fn.5 . de orice fel nu doar switch..default" de la slirgit est folosit pentru si nra in care dori m sa e !ia executim cod qi dacdnici unadin condijiile anterioarenu esteindeplinitd (fiind astfel similar lui elsedin structura if.EDITORTAL... print Stotal. astao fi repeti{ie?)in PHP. prjnr ($nume == "Barbu") l ] if inmulrire (9y. Pr:nt "Balbu ". Rezultatul rultuii acestui cod va fi esteLrn nume"ti nu .59) . recalculare // ($i == 2) va afiFa (16) . { Cazul special . modulin carehaleaza functiileeslesimiIar. qcesto 6 nuna d6 o-o $ x . vedemcu un eremplu. ) S a = 5 . sau a$a: print inmurrire($x = 76. Mai observdmdin acest exemplucb in cadrul structurilorde control. MySQL. Spre exemplu-la algebrd.bebuiefolositi la incheierea fiecdrui caz deoarece altfel codul din urmatorul caz va fi executat. deoarece lipsa instrucliunll in break. folosind numere.lnrSrE.. else). separa{iprin virguld prinr inmullire (76. if (5i == 1) de asemenea sd foLosim di- 9nr_caractere switch (Snr_caractere) { print "Si este inpar".. print adunare ($b) . ADtvilNlsTRARE. raloarece urmearaa fi prelucratd. Cnr. Deqi programareaPHP nu este matematic5..

. dacd luna curentde aprilie.rne(functia vreau. Aceasti funclie ilustreazefoafic bine folosirea operatorilor logici. fDql Iuna a $Iuna d..:9.. tatnat else print e cald ti "Slntem ii soare.@. Existdinsi qi funclii predefinite.i-rw. l vreau Ia nare O.a**" @-i l. TIPS&TRICKS . prlir frnction e dininea.m-: . exempluarfifunc1ia ale Alt counlf)pe carean lolosir-o numAram s. IV]YSQL .dacenu mai asteptdm. Sau.$ t€j hrp /rreore_dm mdaehp a+"' Jrr n. pentru o multrme deacqiuni. i! {e-dimineata O ) prin:. CNqNNTSITE . .de la I pentru ianuariepeni 1a12pentrudecembrie..-r | 1 Scriptulcare are griia de tensiuneanoastrd:nici un pic de cafea dupd ora. sunrefr ir tuna d Am vdzutdin aceste exemplecdrezultatulunei functiipoatefi o valoare(func1ia inmultire care oferd rezultatulinmultirii lui $x cu $y) sau o aclir. cate elementc sunt intr-un aray. la Rezultatul unei funcriimai poarefi ..4d dd ra d4.iar:e ("c") ... ADIYINISTMRE .i < 6 de Sluna > 9) pr:nr: \o sa f. 6 p c o . .{E}r s6r. .1qidacde noiembrie $lunava ft I 1*/ if(Siura ingae. ne putem face cafeaua. luna. Dacd ora estemai mare sauegaldcu 5 . i siuna dare (\\n7l). 7 8 . maret) care ali5eaziun text. Dacd e 4am nu vom bea cafeadegi $ora <:9 9i la fel dacde ora 22 de$i$ora>=5..i o valoarede adevir. Allfel. v:eau Ia nare o I 17 Aur@dr+ idsr c &k br d4i$r eqr ch@s lt tu@re:4de rd d3rrerii4d4r t o 1 .' ml Fm-l z 5 : l E Foll1@I 21 @ (if) DacA estevaramer.. ca in exemplul umdtor: operatorul ! NOT: if(le d:m:neataO) pentiu "Po. _l r aK ro( l .}!@r '.:d| | CH]?SP!. drumul e al nostru! Pute{imodifica (temporar)setdrilede dati din Windows qi sd schinrbali luna pentru a vedeace sc intampla.'poli s5 facl 6 t .a o Sora = . Existd runctI penh1l aproape oricein PHP5i va sliluic\csacaulati manLralul depe in PFIP CD ori de cdteori aveti nevoiede ceval 1 return TRUt.i mai mici sau egali cu 9.CIAI SITE DTNAMIC . INSTALARE .. s.i prini .. $lunava fi.. 6 . INTRODUCERE . f)nctio. Nu uitati sd revenili la setArileantcrioare! Ieturn FALSE. Eem la mare. Ambele condilii trebuie si fie adevirate pentru ca e_dimineataosd fie TRUE..l0.. TRUE sauFALSE. p . faci caJeaua.... acela5i lucru scris folosind I + . anul precum qi alte elemente datei. ORGANIZARE . l) nu c cazulsa ne facern bagajele.. f$).. ta naret. li{sora A 24 -/ >= 5 && Sora <=9) Funcliipredefinite Toatefunc{iileexen.a J l a i 3 l ' : J =l!l-:l 3 J I J J trffiiF-l 1 "\i. . { Dacde mai devremede luna iunie sau (operarorul nrri tarziudc \eplen)brie.r" + ffi: Fm-J a!d'.8 p:ea larziu else cafea_. . exemplu funcfa Un este date0 pe caretocmai am folosit-o $i care rctumeazd ora.EDITORIAT .* l -d -t 6d I I /x date("n") retumeazareprezentarea numerici a lunii in care sunte:n. Astfel.. integrate in PHP...526z7E ftls-rs ! :l_ F Ad@dE &.rplifi penl acun cate au fostdcfinitede noi.

crie un textoarecare in loc de codul numericpersonal saunu l-ar completa.php"). D i n a c e s te x e m p l u o b .php conlineurmdva torul cod: Valoare Elementeleunui formular pot avea o valoarepredefiniti.rnare.n a li put t. Modificali figierul formular. $ POST este un array carecontinetoatedateletrimise prin formular cu metoda POST iar fiecare din elementele acestuiarray poatefi accesat ca $_POST['nume_variabilS'].'pe:"text" name:"nr3"> in formular gi modificali scriptul PHP pentru a adunacele trei numere. specificim aceasti valoare. in exemplulnostruaceastan-ar o probfi lemd insd dacdam face o aplicalie senoasdonline pentru primiria oragului.p"><br> "Rezultalul cu 9nr2 este value='tverificare CNP"> <p><a href="formu1ar.precum 5i metoda prin care se transmit datele cdtre sewer.o o l .php cu carevom verifica dacdacestaestevalid. in cazul de fatd POST.dateleaddugate utilizator sunt de transmise serverului undesuntprelucrate. . De aceea. La apdsarea butonului .. Verificare Un utilizator pugubdlar putea inhoduce un text in loc de r. file ldit liew Flvorites lools d . value="Aduna"> name=rrbuton submia" RezuhatuladunaJii lJ cu 13 este28 lui Numerele trimise cu ajutorul formularului au fost adunate gi rezultatul afisat.un.. recrednd intr-un formular dialogul cu care am inceput sd invdfdm PHP. A.. informalia va fi trimisd serverului. Dacd accesim http: //localhost/ . scriei cateun numdr in fiecarecdsuJd de text Si apdsafi butonul.texr" name:'!..htnl obsewdmcd in cAmpurile destinate numerelorce urmeazi a fi adunate existd deja valorile 15 qi respectiv 13. nu editand codul HTML). Pentru exemplifica. modifi cabildde cdtre utilizator. cnp. Putem apdsa butonul . CnrnnrsrE.phpva CHIPSPECIAL S]TE DINAMIC .Adund". 5nr2 S Posrl rnr2'l..html qi adunare. ADM|N|STRARE. |NSTALARE. Repetatr experimentulcu alte numere.l.h|nl">inapoi method=" POST"> PriDul numar: <input type=" rext' Algoritmul din verificare cnp.rmr1 action="addare. Elemenf ele formularuluiau cate un nume dupd carevor fi recunoscute citre interprede tor (ex: $_POST['nrl'])..r: <inpui type=. dacdatuncjcandle declardm.x scriereala un serviciu gatuit de e-mail pdndla semnareaunei cdrJide oaspeli.subde mr1.rnnumdr sau ar putealdsachiar celedoudc6mpurigoale. Vali intrebat cum lirnclioneaza aceslea )i care este mecanismulcare face posibil pistrareadatelorintoduse qimanipularea lor ulterioari? V-ati uitat vreodata nedumeriJila linl-urile interminabileqi aparentfird sensdin unele pagini de web? in acestcapitol vom afla cum ajunge infomatia dintr-un formular la un script PHP $i cum. a vom face doui figiere noi. lui 5nr1 <rnpul lype="terr" personal: name="nume"><br> cod nlmerrc <inpur <inpuL $rezultat Frint type="te:t" type=''slbnit" name="c. e r v d m m a i multe lucruri: in declarareatag-ului <form> am specificat hqierul care urmeazd si prelucreze datele (action:"adunare.i. MySQL.formular. u r m a r id e elemente tip <input> $i un buton .fbrmtrlar. undeGigel trebuiesAadunedouA numere..Daci cetileniiar putca.. T|PS&TR PHP 9i formulareleHTML PHP gi formularele HTML Formularele qi link-urile sunt mediatorii interactivititii onJine." . un link poate fi mai mult decat ceeace pare la prima vedere.. Sd redem praclic cum se realizeaza acest lucru.EDTTORTAL. momenrul careapAsAm ln in butonul submit..php.Fhp!' .i:ilffi #i. = 9nr1 + Snr2.name="n12 " <rnpui va1!e=" 13"><br> tyPe="submiri.Aduni". . pentru odce fel de date trimisede catreutilizalori vom faceverificirile de rigoare.. Actiune ! Un fomular estecompusin mod norm a l d i n d e c l a r a l i al o r m .cu ajutorulcdreiacetdleniisd-5ipldteascd impozitele.. .:l'i. .'!"T.. name="nr1" value=" 15 "><br> .Adund" pentru a obtinerezultatul28 sauputemmodifica oricare din valorile prezentate in formular (direct in browser.a : i P y F ..html pentru a contme codul umdtor: <fors action="adunare.Pentruaceasla \om crea douA fi qiere.hqa de impozit nu ar putea fi procesatd. adunarii Srezultat".@. omiterea verific[rii datelor trimise de utilizator ar ducela haos.r: <inpui metbod="FOST"> type:'rr:ext'' name-"nr1"><br> Ai doilea num. In figierul HTML vom aveaurmdtorul formular: <fom P.html va contineurmdtorul formular: Fiqieruladr.php" melhod=" POST"> 9nr1 = $ IOSTI'nr:l..-r. ORGANTZARE.html cu carevom cerecodul numeric personalal utilizatorului gi verificare cnp. TNTRODUCERE. pentru a obtine alt rezultat. T e m d : d d u g a i n c au n e l e m e n t .r2 "><br> <rnPul l!?e="subfrit" kuja\i http :// lo caIhost/lquorlaLfutLl. cnp.

0RGANTZARE .. if {Sprima-cifra 5prifra l= cifra I && l= 2) corect. Funcfia substr se apeleazdastfel: substr(.)a i aiiseaz. afiqdm un mesaj de eroare.. 'nd es 6.na" name="nr2 "><br> <input rype=''subnit. o Ap.site/hgier... 1.'> 5) = ..... numdrul caracterului la careseincepe"tdierea . 6) . else: if cerinia 1nu este indeplinite personal\" tonDl esre golt Apasa!i bD $prima cifra = substr (S poST [ 'cnp.r:^. I ) ) <b>Back</b> reveni l sc...php" { . Pentru vedficarea acestei cerinle vom folosi func1ia substr care retumeaza o parte dintr-un string. ii afisam un mesaj de eroare 5i oprim execu{iascriptului*/ if (s Posr[\cnp..v a l o a r e| & v a r i a b i l a 2 i r aloare2.r- l /xdacdutilizatorulnu a introdusnimrc in cdmpul "Cod numeric personal". 7). s. nu sepot la tansmite decatcaractere ASCII qi cantitatea informalie de ransmisibild limiesre tata ca mdrime. ".are.Ana ' Primul nunAr: <inpur type="rext" .o )l { iF rn o 2 -! ds 6 -oap . { afiseaz5 mesaj de eroare l { print "campul \"Cod nDmeric sa fie o Bo r Ia numericl b.dupdcum ii zice qi numele. TNTR0DUCERE . codul numeric personalnu estevalid. <b>Back</b> in browse! penrru la Fagina anlerioar..hhnl. subsr!("Ana substr("ana s!.. .Trecematunci la urmdtoarea rerificare:daca CNP nu estenumeric...scriprul rula in continuare ar pana la capdt $i un cod numeric personal invalid ar fi inhodus in baza de date a pnmdriei degi pe pagina de ouFut ar apdrea mesajulde eroare. @ .. VomverificaperAndfiecaredin cerinle iar in cazulunei incomparibiliragi oprim execulia scriptului folosind exit.. 6. de numdrul de caractete ce urmeazi a lt rerumatedupi acest caracter). t= 13) personal\" ca!acrere </b> in trebuie I ApAsali <b>Back la blowser pentlu o" 5 . TIIS&TRICKS fi orientat dupd cerinle: cAmpul . tlebuie sd fie numeric.]). /* daciiC\P nu are exacl l3 caracrere. Funclia shlen retumeazi numirul de caractere(inclusrv spalii) dintr-un string.Vom rula un exemplu simplu: formular. afi5dmalt mesajde eroare.o.php" method:"GET">) insi estepreferabil sd evitali sd folositi GET in formularedin trei motive: datele din cadrul formularului sunt transmrse sewerului prin ataqarea IJRL.. CNP nu este1 sau a 2.*/ $nr_caractere = strlen if (Snr caractere I print "Campul \"cod numeric sa aib. l { prlnt "Prima cifra a CNp treblle Ap. 1) = -A" 1.ED|TOR|AL .n(.1oFF.re la paqina anterioar5 corect.".o. Dacd nu am opn execu{ia dupA semnalarea erorii.daci informa{ia trimisd de utilizator este un numdr sau nu*/ if ( lis nuneric (S PosTt .' 0.] == "") { prinr "campul \"cod nune! i c + ._.e nere" _ CHIPSPECIAL SITEDINAMIC .ame="nr1"><br> Al doiLea numer: <inpDr type-tttext" substr("Ana are nere".n.adresa.: a reveni "-t . . Dacd folosim metodaGET trebuic ua 5i in cadrul scriptului PFIP sa accesdm variabila ca atare (ex: $ GET['cnp'] in loc de $_POST['cnp']).b r /"An" . Si a reveni a 1 scrie a. Formularcu un camp pentru introducereacodului numeric personal penlru verificare. GET Formularelepot fi transmiseserverului gi cu metoda GET (<form action:"fi qier. Scrieti 5i voi acestcod omitdnd comentariile ajutdtoare. ADMINIsTMRE . ) /xDacd rulareascriptului a ajunspAni in acestpunct insearnnicdtoatecerintele au fost indeplinite Si codul numeric personalestecorecr.cnp.na are.. Am puteaevita rularea scriprului penala capil dacaam lolosi ii..!e -. reguldgenerald. buton!I exac! 1: (s Posr[\cnp.safi brouser butonul pentru a qa ase fie 1 sau 2l in /* Dacd scriptul a ajuns pdnii aici inseamni cd cerin{a aaterioari a lost indeplinitd.html <form acrion="adu. a . Fexsonal\" lrebuie b . In contrnuare vom scne scriptul de verificare a codului numeric personal introdus in formularul cnp. 5 . Datele formularului sunt transmise prin URL sub forma http://www.-. 2) = '. cnrnar . 0. ) l Cu if . lala $i cAtevaexemple: .. 1 l 3 D d O /* daciprima cifrd. ] . is-numeric este o firnclie predefinitd in PHp care verificd... else ne-am pierde in acolade a$a cd vom folosi exit in verificirile noastrepenmr a opri rulareaulterioarda scriptului dacd una din cerinle nu este indeplinitA.. "t browser ". r. sden("120")=3 ii strlen("4mere"):6.5str ("Ana are mere".php? v a r i a b l a l . - pent!u a reveni pasr.string".Cod numeric personal" nu poale fi gol. INSTA|-ARE . srrlen("mere"F4. tyySQL srE . l mesaj de eroare l o"r. si conlind 13 caractere gi prima cifid a sa trebuie sd fie 1 sau 2.. vom afiqadoarun mesajde confirmare:*/ print "Acesta este un CNp vaLidt".in aplicalia noasra ar urma si il introducem in baza de date dar cum nu acesta era scopul exemplului. Ca oricevariabile trimise scriptului PHP prin intermediul unui URL sunt accesibile in array-ul $_GET gi astfel nu este neaparat necesarsAconstruimun formular pentru a trimite vaxiabileserverului.. c.

in al doileardnd.. Astfel. "root'..php mysqL connecr ("localhost".. Snr2 = S GETt'nr2'l. pHPofera programatorui o mutlrme lu penmr lucrul I de func1iipredefinite cubazade date. . ' 1 1 c! Sn12 este Srezultat". cu ajutorul funcliilor predefinite.pnp Snrl = S GEl['nr1']. . inainte de a electua weo interogare. oRGANTzARE .ck Vew l ..iles foob Slop !€lp .ini (agacum implicit) qiintotdeauna accesali si este setatA variabilele anay-ul din careprorin.php?nr I =9053 &lr2:4906 sau http://localhost/ Lucrul cu bazede date PHP 9i MySQL Dezvoltarea explozivi a Iimbajului PHP din ultimii ani estein cea mai mare parte datoratd uEurinfei cu care acestalucreazi cu bazele de date. trarcmi16nd datele prin URL.) _ CHIP SPECIAL SITEDINAMIC Din PHP putem face acelagilucru. nu am folosit punct 5i virgula pentru a incheia insLrucliunea a5a cum eranecesar in SQL liniade coqandi.Aceastainseamnicd din cadrul PHP putem executa toate pe operaliunile carele-amlicul in capitolul dedicat invd{drii MySQL.. Tot vom [o]oside multeori in cadn-rl site-ului GET penhu a obqinevariabile dintr-un URI. in cadrul site-ului nostru vom folosi fomulare penfu a lisa posibilitateautilizatorilor sdadaugecomentariigi pentru a lrimiteadresa undedoresc primeasca sa Dateledin formularele c64ile cumptuate. TNTRoDUCERE . din A:fel evitagi seriede probleme securide o tate. in primul rdnd.doar pdn apelareamysql_connect o 5i mysql_select_db singurddati la inceput.ini care v-ar permite accesulla variabileletrimise de utilizator fird si le accesaf din almy. TNsTALARE " cnrnnrsrE ADrvrNrsTMRE . pentru a vedea o va carteanumeadresa fi http://localhosV cafie. Spre exemplu. Funcliamysql-setect-db("librarie") este echivalenta USE librarie.rsiersize.r'-4 'E)a F€lreih d Honr O 9dch - qra"" l6"-i7l"liii"o--*-ii R6'hdiul ddM&ll rui rr0J3.ti Fivo.EDTToRTAL MFQL .. "") . $iezulrar = $nr1 + Sn!2. 13919 prin metoda Variabilel6 transmise GET suntvizibile baradeadrese browsein a rului. cu Aceste doud funclii tebuie apelateintotdeauna atunci cdnd dorim sa lucrAm cu baza de date. Variabila ca $_CETI'oarecare'] puteafi accesibilii ar iar $oarecare $_Fll. Sd ne reamintimpa$iipe carei-am facut pentru a interac{iona cubazade datedin linia de comandd: 1. .ESi'fisier'lf'size'] ca $f. in ce privegte mysql_query. Sd facem primul nostru script cu care sd interac{iondmcu baza de date (nu uitali cd serverul MySQL trebuie sA fie pornit!): test.u 4906esr. inhun form timis prin metodaPOST. Ruland acest exemplu putem vedea cum numele 9i valorile elementelorformularului se hansmit fiqiemlui PHP in URL Putem accesa direct in browser http ://localhost/adunare.-l Formularul ajutorulcaruiavomtrimicu te doue numere pentru a fi calculate la seryer. ne-amconectatcu numelegi parola (mysql -u root -p) 2. @. Putem efectua oricat de multe interogdri dorim {drd sd fie nevoie si ne pentrufiecaredin ele la baza reconectdtrr de date. I G lobals Existd o setarein php.valoarea din <input tlpe"text" nume="oarecare"> ar puteafi accesibildca $oarecare loc de in AcelaSilucrueste vala$ POST['oarecare']. bil $i pentu metoda GET sau pentru elementele din anay-ul $_FILES. Obsen similitudinea cele 5m inre doua aborddri.problemepe carele rom explicamai pe larg in capitolul dedicat securitdlii aplicaliilorweb). Cu functia mysql-connect ne conectim la bazade date specificand hostul la care aceastase afld (localhost).esterecomandabil sd ldsali setarea Globals:Off in php. am executato comandnSQL (SELECT x FROM carti.php?carte_id:345.php?nr1:423 &nr2=546. / " 5 C D O Mo L : . adunare. Deqi poate pereamai u$or de progmmat a$a. completatede cdtre vizitator vor h trimise serveruluiprin metoda POST. am ales baza de date cu care sd (USE librarie) interacJiondm 3. Aceastapentru cd mysql query . numele de utilizator (root) Si paxola(pentru cd aceastaeste goald folosim un string gol: ""). fird sd completAm formularul. despre carteacu Vom vedeacum in urmdtoarele doudcapitole. Eile Edit View Flvorites loots lelp tAd.dacd rulaJi scriptul in browser nu veti vedea nimic pe ecran aga cum probabil v-a{i a$teptat. notdm doui lucruri. aounare. ScriptulPHP va din selecta bazade datedoar informafiile id345 9i1e vaafiqa. . Trps&TR Elc Edl B.

degimysql_num_rowsne spunecd avem mai multe ce4i. query(. P!rnt $arrRezuLrar[1]. $resursa cu careputemaccesa valoriledin tabe. s"ardull 2..). MISOL_NUM) . de Sd ne convingemce rezultatul interogdrii este o resursd.. Ce este un anay multidimensional? Putemacc€sa resursa un array nuca Un arr4y s31s contine h randul lui alte meric: array-uri. mysql select 9resursa db("librarie. nuamputeamodifica aspectul func1ia sau paginilor webdinamice amazon.. rdndul(0. mysql /* select_db ("tibra!ie. Sresursa = hysql quely("SEr.rnaray (observali ca arn mysql select db("librarier) . ". $arrRezultat PHP oferd funclii pentru accesarea estemullimea aray-urilor de rdnduri din resurselor rezultd mysql query. lnsQl . * FROM F R O Mc a r l i " ) . sn! print = nysql ''sDnt num lows(Slesursa). 3. (. campului doitea de"") .array(tit]u de pe landDt 2). de concatenarea stringurilor pentru a interpune spalii 9i line break intre vaxiabilele ce urmeazd fi afiqate. (9atRezu1!at) Daci nu specificam tipul array-uluisau folosimMYSQL_BOTH.EDtTORtAl .I.in pseudocod: "id_carre").tidimensional.. Esteevidentcd daci rezultatul interogariiaxfi fostafi$at directin browser. = nysql FROM carti. I ]. fi test. TNTR0DUCERE .com de gi ar fi o simplS ingiruire date.'). nysql_select_db Sresursa = mysql afigeaz. srE . "root". 0..php mysql_connect (ttlocalhost". Spre cdterdnduri a retunatinterogarea: mysqr connect ("1oca1host"/ 'root".php mysql_connect (..l [ ttitlu. primul r6nd al tabelului) numele cAmpului ("titlu"). "root". in cazul de fafi. Resurs€le variabile sunt speciale care contin referinte cetr€ resurseexteme (precum rezultatul uneiinterogdri baa zei de date) 9i pot fi manipulatecu ajutorulfuncliilor. * FROM "") . Asscc).1ibra!ier "rool". )..SHOW.sEI. Aceastametode este preferati de mulli deoarece textul interogdxiiestemai u$or de reperat in cadrul scriptului: Srezultat = ntsql result (sresulsa. INSTAI-ARE .) . $resursa = nysql-query(iiSELECT 9rezultat = mysql result(Sresulsa.php hysql connect ("Loca1host".. ". 2. ("libra!ie() "root. '") ' exemplu. care din test. 5n! certr in baza de darer'.Ioca nysqt select db("ribrarie'. lul retumatin interogare dintr-unarray. = array (randul randul 3). tloa sau conlinutut pe ce1 de al treilea p!!nt mysql_resu1! land at labeluluii/ (Sresursa. Putem de asemenea scrie interogarea SQL inr-o \ ariabilA caresdo folosim pe ca parametru al funcliei mysql_query.ECT * F R O Mc a r t i " ) . SarrRezultat Parametii fimctiei mysql resultsunt: resursa ($resursa). "<br>" ' .. 2. ).php tru fiecare ele afiqeazd din valorilecdmMysql_resulteste greoi de folosrt purilor titlu gi descriere.'). ) test.'' [3] . fiecarecoloald. t. Cnrnns D ADMTNTSTMRE T1pS&TR1CKS " Pentrua afi gavalori cadruldinresursei retumate putem folosi mysql result. print /* $rezDltat. d€ EXPLAIN saUDESCRIBE. while (SroHysqr_fetch "descriere. Putem afita toate valorile array-ului folosind while: Sresursa = mysql-query ). deoarece suntemnevoili sd accesdm estela rdndul ei r. de pF .t.EcT * SarrRezultat randul = aftay (Sresursa. conlinu!u1 de-al qDery("SELECT scliere de pe cel rand at Observdmfolosirea operatorului . . aray(Sresursa) ) ( "SELECT * print gres!!sa. descrlere 9randu]3 de pe randuL = arlay(titlu de pe landu1 3). . 1. canpului id-carte de { prrnt 9rowi!titLu. .'r ". in exemplul urmdtorafi con!inutu| cemtdm pului titlu de pe primul rand al tabelului (numerotarea incepe de la 0): test. $a!rRezuLlat nysql_fetch pxint_! = array ($resursa. print r ($anRezultat) 'tittu'l sauprint$anRezulrarl ne afi$eaz A doarprimul elemental anay-ului. "<br>'. grow['titlu']) a 9i asta 5sq1 = "SELECT r FROM carri.) . In ajutonrlnostruvine mysql_fetch_array pentru cE$anRezultat esteun array mul= mysql quely($sqt).@ . $arrRezuLla]] rnysql fetch = array (Sresursa) . mysql_query retumeazd un identificatorde resurse gi pe careil putematibui uneivariabile. apelat-o ca atare.Mai observdm a cd. oRGANTZARE . Variabila $row mysql_connecr (rtlocalhosl. Pentruaceasta modificaJi ultimalinieascriptului scrieli: gi test.id carre. fiecdruirdndin parte. Sresursa = mysql query("SELECT i FROM FROM carti" I Folosindwhile scriptulfteceprin toate valorile array-ului pend la sfex$it Si pentest.cndul de pe landul 1).r | 'descriere' ( I . SarrRezultat prant 9rezulta!.. * FROM "") .vomputeaaccesa rezultatul atat mrm€ric cat $i asociativ.php tabel iar fiecare $row este un aray care Cuajutorulmysql_num rowsputemafla cuprinde valorile rdndului respectiv. 5arlRezDltal mysql_fetch print_r nysql_select_db sresulsa-= frysq1 query("SELECT descrrere Srandul2 (SarrRezulrar) . print $resursa. sau asociativ: tresursa mysql_query ( "SEIECT + descriere de pe randul _ CHIPSPECIAL SITEDINAMJC .php tysqr connect ("localhost". MySQL executa interogarea nu ahgeazd dar rezuItatulci retumeazevaloare: o TRUEdacd interogareafostefectuatd succes a cu sau FALSE daci aceasta e$uat.pentru a instructiunile tip SELECT. print SarlRezultat .

T|PS&TR Dupd cum vom vedea in continuare. Spuneamci pe prima pagind vom avea numelede domenii.php linia piint 9ror [ 'nume domeniu. <br>. ) </body></html> <mera http equiv="conrenr Type" 8859-2"> contenl-"texl/html. .EDTTORTAL MySQL ..trei pagini vor fi tot ce avem nevoie. nufre_domeniu=' .' </a><br>' .Ji Hclp .. Vd recomand de cate ori ca sunteli in impas sd consultali manualul PHP pentru a afla informalii desprecelelalte tunclii MySQL disponibile.. Numelede domenii le obtinem folosind interogareaSELECT nume domeniu from domenii iarpentru a le afi9a. charser=iso <tir1e>libraria nea</ t irte> <neta http-equiv=nConrenL Typen 2tr> conten!="rext/html. Cum facem acestlucru? Ne reamintim cd am legat tabelele domenii gi carti p n n r o o o m e n r uI n i t m b a l5 e L a m .m din nDmaruL de cerli baza de date: 9sq11 = "SETECT + FROM carti'$resursal $nr prinr = hysql query(gsq]1). ]. + . <h2>TitlDri</h2> thile ($roH{ysql fetch_array ($resursa) ) File Edit View Farcrites Toc.php. carti. TNTRODUCERE . db("ribra. ] . E interesant.php pnnr-un URL.Dacdar fi fost sd facem site-ul in HTML. $ror[ 'nume-domeniu'] 1 .Poezii" operele teatrupentrudode 5i meniul .volumul2 ?oezn.. Sd facem in continuare scriptul care afigeazd titlurile disponibilein domeniul pe care am dat click. 0RGANTZARE .. . putea si folosim interogareasELEcr tillu ' id -from dom. acest = mysql "<p>Sunt domeniu</p>".rti in .dar nu suficient de impresionant?Ei bine.volumul3 /* qi in continuare afitem numele de Ssql2 = "SEI-ECT nme donenau mol4 donenii".Atat . indiferent de numixul cS4ilor saudomeniilor din bazade date. pentru a domenii where mysql connecr ("localh db ("librarie') ..php Maipulininseamni mai mult Sirevenim la site-ulnostru. Srow t librtiria metr Sunt 6 carti in baza de date Astfel in prima pagine toate numele de domenii vorfi link-uri.Poezii" gi la fel pentrutoateceleLalte caregorii. oe = nysql_num "<p>Sunt rors (Sresuxsal) snr carti in baza <h2>Dome. id donenlu. aceslecdteva func1ii ne vor fi de ajLrns penhu a putea construi un site dinamrc interactiv Si rareod veti avea nevoie de mai mull.. . Cu PHP in schimb tot ce trebuiesefacemesteprima pagind.php?nume_domeruu :Poezie">Poezie</a>.php Domenii ! r ezii Teahru l'fitol+de O prime pagina ce contine lista domeniilor disponibile.<br>. doneniu=calri.Fili atenti la dispunerea ghilimelelor in cadrul scriptului.5 blHERn nume domeniu= AND doneniu . GETI'nufre domeniu'1. id donenii 9resursa: $nr prinl mysql query (5sq1). Va trebuisdmodificdm in index. 9resursa2 thile = mysql. atunci sd facem in aga fel incdt si putem da click pe fiecare nume de domeniu gi sd intrim intr-o pagind unde ne sunt afi$ate cirJile din domeniul respectiv.'e tr FnflrBfd stop Refresh 'nufredoneniu' ">' .query(Ssq12) fetch . INSTA|-ARE ."' ..php? { CHIPSPECIAL SITE DINAMIC ListacertilordindomeniulPoeziialese duDd id domeniu. id-domen iu=ca rti .in continuarevom exersafunc{iile MySQL ale PHP credndo schili a site-ului.. spune{i.Poe. . o pagind pentru domeniu qi una pentru carte.Teatru". <h1>libraria mea</b1> nysql connect ("localhost". "") ' mysql seLect /* se afig. ca de exemplu <a hreF"domeniu. pltnt'<a href="domeniu. prinr Sxow[\nume-doneniu. variabild pe care o transmitem scriptului domeniu. . num rous(Sresursa) 9nr c.@ " srE .php vom folosi rariabila trimisi prin URL pentnr a obline din baza de datedoarcdrtileapa4indnd domeniului respectiv: domeniu. Nu vom face cdteo pagind pentru fiecare domeniu in parte deoareceacestaeste exactscopulnostru:si scriemun singur script care sd afi$eze dinamic rezultatele:ce4ile de poezii pentm domeniul .ii</h2> afiSa toatetitlurile din categoria. Cneme .. ADM|N|STMRE . ($row =nysql ariay(g€suxsa2)) qi sd transformdm numele de domemu intr-un link prin care setransmitem vanabila scriptului din domeniu.r5t@ o Sunt 3 caid in aces! domeruu Refferh d t s Ho'r€ Titluri Poezn Poezii. in figierul domeniu. scriptul PHP pentru prima pagind va aldta ca in exemplul urmitor: index. . pentru fiecare carte ar fi tebuit sd concepem cdteo pagini qi pentru fiecarenoud carte ar fi tebuit sd modificim pagina domeniului cdruiaii apa4ine.. Pentru aceastavom folosi o variabild care sd conlind numele domeniului. <title>IibrAria charser=iso-8859 mea</titte> Scrieli Si rulati acestscript. .ie") pe priha pagine */ 'root".' .i. in specialla modul in caream inclus ghilimele dubleintr-un stringincadratde ghilimele simple. mysql_selecr $sql = "SEIECT titLu FROM cartir dofrenii ' ". File Edit View Favoriter Tools Help Errl: (-.

intr-un tabelHTML: Vomprezentadatele toate_cartile. r Romeo { print'<a id href="domeniu. DINAMIC CH]PSPEC1ALSITE . <A href="toate ca!ti1e. rescriind variabila $sql: { ' L d i .rrd librriria meer Smt 6 cartiln baza dc date Domenii Poezii Teahr Mitololie Putem.php9i apoi creali operatii. " " r ' . '. '<br>' . o orientaremai ugoari.o t ' o <!d>".o t r fr F!r'.$rowI ' d . domenii WHERE AND nume_domeniu:'Poezii' domenii.:rd Retrc*r 5l@ HOI print "</ table>". Toatece4ile din bazade date. S . autorul li descrierea.id_domeniu. = nysql nysqL fetch auay{Sresursa2) ) Rulali scriptul accesandadresahttp:// localhost/toatecartile.. mysql_query(9sql). + g 5lop E ReFrssh o d o m .Poean. . Dacd folosili Opera sau setareade refresh din Intemet Options din Intemet Explorer .:rv. gtiindcddomeniulPoeziiareiddomeruu 1 am putea alege cd4ile din domeniul respectiv folosind simplu: SELECT x FROM carti WHERE id_domeniu:l in loc de mai greu de intelesul SELECT titlu FROM carti.iu Sresursa2 doneniu.php FRoM domenii". Si facemintdi un scriptcarene afiqeazd toate titlurile din tabelul carti. in mod similal iace o pagind caresdpreiaid cartedinIJRL gi sdafiseze pentru cartea respectiva titlul.php vor fi de tipul <a hreF" d o m e n i i . { print l $ros[ 'titlu' ] .s ccTI d do-e IiHERE -']. Fiecarenume de domeniu din tabelul qi domeniiare ceteun id asociat arunci. )t litlu FROM "' ). Slow| 'id I trlPoeeiivolumu I r lyoean. t-[ : volumul J I l. TNSTALARE SITE . librfiria mea de Sunt6 carhinbaza date Domenii Poear Teahrr hltoloee $i chiarmai mult prin Putem numele domeniului trimite URL.php: un nou f.\r. serect_db ("ribrarie" carte.. "</rd> @ I Fe Edil View FavoritBs Tools HelD // si lnchidem taberul 86ck + .php"> l</a> Vd spuneam in capitolul despre MySQL cum id-urile ne pot uquramunca.Nerei'.php nysql mysql $sql connect ("Iocaihost". Acest lucru devine evident atunci cind creem pagini de web dinamrce deoarece sintaxainterogdrilorSQL poate fi simplificate foarte mult. CREARE .php mysql_connect ("1oca mysql select $sq] db{"1ibrarie") . O!-p"ttr E.'</a><br>' . operatii. MySaL .id_domeniu cani.vorlt65 Took Hllp $sql dindomeniu. pentru fiecaredomeniu in parte.php pentru a vedea cum folosim instrucliunea DELETE..php a redea cd noul titlu a fosl introdusin tabel gi i-a fost acordatautomatSi un id.php? doneniu'l . Modifica{i index.Check fol newer versions of storedpages..Vom face acestlucru inf-unul din capitolele urmdtoaxe.'"> domeni!-. Putem folosi funclia mysql query pentrua efectua$i alteoperafiicu bazade date: INSERT. TNTRoDUCERE . -nd: ($resursa) ) Rulali scdptulin browserapoiaccesa{i pentru http://localhosVtoate_cartile.Penfu moment insd.. @ . p h p ? i d o m e nu l " .rgier. query(Ssql2).php astfel: 5sq12 = "SELECT id nune_dome. ADMINISTMRE E File Edt vlew F.$rowl'nume l domeniu'1. vezi nodificarea = "SELECT id $resursa // = mysql query(Ssq1) . Addrcss l€l httpr//localhost/ioate-cartib.' rtirLu' ]. oRGANTZARE . script de carevom aveanevoie in continuarepentru a consulta baza de date Idri si fim nevoili sd intrdm in linia de comandd.ri F. pentru Putem trimiteid-uldomeniului.. "root". va fi neroie sd pagina (reftesh). este suficient sA intelegeti functiile variMySQL 5i modul in carese lolosesc abilele in interogdrile SQL.phpqi si o simplificdm folosind id domeniu ca referinti: $sql FRoM carri "sELEcT tirlu '.. 56 modificdm acum gi interogarea = "INSERT rNTO carri(rirLD) VALUES('Dune')". deschiden "<!able rabeluL: print while ($row{ysq1 fetch_afay .. luiid domeniu Cum?Trimil6ndvaloarea prin URL..s*d"l" el Done Acum link-urile citr€ pagina domenii.EDIToRIAL .ti Sd modificdm operatii. TIPS&TRICKS . reincdrca. UPDATE sauDELETE.P o e z i i d i </>. Fe Edit viev'r Favorite! To6ls Help + Fick .

volumul 2 P o e z i v. nici un titlu . html Siputeti adtuga oricete titluri doriti ! qi Rula.).>vezi ..o l u m u3 i l Romeosi JuliEta Formularulin vomintroduce care tiflul ce urmeazd fi inclusin bazade daie.k .php nysql_connect nysql Ssql {.$_PosT[."'>). s Posr[. "loor". b ' -e ""d"!qa e. + . FROM carti". i. ". Adaugd in acestformular transmitem variabila cu numele id_carte (definitd in <select name:"id_carte'!) a c6rei valoare este conlinute in tagul option (<option value:'". A sositmomentulsApunemcapla cap in exemplul urmdtor vom vedea cum toate lucrurile invi{ate pend acum.ECT id array (S!esursa) ) cartr SlesDrsa oRDER BY ritlu mysql_query = $i iata qi scdptul care va prelua valoarea din <input type="text" name:"titlu"> transmise prin metoda POST qi o va addugain baza de date: while mysql (srow fetch_array (gresursa) ) File Edil View Favorites Tools { Prlnt "<option c value=' ".'f"'oo-". FROM mysql_ferch nethod=" POST"> <anput rype=iitextn . litluri din baza de date gi cu Stergem aceasta ocazievom vedeagi cum folosrm PHP. I.adaugare. urmdnd ca el sd aleagd addugim..ti acest gi exemplu apoiaccesaJi Vd putetiverifica oric6nd.php( merhod="POST"> <select name="id_carte"> mysql_seLect_db $sql (.. afi$dm titlurile intr-un dropdown list penFolosind formularele HTML putem tru a putea selectatitlul caxeurmeazd s6l interactiona cu baza de date fixd sA tre$tergem. selec!-db = "DELETE FROM carli carte-. mysql_select db (. rirlu ASC".amdndoudne sunt servitepe tavd de cetre script! Pentru a modifica datele din baza de datevom scrietrei scripturi:unul carene afiqeazd titlurile5inepermite selecr5m sA titlul pe caredorim sdil modificim.oeza .stelgere. sd modificdm sau sd $tergem titlul ce urmeazd a fi $ters.php">Mai <A href=!!toate_cartiIe.$row['id carte']. cem prin chinurile scrierii interogdrii SQL Vom folosi un script PIIP penhu a afi$a in linia de comanddsau in cadrul unui utilizatorului o liste cu titlurile disponibile script PHP ori de cdte ori lrem sa in baza de date.accesAnd http:/ htQ://localhosvtoate_cartile. <iorn un titlu in baza de date: action='. desclrere mysql_connect ("1ocaI Sresulsa )..1oca ("librarie") .oho mysql_connect("localhost".php'. = "SELECT id_carte. nysql = 'IDELETE FROM carli Dune.. modificarea l</a><br> . weo inregistrare.iHERE isql = 'TINSERT INTO calti(tittu) mysql $sql id selecr db ("1ib!a!ie") ) tiHERE carte. .id mysqt-query(gsql).php pentru /localhosVtoate_cartil€. ADMINISTMRE.librariet.INTR0DUCERE INSTA|-ARE.select_db $sql - ('. unul care sd afigeze datele intr-un formulax unde sd le putem modifica gi ince unul care se trimitd datelemodificate 1abaza de date: Iista_ca . + ForwErd _ stop a E Refresh L mysql_connect ("1oca1host". Sd facem un formular care sd ne ajute sl9l99l9!!p _ in addugarea titluri noi: de S erq.php rti Aleqe una din carti si apasa buton!] <FORM action="modif nethod="POST"> ica..5rou['titlu'l'</option>". mysql. hLnl " Ao..r.Iibrarie" "root'. Siow I 'id + Bd. {Ssqt) .php.ane="ti!Lu"> = nysql query(SsqI) . "' r .'>Vezi <A href="toare_cartile.>. t € t r Back ioll"rir:l stop Refresh Adaugi rm tiduin baza de date. TIeS&TR1CK operatii. <A href=. <INPUT type-"subhit "SEI.].' ORGANTZARE MySQr " " "@.l . "')' L e g e n d e lO l i m p u l u i e Poezii Poezii.php. oj.'loale cartite.uEs(.Iibrarie" carte. MySQL 9i formularele alte confoale de formulare dec6t<input t)?e="texti> sau<input t ?e:"submit.r.phpn Cet de ugor estesd $tergemceva din baza de date$i nu ftebuie seln€m minte nici un id. tir1u. ) Sterge w tidu din baza de date: <INPUT type="subnit" value="Srerge"> L e g e n d e lO l i m p u l u i e Dune Flle Edit View Favoites Tools Help + ."' ). adaugglgllll_ Adaug. a CHIPSPEC]AL SITE DINAMIC Afigarea cArtilordisponibite intr-oliste dropdownpentru o seleclierapide.r frysqr queiy(5sq]). Iatd gi scriptul carepreia aceastivariabili qi gterge r6ndul corespondentdin baza de date: sterqere act.ED|T0R|AL.php">Vezi Accesali http://localhost/adaugare.c" unodificarea l</a><br> srerge t itlu=. a vedea iffegistrarea fost$tearsd ce a din Si scriemacum un scriprcu care sA tabel.ugd <A h!ef='. vAr. ). cnrnnrsrE. qDery(tsqt).php" a/sq] oa ecr '"lo.a -os.lF dd_e: nodificarea l</a> <form action="sterge!e act.

php") .. Daci nu..phpdupd ce modificarea a fost efectuatA: i - FROM carti id carte='. Modifica aceasta carte: act. '</textarea><br>'. Scrieli scripturi pentru a modifica prelul $i data fiecirei cd4i.tted ii Dn.$ losT t .le Olimpd{i tM""r1r"6l Formularulcu ajutorul cdruia putem ategecarteaale cAreidatedorim se le Accesaf acumadresa i htF://localhosV lista_carti. rn acestcaprtol am vdzutcum putem facepagini dinamice gi interactive5i cdt de ugor este sd creezi gi sd 1ii .'> va|ue="'.500'.utlu. floare la ureche.. "._.>.o. <INPUT t\l1)e="submit'r vaIDe-.php id-ul cdr(ii deoarece aveanevoiede el va atunci cand va opera efectiv modificarea in baza de date */ print r<input type-"hiddenn Accesa{i scriptul browser in pentrua vedea rezultatele..verificafi dace toalecdrtiledin labelulcartiapa4inunui domeniu (id domeniu nu este 0 9i se regase$te$i in tabelul domenii) 9i au autor (id-autor nu este0 qi seregiseqte gi in tabelul autori). dacdnu atr scris gre5it numele unei variabilesau funcriisaud-acd pustoaleghilimelele ati la locullor. = mysqt query(Ssql).". Nu uitali: de cdte on Iucrurile nu functioneazd a$acrun ar tre_ bui...la zi" un site cu un numdr uriaq de pagini folosind doar cateva scripturi.. = "UpDAiE carri sET i. titl'r=.e# .ani !i apasa burolul Modlc..</i> nanre="descriere.idcarte.> Modifica aceastacalte: ) /* qi folosind un control ascuns trans_ mitem mai depaxte cdbe modifica_act..id_carre']. C. g_posT i.98...<input carte' c type=/ radio..'. lista-carti. nysql nysql $sql connect ("loca]host". selecr-db ('Iibrarietr "roor" ).'Modific.$rowl.] din formulamlprecedent actualizeaza gi inreoistrarea cd4ii a cdrui i.lece e ?ea tu. modific6_act..INTRODUCERE. "><br> type="tert" mysql_fetch_array nafre=r id (9resursa ) ) File Edit View Fdvorites Tools value=.98500lei" sau.. MYSQL. 02-23). gresursa $_posr t .kl.nut scnpt drn aceasdserie. header("location: Jatuaa pa .. 1.Sxowt. r. .t. ". gi rulaqile electualimodificarile pentruiiecarecafle care are prel 0 saudata 0000_00_00.w e p.id <b>". ">. DupA aliscris ce scripturile. Nu uitali c6 preluleste tip INT in baza dare va de gi de trebuisiil scriejica. " CNTNNTSTE.l .EDITORIAL.id carre. <FORM action=nmodifica nethod-"POST"> Formularul ajutorulceruia cu fic6m efectivdetaliilecdrtii.98500. lui $_POST['id_carte']. 1. Fiti imaginativi scrieripreEuri datedifeqi 5i rite pentrufiecarecarte.. $-POST[.l. $row['tit1u.. ] . Inainte de a continua..php preia variabilele $_POST['titlu']qi$_POST[. . .500".">)*/ Fy.. . ). ]. descriere I. selecr_db {itibrarietr) = "SELECT tirlu.. lll ]Lne. Inainte a trecela capitolul de urmdtor vd recomand sd faceli cateva exercitii.. S PosTt.$row['descriere.' nu.Srowt.tir1u.ol mysql $sql ^onnA.php" <INPUT trye=t'subnit" value='.ntucal .l.98. INSTALARE ORGANIZARE. la lel ca in ultimul exemplu prezentat. ". <re:rarea l 1. La sfi4itul scriptului folosim headerQ pentru a redirecfona automat browserul cetre lista caxti. verificatidac6a1ipus puncrqi rir_ guld la slirgitul propoziliilor... ds .{HERE l.descrie!e.'.'</b><b!> <i>. descrie. Vom aveanevoie de toate acestedatein cele ce urmeazd. aveli nevoie doar de ccva exerciliu gi in curand toate vi sevor parea I _ CHIPSPECIAL SITEDINAMIC .e=' I'THERE ld_carte='. trecem urmetorul Si la fi9ier: eua e putr D a n e m a ra I A l t c name=irid_carre.. ADIV]INISTRARE. modificali iffegisterile (in linia de comanddsau cu ajutorul unui script PHP} astlel incdt loarecdqile sd aibi un id_domeniu gi id autor valid. variabilelor sau array-urilor dar nu renunlaji.. mysql_query (Ssqt) .. ].php modificari dupd plac 5i oriceritlu saudescriere uneicaii: De_ a acum puteli spuneAdio ! lucrului cu baza de date din linia de comand6.rirlu.nhpuato. .@.growf. n.1odif ice. Noi avem cdtevacdrli in baza de date insi nici una nu are pre! sau datd (de fapt valorile sunt 0 pentruprel l9i 0000-00-00 pentru datd).La fel. data este in format yyyy-mm-dd (ex: 2003_ /x Ludm titlul gi descrierea nou din din baza de date pentru a le afiga in con_ troalele formularului deoarecedin figierul precedent am primit decato singulA nu variabild. .descriere.(oc. Ca incepdtori in progamare v_atiputea simti ftustra! decomplexitatea ghilimele_ lor. Leg.*. din bu_ tonul radio (<input type:'radio' name:'id-carte' value=.id-carte.desc!iere'l S_POSTt tid_carte.. [.acotu a tLtl. I Pranr'<rnput nafre="tit1u'' value="'. TIPS&TRJCKS { print .Vom aveanevore de acestedate in capitoleleurmdtoaxe.

t6 pentru cdutare pentru cei gribili sau gata hotirdli penmr ca acegtia poat. Vit na librariei noastrevirtuale va prezentautilizatomlui atat domen i i l ed e c a n ed i s p o n i b i lc d l r i c e l em a i e qi noi ca(i adAugatc precumqi cele mai populare. serulde caraclere titlul paginii.pnp parteade jos a paginii Aceastdstruchrd o vom folosi pentru toate paginile site-ului si in afard de conlinutul paginii care diferS.l d m l y r v 4 . A r r o l .Menirea ei este sd ofere utilizatorului motivele pentru a continua radi mai mult ti eventual sa sA fie imediat interesatsi cumperece avem de oferit. Toatepaginilevor avea aceea$istructud: conectare.folosindtot ce am in\alal pdnd acum.ORGANTZARE. Vom afla pe parcurs mai rnulte tip. .ca de exemplunotila de copyrightde la sfixgit.o1s</a P. doar informalia despre cartearespectivd.php va contine toate domeniiledecartedisponibileastlelincdt ele si fie accesibilein odce moment de . orice pagind din site-ul nostru nu va conJine decatelementele relevante careseregdsesc doar in ea:pe homepage c e l em a i n o i c a 4 i . PHP ne oferd func1iainclude cu care le puteminclude cadrulscriprului 'd in 5i le refolosim in orice alt script in care avem nevoiede ele hra sa febuiascA sA le scriem din nou. TNTRODUCERE TNSTALARE. </body> </hlml> Pagina meniu. e!i!i bold.l <body <img bgcolor="+f ff ff f"> src="1o9o. Structura fiecdrei pagini din site-ul nostru. s. logo-ul 9i imediat dupd.@. " ADtvINtsTRARE. .me.v o g e l b u i d a . Unele elemente sunt prezentepe toate paginile din acest site. h1 lfonr-family: Tines New xil Roman. fon 'siz-: coroi: l4px. aa.nsseight: J l o n L . conectarea la bazq de date parteade sus a paginii Fisierul page top.php Fiqierulconectarc.php va conline tagurile clasice careseincepe filier cu un gi HTML.qif"> .-A h'.pnp mysqt connec! ("1ocalhos!".sfatul melr estesd scrieti codul prezentataici Si se il testafi voi ingiv[. instrucfiunile de conectarela baza de date sau prima parte in care specificdm titlul.php sc em noti. ""). Vom face intai cudtenie in Dooument root (c:\Program files\Apache Group\ Apache\htodcs). conlrnutul paginii page_rop. Ca qi pdne acum. "roor". d o ro . w w w ..php in page bottom. ' v o g e l Burda .Apoi asigurali-vd c d s e r v e r u lM y S Q L e s l e p o r n i t g i deschidefieditorul PHP preferat. ) coLor: +336699.tade copyright Si inchidem toatetagurile deschise.mysql_connect gi myiql_relecl_db carele vom folosipe pe fiecare pagind a site-ului.Vom mai avea$i o cAsu.p d-ign-"_-_r-r " . Astfel. _rl.i sd rapid ceeace ii intereseazi. Primapagindestede fapt o combinalie din mai multe pagini. setul de caracterefolosit $i stilul CSS. MysQr.onr.r-"hL page bottom. indilerent primapagind. and trickr caresa ne faca muncaii mai uqoari.php conlinecele va doud instruc. daca este pagina de domeniu saupagina cu detalii desprecarte. celelalte dmanpractic neschimbate.u l u i na d nostru.i n p a g i n a e d o m e n i u d lista c54ilor din domeniul respectivqi in pagina cu detalii.o-2i type:"teat/css"> Primapagini O primd pagind ahactivi este vitald pentrusuccesulunuisite. vom refoLe losi. Ion' - * 0 0 6 6 C C .php page top.EDTToRTAL. gA. multe concepte pot p6r€a greu de digerat pe hafiie $i foafie u$or de inleles in pmcticS.va arataastfel: CHIP SPECIAL SITEDINAMIC -.tiuni. deschide tabelul ce urmeazdsd cuprindi meniul qi r n n t i n r r t rr l n r o i n i i ' conectare.$tergeli sau mutati fiEiereledeja existenteacolo pentru a nu vi incurca mai departe. scriind frecaredin ele intr-un fiqier separat apoi incluzdndule atunci cdnd $i avem nevoie de ele. r o " > & c o p y .. p: / </table> . conlinutul paginii ^r^a h^tf^m nhn '' <iirle>librdria <style nea</rirle> -pq. Ttps&TRtcKS Grearea siteului Noul site pas cu pas Putefi si uitati corvoada modificirilor qi upload-urilor zilnice: cunoaqte{isuficient incit si puteli crea un site dinamic si interactiv! a c e \ t c a p i t o lr o m f a c e p a g i n ac u ln l p a g i n i s e c t i u n e a v i g a b i la s i r e . weighl]: bold. font style: italic.

ina Mai utor decet Copy&Paste Cu ajutorul filrlcliei irclude putem refolosi bucili de cod fdrd si fie nevoie si le scricm ori de cate od avem nevoie de ele. in el vom tb:6'il-"-4" i':. Dacii setalca L]Rl_fopen_wrappers esteactivaE in php. in ordine crescitoare (Aventun.-#*" "H. method-"cET. tr.Eb . \ "!9!r9!!p _ <!d <d1v valiqn-"top" style-"width: 120px.pxidt variabile. ffi-m|Fl <td vaiign="top. // vogel Burda ro.a mai departe.texr. reluAndmodul pHp atunci cirno lermind de eraluat fi$ierul respectiv. padding:4px.' Prima pagine contine cele mai importante elemente.submit.manual. solid +632415 1px. cate o imagine in format JPEG de 75 de pixeli lifme 9i 100de pixeli inil{ime pentru liecarc copertd a ci4ilor din baza de index. d dolel' '._l adduga conlinut din baza de date astlel incatsi arem o primd pagini dinamica. $rou { tnume domeniu' I ..Variabilele.> pasine</ht> frai noi c. Ttps&TRtcKS pe orice pagind a site-ului.. Mai simplu.id 5ESC i. . ) . . indiferent dacd este cod PIIP precum instrucliunile de conectarc la baza de daie sauHTML precum notila de copyrighr de pe fiecarepigina a site-ului.rrab.php/. :::"-.php? ... Putelitansfem fi5ierepe server lolosind formulare5i PHP insd.. Putem deci sd scrien direct scriptul pentru afigareanumelor de domenii. .php nu il vom accesadirect ci il includem dupi ce am inclus figierul conectare. ORGAN|ZARE ..r'. acestmomentsuntem in conectalilabazadedate. |NSTALARE MysQL .Li6r. 'v. putem crea. p eL fpov clr tirlu.EDIToRTAL . |NTRODUCERE . aceasta pentu cd parserul iese din modul Pl{P la incepurulfi5ierului inclus 5i rrecein mod HTML.. php.5 f :""'""'r . etc.. anciude ("page-top.32. i.lMrT 0. Biogafii.r -"''"rt"' . <h1>tiilul copyright. sdcreemun fiqierindex. backgroundborder: colo!:.- .).F9r1E7.) * "SELEC! id-carte.> Astfel. <f ornl acrion=.<td atign=.. $i.""l-"_J..variabilal..ro.o o n Observim ci fiqierele care contin cod PHP febuie se confne tagurile <? Si ?>. pentru mar multd siguranld. Dacd nu.utare</b><br> <INPUT type=.). * Sd punem imaginea copenei./ .>&copy comunications</a></p> a. cdltii cu id_carte=2 qi a.scriphrlnostruseva uita in directorul coperte$i doar dacdva gisi imaginea.....) ..iara 9resursa mysql ./ 1" > solid <b>A1ege doneniul</b><HR 9sqL = "SELECT * FROU donenii BY nlme doneniu Sresursa ASC'. f...cAvom lacedupA a$a cum urmeaz5: dacdavemimaginepentru copeftA. Toate acesteimagini le vom pune intr-un ("meni!.hrnl.html <body bgcolor=.. hrnl//) .'. va1!e=.rli</b> <h1>P.php "un text conginut i. iiqierul variabiLe.. f ry s q l _ f e t c h _ a r r a y (Sresursa) ) { /* deschiden celula rabelllDi HTML */ print . Iati clun includem trei fitiere in alhrl: top.ii</h1> <b>ceie fiSierul variabile. oo. Trebuie doar sdscriem pi4ile refolosibile in fi$iere separatepe care s6 le accesam ahmci cand avem nevoie de ele.iia mea . afigdm un OHIPSPECIAL SITEDINAMTC ..': tr. sugerez consultalimanuava sd lul PHPde peCD dacd doritis6aflalimai multe. ">' l <div sryle=//Hidrh:120px.si o /dc.. Clasici.o-r: +532415 1px. oRDER B!.. <p>Un text oarecarej</p> icl auro!=autori. vogelburda.pi1p.conecr:are. Privili penhu un moment cum va arAta pagma noastrd dup6 ce vom termina de scriscodul.#FFFFCc"> paqi...d_ 'olo-:4 9! r': oodo o:apr...php.@.iabi1e.td .cauta!e.htrp: sww. .:..clude director numit coperte in document root.deoarece figierul meniu.cenler">.> php/. backqrou. cum subiectuldepA$e$te tema propusa.5Lost'ro oo--n. cAndafigdminformat'a despre cartea cu id_carte=3putem sdii afiqim gi coperta folosind<img src:"coper1e/3 jpg'>.inainte de a afiga imaginea. " ADtvilNtsTMRE . 5i Este posibil ca nu pentru toate cdrtile saa! em o imagine.air damnumele copcrta cd4ii cuid cartFl. queiy (gsql) .php. <tabre cellpadding="5i> $i iata9i fi$ierulcarele folosettepetoate acestea: /* in urmitoarea interogareselectdm informatiile desprecelemai noi trei cdrti 5i le afi5dmpe fiecareinr-o celula de tabel: */ Ssql include p!rnr ("va. in final.html <p><a href=..> s ize=.rnt puteli include chiar !i fi$iere aflate pe alte servere: include("http://wwwchip. php. oRDER = mysql-query(gsq1) nysql ferch airay{Sresursa) ) { prin! r<a href="domeniu. size*"12"><br> <INPUT type=.php care sd le cuprindi pe toate..) . rncrDde ("copyriqht.cuvan!. a--o."AreimaginiqipAnd ni nimic despre imagini!".. . precum 9i casetade cdutare.> <b>C.. .:. phF.2 jpg pentu coperta incldde ('.imi gi imaginezce veJispune: acumnu aspusnime.php_ date Ijpg penn-u Si.caurE.urctiile gi resunele din figierele inclusesunl disponibile in cadrul lcriptulul dupi ce au fost incluse. WHEFI carti. . r. autor inctude ("top.. o va afiga..) .ane=/.o afiqdm.

EDITORIAL . . . I re s ursaca !re=mysqL_qJe ry ( Ssqica !te ) . lei l nume autor. Afl6m care sunt cele mai vandute ce4i. INSTALARE .e</div>. Sroivanzari l 'id caxre').t Si continudmcu scriptulPHP: */ heigh!: i 0Opx.. ! ">.ay = (SresDrsavanzarrr r l print'<b><a h. modificdnd doar interogareaSQL. Puteli rula aceastd intercgarein linia de comanddpentru a I \<div style="widrh:75px. autord o --. solid. +/ /* Valorile din acest query sunt trei id cafie din tabelul vAnziri care corespundcelormaitreivendute cifti$i numdrul total de bucafi vandutedin fiecare. <b>Cele <rab1e nai popuLare carti</b> cellpadding='/5"> /* Care sunt cele mai popularecdrti? CHIPSPEOIAL SIIE DINA]\IIC /x Acum avem toate datele care ne intereseaza: id carte (din interogarea $sqlvanzari).Vom folosi acesteid-uri pentru a intercga.. < / a></b>. gmpdm id-urile.D Y id B oRDER BY 0. titlul.cu fiecaredin ele.zaTi = "sErlc? id ca. hei9ha=":00'!><br>' .sroscarte['pret.interogarea retuma 0 dndud va ( n i c i o e a n e v d n d u r d5 i n u \ a a p a r e a t nimic peprimapaginiin sectiunea.. (Sadresalfraqine ) ) it (li1e_e:ists Definireaunui aliassepoatefacefolo{ sind AS ca in SELECT sum(nr buc) AS pra... Puteti adeugao .numele pre[rl:*/ autorului. FROM carti.9rou[' .Fird imagine"..prima pagind a site-ului nostru.e.iresaImaql./</i><br> iei * NotAexpiicalrvA ind aceastA pri\ interogare: tabelulr dn-/ari inlereseaTd din ne Comentariile utilizatorilor la aceastd doud coloane: id_cate gi nr_buc (ci4i carte.titlul. a l i S d m a y e r u lD I V i n c a r es c r i c.t-"10!'><br>.)pq"i sum(nr buc). </i> <br>Pret: t.i TRUE dacafi5ierul specificar existd qi FALSE dacl nu existd. pri.bazade date$i a afla titlul.t . numele autorului qi numdrulde bucd{ivdndute. ADIYINISTRARE . " creati insta. l F. PHP.> de l .Funcliafile_existsreturnea.' /* inchidem celula <td> cu care arn inceput structura while.+/ r: (f ile exists (Sa.ef="carle. DacSfigierul exista. ". SresursavanzariaysqI query(ssqlvanzari) .te!">. TIPS&TRICK layer DIV in care scriemsimplu. IU1i.= "' toidih="?5" Cele mai vAndute. jpq".tragemo linie de separare dupb care vom scrie acelagi cod pentru cele mai populare cdrti..3 ". intotdeaunainformatiile de pe ea vor h la zi. carte=. ...$io{t.ntca alias deoarecenu am fi ridr4="r5" hei9.re. autorul 9i prelul fiecireia din ele:*/ while {Srowvarzari frysql 1 9sqlcarte ='SEIECT plet iirtu. putut face ordonarea direct ORDER BY l sum(bucativandute).t'<img bucatiVandute.esarmaqine) ) '<imq sr.. While va afiqa toate cele trei ci4. IiHERa cart!. t. include ("Faqe botrom. border | 1px black height:100px. INTRODUCERE .r_buc) Va. Sd lc afi. interogarea cu urmdtoare.". ORGANIZARE .l * A d r e s a i m a g i n i i r a'fc o p e n e j p g ' i l penh'ucarteacu id carte l. gtiind ca aceastase afl5 in directorul coperte. consultdnd tabelulvdnzSri. bucativandute defapt = \\copeite/ este Fadresaimagine un alias pentru coloana creatd ad-hoc. selectate interogain rea SQL 9i pentru fiecare din ele va pa$iide mai sus. */ $sqiva. @@ .Srcw['!ret']. L i|riria mea AS bucaiivanduae ca:ie GROU.zaii sum{. fetc! ar. autorr .ra l background-co1or:*cccccc.. auior.im: +/ Acestaa fost index. .or l\D I rid 9rowva.'o. ] .. FROM J i r J l : r 9 . bucatava4drte DEsc L]MIT print "' . $adresaIfraqine.php.9rowcarte[ \nue autor.e . gro'i t 'rd = "coperte" . print !<b><a hief="carre.arre. /* Sdcontinudm afigarea cu restuluide informafi. vedearezultatula9acum il oferdMySQL.php?1d Sronvanza:i lrld \titru' Sforcarfe[ ca.. f a r d l imagine": */ l prtr'<div style="width:75px.za!i carte/ ] .. * Daci nu exisla fisierul \peclficar.*/ repeta ) /* Am terminat cu cele mai noi cdrti..Cele mai populare c54i". putem afla numirul de total de bucdti vindute din fiecare carte folosind functia MySQL : whi le (Sroacarte sum(nr buc).il afiqdm. Inchidemtabelul.-br> <r>. Vom compune intdi adresa imaginii.. oe ] .desigur.nrme Prer:'.:+cccccc. SadresaImaqi. jd pnp? rd_carte='.php"). definir Am aceasrd coloand src="' .ra background co1o. ... bucatiVandute). bucSf vandutedin fiecare(ORDER BY pr1. J i .Dacd.Id-urilele ordondm apoidesftysql-fetch array (Sresursacarte) ) crcscdtor in funcfie de numdrul total de '<td aiign="ce.:d d_o. ].'> tragine</div>/ .. border: 1pz bLack solid. Srou I rtitlu' caxte' ). /</a></b><b. Dacdnu aveli nici un fel de datein tabelul vanzdri.SQL .> inaqi. F.. Introduceli ceteva date in acesttabel.i. vAndute). are acela$i nume ca jpg: x/ id cafie ii extensia $a. <i>'.

php vom afi$a certjle ce apa4indomeniului selectat.... . nlme auror.php.pHp.. WHERE d done. ("meniu. </a> I .coperre/. I\4IERE :d_carte=..Sros[. .php? print '<i(g nimic:*/ (Sadresalnaqine) ) src* putefiapela mult mai simplul: la cod ltTlvll.. jp9.a!!o). Domenii A doua pagind pe care o vom scrie este ceacareseocupd domenii.-n src= "' . ]?> rer "'.r. OHIP SPEC]AL SITE DINAMIC . Sa rrecelnla treabdti sii folosim in urmdtorul script aceastd noud facilitate: l <td valign="top. avem imaqine o afi9An. |NTR0DUCERE. ] ?></i> <br>rre!: <?-$rowI rprer. { print'<div border:1px ground style=. in acest script doar interogareaSQL estemai complicatd deoarece... id_autox=aurori. ca!L!r nDme_autor dodenii .'> I ? > </ i r 1 > l < h 1 > < ? = s i o wI \ r i r r u . iar pentru daca conu ) prlnt inuneVariabila.. S!d $resursaNumeDoneniu mysqL query (SsqlNuneDomeniu) . <?-Snumeva!iab11a?> cod HTML id. (rrpage_bortom. S ow. INSTALARE.php.in pagina domeniu.i = mysql-query . $resursaCorentarii nysqr query (ssqlconentarii) mysql fetch_array ($ resursaconentali i. carte.. cartr. backgrolnd-color: imaqine</div>.]. AND carti..Acelagilucru vom lace in continuare. --. (5sq1) . heigbt="100"><br>' l <rd vaLiqn=/'top"> { prinl'<div height: solid.EcT i FROM carre. = mysql query{9sq1). numele autorilor qi preJut. paddin9:5p:"><a hFf="cil or'. don€niu-".e="10"><br>. ] ?>.. il prelucreazd il introducein bazadedate) gi cog..r utilizaLor.5'. carre. = "SE].php: carte..m 1f (ti1e_exisrs I <b><a h!ei="carle. include ] .... or. i!Opx. solid +ffffff.ECT FRoM donenii domeniu. aidtn="75" "' . carti.nume auror.. ! o o n p . = "SELECT ritlu.. php/') . in sA citeascdpdrerile altora desprecaftea respectivdsau si adaugepropria sa opinie. I . tittu. de Am gi scris deja. EDITOR|AL. .php(care prera un comentariu trimis prin formular. . = isqlNuneDomeniu nume_donenru id WBERE domeniu=".d_dona- .sdii dimposibilitateautilizatoruluisi adauge cartea co$.leag6" trci tabele (certi.ECT id_carte/ prer. Dar sd scnem intai codul pentru carte.Sid_calte. ADM|NTSTMRE. php'.) . border: 1px black +cccccc.Sad!esahagine.. ceva mai elaborar. FRoM carti... back- color: +F9F1E?. .php <p><b>op:iniile cititorilor</b></p> $sqLcomentarii comentarlr = nSEl.br> <i>de <"=9row [ . paginacu ajutorul cdreiavom 9i addugasau scoatec54i din coq $i ii vom puteavizualizacon1inutul.' height="100" l hspa. ". <P><t><?=9roil ['descriere' ] ?> <p>Pret: <?=Srou [ . (giesursaNmDomeniu. Sadresahagine .'a.jpq".php") include include ("paqe_top. Atunci cdnd dorili sd afi$ali valoarea unei variabile in cadrul codului HTML.e. Sadresalmagine.. 9row ['comentariu. $sql = "SEi.. 'i de b dlrnglu slp-rncrude ("conecrare.id if (fiLe I print r<img = "coperte" . include ("page_top.S o. =.> <?=9row | 'ti !]u' I ?></ a>< /b>.. avem.-r'so descrlere. ) carle't erists ($adresahagine) Deoarece interogarea retumeaza nu decdtun rAnd.Sid = . FROM descraere. domenii.. <b!>'. in capitolul anterior. . nu afi$.1 . ln acestscriprvom face relerireIa doud fiqiere: comentarii. pozelecoperte1or. id autor include ("neniu.$rowt'nune autorl. t4ysQl.. Fera styte="qidrh:75p:.prer' ] ?> Iei</p> Sid_doneniu ...@. <td valign="top"> <?=SnuneDomeniu?></h1> <b1>Domeniu : <o > L a r E 1 1 n d o n e n l ! t <u><a><?=snlneDomeniu?></i></u> <iab1e cellpadding=.un mic scripr care sd ne afiqeze rapid titlurile cd4ilor dintr-undomeniuales.id Sresursa ul ila's gid_dorcnru..nune dorEniu. in loc sd scriefi: { WHERE id_ca!le='/.. ) . TtpseTRtcKs cafie noui in bazade datepentru a yedea cd apareimediat apoi5i pe primapagina (nu uitali sd mentionali $i data deoarece acestaestecriteriul de ordonare!).> : </b> Mai ar ernde llcut o paginain caresA prezentdm detaliile cdrlii. autoxi AND AND domenii.php") ). 5nlmeDoneniu = nysql-!esu1r 0.autoril dar resrular trebui sa \d parddejafloarela urechel Iatiqiunmictip inainte de a incape. = S _ G E T[ ' i d _ d o n e n i u .nu vom folosi while pentm a itera pdn toate elementelearrayului ci le vom accesadirect.> <td valign-"top"> Sadlesalmagine .php") $id Ssql carte = $_cET['id .'--ne.ca!te=<?=SroN ['id carte. pret o. $id /iDace per!4.autor=auio.s esuL\o. 1d aDror.ORGAN|ZARE. $resursa <td a1ign="center"> ad. s or nysq:....widrh:40opx..

.@. rtps&TRlcK .uceFaraTags srrip l).tairu: <lextaiea <br> nane='/conentariJ// col s=" 4: "></:exrarea><b. $inapoi") .seconecteazd bazade date. cumpArdtorul nostrupoateadiuga s o cane in co5 . pre prima carte vandutA?Nu se pierd odati ce a ieqit din pagina cos...a continue E cartea vizitezesite-u1. pe tot timpul cat estevjzitat site-ul:sesiunile. A$adar.*/ S. header ("location: ' merhod-"9OST"> Nume: <input type="reat" '' n a f re = " n u n e _ ! t i l i z a t o r " > Email: <j.rr:6i. .- ).iding:5px.$ PoSTI'id Putem preveni multe probleme dace folosim strip_tags pentru a elimina tagurile din inputul utilizatorilor..Furi 1e l'|i l /x Dacd execufia scdphllui a ajuns pdnd aici (adici a trecut cu succes de cordilia de mai sus) inseamnacd toate cAmpurileau fbst completate.Trebuie completezi si t o a t ec a m p u r i l e i g r r n t r e r u p e r e c u t i a " car. Din URL'I $i fericirc. t o m i s d afi5eazd mesajul .head{s aiready louFut naned al . rysql query{Ssql).i.[. .r^i. l_.> Gogulde cumpereturi p d N u a r r u i l a tc d m e n i r e a r i n c i p a l a acesfui site nu este doar de a prezenta c64i qi a oferi posibilitateaca utilizatorn si-Ei impdrtdqeascd impresiile despreea ci pi sd cumperelVom facc o singuri pagipaginipentru co5ul curnpa16turide nd cu ajutorul cireia vom putea adeuga.i.s i i p o a ai m p i n o i ri r n p r e ..php? in Am puteaoares5le pSstrdm bazade date?Am putea dar pentru astaar trebui sdcorelim informalia din bazade datecu utilizatorul 9i ar fi destul de complicat. ' .efrai1'] 5 rosl['coeenrari!'] == "" -"" == "") i.ia!qA"></center> */ scriptului i f ( s _ ? o s T[ \ n u m e u t i L i ? a t o r ' ] S PosT['adresa_.><b. TNSTALARE ..p.nr!. " ADI'ITNTSTRARE . . ORGANTZARE . \\dNq cmot r*ioi_s|an0 [Frr:r. {-" - l. c u r d 1 a " p u r u lu r r l i . <b>Adau9: opinia Sirapoi = "carte..ISERT o .p") . <div sryle="wid:h:400px. Seslu n I Sesiunile suntmijloculprin carcputem pistra o scricde infomalii in memone.taritriaraTaqs ' D O S $sql = ".. TNTRODUCERE . Astfel. varUES('.Iati fiqierul adauga-comentariu.".tr f Scome. $comertariuFaraTaqs.php /x Verifici daci toate campurile tormularului de comentariiau fost compler a t e) i d a c do r i c a r e i n e l e a f o . .. border: 1px solao background pa. pnp" ) .r P colcr:+E9F1Dr.i apoi .pebuni de vizitatorul adaugt o carte dreptate:dacd in cog dar apoi doregtesA cumperealti undesepAsteazi informaliile descar1e. Sesiuneanu poate fi pornitd dupe ce am trimis deja un outputcitre browser.ie ( 'page boitom. CHIP SP]CIAL SITTDI}IAX{IC ' ". eHe..php care prelucrcazd inlormalianimi. "' ) ". conenLariu) ca::e'I. \proerm 6l*\apmhe\hrdos\5 lnP 2) in { Drog.- flm: .l value="A. E bine sd folosim strip tags pentru a . Amputea sdtimitem infotmaliile demai depaneprin sprecaneacumparata aqa ar fi prea complicat. aclresa_efrai1.s 5 Dl'p onl&e 1 IN?O comenrarii @ (id_carie.i. Dar nc inainte c incepe intrebim.FhF?id.> <input t!pe="liCoe..i -:tr]]!rq!l $nt send nson.Inlo.a prin lormularsi o introducein baza de date: adauga comentariu. modificasau'coatecani din cossi aslain mai pulin de 100 de linii de cod. G|* " /* Folosim din motive de securitate functiastrip lagspenhua eliminataguile HTML qi PHP din toate stringurile trimise de utilizator... 'i. prinl roate "Trebuie sa .-caite=". PHP ne oferd o metodd foafie uqoard qi la indemdni de a pistra infolmaliile.ompleiezi in paginafiecdreica4i avernun lorm ul r r c u l j u t o r u lc i r u i l u t i l i z a t o r sii .r !". a t o r i l o r o r i c e in de cod potential rAuvoitor.'. la prelucreazd infomaiiile transmise din de fomular gi le introduceinbaza date:x/ include ("conecraxe.he lmter .t carte' $ PaJST [ ] .MysQL EDTTORTAL .pui lype-"tesl" email"><br><b.c1!. +632 415.hf es ^l n."> ta: </b> utilizatorulcdtre /* Apoi redirec!iondm paginacd4ii la carc a adeugat comenun tarru:x/ L i6rorio*ea ." carte" carte:>"> ryFe="sibnit" lame="id Codul HTML Si PHP a fost Comentariulapare ca text simplu! value-"<?=Sid <certer><inp. naFe-"aclresa cone. r i lp r e c u mi l i ' t a t e r imprcsiilor deja addugate...a. nume uirlrzator.. t0ranl mea ::. Informaliile despre sau ci4ile deja adaugatein coq se vor laqs (s PosT[ \nuqe ur:i]:zatcr/ = email'j SenaliFaraTags sLrip tags (S PosTlradresa = c .

php care scdel: in stocdm doud valori: 1.ED|TOR|AL INSTA|-ARE .. Home € .o. Pe unele sistemeWindows. $ _ S E S S I O NI r a l t a v a l i a b i l a ' De ce nu vedem valorile gi pe a patra pagina? PenFuca nu am continuat sesiunea cu session start. MysQL pHp. inainte de a folosi aceastdvariabih pentru a stoca informatii trebuie sd apelemfunctia predefinitd session_stado. in pagina l. 1.. configurafia dvs. p h p_ _ session sLarr O .r€ e e.."<br>" .ini 9i sd serali chiar voi directonrl temporarunde sd fie pdstratesesiunile.d hfqt-"t. nu afigem nimic utilizatorului prant 9_SESSIoN[ 'titln. _ Rulali-l in browser. session_start trebuie folosit intotdeauna inainte de a trimite date citre browser altfel primim un mesaj de eroare: 5 p_l:'p print "hello start sesslon_start{). 6 t l d d Back irt t.php session_sta!t O . ..intr-o sesiune datelepotfi salyateintr-o variabild de tip array. O .pup lotostm dln nou session_start dupA careafigdmtoatedatele stocatepani acum in aceasti sesiune: 3. ] = *!n text _ qorldl<b!>".s 5 . .T I ra ltavariabila.sunt stocatepe server directorul penbx fiqiere temporare. ORGANIZARE ...t I sEssION['tit]u. va trebui sd deschideJi php. "Dune...php: 4. FW File Edit VIBW Favoites lools Help + .. Daci primi{r un mesajde eroare(Waming!).*'l€: r'tlqfir'*rr...vort6 rooE Hap Aceasta reguldesrevalabildchiar gi penhu tag-ul <html> carenu produceun efectr izibil in brouser.o.<b!>".php">pagina a doua</a> s$rsiil File Edit Vicw Falo te' Took Help Eroare: datele stocate in sesiune nu sunt disponibile deoarece nu am reinitializatsesiunea.php">pagina a trela</a> session Fib Edt vi* F. a l 0 d Back . " " AD|'IN|STMRE . i .php Pomim sesiuneaSi addugim catevadate in ea. eslecorecta. numite $-SESSION. Reinilializemsesiunea porniti in pagina anterioareSi maiadAugdmdatein ea_ in pagina 2.spre deosebire de cookie-uri.<cr>. intotdeaunatrebuie sd reinitializdm sesiuneafolosind session start inainte de a adauga sau m a n i p u l a\ a l o r i i n s e s i u n e P e l e n g a : a c e a s t a . Poatefi necesarsd repomili serviciul Apachepentrucamodificdrile s6fie aplicate. a Informa{iile din sesiune. Accesa-tiacum pagina. Modificali linia sesslon. ca un array multidimensional: StitrD[1] $auro!l1l Stitlu l2l = "Dune" ' = "Frank Herbert. pdtro. Cum salvdm totuqi mai mult decdt o carte? Folosind variabilele de sesiunepentru a stoca array-uri.php inilializdm sesiunea qr File Edit View Favo tes Tools Help ln pagtnaJ. session_start O . $ SESSIOT.p S SESSIONIrtirlD. Ttps&TRtcKS pdsftain memorie gi noi le putem accesa doar atunai cand este nevoie. Toate variabilele salvate in aceastd sesiuneau fost afi$ate!Iatd $i 4.. intotdeauna rulali ses\ion_starl inaintede a trimite orice output cdtre browser! Sesiunilene pot ajuta sd pistrdm m memorie informaliile desprecd4ile deja cumpdrate de cdtle un vizitator. " < b r > " . va trebui si setati in php. S .@. . De ajuns cu ...dacAaceasta fost deja pomitd. cum am puteastocavariabilele corespunzatoare fiecirei cd4i..php sessron_srart O .php continudm sesiunea folosind session_start dup6 care mai stocim o variabild: 2 ..m a i e x i s l i o r e s t r i c l i e . sd vedem sesiunilela lucru.ini directorul temporar. s e s s I o N {t a u t a r ' 1 .trrrrir 5top Refresh Home saa. dacddirectorul temporar nu este setat cum tebuie. F'"ri e!D-... O N| <a href="2.' .I '" . Dacd este goald gi nu a1i primit nici un mesaj de eroare. INTRoDUCERE .Pentru a vedea daci configuratia d\s.session start pome$teo sesiune dacdnu existdnicruna s a u o e i n i l i a l i z e a c o n t i n up e c e a e r i s r zi d tentd....:t 5toF Relresh pltnt prin! $ _ s E s s I o N[ \ a $ sEssloN[ 'altavariabila. Iatd. ] . = "Poezii" ' CHIPSPECIAL SITE DINAMIC . estecorecta.limba de lemn". Sesiunile expira dupd 3 ore (pute{i ldsa browserul deschis peste noaple Si dimineala qd reincdrcali o pagind care afiqeazdnigte variabile sesiLrne pentrua \ edea nu de cA sunt acolo) sau dupi ce toate instantele brouseruluisunt inchise. ] .p1a.. + _ .. ]. save_-Path=/ rmp <a href="3. creali un nou fiqier sesiune.9."'ti+ pr. line{i minte.exemplulurmdtor va da aceeaqi eroare: in parh=c: \lemp\ o plp _ Afigdm datele stocate in sesiune in paginile anlerioare..!cr>. print prrnt pri. de exemplu. _ ..

ioooo:o iiooooo Datele din array.d jj sessaon_start o ...sd qi trecem la afigarealor folosind for. /x avem pane acum trei cdr. I[ $ sEssIoN['titlu'] Dwe loea franhE.pentru$i:0. x/ SrotalGeneral = Stotalceneral + 3 . s_SESSIONI'nr_buc' I [] ceneral: Stitlu[0]./ Lo 'j ] t9il . valori intr-un aray incepandde la 0.php // Pomim sesiunea ) Astfel. '<ld>'. 5 sFssIoNl'-iprinr '<rd>'. doar folosind[]. 100000 100000 iI Mlnlhin.'</td>'. ' .scriptul de la inceputul paginiivarecunoa5te suntdaten-imise. Iati cum addugdmincA una: $ stssloNlr!i!1u' I ll = "Dune/'.Adaugd"..ib. La fel vom folosi aray-uri pentru a salva in variabile de sesiune informatiile despre cdrqile cumparate. va fi afi$atd valoarea lui $titlu[0]. La a doua ft tui hw rawB io* Nlb <A href="2. prin! S _ s E s s I o N[ ' p r e t ' print '<td>'.1 . $ _ s E s S I o N [ r a u l o ! ' ]{ l . va afiga Dune [] = "Poezii". 5i < Snrcarti. s _ S ' 5 5 1 O \l t rd>'. S sEssIoN['pret'j lj = 100000.. session stalr O .php session_star! {) . s _ s rs s t o N l \ d r .php.Legendele Olimpului" pentm $titlu[3]. "Poezii". pentru $i : I valoarealui $titluf I I 9i agamai departepdndcdnd cdnd seajungela limita reprezentatd numirul de d€ elementedin array.php Sautor [] = "aLexandru Mitru".. $i < SnrElementelnAlray.'r iooooo iooooo r. DacAaceasta prima accesare este a scriptului. '</td>' .p h p sessron start O .. prima cafie addugatdin co$ este Dune de Frank Herbert iar a doua. nespecificdnd un numdr. TNSTALARE . lon". Variabila $totalceneral va fi inilializatd la prima rulare a loop-ului $i va avea valoareatotalului primei ce4i..php">pagina a doua</a> 2.a m s p e c i f i c a tn i c i u n n u m A r deoarece folosind [] datelesuntadeugate automat la sfhrEitul array-ului qi astfel vom avear aloarea . Sdvedem acum cum am puteafolosl rm singur figier penbu a addugacd4i in tabel. fo!(Si .i.php $rirlu Stirlu $titl\r prin! [] [] [] 'I\Dune". r'. Butonul Adauga €stedefinit in codul HTML ca <input typF"submit" valur "Adzugd"' name-'butrcnulAdaugi' iar variabilatrimisd cdhe scriphrlPHP va fi :'Aclaugd'. mai Verificarea o folosim folosind fmcfa isset careretumeaziTRIJE dacdo variabilda fost :fiiiat'zafa. S sEssIoN{'autor/ I [] = "l4ihai Bainescu". [ '<td>' . va trec€de aceastisecriune. depafie. S _ s E s s I o N [ ' n rb u c ' ] l l = 1.. folosind cate un rdnd de tabel <tr> penhu fiecare carte: +/ p.Seiacem intdi un mic exerciliu.inainte de a afi$a formularul.rb. Dacd a fost apdsatscriptrl va introducedateleir variabilede sesirme. d c t l d '. vom adiuga aceasdvaloarela totalul general. olinpului". insi. test. daci nu. = "Leqendele // olinpului".lS l.php in care vom avea un formular al cdrui action sd fie chiar test. Vomprofita de fapn cA orice cod PHP se pe er.. folosind for: $titlu $titlull Stitlu [] [] = "Dune".. afigate sub forma de tabel. S sEssIoN['prer'] tl = 100000. eHe @.EDtToRtAL TNTRoDUCERE MysQL . l prin! plint '</lable>' 'Toaal .eculd sener gi abiaapoioutput-ulsiu esre trimiscatrebro\a Salacemun fiiier ser..pentru Poezii va fi I buc x 100000lei = 100000lei in timp ce pentru Manualul de geografie va fi 30 buc x 50000lei : 1500000 lei+/ 9 s E s s I o N t ! n r _ b u c ' ll $ i l S sEssIoN 'pret' ] {5i1. ORGAN|ZARE .le cd va salvain variabile de sesiune apoi le va $i afiSaintr-rn tabel. /x calculim gi c6t estetotalul pentru aceastd carte. test. $i++) = "Legendele { for(Si 9i++) = 0. vom acliuga in variabile sesiune de datele n-imise chiarprin folmular. print print '<!r>'t '<ld>'. S _ S E S S I O N I ' n r _ b u c '] . o ! ' l f s r l . $toLa]. /* inainte de a incheia loop-ul.9ivom aecepestecoduldeadAugare in variabile de sesiune. Atunci valoareasa va fi suma totaludlor. /x ne ajunge sA $tim cate titlud sunt pentru a obline intai numArul de c64i cumpercte(numirul de rAnduridin tabel. numdrul de loop-uri din for)*/ $nicarti = count($_sEssIoNI'titru'l ) . Sd $_POST['butonulAclauga'] _ CHIPSPECIAL SITEDINAMIC . = "Poezii". 30. Ttps&TRtcK Sautort2l = "Mihai Eminescu".nici un fel de datenu vor fi fost trimise.."<b!>'/. dupd formular." F x a n k H e r b e r ! " . t"p.Js.' '-d i { plint 9ti!1u[$i]. Operatorul l] pentru adiugarea de valori intr-un array ne va folosi penhu a nu line tot timpul minte ce numtu seafld inlre paranlezele Puremsa adAugam ll. I Il = "Manuat de $_SESSTON '!i!1u' | S. \ . rularea loop-ului va aveaaceastavaloare plus valoarea totalului celei de-a doua ce4i $i ata mai departe pAni c6nd se terminca loop-ul.int slirlu[2].SESSION['auror'] S sEssIoN[\prer'] [] ll = "Popescu = 50000. nici Iati spre exemplu cum am putea accesa valorile anay-ului specificind valoarea indexului numeric: 7. // va afiga Legendele olinpului $i iati cum acceslm toate valorile aray-ului.$! 1000110 100000 1 M. prin! $Lota] : * /'F Verificdm daci a fost apdsat butonul .."Adaugd".Dacd apoi complerdm cdmpurile lormuJamlu gi apasam butonul .t. " " " AD|\I|N|STRARE .ti cumperate. Slotalceneral. r. Astfel.0. _buc'l_S' . Sdtrecemprin 3 fiqiere. Poezii de Mihai Eminescu. presupunAnd in ci fiecare se cumpdrd cete o carte: 1.J.

TNTRODUCERE ADIYINISTMRE .inseamd 'au trimis valorile pentru cempurile s l n r b u c . iar dacd nu.$ sEssroNl'pret'l!$il b < r .phP" nerho. Pret: Nrbuc: f. $ . $lotalcenera'. name*.EDTToRTAL . r'*@ /x Sd afiqdmacum formulalul a cdrui ac(iuneva fi acelaqifiEier:*/ <iorm aciion="test. codul urmdtor este cd ignora. 5 sEssloN t'prer'I ISi] . 1 > '. acest rf (isset (5 PosT [ \buionulAdauga'] )) name-"auior"></td> < Snrcarti. '<td>' ..pentru Poezii va fi I buc x aceastd in l00000lei: 100000lei timp cepentru Manualul de geografie va fi 30 buc x lei*/ 50000lei : 1500000 '| ON .. $ s E s s I o N' n r b u . Atunci valoareasa va fi suma totalurilor. La a doua rularea loop-ului va aveaaceastdvaloare plus valoarea totalului celei de-a doua cd4i $i ata mai departe pAnd cdnd se termincd loop-ul. adduga aceastd Variabila $totalceneral va fi inilializati la prima rulare a loop-ului gi va avea Tabelul afigeaza toate variabilele de sesiune. b c' I butonul .S sEssIoN['ritIu'l < t d > ' . naRe="tir1u"></id> <rd>Aulor: <td><inpu]] </ td> tyle="lexr" Datele trimise cu aiutoru I formularului au fost adaugatein variabilede sesiune iar apoi afigatein tabel. tabel <tr> pentru fiecare carte: */ print'<tabie boxder-"1" cetlpadding="4!>' . print .f o l o s i mi n d e x u n u m e r i c p e c i - /* Iar in final afi$dm toate od4ile din lblosind ceteun rand de aceasti sesiune. 51++) { <td>Pret: </ td> <td><input iype-"iext" { !rint print pri.r o s T { ' n r b ! c ' l . 'autor' ] . storal .slart O. INSTALARE .i rosTl'titlu'l.. $.sEssIoN[ 'a!tor' ] Il = S-I1lsT[ ! q ) SI r b r ' -_5'-s.'</td>' Prinr '</rr>' .l="post"> Cum am putea lolosi acelaqifiEier gt pentru a modifica sau a tterge cd4i din listd? Putem include tabelul cu lista caqilor inlr-un formular 5i sd folosim elemente tip <input type="text'> pende tru valorile care specificl numlrul de buceli pentru fiecare carte in parte..iar dacdnu.lu -{lttor Total Generzl: * A m a d a u g a lo a t e a t e l er i m i s e n t i t d POST in variabile de sesiunex/ l Formularulcu ajutorulcaruiavom sto' ca datein variabilede sesiune9i tabelul in care afigem variabilele stocate deia in memorie. DINAI. vom valoarela totalul general.i6t"rc"r"-t/*qr* hr53oo "1"ryr*1tl" FE#rcl General: Ti.... Dacdnu. dac6variabilaa fost tdmrsa (daci a fost apdsat buionul)x/ if (i sset (s_tosr { 'buronurAdauqa' I ) ) Fih edt "lifl rarql:6 f@lt Hdp 5top J Rdr6h l d H@e { Tidu se /* Dacii butonul a fost apdsat. = Stotalceneral + $totaL. . */ $totaLceneral l print print '</iable>' 'Tota1 .@@. S S E S S l O N { ' n r l c ' I t S i j prini <td><input type="submir" name-"bu!onulAdauga" varue="Adaug. S sEssioNl'autor'l ll =S Posr['autor'].. cellspacinq="0" l* inainte de a incheia loop-ul. 0RGANIZARE .pret. '. [ s_sEssroN['plet'] ll = 5 rosr['Prer' r. ' ] l l = $ . TIPS&TRICKS verifictur! deci. .-Adaugi" cArtiin acesl pentrua ad5uga cod executAm cod esteignont: */ listd. '<td>' .Modi/* DacAa fost ap5sat fict' executim acestcodpentm a n.rodifica valori. executa aceir cod. M)6QL PHP. F"r"""dt valoareatotalului primei cd4i.r -c'1."></td> /* calculdm qi cat estetotalul penfu carte.'></rd> ] tFil < td>N_r buc: </td> <rd><!rPut nane="nr tlPe="lezt" buc"></ td> prinr '<td>' . scriptulignorl codul dintre parantezele lui if qi trece {} mai depate +/ 5 S E S S T O N [ ' r i r L u '[ . <td>Titlr:</Ld> <td><irp!t type="text" // Pomim sesiunea session.t '<tr>'.. '-'' for(5i = 0.Dacaa foslapisal. Ne arrayvom loloside laptulca elemenlele ului $ SESSION['pret']sunt ordonate incepand Ia0 penru a specide crescilurfica in elementeleinput 9i indexul numeric al array-ului carene va fi folositor pentru a opera modiftcdrile. o l $ s E s s I o N [ ' p r e i ' ][ ] = $ P o s T' p r e i ' l . 5i 5 S O\'\ :l ' ' * Daci a fostapasal butonul . s E s s 1 o N[ ' a l r o r ' tSij s sassroNl'rftlD'l!l ..l ] = s r o s T { r t i t r u r ] .o\'r.'{IC CHIPSPECIAL SI1'E .

r Ed r.El estein momentul de fald impd4it in cinci pdrfi distincte: . "'> name="nr buc tr.> Folosind formulare putem modifica valorile stocate deja in sesiune.pentru a doua carte: .ncnrn' nrimo .al: ' .rfp i-p-L Lwe 'r6xr' -a-e. 1/ /* inainte de a incheia loop-ul.' lsit.Srota1. codul va fi executatastfel: .t'_ r. */ StotalGeneraL - Sd recapitulem.(nu existA variabila $_POST['butonulAdauga'])."1e". prinl'<td><input tlpe-'.pe="text" nane="autor/'></td></!r> <td>Pret:</td> <td><rnput tyPe=.codul pentru modificarea numdrului de cirli. <td><input nafre-"nr <td><input type="subnit...se trece peste codul de modificare deoarece a fost apisatbutonul. b..pomirea/rein ilializarea sesiuniil . . . astlel...@." nome'nr ou..o... $i < c o u n t( s _ s E s s I o N t l t l u . . incluslv ultima caxetocmai a fost introdusd.Modi nu fici" (nu a fost transmisd variabila $_POST['butonulModifi ca'] deoarece estein alt formular!)...J['nr nahe-"titlu"></td></tr> <td>Au!or: <td><inplt </rd> l!."rr bucl0' .rr i for(Si . Variabila $totalceneral va fi initializat6 la prima rulare a loop-ului gi va avea valoareatotalului primei cafti.post.butonulModifica' ])) <rd><b>Tirlu</b></Ld> <td><b>Autor</b></rd> <td><b>!!et</b></td> <td><b>Nr br.inoJL -1.rc</b></td> prrnt 'Total cene. La a doua rulare a loop-ului va aveaaceaste valoare plus valoarea totalului celei de-a doua cdrJi qi aga mai departe pdni c6nd se termini loop-ul. SITE DINAMIC ..lf 3_ . php" method="post.afiSarea formularului pentru adiugare de ca4i.-t ls SLSSION. . execuliascriptului nostru. . print '< /tr>' .s_SLS51c. .. . .se ahqeazdlista de cirfi.I1 $: < 9nrcartl..text.. Si++) = 0. { olinL p_u .PHP.. vom adluga aceastd valoarelatotalul general. . !ame="butonulAdauga" value="AdauSe"></td></ti> /* Iar in final afi$amtoate c54ile din aceastdsesiune intr-un tabel..s€ t€ce $i p€ste codul de modificare deoarece afostapisatbutomrl nu Modifici (nu existnvariabila$-POST['butomrlModifi ca']). /' buc'] lsil .\ rd>. $totalceneral.. Atunci valoareasava fi suma totalurilor. <td>Tit1u: <rd><input </id> tyPe=. $i++) <td><b>rf oral</b></rd> { S_sEssIoN \nr_buc'I tSil I S-PosT 'nr_buc'I lSil. folosind pseudocod. lui La prima rulare a scriptului.'l value="'.E &ED[OR|AL..l2l cellspacing-.codul pentru adiugareade elemente in variabilele de sesiune.se pome$tesesiunea. .|NTRoDUcERE.'> prinl '<table>. Noi le actualizdmpetoate.php" nethod=.j ] /* Am folosit for pentru a trece prin toate elementele array-ului $ SESSION deoarece estecel mai simplu: ['ff_buc'] toatevalorilese rrimit prin formuiarindiferentdacAsuntmodihcatesaunu. va = 100000lei 100000lei intimpcepentru Manualulde geografie h 30 buc x va 50000 : 1500000 lei lei*/ Srotal = 9_sEssIoN [ . . valorile modihcu cate saunu.afigarea qi listei de cErJi a formularupentru modificare.text.id>'. DacA utilizatorul a completat formularul pentru addugare.. tr a trera caxte: ' :apul ryDe nr bL.. prin!'<td>.?e.se afigeazdformularul.se afigeazdlista de cdrli.S lSsICNr' rpFr'.seexecuti codul de adAugare (existd variabila $ POST['butonulAdauga']).ADM|NlSTMR Ificat atunci cAndvom fi creat cdmpurile <inpu> ale formularului.er'/></td></rr> <tcDNr buc:</td> tt'pe='/lext" buc"></td></tr> $ SESSIoNI'pret' I l$il ..*/ * Sa afiSdm acum formularul cdrui a ac{iuneva fi acelagifiqier:*/ o ir <forn actior="test. folosind cateun rand de tabel <tr> pentru fiecare carte'.se afigeazdformularul.s_gsscN'utl Lc>' . scriptul esterulat astfel: .*/ if (isset (S PosT [ . I l = sn!.nr_buc.$_sEsslo:. I iSi] " nane="p. gi /* calculam cat estetotalulpentru aceastA pentrxPoezii fi 1 bucx carte. { for{Si = 0. . . CHIPSPECIAI.Pentru cempul pret avem un elementde tip input care specifici indexul numeric al array-ului.</ld>..texiL.. l' l <form <tab1e action=?'les border="1n "> na$e="buronulModif value="Modificd"> ica" ! .0RGANlZARE"|YysQL.se reinitializeazi sesiunea.setrece peste coduldeadiugaredeoarece nu a fbst apdsat butonul Adaugd.5i./0" ceilPaddinq='/4 Indexul numeric dinhe patantezele lui nr buc[] esteacela5i cel din varicu .|NSTALARE. I [] ).

s E s S I o Nr p r e t ' ] t l = S p o s r t ' p r e t ' l .l tol. $_sEssIONI rnr_buc. PHP. _POSTI bucl[t]-5 $ nr qi $ POST['nr-buc'][2]=34. I lgil ] // $i totalul general: prrna'<tx><td aIign=. ] t g i l = s rosr [ 'noulNrBD.9 sEssloN[ \pier. TIPS&TRICKS abilade sesiune $_SESSION[.l. [ l.. I $i++) s _ s E s s l o N[ ' n r _ b u c . dar esre actu S sEsSIoa{' t rr // buc' l t2 I =$_posT rnr-buc. S S E s s J o N [ ' nL i i c ' ] f l j = S .> <INPUT type="submit. ] <ld valign="top'.) .mbuc.. se executA acestcod: */ if (lsser (5 cEr [ S cEr | 'acii!ne.Din lbrmular ne-au fost fansmise valorile pentrutrcicd4i. <td align=.l). value="Cunp6r.lISi] .> <tab1e border="1" "> celrspacinq="0" cel lpadding="4 <tr bgcolor="#F9tlE7. vatue=/. in forla formularul de modificare!)..l { for (Si=O. sEssIoNl..:id carre.Similar. I .. ($ sEssIoNt'pret. l ?>.> <INPUT type=/'hldden. se executi acestcod: */ i f ( i s s e r( S G E ? [ l a c r i u .' ) ' size=. cu srngura diferenlS cd formulaml pentru addugarea ce4ii in listd seva afla in paginade carte. intre informaliile despre carle gi opiniile utilizatorilor: <form action= " c o s . in co9</b></ colspan="3!'><b>Totat rd<rd '</b> a1i9!-"right"*>'.s-sEssroi [ \nlre. . . s _ s E s s r o N [ \ r i t l u .. lei</td</tr>' .> <INPUT type=.l. se modific.. 5 i .@. ADMINISTMRE . .. INTRODUCERE . . $i in loc sd cumpere10.. + = S GErt'acriune. vatue: "< ?:9 rowca rte [ .. counr (9_sEssioNI .se afi5eazd formularul addugarc: din cdmpurileascunse de (hidden)prin me. . <rd><b>carre</b></td> Acest formular va arita un singur bu<rd><b>Fret</b></td> ton pe pagind. p h p ?a c t i u n e = a d a u g a . t 34. o ' F e scriplulpenlrulesr.S POST'n!me autor. Si__.. Atunci cand apasdbutonul .) = Sroralceneral l$il * )..php5i adaugatiurmitorul formular. I t$i].....> l <INPUT type="hidden..nr buc. ("meniu. <?=Srowcarre [ \tirtu. include lnclude gactiune {"page-top. ] I$i1 .. * mta . irotalGe.I tSit sesslon I php. method="POST. Butonul pe care vor apdsa utilizatorii atunci cand doresc se cumDere.> de cunperEturi</h1> cos .se afigeazi lista de ci4i cu modil o d a P O S I .$ POSTI'nr_buc'][0]:7(modificatin formuiarr. (F sESsJoNl'pret'l /* Dacd este setatd variabila $_GETI'actiune'] $i valoarea acestela este "adauga".nodlfica..][] gi astfelva fi util pentru a actualizavalole stocatein sesiune. p o s T t . value="<?=5 id_carte?>.. [ // 7.php. ] lSil .php.nr-buc'ltl = 1..PosT. CHIPSPECIAL SITE DINAMIC .i. P e l a n g i a c e . Si < ficirile efectuate..I ) .Ir uitati in sursa documentului HTML delimitacoduldeaddugare informaJiilor a value="'.EDITORIAL .hidden. nume_autor.. acumt. ]?>/> <INPUT type="hidden.sd ra sa Vom folosi aceastAvadabild pentru a n a m e = " n o u l N r B u cI \ .eral include ("conectare.artor.. ) /* Dacd este setatd variabila $ GET['actiune'] $i valoareaacesteia este. Iati codul penhu cos. ]actiune't I ) &! == .$totatceneral..$ sEssroN[ 1nr-buc.t carre' I I . nane=" id_carte. o i . php?actiune+odi fica <h1>Coqul <FORM a ction=" merhod=. ) .se reinilializeazi sesiunea. value= "<?=Srowcarte I rpret.riqht. dar <rd><b>Tota1</b></rd> trimiresi inlormariile careneintereseaza.righr.se trece peste codul de adiugare (nu exrstivariabila$-POSTI'butonulAdauga.r c s r t h ! b u c . d ..> nane="pret" name="lit1u7' 5 S E S S I O N i ' ! t i t t u 'l [ l = $ . ! // 5.. Trecemprin fiecareelemental anay-ului folosind for qi actualizdm toate valorile. 2> (View Source)din cAndincdnd(mai ales in variabile de sesiune. ] [ s i ] _/ < / D vom avea action:"cos.> buc<//b></rd> <rd><rr>Nr.. ^n se modiflca dar esre acru- La cumpirituri Penhx co$ulnostrude cumpirdturi vom folosi aproape acelagi cod. execufiascriptului va fi.. S sESsIoNl.. ] ?>. autor.>. e / ] ) & & 5 G E r[ ! a c t i u n e / ] = = " a d a u q a " ) I S sEssIo![ rid c]te/ I tl=$-Rl-ert'id crte. cumpfuddoar 7. .. IV]YSQL . Deschideri cane. .Cumpird acum'.I tsil) .. ^D se frodific.Atunci: 5 sEssIoN 'nr-buc' ] Iol-S roSTt \nr_b!c.php?actiune= de ' .>/ 'Li7rdia isq€lp . ' r 6 y . tei</!a> starr O . t e ar a m a i for(9i = 0. r i r l u ' $ s E s S I o N ' n u m ea u i o r . modificatesaunu (estemai ugora5a decdtsd verificdm care au fost modificate qi sd Ie ach|alzim doar pe acelea). I I2l .php: <rd align*"!:ght.php?actiune-adauga'.] t 1 t . ORGANIZARE ..Modifici'. Sd presupunemcd utilizatorul modifi cinumirul debucdtipentruprimacarte..seexecuti codulpentrumodificare. il rulali. I l l l . trimite $i o variabild de tip cET. ] ..)...modifica". INSTALARE .</id> modifica". mulanrl de modilicare a cirlitor din listd < t d > < b > ' .php. $ GET['actiune'] : "adauga"(din URL{ Cel mai indicat fi sAscriet chiar\ oi ar i ul action:"cos. Si<counr($_SEssroN....

cumpareturile</a></td> <rd <ing ridrn="200" src="casa..php adaugali urmASi torul cod inainte de </td>: { S s E s s l o N[ ' n r b u c ' l t $ i ] .. <1nput lype="subnit" f icd"><br><b!> <b>0</b> se le pent!! din c5rlile coSL ] I Stotalvaloare for(5! = 0.php. Stotalvaloare = Stotalvaloare buc'I I$il I I$il ) .</a> Acum clrlile cu 0 ca numar de bucAti nu vor mai fi afi$ate. in consecintd qi vom modificaloop-ulpentrua specihca condiliade afiqare: CNIPSPECIAI_ SITEDINAMIC FI Acun numdrul de c6r1i din cog va fi pe pagtni undearem 5i disponibil fiecare meniul.$ sEsSIoN['nr buc.Sterse" cogul de cumperd. i d _ c a r t e .modificali numarul de c54i pentru a vedeacum funcfloneazd. adiugali ctuti in cog. nundruL de buc.. 5i < c o u n t ( S s E s s I o N [ . Deschideti index. Numdrul Si valoarea cdrtilor din co9 sunt afigate tot timpul deoarece pestrem aceste informalii in variabile de sesiune. 9 _ s E S s I c Nr n ' r e . ] Igil . $roralceneraL = $tolalceneral ( $ _ S E s s I o N [ ' p r e t ' jt S i ] * F _ s E S s I o r i' n r b u c ' ] l $ i l ) .0. bo cJ. Si < 0. Informatiileafigatein pagina cogului de cumpereturi sunt consistente cu cele afigatein meniu *632415 1px"> <b>co9</b><b!> Cedile .php") . align=.. De:.. .chideti meniu. . SS E s s I o Nr tt i r l u ' I [ $ i ] . TIPS&TRI for(5i . .-"right"> '. php") . afiseazA randul*/ nu e $i++) { <td><input type-"rext" I" ..mcisevor fi transmis deja date cAtre browser.li 0. I 1f (9 sEssloNI'ni_buc'ltS!l1= 0) /* doar dac.tilordin loopul for: fiecare rand este afigat doar dacd numirul de buc61inu este0.onlinutul cogului l</a> Li|rdrid mta \ar igariprin paginilelibririei r irruale. $i. IUIISQL ETIE @. .q:4p\. ORGANIZARE ..php caae. < t d > < b > ' ..Mai avemo problemdderezolvat: cum scoatem cani din co5? Purempune num6rulde bucili ca 0 pentru carteape care nu donm sAo cumpfudminsd caxtea aparein 1ist6. tot Putemcondiliona afigarea cdr.. * + (S sEssloNi !. .' Iei</rd> <id a1i9n="righ:">. pentru o mar bund odentarea utilizatorului. Spuneam1ainceputul acesn-ri Special cd vom pune pe toatepaginile site-uluro casetdcarese confindvaloareainsumatd a cdrlilor din co5.. domeniu. ] | S i l .> Cogulde cumparituri.php">Mergi J l ) ' t ) a vedea . Trebuiesi adduga{i sessionstart la inceputul fiecirei pagini pe care apare meniul deoarece lucdm cu variabile de sesiune nu puteminilializa in sesiunea 5i rneniu deoarece pdni ah.€</h1> <tr><ld <ang width="20!" gif"> aLign="center"> src="cos.. chiar dace totalul este 0.php in 5i Si fiecare adAugatila inceput s€ssion start: session-start O. INSTAIARE . / I . ADIYINISTMRE . ("paqe rop.> g:f"> ra cas.ame="nouINrEuc I r. $i++) va1!e*"Modi Introduceli ce dolif: scoateli <h1>Continua.cenrer.EDITORIAL . din turi sunt incd afigate. I <td alig. I Lei</td></tr>' .' value=". (S-sEssIoN '!ret' ] [S1] * [ 5 s E s s I o N r n r _ b u c '] [ S i ] ) .. Aceasti casetd o vom pune in meniul din stenga..r $_sEssroNl'pret' l Aveti <b><?=9nrCarti?></b> car!i in <b><?=Sto!atvaloare?></b> Iei.. <a href="casa..$ sEssIoNI'pret'l ISi].] ) . include incrude {"conectare. count (9 sEssloN['tit1u']). [ ' + 'o o solid :s o L-j F"dd. INTRODUCERE .a u t o r .

<tr><rc>/. < / b > d e .) . .1> Acestea sunt carliLe comandate de <td><INPUT .. cu un mesaj de multumire.4YSQL*' . < / r d > [ 'd b. $ s E s s I o N. i e i r F!otalcener6t = StotalGeaerat + ( F S E S S r O l i t . adresa servemlui SMTP este greqitd sau serviciul SMTp nu estepomit la adresarespectivd...). prelucrare.l r f e lr e l i p r i m i u n i r mesaj de eroare.:d><b>!ret</b></td> <rd><b>TotaI</b></td> inclu. de alrfelvegiprimi rnesajulla adresadvs. <rd><b>Ca!ae</b></td> <. c .ra inrroduce noud inregistrare o in tabelullran/actii cu numele. (. nu eu) qi rula{i scriptulin browser. ] I S i I . ] I s i l ) ..od=. ro SMT! - Dacd sunte{i pe o magind Windows 2000 sau XP puteli seta SMTp = localhost.latd cum arati setarea SMTP in php.> <h1>casa</. va executa urmitoarele acfiuni: . Sd facem intdi fonnularul: <h1>Deial i i</h 1> Numele gi adresaunde dorili sdprimiti cA4ile cumpArate: <fcrm acrion-.q=. Desigur.> <tr bgcolor=. p r e r . ] { s i t _ .aop..><b>Adresa : </b></td> naDe=. .righr">. cellpa. .s o\ . . ..ume.) .Sroia1ceneraL. I. " resti.conectare.php. mesaj l l // Si totalul general: <t...php m a i l ( " o a n a .va verifica dacdadresa estecompletati. t e s r smtp". 1.a.b u c .va verifica dacdnunele estecompletat.. " . . . P e s i s l e m e l ei n u x a c e a s t a l tbloseste sendmail sau qmail pentnr a fflmlte mesaje. $tergend toate d a t e l e a l r a t e n e a d e o a r e cn u m a i e s i e nevotede ele gi ar puteainduceconfuzie in utilizator.mpurilefor_ mularului au fost completate. 1.EDITORIAL ..r o . met. trebuie sd clarificdm un lucru: functia m a i l .ini (din directorulWindows)9i sd lblositi SMTP-ul ISp-ului pentru a trimite emailuri(celpe careil folosili 9i in clientul de mail).=-3..6"></reTrarea></:d> <id va1ig.> tei</rd> <b>. I I $ i l + 5 S E S S T O \ [ ' . n r b u c .5f. <rd><rextarea rous-...></ad> va1!e="Trinite <tab1e border=. !a!e hp sessaon srart {) . i apoi in in facefi un fiqier de test... de email. ( s _ s E s s r o s l.. .-sESsioN[.> La case: numele gi adresa unde utilizatorul va primi certile comandate.Pentruacea\ta \om laceo pagind unde utilizatorul completeaziun formu_ Iar cu numelepi adresa undedoreStc sA comanda5i apoi alrd pagind f'nmeasca care verificd dacd toate c6. .l'pe=.va verifica numdtul cd(ilor din coq a s t f e il n c a tu r i l i z a r o m lan u t r i m i r a o r _ s l data tranzaclieii . 9 s E s s r o N [ . colspa.. '' p r e r .Dacenu sunteli conectati la Intemet..vi va t mite un email de notificare. ) .afi$eazi utilizatorului pagina..1" cellspacing*.l align="riqhr..POST. . { if (S-sEssicN.rexr. sistemele pe Winoows foloseqte SMTP.adiesa. inaintede a trece1ascrierea codului.g. \ . trebuiesdprimiti emailul. 95 sau NT va rrebuj s6 modificafi setddle din php. 6 c n i p . .</b> inlocuili adresamea email cu advs.="Io!.va folosi acestid tranzactie pentrua introduce in tabelul vdnzdri ce4ile co_ mandate..: $ i l * I tnr_bic'I S sEssroN i tsrl). . Dacd sunteti pe o maqind Windows 2000 sau Xp puteti porni serviciul SMTP pentru a trimite emailuri dar dacdaveli Windows 9g... .. si++) cou:!(. INTRODUCERE .t> <td><i!put rype=/.l Win32 only. de (dvs..php: mair. j r s i ] .subni. INSTAI-ARE ORGANIZARE . isp.neni:. ("page aop. for(sr = 0.darserviciul de SMTp trebuiesdfie pomiti facerimodificarea php.ighr. r e i < / r o > <id atiqn-.ini la mine: tmail . ADI4INISTMRE ..adre:a 5i <b>Tota1 <rd de ptau</b></rd> a1ig.right. n ma r r o r .le i!c1!de :ncrude (.></td> <ld valign=/. TIPS&TRICKS La casd Mai avem de Ihcut un singur lucru: plata. mularul llrd :... p r e t . For funcrio. fi cumpdrat reo cane.php.pip..le ("paqe bottom.id.+f9F1E?r> buc</b></rd> <td><b>Nr.'prelucrare _p h p .curd(d" sesiunea. e <td aliqn=.. ......IIC . @. .va lua id_tranzactiecorespunzatof acesteiiffegistrdri.4. F i q i e r u l c a r e p r e l u c r e a z da c e s t e informalii. i s E s sr o N[ . nu estefoarte convenabilsd trebuiasci se fiIi conectali la Internet de cAte ori dorili sA trimiteti un emai pnn CHIP SPECIAL SITEDINAI.. . nai1.introduce informaliile in baza de date.carre. ..ldi.) .veli primi un mesaj eroare... I iSi ] [ t= O) { prrn.numit mail.0. inclu.=. phF. php. nane='.rr-buc.se va conectala baza de date.>. Singurul inconve_ n i e n tp e n r r u r i m i t e r e d e e r n a r l u r i r i n t a p SMTP-ul ISP-uluiestecd trebuiesd fiti c o n e c t a l a l n r e r n e a.> <id><b>Numete I < /b>< / i.. ... Si < ])..trimite admlnlstratoruluiun email 9i afigeazi utili_ zatomlui un mesaj de multumire.

subiectulmesajului. s:. nu retur(darn ici nu neazd nici un mesaj eroare de va trimite emailul). l I I$il .colm($a) : cu 3 elementein timp ce anay sum($a) = 4 +/ (sumaelementelor). sr::e_ SresursaTranzactie . {:i=!. Nu conirndali array_sum count. r:r-i_:Es31c\i r.' border='1' . mesaj sn." de S. ) /* Verificim daciadresaestecompletati iar dacenu e. avem o soluJie simpli pentru aceasti problem6: putem pune operatoml@ in falafuncJieimail qi astfel impicim qi capra qi varza: dacd poatc trimite mail il trimite. if (Snrcaxii /x schimbaliadresa cea1acaredorili cu prFt pltrn 'Trebuie sa crmpeiali cel <6 nrimiti meqr iele */ o carte I <a .[i .'1'. ]). a r . |NSTALARE .cade'] ).date 9nesar : <br><br>". o p r i r n e r e c u l i a scriptului i f ( S P o s T 1 ' n u m e ' l= = I prina 'TrebDie sa completali aunerel . "' . S sEssIoN['nr_buc'] '' b. smesaj -= "Adresa: ".= "<a:><id>" trillu. Astfel. din cadrul structunr for): */ i f o r ( S i = o . <a hrei-"cos. .. Ttps&TRtc intermediul PHP.pnp /* Introducem intai datele in tabelul tmnzactii. $i<counr {S sEssIoN['id. pentru headere adilionale.php lSmail ("oana13chip.r:i><--$". tvtysQl pHp . array sum($a) 4. /* si o rut.. 1. ORGAN|ZARE . daci Sa : = and'1'. sr_-) aoresa. mail. /x numdrul de cirti conandate il afldm rapid.:_bJc' I {$il > 0) . trebuisd facem nici un fel de modificiri. a_siss:a\ "." S s E s s I o N [ ' n r _ b u c '] : 5 i ) . "<b!>"..*/ sessron_unser () .calr i-array_sum == 0) (S-sEssIoN [ 'nr buc. cu data curentl) */ Smesaj .php">inapoi</a>' ") /* Ob(inem id_ul acesteiinregistriri folosind mysql insert id: */ "<. |NTRODUCERF . " ADIVINISTMRE . putem sdne conectdmla bvza de date pentru a Ie introduce: */ snesaj = "o noue conaidi de 1a <b>".= "carrire co*a.IC\ [ r. "' 9 sEssIoNl'id carLe' ) Isi) . iar dacd la un moment da1 dodm sd o transferim pe un p I s e r v ec a r e o a l e r i m i r e m a i l n u v a m a i r e . sA scriem codul pentru figierul prelucrare. Si++) sresaj Snesaj .aFoi</a>' l /* Pentrua compunemesajul ne vom folosi de operatorul. @ .='\</table>".: de concatenare a /* in acest moment toate datele sunt verificate. aray sum($anay) retumeazd sumavalorilor dintr-unarraydaci acesteasrnt numerice.cunpararorr values ( "'. ro". "te st ing" ) . " ' ) " . "test smtp".folosindarray_sum. l varues ( "' .phF">I.EDITOR|AL .= "<iab1e ic."</b><bL>". StotalGeneral. Sid tranzacrie .c</'-d></Lr>"." .. /* Puneniheadereadilionalepentru a tdmite mesajul in format HTML gi encodingul potrivit pentru caracterele <a href="cos. Introducem in tabel doar cinile al cdror numdr de bucati estemai mare ca 0 (in condi{ia if.:alGenera] (s sEssIoN{'!r = StotaLcenelal buc'I ISi] * + S sEssIoN['pret'] ISil ). href -"cos.l I prinr 'Trebnie sa conpretati adresar .apoi</a>' if(S sESsIoN['nr u. $headers) . -* "rotal: "</b>". CHIP SPECIAL SIIE DINAMIC l nu /x Curilim sesiunea deoarece mat avem nevoie de dateledin ea.: // Verificdm daci numele este comp l e t a t .i a r d a c An u e . il putemomite (se va setasingur.m */ /* Acum putem trimite emailul: */ mail (gemailDestinatar.S. e ' ] l . S PosT['.ume']. S losT ['nune'] .urtre_autor' ] [$i] . $ i < c o u n l ( $ _ S E S S I o\N. == "") /* iar acum ludm fiecare carte din sesiune5i o introducem in tabelul vanziri. Ssubiect. [$il . Smesaj. opdm execu.php prelucrare.s :osT I radresa' ]. /* Reinitializdmsesiunea deoarece dorim sd verificdm numirul de cdrli comandatex/ sesston srarr O . Cu acestea ldmurite. <b>".php">i. Din fericire.Deoarece cAmpuldatadintabel estede tip TIMESTAMP. dacdnu. /* Urmeazd sA tdmitem un email de notificare folosind funclia mail. textul mesajului) dar mai poate prelua incd unul.'2'). mail folose$te in p ncipal trei argumente: mail(adresa destinatarului. q A s l l e lp u t e m u c r a i t e s t an c o n t i n u l i are aplicaJiaoffline.0\r\nco!tent-rype: charser:=iso 8859 2\r\n".tia ptusc lui */ if (s rosT['adresa.'] tSil > 3l b I /* cieam interogarea */ $sqlvanzare = "INSERT INTO vanzarr Sheadels = "MIME-version: te:t/hlml. Ssublect = "o noud comandSl". +/ /* elimindm toatevariabileleasociate acesteisesiuni */ session desrroy O .

//localhost/ autor.id nd..pi1p.imeniu.:::rin :.>l.. prrnt selectarea pa4iale a unui cuvdnt.EDITORIAL INSTALARE .l _ .php.1.utar.php..) ..<br><br>...l _ r...php?id_carre=. !iHERE Scuvant. tittu. ori lnlLoe "' (Ssq1) .) .php.php unde . valign="top. uc tude ("paqe bortom. Sd deschidemint6. ' </a>z:Lr> . t ldescriere/t l .t caftl butonului "Cauti" ar fi http://localhost/ W H E R Et i r l u IIKE':.).. ">. astfel: SELECT * FROM table WHERE coloana LIKE ) "yocwattyo". sI ne aducem { amlnte care era comanda SeL pentru .=:: ::: { conanda rinp.php?cuvant:poezll. . adresa paginiidc caurare dupaapasarea Ssql="SElECT id_carte.php. ("meniu. php? prrnt dateri sa ii afi5eze rezultatele o pagi_ pe rd-auto!='.conecrare. <td <:d raliqn=. O . se afld formularul pentru ciutare.clude ("meniu. rPoF a '3" .5roBI'id-carre.L N sauil putemadduga Iisradc Fa\orite\ la l pentru mai tarziu.. $cuvant. .> l</h1> c.:tofr .carte. -orimi sc:ri ali cunpdrar de ta href -"carte..'GET'>).jrltjfrin . Folosili $-GET['id-autor. -$rowl'ritLu."g.autori.Folose_ 'Froul'id carte' 1.) .. afigim rdndurile rezultate*/ Mai averno singuri pagind de fdcut: shile (Srow= nysqt ferch_afay (gresursa) ) cea de cdutare. . /x Interogdmint6i tabelul autori:*/ inclu. I .<a href-. Cu metoda pOST. */ /* Stergemsesiunea + . i f ( m y s q t nDfr xows(Sresursa) == o) AcesrU RL ii pulemapoi trimirealrcuiva pentru a vedeadirect rezultatelecdutdrii -. " ADIIINISTMRE . ) Observagici am ficut referire la un fi$ier inexistent.srowl.Vom ldsa posibilitatea { utilizatorului si cautein bazanoastrdde . <:.Un click pe numele lui Mihai Eminescuin pagina de cdutarene va duce la pagina http.. </blockquore> De ce?Pentruciatunci vomputeaadiuga <b>Titluri</b> in lista Favorites a browserului rezul<blockquore> tatele unei cdutdri. solicirat.srowt'rirlu. tirtu FROl. INTRODUCERE MysQL PHP. TIPS&TRICKS Cdutare /+ Altfel.. .> cdut... "'' 9resursa = nysql-query i* Dacainterogarea nu a retumatnicr un rezultat (0 rdnduri) scriem .paqe rop. while (9 !ou=hysqr-ferch-a rray ( Sresu ! sa ) ) inainte de a scrie codul.t $ a m l. ORGANIZARE .top. o . a.Nici un rcatltat" * / if (nysq1 nun_rows (gresursa) -= o) La fiecarenoue comandd.o..Aceasta va fi tema voastrd..5row J'nume aDtor. am wildcard-ul %.php dar cu GET ea va fr httpl/ Sresursa = nysql qlery(Ssqt).. z a t o r u l u i p a g i n a u j cu mesa... php. = mysqr-query num ross(Sresursa) Scuvant = S GEr[. Ssql = "SELECT id_alror.">.php?id autoFl.. -t.aulor..-. ) .. (.php?id_carte=. r.ie ("!a:.php.gcuvant.:: :: ::: .._F d-. cautare. "<i>Nici un rezuLrar</i>.) .rii</n1> <b><?=Scuvant?> 'hi1e { Srow=nysq1-fetch-affay ( g resursa ) ) <h1>Rezultatete <p>Te:t!L c..top.</a><br>/ . 9Io.php" method-. php. " @..I n l. ) . nume autor .| n a ta -t . ) Observati cd are metoda GET (<form action:"cautaxe. Aceeagicomandi SeL o vom folosi 9i in continuare pentrua inter_ </blocLquote> oga tabelelecarti qi autori dupd cuvdntul <b>Descrieri</b> sau cuvintele scrisede utilizator: $sq] session_starr rnclude include rnclude rncrude (i'lpage.] pentru a i n t e r o gla b c l uc a n i5 i a o b r i n e l i s t a u a l o c CHIP SPECIALSTIE DINAMIC . localhost/cautare. .l(. = "SEIECT id carte... == o) (.cuvanr'l.l.. " (Ssqr) .putem primi email de notificare prrnt -<i>Nici un rezult-at</i>.ulde mullumire: +/ descrrere descriere Sresursa if(hysql I prlnt FROM carti LrKE ..:".:. .<a href=.

TNSTALARE . print \<a href=zautor..phpca exemplu.r iziCu aceslea terminat am tabild" a site-ului nostru. i i. cum se folosegteaceastd functie: . !<a href=?/carte.rd .". == 0) l ].'. Ssrringvecht) ) lata intr-un mic exemplu.. ' . . a fi vechi din slr replace ce urmeanou. Textul cdutat este evidentiat in rezultatele cdutarii.4-r' rvd .IKE FROMcarti W H E R Ed e s c r i e r e !'.>. == 0) ("conecaare. '<br><br>' ... penhu a evidenlia(bold) textul cdutat. . carle.. "> .owt. Sd revenim la cdutarea noastre.. id-a!tor=' nodificat".". php") . .S. 0RGANIZARE . $cuvant. '</a><br>' Librdria rrta nodificat'/.Luati pagina domeniu.. str_replace red' >rext</f ' I d H E P' E _ $lesulsa if 1 print l color=' o4t></b>".i Fdvorites ToEls mysqt ferch array (5resulsa) ) { l $til:u st! replace (Scuvanrf "<b>Scuvant</b>". ("re:r".Cum am putea ahqa rezultatele astfel incat cuvantul sau textul cdutat se fie evidenliate. php.EDTTORIAL . TNTR0DUCERE . $rortrnune-auro!'l).9nune_auror. litlu.latifitierul cautare. d o m e n i i5 i c a u t o r n o ii n l i b r i i r i e a s t l ie l c a t s A nm a i i n u avem vreodatdde-a face cu chinuitoarea linie de comandi. . = frysql_query(Ssql) . ADtytNtsTRARE . pl'p Stex! Slext = "un text oarecale". Sresuxsa if (frysqL num roqs ($resursa) ("menlu. . Sroi l 'id_ca!re' . Doar gdndul cd nu va mai trebui vreodatd sA scrieli un singur tag HTML pentru a adAugaelementenoi pe site ar trebui sd fie mullumire de ajuns! Vom trece in continuarela parteade administrarea site-ului. Ttps&TRlcK descrlere session include include include srart o . ' o 1 FROM aulori ITHERE nume autot II(E . MysQL pHp . ) <td valiqn-"lop"> cdutArii</n1> <b><?-scuvanr?> mysql fetch array ($resursa) ) <h1>Rezultatele <p>Textul ceutat: { $descricre = srr xeplace ($cuvant. StitIu.5row['Itirlu' I . "<b><foar grext) .ECT id carte.rows ($!esursa) "<i>Nici !n rezultat</i>". panea. Back Prrnt un tEr:t oarecafE Exemplu str_replace.. Aceea$ifunclie o vom folosi qi inainte de a afi$a rezultatelecduttuii.'</a><br> ' . /'t "'.osu. FuncJia se folose$tein felul urmdtor: SstringModificat ("textul z... T File \F Edil View ':r. cd4ile scrisede autorul respectiv. srring '\texrul . am licut doar c6ter fi5iere a care poata sd afiSa numar un uda$ de iffegistrdri. if{mysql nlm_rows ($resursa) { prinr l "<i>Nici un rezulta!</i>/'. "<b>Scuvant</b>". I. == 0) . I . I. srowl'descriere'l).. prinr "<i>Nici ur rezulr:at</i>z.php") ("page_top. $desc!iexe."'>' Rezultatele ceuterii pe site Fresulsa = mysql query (SsqL) . Sroq l'id_autor. .undevom vedea c u m p u l e m i n t r o d u c e d q i .la fel ca in Google? Putem folosi func1iastr_replacepentru a inlocur o parte dintr-un string.. $rl]6['titlu']).php modificat astfel incdt sd fie evidenliat textul cdutat: CHIP SPECIAL SITEDINAMIC l ' </a><br>' <b>Descrieri</b> $sql - "SEI. Dupi cum vam promis la inceput..@. ..S FPO|. Ssol ^ELF I ).Php? id_car!€=.php") Scuvanr = 5 CETI'cuvant'l. nysql I fer:ch_array (Sresursa) ) Snume auror (9cuvant/ = str_replace "<b>$cuvant</b>". = mysql_query(5sq1) (nysq1_num. $i asta ftrA prea mult efort.

' INTRoDUCERE .. Si scriem scriptul care CHIP SPECIALS]TE !]]. upload_ 9e ul de liqiere gi manipulareade imagini. verdana... New Roma!.' a srte-ului nostru astfel incet inlormafiile sAfie intotdeauna.o./1o9o. Iaracum araldconlinutultabelului: SEIECT ' !.rpasssordtr </td> <td><INPIJT name-iiparolan></rd> Criptarea folosind md5 nu este re_ versibild (qi astfel nici dvs. nici altcineva nu o va puteaafla chiar dacdare acoes la baza de date). font-weight: font-sty1e: .> content="lexr/htrd.. *En <td><INPUT type="subiit. c u o a n u m i t a o m b i n a t id e n u m eg i c e parold._ foni-size: cotor: 14p:. td lfonr-family: f.'. I2p.. Times.: .inclar" estein general ideeproastA.Iogin.i.trebuieint6i sdavem informa{iile stocatein baza de date. ORGANTZARE . ) h1 {fonl-fanily: serii. Pentru aceasta vom scrie uer fi9iere: . <td align='.: a1.'+ffffff"> <ang src=". Vom in\ d!a$i cum sd oferim acces in aceastdzond doar administratorului sau altor utilizatori auroflzall.A). ryysQl srTE l!ffiFlimr . <meta 11trp-equiv=. charset=iso nea</ri!te> 8e59 2. 1..phpundeverifi cim informatiile transmise lormular.gif{> <h1>Autentif icare</h1> lhp( <FON]{ action-"1ogin.index.. Araal.. sdpoatdconfruntadateledin formular cu celedin bazade date.!. admin. cate una pentrufiecare actiune dorim sa o ce intreprindcm: ddugare. Estemornenur si ne gdndim gi la noi gi la timpul pe care l-amputeacdqtigadaciam aveaointefatd s i m p l d iu s o rd e u t i l i z ap e n r r u a n i p u t S m lareadileriteloraspecle site-ului.vizitabili. hrd satreacA prin lormularul inregrs_ de ttare.la fel putemaveadoarcdtevapagrnr pentru a intoduce informalii noi in baza de date. de in_ c:e-ang la securizarea pAni Ia introducereadatelor. odificare.nE. index. tvpe-"rexilcss"> p.ele fiind accesibilela adresa h@. ^ AA * % . sans-se!i iont_size: Pentrucain urmitorul fiqier.EDITORIAL .c i v o m A pAstra toatefigierelesec{iuniide admmrstrare. cREARE .Co!rent_Type.Vom aveamai multe pagini.la zi.php.. pHp.php. a m moderarecornentariiutilizatori $tergere. cum salvareaparolei .--lam lZcut sectiunea . un utilizator ar puteaaccesa htF://localhost/pagina. o o vom introducein tabel criptatd: INSERT INTO adnin {"adninistrarox".php estepaginape careo vom includeapoi la inceputulfiecarui fiqier din secliuneade administrare..phpcon{ine un simplu for_ mular: .. Trps&TRrcKS Administrare site Stepanul datelor ln acestcapitol ne vom ocupa de sectiunea administrare. sd nu permrtem accesuldecAtadministratoru_ l u i . + 0 0 6 6 C C .!ight">Nume: ttFe='ttexttr </td> iadrln nume . <body bgcolor-.autorizarc.Ea va verifica la fiecareaccesare dac6utili_ zatorul este inregistrat qi are acces pe pagrnarespectivd pemite rulareapagr_ gi bold.. icare"></td> value="Aurentif kFatobr4$+ m pus utilizatorul pe primul plan gi I . * " Accesul in sectiuneade adminisrrare se face pe baze de nume $i parola. Iy: v-..LrES nd5 {"parora") ).. +336699./ /localhost/administrare/ nii doar daci utilizatorul esteiffegistrat.I.Dar. TNSTALARE .dnrn-pa!ora <td><INPUT nane:"nume"></td> atuastratort 323r453e23fa&€ff 9redbfabcd22ccL <td align=ttright">parola: type=. ale A$a cum am aYLrt doar catevapaglm p e n r r u a f i 5 a a i m u l t ec a n i u t i l i / a r o _ a m rilor. Dupi cum spuneam.login..].in bazade dareIibrarie CREATE TABTE adnin adnrn_nume adnia_parola rext tert ( NOT NUl. pi urmdrire comenzi. Va febui se facem pentru aceasta un ruu tabel.le coroborAm din cu celeexistente bazade dategi dacdsunt in corecte. NOT NULI Tines font-size: bold.php unde vom afiga formu_ laml de login . Fdrd aceastl verificare. Id. Sd trecem Ia treabi. 18px. deight: Autentificare Primul lucrupe caretrebuiesdil facem este sa asigurAmaceastd zona..acord5maccesulmai departe . sans-se!if. Creafi un director nou in document r o o ts i d e n u m i ! i ald m i n i s r r a r ei.ROt4 adni!.) in acest tabel vom salva numelc ar parola penhu accesul la sectiunea de administrare. <title>1ibrArla <sty1e body. ei. font (tui_o cotor: l italic.

PHP. r - doue campurilel<br> pentru o ti mar /* Pe ldngd acestea.Ca urmare.fi6rh ] d tbm q sEd.php lainceputul fiecdrei pagini 9i impuqcim astfel trei iepuri dintr-un foc: in acest script inilializim sesiunea. incepdnd cu 5 S E S S I O \ [ ' k e ya d m i n ' ] d e f i n i t i n login.php."'"' '"..chiar dacdnu v-a. I sEssIoN ['parola encriptata'] * salvate in variabile de sesiune sunt aceleaqi cele din baza de date+ cu I Ssql = I'SEIECT'FROM adirin_nuoe=' rND addn ".vom afigaunmesajde eroare s 5 i v o m o p r i e x e c u ! i a c r i p t u l u id a c a numdrul de rdnduri nu e 1): x/ { Prinl 'Nume sau paxolS gre9ite I <br> Crca."' ". IOSTI'nune'1.h Dace numele9i parolasunt valide..php: /x gi verificSm datele.ti$i o pagind admin. PosT['nume'l == "" == "") S Posl['parola'] { .Toate sesiunileau Lrnid unic.tlllllllHiilA. accesuleste acordat.EDITORIAL .administrator" 1a. Ve{i avea acces.daci esteexecutatd cu succes(numele gi parola din formular sunt valide gi corespundcelor din baza de date) ar trebui sAretumeze un singur rdnd din tabelul admin.Sa rescriem figieruladmin.. la de si qi cu sesiuneapomitd cu autorizarea efectuatd.p€ntru a le reverifica mai tdrziu..nd accesdm alte pagini din cadrulsecliuniide administrare. l /* Dacd au fost completate. INSTAI-ARE . . atunci c6.paromrmele.lnrn . .. nu se acordi acces mai departe. Sd facem un alt test: inchideji toate instanlelebrowserului astfelincdt si expire sesiunea. ) File Edit View Fdvo tes Tods Help + En. S sEssIoN ['parola $resursa plerare if($ amandouA campuxile ]l SparolaEncriptata. numelegi parolasrmtcorccte. TIPS&TR|C sdconfrunteinformaliile din formular cu cele din baza de date: administrare/login.' A ' F ' . A ' : ' ' .php documentroot:*/ din /* Criptdm parola trimisd prin lormular tot cu md5. un string careseamdnd rezultaful cu unei criptdri md5. spunem scriptului si incarce prima pagind din sectiuneade administare: */ /+ AceastAinterogare.dacd esteexecutate cu succes(numele gi parola din variabilele de sesiunesunt valide $i corespundcelor din baza de date) ar trebui se retumeze un singur rdnd din tabelul admin.i fEcutd$i veti fi redirec.tia vom acordaaccesul doardacd $i rezultatul retumat are un singur rdnd (maiprecis. r4ysQl ..phpin care scrielitextu . + Fi. con€ctim labaza ne de date 9i verificim autentificarea.SISSION adnin WHERE "' t'nldE_addn'l parola= encriprata']. adnin nune=' ".erificarea r retumdriiunui rezultat este de ajuns pentru a acorda accesul mai departe. Vom folosi autorizare.secliunea admin I de istrare". /* Cu autentificareaficut6. ne conectdmla baza de date pentru a putea confrunta datele.sd trepropriu-zisd. r maresiguranlA.php /* Pomim sesiunea.l " .i .. P€ntru multi programatori. = mysql query($sql)..fr intai dac. Fawt6 ro€h ndp ) la /* Neconectim baza date de deoarece vom reverificadateledin sesiune ou celedin bazade date:*/ /x Verificdm dacdnumeleqi parola 1 8a. stop o E d Refresh Hotne Dacenumelegi parolanu sunt corecte.. carecorespundenumelui gi parolei. $.tiautentificatfolosind formularull Ei bine. putemimpiedica accesul neautodzat daci scriem un mic script de verificare a datelorsesiumr inainte de a incarca odce pagind din secliuneade administrare. - g 5t@ : i R. ORGANIZARE . Dacd nu returneazd exact un rand vom afiga un mesaj de eroare9i vom opri execulia scriptului: */ I /* qi scriem interogarea verihcare: de $sql = rrSEl-ECT * FROM adnin ITHERE AND . r' ".om salra id-ul sesiunii in altl variabilA.tionalicdtre pagina admin.9 adninjarola=. F:r-t. INTRoDUCERE . SparolaEncriptala /x Aceastdinterogare.php caretrebuiesd fie acelaqicu session_id:+/ i f ( $ _ S E S S I O Nk e y _ a d n i n ' l' I l-session idO) { l /* Pdni acum s-au licut toate verificdrile. CREARESITE . Pomim CHIP SPECIAL SITEDINAMIC Fb Eda sd.pl'p /* verific.. ] $ _ S E S S I O N[ ' n u ( e _ a d n i n ' S P o s T[ ' n u m e ' ] .deoarece avem nevoie de dateledin ea: */ session_start o .Iatd codul: autorizare..*/ S s E s S I o N[ ' k e y a d m i n ' ] = s e s s i o n _ i d O .Noi vom extinde protec. pomili din nou un browser $i accesatidirect a&esa http://localhost administrare/admin.. dacd includem acest script in orice fi9ier din secliunea administrare de vom fi 5i gataconectali baza date. Folosim figierul conectare.Vom cem la autentificarea folosi variabilede sesiune penftu a plsha in memorie cdtevainformatii despreautentificare.. pentru a o avea in fomatul in care ea existd in baza de date: */ SparolaEncriprata{ds (5_POSr ['parola' ]).php. dupa care accesatiadresahnp:'/localhostadminiskare $i aulentificali-va cu qi parola . Autentificareava f. au fos! i/ con- int6i sesiunea dupd caretrecemla salvarea informaliilor in ea: */ sesslon starr O .

:L8Fx.pt cdre pnm<)1e n .php sessron sta.. admin_top.. CHIP SPECIATS1IE DINAIIIC .eturn true.php) include alte doud pagini(meniu. L i|rdria mea 1nc1!de (".o". l d c d a t e .r a t r e b u i aa v e ml i n k . e du date citre browser). verifici awori- /r 5i verifici autorizareafolosind func1iadefinitd in figienrl pe caretocmar l-am inclus. nre ad":in.e="text/css p.a.nenzi </ a></ a d m i n i s t r a r c m i n . top. /co. de acum asigurate! rn. . td lfonr-fanity: sans-seri f.t / a .php (include auronzare. <title>tibr6xia <stYr e body/ Arial. a vcnlicd autoizarea) ma'n.c e a s tr. u n r a p c p late din ca&ul lui. CREARESTTE@. phpn ) . " TIPS&TRICKS Inchideti toate instanlelebrowserului !rzatalori</a></id> pentrua$tergesesiunea (dac6v-aIilogat) $r apol accesaliadresahttp://localhost/ href="conerzi . t o r u e x e m p l un c a r e p a g i n ia s e c r i uin I i o i de administrare (test.it4px.oho trare.nii. |NSTALARE. style: iralic. o r . .. .c..php veli vedea gi aomrn.I admin toD.. t= 1) I .Accasra primapagind pagiesle i". nile de pe sec{iunea administraresunt de r. e c o n e c r e a / :o a l . p. p h p .s e conecteaz labazadcdate. Decdt si le scriem de fiecare datd ""!e -it 3 cdnd avem nevoie de ele. de Vom primi mesajul. . BB59-2'. l r d : d ad ( l trecetiprin formularul aurentificare).='. \ e F i c . :irr . . {fonr family: sans-serrf. Aceastl funclie o putem apoi apela oricAndavem nevoie de ea (cu conditia sd fie definitd intai !).ier care sd Seocupecu autorrzarea esteo solutie nu r i a b i l a .ni-size: coror: :. / a > < / href="nodif I4odificd <rd><A icare sau stergere.s-SESSIONt. font-size: Tines/ font'1{eight: i.0RGAN|ZARE pHp.key adnin/l session_l. .: bold.Dacele-ati completatcorect. e e x c m p l up ul e ma \ e a u r m a D ..' ..' .co.Acces neauto zatl. Atunci ar trebui sd includem figierul autonzare.." Uneori. e .php).php">Opiiii meniu.. SresJrsa if (5 SESSIONl. lti! 1!:.Lrde (. Iatd structura celor patru fi$iere: L ( \ . p h p s e r e i n i l i a l i .> AND adnin.php (include auronzarc. p h p9 i m a i n . o 6 . t= e.e35t.. ?imes f.phppe care sI il accesdm atunci cdnd avem nevoie Si in care scdem gi instrucliunile <html>.> :r. S STSSION .u n c r i c o e penru a face autorizarea) meniu. a : : q : < . restul textului nu va mai fi afigat! $i Accesali acum http://localhost/admrntsS i m o d i l i c d m c u m ra d m i n . A.'aurori zare. esre Fnm! paq n. tyySQL. a rS tj o l o i e s t c .php (se apeleazi funclia de autorizare$i seacordasaunu accesul) main php (se apeleaTafunctia dc autorizare$i seacordi f_autorizare.nt -:1:I: : .c .ED|TORIAL. mai bine le scriern intr-un fiqier. s e c o r e .php carepome$tesesiunea.p p | 'lcruoc duroflTare. .( u m f u n c l i a e a u r o r d rzare estc definiti in figierul . ud e d " l e .phpqi main.l = mysqt_query ty.php.e f in e ! l e h d f un c r .r"t <TABLE bgcoic:=" ing=" 0" celipadd::g='. care sd faci autodzarea.:="::i:f <rnq sr.> =:9: tE? " celtspacOo.php" >c. i u n e a . ctarset=iso mea</tit1e> "> verdana.php care p o r n e i t e s e s i u n e a . New Roman. d a c dm e n i u .lu{le { "adii. f autorizare.php /* include figierul f autorizare. conecteazd se la baza de date qi declard funcfia de autorizare*/ I nc1!de (" f _a!toiizare.parola=' ['parola conl:ent="text/htnL. ] l fest. o d i .. i n m e n i u . + O D 6 6 C CJ ... Atuncr putem creao functie declarati de noi. e . +336699. r r c r r u c r a u r o . i u n c a . ia a s 5 trare/ $i completali formularul de autenincludcm acestfigier in el: tificare. phF" ) .e n 0L a f e f o m c ) l e p .veli alungepe paginaadmin.. dar atunci am primi un mesaj de eroare (se rciilializeazd. etc. includereaunui fi. p h pd i r e c r . Iatd conlinutul :rir t .. (Ssqt) . d e o u t o n . Pentru cA zona de administrare are r . . pe fiecare pagind. 1 J mai multe sectiuDi. |NTRODUCERE. ".phpnu facemdecdtsd verificdm aulorizarea. <mera htrp-equiv-.mamd".') iuncrioc a!rorizar {) A. p p .: f. ] hi {font-fafriIy: serif.c:]pta. <body>.!}jp") . ".lErd sd includem n i c i u n a l r f i . f f '. / e a t a p ac e a u f o 5 tt r i m i . a u m a i np h p . h r e f .. ie:gh. .php*/ if(lautorizatO) { prrn Acces neartorizai I. { Ssql = "SlrrCT .pnp lextui.m+' a FROM adnin I{tiEFE "' adnn " . s S t e r g e r c l.ectare. . p h .'> grerge</a></rd> href="opi.l. ._.u r i e cdtretoate acele secliuni. r e " . a d a u g a r e _! h p " > ! .i O . ..i O I mysql_-nun_rcrs (Sresursa) I return l false. vor face verificarea folosind funcfia deja definitd.ten]]-Typei. i e r . pentru adiugare. al a b a .1.!4j figierului: Obscrvdn cd in cele doudfigiere care suntpartea lui test. I a r a u m a r a r d t a r r u c t u rs i t e .php care sesiunease Pome$te conecteaTd labazade date.. I2px.-size: ba7. 6 o r .php in fiecare din ele. <body og. sesiunea de 3 ori qi in p l u s .D. caiatt l Verdana.q:i'.u i ui in c 5 a acestcaz: 'qrL.-".

php(define$tetunctia tabelul autori ti afi$eazdun mesaj de de autorizare. l h c e a u r o r ' . n. o funcfie estemult m a i u t i l a d e c e tu n f i 5 i e r i n c l u s i n s d ALTER TABLE caTti CHANGE data da|a alegerea estea dvs. i./6 mesaj un de confirmare. helhod="POST'> .u l4l htte:/l ddrcn/adn i ft@/ada4a€. /* codul care se ruleazd dacA este a S t i m d i n e x p e r i e n l c a e s t em u l l m a i autorizat * / simplu sd lucrdm cu cdmpuri de tip TIMESTAMP (se seteazeautomat cu redemcum.formularul pentru introducereautor nou.iar de acum incolo cdmpul data se va seta automat la fiecare NSERT.. trebuie doarsd o apelati.tiaa fost dejadefinitd undeva in executia scriptului. m a r np h p _ Inainte de a crea cele doud fiqiere.> <b>ada!gi carre</b> <td>Domeeiu: </td> <select name=" id_domeniu'r> /* Luimnumelededomeniidinbazade dateEile afiEdmutlizatoruluiintr-o listi drop-down..n c l r a af o . ori il prelucreazd innoducenouacarle in 5i tabelul cafti $i apoi afigeazd mesaj de un confirmare.l:t. .::r':t:. fi convertite.php" ).include pagina admin top.eauiorizatl' data adaugArii ca4ii in baza de date. Pentruacestea vom lolosi o pagina in care vom afiga trei formulare.Lll TtPS&TRtc lYySQL.top. fblose$te aceaste func1icpcnlru a lace autoriza.php (se prlnt .ORGANTZARE PHP. lA". " " sener.i tabelul domenii5i apoiafirea. if(lautorizatO) Pagina prelucrare_adaugare. CREAREslTE. .php").php.1 . I I lMaiurs I lMedicni I lMiloroeie I tf@z I lFolen' I lsF <h1>AdAuqaxe</h1> <b>Adaugd domeniu</b> . inpagina adaugare. pomegtesesiunea. Aceastddati ne folos€$tepentru a afi$a pe prima pagini cele mai noi trei cdfii. meniu nou. Astfel putem obtine un id_domeniucorespunzator domeniulul selectat pe care sd il introducem in tabelul carti +/ Fie Edt vew Falqt6 rooE |+ * . cdteunul pentru fiecare qi altd pagind careva prelucra informatiile din acestefornulare.php va aYeaurmAtoarea { structurd: 'Acces neautorizall' ..ari locoosls @@ includ€ ("admin.. .inclus in tcst. DacAfllnc.fomularul pentru introducerecartg TglI!sry/+ verifrcd doar autortzatea* I noud.!. J l 4 4 r i ! Add'. de date .php vom avea: .^'*I lA'e^*---l lFios.'.EDIToRIAL INTRODUCERE. o d a r i de dou.rtrr.pnp _ o o m e n u n . Addugare in baza de date putem ad5uga trei Iucruri: domenii.Altfel ar fi febuit sdil specificdm no1..Adaug. .t'Acces . .. ( o d a r ar n f 5 r e r u l.nu sevaputeaaccesa de nici bazade date5i vom modificatipul camunul din figiereleincluseferd autorizare! pului: De celemai multe ori. in funclie de care a fost tdmis citre OHIPSPECIAL SITEDINAMIC o". t d e l l n r r . conecteazd baza se Ia gi incarcd inceputul paginii)."".dacda fost trimis al treilea formular. altfel veli primi mesajul Toatevalorile inregistrate anterioryor I include ("meniu.. Fitriatenji doar sdnu IIMES1AMP(10) NOT NUi. . Domeniu dou: <INPUT no!"> tyle-"text" name="domeriu <INPUT type="submit" name-"adauga domenlD" value="Adauqa"> <b>Adargi autor</b> Auto! nou r <INPUT type="text" nou"> name-"auto! <INPUT type="submit" name="adauga-autor" value*. L tordnd med .Ne aducem if(lautorizat{)) a m i n t e i t a b e l uc a n ia r eu n c a m p e t i p c l d DATE numit data in care se slocheazi { pri. folosind fr. . definiti functia de doui ori in cadml aceluiagiscript. m d m .foloscateaceastifunc1ie pentru a confirmare.agaci ne vom conectala Astfel o deflnita noi. ilprelucreazi.:r . il /* codul care re ruleazd dacd este */ autorizat prelucreazi introduce domeniul nouin .tltlllllt+l*. . . ' ..dacda fost trimis primul formular. /* verificd doar autorizarea*/ vommai faceun singurlucru.I Autofno!f- A d a u q l. autori sau cdni noi.t:" !1"::l ." F lTeari! I | Alegerea unui domeniudintr-o lista generatA automat.rnc1ie data curentd). u- A d ' u q . l de eroareFatal error: Cannotredeclare numele functieiQ. .pte J .il inrroduce noul autorin meniu. d r e ae r o d r ef:.php") . INSTALARE.fomularul pentru introducere doinclude("main.dacda fost trimis al doilea formular. Iatd cele doud figiere: aoaugare.

r1!.q. md l Add*.>inapoi</a- l { prlnt . conpletezi numete de domeniul<br> . cREAREllll|ililFE{if ..r"-r.f etch_airay (S.'8"></rexra!ea></rd> <a hre f="adauqare .:.. ra a r valDe="'. plp .'Adause.pret.$rowf domerru'l.doneniu nou. I rnctude {'. ] . )..S_posrl.....) D.ate. - * Verificdm dac6 nu exisradeja in baza de date..r prp "t ". oRGANTzARE . cu mici diferen{e. Dacenu retumeazd inseamni c6 dorre_ 0 Dacd se ince"rca aauaugarea unui domeniu deja existentprimimacest mesaj liltTD (r5 -. "* " r*p.. domeniu_.1s--'l I /" Dacd s-a trimis formularul pentru adaugarede domeniu */ f -. TNsTALARE NrlsQL srTE " . o u .ii ASC. in b...id_a srov [.PosT l. " j J s .dome. r:..-. o r .:4i-it!1!rt !!urt! 1r: !l!!r! !!!r:Lll]]: nu sF €r+5 dej._ <td><INPUT t\?e="subfrii..].EDTToRTAL . Trps&TRrcKs 9sqL = 'SEIECT * FROM done. Llorana..royi.iu exrsiE deja in baza <td><textarea nane="descriere. nahe=. ..8 niul specificatexistddejain bazade date...></td> /x qi afiEdmutilizatorului un mesajde confirmare: */ prinr . afi'am un mesaj de eroare qi oprim executra scriptului: x/ if ($.. Doneniul a <b>'..r.*"..SrowJ..._.*.iJu".". ...ugat in baza de datej<br> <a href-"adaugare. qrery(gsqt). </!> de datel<br> (mysql_. Ssql = "SELECT * FROM domenii WHER!] nme do. . name= # ' ro. rop_pip.S posr[. - * .. t { prany Trebuie t<br> .*/ BY nume arrc: $resursa Asc...'Mau=.il VALUES (nume domeni!) <select nafre=iiid auto!ii> Fi.</oprio.adauga autor.. mysql_query{gsql). Aur. . php" >i napoi</ a>..) i f ( s _ P O S r l ' a u .I == "n) { x Verificam dacd nu esre gol: * _=.un-ro$s (Sresursa) t= "'.z.-. -sa.-r r FROM aurori oRDER /* inainte de a introducenoul nume de domeniuverificlm doudlucruri: sdnu fie gol gi sdnu errsre dejain baza dare.in de cazulin carenumelede domeniuestegol 5auseaflAdejain tabelul domenii.> inapoi</a>.>.. a : - . o r.t a"i *qad..adnin p h D .f nou I Ada.php.." posr' oorp. rows=.. . de datel J t 't ) /* Interogarea retumeazd 0 dnduri daci domeniul nu existdin bazade date.rL .l. med | . . putem acumsdadAugam noul numede dorneniu in baza de date: +/ $sql = "INSERT rNTO dome. #. lcl htF. i <rd>Prel: </td> type-"rext...j ..EdtVewFavdb5roo]5Nelp l'".. u o m e n L ...l.-rS on - mysql-query($sqt) sqi 6r-1 a.r Do !lt!]lt f: . siesursa myscl_query(gsql) nou.) <td>Titlu: <td><INPUT </rd> type="text" naee='.esursa) ) print '<oprion * Verificdm dacd nu existddeja in */ baza de d.</b> ad... o uI: A d a u qI e l include ("autorizare.. dacd s-a trimis formularul de adeugare autor: x/ rf (isset (5 posrt.>inapoi</ fost i|rdria.. <td valign="lop">Descriere : </ld> $rowI'nune ] <b>.". </ aptia. Trebuie s.php.mea !. domeniu' l .adalqare = mrsqi mysql./">'. Nu il vom addugadin nou ci doar vom atenflona utilizatorul de eroare vom 9t inrrerupe ereculia ullerioaraa scriptu_ lui:*/ if I pran Doneniul nou. l."a.5 losT t/d@niu . ..ou...DOs- /* Acelaqi script...>. "adausa_carte" value=. nlme_auto. TNTRoDUCERE . phn.l)) $i listaautorilordin bazade datepoate lr generateautomat_ /x Afi9am 5i lista dropdown cu autori */ Ssql = "c.!> <rd><INpUT <td>Autor: </id> /x Am verificat sd nu fie erod. sa cohpletezi runete autorut!i <a href="adaugare. .Ja r .. ..ritlu-> ORDERBy nlme-domeni! 9resursa \ i print '<oFiion i6 value= .il vom folosi pentru addugarea unui autor nou. <a hre f='. -r-. rr '.

au llee A d a u q !| baza de daiel<br> h. o . Formularul pentru cd4i va con{ine doud cdmpuri: autor qi titlu.d 5l@ Rdrc$ rorc td.r prelul ."r..'r.INSTALARE. dar in mare are acelagimod de funcfionare:*/ ii (isset (9 rosr [ ' adauqa-carre/ ] ) ) Adeugareaunui domeniu nou. i:-rr it:-r {! . * 5i afipim utilizatorului mesaj un de confirmare.php">Inapol</a>' + - 4 9 i l d a - n l .r'Autorut <b>'. .[ iL!D!:l!! Dom€nu.t- "". .€.e " numexicl loc D"'"". r . astlel incat se putem selectaimediat domeniul sau autorul ce dorim sd il $tergem.1i:r.. id_autor-' A\D r 9resursa r !. http://localhost girile. .auror' '". . /* Verificdm dac6 valoareaintrodusd in campul Pre. . 1.phpva con{ine trei formulare: unul pentru numele de domenii. a.r'. pentrua vedeaadiuului..|- I Easi t' id tu_o/ : . [ad*ra l un $i afi5im ulilizatorului mesajde confirmare: */ prrnt 'Carrea a fost adaDgate in baza de darel<br> * oesrera lirrl-eflerc F5ooo A. . 9 _ P O S T [ ' a mysql_query ($sql ) .ir..tllllllllFl![il ... ' ". PHP. '</b> a l lA"ffi_l lAbffiffi... Domenunou.addugat in citeva secunde! = mysql q:ery{9sql). r - /* Am vedficat sdnu fie erori.1.r look d.$-PosTl'autox exisu <a deja in r0rdrm med rri. putem acum sd adiugim noul autor in baza de date: */ $sql = "INSERT Il'rTO aulori (nume-auto!) I A L U E S( ' " . ..rp Modificare gi gtergere de datel <br> . F r p .5_oO.." r . continutulnou al site-ului.. :+!!: . p:et) ". s _ P o s r [' id.. ...to!="'. l= 0) nEe_af. TIPS&TR 9sql = ''SE]-ECT + FROM autori S P o s T[ ' a u t o r WHERE nou'].i Co. mysql_query(Ssqr). '!ALU:S ' ( rirlu.9 "e . autori qi domenii noi in baza de date.. 9resursa !f(mysql /+ Verihcdm dacA titlul. unul pentru numele autorilor qi altul pentru ce4i. Iatdcodul acestui script qiputefi vedea i n i m a g i n ed e I a p a g .5 8 r e z u l t a r u ld u : a s . <a href-"adauqare.I' /x Scriptulpentruaddugarea cd4ii va fi o ideemai complicat deoarece arem mai multe variabile de verificat. g N u m e l ed e d o m e n i i i n u m e l e u l o a rilor le vom afi$a in liste dropdown. */ pri. a ' ' . sunt 9oa1ei<br> a | . descrierea sau prelul nu sunt goale: */ 1l{s PosT[']rirlu'l == "" $_Posrl'descriere'I -= "" S PosT'prer' I == "") l I FIe Edr vbd Favoft65 Todr H.$.i.-_l de <b>1000 lei</b>)<br> . <b>'. descriere.. f- ao'uglI { print 'Campul Pret rrebuie (scrieli se fie <b>:1000 de tip </b> in . .h = frysql_query(Ssql) num rows(Sresursa) piint I Au!orul nou' I .[ Foh.. "') ".laugd I Formularul aiutorulceruiaputem cu adduga rapido carte. "'.lvlysQt. putem */ acumsdadiugdmcarleainbazadedate. s ol id "-\SEP-\-O --r i_dc-F .t-. -.ef-"adalsare. a!tor. S POST['i.testede tip numeric folosind func1iais numeric: */ if ( | is_nuneric (S_Posri'pret' I )) a.PosT['auror nou'I .EDITOR|AL..jr IrX0fdnL med j=l. Accesaliprrma pagind a site- Ce ne facem anrnci cdnd am ldcut o greqealiscriind greqitun numede domeniu sau titlul unei ca4i? Dar daci nu mai avem o cafie in stoc $i dorim sd o scoatemde pe site? Vom scrie trei figiere pentru modificareasau gtergerea elementeale sitede ului nostru. . Numele autorului ra fi disponibilinrr-o lista&opdown. 5. iar titlul cd4ii il vom scrieintr-un <input type="text">. IREARESITE. CHIPSPECIAL S]TE DINAMIC Rulali acestescripturi pentru a introduce ca4i. . INTRoDUCERE. S_F]6II'tjtlu' $_IcsI t/ es6ie@/ 1 ...r". A d a u qI ! J . "r ... "'".. d " .php">hapoi</a>' l /* Am verihcat sd nu fie erori.. l /* Verificim dacd aceast5cafie ru existiideja in baza de date.'. { baza Era Ee !d F!va't.461 1'pret' 1 .h + . FiEierul modificare stergere. "' . "' .iu/I. '</b> { . . 1 p o .dupd doua cdterii: id autor gi titlu. */ $sql = "SEIECT * FROM carti tiHERE I ."". "' .! l d ' o 3a. oRGANlzARE.

. </option>. )- = mysql query(Ssql).. ] . b ..i!i ) lnainte de a gterge cellite dih atror el domenrul._> name= stergere..'Modif ica. php') .vaafigalistaacestora vaafi$a $i mesajul .e s. <b>Selecreaze lul carlii srergr: autorut 9i s. value=". (grow = array (Sresu.sa) ) mysql_fetch ( "a.Acestdomeniunupoate gters fi deoarece sunt cd4i care ii apa4in!.. . . <INPUT t!?e=.| g ) . caie au c. Dacanu erisri nicio cane cu datelemenlionate afi5eazd un mesa.$rowt.. .php" <serecr nane_"id domeniu. I . ORDER BY nume_auto! hysqt while nysql (grow = ferch_array ( Sr e s u r s a ) ) ORDER BY nune-doneniu Sresursa = mysql quexy($sqt).similar. va afisaun mesajcu o cerere confirmare de $r un buton pe care sd apdsdmpenhx a confirma $tergerea... au_ toml..5>SelecteazA E . a afi1a mcsaj de r un cu o cerere de confirmare $i un buton pe caresaapdsdm pentrua confirma gtergerea... ] . ( "adnin... tlow l. formulare_modifi sterqere.SEIECT * FROM dofrenii ASC. 9!e!9e in oaza De aselnenea nu veti un alror de dare dac. afi9a lista acestora$i va afiga mesajul .o!i inclDde zare. php. .. . </oprion>. .dacdafost apisat butonul de $tergere domeniu. > . va verifica intai dacd sunt cd4i in baza de date care corespundautorulut.A donenf. <option vatue=".dacda lost apisat butonul de $tergere autor.top.atunci cdnd se apasi butonul de modificarecarle.gefe.> /x Afigdm 9i lista dropdown cu autori */ Ssql = "SELECT * FROM aurori Asc.dacd s-a apdsatbutonul de $tergere carte. sroF [. afigeazi un lormular cu ajutorul caruia si putem modifica domeniul. si .ARE ORGANIZARE.Acest autor nu poate fi .Modif ic.verifici dacdexistAo cartecu titlul $r autorul menlionate.de. . .fomulare_aoclif *"anod=""Oat.> /+ Afiqdm 9i listadropdowncu autori */ $sql = "SEIECT * FROM auloli ASC".verificAintai dacaexts_ ta o cartein bazade datecareare titlul $i autorul menlionate (titlul este scds de cdtreutili/atorSi trebuie ne asigurdm sd ca l-a scriscorect)./a date.Dacd in schimb canea de existd. Dacd nu existi afigeazd un mesaj de eroare iar dacd e\islaafiSeazd mesaj confirmare un de gi un buton pe care sd apdsdmpentru a confirma gtergerea. nysql_fetch arlay (gresu!sa) ) { prrnt ." I > _ .1 . MYSQL.> <td>Titlu:</td> <td><INPUT type="rexr" narne=. PHP CREARESITEI!ilIIFil'!!|I. query ($sql) . scrie r1!_ . Dacdsunt...'titIu-> <INPU? type-"submit.sterge autor" value=.ren deoarecesunt ci4i in baza de date care ii aparhn!".r'on .</P> ce doregti <.) ..e method="pOST"> ce doresri </b> -odr i-a. <ld>Auior:</td> <select nane=. "modif ica_carre. o o I . INTRODUCERE.. \ a .php" ) .modifica { /x ludmnumele domeniu baza de din CHIPSPECIAT S]'I'E DINAI{IC . O R D E RB y nodificare nume domeniu nune-autor Figierulformulare_modificare_stergerc. va afi$a numele autorului intr-un textbox astfelincat sdil putem modifica. Dacanu estenicj o canescnsa deautorin ba..e3e!.lnin-top.$rowt.ii .. nume_aurox...rSte!9er> /o _e e (eol. <option d o n e n i u .> <INPUT type*rsubmitn aane='. php va prelua informalile din modificare if (isset (g rosTl..erge ele_ dome..php( { prrlr <optron a ... . = . .sterge....ei-_ so <INPUT type="submit.. i] modifici sau $rerqi:</b> oo.' oh-ta..phpqi va afiga cete un formular pentru fiecare caz in parte: . . c _ . ritiul.> /" LuAm numele de domenii din baza de date qi le afi$em utilizatorului intr_o Asrretpulemobllneun ro_domentu corespunzitor domeniului selectat care sd il introducemin tabe_ pe lul carti */ $sql.submit.php_ <INPUt ''sterge Lype="submit" ca!ter value_...id prinl .id_auto!.Srerqe.dacd a fost apdsatbutonul de modi_ ficarenumedomeniu. </ortion>. care exisr5 au acel putea cdrli vaf ue=. Dacd nu este nici o carte in domeniul respecuy. dacda fost apesat butonulde modificare nume autor. nune_autor. name= ''srerge_dofr eniu" vatue=.. o modiiicr sau <fohr aciion='.'aurorizare.> <serecr name-"id autor.FDITORIAL.. . icare_ ste.id .> autor.F1p. nane= value=.a. eroare..vaafiqanumelede domeniu intr-un textbox astfelincat sdil putem modifica.crierea prerulcaqji.id <h1>Modiiicare sau Sterqere</h1> Nu vefi putea in <p><b>Notd:</b> F. Sros [/ nume_dofreniu. TIPS&TRICKS " " Sresursa while rnclude ("au. doneniul .va verifica intai daci suntctu1l i n d o m e n i u lr e 5 p e c r i vD a c a s u n l . */ doneniuft)) acl:ron="f omnl]are modif icare_stergere. l .. INSTAI.' "modif ica_auror" name= modificali incat se aparli..$row[. astrel <INPUT type="subnit.Modif ic.oho care_ incrude include /" (. l va1ue=".r name_ vatue_. "hodif ica-doneniu.

r . ] ?>" > /if 9tergere (isset autor (s_PosT t. domeniu value="<?=g. = mysql nm_roqs (9resursa). afi9dm lista lor gi un mesaj de eroare: x/ 1f (9nrcarti > 0) print "<p>Nu putefi Srerge acest ) /+ modificare numeautor*/ if {isset ($-PosT [.ECT titIu. h*".. h**M l . iddomeniu= ". id_domenlu varue="<?=5 losT {' id_domeniu. I s. id alror= autora autori.Fbp!! (Sxesursa. */ I)) nethod-'r!OST"> <INPUT type='!rexr" !ame="nufre.t $"a" I value="<?=S <INFUT type="submit" {b. nethod=" POSTr'> <INPUT lype="text" nahe=iinune a-tor.^/tu M"d .1)) <rt>9rerge E9ti esl sigur nume dome. "</b> I .FbdM. donenru? /* daca sunt cd4i apa4inand acestui a u t o r . o -"oFl' -zr. id <INPUT type-r'subnit" . 9resursa inrcarri = mysql query{gsqt).a l i 5 i r n l i s r a I o r 5 i u n m e s a jd e eroare: */ if (Snrcarti > 0) a.id-a!ror ferch AND domenii. = nysql num roas(Sresursa)t { /* verificdm daci suntcd4i in bazade date care apa4in acestuidomeniu: */ $sql = "SEI.ame="nodif va1!e="Modi ica_domenlu" iicA " > /x iardacdnu suntcdrliin acest domeniu cerem confirmarea pentru slergere: r r..F I name="modifica value-"Modlfica"> auior " tut.> CHII'SPECIAL SITE I]INAMIC . FROM autori ' whrle ($row = mysqr-fetch_ar!ay (5resu!sa ) ) { print de "<b>i. INSTATARE II''IIiIFilT. { $nrcarri carfi { plinr care "<p>Sut apartin acestDi doneniul</p>..id autor-aurori. /* iar dacd suntcd4i deacest nu autor */ cerem confirmarea pentru$tergere.a. domeniD" val!e="gielqet"> { prant I Frowt' tit1u. $ Posrt' id_auto!' aces! autox? Sresursa s.doneniu" value="<?=9_PosT [. id_domeaiu. AND FRoM carli. "<br>'- ". /x verificdm daci sunt cd4i in bazade date care aparfin acestuiautor: x/ tsql = "SELECT titlu WHEREcarti. PHP. 0/ Gre. MysQL " " TIPS&TRICK de date deoarecene-a fost trimis din formular doar id-ul domeniului: +/ Ssql = ' T S E L E C Tn u m e d o m e n i u fiHERE FROM donenri <h1>ModlficA nuhe autor</h1> . I ?>..ii. { <h1>Sterqe Eqai siqur autor</h1> cd vrei s5 giergi /x luim numele autorului din bazade datedeoarece ne-a fost trimis din forrlular doar id_autor: */ $sql = "SELECT nune_autor t'iHERE id_au!o!= l..a.. 'r .n.u *r in ere tn:nb de a *sqe tol d:d 6in: !:t h b::: de d*.1ifi^"+*/ domeni! l</p>"..rF.. Paginacu vom ca sau Stergeinformatiide pe site.$rowt'rit1u. CREARESITE . /* 9i afiqim numele intr-un textbox nahh.une = mysqr-query(gsqt) = mysql 0. . resull autor acti@-"pre1udaF_nDlif methoci-" POST'r> <INPUT type=trhidden" nane=" id autor" r(re steryere.id carti.. l value="<?=$ POsr{'id autor. "<br>".'fi-^. Srow l'nume_auto!.dD" { pxlnt "<p>S!ni: autor = array (Sresursa) ) in SnrCarti car!i d€ acesi baza de dalel</p>".--l "prelucrare rt"r Md d I sEa. l f . "' (' . ] / l l aulorl</p>". nodifica autor.doneniu'. method="POST"> <INPUT qpe"diddd! narF"id-d(reniu" id_domeniD=don€.-F L t0rdrw med $resursa $dune = mysqt-qlery (5!esDrsa. a!tor?> "> {ssqt) .F Posrl'id domeniu' l . srrerge-a!ror. i Mdn. pdp.-ro @ .brcl. I ?>"> * gi afildm numele vechide domeniu intr-un textbox pentru a fi modificat */ <hl>Modificd <iorm ac!ion= nodif icare stergere. gtergi acrf (isser (S Posll. I . prinL't<p>Nu puteli gterge acesr "nume auto!"). S P o s r t' id-autor/ { ) /+ stergere domeniu */ domeni!. autori.' nume doheniu</ht> "nume domeniu" ) .sterge Fresursa Snrcarti = mysql qrery(Ssql). value="<?=Snume-doneniu?>"> <INPUT lype="hiddenI' naRe="id. l x dac6sunr cdni apanindnd acesrui domeniu. nume autor domenii W]ERE FROM carti.s!bmit" name= while (Sroq nysql AND carti.r..iu</h1> cd vrei s. . I ?>'> <lNP01 "sterge type-.EDITORIAL INTRODUCERE ORGANIZARE . carii.une nysql-resDrt <INPUT type:"hicden" name="id autor" IOST [' id-auror.I ".. autor autor= I .

'text" acLicrF blebe:e-rEd1f i€re_srel9ele.1 $_posT[. ">.trd' _ CHIPSPECIAL SITEDINAMIC . afi$emun mesaj de eroare: */ if (nysql_ns rov's (gresulsacarte) =-0) <td>Doneniu: </td> ) { plint. <td><texta!ea nane="descriere" . I ...Frpii queiy($sqlcarter prrnt .autor Sresulsa = mysql_quely(Ssqt) nysql I if fetch_arlay (g!esu!sa) ) /t cdutdm intai o caxtein baza de date caxe are titlul qi id_autor specificate in formular: */ SsqlCd!Le "SELEC 'ERO|{ cq!tr . ca. </oPtion>'. POSTl. |NSTAIARE. id_autor' AND id_autor-.'<h1>Modificare carre</h1>". ORDER BY nune_doneniu $resursa nysql = array query(Ssql).r Srowcarte I := I) I. </option>'. (Srowl'id-aulo.<option value="' . I.l doneniu. { prlnt.t. atunci extragem informaliile din resursd. </option>. value='. prer. ">' . mysql_fetch 9sql = "SELECT * FROM auioli ASC".l. id_autor. oRGANtzARE.' nane="s!erge_autor" value-"9terqei"> if ($ro{l'id $rowcaltet'id doneniu.textt nane="pe!' I.num_rors ($resursacarte) == o) <tcDAulor F. <optlon jd_doneniu' I . Siowl'nume_domeniu.... ". rirlu' I ?>"> { print .owI' nwte-domeniu.'AceasL.nodi value=. $!ow l ' id_ddlHiu. t descriere' I ?> .'> { ) ] /x qi in final qtergere carte*/ if (isser ($.<?_9rohcarte </Ld></tr> ) l <rNPUt tlpe="hidden" nane-'id_calte't vatuts"<?=$lokcarre <INPUT type=r'subnit'! f ica_ca!te" [? id_carte. . Srowl'nume_autor.<h1>gterge carre</h1>n. g_posTI'id auror.nysql-resutt 0. l .le punem intrun array (nu folosim while deoarece este retumat un singur rdnd!) qi le afigim in lormular pentru a fi modihcate: +/ $rowcarle atay (Sresulsacarte) . ict_carre.POST"> value=. Sresursaca*e*ysql { a-tiF b!e-Lu@G.1d au S r o wt ?n u m e .rcdi f icG slerrFE. $resursacarte . { print . </oPtion>/. carLe -u exjsta in <select nane=ttid_autorn> i </td> name-'. afigam un mesaj de eroare:*/ if (nysql.Srow['id_au { pri-1 .id domeniu"> /* Luim numele de domenii din baza de date qi le afiqdm utlizatorului intr-o liste &op-down.n baza l "Ace-st5 de date'... ] ?>"> /* dacdnu s-agdsitnici o cartecaresd corespundd datelor introduse.. E9!i siglr cA vrei sA 9Gr9i white ($!os nysql_ferch <!d>Tit1u: </td> (Sresu!sa) ) aceaste carte? { <INPST tlzpe=.autor-". /* dacenu s-agdsit nici o cartecaresa corespundd datelor intoduse. I _". Observali folosirea lui ifpentru a afiga ca selectatdomeniul de care aparjtne cartea: */ 9sql = "SELECT * FROM domenii ASCtt. ORDER BY nune..9rowt. <tcl va1i9n-"toptr>Descriere : </td> valuer" . atunci extragemidul c64ii din bazade date gi il vom folosi intr-un cdmp ascunsdin formularul de confirmare: */ { $ad carte .. <option SELECTED method:. '{HERE titlu-' ".. <td>Pret: <Id><INPUT </td> t\@e=t..$.. .posr [?srerge_carre' ] ) ) /x Afigdm 9i lista dropdown cu autori I /* daci existd.nysql-query (gsqtcade) ..'Modlfice.$_POST I'ti!1u.a u t o r .EDlTORtAt. . l.. .owt' /3 cdutim int6i o cartein bazadedatecare */ aretitlulqiid auiorspecificateinformular: ssqlcarLe: " s E I E c T * F R o Mc a r r i attto=. ($resursacarte. I ?>"> value"'.-e de date". I. """*U AND id.titIu. ] ] /* nodificare carre */ carre'])) l i f ( l s s e t ( $ _ P o s T[ ' n o d i f i c a g. <option SEItrECTED I .'.') . nu e:_sLE in baza I <select name=. MysQr-pHp CREARES|TE@) " " Ttps&rRtcKs <INPUT type="subnit. ) l /* iar dacdexisti. 'NTRODUCERE. == l) vatue="<?=$rowcarle I.ows:" 8rr><?=9roeca!te </textaiea></td> { print.

pagina formulare_modificare stergere. { /* Verificdm dacdnoul numede domeniu a fost introdus.!iei de rsa:cA5 moe Fundali. CREARESTTE . mysql ouery(gsqr).. l prelucrare_nodificare stergere..t SsqI id mysql Drint = "DEI-ETE FROiI doeenii domeniu=" .oov d o. .r. C o d u l c s l e u r m a r o r u( s e m nf i c ail\ l i mai simplu decAlcel al fiqierului precedent): l if(S POST['nume autor'l == "") { l I . . elseil. . CHIPSPECIAL SITE IJINAMIIJ * Verificam dacd numelemodifica( al autorului a fost introdus. r r . N-am vrea sd introducem date eronatein baza de datedoar pentruca a sarirpisicape tastaturi)i a apAsal E\TER in timp ce intoduceam datele.. "Numele autorutui a fost modificall'.in caresdprelucrim dateletrimtse pdn acestefbrmulare. S POsr [' id_domeni u' I .iu=r'.wt. .).q id .}? Pentru ci daci nu se executdcodul din if(conditie){ }.(sau) actualizareainformatiilor despre cane... nane=t's!elge varue-"gterge /* modificare nume domeniu +/ rf (isset ($ rOsT['nodifica doneniu.. Li\rdria *ta ':.]r. eibine. $ Fos_rI SET nLre dd@iu=. */ Nu putemSterge domeniu care un in existdcd4i. INTRODUCERE .1* /* De ce nu am folosi exit in structura if(condi{ie) {codul de executat."'..ise rf(5 Pcsll'descriere'l == "") ] o . Ttps&TRtcK Fr.GtllllllFEilif . prirt I'NumeIe domeniului a fost * Verificdm daci toate dateleau fost introduse aorect.t 3.P o s T[ / s t e r q e value="<?=5id_carie?>"> <INIUT type=r'subnit" carte" | "> { . Sd mai facem un ultim fiEier.-o-.are :pai!n 3.EDITORIAL ..s_POST[' nlme auior' ] .php conline doar formulare.lJo -""..l I Formularul pentru modificarea unui nume de domeniu scris gregit..i lsr voo.exit. Structurasa va fi urmdtoarea: .@+.php") include ("adnin rop.. prini "Autorui a fost qtersl".pht include ("a!toriza!e. + o d a iC. ])) e.din proprie experientd vd spun ci sepoate. /* $tergere aulor'/ auLor'] )) i f ( i s s e r ( S . roo3 eh iu"lr". .(sau) modificarcanumeluiautorului.. tlnutufil erui. lF*"il alror ltr.E id_done.modificarca numeluide domeniuin l Fh Edi v$ F. id auto!-".-+*-lF..-i. vew FaYo*a. . ndEl. 0RGANIZARE .'!rr !!+!-:!!j+4 !![!r:F:q! gu.enui domen'! Prerudiur Fund..(sau) gtergerea domeniului din baza de date. else:*/ mod:ficar | "...*/ ) /x gtergere domeniu */ if (isset (s_PosT [' srerge doheniu. Ed. 5i Inp€riul de IsaacAs m. d I autor=" .Vom folosi o structura if.Daca credeticA nu vi se poate intdmpla.D. ttt:tod="no"t"t <INPUT rype="hiddenn nane-" rd carte.'*- t0rdna med -d.. +/ ii (S-9oST [' nume domenau'] == "") :: (:sset (5 roST['modifica carte']) ) { print "Nu a!i I ".(sau) $tergerea autorului: .r" "rrl ii IInnilitti d tk. S rosr {' id query ($sq1) .l. seexecutdcodul dinelsr:{} qi atunci exit ar fi superfluu. MySQL PHP.e r@k trh 1 Ssql "UPDATE domenii .l baza de date.n. php" ) .(sau)Ftergerea cd4ii din bazadc date $i a tuturor comentariilorutilizatorilor 1a cartearespectivd. "r ftiHErE " . "' ? o S TI ' i d arror. . pentru toate operaliunilede modificare$i $tergere din baza de date. nysql-query(5sql.ll a { oo*""i.S mysql pri. WHERE cloneniu' r . . r::r: I'Nu af: introdus rirLul:". INSTALARF .r query (Ssq1) .9 ' DDr I rt n-".! Nu p!te!' :terse acest domen u ] /* modificare numeautorx/ if (isset (S PosTt'modifica auror'I )) ivodica I Modifi careainformatiilor uneiinregistreriestesimple. I'Doheniul a fosr grersl". introdus nrmele domeni!1ui l Dupi cum r edem. $_POST' id { autor' I .

ultiriul cofrenraliu color:#F9F1E7. <b><?=$ros [/ tirlu' <?=lror . +ffffff. php.irea aceluiaqi calculator $i browser pentru paginii de administrare. I ?> I ?>"> queiy (9sqlconenrarii) "Cartea a fost Stearsa <?-$row t'nuRe utili2ator. carte */ if (isset (5 PosTt'sterqe carre'l)) Ultimul comentariu moderat este in momentul de fali 0.modificandu-le Srergansau duJc peceleneporri\ vom pulea ile. vom avea bu* toanepentru modificare sau $tergere comentariu. S POSTIrpret'].rrsa) ) ullim!l comenra. interogarcaeste: SEI.o l.iu moderat iodificate I l /'9terqere UNSIGNED DEFAU]. 5 P O .S . mysql prinl S_POSTl. (Ssqlca!re) . ' r r ..- or6r'd r o.'> ] ?></b> I ?> de border: 1px { $sqlcarre l'il. S Posr | . Sdmonitorizdmfi ecare pagindde carte in fiecarezi pentrua vedeace comentarii noi au fost postatenu esteo solulie vlabili: necesira mulr rimp 5i ar fi practic imposibild in cazul unui site cu multe cdrli. descriee. carr:r. Pentru a afla care sunt oomentariile noi de la ultima accesare sectiunii de a moderarevatrebui sdspecihcdmundeva care esteultimul comentafiugatamoderal.. l' rume_a!tor.Vom accesarea adiuga incd un cdmp in tabelul admin unde vom pdstm id-ul ultimului comentadu moderat. Sd credm noul cdmp: ALTER TABI.CREARESITE@.P O S f a l ' t i t 1 u ' descriere-' " .. Dupd ce vom revizui comentadileutiIizatorilor.ED|T0RjAL.E AdMiN ADD ' a.t " I. din Pentrua afla $ititludle qiautorii cdrlilor la care sunt comentariinoi.) . ." rd-carte=" . id 'THERE carre' L administrareo sec[iune specialdpentru moderare unde vom afiqa comentariile noi (adiugate de Ia ultima moderare). mAine sd nu vedem decdt comentariile addugaredupd ultimul comentariu modemt de azi... id carte i.php method="POS?n> <.l.4IC .'autorizare.php. Ttps&TRIcKS else if ($_Pos1l. ] else if ( lis_nmeric (S_msT I'pret/ l)) { prut 'Pletul trebuie si fie numeric I scrieli <b>1000</b>. o titlu=r .\om a\ea in zona de Vom folosiaceastd inrerogare pagiin nade moderare comentarii r om adduga 5i un fonnular cu ajutorul cdruia sA putem modifica valoarea cAmpului ultimul_ comentariu moderatla fiecarevizitd astlel incdtdacdazi moderdm comentariile. id_carrer .d . Dc asemenea.Iain/ oe Larr. mys. i d c t o m e n i u * "..o: <?=.carre.a!tor ASC'.ECT * FROM come. .comentaiiu 9resursa = nysql. Cum id-urile sunt create in ordine crescdtoare. nu <b>1000 tei</b>. a r p utili?atori</irl > de ra <b>Comentarii !Lrima 1e urilizaroriLor moderare</b> 5sq1 = "SELECT * rROM comentarii. admin.lERE id = 'DEIETE FROM carti carte=tr I .y ssq Coaenra conentari! moderat.i achin. ttHERE comentarii.comenrariu carta.ln .id_auror=aurori."DrIClF WHERE id_carle=". id caitar aulori WtiERE 1 oe. rd carte=comeniarii. PHP. apdsa butonul .c . Moderare comentarii Urmdtorul lucru de carene vomocupa va li moderareacomentariilor vizitatorilor..dL_l.Dltinut. CITIP SPECIAL SITEDINAX.'. backqroundpadding:5px. o d . S-IOST t' id. ORGANIZARE. i' / I ..T ''O'' NOT NUI. " . aD fosi mysql-f tNT etch_array (Sresr.I'4ysQL.. query(gsq. Comentariilenoi le putem afla cu interogarca: SEIECT ' FROM conenr:ari.arre= AND id. AND "frail. l <?:5rou 1'comentartu' I ?> moderai id_ca(e autor. 1d autor-aurori. s PosT [. INTR0DUCERE. Nu \om seta un cookic pentru ca arunci am fi condilionalide lolo. De aceea.clude (. Pri.pre { prait "Nu ati iorrodus pretutt"..l1 query(9sqr). S l o s r l ' i d d d.row ['adresa_efrai]. . ORDER BY id. Piet=t'.') include ("a. r l tarii v o l r .liv sotid sttle-"widri1:500px.forftaiiiIe | . .. .tarii. INSTAI-ARE. IND carti. rpOV o-a-.Lrin. ale utilizatorilorsite-ului.Seteazi aceste comentarir ca fiind moderate"pentru a nu le mai vedea Comentariilenoi Si incd nemoderate la urmdtoareaverificare.id a. w-!l1l )."' l I Ssql "UPDATE carti SET domeniu. Degi utilizatorul obignuit estebrne cresoutSi cunoa$te regulile neticheter nu l o t i s u n r a S a5 i e x i s t dp o s i b i l i r a r esa d trebuiasci sd editali sau chiar sd qtergeti unele comentarii.top. adnan. id adnin > aclion="f orrulare froderare opinii. ." . mysqr_que. comentariilenoi vor fi cele care au id mai mare decat cel setat in tabelul admin..L. baza de dale 1". modeiat conentarii AND carli.L).".

._ " value=.id?>"> <IN!UT lyoe*''submit'' nane-"aclresa aEtue"<?=Srst'ad-€$ Comenlaxiu: "conentariu'! <?=$ros I' cofrentariu' </textarea><br><br> <input !:ype="hidden" Formularul ajutorulceruiaputem cu editaun comentariu neDotrivit. Astfel evitdn erorile carear putea CHIP SPECIAL SITEDINAMIC . p hr a a f i 5 a 3 o r m u l a r en f u n c g i e p i. /* Aceastd variabili preia la fiecare iterare cu while a array-ului valoarea id comentariu.q _'e "_" d\'5..EDITORIAL INSTALARE MySQL . /* fiind retumat un singur rdnd. i.POsr l' sterqe' I ) ) . gtergi acest action:'prelucri@_ntrl:re_l](trrEtdii.6 6d /. CREARESITE . . . nrp^adarrn rype="subm1l" valre="$rerge"> na(e="stexge" 1 /* conhrmare moderare*/ if (isset (S PoSTI'seteaza moderate'l)) {ormularemoderareoprniiphp include ("autorizare. j L i|rdrio *e..tariu' .o o" Nume: <input type="textr nane="nune_utilizator" value= " <?=Sroq [ ' nse Enail: <input utilizator' ]?>"> <INPUT lype="hidden'' name="u1iimul id" iype="resl.'I. . I)) .tariile ca fiind top. DacA suntcomenrariiin listaafi5dLrn formularul butonul \elare comentaride a 5i ilor ca fiind moderate. comentariu.lu</b> { a o iiF'e .1ii1ca"> n.pnp method=r!OST"> o' " o --"..e " melhod-"POST"> 'odeL.h.grelge"> Fiqierul care preia informaJiile din f o p i n i i .. .Sereazd aceste comentarii ca fiind moderate". */ $nrcomentarii-mysql if (Snrconentalii nM > 0) roqs (Siesursa) .E ]. emai l" <mil' l>"*r>'<br> nane= vaiue=r'<?-$ultinul..dacd s-a apdsatbutonul . Avem nevoiede aceastivaloareastfel incat sd putem seta valoarea campului ultimul_comentariu moderatdintabelul admin folosind fomularul umdtor.$terge' afi5eazd mesajde conlirmare5i un un pentru a conbuton pe careputem apasa +i1. de butonul apdsat. ica" vatue="Modif ica"> rame-"nodif srelq. <IN?UT lype-"hidden" name=" 1d comentariu" <INPUT type="suLhit...mq erFraPreq' <h1>Srerqe</n1> Egii sigur cd vrei s. action="Fre1usa@.a.rc@rare_q€ntarii. ).clude /* ("adnin php" ) . ajungdndca la ultima iterare sA aibi valoarea id-ului ultimului comgntariu.Fp" meihod="POST"> <input t:.mode!are" _-6 o1 .r.. mysql-que. x/ * in continuare vom )crie o smrctura condifonald.rarm med r!r:rr! rr!! 1 :!i :j!r-!!r!! E5t 5qur . Dacdnu e nici un comentariu in listd vom afiSa doar un mesaj. ORGANIZARE ..?e="nidden" nane=rrrd-come.mentanul I type:"sutimit'.rooi_ .fiIIIIIF!.e if (isset {$_Posr ['mod!fica' { Ssql "SEIECT r mOM comentarii I'HE!... TIPS&TRICK " " - J l l : l O i r . 3 apirea dacdnu avem comentariiin listi 9i variabilei r aloarea $ultimul comentariu ar fi nuld. vre 5:5terq :ce3r.daca s-a apasatbutonul ..y(ssql) .daci i-a apisar buronul .sauchiar Eterge.lariu'' value="<?=$ <anput FOST['id corectariu' ] ?>"> $ultimul_id : $row['id comentariu'].php" fornular modifica. PHP.Modifici" afiqeazdun formular astfelincet sdputem edita confinutul mesajului.co'r€." ---9 roe-". naFe="nodifica" ' \Dvalue="Mo.t <h1>Modifice</h1> <b>Modifice acesl comenta. <hi>seteaza cohe.-b.l /* confirmare gtergere comentariu*/ if (is set ($.!I .9 Siesursa * mST [' id. Q p rc!c'6 @?n o. nane*" seteaza.dp!' id corentariu=". <br><textarea ca frind moderate"> I ?> l name=rtid_cofrentariu" value="<?=S <:nput i!s1'l' id comentariu' I ?>"> Lt. INTRODUCERE . afigeazi un mesaj gi un buton pe care putem apisa pentru a confima cA am teminat moderarea comentariilor din n. nu folosim while */ ).

] else if (s_PosT [ ' adresa-emiI' ] "") Am vdzut cumatuncicand laceonoua se comanddputem primi un email de notifi- rnclude ("admin top.. j ?>"> $sql="DEI-ETE FROM comenrarii'r. banii nu vtlr neapdnt in ordineain careavemcomenzile in baza de date.' id" P O S T. Ce ne facem insd dacd sewerul nu poatetnmite email?Saudacdun virus gterge datele de pe partila unde pestldm emailurile? Putem face o pagini in sec$unea de administrarecu ajutorul cdreiasi monitorizdm comenzile. De pentrufiecarecomandi vom aveadoudbutoane:. CREARESTTE@.Avem o singuraproblema: comenzilesefac in zile diferite.php" ).Agadarnu putem pune pur qi simplu un nou cdmp in tabelul admin cu "ultima comanddonoratd"deoarece expot ista comenzimai vechi decAtaceea. {"adni.a. I ". INTRoDUCERE.Anuleazicomanda" pe care vom apdsaatunci cAndcouranda este foaneveche urilizatorul a trimis pi nu incd banii sauatunci cdnd utilizatorul ne anuntdcd nu mai dore$tecdrtile comandate).'.omentarru. ". la fiecarenoud vizitd in sectiunea de administrarenu veti vedea decat comentariilenoi. { /* campudle completate. INSTAI-ARE.tariu=" comentari!.in acestavom avea toate comenzileneonorate cutoate detaliile n€oesare: nume qi adresdcumpdrdtor.l]-". I )) { /+ Verificdrn sdfie completate cenpurile.rHERE id. ORGAN|ZARE. .='".. . in final. EaSTt ' .'. Daca mai addugati administrato ai site-ului. <1nput type=". nemoderate.'Da I .php. ? *'OT NUI. fiqierul care preia datele din lormulare moderare _opinii..la /x $tergere comentariu*/ 1 f ( 1 s s e t ( S _ P o s T[ ' s t e r q e .e.. facem sunt se modificarea bazade date*/ in 9sq1 = "'PDAT: lre Ltiliatoi? <rul="'.ED|TOR|AL..Comandd onoratd" pe oarevom apesaatunci cand vom fi primit banii ti trimis ce4ile penhu comandarespectivigi .S comentarii SET I.. care. comenzi pentru care itcd nu au venit banii. l top. <h1>Cofrenzi</hi> { prmr'ltd l eise ii (9_PosT[. (.. CHIP SPECIALSITE DINAMIC . c64ile comandate.php.ECT * FROI4tranzacaii. "Comenlariul a fost: grerst". S. modificdnd gi qtergAndcomentarii.Iatd codul: comenzi.. la fel cum modedm comentariile.. u 1 i : r u l l id. cu valoareadefault 0: ALTER TABIE :ranzactii cohanda.l =. T|PS&TR|CKS l { prini "c.idden. Vom lace urmitorul lucru: in tabelul tranzactii (tabelulde comenzi)vom md adiuga un cdmp. .izaxe. Sd addugdmnoul cimp in tabelul tranzactii. SEI.IOST l' id d€nranu. l . asemenea. pHp.php iiclude lnclude /x ("auto. s . p h p ' .r.. rndiferentde cine le-a moderatpe ultimele.. Sd scriem qi codul pentru figierul comenzi. Comentariile dejamoderatenu vor mal apereala urmetoareavizitdin sectiunea administrative. cor€. print l 'Co(enrariut a fosr modificart.php incl!de ("autorizaxe.') .onorata DEIAUIT "0" ADD UN"SIGNED name="rlr:mul raltre="<?=$ <inpu: /* setarea ultimului comentariumoderat in tabelul admin */ if (isser (S posr[/ sereaza_mode.L. De acum.numdrul qi valoarea 1or.comanda onoratacarepoateavea doudvalori: I dacdtranzacliaa fost efectu(am primir banii. I . */ if (S_Posr ['nme-utilizaior' ] == ". S ECBr I'r@ uriliztoi &ires ICSI i. ]rL l r. adresa-@it.rmntariF" hysql prrnt . .comenrariu. ] ) ) Con€nt. seteaza { 9sq1 ultim!1 I'UPDATEadnin comentari! SET mcderar=" icl' ] .rpul Conentariu este gott .) .. ' i o o ) </body></htnr> p $i.t utilizdtorilord.) comenta!iu*/ modrficare i f ( i s s e t ( $ _ P o s Tt ' n o d i f i c a .l mysql query(Ssql).phpgi efectueazd modificdrile in baza de date: prelucrare_moderare_comentarii.riil! ultimd noderare { Nu exisii nici un comentariu nou nemoderat de Ia ultima accesare a sectiunii de administrare. aht \ t. tyySQL..) Testali functionareaacestorscripturi.t tutii 1nili I r nti i/ i.r t.indiferentde datasauid-ul acesteia. query(Ssql). s P O S T' i d [ i|rdria 'mea lr. ] ) ) TINYINT type="surnii" modeiate" nane=" value=.data.php'..'. P O S T[ ' u l t i m u l nysql query ($sql) . Comenzi print "Nu ai conpletai numele utiLizaroruLuit"..S ''H:RE ic ccne.].r h. Va trebui atunci sI facem o delimitare per comandd.l. toti vor vedea cele mai noi comentarii.am trimis at cu succes cirlile) sau0 dacdcomandanu a fost (incd) onorati."") ai @pletat adEsa de (mifl'.rarrf.

trare. INSTALARE. l-Ibrdrw mea .ETE i'iHERE id FROM tlanzaclie-" ]. $xowcarte l'nr-bLrc'I <td aLign="riqht"> ].. stotal. buc</b></rd> l .!L _ rranzactie' (Ssqlrranzactit) p o r ' {v .-"^r + nr hr.) DATE_EOR AT (data_rranzactie.querY ssq. +ffffff. !:1 ' .PhP include ("autorizare.querY while nysql I = .array /* Afiqdm lista comenzilor neonorate (WHERE comanda onorata:o) drn tabelul tranzactii.r . Srowcarte [' nune artar' <td align="right"> ' . '* Afi$amacest toLal apoi il adundm 5i comanda: la totalul generalp€ntru aceastA aliqn="r:iqht">' . S Posr [' id nysql. conanda"> <TABLE border-"1" cellsPaclnq=" 0"> <td <td <td <td align-"cenrer"><b>Carte</b></rd> aliqn-.. uqor de navigat Ei mai I admrmstrat. and id_tranzaclie=" SroeTran2actie 9resursacarti<ysgL l' id_tranzactie' query($sqlcarr1) incrude print ("adnin toP'PhP") "<h1>conenzi</h1>". I. SET aLiqn="right">1otaL <TD colsPan="3" act ion= "pre lDc rare_conen nethod-"P051"> Data cofrenzrf: ['.id_ant. vanzali.uurur*. EDITORIAL @.lata uanzactie' j ?> <INPltI <div solid style*"width:500px. "DL-d E L a1i9n="center"><b>?re!</b></td> atign="celter"><b>To!al</b></td> wllERE id_tranzactie=" .oRGANIZARE PHP. <INPUT tyPe="subnit" name="comanda-onorata vaLJe="conande " <b>< ?=$ro&'rranzacL:e ['nlre { /* Etergemtrarzac{ia (din tabelul tranzactii) 5i cdrlile comandate (din tabelul vanzai)x I SsqlTranzaclii tranzactii ='DE1. zz-ll-aaaa)..id auto!=autorr. and /+ qi afiEdmun mesajx/ Nu vom mai trece prin formulare de confirmare(gtiii deja cum sd face{i acest lucru). '</td> /x comandaa fost onomtix/ Stotalceneral = Stolafceneral r il (isse! (S rosr['comanda onorata'l)) I (9rotTranzactre felch_aday(SresursaTranzactir) ] /* setdmcampul comanda onorata:l in tabelul hanzactii penhu aaeastacomandi x/ 9sq1 = "UIDATE tranzactii comand.' .pentrufiecare ali$Am tranzactie. Func{ianu modificd nimic in baza de dateci doar afiqeazi un TIMESTAMP intr-un format mai utor digerabil (04*/ 03-2003in loc de 20030304).Acum ales uqor de gur. ($sqlrranzactii) = ) I bdsdonrd' 9total=$roscartel'Pret' Sioucartel'nr buc'l.MysQr. (9sqlcarti) * qi. FROM rlanzactii '. p.?F'hidden" ixanzactie" value: I/ id tranzacrre' I ?> " > z t .L 1-111--' . airlu. nr buc autorr fron nume_autor.'" cordanda onorata=0".titlu']' : :.$_PosT [' id nysql_que!y rranzactie' .. phP " <td><?=$to!alGeneral?> id tranzacriF'.' </]. . de Aceastaa fost sec{iunea admrntssiave!i un sile hmclional.]". " " TIPS&TRICK <b>Conenzi inca neonorate</b> while ($rowcarre = (Sresursacarti )) mysql_f erch. x/ Ssqllranzactii = "SE]-ECT id tranzactie.$rowcarre['pret' </td>' . <b><?=$ror{ranzactie /* 9i afiEdmun mesajx/ print l "conanda a fost onorat. I]INAMIO CHIPSPECIAL SITE . carti. ' td-5n tsY.cenler"><b>Nr.:</td> 1ei</td> conanda onorata=1 wllERE tratactie']. "<?=Srodrranzactie */ /* comandaa fost anulata i f ( i s s e r ( S _ P o s T{ ' a n l t e a z a comanda'l)) color:+F9F1E7. where id carle id.'</td> sr !!!r ?7. ] .carre=vanzari..'.::. CREARESITE INTRoDUcERE.d> . i.PhP") . numiml qi valoarealor: */ 9sqlCarti = "se1ect pret...t.3!drci nume_cumPa!a!or.Sxoucarte['. prin! l "conanda a fost anulat. ny3qr_query $-tosT ['id (Ssql) .ri". backqroundPadding:5Px"> cunparalor'l ?> border: 1Px nG"id t:. s!esursaTtanzact!! nysql. as data rlanzactie. .\*/ I * I (omfeoodr /* DATE_FORMAT este o tunclie a MySQL cu careputem fomata o date stocati intr-un tim€stamp dupi cum dorim (in cazul de fa1d. ca4ile comandate (titlul ti autorul). facemdirectun fiqiercareopereazi modificirile in baza de date: prelucrare_comenzi.1".. zal' onoratS"> <?=5ror'Irdzaclie ' I adresa. carte /* Calculdm totalul pentru aceastd . adresa_cunpa!ator wsERE { print '<Lt><td>' de ).1 u-u-:r.cwparato!' cellpadding="4" I ?> <TNPUT type:"subnit" name="anuleaza_comanda" value="Anuleaz. . carti. ca!ti.

{ . Dacd scriptul nu estefoarte bine g6ndit. intotdear.EDITORIAL SITE . folosind parola ' OR 'l : I oricine poate avea accespe site interogarea SELECT + FROM deoarece users WHERE nume='un nume oare'1 care'AND PAROLA=" OR : l' este executatecu succesgi refumeazaun rezultat (toate iffegistrtuile din baza de date. in acestcaz.pun/lsurile la celemai arzatoare intrebAri puse de programatorii incepdtori. DacA magic quotes gpcsuntON.rnl.include" figiere aflate pe alte servere URL dec6tcel careruleazddacd setarea fopen wrappers esteactivatdin php.de fapt). Misuri de securitate Securizareaaplicaliilor on-line este un subiect vast abordat in nenumirate cirli. Ca exemplu. INSTALARE . Sresursa : mysql query(9sq1). Includere lncercalisi evitagiincluderea ..fr. { . lvlySQL PHP. variabilele globale pot prezenta risc major de secudtate. c . ca Mai mult. penhu iffegistareape site esteSELECT * FROM usersWHERE nume:'$nume' and parola:'$parola' 9i dacdinterogarea esteexecutatd succes.ro/ CHIP SPECIAL S]TEDINAMIC Pe site-ul Secure Realitygisiti mai multe articole privind securitateaPHP.. ] Notd: magic_quotes_gpc sunt implicit ON in php. INTRODUCERE . autentificat.ini este distdbuit cu globals:off in ultimele versiuni..un alacalor fi putut accesaadresa http://site. fi m adunatin aceslcapilol ra.cat. 3. sd presupunemcd interogarea SQL de verificare a numelui qi parolei $resursa = mysqr. ar In exemplulde mai sus.Penlruaceasra considera{icdtevaposibile. ..la fel qipentruPOST sau FILES.. atunci cand v5 aSteptap bazade date sdretumezeun singur rdnd. aulenlr.ini pentru a vA proteja de astleldeatacuri. ) /* aga da x/ 9sql = "5!LaCT * EROM users IdHERE nume:. Regula numdrul unu a securitAliionl i n e e ..query (Ssqr) .ini magio quotes gpc pensuntOFF folosif funclia addslashes g e n t r u a p r e c e d a h i l i m e l e ld i n d a t e l e r mise de utilizatori cu caracterul\. Elepdrea mente carelaprimavedere arputea inofensive pot fi pedculoasedacd sunt p r i ri t ed i na l t u n g h i V a r i a b i l e lg l o b a l e . ORGANIZARE "@ Tips and tricks .tati-le" inaint€ trebuiesi de a le utiliza. $nume.. t e : n u r a i n c r e d e fn i c i o d a t dn i i utilizator.php?fi1e:cutare. cu utilizatorul este logat. lipsa ghilimelelor magice qi extensiile [i5ierelorpot fi lolosite impotrira dumneavoastr6. Din un acest motiv php.html clude figiere in cadrul unei pagini. Cu putindneatenliedin paxtea voastreatacatorul ar putea accesa astfel informatii sensibiledin cadrul sistemului.gduri": 2. ghilimelele din input vd pot crea probleme serioase.ro/ pentru a rnfisier.cul6..magice" Dacd in php.. ADMINISTMRE .. este dar binesdr erificati inainte de a remrn{ala addslashes. Variabilele Avdnd variabilele globale ON puteli accesa dateletrimise prin formulare mat simplu: $variabila in loc de $_GET['variabila']... PHP adaugd automat oaracterul \inainte deghilimelele dar dacd ele sunt OFF. PHPpoate Nu includeli figierestreine..rna verificali datele trimisecdtreseryer$i... Ghilimele. .rizibil6" a figierelor in forma http://site. and parola='Sparola"'. CREARE .. Aici vom vedea doar citeva din PHP le metodelepe careun programator are la indemdndpentru a scrie aplicafii mai sigure.\ lntrebiri frecvente globale 1. verificali acest lucru gi nu dacd interogareas-a gxecutarcu succes: /* aganu */ Ssql = "SE]-ECT * IROM users IiAERE In acestcapitol veli afla cum si crea(i aplicafii on-line sigure qi cum si vi proteja{i de neplScerile giurilor de securitate. ...

blabla". www.cu cateva deschis sesiunea acriva{opliunea imsi milioane de comentariicarespun acelasi pliciti a PHP de mentinere a sesiunilor lucru: ..comsunt prezentatecele mai noi geuri de securitate intalnite in aplicalii.raul. PHP nu parseazd figierele cu extensia.in momentul in uare site. Evitati expunereainformaliilor daci da{i acestorfiqiere extensia. Formulare .tindminte numdrul incercirilor.riufacatorul" scrie un script care interogaJibaza de date pentru a verifica a acceseazd adresa ftrA opriretimp de cdtepatra incercaxe.. T CHIP SPECIAL SITEDINAMIC .txl sau. Cdnd Dacd vd gdndili cumva cd astan-ar f1 valoarea acesteiatrece de 3 (trei incerchiaro problemaatdtde mare. active este de o ori). vd gtie numelede utilizatorar pureasA De celemai mulle ori aceasrd masurd incerce (9i. lizatorilor. Daci legdtura lui la Intemet e Variabila$_SESSION['login_count'] bun5.phppentru include in fiqier un script localizat pe alt ser"vergi astfel obtine acces cAtre toate resursele sistemului la careare accesPHP.phpr formular. Extensii O practicd obi. SiguranJd absolutdnu existdinsd prevenireapoate fi salvatoaxe.ro/login. ORGANIZARE MISQT. w w w .re spaliu p€ server.ini sau metodade transmiterea forutilizator.Nu puneli informalii sensibile (precum numele gi parola cu care vd conectali la serverul MySQL) in fi$iere cu extensia . vor fi rulate fird sA afigezeinformatiile conjinute in ele.site. formular caxeesteprelucrat de cAtreun hsier userinput. ADI4INISTRARE.site..au gi www. Folosili metoda POST in formulare atunci cdnd informatia din acesteaurmeazi sd he inhodusd in baza de date. in acest mod.inc qi dacdacestea sunt apeIatedirect ele sunttrimise plain text cdte browser. intuitia sauun generator parole de <input type="submit"> sepoateaccesafoarte usorgi rapid adresa www.php . Folosili pentm acesteafi$iere cu extensia .php?file:http://www. .e posibilca a douazi dimineald sA va rdmaneinmemorie catbrowseruleste vd tuezitifU. mularului este CFT. a i d a n a r y + r4 o f r t h a t o n r y Pe SecurityFocus. se. acestea suntdoar cateva din metodelepe care le puteti folosi pentru a face aplica{ii sigure.EDITORIAL INTRODUCERE.. in acestcaz va trebui sdpunefi o proleclie suplimentard caresd nu permite mai mult de trei incercdri consecuDacd variabileleglobale sunt OFF in tive e$uatede logare pentru un nume de php.p h p?u se r n a me = m y s q l _ c o n n e c r( .php?username= NumeleTau&parola:aaa.putem setao variabildde baza voastrd de date IbrA sd treacdprosesiune$_SESSIONI'logincount'] care pdu-zis prin site. va ore.ini. dacd sunt accesate direct. .sccurityfo cus.php care. Two: p€plo!ihd Honevd ift1he Th s c tha se. un utilizarorrdu Aceastd problemd se rezolvd rapid intenlional puteaaccesa ar adresa hhp: folosind sesiunile. cu ceva noroc.html <form action="userinpua. chiar sd reude siguranldestesuficient6pentru a prese parolafoarte uqor veni incercarilede aflare a parolelor uti$easce) vd gdseascd <]]ertarea name-"par 5. gi paroli. inchiderea gi deschiderea browseruluipentruaincercade 3 ori este suficientde descurajantA sAdelermine ca un hacker sd i$i caute de lucru in altd pafie. ) .com.PHP.@ " " fisier. INSTAURE. o cire serveresrefoafle imporlanla in sesiunea fi inchisd 9i va puteaincerca va Si alt caz:formularelede login: Cinevacare de alte trei ori sd se logheze.putand executa comenzi de sistem.ro/ usgrilq!!!!p login.inc.php?parereamea:blabla un utilizator trimite numele qi parola gi ar introduce comentariul . Setali allow_url_fopen:Off in php... . Dace atacatorul Verificarea provenientei cererilor agteaptd ori sauiti inchide browserul. . Mai multe informa{ii priputeli gesilawww.nuitd estede a acorda extensia.blabla" in citre login.r o / l o g i n . . Am sd vd dau un exemplu: sd presupunem cd avem un formular cu ajutorul cdruia utilizatorii pot introduce pdrerile Ior despr€site. n y t h s t e d d i n qv e r y d e r t h e s e d d y 5 . pdndla tu&parola:aac ai agamai departe mysql_query ("insert pareri inro descoperirea combinalieivalide de nume values ( '$parerea mea. afiga informalii confidenliale sau fterge baza de date.imaginatic A r i n e r e u $ i t en i c i m d c a r n u m a i ) vi cd .rolusednput. Nu permiteti includerea figierelor din altdpartedecAtde pe sewerul vostru. Cum spuneam. Avdnd la dispozilie un dictionar./A fi incluse5i a folosite in cod.astfel ele vor fi rulate in loc si fie afigate. )") .php'/ ihe nbni i! to tedHdnayd br rernq j u m p n q ! h i p .ee part 4.php?username:tu&parola:aab. s i t e .hrmlcarepol fi accesate $i vdzute.inc figierelorcareconlinbiblioteci de funclii ce urmea..com.ond Fbdof a th. c o m p .php.ro/ scriptrau.CREARTSIE.secure vind securitatea reality.