100% found this document useful (2 votes)
2K views

Chip Special - Website PHP

Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (2 votes)
2K views

Chip Special - Website PHP

Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 64

- Nr. 2 - 2OO3 - I OO.

OOO lei - fs s N I 453-7079

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

$ecurltate
Gelemaibune
T r p7p,
Tnlc16'
Apache1.3.27 9i2.0.44,PHP4.3.1,MySQL3.23pentruWindows9i Linux;
Browere:Opera7.03,
Mozilla1.2.1:Scripturicomplete:PhpBB2.0.4,phpMyAdmin,
phpAdsNew, Gattery,
PHPOpenChat,
MyPhpMoney; Editoare PHPgi HTML:PhpEdit,Programmer
Studio,Quanta,EditPlus,
conText
MySQLGUI:MySQLFront 2.5,SQLyog,JSoftSecurity
ManagerformySQL, myFrontEnd
Acceleratoare PHP:TurckMMCache forPHP,PHPAccelerator';
ClienliFTP:FlashFXP,BulletProof
FTP
3 Editorial
6 Introducere
DezvoltareaInternetuluieste in al treileastadiude dezvoltare,
iar,,dinamic"gi ,,interactiv"
sunt atributeleesenlialeale oricdrui
site de succes.-PHP 9i MySQLsunt unelteleidealepentruun
site dinamic.
7 Cei trei magnifici
Sfaturipentruo instalarerapidda uneltelornecesarepentru
unuisitefolosind-
constructia
9 Gu creionulpe hdrtie
Stabilireaobiectivelor.
11 SQL-ulmeu si-al tdu
*tr e. ..3.,9'g ,: Bazade dateestecoloanavertebrald a unuisitedinamic.In
ilewsline acestcapitolveliinvdlatot ce avelinevoiesd gtitipenirua
construigi a lucracu o bazdde date.
20 Programarepentrutoti
lntroducere in limbaiulPHP
- i
folosindPHPin combinaliecu formularele
Interactivitate HTML
invSlalicum sd folosiliPHP 9i MySQLpentrua induce
dinamismin paginiledumneavoastrd.
36 Noul site pas cu pas
Creali primelepaginidinamicegi interactiveale site-ului.
51 Stipdnul datelor
Secliuneade administrare
a site-ului.
65 Tips & Tricks
Cum sd vd protejalide nepldceri.

Redacliaooate fi contactala a: Pregetire filme: Artrlr Repro LTD.


Tefefon: 0268-415158,418728, 0723-574511, 0744-754943; l\rontaj9i tipan VeszpremiNyomdaRT, Ungaia
' Fax: 0268418728; E-mail: [email protected]
Adresa redaciiei:2200 - Bra$ov,str. N.D. Cocea nr.12 Relatii intemalionale: http://www.chip-ro/html/abouuinternaiional.php3
Adresa Dentfu coresoondente:
2200 - Bra9ov,Oficiul Pogtal2, Cbsuta PoSlalS4 Editura: Vogel Bufda CommunicalionsSRL
Sediul edilurii: 2200-Bragov Str. N.D. Cocea nr.12
Director Generali Dan Bedescu ([email protected])
Directo. tehnic: Daniel D;niE-B6k6si ([email protected]) Copyright: ^
Redactor: Oana Sdulescu([email protected]) ln Romania: Vogel Burda CommunicailonsSRL Bragov
Secretar de rcdaclie: CristianaVr5bioiu ([email protected]) In Germaniaj Vogel Burda HoldingGmbH,
Wizburg, DirectoriHermannPaul
Coperta: Virgil Popa ([email protected])
Grafici, DTP: Virgil Popa ([email protected]) tssN 1453,7079
Contabilitate $i administralie: Maia Pa€e, Eva Szaszka,Adrian Dumitru
{[email protected]) Manusuisele.inclusivin fonat electronic,expediatercdacliei devlnpropietatea
Reclami: Zsolt Bodola ([email protected]), Cfistian Pop
editutii. Editun ili rczeNA dreptulde nodjficarc a mabnalelar pnnite, precun ri
([email protected])
a datei de aparle. Reprcducereaintesrata sau padjal' a atticatetot,infornaliito.
Marketing: Leonte Merglnean(leonte marginean@vogelburda-ro),
sau a inaginibr apante ln rcvis/,aesta pemisA nunai cu acordul scnsal edilurii.
Oana Leu ([email protected])
Redaclia nu iii asume dspunderea penttu gregeqti inadvettenle apetute in
Distributie : loana B6descu ([email protected]),
natenalele colaboratoilor 9i ale inse.enlilot.
loan Soiu ([email protected])

CHIPSPECIAL SITEDINAI4IC
Solufia completi,r,
Sub acestmoto am reunit pe CD o colec{iea celor mai bune aplicatii unealtdcuajutorulafueiavdputeliconecta
pentru creareaunui siteweb dinamic, in mare parte absolut gratuite. la bazade datede orir.rndca{i fi, Gallcry,
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 web-
Uneltele de bazi Macromedia based,precurngi multe altele.
Bineinleles, creareaunui site perfor- Nu este designer web care si nu fi
mant, aici intelegandunul dinamic, pre- auzit de firma Macromedia gi produsele
cum gi punerealui in functiune,nu poate sale.Acesteau$ureazdfoarte mult mun-
fi ficutd fird anumite programe, dedi- ca de creare,programareqi finalizare a
cate. Din acastmotiv, pe CD am inclus unui site web, datoritd unor unelte ca
servcrul web Apache, sistemul de baze Homesitc, Flahsh MX, Dreamweaver,
de date MysQL 9i PHP. c a s d a m i n l i mn u m a ic a r e r ad i n r e r s i u -
nile de probd incluse pe CD-ul ata;aL
Browsere revistei.FolosindHomesite5 sauDrearn-
weaver MX, creareade site-uri web di- Ajutor in caz de nevoie
Pentru testarca paginilor pe care le namicer a fi mai uSoard deoarece amdn-
veti face esteclar nevoie de un browser. doueoferdtag-tipsgi autocompletepenhll Pe CD pe ldngd Apache 1.3.27 qi
Acestaa fost $i unul din motivele pentru HTML qi PHP. 2.0.44,PHP1.3.19i MySQL 3.23pentru
caream inclus pe CD ultimele versium a
Windows qi Linux veli gisi qi manualele
d o u a b r o u s e r ec o n s a c r a t cV: o z i l l a ; i
PHP 9i MySQLin fonnatHTML 9i CHM
Opera. (Windows Help).

lntfl!.1!l< CD-ul inclus poate fi utilizat in coniormt-


tale cu pa netrii definili in standardulPhilips
- Yellow Book. Editura nu-ti asumArespons-
abilitatea asupra evenlualelor paglbe provo-
* . ) = = catede utilizareaCD-ului in alii paranerri decat
-r;:r:]]:'::1_-:::. cei stabilili i11standardul merlionat anlerior.
ft/,l|']]];;."
Clienti FTP NoTA
Interfata CD-ului CHIP Special este con-
ceputd sa ruleze optim pe o placd grafica ce
DupA rcalizarea $i testareasite-ului srporta minim o rezolulie de 800 x 600 Si o
r i n e 5 i m o m e n t uiln e a r ea c e s t a
trebuie addncimea culorii de 16 bjli. De aceea,nu este
transleratpe un sen er coneciatla Inter- recomandatAfolosireaacesteiainh-un mediu cc
nu oferi ninimul nccesar! Inierfala poate fi
Extras net. Pe CD vefi gdsi cei mai populari
rulati atat sub Windows 95/98/Me, car $i sub
clienli de FTP cu care ve{i putearealiza
Windows NT/2000/XP.
Ce ar insemna crcarea/programarea transferulrapid qi uqor. Din cauza multitudinii de configurattl,
unui sitc web fird ajutorul micilor pro- F-::_w,:.. r c d a c r i aC H I P S p e c r d l n U i S i p o a r e a s u nn r ai L .
grimele caresalveazdtimp? O muncdde rcsponsabilitatcin eventualitaleain care apar
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* ::-:,- probleme in funclionarea interfelei $i a
a p l i c a u r l o r .P . o g r a m e l ec a r e a u i n r r a . i n
n u m e r o a saes t f e Jl e u t i l i r a r ec:l i e n t ir i -
compo.enJa CD-ului CHIP Special au fost
zuali pentm conectareaqi lucrul cu baza testate ti selectatecu gri.je in redaclia CHIP
de date, editoarePHP, driverc MySQL S p c c r a JT.o r u $ i r. c d a c t i an u i ; r p o : r ea s u r a r i L i
pentru concctareadin .Net, Java qi Py- o responsabililatepenlru firncrionareaanormalA
thon. a software-uhriSi nici nu poatefi feculi respon-
sabihpentrueventualelcdauneproduse.CD-u1
CHIP Speciala fost verificat tmpotsivavinrqilor
cu umatoarele programe antjvirxs (in ordine
allabetice): BitDetender Professional 6.4
Scripturicomplete (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\pcr.k) Lab Anri-
Am inclus qi o seriede scripturi com- Vinis 4.0 rtumi,,arde Kaspef.Ly I ab . Rusia)$r
RAV 8.5 (tumizat de CeCAD).
plete, gratuite, pe care le putefi utiliza
Pentru orice inlrebtui legare de aplicaliite de
pentru a vd imbogdli site-ul. Printre cele pe CD, vArugim sAcontactalitelefonic,prin fax
ma1lmportantese numdrdPhpBB 2.0.4, sau pnn e-mail. aurorii nrogramelorrespecrivc
un forum pe care trebuie doar sd il ATENTTFI PentrurulareacorcctAaInlerfelei
configura(i pentru a inchega o comunl- CD-ului vA recomandim setarea unei rezolulll
minine de 800x 600, o adancimeaculorii de 16
tate pe site-ul dvs., phpMyAdmin, o
bili $i folosireaopliunii Small Fontsl

CHIPSPECIALSITEDINAI4IC
, llllEtiltlGln,
EDTToRTAL ,, oRGANTzARE
TNsTALARE ,, pHp,, CREARE
, MysQL srTE, ADMTNTsTRARE
,, Trps&TRrc

Intoducere Intr-un site dinamicse pot adiuga ele-


mente de interactivitatefoarle u$or. Me-
todelepusela dispozitiede aplicaliileser-

lncotro ne indreptdm? ver-sidene pot ajuta sd tansformdm un


simplu site intr-o comunitateactiva.
Tendintaeste cainviitor, toateelectrcnl-
Dezvoltarea Internetului este in al treilea stadiu de dezvoltare, iar ccle din jurul nostrusi fle conectate
la
lntemet. Deja putem accesasite-uri wap
,,dinamic" gi ,,interactiv" sunt atributele esen{ialeale oricirui site prin intermediultelefonului mobil qi s-a
de succes. inventatpdnd9i frigiderulcarefacesingur
comenzileonline. De aici se pot ridica o
I . ^ - ^ ^ ^
intr-o statistici ficutd pe ejobs.com,cere- serie de problemede compatibilitate.Un
ln 1960.cdnda lost lansatARPANLT. sitecreatp€ntruweb va trebuirecrcatpen-
l r e l e a u aM i n i s t e r u l uAi p a r d r iai l S U A . rea de programaforiHTML estein cidere
nimeni nu $i-ar fi imaginat unde se va liberdin timp ce limbajeleserver-sid€ sunt tru a puteafi accesibilqi de pe telefonul
ajungedoar 40 de ani mai tArziu.Dezvol- cele mai cerute.Ca webdesigneri,on ne mobil sauultimul ricnct dc mp3 playercu
tarca Intemetului a inceput cu adevemtin adaptdmnoilor cerin{eiori ingrogimcoada conectarela Intemet. Avand continutul
1993,odatdcu lansareaprimului browser la Ofrciul fo4elor de muncd. separatde strucfurdsaudeprezentare, intr-
graruit. Mosaic- carepuleaallsaLexl:i ima- o bazi de date,sepoatecreafoarteu$orun
gini . in maipufn dern an,nurndruluti lizato- Se cere... duplicatal site-uluioriginal,cu un fomat
rilor a ajLrrsla 2 milioane.Darid siegel. potrivit destinatiei.
autoruic64ii ..Crearing liller $ebsites"se in prezentaproapejumdtate demiliard din
relerdla site-urilecrealein aceasla perio- populagia globuluiare accesla Intemet.in
De ce PHP 9i MySQL?
adi ca,,Site-uride primd generafie", linea- 2002 39,1% din utilizatorii de lntemet au
re, limitate ca posibilitili dar indeajunsde fEcutcunpfuAturicu o valoaretotali estimad Cel mai putemic motiv pentru folosrea
functionalepentrutransmiterea informaliei. la 47,98 miliarde de dolari. Site-urile care PHPsi \4ySQLcaunelle penhucrcarca unui
oferaproduse sauservicii runtintr-oconlinuA site dinamic este faptul cd amandouAsunt
crcllere. Utilr/alonr rinds; prefere culnpArd- open-.ource 5i oricinele poaleutilizahra
! turile onlinedatoritdcomoditaliidea coman- costuri5uplimenure. Ln alt motir estecd
i daunprodus lird elonsaudeplasare. Aproxi- aplicaliilecreatc suntcrossplatlorm:PllPsi
l
g 8 o o MySQL rulea7eatdtpe sistemeLinu-r5i

l
mari\ d i n e - c u m p d r A l osrpi u n c d
intenlioneazAsa crunpereonline gi in viitor Windows precum gi pe o muUime de alte
datoriti u$urintei$i comoditilii. Un studiual sistemede openre mai rar intalnite. Astfbl,
puteli creaun intreg websitepe calculatorul
Cyberadasrelevd faptul cI vAnzirile online
au ccl mai maJepotenqialde dezvoltaredin personal,fird si instalatiun nou sistemde
intreg sectoruleconomic.Site-urile firmelor operare,iar la sfi4it doarsdtransferafisite-ul
numaisuntdoarinlonnatire ci oferdutiliza- pe serverulLimx qi sdrulezefird probleme.
torului posibilitateade a comandaproduse In prczenlrHr esteaut oe pur€rruc $l
Articoleleprezentepe amandoudpagi- veNatil incat peni $i liderul portalurilor,Ya-
sau seryicii.La fel qi site-urilecare oferd
nile au fost introduseo singuri dati qi hool. a renunlatla limbajul\eu nropnehr.
s-au aranjat,,singure":cele mai noi la qtiri: ele nu mai sunt demult doar simple
pagini de ziar in format electonic, ci oferd y'cript.in lavoarea PHP.Aceasta nuinseamni
inceput, cele mai vechi la sfarsit.
utilizatoruluiposibilitatea de a interac.tiona, cdPHPestecomplicar saudilicil:dimpotriri.
A doua generafi€a inceput odatAcu de a-;i personaliza experienla online.Dina- PHP qi MySQL sunt foarteu$or de invd,tat,
specificaliilepentru HTML 1 9i competitia misltrul gi interactivitateasunt elemente chiargipenhuceinefamiliarizalcuprogama-
Netscape-Microsoftpentu dominareapiefei. obligatoriipentruun sitede succes. reasaubazelededate.AcestSpecialdorcqtese
Odentareain aceastaperioadda fost inspre demonstreze acesllucru - lol ce va trebuisa
,,vizual" ca mod de comunicare. faceliestesdcititi Sisdexenali chiarvoi toate
Avantaje
in prezentne afldm in a teia generalie, exempleleprezentatein continuare. I
a dinamismului$i interactivitifii. Lumea
P r i n c i p a l au vl a n r aajl u n u i 5 r l e
dinamic
progreseazd in pa' rapidiaru ebdesignerii
asupraunuiastaticesteu$urinlain admlnr-
trebuiesa !ina pasul.in aceastd meserie
strare. AdSugarea sau nrodificarea
evoluliaestecuvantcheie.
continutuluiestefloarela urechegi atdtde
Numdrulintemau{ilorcrestede la o zi la
simpluincatpulelrdclegape oricinesdse
alta, la fel ca ii a$teptarilelor: ei doresc
ocupe de aceasta sarcini. Deoarec€
informafieproaspdtdqi posibilitateade a
conlinutulestestocatin bazade datesauln
intemcliona.Paginilestatic€nu mai suntde
fiiiere text,cei careseocupddecontinutnu
ajunspentrua asigurafidelizareautilizato-
au nevoiesA$tie vreunpic de HTML sau
rilor. inplus, in ziuade astizi oricinepoate
organizareasaulayoutulpaginilor.
faceun sitecu ajutorulaplicaliilorvizuale
De asemenea,dacd trebuie sI schimbafi tal
precum MacromediaDreamWeaversau !|I i;ifi11r'1r::ir-
logo-ul pe fiecarepagini a site-ului estede
Microsoft Frontpage.Pentrua sta in fala
ajurs si faccli modificarea intr-un singur
concurenlei. un \ eb designertrebuiesa Yahoo! a renunlat la limbajul propri-
fi5ierin locsdlualillecare faginain pane.sa etar yscript in favoarea PHP
oferemai mult gi mai rapid decatceilalti.
o modificafi 9i si o uploada{iinapoipe server.
CHIP SPECIAL SITEDINAMIC
EDTTORTAL,
TNTR0DUCERE
@ ryysQl,pHp CREARESTTE,
oRGANTzARI, ADtlrNrsrMRE,
TrpscTRrcKS
"

Instalare9i cerinfede sistem p9 un servel secunzat.


r n l l m p u t I n s l a t a nA
t p a c h e ,l n m o -

Gei trei magnifici mentul in care r i se vor cere inlormalii


despreserver,folosifi urmbtoareledate:
Network domain: localhost
Server name: localhost
Instalareacelor trei componentenecesarefuncfionirii unui server Administrator's Email Address: adresa
webpoateda bitii decapchiar qiunui utilizator experimentatin ale dvs. de mail.
Noti: Daci instalali Apache 2, va
calculatoarelor.Omiterea adaugirii unei linii intr-un fiqier de
hebui ca dupa incheiereainsralirii sii
configurare vi poate scoateperi albi incercind si aflati de ce suprascrielimanualfigierul libapr.dll din
lucrurile nu functioneazaasacum ar trebui. ctProgram FilesVpache Groupl4pache
2\ bin cu cel din dtrectorul apache
ar de ce e atetde complicat,ali ului chipro estelm fi9ierPFIPcareia din baza 2.0.14\binaty\patchde pe CD.
puteaintreba? Ei bine,pentruvd dedatecelemainoi gtiriadiugatederedactori Pentru a putea servi pagini, serverul
explicaacestlucru,tebuie intdi piletrimireinapoicdneA pachecareleafiSeaza lrebuie sd fie pomit. Ia fel ca orice
sAvi povestescce se petece de fapt pe vizitatorului. Dacdvauitatrin sursapaginiinu aplica,tie.Facetiacestlucm accesandme-
serveratuncicandscrieliinbara deadrese vegivedeadec6tcodHTML. PtlPruleaZ,,in niul ,S/i7ll > Programs > Apache HTTP
a br ow serului httptlvtyty<hlp,tq lpltp, umbrd", pe server(de aceease ti nume$te Set'ver> StqrtApachein consolecareva
s p r e e x e m p l u . C d n d a p a s a t i E n t e r . limbaj,,serverside' ) 9iconlucreazicuApache pomi programulintr-o consola.Pentrua
browserullnmtlecarresen eruldeHTTP astrel hcat acestadin ulmd sd poad afiEa testa, deschidefiun browser 9i accesali
'wwr.r.chip.ro
hnp: o cerere:..afigeazd- clientului un rczultat intelpetabil de cdte adresa http://lo.alho.\t Dacd pagina
mipagina 1.phpasite-uluiwww.chip.ro". browser - in acest caz o paginn HTML. afi$atd arate ca in imaginea aldturatd,
AceslserveresteApache.Apachegtiesi Apachenu estepredefinitsdlucrezecu PHP serverul estepomit qi funcfioneazd.
serveascd(de aceeaseSinume$teserver) gi vicevena.in vedereacolaborariiintre cele
browseruluidoar pagini HTML. Pagi- douava trebuicadupdjnstalarealor sdmodi-
nile HTML pot fi deja pe server sau ficati fiqierelede conligurale.
create,tot acolo,de cdtrealte aplicaJii,la ln continuarevd voi ghida prin insta-
cerereaserverului de web gi servite ca larea gi configurarea Apache, PHP gi
HTML browserului clientului. in mo- MysQL.
mentul in carecerempaginatest.htmlde
pe server,Apache o serve$teimediat. Apache
Daci in schimb cerem o pagini cu altd
extensie,php in cazulde faf6,Apachecauti Pentru un site aveli in primul rAnd Prima pagine servite de server dupd
sd vadi dacdesreconfiguratsAsen eascd nevoie de un seryer HTTP. Alegerea instalare,
pagini cu acaastAextensieqi ce program se noastrd s-a indreptat spre Apache da- Pentrua nu fi nevoit' ca de fiecare datd
ocupd de ele. Astfel, atunci cend cercm o r o r i r ; f l e x i b i l i r a r i si al e . p o n a b i l i t d ! i i . cand r,reqisd aveti ssrverulpomit sArulati
paginicuextensiaphp,serverulApacheva sigurantei $i extensibilitdtii. Pe CD-ul progamul manual, puteq sd il pomi! ca
trimitemai departe cererea citre PI{P,..:e alaturatputetigasidoui r ersiuniApache. seniciu 5i el va pomi automalodatAcu
cere un fiqier PHP, ocupd-tede aceastd pentru cele mai popularesistemede op- Windows.ir Windor.rsM. 2000 9i )G.
cerere5i da-mi inapoio pagindpe caresAo erare.Vi \oi ghida in continuareprin odatdcu instalareaprogramului,esteinstalat
'.
afi)e,/clientului PHPpreiacererea. ruleazd procesulde instalarepe un sistem Win- >isen iciLrJA pache.il pute! setasapomeascii
codul din progam qi daci vede cd se cer dows aga cum majoritatea dintre automataccesandServices(Windows Ser-
informatii din baza de date MySQL, o dumneavoastrdaveti. vice Control Manager) din Control Panel
acceseaz5. exfage inlormaliilecerureSi Ultima versiuneApache pentru Win- t Administatire Toolsin Windows2000.). in
construle$teo pagind HTML pe care o va dows este 2 .0.44. Kitul de instalare il Windows95 98 exisr.isuponpentruservicii
trimite sewerului Apache pentru ca acesta gdsili in directorul apache2.0.44\binary irxi estedoarexperimental. PentrucaApache
sd o serveascd clientului. pe CD. Totu$i,datoriti faptului ci supor- sApomeascaautomatla fiecarercpomire a
Un exempluconcret:prima paginl a site- tul PHP p€ntruApache2 esteinci expen- calculatorului. mbuie si il irsralaEiinuii ca
mental,sfatulmeu estesdinstalafiApache atarc. Folosi(i o consolSMS-DOS prompt
1.3.27pe careil gisi{i pe CD in directorul pentru a intm in directorul C)Program
apache LJ.2- binary.Vi va Ii muh mai FilesVpacheGroup\Apacheqiatastaapachb
u$or sd instalali aceastl versiune dar -i -n,,apache".Daci mesajulprimit este,,The
l;4
folosili-o doar pentruuzul personal,pen-
F.*-
hu a putea facepagini dinamice {Erdsdfiti
ffi- nevoili sdvd cumptualihostingla un ISP J . ,
sau sA pierdeti timp cu configuriri ex-
haustive.Nu loloriti serverulApachepe
. r + T " . 1 * l
Windows 95 sau98 pentrua vd pune on-
line site-urile.ci doarpenn'ua le creain O pagineHTMLscrisede utilizatorgi
ConfigurareaserveruluiApache. linigtein vedereapublictuii lor ulterioare servitdde Apache.

CHIPSPECIAL SITEDINAMIC
EDTToRTAL
,, |NTR0DUCERF oRGANtzARE ,, TlPs&TRlcK
ADM|NiSTRARE
, M)6QL,, PHP,, CREARESTTE
"@ "

apacheservicehasbeeninstalledsuccessful- s5 suprascrieficu acestacorespondentul


ly." putef sdqipomi! imediatserviciul(1iri siu din directorul C:\Program
a reboota)scriind in consold: FilesVpache Groupl4pache\conf.Dacd NotepentruinstalareaSirulareaApache
Nu funelioneazi?
. , . \ - " , - : _ ! . dorili sA faceli configurareamanual (in
Dacaah.rncicendaccesa,ti a&esahttp:/
Dace ve hotaraf sd nu mai folosifi cazulin careaJiinstalatPHP in alt direc- /localhostnu vedelio paginecu mesajul
sewiciul Apache, tastati in command tor decat cel indicat aici), deschideFcu "If you can see this, it mears that the
prompt apache-u -n ,,apache"gi sewtct- Notepad fisierul C:\Program Files installationofthe Apachewebserversoft-
ul va fi dezinstalat,iar programul nu va l4pache GroupL4pache\conf\httpd.conf ware on this systemwas successful.",
mai fi pomit automatodatacu Windows. $i adeugaliurmdtoarele3 linii: verificali intai daci serverulestepomit $i
dace nu cumva aveJi alt server HTTP
(PWS,IIS) caxeruleazd.
Documentroot loadModuLe pnp4 module c: /php/sapi/
Windows 95
php4apache. dl1
Dacaaveli Windows95 trebuiesi
Document root estedirectorul in care AddModuLe modjhP4,c downloadali$iseinstala{iWindowsSocket
afld fiqierele HTML 9i PHP ce vor ti 2 Update de la Microsoft inainte de a
servitede server.in cazul de faJdel este incepeinstalareaApache.Windows NT
directorul C:\Program Files\Apache Cduta{i apoi linia Directorylndex 4.0,98,ME $i2000nu aunevoiede acest
Group\Apache\htdocs. Oricefi gierpuneJi index.htrnl 9i modificafi-o in Directory- update.Adresade downloadeste:l'@.-//
Index index.html index.php. Pentru ca www.mi crosoft.com/w indows95/down-
in documentrootvafi disponibil1aadresa
I oads/ conterrts/wuadmintooIs/s_wunet
htto://locallnst/numqfiigL Puteti testa schimbdrilesd fie recunoscuteva hebui wotki gtoo|s/wgssockets 2/default.asp
acestlucru creend o pagini test.html in sa repomiti Apache. Windows XP
care sd scdeli: Sdtestemdac6totul funclioneazecum Penku a puteafolosi Apachepe siste-
<p>Aceastaesteo paginAde test</p> trebuie.Crea{i cu Notepadun document melewindorvsxP tebuie sAaveliwir-
Copiali fiqierul test.htmlin document text in care scrieli: dowsXP SewicePack I instalat.il puteli
root $i tastatiin baxade adreseabrowse- obline de la http://wnw.microsoJi.com/
test.php wi ndowsxp/pr o/ downIoads/sen i cepacks/
rul.ri http ://loc aIlpst/test. htmL
sp1/defauh.asp
Daci rezultatulnu aratdca in pagina Atentie !
anterioari, asigurali-vd c6 nu exista un print "Acesra este un l:est. Apache+PHl
Pe unelesistemepoatefi necesarsi
alt sewer HTTP pomit (IIS, PWS, etc.). funciioneaza"; $iphp4ts.dll
copialifi tierelephp4apache.dll
din directorul/php/in directorul/windows.
PHP
Salvali-lcunumele/esl.pip gi accesa(i Windows 95/98 sau C)mysql\bin\mysqld-
Copiali conJinutul directorulul plp URL-ul http://l ocalhost/test.php. nr e;repe NT/2000,XP.
4.3.0\binary\php-4.3.0-lItin32 de pe CD Ca sen erul de MySQL sApomeasci
in c:\php, iar apoi figierul C \php\php tL €d Y* FIErB I..e E!5 automatla fiecarerepomire a Windows,
4ts.dll ir't c: \wil1dows\s),stem. i "!-.,8 i l l n I i l " J puteli addugaun shortcvtin Start Menu/
j ?4 ,- r:. sb' 1@ !s! iei9!1 l1-!! l'!t
in continuare,pentru a vd u$urainsta- :&irel€l n|g/rctunsrdp Start up adtre C:\mysql\bin\mysqld.exe
lareaputeli copia fi1terd php.ini din di- (tespectiv mysqld-nl.ere). Este recoman-
Aceita e* m En -44ach.+?EP Fsdionee
rectorul chip.config de pe CD in dat cape Windows NT/2000/XP sdsetali
c:\windows. script PHP! serviciul MySQL sdpomeascAautomat.
Altemativ, daci dori,ti se faceli con- Se testdm:dupd ce a{i pomit serverul
figurarea manual, deschideli frgierul Atenfe! DacA Windows-ul dumnea- mysqld scdeli urmitoarea linie in com-
c:lphp\php.ini-dii cu Notepad.cdutali voastrdestesetatsdascunddextensiilepen- mano prompr:
textul doc_root: $i schimbali-l cu tru fiEierelerecruroscute,documenh.rlcleat c: \mysqL\bi.\hysqla.lnrn version s ta-

doc rooF"C:\Program Files\Apache cu Notepadva fi de faptn!tr:,it test.php.txt$i


GroupL4pache\htdocs". Ciutafi apoilinia adresahttp:/ oca.lhosttest.phpnu va putea DacAouQut-ul esteasemdnetorcelui
extension di1 : Ei schimbali-o cu fi accesatddeoarece te't.php nu exjsti. in din fereastraaldhrate, serverulMySQL
extension dir=,,C:\php". Salvatifrgierul, cazulacestaaretidoudsolutii:ori continuali functioneazd.
r e d e n u m i l ip- lh p . i n p
i i c o p i a l i -iln d i r e c - si lucragicu Nolepad-dar va trebui si
torul Windows. dezactivali ascundereaextensiilor pentru
fiqierele cunoscute, ori folosiS un editor
Apache+PHP PHP din cele puse la dispozilie pe CD.

incd nu vom putea accesaPHP din MySQL


Apache deoareceacestadin urmd este
deocamdatdconfiguratsdserveascadoar Pentrua instalaultima versiuneMySQL
pagini staticeHTML. pentru Windows nu este nevoie decet sd ServerulMySQLafost instalatgi ruleaza.
DacA ati umat instalareapas cu pas po:r'iti setup.exe din directorul zysql
dupa recomanddrile noastre, in drrec- 3.23\binary.DeoareceMySQL este un Noti: Pentruca sdruleze,MySQL are
torul chip.configde pe CD veli g6si server.ca 5i Apache.va trebui intai sd-l nevoie de protocolul TCP/IP. Pe siste-
figierul de configurare pentru Apach€, pomili dacddorifi sSlucrali cu el. Pentrua- mele cu Windows NT4 tlebuie sd ave,ti
httpd.conf, gata pregdtit, frind suficient 1pomi, rulaf C; Vzysql\bin\ mysqld.exepe instalat ServicePack 3. I

CHIP SPECIAL SITEDINAMIC


EDITORIAL,,
INTRODUCERE,,
INSTAI-ARE,,GffillTilT,IVIYSQL,,
PHP,, CREARESITE,
ADMINISTMRE,
TIPSETRICKS

Organizarea
preliminari

Gu creionul pe hartie
Regula numirul I in programare esteorganizarea preliminari. De afld in$irate cd4ile apaftinandacestuia.
acesta depinde succesulac{iunii la care ne vom inhima. pentru a Peaceastdnouipagindii vom ardtavizita-
scrie cod bun trebuie sI gtim destul de clar care ne sunt obiectivele torului ca4ile ordonate dupe autor qi titlu
insotitefiecarede o scurti descriereqi de
inainte de a scrie chiar qi un tag HTML. CAtevaminute de organiza- prelul cd4ii. Titlul c64ii va fi subform6de
re preliminari ne pot scuti de revenirea la cod pentru a aduce linl<asrfelincdt\ izitarorulra poariapasa
modificiri sau chiar rescrierea intregii aplica{ii. pe el qi si vadi mai multe detalii despre
cartearespectryd.

rganlzarea preliminard este o pentru a le putealocalizamai uqor. $i tot Cartea


prac-ticd obi$nuita in firmele pentru cA nu avem un librar cdruia si ii
de software qi ar trebui si fie ceremdirect,,Dati-mi seriaFundajiei de in magazinul real putem lua o carte din
legea de cdpdteia oricdrui programator Asimov" sau,,Ce cirti aveti despre raft penh! a-i vedeacopefta$i a o rdsfoi.
w e b . D a c d5 r i m d i n a i n r ec u m \ r e m s a PHP?", vom pune la dispozitia vizitato- Cam acelagilucru vom face qi in site-ul
functioneze o aplicalie, cdnd trecem la dlor nogtri un motor de cdutarepentru a nostfu.Apdsandpe link-ul reprezentatde
scrisul codului com putea sd ne concen- gisi rapid ceeace ii intercseazdferd a fi l i l l u l c d n i i: e d e s c h i doe n o u ap a g i n ai n
trdmexclu:iv asupraprogramAriiferasA nevoili sd piardd timp prelios cdutdnd carevom prezentadetaliile cA4ii, imag-
avem alte preocuperi.De aceeavom lua prin rafturi. Deoareceun magazinvirtual rneacopertei,pre{ul Si butonul de pentru
uncreion gi oh6rtie gi vomdescriefiecare aduceloafle mull cu unul real,o sd \d addugareacdrtii in cog. Vom mai adduga
p a g i n da s i r c - u l u if.u n c r i o n a l i r E lei lie5 i prezint in continuarefiecarepagind a gi o secJitmein care si putem vedea co-
modul in careutilizatorul va interactiona slte-ului pdn analogiecu o librdrie reald. mentaxiilecelor ce au citit deja cartea,
cu elementeleacesteia. precumqiposibilitateade a addugaun nou
Sd definim intdi ce dorim sd oblinem Vitrina comenta u. Aceastafunclie ested€osebit
de la site-ulnostru.Dorim ca vizitatorii de utild atunci cend cumpfudm o carte
sd cumpereod4i, la fel ca intr-un maga- Ne afl5m la ugalibrdriei. Putemyedea pentru cineva gi domeniul ne estestriin.
zin ..real".Li vor pureasdseplimbeprin rafturilede cd4i marcatesugestiv,,Manu- Av6nd 1adispoziliecomentariilecelorlalfl
spatiulvirtual, sAvaddcopefielecd4ilor, ale"- ..Medicind'-. ..Poezii"...Avennri", putem alege o povestire SF bund pentru
sdrdsfoiasca doua-treipagini.sa i5ipuna . . S F " . . . C a l c u l a t o a reet"c, . i n v i t r i n ds e pnetenul nostru chiar dacd n-am citit-o
flecare carte intr-un ao$ de cumpirdturi afld ceteva ce4i alesepe sprAnceanide niciodatd.
Ei la sfargit sd se ducd la cas6pentru a cdhe librar: cdrlile foafie populare gr
pliti. Fiecare carte va fi insolita 9i de o noile aparilii. Cogulde cumperdturi
scurti descrieredeoarecenu vom avea La fel va fi 9i prima pagind a maga-
un librar care sd facd acestlucru pentru zinului nostru virtual: vom prezentage- Atunci cdnd un vizitator va apisa bu-
noi. La fel ca la librdrie, cdr{ile vor fi nuriledecdnipecareleavemdisponibile. tonul ,,Adaugi in co9" el va fi redi-
aranjate dupd domeniul cdruia apartin best-:eller-urile. precum5i cele mai noi reclionatspre o noua pagina in care ii
intrdri. Pentru ci spaliul virhral ne pcr- e s t e a f i i a l c o n l i n u r u cl o g u l u ip i d o u a
a . . F r d r i s
mite, tot de la intrare vom oferi vizita- opliuni:sAcontinuecumparAturile 5ausa
; ' eJB g,sg, + -J torului gi un cogde cumpdrituri precum meargi la casi pentm a pldti. in cazul in
)i opliuneade cdutarepenFu a gasj o care dor€lte sd mai cumpere, aplicaJia
carte rapid, la fel cum ne ducem intr-o noastrava fne minte alegereavizitatoru-
libririe realddirect la primul angajatsdil lui pentru a i-o purea afi$a la o noui
inhebdm atunci cand cdutdm o anume privire in coq.Valoareainsumate a cd4ilor
carte. addugatein cog o vom afiga permanent

Pe raft
Intlim in magazin pentru a cumpira o ttrDraN tneJ
cartepenbu un pneten a cdrui zi de na$tere
esteduminici. Acestuiaii placpovestirile
SF ata cd ne indrcptdm spregirul de rafturi
deasupracdruiascrie,,SF"pentrua vedea
ce am puleaalege.Accsliucruenleechiv-
alent cu a da click pe unul din domeniile
!=tl o.#aEe tiJ.€!r' tor.*=lE6{L prezenlate pe prima pagina5i a inna in
Detaliilece4ii. pagina dedicatdacelui domeniu unde se Lista rezultatelor cdutdrii.

CHIP SPECIAL SITEDINAMIC


EDTTORTAL ,, TNSTALARE
,, TNTRODUCERE @ MFQL,, pHp,, CREARE ,, TtPs&TRtc
stTE, ADM|N|STMRE

talii va apisa pe ,,incheietranzaclia",ii


+ . d l r i q
va fi afiqatd o pagini de mullumire qi
dumneavoastdveti fi anun{atprin email
I. r .
de cererepentrua o puteaonoracal mai Ir t0r4na med
't
rapid. i,;i"";i h.-,r,, tu-j
:;-1

Administrare :..l' ,f u*0,-*


litt;- , f;*J
Pelangaacesteavomaveanevoiegi de .i,l il !*ij:li*!i
o sec{iunede administare cu ajutorul - t l
cireia sdaddugdmsausdscoatemce4i din -'""'
rafturilemagazinuJui vinual. sd definim ::""J# jr"".,*-
domenii gi sErevizuim comentariilevrzr-
tatorilor (existSqi posibilitateaca vrcun
glumel sd adaugeun comentariunepo- iilta ca4itor oin domeniul Poezii.
PrimapaginS:cele mai noigimai popu- tri\il carear trebuiSterssau modificat.1.
lare ci4i. cumpdrituri
Tot in sectiuneade administarevom avea
intr-un coll al paginii, pentruaimbunatdli o paginaunde.d vedemultimelecereri5i casa. php - formularul de introduc-
expedenlavizitatorilor pe site-ul nostru sd bifEm tranzac{iileefectuatecu succes ere a datelorpenmrexpediere5i platd
(ace$tianu vor mai trebui sa calculeze dupi primireabanilorgitdmitereacA4ilor prelucrare. php paginacare va
perrnanenlin minle s(areabugetuluide cerute cdtre destinatar. prelucra datele trimise prin formularul
caredispun).Utilizatoru)va puteaapdsa din casa.php:le inhoduce in baza de
in oricemomentpe co) pentrua-i re\ i/ui Structurasite date,vd trimite un emailde norificare5i
conlinutul (c64ile alesepAndin momen- apoi ahgeazd,,Multumim pentru ca a.ti
tul respectiv). Daci totalul depdge$te Dupd oeam terminatcu carinlele,vom cumpdmt de la noi".
bugetul alocat el poate scoate o cafte- trecela impd4ireapepagini.Astfel avem:
doud din coq.Daci in schimb igi aducem Zona de administrare
a m i n t ei n u l t i m u lm o m e n ct d u n a l t p r i - Zona publici Toatepaginile din aceastdzone vor fi
eten cduta aceeaqicarte ca cea pe care index . php prima pagint prolejate de parola pentru ca numai
doregtesi o ddruiascd,utilizatorul poate d o r ^ n r - . o r o p a g t n ad e d t c a luSn u i dumneavoastrdsd aveli acces$1se vor
modifica numdrul de bucdti din co$pen- domeniu (SF, Aventuri, etc.) in care afla in directorul admin:
tm a cumpdm doue in loc de una. afisdm cd4ile din domeniul respectiv index. php - afi$eaziun formular de
carte . php pagina in care putem login;
Gdutare vedea detalii despre carte, coperta,co- login . php-verificd informaliile din
mentariileutilizatorilor gi in carefiecare formular qi autoizeazd sau nu accesul
Sd presupunem ci vizitatorulva veni utilizarorr a puteaadaugaun comentariu mai departe,la pagina urmitoare;
pe site-ul nostru ciutand o anumecarte. personal om-n--. oho cu ajuton-rlacestei
.aat pagini vom facecelemai deseacliuni. Ea
Pentruaceasta situalier om aveafunctia _,!_.r,a ,. rlr vaDJO_

de caulare.El va puteacdutadupi mai cesa textul trimis de utilizatod gi il va va conlinecomenzileinciLneonorate5i


multe crite i: autor, numele c54ii sau adeugain baza de date vi va da posibilitateade a le marca.in
descriere.Rezultarulii va fi afiqatla fel cos.php - pagina unde vizitatorul momentul in care primiji banii pentru o
c a i n p a g i n ad e d o m c n i ut:i t l u .a u l o rs i poat€vedea$i editacon{inutulcoguluide comandd o puteti marca ,,Vdnduf' 9i
descriere,cutitlul subformi de link citre aceasta nu \ a mai apdreain listd.DacI in
pagina dedicatAcd4ii. schimb o comandi estemai veche de o
lunA o puteti gterge deoareceprobabil
Casa cumpddtorul s-a dzgdndit 9i nu s-a mat
dus la pogti pentru a vA t mite banir;
Deoarecein RomAniainci nu se pot adaugare. php penhuaddugaresau
face tranzac\ii online adevirate, solulia $tergercde cd4i $i domenii din e-magazin;
ceamai la indemdndpenhu a puteavinde n r o t n ac u
onlineeslerrimitereade catrecumpdrd- ajutorul cdreia vom putea modifica sau
tor a banilor prin mandatpo$talsauordin $tergedatede pe site: cdrJi,autori,dome-
de plat6, urmand ca dupl confirmarea nii
pliii vanzetorulsdii expediezeacestuia opinii.php - afi$eazd comentadile
produsele comandate. Astfel.dupAce \ i- utilizatorilorneverificateinci de noi gi
zitatorulnostrus-ahotdretasuprac64ilor ne dd posibilitatea de a Ie tterge sau
ce dore$tesdle cumpere$i apasdbutonul modifrca pe cele nepotdvite.
,,Mergi la cas6", el va fi redireclionat in continuarevom fiece la creareaba-
spre o noud pagind in care va putea zet de date a magazinului virtual umand
introduceadresaundedoreqtesd le pri- ca apoi sdfacempaginilcPIIP din careva
Cogulde cumpareturi.
meascd.Dupd introducereaacestor de- fi compussite-ul. T
CHIPSPECIAL SITED]NAM]C
EDtToRtAL
,, TNTR0DUCERE
,, tNsTAuRE
,, oRGANtzARE pHp,, CREARE
stTE ADMIN|STRARE
Ttps&TRtc(s
"@ " "

Introducerein MySQL

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.

r ^. l 8 : 0 0S t i r i
I a Iel ca inF-o librarie.cd(ile din in miruntaiele
I
magazinul nostru vifiual vor fte- 19:00 Deselle
anilnate:
l'lica
sirend bazei de date
I buialaniatedupddomeniulcdru ra 20:00 Talksholtfinanciar
ii apa4in, nu vom pune laolaltd intr-o 21:00Filnsefial:StarTrek(ep.140) Am spuscdbazade dateesteo coleclie
harababuri fird sensromane de aventuri pelltru
16:00 Progmln copii organizatA. acum esle momentulsa vd
cu manualeScolareli ctu1ide psihologie arat Si cum este organizatd. O bazd de
aprofundatd. Canalul
C date estecompusddin unul saumai multe
in aplicalia noaslrAva rebui sd orga- 17:00 Dese|leanilnate:De)(ter tabele (tables) care, la rAndul lor, sunt
nizdm datele cdrJilor in a$afel incat se le 18:00 Fillll (ep.l0l)
serialVlP formate din inregistrdridispusein cdm-
putem gisi ugor dupd domeniu, sd 1eor- 19:00 Stiri pun (fields).
dondm dupa titlu sau si le alegem pe cele 20:00 Filln:Lofd
oftheRillgs Daci a,ti lucrat \.TeodatAcu un pro-
aparlindad unui anumit autor. So\ia cea 22:00 Doculnentar
ilareh
alb gram de calcul tabelarvd pute,tiimagina
mai flexibili care se corespundi acestor baza de date ca fiind documentul ce
cerin{e estebaza de date. Sd ne imaginem ce tiiem cu foarfeca continemai multe foi de lucru (tabel€l€),
din ziar fiecarenumede program9i ori cdmpurileca fiind coloaneletabelelorgi
Colecliide date de difuzare. o inregisfiaxe oarecare ca fiind un rdnd
Atunci ne-am pulea ordona progra- din tabel. SA ludm exemplul c64ii de
Baza de date este,in Fei cuvinte,o mele dupd ora difuzdrii astfel incat sd telefon.Bazade dateva conlineun sin-
coleclieorganizatA. Caexemplev-agputea putem distinge mai ugor ce ne intere- gur tabel cu 4 campuri: nume, prenume,
da carteade telefon sauprogramul TV din seazdintr-un anume interval orar: adresd,numar de telefon.
jumalul pe careil citili diminea{a la cafea.
in cartea de telefon gdsim numele si pre- ora l*r|ne
Droqra|n Ca||al l{ulne PEnunE ldn6i llmrdr trl€fuir
numele abonatului, adresagi numdrul de 16:00 Deseneanimate: Andu Paul Lunii29 4567893
telefon, toateacesteaordonatedupi nume, Balanel
siMiaunel CanalulA Baciu Biama Viforutuils 3456874
pentru a cduta mai uqor o anumiti per- Muztca Canalul
B Cret|] l.lihai l'luncii4 2154686
soand.Dacd am avea carlea de telefon in pellhu
Prugm|Il copii Canalul
C tulq Ra|noIIaRepublicijl4 1445320
format elechonic int-o bazd de date am 17:00 Docu|nentar:
Ald0iha mzboiln0ndial
Cdndlul
B Zim Ghe. Bd.GaiizA 6522554
putea face o ordonare dupd numlrul de Deseneani|nate:
telefon in ordine crescetoaxepentru a afla DeJ(ter canalul
c Conlinuhrl fiecirei linii se numegte
cine are cel mai mic numfu. Am put€a de 18:00til|n:lacereaInieilor Cdnalu
A generic iffegistraxe (recortl . Drn pnma
asemeneasd aflim ca,ti abona(i au nume Stiri Canal|ll
B iffegistrare gtim cA Andu Paul locuieqte
care incep cu J, c61i dintre ei au prenu- Fil|n
seialVlP(ep.101) CanalulC pe Lunii 29 9i are numlrul 456789.
mele lon. numarulde abonalidin ora9.pe 19:00 Siiri CanalulA Valoareac6mpuluiNrize al primei in-
care stradd sunt cele mai multe posturi 0eserle
allirnate:Lilo
siStitch CanatulB registrlri esteAndu, iar valoarea c6mpu-
telefoniceqi agamai departe. Stiri CanalulC ltti Prenume a celei de-adoua inregistrdri
in programulTV informaliileau urmd- 20:00 Fil|n:atrix Canalul
A este Paul. Baza de date a departamentu-
toareastructuri: canalul, ora difuzarii, nu- TalkholYfinanciar CaIlal|llB lui contabilitate a unui magazin de pa-
meleprogramului.Acesteasuntde obicei Film:Lordoftheflinqs CdndlulC petarie r a avea mai multe tabelecare si
ordonatedupecanal $i ora difizdrii, astfel: 2l:00 Filnlserial:StarTrek conlindtipuri diferitede dare.\iciunei
Gp.140) knalulB conrabilenu ii va fi uLilsi aibd fumizorii
[analul
I 22:00 l,|uzica Canalul
A amesteca!i cu stocurileti chelruielile.ci
16:00 Desene anill]ate:
Balallelsi
l'lia|lnel DoclII|eniar
Mareledlb CanalulC va dori sd aibd aceste date separate, dar
18:00 Filln:TacereaInieilor totodati puse laolaltA in acelaqi1oc.Ea
19:00 Sti Av6nd o bazd de date scdpbmgi de ziar va a\ ea nevoie de un tabel Sroc care sa
20:00 Fil|n:|liaiix gi de foarfecd deoarece ne putem ordona conlini doub c6mpuri:
22:00 lli zica programele dupa plac. pulem alege sa
vizualizim doar programele intre ora 17 llumeprodns llr.buc.
instoc
Ca||al{l
B $i ora 22, putem afiSape ecranulcalcula- CreioaIle 3511
l6:00
l'luzica torului doar filmele din program gi aga Pix|lri 5000
17:00 Doculnentar:ll
doilea
mzboi
ln0ndial mai departe. PlicuA4 215

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

Va mai aveanevoiegi de un tabelChel- Baza noastrd de date


ruieli caresd aibi umatoareasmchra:
Pentru a ne putea face o bazi de datc
Produs
sax$fliciu Cost Dati trebuieca serverulMySQL si fie pomit.
Decofdti|lni 5.000.000|ei
20.12.2002 Dacd ali umat pagii descriqiin capitolul
Repafatii 700.000
h! 03.01.2003 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
Jatuze
e 12.000.000lei
04.01.2003 ruleze deja, el fiind repornit automat la
fi ecarerestartarga calculatorului.
Acesteasuntbazelede datedisponibile
Pe langdacesteaii vor mai trebui incd in continuareva trebui sd folosim o pe server.
cdlevatabelepentru salarii.vanzari.etc.. aplicaliecu ajutorulcareiasacomunicam
penhu ca Ia sfer$itul anului sA centrali- cu serverul.Aplicalia se numegtesimplu Rezultatulpdmit de la serverva arita
zeze dateledin toate $i sd facd bilanlul. mysql.exegi segisegtein acelaqidirector, ca in imagineade mai sus.
Din acestexemplu purem obierva cA c:\mysql\bin\. Vom intra in command Am incheiat interogareacu punct $i
existi cazuriin carearem nevoiede mai promptapisdndpe Stan.apoi pe Run pi virguli deoarecetoate comenzile SQL
multe tabelepenhuorganizareainfonnaEiei, scriindcommand in campuldestinatpro- (cuexcep{iaQUIT qiUSE) tlebuie inche-
tabelepe carele linem inrr-osingurdbazi gramului ce urmeazasd fie rulat.Odata iate astfelpentru a semnalaserveruluicd
de date pentru o accesaremai ugoard sau afla1iin linie de comandi, scriem: am terminatde scris propozi!ia$i ci
pentru a intermedia relafii inhe ele. Dar poate tlece la procesareacererii. Existd
_.. .
despreastamai tarziu. n, c ,t ava _^
Ot cazuriin careo interogarepoatefi foarle
O bazdde datepoatea\ea un numar lungd gi atunci ar trebui si o ,,rupem"in
uriagde tabelegi inregistriri. De pe site- iar cdnd ni se cere parola apdsdmEN- cateva buciti mai mici, pe mai multe
'sl h\rw.tnysaLcom afldm cAexistdla ora TER. rSnduri.VySQL ar da eroaredaca ar
actualdbaze de date pe MySQL Server Daceserverulnu estepomit vom pri- observa cd propozitia este neterminate
cu 60000 de tabeleqi 5 miliarde de inre- mi mesajul de eroare,,Can't connectto agacd nu uitali si incheiali interogdrile
'localhost"'.
gistf'ri. lmpresionant,nu? Cum ar fi lost MySQL server on cu punct $i virguli.
sdstocdmaceastecantitatede informajie Serverulde MySQL, ca orice server Sdinspectimunadin bazelede datede
pe hartie,in cataloage,9i si cdutamprin care se respecti, oferl posibilitatea de a pe acestserver.Pentrua face acestluclu,
milioane de pagini ce ne intereseazd? avea mai multi posesoride datepe acelaqi spunem serverului cu ce baz6 de date
sistem, fiecare cu dreptwile lui. Astfel, dorim 5i inlerac!iondm in conrinuare:
Ce este MySQL? serverulunui ISP de exempluva puteafi USE tes]]
folosit de mai multi oameni, fiecare av6.nd Vom primi mesajul ,,Database
MySQL este cel mai popular sistem mai multe bazede dateqi neput6ndsdvadd changed"gi bazade date'test'\ a ramdne
de management pentru baze de date ce au ceilal! utilizatori ai aceluiagiserver. ceain carene r om faccinrerogarile pdnd
relaJionaledeoareceeste Open Source Utilizatorul implicit (Ei cu drepturi la deconeclarea de la serversau dacd
adici poatefi lolosit lbrd sa fim nevoili depline, de altfel) este root, iar parola decidem sd folosim o altd bazFtde date,
sd pldtim vreo sumd de bani. MySQL iniliali este goald. Vom lucra cu aceste cu aceeali comandA:
Servera fost creatpentrua lucra cu baze date pentru inceput dar puteli consulta USE alta_baza_de_date
de date mai rapid decat soluliile exrs- manualulMySQL inclus pe CD pentru a Setareaunei bazede dateca fiind cea
tente deja 9i este folosit de ani buni in afla cum putefi addugautilizatori noi sau curentA nu ne impiedicd totu$i sA ac-
medii foarte solicitante. schimba o paroli in MySQL. cesdmtabeledin alte baze de date in
intr-o bazd de date relajionald datele forma nume bazd de date.nume-tebeL
srult stocatein mai multe tabele separate, SHOW ComandaUSE estepastratdpentru com-
fiind astfel imbundtdjite viteza 9i flexibili- patibilitate cu Sybase.
tatea. Tabelele pot fi legate prin rclatii Odatd autentificali vom putea comu- Tot comandacomandaSHOW o vom
dehnite de noi, fiind astfel posibil sd nicacu serverulMySQL folosind comen- folosi pentru a vedeace tabele exist[ in
combinim la cfferc datele din mai multe zi SQL. Trimiterea unei comenzi SQL baza de date test in care ne afldm:
tabele. citre serverul de baze de date se mar SHOW TABLES,,
numegteqi intsrogare. Sd facem prima Observdmcd baza de date test nu are
Ce inseamni SQL? noastrdinterogare$i sdaflAmdac6existd nici un tabel. Sdvedemdac6cealaltdare,
deja vreo bazi de datepe server: schimbind bazade dale cu caredorim sd
SQL, acronimul pentru ,,Structured SHOWDATABASES; interacjionem(USE mysql) qi repetAnd
Query Language", este limbajul stan-
dard pentru comunicarea cu bazele de
date. Comenzile SQL sunt folosite pen-
tru a interactiona cu baza de date (de
eremp)usi adauge.si modifice sau sd
gteargddatele).
Alte sisteme de baze de date care
folosescSQL sunt Microsoft SQL Serv-
er, Access,0racle, Sybase,etc. 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 Nu este nici un tabel in baza de date
COLUMNS. test.

CHIP SPECIAL SITEDINAM]C


EDTTORTAL
,, INTRODUCERF
, TNSTALARE
, oRGANTZARE pHp, cREARESTTE
, Oo*'*'rr*r, , ,o*r**
@"
E

CREATE TABLE tabel_test2(campI SELECT 'camp 1\ EROM \tabel al


TE^XT,camp2 INT, camp3 TINYNT); carui nume are spatii ,;
In imaginea aletumtd putem vedea
maimulteinlormariidesprefiecarecdmp. INSERT
Si le analizlm;
- prima coloanS,Field, este numele Haideli si introducem catevadate in
cdmpului; tabelul carti. Comanda pe care o vom
- a doua, Type, este tipul de date folosi esteINSERT !i sintaxaeste:
Interogdrile SQL se pot scrie pe mai
multe randuri cu conditia ca ultima conlinut de cdmp. TEXT inseamndci
linie sd se incheie cu punct Si virguli. datele de pe coloana respectiva vor lr INSERT TNTO tabel (canpl, canp2/
te\le. NT ci vor fi numere integi gi camp3) values (va1oare1, vatoare2,
comandaSHOW TABLES. TINYINT ci in coloanarespectivdvor fi valoare3 )
O alt6 utilizare a lui SHOW este introdusedoar numereinfe -128 $i 127;
SHOW COLUMNS care afi5eazd - in a treia dace esteNULL sau nu, a in romdnegteaceastdcomandd s-ar
informalii desprecoloaneleunui tabel. patra.Key arali dacAeste inder, in a traduce ,,introdu in cimpul I valoareal,
cincea, Default Value, este specificatd in cAmpul2 valoarea2 qi in cAmpul3
CREATESi DROP valoareaimplicitd $i ultima coloanearat6 valoarea3",iar in format tabelarar adta
ce alte propdetdti mai are cimpul. in felul urmdtor:
An spus ci vom face o bazd de date Sd revenim la magazinul nostru de
specialpentrusite-ul magazinuluinostru cd4i, sArecapituldmdatelede careavem canpuLl cenpul2 carnl)ul3
de ce4i. Si tlecem atunci la treabd.Vom nevoie in site $i se incerc6m sd le orga- valoareal valoarea2 valoarea3
scrie in linia de comandd; nizdm logic. Fiecare carte are un autor,
un titlu $i o scurti descriere.Toate sunt Sa hecem Ia treabii 5i sa e\ersAm
CREATEDATABASEfibrar.ie t de tip text, deci aqavor fi qi tipurile de comandaINSERT:
cdmpuri aferentelor:
Serverulne afigeazi,,QueryOK" deci INSERT INTo carti (autor, titlu,
ba,/ade datea fosl creara.Va rrebuisi CREATETABLE carti ( descriere) V A I , U E S( \ W i l f i a m S h a k e s -
mai spunem servemlui cA aceastaeste autor TEXT, peare', 'Romeo si Juliera,, \cea
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/ n- povesLe de ordqos-e
"L1oosd
intenctiondm in continuare: d e s c r i e r e T E X T )t a tuturor tinpurilor' );

USE fibr.arie in cazul in care nu a fost sernnalata Am pus ghilimele in jurul fiecarei
nlci o eroare,tabelul nostru a fost creat. valori ce urmeazi a fi introduse pentru a
Am putea sd folosim interogarea Siverificdm, de dragulexerciliului,acest stabili cd acela este un text unitar, un
SHOW TABLES qi aici, insi eanu ne-ar lucru, cu comenzile SHOW TABLES 9i string de intlodus in cdmpul respectiv.
ardtamai mult decat Stim deja: cd noua SHOW COLUMNS. Imagina{i-vdcam cum ar interpretaser-
bazdde datenu are inci nici un tabel. Se Pentrua Stergeun rabel.o bazd de verul comanda noastrd dace am scne
facem, deci, unul: date, un index sau o coloand dintr-un numele autorului in forma Shakespeare,
tabel folosimcomandaDROP astfel' Williqm. Atunci. textul interogdrii ar fi:
CREATETABLE tabel_test INSERT INTO carti(autor, titlu)
(camp_test TEXT); DROPTABLE tabel_test; VALUES(Shakespeare,William, Ham-
DROPDATABASElibrarie; let) qi serverul MySQL ne-ar retuma
Temi: executati comenzile SHOW urmdtoarea eroare: "Column count
TABLES 9i SHOW COLLMNS penrru De5iMySQLare.uponpenhrdiacriri- doesn't match value count at row 1"
nouabazAdedategitabelulproaspdtcreat. ce qi setulde caractere8859-2,esteprefe- deoarecese aiteapta ca pentru doua
Sd ludm cuvant cu cuvAntpropozitia: rabil sd nu folosili diacritice in numele coloane si aibi de inrodus rot doud
CREATE TABLE tabel resficamp_rest bazelorde date,tabelelorsaucdmpurilor. r alori separate
prin virgula.nu rrei.Dacd
TEXT) inseamni,,creeazetabelul De asemenea,nu puteli folosi ca nume de am li specificat ce wem sd introducem
tabel_testcu un cdmp numit camp_text tabel sau de cemp cuvintele rezervate valori in toate cele trei coloane am fi
al cdrui tip esteTEXT. Pentru a afla ce (nume de func1ii, tipuri de caractere din primit alt mesaj de eroare deoarece
este tipul de date qi la ce folosegte MySQL precum create,drop saucolumn). MySQL nu ar fi recunoscut textul
consultatioglinda ,,Tipuri de date". Ar mai tebui sd qtiti c[ puteli folosi 'Shakespeare'
ca fiind string gi s-ar fi
Si facemincdun tabel,cu trei coloane: numede tabeleca-reconlin spaliidar in oprit din execufie.
practicdtrebuiesi incadralinumeleintre DacAdorim, putem sdomitemuna din
backticks " (semnul back-tick il gdsili coloaneca in exemplul urmdtor unde nu
pe tastaaflatAimediat sub Escape): addugdmnimic in cdmpul descriere:

CPIATE TABI 'rabe] .. ^a-u_ nume (auiror,


INSERT INTO carli titlu)
a r e s p a t i i ' { ' c a m p 1 , T E X T );
\
V A I , U E S( \ W i 1 l i a m Shakespeare, ,
Campurile9i tipul de date continut de S H O I I^ O I U M N S - P O l v \ L a b e _ a I c a ! - , 'Hamlet');
acesteadin tabelul tabel testi.
nune are spalii';

CHIPSPECIAI SITEDINAMIC
EDIT0RTAL,,
TNTRODUCERE,
TNSTALARE,0RGANTzARE pHp,, cREARESTTE,,
ADMTNTsTMRE,
Trps&TRrcKs
@

Sintaxalui NSERT poatefi simplifi-


cati dacd ludm in calcul toate cdmpurile
tabelului deoarece le putem omite, Si nu amestecim mere cu pere.,.
Tipu.ile de date care apar in coloanele MySQL ar putea perea o complicaf.ieinutild la prima
men,tionenddoar valorile ce urmeazi a fi
vedere. Oarc nu am putea la o adicd sAad-iug5n datele in ce formi avem nevoie? Lucrurile nu
adiugate ca in exemplul urmitor: stau chiar ata. MySQL alocd spaliu pe disc in f,mc1ie de tipul de date specificat de utilizator.
Daci in tabelul salariati avem o coloand pentru numdrul de zile de concediu legal o vom seta
TNSTDT TN-O c..L .i ,A . S (\t/. La ca fiind TINYINT deoareceaceastaeste valoarea mrmedci in care se incadreazd (un salaiat
'Poezii', 'Cele nu va avea mai mult de 127 de zile de concediu pe an!). Pentru fiecare inregisharc in coloana
Eminescu', ma1
zile concediu MySQL va aloca I blte de memorie, indiferent daci un angajat are 2 zile de
t -ro-se oo-7- - ale po- .-u. concediu $i altul are 18. Dace acela$i camp il setdm ca INT, MySQL va aloca fiecdrei
na!ional'), inregistdri in coloand 4 b)-tes, indiferent de nurnirul de zile de concediu introduse si astfel
pentru fiecare iffegishare (flecare angajal) se vor pierde 3 b),tes.Acesta este doar ur exemplu
dar puteti avea la un moment dat o bMi de date cu I 0 milioane de inregistrdri Siatrmci pierderea
ObservSm cA nu am mai specihcat
a 3 bytes la fiecare inregistrare se haduce in cdteva zeci de MB de spaliu.
coloanelein careurmeazAsdintroducem Iate $itipurilede datein bazelede dateMySQL, spaliulpe careil ocupiprecum5i valorile
date, sintaxa fiind astfel mult simplifi- minime ii maxime pe care le pot avea.
cald. DacAdorim si beneficiemde sin-
Valori numerice:
taxa prescurtatdpentru INSERT dar nu
Tip Bytes De la Pen; b
avemo valoarepentruun cemp.putemsa TINYINT 1 ,128 127
nu punem nimic intre ghilimelele care SIT4ALLINT 2 -32768 32767
delimiteazdvaloarearespectira.ca in MEDIUI\,1INT3 -8388608 8388607
INT 4 -21474436/.8 2147443647
exempleleurmdtoareunde nu introducen -9223372036854775AOA
BIGINT 8 922331203685477s807
nici un text(\au un rerl gol.dacavrefi sa
ii spuneli aqa)in campul descriere: Toatetipurile de mai susau un atribut oplional (nestandad),UNSIGNED.Puteli folosi
acestatributilr definireatipului de dateal unei coloaneatuncicanddorii secontinddoar
-\SEPI valoripozitive.Ur campdetip TINYINT va puteaconlinenumereintre-128ti 127in timp
INlO d--i VA-UES('Mrh".i
ce alt camp,TINYINT LINSIGNEDva puteaaveavalori intre 0 ti 255. La fel, penau
Eminescu' , \Poezir, volunul 2' , ', ) t SMALLINT valorile sunt d,ela -32768 pand \a 32'16'l in timp ce pentru SMALLINT
INSTBT T\TO cdL.i /Al jLS('l.1rha' I-INSIGNEDelepot fi intre0 9i 65535.
Eminescu', \Poezii, volumul 3,, r, ); DacAintr-uncampTINYINT carearevaloriintre-128Si 127veli incercaseintroducefi
o valoaremai micede -128eava fi convertittin ceamai micevaloareadmis5,-128.Dacd
INSERT INTO carti VAI-UES( \Alexandru
'Legendele Otimpului/
veli incercasa inftoducetio valoaremai mate de 127 ea va fi convefite in ceamai mare
Mitru' , r, ) ;
, valoareadmisede fipul cdmpului,127in acestcaz.
INSERT INTO carti VAI-L'ES1 ,ceorge
Cosbuc', 'Fire de Lort Poezii' , " ) ; Dati/timp:
INSEPT TN-O ca-L- VAULS('f4 h.r
Column type
DATETlI\,4E 'YYYY-NIl\,4-DD
hh:mm:ss'
Eninescu', 'ceniu pustiu', "); DATE ,YYYY-IT,4I\/-DD'
TII\,1ESTAI\,I
P YYYYI\4MDDhhmmss
Temd: Adiugali folosind INSERT TIME
YEAR
incd 5 ci4i in tabel specificdnd titlul,
aulorul;i eventualo scunadescriere. Tipul decampTIMESTAMPoferi posibilitateadea dataautomatoperaliiledetip INSERT
qi UPDATE. El estecompusimplicil din 14 caracterepentru formatul 'YYYYI4MDDh-
SELECT hmmss'darputemsAspecificemla creareaunuitabelci dodmsi continAmaipulinecaractere:

Timestamp
Acum avem baza de date, avem $i Column
type Displayformat
cateva date introduse...dar cum le ve- TI\TTESTAMP(14) YWYMtt4DDHHtVt\tSS
dem?Vom folosi SELECT, ceamai rm- T \,4ESTAMP{12) YYI\,4MDDH HIt,4I\,4SS
TIVESTAMP(10) YY|\ill\rDDHHli,lli,
portant6 comanddSQL qi ii vom vedea
TTMESTAMP(8) YYY/IVIMDD
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
ennd- TnIESTAMP(6) YYMMDD
toare. Am aflat cum putem vedea ce TTMESTAMP{4) \"Yl\ill\jl
labelesunt intr-o bazd de dare,hai sd TII\4ESTAI\4P(2)

aflfun 5i ce conline un tabel. Sa IuAm


Stringuri (tiruri)
primul tabeldin llcut de noi gi si afi;am Tipurile de string-uri in MySQL sunt BLOB, TEXT, CHAR, VARCHAR, ENUM 9i
datele din el: SET.In tabelulurmdtorputetivedeamerimeamaximdadmisdpentrucelemai folositedintre
eleprecumgi spa(iulalocatpe discpentrufiecare:
SELECT * EROM tabel jrest,
Tip Miime maximd Bytes
TINYTEXT sauTINYBLOB 2 A-1 255
Ne va fi retumat urmdtorul mesaj: T€XTor BIOB 2^16-1 (64K-1) 65535
MEDIU[4TEX-'or MEDIUIV1BLOB 2 24-1 \16M"1) 16777215
(0.17
LONGBLOB 2"32-1 (4G-1) 4294967295
Empry set sec)

Campulde tip BLOB poatecontineo cantitatevariabili de informalie,similar cu TEXT


Empty set inseamnd cA tabelul nu insddiferit printr-un singuraspect:cdutareaintr-un campBLOB estecasesensitive(seface
con{inedate,e go1.Numirul dinparanteze diferenfdintre majusculegi minuscule),iar intr-un campTEXT nu este.
reprezintdsecundelecarei-au luat serve- Tipul VARCHAR estesimilartipului TEXT cu deosebirea ci inh-o coloani de tip
VARCHARputemspecificanumdrulmaximde caractere ad$is.
ruluica sdretumezeun rezultat.Sdincer-

CHIP SPECIAI SITEDINAMIC


ED|TORIAL,,
|NTR0DUCERE,,
tNSTALARE,,
ORGANTZARE pHp,, CREARESTTE,
ADII|NISTRARF,,
TtPS&TRICKS
@

cdm cu celAlalttabel,in careqtim sigur cd Avem suficiente date pentru a afla tabel). IatA cum functioneazdLIKE $i
am introdus date $i sd vedem cum anti cateva utiliziri noi 9i foarte interesante wildcardul %:
acestea: ale comenzii SELECT. Putem adiuga
condilii de selectie$i putem astfel alege SELECT auto(, titlu FROM carti
SELECT * FROM calti; sd ne fie afi$atedoar titlurile c54ilor de W H E R Et : t l u LIKE 'poezit?';

Mihai Eminescu,astfel:
Acum putem vedea foafte clar struc- Vor afi$atetoateinregistririle in care
tura gi con(inutul tabelului. Asteriscul * SEIECT titlu FROM cartl nhere titlul cnr{ii incepe cu cuvdntul ,,poezii".
d i n S F L F C| * F R O I \ 4c a n i e s t ee c h i r - autor:'Mihar Emjnescu' ;
alentul lui ,,tottoate", iar comandas-ar titLu
traducein limba romana,,arat5-mitot din tltlu
t a b e l utle s t " .A i t e r i s c uill p u t e mi n l o c u i Mihai hrinescu Poezil

cu numeleunui cdmppentruavedeadoar
ltihai Enunescu Poezii, volunul
continutul acelui cAmp.Astfel:
Poezri, volunul 3
Geniu pustlu
SELECT titlu FROM carti; 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 - i n s e n s i -
ne va afi$adoar conlinutulcempuluititlu: Sd afi9dm toate volumele de poezii tive astfelincdt nu va trebui silinefi cont
din baza de date, indiferent de autor. de literelemari saumici aruncicand r 6
titlu
Dacd executim interogarea: referiliintr-ointerogare la valoareaunui
cAmp. Comanda:
Harnlet SEInCT * FROM carti i.lHERE
Harnlet titlu=' P o ez i i ' SE],ECT * FROM carti WHERE titlu
Poezii
LI(E 'apoezii't
Poezii, volunul 2
Poez ii, voLunuL 3 ne va retumadoar carteaal cirui titlu este
chiar ,,Poezii", neludndule pe celelalte ya afiSatoate inregistrdrilein care titlul
Fire de Lort Poezii in considerare: ca4ii se termind cu cuvdntul ,,poezii":
Geniu pusriu

Putem selecta sd ne fie afi$ate mal tirlu descriere

m u l t ec o l o a n es.p e c i f i c a dt een o i .i n o r i c e
I Mihai EminescLl Poezii Cele mai frumoase
ordine (nu neapdratin ordineain carese I national
afl6 in tabel),cain interogareaurmetoare
unde afi9dm coloaneletitlu $i autor:
Folosindconditiatitlu:'Poezii' nu vor yolumele Poezii de Mihai Eminescu gt
SELECT tillu, autor fi afi;ate volunele 2 qi 3 din colectia de
FROM carti Fire de tort - Poezil de Ceorge Coqbuc.
poezii de Mihai Eminescugi nici cartea Similar,
intitulatd ,,Fire de tort -
Poezii" de Coqbuc.Dacd SELECT * FROM carti ITHEREtitfu
titlu
vrem si obtinem toate LIKE '?poezii?';
Hamlet rni I I i:m sh:La<na:rF cdr{ile care au cuvantul
H a mL e t t^lilll:m qh:L.qnF:rc
,,poezii" in titlu putem va afi$a toate inregistrdrilein carc titlul
Poezii Mihai Eminescu
Poezrr, volumul 2
faceacestlucru inlocuind ce4ii conline cuvdntul ,,poezii" oriunde
Mihai Eminescu
Poezii, volu:nul 3 Mihar Emanescu egalitatea cu opemtorul in cadrul textului.
Legendele oLrmpului Alexandru MiLru LIKE 9i folosind wild- PutemextindecomandaSELECTpen-
Fire de tort Poezrr George Cosbuc card-uri. Semnul cu tru a adaugaun nou crileriude.electie.
Geniu pustiu Mihai Eminescu
functie de wildcard intr-o Daci dorim sdalegemtoate cd4ile de
interogareMySQL este% poezii de Mihai Eminescufird sd ne fie
Putem afi$acd4ile pentm pentm care (semnul * cu care probabil sr.rnte{ideja afi$at$iromanulscrisdeacestasaucafiea
cdmpul descriereeste gol astfel: obignuili este definit in SQL ca insem- de poezii a lui George Cogbuc, vom
nand tot/toate$i l-am folosit deja atuncr trimite cdtrebazade dateo interogarecu
SELECT * FROM carti WHERE cend am utilizat SELECT * FROM carti d o u d c r i t e r i i : , , r e t u r n e a z d - m it o a t e
pentru a afiga toate inregistririle din iffegistdrile unde autonrl este Mihai
Eminescu9i titl]ul cd4ii conline cuvantul
litfu poezii".
hrl I1i rm chrr.-sna:ra Hanlet.
M. Eminescu Poezlr, volumuf 2
M. Eminescu Poezii, volumuf 3 SELECT * EROM cartj WHERE
Ale,(andru Mitru Legendele olinpufui
- Poezii autor:'Mihai Eminescu' AND titlu
Fire de tort
M. Eminescu Geniu pustlu LIKE '%poeziig';

CHIPSPECIAL SllE DINIl'illC


EDTToRTAL,, TNSTAI-ARE,ORGANIZARE,@,
TNTRODUCERE TIPS&TRIC
ADNIINISTRARE,,
PHP, CREAREslTt,,
"

Itrtl-u

Mihai Eminescu Poezii Alexandru Mitru


n^-f 'r I rri .;ii ^.: I

Mihai Eminescu 2 l Mihai Eminescu


Mihai Eminescu Poezii / volumul 3 l william Shakespeare

Dacdvrem sdalegemtoateci4ile care autorii din tabel in ordine crescdtoare: Pentru a limita numdrul de rezultate
nu sunt scrisede Mihai Eminescu folo- retumate,folosim instrucjiuneaLIMIT.
sim operatorulde inegalitate(semrul !:, sEl,ECT autor FRoM carti ORDERBY Dacd avem 10000 de inregistrdri gr nu
opus lui :): autor ASC; dorimsdredemdecdtprimele3.folosim
LIMIT in felul umitor:
SEI,ECT autor., titlu FROM carti
W H E R Ea u t o r !: 'Mlhai Eminescu'; sF -!ct ' FDoY r ar - -IVT- 0, r;
Alexandru Mitr.u
ceorge Cosbuc
Mlhai Elrtinescu
Dacddorim sdvedemiffegistririle de
lritlu
Mihai Eminescu La3 la'7:
william Hamlet Mihai Eminescu
Mihai Eminescu sl- .rc_ ' Fpov Lar L ! ItMTl r,4
william shakespear:e
Mitru
George iar pentru iffegistrdrile de la l0 la 15:
Puternaveamai multe criterii de ordon-
are, ca in exemplul urmAtor unde ordona- S E L E C T * E R O Mc a T I i LIMIT 10,5,
Putemg6si toatetitlurile cdrlilor pen- rea seface dupd autor ascendentSi,pentru
tru carecempul descriereestegol astfel: fiecareautor.ca4ilesunl ordonatedupd Observdm ci primul numdr din LI-
titlu descendent: MIT esteinregistrareade la careseince-
SELECT tatlu FROM carti I'IHERE pe afigareagial doileanum[r estenumirul
descriere l: "; sEl-EcT autor:, titlu FRoM carti de inregistriri ce urmeazea fi retumate.
ORDERBY autor ASC, tii:lu DESC;
Analog, folosind operatorul NOT DELETE
LIKE putem alege toate c64ile al ciror Putem afla cateinregistdri sunt pen-
titlu nu incep€ cu litera P: tru un criteriu de selectiecu ajutorul lui DELETE sefolose$tepentru$tergerea
counto. Putem astfel afla aate inregis- inregistririlor dintr-un tabel (ne rea-
SELECT autor, tii:lu FROM cartl tldri avem in total in tabel: minrim ca pentruflergerealabelelor5i a
W H E R Et i t l u NOT LIKE \P?'; bazelorde datesefolosegteDROP). Sin-
SELECT co,.rnt (*) FROM carti; taxa lui DELETE este:
lautor Ititlu
I count (*) | D E L E T E F R O Mt a b l e WIERE conditii;
l.li I I iam Hamfet
8 t
A$a cum putem afi5a doar inregis-
Mrtru tririle ce corespundconditiilor noastre,
Geor:qe saucarciffegistrfuisuntin tabelal cAror la felputemcondiliona5i 5tergerea lor in
camp'autor' esteMihai Eminescu: func,tiede critedile specificate.
Mihai
Emrnescu
SELECT count(*) FROM caTti WHERE SEI-ECT * FROM cartl t'IHERE
autor='Mihai Eninescu' t autor='Mihai Eminescu' t
Teme de rezolvat: +-+
- afi9aqitoatetitlurile cdrlilor de Wil- count (* ) afigeazdtoatecirlile de Mihai Eminescu,
liam Shakespeare; in timp ce:
- afisali toatetitlurile carecontin litera I 4 l

T oriunde in textul titlului; DELETE FROM carti WHERE


- afi5atidoar titlurile cin-ilor ale cdror Cu ajutorul instructiunii GROUP BY autor:'Mihai Eminescu' ;
autori cu numelecaresetermini cu litera U; putem ,,grupa"rezultateleastfel incat sd
- afiga{i numele autorilor care nu se nu vedem duplicatele qi sd vedem doar va $terge din tabel toate inregistrdrile
termind 0u litera U; valorile unice. pentrucarecempulautoresteMihai Emi-
Si vedem, lolosindCROUP BY ce nescu,ldsdndu-lepe celelalteneatinse.
Putem folosi ORDER BY pentnt a autori avem ti sd ii ordondm crescdtor: ObservSmdoudlucruri: asteriscula dis-
ordonarezultateleunei selec!ii.cresca- pdrut, el frind inutil. MySQL va gtergeun
tor saudescrescdtor,in func1iede coloa- SELECT AUIOI EROM C Iti GROUP BY rdnd intreg la solicitareadumneavoastri,el
na aleasdpentru ordonare. au|oT ORDER BY autoT ASC; nu vapuleasa$teargd(logic)o co)oandsau
Iate, spre exemplu, cum putem afiga mai multe apa4inandunei inregistrdri. in al

CHIP SPECIAI SITEDINAMIC


ED|TOR|AL
,, TNTRODUCERE
,, TNSTALARE
,, ORGANTZARE pHp ,, cREARE
SITE,, ADtvINtsTRARE
@ , TIeS&TRICKS

doilea rAnd, cu aceastdexceptie,sinta-\a adduga sau $terge coloane 9i indecqi, Ce ne facem insi dace implementim
pentr:u$tergereseamanaca doud picdtud putem redenumi coloanesauchiar tabe- rnterogareain aceastdlormd in aplicalie
de apdcu sintaxapenhu selecfe.La fel ca luJ in sine qi putem schimbatipul de date $i intr-o bund zi primim spre vdnzare
in SELECTputemfolosimaimulteconditii conlinut de o coloand. Sd addugdm o aceea$icarte dar cu un pre! diferit? Ar
$i am putea $tergetoate inregistrdrile unde coloand, data, in care sd stocdm data trebui sdrescrieminterogareapentruane
autorlulesteMihai Ewfuerc, $i titlul cd4ii adiugdrii cn4ii in baza de date. Campul adaptasirua!ieipi atunci caurareaunei
contine cuvantuIpoezl/". data ai tabeluluicarti ne \a fi util atunci ca4i ar fi licutd cu interogarea:
cand vom afi$a vizitatorilor noutdlile din
DELETE FROM carti WHERE magazinpeprimapagind.El nu corespunde SELECT * FROM carti WHERE
autor='Mrhai Eninescu/ AND tittu datei la care a fost editati carteaci datei in .Lr-o 'W.I I ar -hck6spFo-o,
I,IKE '?poezii%,; carc aceastaa ajunspe rafturile virtuale ale AND trtlu=, William Shakespearel
magazinului nostru. Cele mai noi 10 titluri AND pret:l00000;
DELETE FROM cafii esteechivalen- din librdrie le-am afla astfel foarte uqor
tul de $tcrgereal lui SELECT x FROM folosind urmitoarea interogarc: Dacdamfolosir,mcAmpcaresAcontin;
carti, adica va $tergetoate iuegistrdrile un numdr unic de identificare pentru
din tabel. Nu il vom pune in aplicaredar SELECT Iitlu |ROM carti ORDERBY fiecarecate cAutareaar fi mult simplifi-
estebin€ de gtiut. clata DESC IIMIT 0, 10; catd:

UPDATE Sd addugdmnoua coloand,la sfArgitul SELECT * EROM carti !.]HERE


tabelului; rci carle=15;
Atunci cand rrem sd modificdm
conlinutuluneiinregisrrari
nueslenevoie ALTSR TABLE cariri ADD dat TEXT. U n e x e m p l ud e i d d i n v i a r ar e a l di m i
si o ptergemgi sao ad5ugamin \ arianta vine in minte: ali lost weodati la un
noud, putem folosi UPDATE care are Am scri. gresirnumelecoloanei,sao centru de inchidat casete video? Vd
urmatoareasintax': redenumim din ,,dat" in ,,data": amintiti ordineaincareeraupusecasetele
in rafturi? Un patron de centrude inchir-
U P D A T Et a b e l SET coloanal=, noud ALTER TABIE carti ieri numeroteazd fi ecarecasetanoupnml-
valoare a coloanei 1,, C H A N G Ed A t dAtA TEXT' ti gi o pune la coadi, in ordineanumer-
cofoana2: , noua valoare a otdrii, nu va cduta sa vadi unde ar intra
'o oqn- ' l,ihf -o,rd_._i
tu Ne aducem aminte cd existd tipul din punctde vedereallabetic,mai alcscd
DATE Eicd o datdcum e l2-12-2003ne- titluri precum ,,The Firm" ar putea fi
IIPDATE modificd conlinutul unuia sau ar putea li mai utild dacd s-ar afla intr-o puse gi sub litera F qi sub litera T, dupd
mai multor campud in flrnclie de condiqiile coloand de tip DATE decat intr-una de cum considerafiecare.5i atunciconfuzia
\pecificale.SArnodificam.de eremplu.in tip TEXT aqacd vom modifica tipul de ar fi qi mai mare. in plus ca sd adauge
coloana autor toate inregistrdrile Mihai date al noii coloane: titluri noiin lista de casetedisponibilenu
Eminescugi si le inlocuim cu M. Eminescu: vatrebui sdrescrietoatAlista,ci va adiuga
ALTER TABI,E carli doar titlurile noi la coadii,in ordinea
U P D A T Ec a r t i SET auto.:'M. Emines- C H A N G Ed a t a data DATE; numerolSrii.Dumnea\oa\ha pure!iast-
cu' W H E R Ea u t o r = , M i h a i Eminescu,; fel sd aflati rapid ce e nou doar aruncAnd
Ca sd addugdmo coloand altundeva o privire peultimapaginAa ofertei.Atuncl
ExecutaliSELECTx FROMcartipen- decAtlasffirqit,intre descriereqi dati spre cdnd cere{i o caseta intr-un centru de
tru a observamodificarea. e x e m p l u .f o l o s i m A L l t R T A B I I i n inchirieri specihca{ivanzdtoareinumdrul
Condiliilepotfi extinselafelcain sintaxa felul urmltor: sub care se gdsegtetitlul in listd, altfel ei
)ELts( t. In Urmaloarcanterogale \om i-ar lua citeva minute bune sd caute un
modifica cdmpuldescderealetuturor ilreg- ALTER TABLE carti ADD film anumedin cdrevasule.intr-o baza
istrdrilor al cdror titlu contine cuventul pr:et I€DIUMINT IINSIGNED
de dateid-ul serve$teacestefunc1iila fel
,poezii" qi c6mpul descriereestegol: AFTER descr:iere;
ca in viata de zi cu zi.
Si modificim tabelul cafti astlelincat
UPDATE carti SET TNDECAI fiecare carte sd aibd un id unic:
desc rr ere:' Carte de poezii'
W H E R Et i t t u tike ,%poeziit, Cel mai folosit tip de index esteid-ul. SET INSERT-ID=+;
and descr:iere=,,; Id-ul esteun numdr unic de identificare ALTER TABLE carti ADD id carte INT
pentru un element distinct (un rdnd) al UNSIGNED NOT NULL AUTO_INCREMENT
Astfel, toate cd4ile ldri descriereal unul tabel.Avand structuratabeluluicarti EIRST, ADD INDEX (id_carte);
cdfor titlu continea cuventul poezii at) in foma actual5,pentru a alege,,Romeo
acum descriereaCarte de poezii. si Julieta" de William Shakespeare,rn- SET INSERT ID:# este folosit ca
terogareaar arita in felul urmitor: pentru fiecare carte deja adiugatd sd fie
ALTERTABLE pus un id unic. De asemenea,pentlu
SEI,ECT * FROM carti I,IHERE
toate cdrtile ce 1€veli adiuga de acum
ALTERTABLEnepermitesi schrm- autor=' I,iilliam Shakespeare,
inainte va existaun id unic, incrementat
bdmstructwaunuitabelexistent.Putem ANDlitfu='Rofi\eo si ,luliete' .
automar.

CH]PSPECIAL SITEDINAMIC
ED|TOR|AL
, TNTRODUCERE
,, TNSTALARE
,, 0RGANIZARE pHp ,, CREART
S|TE,, ADtvilNtsTMRE
,, TIps&TRtcK
@ "

Sd ne folosim de index pentru a exe- un text mult mai lung. Dacd scriem intr-un TemS: procedati in acelagi fel cu
cuta operalii in tabel: document text numele ,,IsaacAsimov" fiecate nume de autor din tabelul ci4i.
vedemceacestaocupdI 2 bytesin timp ce Acum cd avem id-uri numericein loc
I N S E R TI N T O c a r t i (titlu) values ( 'un un numdr din 3 cifre (presupr.rndndcd id- de nume in coloana id autor, si modi-
texl oarecai.e' ) ; ul autoruluiar fi compusdin J cifre)ocupi ficAm labelul carli Si sA transformdm
sL_r.- 'd ar'-, L L J r P O | \.,aI r . r ; doar 3. Astfel inlocuind elementelerepe- t i p u l c d m p u l u ii d _ a u t o rd i n T E X T i n
titive dintr-un tabel cu un id facenr o SMALLINT:
Valoareaid_cartea acesteiultime in- economieserioasi de spa{iu.
regislririesteq. O folosimpentrua elec- Si facem.deci.un nou tabel:aulori, ALTER TABLE cai.tr C H A N G E1 d a u t o r
tua modificdri: rd-AUTOT SMAILINT NOT NULL;
CREATE TABLE autoli
UPDATE carti SET titlu='un text (id-AUtOT SMALLINT UNSIGNED Cele doud tabele aratdacum a$a:
rnoolr rcac' { r ! H L i n Ea c 1 c a r t e = y ; DEFAU].T \O' NOT NULL
autori:
SELECT ld carte, titfu F R O Mc a r t i AUTO INCREMENT,
WHERE ld_carte:g; nume autor TEXT, I id autor nune autor
PRI|4ARY KEY(id,autor) ,
Rezultatul va fi: U N I o U Ei i d , a u t o r ) ,
1 Mihai Eminescu
2 George Cosbuc
INDEX ( id autor) ); 3 William Shakespeare I
I rd carte I tit.Lu 4 Alexandru Mitru I
gi sdredenumimcdmpulautordin tabelul
9 un text nodificat I
carti in id_autor. caru:

Normalizarea AL dP AB. t C"ANGE -L,or lid autor I titlu


"-t'
id autor TEXT;
3 Harnlet
Normalizarea inseamnd structurarea 1 Poezil
tabelelor bazei de date in a$a fel incat Nu ii vom modifica deocamdatdtipul 7)Poezii, volumul 2
daleledin acestea .A ocupecdt mai pulin de datepe care il contine.Ar (rebuisa l lPoezii, volumul 3
4 lLegendele olinpului
spaliu pe hard disc, fiind astfel deosebit 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 ,s d
2LFire de tort - Poezli
de util6. Chiar dacd spafiul nu poate ciutim id-ul corespondentfiecdrui autor L lGeniu pustiu
pAreao problemA.trebuie sd luali in ;i si modificim manualfiecarecamp in 3lRoneo si Julieta
considerareposibilitateade a fi nevoit sd parte.
vi extindeli intr-o zi peste numdrul de Vomreduce numiLll de operatiinece- Putem,,uni" dateledin celedouitabele
megabili oferit de confactul incheiat cu sare cu ajutorul func{iei UPDATE. astfel incat sA ne fie afiqate numele qi
ISP-ul, dinlipsdde spatiu.De ce sAplitili Addugamintaiautorulinnoultabel,aflem titlul pentru fiecare iffegishare:
mai mult cand puteli sd normalizaJi? id-ul unic repartizatde citre MySQL Si
Normalizareaesteo practicdbund5i vd apoi inlocuim in tabelul carti numele
recomandsi o luati in calcul ori de cdte autorului cu acestid. autor:r, carti I,IHERE
od faceli o bazAde date. autori. id autor=carti. id autor;
SA studiem penh! un moment tabelul INSERT INTO autori values ( 1' ,
carti al bazei noastrede date.in momentul \Mihal Eminescu')
;
de laje el este structuat in felul um6tor. SEIECT * FROM autori WHERE
autor='Mlhai Eminescu' ;
lField Leqendele olin!urui

id autor nune autor


lautor text
Itit]u text 1 Mihai Emlnescu
ldescriere text Aceastd interogare ia coloana
lpret I mediumint (8) unsigned nume autor din tabelul autod $i coloana
UPDATEcarti SET id_autor=l WHERE titlu din tabelulci4i Sile asociazidupdid-
id_a-Lo! ' M i n a i r - n _1 e s c u ' ; ul autorului carc este unic. Dacd una din
Ce s-ar intdmpla dacd am avea toate ]NSERT INTO autori values ( " , coloanelepe care wem sd le afiEim are
cdrlile scrise de Isaac Asimov? Numdrul 'ceorge Cosbuc') acelaginumein celedouitabele,o putem
;
acestoradepegeste 400 qi coloanaautor SELECT * EROM autori; apela ca nume tabel.numecoloani ast-
ar con{ine de tot atatea ori textul ,,Isaac fel inc6t sd nu existe ambiguitili:
Asimov". Ce putemfaceestesAcre6mun
id autor nume autor
nou tabel pentlu autori cu doud campuri: SELECT au|orl.id_aulor.
' l -
id_aulor Si nume_autorqi sd inlocuim Mihai Eminescu
campul text autor din tabelul ci4i cu un mOu autori, carti WHERE
cdmp numit tot id_autor in caxe penhu autori. id,autor=carti. id_autor;
toatecd4ile unui autorsdpunemid-ul din U P D A T Ec a r t i SET id autor=2 WHERE
tabelulde autori.in acestmod campulva id autor='ceorge Cosbuc' ; ln ap calla notslla \ a lleoul sa a\ em
con,tineun numdr din cdtevacifie in loc de cdrlile ordonate dupd domenii. Nu vom
CHIP SPECIAL SITEDINAMIC
EDIOR|AL,,
TNTRODUCERI,, ORGANIZARE,@ pHp, cREARESITE,,
|NSTA|-ARE,, ADIv]INISTRARE,
TIeS&TRTCKS

default \0,,
lrd-autor I nume_autor titlu
nr_buc tinyrni NOT NULL defautt
3 William Shakespeare llamlet .0,);
I Mihai Eminescu
1 Mihai Eminescu Poezri, volumul 2
I Mihai Eminescu Poezir,
C6mpul id tranzactie corespunde ce-
vofumul 3
4 Alexandru Mitru Legendele Ollnpului lui din tabelultranzactii iaxcampul id_carte
2 George Cosbuc Fire de tort - Poezii celui din tabelulcarti. CAmpulnr-buc ne
1 Mihai Eninescu Geniu pustiu \ a serviatuncicdndun utilizatorcumpdrd
md multe bucdti din aceeagicarteintr-o
tanzacfie $i de asemeneapentru a putea
amestecaromanelede rdzboi cu manu- folosi pentrua afla toate comentariile face statisticilepentru cele
mai vAndute
alelegcolare gicupoeziile!Nevatrebuiin aferenteuneicdrfi,cuajutorulinterogdrii cdr{i.Introduce{i cdtevainregistdri in
tabel
consecin{eonouecoloandin tabel,pentru
folosind id_tranzactie din tabelul tranzac-
domeniulcd4ii: LegendeleOlimpului vor SELECT * FROM comentarii WHERE tii qi mai multe id,carte din tabelul carti:
apa4inedomeniului,,Poveqti",cdrlile de id_carte=1; .
poezii domeniului Poezii Ei agamai de-
] N S E R T I N T O v a n z a r i V A L U E S( 1 , 2 / 1 ) ,
pane. Pentru urmidrea vdnzdrilor vom fo-
I N S E R TI N T O v a n z a r i V A T U E S( 1 , 3 , 1 ) ;
Temd: modificali tabelul cafii penhu a losi doui tabele,tranzactii Ei vanzari. Si
I N S E R T I N T O v a n z a r i V A L U E S( 1 , 4 , 3 0 ) ;
addugao coloani id_domeniu 5i crealiLrn presupunemci Pop Ion cumparadoua
nou tabel dornenii cu dou6 campuri: cafli in I maniesirevinepenrruacunpara
ln lranzactta cu ld lranzac!te I r-au
id _domeniu5inume_domeniu. Adaugali incd alte trei ce4i in 2 mafiie. in data de
numele de domenii pentru cfu1iledin baza vandut: 1 carte cu id carte2, 1 carte cu
3 martie cand vin banii pentru prrma
de date gi id-urile acestorain tabelul cd4i, id_carte3 qi 30 de ca4i cu id carte 4.
comandinoi vom $li ca tebuie si lrimi-
conformcu id-uriledin tabeluldomenii. Am in\elar in acesrcapilol cum sa
tem nigte c54i lui Pop Ion dar nu Stim
Temi: afiga1ititlurile cd4ilor din baza lacemo bazdde MySQL dareSi cum sa
exact care! Iatd de ce, pentru frecare
de date gi domeniile de care acestea lucrim cu eapenhua oblinedatelede caxe
comandS,indiferent de numerul cA4ilor
apa4in (ca in exemplul de mai sus, cu avem nevoie.inainte de a tlece la capito-
centte, va trebui sd folosim un numdr
tabelul autori): lul urmatorinsafebuie sd vi qpuncApe
unic de identificare, numdr pe care il
CD veli gdsi cdEivaclienEivizuali pentru
tinem in tabelulhanzactii aldturi de cele-
serverul MySQL cu care vd ve(i putea
Inlme domeniu I ti tl! lalte informalii care ne intereseazd:
construi strucRlrabazeide daremult mai
ugor.V-am,,chinuit" cu sintaxain linia de
CREATE TABLE t.anzactii {
lPoezii, volumul 2 comandddeoarecemai tarziu, cdnd vom
f,d tranzacf:re INT unsigned
loezii, volunui 3 lucra cu baza de date prin intermediul
lLegendele Olinpului NOT NULL auto_incrernent,
lFire de tor! - Poezii PHP,vafinecesarsdqtimcumseintroduc
data,tranzaclre T I M E S T A M P( 1 0 )
sauseextag datefolosindcomenziSQL.
NOT NUL]-,
Deocamdati avem in baza de date In conlrnuare vom mvalatazelepro-
.rume cumparator TEXT NOT NULL,
tabelelecarti, autori gi domenii. in con- gramirii PHP urmdndca apoi sii folosim
ad:esa_cumparator TEXT NOT NUI_|/
tlnuare va trebui sd mai adlugim unul. cuno$tinleleacumulatein acestedoud cap-
UNIQUE KEY id_tranzactie
Ne reamintim cd la fiecare carte vizita- itole penhu a obtine informalii din baza de
(id tranzactie) ) ;
torii noSfti au posibilitatea sd-9i poat6 date prin intermediul PHP 9i a le afiqa
impdrtd$iimpresiile.Pentruaceastavom utilizatorilor intr-o pagind de web. I
Am setat campul data-hanzactie ca
crea un nou tabel.comenrarii,ale cdrui TIMESTAMP(I0) pentru cd astfel el va
cdmpurinu Ie roi mai descriedeoarece puteafi setatautomatde MySQL la fiecare
numele9i tipul lor sunt de ajunsde clare: noudinregisnaregiva confne datainserdrii
inregistrdrii in format YYYYMMDD. Cet de mare poate fi un tabel?
CREATE TABLE comentarii ( MySQL stocheazd fizic datele unui
Executatiurmdtoareledoud inrerogiri:
ld_conentarru INT UNSTGNED tabel intr-un fitier pe hard disc $i cu cat
tabelul este mai mare, cu atat mdrimea
DEFAULT \OI NOT NUI,I,
INSERT INTO tranzactii acestui fifier cre$te. Versiunea 3.22 a
AUTO INCREMENT,
(nunre_cumparator, MySQL are o limite de 4GB pentru
fd_carte INT mdrimeaunuiubel. ln versiunilesuperio-
adr:esa_cumparator) VALUES ( \pop
UNSIGNEDDXFAULT \0" 'str. l,unii are aceasti limiti este exti$6 pand la 8
Ion', 12, Brasov'),
nune-ulilizator TEXT,
milioaneTB pentru ripul de label My-
SEI,ECT * FROM tranzactii; TSAM.Cu toareaceslea.
adresa_emai]
sistemelede ope-
TEXT,
rare pot avea propriile limitid ale mdrimil
comertariu TEXT, figierelor. Mdrimea impliciti a tabelelor
Tabelul vdnzdri va con{ine informa{iile
PRIMARY KEY MySQL estede aproximaliv4CB. Pulelj
desprecdrtile
vdndutein fi ecaretranzaclie:
(id_conentariu), verifica merimea maxime peltru un tabel
UNIoUE (id comentariu), CREATE TABLI vanzarj (
cu ajurorulcomenzilorSHOW IABLE
STATUS saumyisamchk-dv table_name.
INDEX (id comentariu) ); rd,tranzactie int unsigned NOT
\0,,
Pe platforma Windows va Eebui sa
NUI,L default
folosili sistemulde fiqiere NTFS dacri
Cdmpul id_carte din acesttabel ne va id_carte int unsigned NOT NULI dorili si aveli tabele mai mari de 4GB.

CHiPSPECIAL SITEDINAMIC
ED|TORTAL TNSTALARE
,, TNTRODUCERE ,, oRGANTZARE
"
MySQL
,,@, ,, T|PS&TRT
CnrnnrSrE,, AD|\IIN|STRARE
"

PHP

Programare pentru tofi


Ca limbaj de programare, PHP este foarte uqor de invi{at daci tipurile iar pentrua lucra cu instruc{runr
elementeleprogramirii sunt explicate pe in{elesul tuturor. Acesta tebuie sd aflAmce sunt structurilede
controlqi funcfiile.
esteunul din scopurile articolului de fa{i: de a ini,tia orice novice in
tainele programirii PHP. Datoriti similariti{ii intre limbajele de Variabile
programare de uz comun, cunoscAndPHP va fi floare la ureche si
O variabildesleo zona de memorie
trece{i apoi la VBScript, Java sau chiar C. Nu i-am uitat pe
c5ruia i se dd un nume pentru a putea fi
programatorii experimentafi in alte limbaje care yor afla in acest recunoscutaulterior $i penfu a ne putea
capitol particulariti{ile PHP. referi mai tdrziu la ea.Sdne imaginamca
Ionel qi Gigel auurmitoareaconversatie:
Ionel: Pogiadunadoui numere?
e"re limbajul ideal pentrucon- explozive a numdrului site-urilor bazate Gigel: Da. Care esteprimul numdr?
!)He
I :truirea de pagini \ eb dinamice. pe PHP. intre 2000 qi 2002 numdrul lor a Ionel: Primul numir este3. Al doilea
Este ugor de inveFt, open-source,poatef1 crescut cu peste 13130% in timp ce numer este2.
rulat pe mai multe platfome gi se poate numdrul site-urilor bazatepe tehnologia Gigel: Rezultatul adunirii este5.
conectala mai multe tipuri de bazede date. ASP doarcu 278%, JavaServerPagescu Toatecelehei numeredin conversafa
Cel mai importantaspectal limbajului 1594%6i ColdFusioncu 429To. de mai sus le putem consideravariabile.
esteinsi posibilitateade a fi imbricat cu Pe ldngd manipularea con,tinutului Cigelginemintevaloarea primuluinumer.
cod HTML. Putem aslfel crea pagini paginilordeweb,PHPpoatetrimitehead- 2, apoi line minte valoarea celui de-al
HTML statice 9i din loc in loc, acolo ereHTTP pentruautentificare,setacook- doileanumdr.3. dupd care le adundsi
unde este nevoie, sd introducem dma- ie-ud sau redirecfiona utilizatodi. Mai obline rezultatul: 5. Disculia ar putea
mism cu ajutorul PHP. SA ludm pnma mult, cu ajutorul bibliotecilor extemede continua in felul utmdtor:
paginda site-ului www.chio.ro de exem- funcliipoateparsafi5iereXML. crea>i Ionel: Cel de-al doilea mrmer este
plu. Marepate din structurasaestecom- manipula imagini, anima{ii Shockwave acum 6. Care esterezultatul adundrii?
pusd din cod HTML static (meniurile, Flash,PDF-uri sausepoateconectala un Gigel: Este 9.
tabelele, aranjamentul in pagind). Din serverde mail iar acesteasunt doaxcate- lonel a schimbatvaloareacelui de-al
loc in loc codul HTML esteintercalatcu vadin funcfiile pe carele poateindeplini. doilea numdr, rezultatul fiind de aceasta
cod PHP care extragedin baza de date datA 9. Putem considera numerele re-
cele mai noi gtiri. in momentul in care Fiti gata... spectiveca fiindvariabile gi atunci codul
apelafipagina,acestcodestepaISat(anali- PHP pentru prima adunarear fi:
zat linie cu linie gi executat)pe servergi in continuarevd voi indrumaprin ele-
esteafiqatdo pagini HTML fZri sd $ti!i mentele de bazd ale PHP. Agezafi-vd $prifrul numar = 3;

cdpentn-r creareaei s-allcul o conexiune confonabil.deschideliun editorde text. $al_doilea_numar = 2;

labaza de date, s-au extras informa{iile asiguraJi-vdci serverulweb estepomit $i $!o!al = Sprirul*nunar +

deacologi aufost ordonatepentruafilare. punefi-v6centurilede siguan!6. Vd reco- Sal doilea,n'@r;


mand sdrulaJi chiar voi exempleleprezen-
Pe locuri... tate in continuaredeoarecea$aveti intelege Valoarea variabilei $total este suma
foarte u$or cum functioneaza PHP la ser- celor doud numere, 5 in acestcaz. La a
Limbajul PHP s-a ,,nAscut"in 1994 ver gi care este rezultatul in browser. douaoperagiedeadunareGigel fineminte
din nevoia lui RasmusLerdorfde a afla Puteli folosi orice editor de text.Note- deja valoareaprimului numdr, schimbd
cate persoaneit vrzsalizeazdCV-ul on- pad este bun pentru inceput dar pute{i valoarea celui de-al doilea Si obline un
line. El a denumitsetulde scdptud create alegesi folosili unul din editoarelePHP nou rezultat:
PHP, acronimul pentru PersonalHome de pe CD. Salvali fi5ierelecu extensia
Page.Pe parcursulurmdtorilortrei anj php, in document root (c:\Program SaI doilea numar - 6;

limbajul a evoluat dar adeviratul succes Files\ApacheGroup\Apache\htdocs\)9i $total = $prinul nunar +

a inceput sd il cunoascdde cdnd Zeev le veli accesain browser la adresah!!p!: $al dotlea runar;

SuraskiEi Andi Gutmansau rescdsmo- / locaIhost/numefisi er.pho.


torul PHP de la cap la coadd,motor sare Valoareavariabilei $total seschimbe,
poartd din versiunea 4 a PHP numele Start! deoareceam schimbatunul din elemen-
Zend, o combinafie de litere din prenu- tele ecuaJiei.inlelegem acum de ce sunt
mele creatorilor sdi: Zeev 9i Andi. Programarea deoricefel.nu doarPHP. numite variabilele a$a:pentru cd valoar-
Fiind open-source. PHP beneficiazd are doud elemente de baza: datele 9i ea lor poatefi schimbatdori direct, cum
de suport activ din partea comunitdlii instructiunile. Penhu a lucra cu datele am schimbatin a doua opera{ievaloarea
online.acestafiind yi motir'tl cresterii hebuie siinlelegem ce suntvariabileleqi lui $al doilea numardin J in 6, ori ca

CHIP SPECTAL SITEDINAMIC


EDITORIAL,,
INTRODUCERE,,
INSTAI-ARE,,
ORGANIZARE,,
MYSQL,,@,, CNTNNESTE,
ADMINISTMR!,,
TIPS&TRICKS

urmare a dependenleilor de alte vari- cod HTML dupd cum putefi vedea in linia de text care incepe cu // nu este
abile.a5acum seschimbdvajoareavari- exemplul aliturat. Puteli chiar creapagr- afigatd,la fel ca texhrl demarcatde /* ... x/ 9i
abilei $total in tunc{ie de valorile lui ni HTML Iird pic de cod PHP in ele 9i si nu aparnici mdcardacacL.im V iew Sourcein
$primul numar qi $al_doilea-numar. le dafi extensia php. Atata vreme cdt browserpentrufiqierul algebm.phpaccesat.
Pentru a intelege mai bine conceptul parser-ulPHP nu,,vede"tagurile<?...'l>, Acesteasult comentaxiicarenu suntproce-
de variabild,putem face o comparatiecu el va trimite pagina HTML neschimbatd satede cdtleseryercafiind cod executabilgi
algebra.Daci ludm un numdr x qi ii ddm catre ser,,(3r. nci^nu sunttrimise mai depaftecdhe brow-
r a l o a r e al . x - l l . x 2 - 2 . D a c dx - 7 , putempune diacdticein cadrul unur ser In aplicaliilemai mari decdtevalinii este
x. I 8 :i x 2-q. Analog. purem scrie string insd pentru ca browserul sd le ulil sacomenlamcodulpenmra ne orienua
umitorul cod PHP intr-un figier numit afi5ezecorecrva rrebuisarpecificdmin mai bine saua explica acliunile intrepnnse.
algebm.php: <head>setulde caracterefolosit, la fel ca Difercnfa inte cele doue notatii estecd //
r n r - u n d o c u m e nHt I M L . estefolosit pentru a comentao singud linie
valoarea unei variabile poate fi detextir timp ce/*... */poate fi folosit pentru
schimbatd dupd necesiteli(agacum am a delimita un comentariuce se extinde pe
<h1>Variabile</h1> schimbat valoarea lui $x) sau ea va fi maimultelinii.Marcatorii decomentariu se
schimbati automatin funclie de celelalte pot folosi qiatmci cdnddorim cao bucati de
variabiledecaredepinde(aqacunvaloar- cod si nu ruleze.Puteti sdtestaliacestluuu
// sd setin valoarea tui x ca fii.d 1 ea lui $rezultats-aschimbatin funcfie de comentand una din liniile carc contin
valoarealui $x). insnr-rcliLurea prinrpi ruldnddin noupagina.
Srezullat = Sx+1; pentru a afita rezultatulfolosim Numele variabilelor trebuie s[ contind
prrnt "Rezulrarul adun;rii lui print, altfel valorile variabilelor ar fi fost
Sr cu 1 doarIilere(a-2.A-Z Sicaracterele ASCIIde
este srezultat<br>,/; schimbate dar nu ar fi fost afi$ate pe la 127la 255t.ci&e5i iiniurede subliniere
ecran. Pentru mai multe detalii privind (undencorcs)$ipot incepedoarcu Jiteresau
/* 91 acum sa setaft valoarea Lui Sx ca 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 liniule de subliniere. Astfel, go variabila,
fiind 7 ql il von aduna tor cu t */ consultati oglinda alituratd. $ altaVariabila$i $-inca_o_variabila sunt

$f,ezu1tat - 5x+ 1;

print \\Rezultatul
adunirii lui Sx cu 2
este $rezultat<br>"; Afi$areadatelor Dacd do ti si afi$ali doar valoareaunci
Cuajuroml luiprinrputem alisaun!rring. variabile, puteti se nu o incadrati inlre
o vanablla. un sring ce contjnevariabile ghilimele.
saurezultatuluneifunctii.Textulceurmea-
zi a fi afiSattrebuieinclusintre ghilimele
simplesauduble,rezultatulfiindugordifer- 5o variabila = 1,
il. Folosindghilimelele dubleoricevari- p r i n t 9 o _ v a . i a b i t a ;
Salvafi figierul in documentroot (di- abilddincadrulrninguluiesreparsata. A.st- $ a r t a v a r i a b i l a - ,'Un text oarecare";
rectorul c:\Program files\Apache fel.in eremplulalatural, prinr..Rezultatul p x i o t $ a L i a - v a r i a b i l a ;
GroupLApache\htdocs\) inmultirii lui $x cu I esteSrezuital<br>":
9i accesaEi
fu4'
lo, alhov algtbta.php.IalAcum va ara- afiqeazdin browserRezultad ;;;lti;i lu;
I cu I esre2. DacAam fi folositshilimele Observa(ici daci ruldm acestcod. rezu-
ta pagina afigatd: simple(print '...'), variabilelegx $i $rezul- Itatul afi$at in browser va fi ,. Un rext
tat nu ar fi fost parsate$i output-ular fi fost oarccare", de$i insh]]c.tiunile de afigare se
Rezultatulinmultirii lui gx cu 1 estegrezu- aflApe doualinii diferile.Aceaslaseinlem-
lil€ Edl Vieq Fivdit$
Itat.Testaliacestlucru! plA deoarece,cum ziceam $i in introducere,
look H€tp
Puremafi;arariabilele 5i dacdlolosim rezultatul estetrimis citre brcwser caHTML.
ghilimele simple,rupand" srrinsulsi iffer- Dace wem se ne fie afitate una sub alta va
B&t sbp Botre*r caldndulcu iariabile.in forma-urmiiroare,trebui sd intercalim cod HTML intre cele
folosind operatorul"." de concatenaae a doudinstrucliuni. PutemlaceaceslILrcruin
st.ingu lor ($irurilor): doud moduri: ori prin intreruDerea codului
Dr14t 'Rezultarul inmultirii tui r . sx, / PHP, a$a:
cu 1 este r.Srezultai.,<br>/
Pentru a afi$a caracterelespeciale fo-
Rezulrdrul adern lui 1 eu I .sle 2 I o s i l e d e P H P r g h i l i m c l e l ed u b l e . ' , $o_variabila = 1;
Rezdidlul adu&n lui 7 .u 2 .ste 8
ghilimelele simple ',backslash-ul\, semnul prtnt so valiabilat
$) trebuiesSleprecedelicu sennul\, astfel:
print "Semnul dolar \$, back-slash\\',; <br>
algebra.php Ghilimelele trebuieprecedatede semnul
doar dacasunl de acelasitip cu celecare 9arta-variabila = "Un rexi oarecare",,
incadreaza string-ul.in pius.inn-un stnrrg prinr $aIra_variablta;
Si disecdmcodul pentrua invdla cate- puteli folosi celelalteghilimele normal.
va lucruri: print "Ghilimelele duble\" dintr-unstnng oii prih scrierea 1ui &tt;br&gt; ctirec!
rncadratlot de ghilimeledubleuebuiepre-
' r o a r ei n s r r u c q i u n pi lH
e p setelmina c e d a t ce u s e m n u,l . G h r l i r n e l esl ei m p l e - c a
cu punct $i virguld. Omiterea semnului acestea nu au ne\oie se fie precedare $o variabila = 1;
..punctti virgula" esteceamai frecventd dcoarecese aJia jnlr-un string iniadrat de prinr So-variabila;
ghilimele duble";
Fesealape careo fac programaloriiin- Alternativi = "Un text
Salta-variabila
cepdtori. print 'chilimelele simple tlebuie \,pre- p!int $alta_variabila;
codul PHP incepeintotdeaunacu <? cedate inlr-Lrn smngincadrarde ghilimele
qisetermindcu ?>.Elpoatefi imbricatcu s r m p l ei n l r m pc e " g h i l i m e l e ldeu b l e 'n u ;

CH]PSPECIAL SITEDINAMIC
EDTTORTAL,,
TNTRoDUcERE,
INsTALARE,oRGANTzARE,
rurlsQL,@, cnrnnrsrr,, ADrvrNtsTMRE,
Trps&TR

nume corectein timp ce $o-noua-variabila, neputemreferi la el ahmcicdndceremfilmul sd definim intdi variabila sau sd-i de-
$2vargi $a_qaptea nu sunt.inainte dea trcce vdnzdtoarei.lolosind numamJrespemiv. clardmtipul. $i : I va fi folosit ca integer
mai d€parte,vA daurm sfat:dali variabilelor Q; -o,-lom.,- a---^h' sau string in functie de contextul in care
nulne caxe sd defineasce pe cdt posibil este folosit. Dacd dorili sd forfa{i evalua-
destinaliavariabilei, mai ales dac6 aceasta rea unei variabileca un anumit tip puteli
va fi lolositd de mai multe ori in cadrul 9iilme = array ("Casablanca". folosi conversiade tip, astfel:$i : (int) $i
programului.DacSvi seva ceresdmodificaf "Blairwitch Projeet'r, sau$i:(bool) $i. Mai multe detaliidespre
aplicatiadupddoualuni de la creareaei o sd conversiatipurilor g6sili in manualul PHP
preferali sd inghif{i tastahla nai degabd /* Nu pute( afisa direct valorile de pe CD, in secliuneaType casting.
decdtsi vd chinuili sdafla1idin 500 de linii
de cod ce reprezinti Sal sau$xGvHKr.
Operatori
Tipuride variabile
indexul numeric, care, daca nu este Cel mai desintAlnit operatorestecel de
Variabilelepor fi de mai multetipuri. atribuire, definit prin semnul:. Am obser-
nu doarnumerecum amvdzutpenaacum. filnul "Casablanca": */ vat din exemplelede para acun cA daca
Daci programareaPHP ar fi fost despre pri.t Sfilmel0l; scriem $x: 1 nu insearnndcd $x esteegal
algebri gi numere,n-agfi fost aici poves- /rPentru a cere t\Matrirr' scriem:*// cu 1 ci ci i s-a acordatvaloarea L De$i la
tindu-vd cat de minunatd este! PHP are prinr Sfilnel2l; prima vedereegalitateaqi acordareavalonr
opttipuri de variabile dintre carevi levor /* si pentru Ranrbo */ pot pdreaa fi acelagilucru, ele nu sunt! Sd
descriepe cele mai importante4. plint Sfilnel3l; considedm umdtoarcle variabile:

integer
Variabilele de tip integersuntnumere Indexareaunui anay poate fi definitd
intregi: 3, 783, -56, 0, -1 sunt valori de cdtreprogramator,a$acum $ipatronul
integer. unui magazin de casetevideo igi poate Este $x egal cu $y? Nu este.Valoarea
numerotacaseteledupl cum ii place. lui $x este I in timp ce valoarealui $y
string este7. Folosind opemtorul: de atdbulre
Un string este o succesiunede carac- ii putem acordalui $x valoarealui $y:
Lere(tirl. Atunci cand sunl lolositein
codul PHP stringurile trebuie incadrate 32=>"BLairwilch
intre ghilimele $i toate caracterelespe- Project", 19=>"Matrix".
cialedin eleprecedatecu semnul\ (detalii 1024=>"Ranbo");

9iexplicaliigdsiliin oglindafuncliaprint). /* Acum caseta cu Rambo are nun;rul


IatA gi ceteva exemple de stringuri: 1024 9i aqa ne voh Fi referi la Abia acum $x este7 $i esteegalcu $y
care are qi el valoarea 7. Nu vi ldsaJi
Svariabila = "ur rext .pri.t $fi]mel1024l; ingelali de asemdnareacu semnul = din
$va.iabila = "10 terte /*lentru a cere "Maarix" scrien:*/' InatematicA nici micar anrncic6ndlacegi
9variabila = "10"; print 9 filne I19I ; operaliicomplexe.Dacd scriem$rezultat
: $x + $y nu inseamneci Srezultateste
boolean print 5filne [32] ; egalcu sumacelordoud,ci cdiam atribuit
Tipul boolean definegteo valoare de (acordat)valoareasumei celor doud.
adevdr, TRUE (adev[rat) sau FALSE Operatorul de egalitateeste:= qi se
(lals).Spreexemplu.r om scriemai tdr- Arrayrile pot fi indexate qi asociativ, 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
ziu o lunctiepentrusecliunea deadmini:- adicd putem folosi stringuri in loc de inte- condilionale, pentru a testa egalitatea.
tmre a site-ului cu ajutorul cdruia vom gerspentrua ne referi Ia valorile unui array: Opusulsdu,!=, esteoperatorulde inegali-
verifica dacd utilizatorul este logat ca tateSi sefolose$tein acelagiscop.Pentru
adminishator.Dupd ceva facetoateven- a vd ldmuricumsrdtreabacu egalitatea 5i
ficdrile necesare,funcfia noastrAva re- atribuirea,testafi urmdtoml cod:
tuma o valoare de adevfu: TRUE dacd blanca".'qroaza"=>"B1aiftitch
este logat sau FALSE daca nu este Sl ?roject", "SF"=>"Mat! x",
astlel vom qti dacd sd ii acordim saunu "actiune"=>"Ranbo") ; t \ E 1 ; t v = r ;

accesin sectiuneade adminishare. /* Sa afitan rroject""/ if (5x == Sy)


"Blai'witch
plinr Sfrlnel"qroaza"l ; {
array .P. r
" "-.,a "va...\"
sc,_en:.
print "5x este egaL cu $y";

Pute{i si considemtiun array ca fiind o pri.! 9filme ["sF" ]; )


coleclie de obiecte (matrice). Pentru a /* si pentru Rasbo*/ if ($x r= gy)
inrelegeconceptul.saneaminrimde maga- prinr 5filne["actiune"] ; {
zinul de casetevideo de carevd povesteam print "Sx nu este eqal cu $y";

intr-un capitol anterior.Vi sprmeamcd fie- )


carefilm esteindexat cu un numdr gi astfel Pentruavansali:
in PHPnu estenevoie
CHIP SPECIAL SITEDINAMIC
EDITORIAL,,
INTRODUCERE,,
INSTALARE,,
ORGANIZARE,,
MYSQL,,@,, CNTNNSSITE,,
ADIYJNISTMRE,,
TIPS&]RICKS

oricare din valorile verificate e TRUE.


RetumeazdFALSE doar dacdamdndoui
9ie! suntFALSE.

opemtorul && (AND)

buna) ... dacaatatnumelecAtgi parola


Rulali codul qi apoi modificati valo- sunt valide putem acorda utilizatorului
rile lui $x ii $y cu $x = 13 9i $y: 13. test3.php accesin sectiuneade administrare.
Operatorul de egalitate se folosegte /I atribuireaconcatenlrii
pentru a compara egalitateaa doud va-
Operatorul && rctumeazdTRIJE doar
lori. AIfi operatori folosili pentru com- Stexi = "Un text "; daci ambelevalori verifi catesuntTRUE.
parareavalorilor variabilelor sunt: $tert .= "oarecare "; El retumeazdFALSE dacd oricare din
Stexr .= "Qi rutoarut ...gnr; eleesteFALSE (saudacdamandoudsunt
> mal male
FALSE).
>: mai mare sau egal // pe ecranva fi afiqat,,Un text oare-
< mal mlc care gi numdrul 6"
<: mai mic sau egal
Structuride control
Structuriledecontrol suntinstrucIiunile
Eile Edit Vie' Flvorites looh lletp
careaduc flexibiliratea in programare5i
9 x - 5 ; .!
Back
c i t
Slop Fekesh
u$ureaza munca programatorului.
Am ydzut cum putem defini o van-
hlip://lo.dlhost/tesl3
php abild $x qi cum putem obline ca rezultat
I o altd variabila $total: gx * l. puteur,ou
''Sx Un text oorecsre si nuinarul d
este nai mare ca Sy,,; ajutorul struoturilor de control sd ma-
l n i p u l d mv a r i a b i l e l e ;rie z u l t a t e cl eu m i -
ii (Sx <= Sy)
nim de cod. Vom vedeacum, cu ajutorul
{ Operatorii logici vd vor veni la in- lui while 9i for putem folosi aceeaqibu-
prin! $x este mai mic sau egat cu gr ; demani in execu(iascriptuluiatuncicand catd de cod pentm mai multe variabile
l a\ eti nevoiesAlucralicu valorideadevdr. fbrd.sd tebuiascd serescriemcodul pen-
Vom faceuncxerciqiude imaginaliepen- tru fiecare valoare a variabilei. Vom
tru a explica funclia $i utilitateaoperato- i n r d t a5 i s r r u c t u r i lief . . . e l s ei f . . . e l s e ; i
Opemtodipentrustringurisunt. pen- rilor Jogici.Sdpresupunemcd la intrarea switch cu care vom putea executa cod
tru concatenare $1.= pentruatribuirea in sectiunea de administrare avem un d o a r d a c a s u n t i n d e p l i n i r ea n u m i r e
concalenArii. Ace$l i operaiofl sunllolosi{i fbrmular care cere numele gi parola de condifii.
pcntrua uni stringuri,in felul urmdtor: accesin secllune.Scriptul PHP ar putea
vedfica acesteinformatii pentru a auto- while
testl.php riza accesulin secfiunefolosind opera- Structura de control while este fo-
// concatenarea stringurilor torii logici astfel: losilApenlrua rulaacelaSi codpenrrumai
$ l e s t = ' A , as c r i s u n . . , r e x t . , , o a r e c a r e ' ; operatorul! (NOT) multe valori ale unei variabile oarecare
$x, IArd sd hebuiascdsd rescriemcodul
// pe ecranva fi afiEat,,Am scris un if(lFarola_e btrnd) ... parola !u pentru gx = 1, $x : 2 9i a$amai departe
text oarecare" este buna, accesul este interzis pentru fiecare valoare a variabilei. Si
' Loolo.a
,,. p".ota - folosim pentm testareun cod asemanA-
bun:, ac.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.
valoarea iniliald de adevir e FALSE qi
FALSE dacdvaloareaini[ial6esteTRUE.

Am scds un i.ext odecare operatorulll (OR) $fezultar * 5x*5;


prinr "Rezulialul innuilirii lui Sx cu
r,"";t . . . verificd dacdnumelesauparo- 5 esle $rezulrat<b!>',;
test2.php, l a s u n tv a l i d eg i d a c do r i c a r cd i n e l ce s r e ,
,// concatenareastringurilor cu vari- rerumeaza raloareade aderir TRUE. in = 51*5;
$rezultat
abile acest exemplu de pseudocoddacd nu- print gx cu
" Rezultatul inftullirii rui
mele ar fi valid dar parolanu, i-am acor- t"i. 5.""tLtut<ltt";
p.r:: 't: ,.gir.'
scris numaiut si da utilizatomlui accesmai departe,ceea
' . "15
J1 ie:i ce nu e de dorir. Irebuiesii fim .iguri cd
// pe ecran va fi afiEat ,,Am scns gi numele gi parola sunt valide. Si presupunem cd ar trebuica pentru
numdrul 5 5i un text oarecare" OperatorulI retumeazaTRUF daca toatenumerelede la 0 la 99 ar trebuisi
. SITEDINAMIC
CHIPSPECIAL
EDTTORTAL
, TNTRODUCERE ,, ORGANTZARE
,, TNSTALARE ,, r4ySQL
,,@ "
Cnrnnr
SrE ,, ADNITN|STRARE
,, T|PS&TRT

calculdmvariabila $rezultat $i sdafiqdm ac{iunecu $x inainte de a relua loop-ul, for


textul ,,Rezultatulinmullirii lui $x cu 5 nu ooar lncremenrarea. ln exemplulur- /br este echivalentul lui while;i
este$rezultat".Dacdarfi sdscriemcodul mitor vom afiqa rezultatulinrnullirii lui funclioneazi in mare mdsurd la fel, cu
de inmullire gi afiqare pentru fiecare $x cu 2, apoi ii vom atribui lui $x cdteva mici diferenle. Si rescriem cu
valoarea lui $x de la 0 la 99 ne-ar apuca valoarea rezultatului inmul{irii 9i vom ajutorul lui for codul din fiEierul
d i m i n e a l a .P e n t r ua c e a s r ar o m f o l o . i repeta loop-ul cu noul $x pdnd cAnd $x incrementare.php penmra obtincacelcari
while, cel mai simplu tip de loop qi vom estemai mic decat23: rezultate:
scrie o singuri bucata de cod care va
prelua automattoatevalorile lui $x de la
0 la 99 9i pentrufiecareva inmulli cu 5 9i whiLe (S: < 23) for (Sx = 0, 5* < rOO; S"tt)
va afiga rezultatul automat.Si vedem 9r {
cum: S.ez!ltar * S: *2; slezulrar=$x*5;
- -s-- 6-u -a- 6s_6 piint
p. / S\ .| " RezuLtatul inmulti!it lur $x
Sxezrltar <br>"; cu 5 esle Srezuitat<br>";
$x = 9rezulrart
rhile ($x < 100) l l
{ print "sfarqii l "; print "sfar9it | ";
$rezultat = $x* 5;

pr.n P-z I .l r-. '


"
cu 5 este Srezultat<br>";

Eile Edit Yiew FEvotes lools lelp Eile Edit View Fgvotes Iools lLelp
l
+ , + 9 E ' * ! - + g E l
print "sfarsit | "; tick F,rr,:a',: Stop Befresh N
B6ck i-,.1',
t-t. Stop Flefresh
Aldressl g http://localhosl/in€rementare.ph

Salva!i acest cod intr-un figler Rezultatl-rllr,rnultidilui 0 cuJ esie 0


x este3 si tezultntuleste6
incrementare.php $i accesali-1
din brows- Rezultatulbrnulti.riilui 2 cu J esie 10
x este6 si rezultaluleste12
er pentru a vedearezultatul. x estel? EiretultatuleEte24 Reriltatuli.nrnultirii lui 4 cu J esi8 20
sf&sitl Reritatulinmulti.rii lui 6 cu J este30
y,
Rerultaiul irllnulti.riilui 8 cu J esie 40
E ld' Fld6 ta t$ p.-nl.i'n i--lnriri 1,i 1n.r, { r.t.ln
. . r -- 4 O l4 e -!r ?
Structura for in acliune!
Structura lbr este preferatd de pro-
Iat5, in romane$te,ce am lEcut: am g 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
luat valoarea initiald a lui $x, 3, qi am parantezece o precedd sunt con,tinute
inceputloop-ul.La prima rularese cal- toate instructiunileqi condiliile necesare
culeazi variabila Srezultatcareeste$x * ruldrii loop-ului. Astfel, in ($x : 0; $x <
2:3 * 2:6 $i seafigeazdpe ecran,,xeste 100;$x#), prima parte,$x:0 reprczinte
3 $i rezultatul este 6". Apoi, folosind situa,tiainiliald de la carese pome$teru-
operatoruldeatdbuire,,="in Sx:$rezul- larea loop-ului. A doua parte, $x < 100,
tat ii ddm lui $x valoarea lui $rezultat reprezintacondiliile cetebuie indeplinite
automati a numerelorde la care este 6 Ei loop-ul este reluat de la pentru ca loop-ul se fie rulat. PuteJirula
capatcu noua valoare $x : 6. urmdtorul cod ca si obseryati cd loop-ul
Si vedem, pas cu pas, cum funcfio- Pentru$x:6 conditia$x < 32 este nuva fi rulat deoarececondiliaca $x si fie
neazd while. intdi am tlefinit valoarea indepliniti, $rezultatva fi 12 9i, Ia sfArgit mai mic decdt99 nu esteindeplinitd.
ini1ial6 a lui $x. Apoi, pentru flecare atribuim lui $x aceastdvaloare. Pentru
valoarea lui Sx mai micd strict decdt 100 $x: i 2 valoarea$rezultatvafi24, valoare for ($x = 1000; Sx < 99; Sx++)
(0, 1,2, 3...pdnl cdnd$x ajungela 99) se atribuiti din nou variabilei $x. Cu $x : {
calculeazl variabila $rezultat li se 24 condilia pentru rularea loop-ului, print 9x;
afi$eazatextul, iar in final $x esteincre- $x<23, nu seva indeplini gi PHP va trece l
mentat (adunat) cu 1, cipitdnd astfel o mai departe, la instructiunea print
nouEvaloare,Ei programul o ia din nou "sfhrqit!". Vd recomand se testa,tiacest in sfirqit, a treia pafie o constituie
de la capdtcu $x: 2, apoicu $x: 3 9i tot cod personal. actiunile ce umeazd a fi inhepdnse cu
aqapdndcAnd$x ajungela 100.CAnd$x Sdmai observim un lucru inaintede a variabila in loop. in exemplul nostru
ajungela 100 condiliadin while, $x < trecemai departe:codul ce urmeazda fi variabilaesteincrementaticu 1 lafiecare
100, nu mai esteindeplinitd a$aca PHP executatesteincadratde acolade$i aco- rulare.
inceleazirularealoop-ului 5i continui ladade inchiderenu esteurmatAde punct 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
cu restul de cod. $ ' este o expresie qi virguli. incadrareain acoladeservegte aceasl6sec!iune-.eparandu-lecu vir-
p u l i nm a i s p e c i a l!ai e s l ee c h i v a l c n tcau pentru recunoaqtereabucilii de cod ce guld. Iatd, spre exemplu, cum am putea
incrementareacu1.$x++esteastfelpres- urmeazda f,irulatAin cazulunei stmcturi scrie toate instrucliunilepentru manipu-
Qurtareapentru $x = $x + l. de control. in unele cazuri, vom vedea, larea lui $x in ultima sec{iune dintre
D e s i g u r . p u t e m i n t r e p r i n d eo r i c e acoladelepot fi omise. parantezelelui for:

CHiP SPECIAI , SITEDINAMIC


EDITORIAL
, INTRODUCERE
, INSTALARE
, ORGANIZARE
, I.4YSQL
,@ ,, CNTNNT
STE ,, ADI4INISTRART
,, TIPS&TRICKS

3. Schimba!$nr-filme= count($filme)
lor (5x - 0; Sx < i00; pllnt "Sa<b.>", cu Snr_filme : count(Sfilme)-19i rula!
din nou scriptul. print "Textul are nai putin .]e 5
print "sfalsit | ";

if l
Daci dorim sd rulim o bucatdde cod
Observamcd nici nu maiavemnevoie doar cdnd este indepliniti o condilie
de acolade.Ele nu ne-ar servi la nimrc anume,folosim il Iaticum, in urmAtorul Pentrustringul,,mere"rezultatulafi$at
deoarecetoateinstruc{iunileprivind varr- cod afi;Am un text doar dacdnumdrul de pe ecranva fi ,,Textul are mai putin de 5
abila $x se atld in a treia parte din caracteredintr-un string este mai mare caractere" $i pentru stringul ,,Ana are
paranteze.intdi este afi9at $x dupi care decat5. mere--rezulrarulva fi,,Texrul are mai
esteincrementat$iloop-ulo iade lacap6t mult de 5 caractere".Testati acestlucru
pdni cdnd $x ajunge1a100qi condi{iade ruldnd codul pentru ambele cazuri.
rulare nu mai esteindepliniti. Steri = "Ana in construcfiaif ... else putem omite
Putem folosi for pentru afiqareaele- snr caractere = strlen (Stex!); acoladele dac6instruc!iunile ce urmeaza
m e n t e l our n u ia r r a lc u u n i n d e xn u m e r i c !f (snr caracte.e > 5) a fi executatesunt pe o singuri linie:
ordonat.Sdafi$dmlista noastrdde hlme: {
print "Textul \,,$texr\,, are rd1 ii(snr caractere > 5) prinr ..te:tur

are mai nult de 5 caracte:e";


5filme = array ("casebLanca", "Blair$ircn
else priit "Tertul are mai Fulin de 5
Project", "Matrix", "Rambo',) ;
$t filme = count (5fi]me);

for(g: = 0; < Snr_filme; Incercaltacetaftcoo cu un sfflngmal


5i Si++) if... elseif,,. else
{ mic, $text = "Ana" sau $text = "mere" Dar dacddorim si folosim mai multe
print "Si g f i t m eJ S il < b r > " ; penlrua vedeaci daci stringulare mai condilii qi in functie de fiecare dinte
l putln de 5 caracteretextul nu va fi afi$at. acesteasd afig5m altceva?Folosim if ...
Observdmfolosireasemnului\ de prece- elseif... elseqi repetdmelseif de cdteori
darea caracterelorspecialepentrua afi!a avem nevole.
ghilimelele in rezultatul de pe ecran,
Eile Edit yievr Fgvoites lools astlel: Te\tu1 ,,Ana are mere' are mai
' € E mult de 5 camctere.
Am folosit in acest exemplu func1ia
$iext
snr caractere
= "prune";

= srilen (stext);
Stop Flefresh
strlen care calculeazdnumirul de carac- if (Snr caractere < s)
tere intr-un string. Pentru $text : "Ana {
a r e m e r e " , v a l o a r e a v a r i a b il e i prlnt "Te:!!l are mar pulin de 5
0 - Casablonca
$1rI caractere = strlen($text) va fi 12
I - Elairwitch Proj sct
? - Mah:x
(spatiileconteazi).Pentru$text: "mere", ]
3 - Rambo $nr_caractereva fi 4. else if (5.! caractere -- 5)
Vi spuneammaisusca in uneleca,/uri I
putem sa omitem acoladele.in cazul lui prinr "Textul are exact 5
Rulati scdptul Si observali cA au fost if, dacdparteadintre acoladeesteo srn-
afi9atetoatefilmele. Cum am {Ecutacest g u r al i n i ep u r e m . . u i r aa'c- o l a d e l1ei s c r i e l
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 codul asfel: else if (5nr_caracrere > 12)
inceapd afigareaelernentelorarray-ului {
tr unde sd se opreasci din loop. Ne-am if($n! caraclere > 5) print "Textul piint'iTexrul are mai mllr
adusaminlecAinrr-unarray.dacaindex- \"Srert\" are nai mutt de 5 caracrere,,; de 12 caractere";
ul nu este definit, pome$te de la 0 Ei ]
p e n t r ua a f i l a . . C a s a b l a n c a
t r"e b u i a . a r if... else
scriemprint $filme[0] 9i am fEcutacelaqi Ce facemaruncicanddorim .A afitdm {
luclu. La a doua rulare a loop-ului $i a u n l e x td a c ao c o n d i t i e s r ei n d e p l i n i r$ai pr:nt "Textul are nai pulin de
a\.utvaloareaI ti a afi9atfilmul $filme[1] alt text dacd aceeagiconditie nu este 5 calacaere Fi @i nult de 12";
careeste..Blainrirchprojecr'-9i a5amai indepliniti?Folosimif... else:
departepentru fiecareelementdin array.
Functia counto estefolositd pentru a
rumdra elementele dintr-un array. Srext = "mere";
in acestexempluvedemci elsecare
count(Shlme)este4 in cazul de faq6. 5nr_caractere = strlen($text) ; este folosit chiar la smrgit, serye$te
Teme: if {$n. caracteie > 5)
pentru toate celelalte cazuri care nu
LAdiugati mai multe filme in affay qi I
indeplinesc condiliile specificate in if
rulati din nou scriptul. prrnt Tertul are 6a: muLt de 5
9i else il
2. Schimbati$i :0 cu $i : I $i rulati Testafi exemplul de mai sus folosind
scnptul. diverse valori pentru $text.

CHIP SPECIAL SITEDINAMiC


EDITORTAL,,
TNTRODUCERF,,
TNSTALARE,0RGANIZARE,,
MySQL,@, Cnr,lnrSrE,,
ADtvilNlsTRARE,
T|PS&TR

switch lui nu s-a oprit. Mai observdmdin acest


switchestealtemativapentrublocudle exemplucb in cadrul structurilorde con- I
condifionaleif ... else if ... else. Este trol, de orice fel nu doar switch, putem S t o t a l = $ x + 1 ;
preferabil in cazul in care codul dintre lolosistringuridarra trebuisdle incadrim print Stotal;
acolade este mai mare gi ne-am putea cu ghilimele (cum nu am fost nevoili sd
p i e r d e i n p r o p o z i l i i c o n d i g i o n a l eq i lacem in cazui numerelor).Iata doua
paranteze. Savedemcu un eremplu.im- exemple de folosire a stringurilor intr-o !ecatculare (Sx);
plu cum se folosegtewhile; structurade control. folosind numere, // va afira pe ecran 2
respectiv stringuri:
<br>Puten de asemenea sd foLosim di-
Stexr = "Ana

9nr_caractere = srrlen (Stext) ; if (5i == 1)

switch (Snr_caractere) {
{ print "Si este inpar"; recalculare (16) ;

) // va afiFa pe eclan 1?
print "Textul are 4 caractere"; if ($i == 2)

{
prinr "Si este par"; Funcfiile pot accepta mai mulli
]

Al doilea exemplu:
I
SrezuLtat = $x * $y;
p -n "1-x u if {Snume == "Ana")
5 nici 12 caractere"; { $ x - 5 ;
qcesto 6
F- n. nuna d6 o-o s v = 6 ;
l ] prjnr inmulrire (9y, Sy) ;
if ($nume == "Barbu")

{ Putemde asemeneasAddmparamehii
Cazul special ,default" de la slirgit p.rnt "Acesla este nme de baiat"; direct, separa{iprin virguld
este folosit pentru si nra!ia in care dori m sa prinr inmullire (76,59) ;

executim cod qi dacdnici unadin condijiile sau a$a:


anterioarenu esteindeplinitd (fiind astfel print inmurrire($x = 76, 9y = 59);
similar lui elsedin structuraif... elseif... Am invdlal pandacum ce sunt vari- Putem da unei variabile valoareare-
else).Elpoatefi omis gi astfelsi executdm abilele qi ce lel de structuri de control zultatului unei lunctii dacdacestaesteo
cod doardaciuna din condilii esteindep- avem la dispoziJiepentru a lucm cu ele variabil6:
linita. Instrucliuneabreak;bebuiefolositi astfel incat sd oblinem rezultateledorite v-riabilr ' - 6,sy-r0)'
la incheiereafiecdrui caz deoarecealtfel cuminim de efort. in continuarevomafla Frint Svariabila;
codul din urmatorul caz va fi executat. ce sunt func1iile qi cum acesteane fac
Iatd un exemplu: munca chial mai ugoard. inpasareauneivariabilecdtreo func{ie
nu conteazdnumele variabilei ci doar
Functii raloareaace:teia,raloarece urmearaa
fi prelucratd.
switch ($litera) VA mai amintili unde am mai intahit
temenul de funclie? Dacd vd spun cI la
algebri o si fugiJi mdncdndpdmentul? function adunare (Sx )
print "Ana "; Ei bine. legali-vi de scaun pentru cd {
acoloam intAlnit termenulgi in continua- $rezultat*$x+1;
Pr:nt "Balbu "; re vd voi explica funclionareafuncliilor )
(hmm, astao fi repeti{ie?)in PHP. Deqi S a = 5 ;

Print "Claudia rr; programareaPHP nu este matematic5, print adunare (Sa) ;


l modulin carehaleazafunctiileeslesimi- 9b = 10;
print "es!e un n!me"; Iar. Spre exemplu-la algebrd.func1ia print adunare ($b) ;
f(x):x+1 executao operaliecu x gi dldea
un rezultalin func1iede valoarealui x.
Rezultatul rultuii acestui cod va fi Acelagi lucru il face 9i o func{ie PHP I n a c e s l e x e m p l uv e o e m c a q o a r
..Ara BarbuClaudiaesteLrnnume"ti nu valoareavariabilei estecea care contea-
doar,,Ana esteun nume" ala cum ne-am za. lunc!iapreludndaceastdvaloare.
fi a$teptat,deoarecein lipsa instrucliunll // iunct!ile trebuie definite inainte Funcliilepot fi definire)i rulaleftrA a
break;la incheieracazurilorrulareacodu- li se specificavreun argument:
CHIP SPECIAL SITEDINAMIC
EDITORIAT
,, INTRODUCERE
,, INSTALARE
,, ORGANIZARE
, IV]YSQL CNqNNTSITE
,,@,, ,, ADIYINISTMRE
,, TIPS&TRICKS

.a =l!l-:l
J l a i 3 l ' : J 3 J I J J

trffiiF-l ml Fm-l
1 "\i,'

z 5 : l E
21 @
Foll1@I

I
DacA(if)estevaramer. 17 Aur@dr+ idsr c &k br d4i$r eqr ch@s lt tu@re:4de rd d3rrerii4d4r
Eem la mare,dacenu
mai asteptdm. t o 1 - * l -t
f$), -d 6d I I

Am vdzutdin acesteexemplecdrezul- operatorul ! NOT:


f)nctio. v:eau Ia nare o tatulunei functiipoatefi o valoare(func1ia if(le d:m:neataO) prini ..8 p:ea
i inmultire care oferd rezultatulinmultirii larziu pentiu cafea_,,;
siuna - dare (\\n7l); lui $x cu $y) sau o aclir.rne(functia else prlir "Po.i s; faci caJeaua.,,;
vreau.la maret) care ali5eaziun text.;.
/x date("n") retumeazareprezentarea Rezultatulunei funcriimai poarefi ;i o
numerici a lunii in care sunte:n,de la I valoarede adevir. TRUE sauFALSE, ca Aceasti funclie ilustreazefoafic bine
pentru ianuariepeni 1a12pentrudecem- in exemplul umdtor: folosirea operatorilor logici. Dacd ora
brie. Astfel, dacd luna curentde aprilie. estemai mare sauegaldcu 5 ;i mai mici
$lunava fi,1qidacde noiembrie$lunava sau egali cu 9, ne putem face cafeaua.
ft I 1*/ frnction e dininea.a o Dacd e 4am nu vom bea cafeadegi $ora
<:9 9i la fel dacde ora 22 de$i$ora>=5.
if(Siura < 6 Sluna > 9) pr:nr: \o sa Sora = .iar:e ("c") ; Ambele condilii trebuie si fie adevirate
ingae;i de f.:9, sunrefr ir tuna d pentru ca e_dimineataosd fie TRUE.
tatnat A 24 -/
else print "Slntem ii Iuna a $Iuna d. li{sora >= 5 && Sora <=9) Funcliipredefinite
e cald ti soare, fDql ta naret,,; 1
return TRUt; Toatefunc{iileexen.rplifi
catepenl acun
vreau Ia nare O; l au fostdcfinitede noi. Existdinsi qi funclii
predefinite, integrate in PHP, pentru o
{ multrmedeacqiuni. Un exempluestefuncfa
Dacde mai devremede luna iunie sau Ieturn FALSE; date0 pe caretocmai am folosit-o $i care
(operarorull) nrri tarziudc \eplen)brie,
rctumeazd ora, luna, anul precum qi alte
nu c cazulsa ne facernbagajele.Allfel. elementealedatei.Alt exempluarfifunc1ia
drumul e al nostru! counlf)pe carean lolosir-os, numAram
Pute{imodifica (temporar)setdrilede i! {e-dimineata O ) prin:.'poli s5 facl cate elementc sunt intr-un aray. Existd
dati din Windows qi sd schinrbali luna
runctI penh1laproapeoricein PHP5i va
pentru a vedeace sc intampla. Nu uitati 6 t , 6 p c o . - . .
. p - . sliluic\csacaulatiin manLralul PFIPdepe
sd revenili la setArileantcrioare! Sau, acela5i lucru scris folosind CD ori de cdteori aveti nevoiede ceval

I + , +
a+"' Jrr n,,i-rw.a**" ,r" a!d'.$ hrp /rreore_dm
ffi: Fm-J t€j mdaehp
@-i l,m-:

, . , 6 , 7 8
,526z7E
ftls-rs !

:l_
F Ad@dE &.4d dd ra d4,{E}r
s6r.}!@r

_l
'.,-r | 1 r aK ro( l .:d| |
Scriptulcare are griia de tensiuneanoastrd:nici un pic de cafea dupd ora,l0.

CH]?SP!.CIAI SITEDTNAMIC
EDTTORTAL,,
TNTRODUCERE,,
|NSTALARE,,
ORGANTZARE,
MySQL,,@,, CnrnnrsrE, ADM|N|STRARE,,
T|PS&TR

PHP 9i formulareleHTML

PHP gi formularele HTML


Formularele qi link-urile sunt mediatorii interactivititii onJine.

A;-r,,:l'i;i:ilffi
#i.'!"T.
scriereala un serviciu gatuit de e-mail
file ldit liew Flvorites lools
name="nr1"
d - o o l - -
value=" 15 "><br>
. - a : i P y F - " - x

name="n12 " va1!e=" 13"><br>


pdndla semnareauneicdrJide oaspeli.V- <rnpui tyPe="submiri,
ali intrebatcum lirnclioneaza aceslea)i name=rrbuton submia" value="Aduna">
care este mecanismulcare face posibil
pistrareadatelorintoduse qimanipularea
lor ulterioari? V-ati uitat vreodata RezuhatuladunaJiilui lJ cu 13 este28 Dacd accesim http: //localhost/
nedumeriJila linl-urile interminabileqi .fbrmtrlar.htnl obsewdmcd in cAmpurile
aparentfird sensdin unele pagini de web? destinatenumerelorce urmeazi a fi adu-
in acestcapitol vom afla cum ajunge nate existd deja valorile 15 qi respectiv
infomatia dintr-un formular la un script Numerele trimise cu ajutorul formu- 13. Putem apdsabutonul ,,Adund" pent-
PHP $i cum, un link poate fi mai mult larului au fost adunate gi rezultatul ru a obtinerezultatul28 sauputemmodi-
afisat.
decat ceeace pare la prima vedere. fica oricare din valorile prezentate in
formular (direct in browser, nu editand
Actiune! codul HTML), pentru a obtine alt
kuja\i http :// lo caIhost/lquorlaLfutLl, rezultat.
Un fomular estecompusin mod nor- scriei cateun numdr in fiecarecdsuJdde
m a l d i n d e c l a r a l i al o r m . . . . u r m a r id e text Si apdsafibutonul,,Adund". Repetatr Verificare
elementede tip <input> $i un buton ,,sub- experimentulcu alte numere.
mr1... ln momenrulin careapAsAm butonul D i n a c e s te x e m p l u o b . e r v d m m a i Un utilizator pugubdlar putea inho-
submit,dateleaddugatede utilizator sunt multe lucruri: in declarareatag-ului duce un text in loc de r.rnnumdr sau ar
transmiseserveruluiundesuntprelucrate. <form> am specificat hqierul care ur- putealdsachiar celedoudc6mpurigoale.
Sd redem praclic cum se realizeaza meazd si prelucreze datele in exemplulnostruaceastan-arfi o prob-
acest lucru, recrednd intr-un formular (action:"adunare.php"),precum 5i me- lemd insd dacdam face o aplicalie seno-
dialogul cu care am inceput sd invdfdm toda prin care se transmit datele cdtre asdonline pentru primiria oragului,cu
PHP. undeGigel trebuiesAadunedouA sewer, in cazul de fatd POST. Elemenf ajutorulcdreiacetdleniisd-5ipldteascd
numere.Pentruaceasla\om crea douA ele formularuluiau cate un nume dupd impozitele, omiterea verific[rii datelor
fi qiere,formular.html qi adunare.php. carevor fi recunoscutede citre interpre- trimise de utilizator ar ducela haos.Daci
In figierul HTML vom aveaurmdtorul tor (ex: $_POST['nrl']). La apdsarea cetileniiar putca.crie un textoarecare in
formular: butonului ,,Aduni", informalia va fi tri- loc de codul numericpersonalsaunu l-ar
misd serverului. $ POST este un array completa,hqa de impozit nu ar putea fi
<fom action="addare.Fhp!' metbod="FOST"> carecontinetoatedateletrimise prin for- procesatd.
P.rmr1 .un;r: <inpui type:'rr:ext'' mular cu metoda POST iar fiecare din De aceea, pentru odce fel de date
name-"nr1"><br> elementeleacestuiarray poatefi accesat trimisede catreutilizalorivom faceveri-
Ai doilea num;r: <inpui type=,,texr" ca $_POST['nume_variabilS']. ficirile de rigoare.Pentrua exemplifica.
name:'!.r2 "><br> T e m d :a d d u g a il n
i c au n e l e m e n t .i.n - vom face doui figiere noi, cnp.html cu
<rnPul l!?e="subfrit" put t,'pe:"text" name:"nr3"> in formu- carevom cerecodul numeric personalal
lar gi modificali scriptul PHP pentru a utilizatorului gi verificare cnp.php cu
adunacele trei numere. carevom verifica dacdacestaestevalid.
cnp.html va contineurmdtorul formular:
Fiqieruladr.rnare.php
va conlineurmd- Valoare
torul cod:
Elementeleunui formular pot avea o melhod=" POST">
valoarepredefiniti., modifi cabildde cdtre
9nr1 = $ IOSTI'nr:l,l; utilizator.dacdatuncjcandle declardm, <rnpul lype="terr" name="nume"><br>
5nr2 - S Posrl rnr2'l; specificim aceasti valoare. Modificali cod nlmerrc personal:
$rezultat = 9nr1 + Snr2; figierul formular.html pentru a contme <inpur type="te:t" name="c.p"><br>
Frint "Rezultalul adunarii lui 5nr1 codul umdtor: <inpuL type=''slbnit"
cu 9nr2 este Srezultat"; value='tverificare CNP">
<fors action="adunare.php"
<p><a href="formu1ar,h|nl">inapoi method=" POST">
PriDul numar: <input type=" rext' Algoritmul din verificare cnp.phpva

CHIPSPECIAL S]TEDINAMIC
ED|TOR|AL
,, TNTR0DUCERE
, INSTA|-ARE
,, 0RGANTZARE
, tyySQL
,@ ,, cnrnarsrE , ADMINIsTMRE
,, TIIS&TRICKS

fi orientat dupd cerinle: cAmpul ,,Cod personal\" esre golt Apasa!i bD


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

CHIPSPECIAL_ SITEDINAMIC
EDTToRTAL
,, TNTRoDUCERE
,, TNsTALARE
,, oRGANTzARE
MFQL, @,, cnrnnrsrE,, ADrvrNrsTMRE
, Trps&TR
"

adunare.php?nr1:423 &nr2=546, trarc-


Elc Edl Vew Fivo,iles foob !€lp
mi16nd datele prin URL, fird sd com- Eile Edit View Flvorites loots lelp
.r'-4 'E)a d O pletAm formularul.
B.ck l , .ti Slop F€lreih Honr 9dch
-
qra""l6"-i7l"liii"o--*-ii in cadrul site-ului nostru vom folosi
fomulare penfu a lisa posibilitateauti-
R6'hdiul ddM&ll rui rr0J3.u 4906esr. 13919
lizatorilor sdadaugecomentariigi pentru
a lrimiteadresaundedorescsaprimeasca
Variabilel6transmiseprin metodaGET c64ile cumptuate.Dateledin formularele
suntvizibilein baradeadresea browse- completatede cdtre vizitator vor h tri-
rului. mise serveruluiprin metoda POST. Tot tAd;;-l
in cadn-rlsite-uluivom [o]oside multeori
GET penhu a obqinevariabile dintr-un
Formularulcu ajutorulcaruiavomtrimi-
URI. Spre exemplu, pentru a vedea o te doue numere pentru a fi calculate la
aounare.pnp carteanumeadresava fi http://localhosV seryer.
cafie.php?carte_id:345.ScriptulPHP va
Snrl = S GEl['nr1']; selectadin bazade datedoar informafiile bil $i pentu metoda GET sau pentru ele-
Snr2 = S GETt'nr2'l; desprecarteacuid345 9i1evaafiqa.Vom mentele din anay-ul $_FILES. Variabila
$iezulrar = $nr1 + Sn!2; vedeacum in urmdtoareledoudcapitole. $_CETI'oarecare'] ar puteafi accesibiliica
' 1 1 $oarecareiar $_Fll.ESi'fisier'lf'size'] ca
c! Sn12 este Srezultat"; G lobals $f,rsiersize. Deqi poate pereamai u$or de
progmmat a$a,esterecomandabil sd ldsali
Existd o setarein php.ini care v-ar per- setareaGlobals:Off in php.ini (agacum
Ruland acest exemplu putem vedea mite accesulla variabileletrimise de utiliza- estesetatAimplicit) qiintotdeaunasi accesali
cum numele 9i valorile elementelorfor- tor fird si le accesaf din almy. Astfel, inh- variabileledin anay-ul din careprorin.
mularului se hansmit fiqiemlui PHP in un form timis prin metodaPOST,valoarea A:fel evitagio seriede problemede securi-
URL Putem accesa direct in browser din <input tlpe"text" nume="oarecare"> tate.problemepe carele rom explicamai
I =9053
http ://localhost/adunare.php?nr ar puteafi accesibildca $oarecarein loc de pe larg in capitolul dedicat securitdlii
&lr2:4906 sau http://localhost/ $ POST['oarecare'].AcelaSilucruestevala- aplicaliilorweb). I

Lucrul cu bazede date

PHP 9i MySQL
aborddri. Cu functia mysql-connect ne
conectim la bazade date specificand hos-
tul la care aceastase afld (localhost), nu-
mele de utilizator (root) Si paxola(pentru
cd aceastaeste goald folosim un string
Dezvoltarea explozivi a Iimbajului PHP din ultimii ani estein cea
gol: ""). Funcliamysql-setect-db("libra-
mai mare parte datoratd uEurinfei cu care acestalucreazi cu bazele rie") este echivalentacu USE librarie.
de date. Aceste doud funclii tebuie apelateintot-
deauna atunci cdnd dorim sa lucrAm cu
pHPofera programatoru lui o mutlrme Din PHP putem face acelagilucru, cu baza de date, inainte de a electua weo
I de func1iipredefinitepenmr lucrul ajutorul funcliilor predefinite. Sd facem interogare. Putem efectua oricat de multe
cubazade date.Aceastainseamnicd din primul nostru script cu care sd interogdri dorim {drd sd fie nevoie si ne
cadrul PHP putem executa toate interac{iondmcu baza de date (nu uitali reconectdtrr pentrufiecaredin ele la baza
operaliunilepe carele-amlicul in capi- cd serverul MySQL trebuie sA fie por- de date,doar pdn apelareamysql_connect
tolul dedicat invd{drii MySQL. Sd ne nit!): 5i mysql_select_dbo singurddati la in-
reamintimpa$iipe carei-am facut pentru ceput.
a interac{ionacubazade datedin linia de test.php in ce privegte mysql_query, notdm
comandd: doui lucruri. in primul rdnd, nu am fo-
1. ne-amconectatcu numelegi parola mysqL connecr ("localhost", "root', "") ; losit punct 5i virgula pentru a incheia
(mysql -u root -p) insLrucliunea SQL a5acum eranecesar in
2. am ales baza de date cu care sd / " 5 C D O Mo L : , ; liniade coqandi. in al doileardnd.dacd
interacJiondm(USE librarie) rulaJi scriptul in browser nu veti vedea
3. am executato comandnSQL (SE- nimic pe ecran aga cum probabil v-a{i
LECT x FROM carti;) Obsen5msimilitudinea
inre celedoua a$teptat.Aceastapentru cd mysql query

CHIP SPECIAL_ SITEDINAMIC


EDtTORtAl
,, TNTR0DUCERE
,, INSTAI-ARE
, oRGANTZARE
, MySQL
,,@ , Cnrnns
srE D ADMTNTSTMRE
T1pS&TR1CKS
"

executainterogareadarnu ahgeazdrezu-
Pentrua afi gavalori cadruldinresursei F R O Mc a r l i " ) ;
Itatulci retumeaze o valoare:TRUEdacd retumate putem folosi mysql result. in $a!rRezuLlat =
interogarea a fostefectuatdcusucces sau exemplulurmdtorafi tdm con!inutu|cem- nysql_fetch array ($resursa, lnsQl
FALSE daci aceastaa e$uat.pentru pului titlu de pe primul rand al tabelului
Asscc);
pxint_! (9atRezu1!at)
instructiuniled€ tip SELECT,SHOW, (numerotareaincepe de la 0):
;

EXPLAIN saUDESCRIBE, mysql_query


Daci nu specificamtipul array-uluisau
retumeazdgi un identificatorde resurse
test.php folosimMYSQL_BOTH,vomputeaacce-
pe careil putematibui uneivariabile.
sa rezultatul atat mrm€ric cat $i asociativ.
Resurs€le suntvariabilespecialecare mysql_connect (,,Ioca Sresursa = hysql quely("SEr,ECT *
contin referinte cetr€ resurseexteme nysqt select db("ribrarie',) ; F R O Mc a r t i " ) ;
(precumrezultatuluneiinterogdria ba- = nysql-query(iiSELECT
$resursa * FROM $arrRezuLla]] =
zei de date) 9i pot fi manipulatecu
rnysql fetch array (Sresursa)
ajutorulfuncliilor. = mysql result(Sresulsa,
;
9rezultat 0, P!rnt $arrRezuLrar[1].''
Esteevidentcd daci rezultatulinte-
". SarrRezultat [3] . "<br>'.
rogariiaxfi fostafi$atdirectin browser, prant 9rezulta!; print SarlRezultat ,id carre.l .'r
[
nuamputeamodifica aspectulsaufunc1ia
". SarrRezultat ttitlu,
paginilordewebdinamice giamazon.com I ];

ar fi o simplSingiruirede date. Parametii fimctiei mysql resultsunt: Observdmfolosirea operatorului . de


Sd ne convingemce rezultatul inte- resursa($resursa), rdndul(0, primul r6nd concatenarea stringurilor pentru a inter-
rogdrii este o resursd.Pentruaceasta
al tabelului)fi numelecAmpului ("titlu"); pune spalii 9i line break intre vaxiabilele
modificaJiultimalinieascriptuluigiscrieli:
ce urmeazda fi afiqate.Mai observdmcd,
test.php degimysql_num_rowsne spunecd avem
test.php
mai multe ce4i, print r ($anRezultat)
mysql_connect (ttlocalhost", sauprint$anRezulrarl 'tittu'l
hysql connect ("Loca1host",
"root", "") ; ne afi$eaz
A
"root., "") ; mysql ("tibra!ie.
select_db ); doarprimul elemental anay-ului. Putem
nysql_select_db ("libra!ie() ;
= mysql
/* afigeaz; conlinu!u1 campului de- afita toate valorile array-ului folosind
Sresursa qDery("SELECT * FROM
scliere de pe cel de-al doitea rand at while:
print gres!!sa;
Sresursa = mysql query("SELECT i FROM = mysql-query
Sresursa ( "SELECT *
FROM carti" );
Srezultat = ntsql result (sresulsa, 1, while (SroHysqr_fetch aray(Sresursa) )
Putem de asemeneascrie interogarea
SQL inr-o \ ariabilApe caresdo folosim
"descriere,'); {
print $rezDltat; prrnt (
9rowi!titLu,I.r
ca parametru al funcliei mysql_query.
/* sau conlinutut canpului id-carte | 'descriere'
de . tloa I . "<br>" '
Aceastametode este preferati de mulli pe ce1 de al treilea
deoarecetextul interogdxiiestemai u$or
land at labeluluii/ )
p!!nt mysql_resu1! (Sresursa, 2,
de reperat in cadrul scriptului:
"id_carre"); Folosindwhile scriptulfteceprin toate
valorile array-ului pend la sfex$it Si pen-
test.php
tru fiecaredin ele afiqeazdvalorilecdm-
Mysql_resulteste greoi de folosrt purilor titlu gi descriere.Variabila $row
mysql_connecr (rtlocalhosl.., "root", ".) ; deoarecesuntemnevoili sd accesdm estela rdndul ei r.rnaray (observali ca arn
mysql select db("librarier) ; fiecarecoloald.a fiecdruirdndin parte. apelat-o ca atare, grow['titlu'])
5sq1 = "SELECT r FROM carri,t; 9i asta
In ajutonrlnostruvine mysql_fetch_array pentru cE$anRezultat esteun array mul-
$resursa = mysql quely($sqt);
cu careputemaccesavaloriledin tabe- tidimensional.
print $resursa;
lul retumatin interogare dintr-unarray. Ce este un anay multidimensional?
I Putemacc€saresursaca un array nu- Un arr4y s31s contine h randul lui alte
meric: array-uri. in cazul de fafi, $arrRezultat
PHP oferd funclii pentru accesarea
estemullimea aray-urilor de rdnduri din
resurselor carerezultddin mysql query. test.php tabel iar fiecare $row este un aray care
Cuajutorulmysql_num rowsputemafla
cuprinde valorile rdndului respectiv. Spre
cdterdnduri a retunatinterogarea:
mysqr connect ("1oca1host"/ 'root", '") ' exemplu,in pseudocod:
mysql select db("librarie,'),
test.php = nysql *
9resursa query(,,sEI,EcT SarrRezultat = array (randul t,
FROM carti,,); randul 2, randul 3);
tysqr connect ("localhost", "rool", "") ;
5arlRezDltal = -
s"ardull de pF .cndul
nysql_select_db (.,1ibra!ier ); mysql_fetch aftay (Sresursa, MISOL_NUM); descrrere de pe landul 1);
sresulsa-= frysq1 query("SELECT * FROM
print_r (SarrRezulrar) ; - array(tit]u
Srandul2 de pe landDt 2,
descrlere de pe randuL 2);
sn! = nysql num lows(Slesursa);
9randu]3 = arlay(titlu de pe landu1 3,
print ''sDnt
5n! certr in baza de darer',
sau asociativ: descriere de pe randul 3);
tresursa - mysql_query ( "SEIECT +

CHIPSPECIAL_ SITEDINAMJC
EDTTORTAL
, TNTRODUCERE
,, INSTA|-ARE
, 0RGANTZARE
MySQL
,,@ ,, Cneme
srE ,, ADM|N|STMRE
,, T|PS&TR
"

Dupd cum vom vedea in continuare, nufre_domeniu=' . $ror[ 'nume-domeniu'] .'


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

$sql dindomeniu.phpqi si o simplificdm


File Edt vlew F.vorlt65 Took Hllp folosind id domeniu ca referinti:
Fe Edit viev'r Favorite! To6ls Help
$sql - "sELEcT tirlu
'.s ccTI
FRoM carri IiHERE + . + g E
o d o m - ri d do-e -'], Fick F,:rv,,rrd 5lop ReFrssh

Putem, in mod similal iace o pagind


librriria meer caresdpreiaid cartedinIJRL gi sdafiseze
Smt 6 cartiln baza dc date
pentru cartea respectiva titlul, autorul li
descrierea.Vom face acestlucru inf-unul
librfiria mea
Domenii din capitolele urmdtoaxe.Penfu moment
insd, este suficient sA intelegeti functiile Sunt6 carhinbazade date
Poezii MySQL 5i modul in carese lolosescvari-
Teahr abilele in interogdrile SQL.
Mitololie Domenii
$i chiarmai mult
Poear
prin
Putemtrimitenumeledomeniului Putem folosi funclia mysql query Teahrr
URL. pentrua efectua$i alteoperafiicu bazade hltoloee
date: INSERT, UPDATE sauDELETE.
{ Si facemintdi un scriptcarene afiqeazd
print $ros[ 'titlu' ] . '<br>' ; toate titlurile din tabelul carti, script de
l carevom aveanevoie in continuarepen- pentru
Putemtrimiteid-uldomeniului,
tru a consulta baza de date Idri si fim o orientaremai ugoari.
nevoili sd intrdm in linia de comandd.
Vomprezentadateleintr-un tabelHTML:
<A href="toate ca!ti1e.php">
vezi nodificarea l</a>
Vd spuneam in capitolul despre toate_cartile.php
MySQL cum id-urile ne pot uquramun-
ca. Acest lucru devine evident atunci nysql connect ("Iocaihost", "root", "' );
Rulali scdptulin browserapoiaccesa{i
http://localhosVtoate_cartile.phppentru
cind creem pagini de web dinamrce mysql serect_db ("ribrarie" )t

deoarecesintaxainterogdrilorSQL poate $sql = "SELECT id carte, litlu FROM


a redea cd noul titlu a fosl introdusin
fi simplificate foarte mult. tabel gi i-a fost acordatautomatSi un id.
Fiecarenume de domeniu din tabelul $resursa = mysql query(Ssq1) ;
Dacd folosili Opera sau setareade re-
domeniiare ceteun id asociatqi arunci. // deschiden rabeluL:
fresh din Intemet Options din Intemet
gtiindcddomeniulPoeziiareiddomeruu print
Explorer ,,Check fol newer versions of
"<!able
1 am putea alege cd4ile din domeniul - .. -nd: storedpages- Nerei'. va fi neroie sd
respectiv folosind simplu: SELECT x while ($row{ysq1 fetch_afay ($resursa) ) reincdrca,tipagina (reftesh).
FROM carti WHERE id_domeniu:l in {
loc de mai greu de intelesul SELECT Sd modificdm operatii.php pentru a
titlu FROM carti, domenii WHERE vedea cum folosim instrucliunea DE-
nume_domeniu:'Poezii' AND ' L d i . S - o t ' o , " ' d LETE, rescriind variabila $sql:
" r ' - '
domenii.id_domeniu cani.id_domeniu. <!d>".$rowI rtirLu'
]. "</rd> @
Cum?Trimil6ndvaloarea luiid domeniu I Fe Edil View FavoritBs Tools HelD
prin URL. pentru fiecaredomeniu in
parte. Modifica{i index.php astfel: // si lnchidem taberul
+ - o t r fr
86ck F!r',\r.:rd 5l@ Retrc*r HOI
print "</ table>";
Addrcssl€l httpr//localhost/ioate-cartib,php
5sq12 = "SELECT id doneniu,
nune_dome.iu

Sresursa2 = nysql
FRoM domenii";
query(Ssql2); Rulali scriptul accesandadresahttp:// r Romeo

localhost/toatecartile.php9i apoi creali I


{
nysqL fetch auay{Sresursa2) ) un nou f,rgier,operatii.php: trlPoeeii
r lyoean,volumu I
print'<a href="domeniu.php? operatii.php t-[ . :
volumul J
I l.Poean.
id domeni!-. Slow| 'id doneniu'l .'">
'.$rowl'nume domeniu'1.'</a><br>' ; mysql_connect ("1oca tr E.s*d"l"O!-p"t-
l mysql select db{"1ibrarie") ;
Acum link-urile citr€ pagina $sq] = "INSERT rNTO carri(rirLD)

domenii.php vor fi de tipul <a hreF" VALUES('Dune')";


el Done
d o m e n i i . p h p ? i dd o m e ni u l " - P o e z i i mysql_query(9sql);
</>. 56 modificdm acum gi interogarea Toatece4ile din bazade date.
- SITEDINAMIC
CH]PSPEC1AL
ED|T0R|AL,INTR0DUCERE
INSTA|-ARE,'
ORGANTZARE
MySQr cnrnnrsrE, ADMINISTMRE,
TIeS&TR1CK
" " "@,

operatii.php isql = 'TINSERT INTO calti(tittu)


mysql selecr db ("1ib!a!ie") )
vAr,uEs(,r.$_PosT[,r $sql = "DELETE FROM carli tiHERE
nysql_connect {,,1oca frysqr queiy(5sq]); id carte-,,. s Posr[.id carte,],
nysql selec!-db ("librarie") ; mysqt-query(gsql);
Ssql = 'IDELETE FROM carli I,iHERE <A href=,'loale cartite.php,'>Vezi
t itlu=, Dune,r. modificarea l</a><br> <A href="toare_cartile.php',>vezi
nysql qDery(tsqt); . b ' -e -
""d"!qa e. hLnl " Ao.ugd .c" u- nodificarea l</a><br>
<A h!ef=',stelgere.php">Mai srerge
<A href=!!toate_cartiIe.php">Vezi

nodificarea l</a> Accesali http://localhost/adaugare.


html Siputeti adtuga oricete titluri doriti ! Cet de ugor estesd $tergemceva din
Rula,tiqiacestexemplugiapoiaccesaJi Vd putetiverifica oric6nd,accesAnd http:/ baza de date$i nu ftebuie seln€m minte
htQ://localhosvtoate_cartile.php pentru /localhosVtoate_cartil€.php. nici un id, nici un titlu - amdndoudne
a vedeaceiffegistrareaa fost$tearsd din Si scriemacum un scriprcu care sA sunt servitepe tavd de cetre script!
tabel. Stergemlitluri din baza de date gi cu Pentru a modifica datele din baza de
aceastaocazievom vedeagi cum folosrm datevom scrietrei scripturi:unul carene
PHP, MySQL 9i formularele alte confoale de formulare dec6t<input afiqeazd titlurile5inepermitesAselecr5m
t)?e="texti> sau<input t ?e:"submit,,>. titlul pe caredorim sdil modificim, unul
A sositmomentulsApunemcapla cap in exemplul urmdtor vom vedea cum care sd afigeze datele intr-un formulax
toate lucrurile invi{ate pend acum. afi$dm titlurile intr-un dropdown list pen- unde sd le putem modifica gi ince unul
Folosind formularele HTML putem tru a putea selectatitlul caxeurmeazd s6l care se trimitd datelemodificate 1abaza
interactiona cu baza de date fixd sA tre- $tergem. de date:
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 Iista_carti.php
script PHP ori de cdte ori lrem sa in baza de date. urmdnd ca el sd aleagd Aleqe una din carti si apasa buton!]
addugim, sd modificdm sau sd $tergem titlul ce urmeazd a fi $ters.
weo inregistrare. <FORM action="modif ica.php"
Sd facem un formular care sd ne ajute sl9l99l9!!p _ nethod="POST">
in addugareade titluri noi: S erq- )- . i,l . oj- oeza .lF dd_e:
<form action="sterge!e a/sq] oa ecr '"lo.a -os.'f"'oo-","'
act.phpn
adaugglgllll_ merhod="POST"> mysql_seLect_db (,,librariet, );
Adaug; un titlu in baza de date: <select name="id_carte"> = "SELECT id_carte,
$sql tir1u,
<iorn action=',adaugare.php( desclrere FROM carti";
nethod=" POST"> mysql_connect ("1ocaI = nysql
Sresulsa query(SsqI) ;
<anput rype=iitextn .ane="ti!Lu"> mysql,select_db (',Iibrarie" );
<INPUT type-"subhit $sql - "SEI,ECT id carte, rirlu FROM mysql_ferch array (S!esursa) )
cartr oRDER BY ritlu ASC";
SlesDrsa - mysql_query {Ssqt) ;
$i iata qi scdptul care va prelua valoarea while (srow =
din <input type="text" name:"titlu"> mysql fetch_array (gresursa) ) File Edil View Favorites Tools
transmise prin metoda POST qi o va {
addugain baza de date: Prlnt "<option
+ . + _ a E
Bd.k ForwErd stop Refresh
value=' ". Siow I 'id c

L ".5rou['titlu'l'</option>";
)
mysql_connect ("1oca1host", "root', "' r ; Sterge w tidu din baza de date:
mysql_select db (,,Iibrarie" );
<INPUT type="subnit" value="Srerge"> e l i m p u l u- i
L e g e n d e lO
Dune
Flle Edit View Favoites Tools Help
L e g e n d e lO e limpului
+ . + , t € t r in acestformular transmitem variabila
Poezii
Back ioll"rir:l stop Refresh cu numele id_carte (definitd in <select
name:"id_carte'!) a c6rei valoare este Poezii.volumul2
P o e z i vi ,o l u m u3l
conlinute in tagul option (<option
Romeosi JuliEta
Adaugi rm tiduin baza de date; value:'".$row['id carte']."'>). Iatd gi
scriptul carepreia aceastivariabili qi gterge
Adaugd r6ndul corespondentdin baza de date:

sterqere act.oho
Formularulincarevomintroduce tiflul AfigareacArtilordisponibiteintr-oliste
ce urmeazda fi inclusin bazade daie. dropdownpentru o seleclierapide.
mysql_connect("localhost", "loor", "')'

CHIPSPEC]AL SITEDINAMIC
EDITORIAL,INTRODUCERE,,
INSTALAREORGANIZARE,,
MYSQL,@,
" CNTNNTSTE,,
ADIV]INISTRARE,,
TIPS&TRJCKS

{
print ,,<input
type=/ radio, mysql_fetch_array (9resursa ) )
nafre=r id carte' File Edit View Fdvorites Tools
I
value=, ".Sxowt.id c
Pranr'<rnput type="tert"
<b>". $row['tit1u, ] .'</b><b!> nafre="tit1u''
<i>.'.Srowt,descrie!e,
1.,,</i> value="'.$rowl,tir1u, 1., "><br>
<re:rarea nanre="descriere,,>.
l
.$row['descriere, ].
'</textarea><br>';
Modifica aceastacalte:
<INPUT t\l1)e="submit'r
)
vaIDe-.'Modific;',>
/* qi folosind un control ascunstrans_
mitem mai depaxtecdbe modifica_act.php
id-ul cdr(ii deoareceva aveanevoiede el eua e putr
Accesa{iscriptulin browserpentrua D a n e m acra I A l t
atunci cand va opera efectiv modificarea
vedearezultatele.
Si trecemla urmetorul in baza de date */
fi9ier:
print r<input type-"hiddenn
name=irid_carre,,
Modifica aceasta carte: va|ue="'.$ losT t .id carre,l ., ">, .
<FORM action=nmodifica act.php"
Formularulcu ajutorulceruia
nethod-"POST">
fic6m efectivdetaliilecdrtii.
<INPUT trye=t'subnit"

value=',l,1odif ice,'>
floare la ureche. Nu uitali: de cdte on
/x Ludm titlul gi descriereadin nou din
Iucrurile nu functioneazd a$acrun ar tre_
baza de date pentru a le afiga in con_
troalele formularului deoarecedin figierul i -
bui. verificatidac6a1ipus puncrqi rir_
lll ]Lne.utlu.nutscnpt drn aceasdserie, guld la slirgitul propoziliilor, dacdnu atr
precedentnu am primit decato singulA modific6_act.php preia variabilele scris gre5it numele unei variabilesau
variabild, $-POST[,id_carre'], din bu_ $_POST['titlu']qi$_POST[,descriere,] din funcriisaud-acd ati pustoaleghilimelele
tonul radio (<input type:'radio' formulamlprecedent gi actualizeaza
inreo- la locullor, Inaintede a trecela capitolul
name:'id-carte' value=,".growf,idcarte, istrareacd4ii a cdrui i;_.*;;;;;;; urmdtor vd recomand sd faceli cateva
1.">)*/ lui $_POST['id_carte']. exercitii.
La sfi4itul scriptului folosim headerQ Noi avem cdtevacdrli in baza de date
Fy.ol ^onnA. - (-
oc. pentru a redirecfona automat browserul insi nici una nu are pre! sau datd (de fapt
mysql selecr_db {itibrarietr) .
cetre lista caxti.phpdupd ce modificarea a valorile sunt 0 pentruprel l9i 0000-00-00
$sql = "SELECT tirlu, descriere fost efectuatA: pentru datd).
FROM carti I,{HERE
Scrieli scripturi pentru a modifica
id carte='. $_posr t .id-carte, l;
gresursa
prelul $i data fiecirei cd4i, la lel ca in
= mysqt query(Ssql);
ultimul exemplu prezentat. Nu uitali c6
nysql connect ("loca]host", prelulestedetip INT in bazadedaregi va
"roor" ", ),
nysql selecr-db ('Iibrarietr ), trebuisiil scriejica,,98500,'nu,,98,500',,
$sql = "UpDAiE carri sET
,,98500lei" sau,,98,500".La fel, data
titl'r=, i. g_posT i,,
[,rirlu, ]. este in format yyyy-mm-dd (ex: 2003_
descrie.e=' ". S PosTt,desc!iere'l n,
02-23).
I'THERE ld_carte=',. S_POSTt tid_carte,l; DupA cealiscris
,lece e ds .ani !i apasaburolul Modlc,
scripturile.
rulaqile
gi
mysql_query (Ssqt) ;
electualimodificarile pentruiiecarecafle
header("location:
?ea tu.
lista-carti.php") ; care are prel 0 saudata 0000_00_00. Fiti
Jatuaa pa ,e# ,t. r.acotu a tLtl,o- nhpuato,
imaginativi5i scrieripreEuri qi datedife-
Accesafi acumadresahtF://localhosV rite pentrufiecarecarte.Vom aveanevore
C.w e p,tted ii Dn..ntucal
lista_carti.php5i modificari dupd plac de acestedate in capitoleleurmdtoaxe.
oriceritlu saudescriere a uneicaii: De_ Inainte de a continua,verificafi dace
acum puteli spuneAdio ! lucrului cu baza toalecdrtiledin labelulcartiapa4inunui
de date din linia de comand6.. domeniu (id domeniu nu este 0
rn acestcaprtolam vdzutcum putem 9i se
regase$te$i in tabelul domenii)
facepagini dinamice gi interactive5i cdt 9i au
autor (id-autor nu este0 qi seregiseqtegi
. Leg.kl.le Olimpd{i
de ugor este sd creezi gi sd 1ii ,,la zi" un in tabelul autori).
site cu un numdr uriaq de pagini folosind Daci nu. modificali iffegisterile (in
tM""r1r"6l doar cateva scripturi. linia de comanddsau cu ajutorul unui
Ca incepdtori in progamare v_atiputea script PHP} astlel incdt loarecdqile sd
simti ftustra! decomplexitateaghilimele_ aibi un id_domeniu gi id autor valid.
Formularulcu ajutorul cdruia putem lor, variabilelor sau array-urilor dar nu
ategecarteaale cAreidatedorim se le Vom aveanevoie de toate acestedatein
renunlaji, aveli nevoie doar de ccva cele ce urmeazd.
exerciliu gi in curand toate vi sevor parea
I
CHIPSPECIAL_ SITEDINAMIC
EDTToRTAL,
TNTRODUCERE
TNSTALARE,ORGANTZARE,
MysQr,me,@,, ADtvINtsTRARE,
Ttps&TRtcKS
"

Greareasiteului

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 conectarea la bazq de date conectare.pnp


ln
l p a g i n i s e c t i u n enaa v i g a b i lads i r e - u l u i mysqt connec! ("1ocalhos!". "roor", "");
nostru.folosindtot ce am in\alal pdnd parteade sus a paginii
acum. Vom afla pe parcurs mai rnulte
tip. and trickr caresa ne faca muncaii Fisierul page top.php va conline
mai uqoari. Ca qi pdne acum,sfatul melr tagurileclasicecu careseincepeun filier
estesd scrieti codul prezentataici Si se il HTML. serulde caracleregi titlul pagi-
conlrnutul
testafi voi ingiv[, multe concepte pot nii, logo-ul 9i imediat dupd, deschide
paginii
p6r€a greu de digerat pe hafiie $i foafie tabelul ce urmeazdsd cuprindi meniul qi
u$or de inleles in pmcticS. r n n t i n r r t rr l n r o i n i i '

Vom face intai cudtenie in Dooument


root (c:\Program files\Apache Group\ page_rop.pnp
Apache\htodcs).$tergeli sau mutati
parteade jos a paginii
fiEiereledeja existenteacolo pentru a nu
vi incurca mai departe.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 Aceastdstruchrd o vom folosi pentru '' -pq- o-2i

deschidefieditorul PHP preferat. toate paginile site-ului si in afard de <iirle>librdria nea</rirle>


conlinutul paginii care diferS, celelalte <style type:"teat/css">

Primapagini dmanpractic neschimbate.Le vom refo-


losi, scriind frecaredin ele intr-un fiqier -. xil
O primd pagind ahactivi este vitald separat$i apoi incluzdndule atunci cdnd h1 lfonr-family: Tines New Roman,
pentrusuccesulunuisite.Menirea ei este avem nevoie de ele.
sd ofere utilizatorului motivele pentru a Astfel, orice pagind din site-ul nostru weighl]: bold; coLor: +336699; font
continuasa radi mai mult ti eventualsA nu va conJinedecatelementelerelevante style: italic; )
fie imediat interesatsi cumperece avem careseregdsescdoar in ea:pe homepage , _rl. J l o n L - l d m l y r v 4 . d o ro , A r r o l ,

de oferit. Vit na librariei noastrevirtu- c e l em a i n o i c a 4 i .i n p a g i n ad e d o m e n i u s.ns- e!i!i fon 'siz-: l4px; Ion' -
ale va prezentautilizatomlui atat dome- lista c54ilor din domeniul respectivqi in seight: bold; coroi: * 0 0 6 6 C C ;l
n i i l ed e c a n ed i s p o n i b i lced l r i c e l em a i pagina cu detalii, doar informalia despre
noi ca(i adAugatc qi precumqi cele mai cartearespectivd. Toatepaginilevor avea
populare.Vom mai avea$i o cAsu,t6 pen- aceea$istructud: <body bgcolor="+f ff ff f">
tru cdutare pentru cei gribili sau gata <img src="1o9o.qif">
hotirdli penmr ca acegtiasd poat, gA.i conectare.php
rapid ceeace ii intereseazi.
Primapagindestede fapt o combinalie page top.php
din mai multe pagini. Unele elemente in page bottom.php sc em noti,tade
sunt prezentepe toate paginile din acest copyright Si inchidem toatetagurile des-
site,ca de exemplunotila de copyrightde chise.
la sfixgit, instrucfiunile de conectarela
baza de date sau prima parte in care conlinutul ^r^a h^tf^m nhn

specificdm titlul, setul de caracterefo- paginii . .


losit $i stilul CSS. </table>
PHP ne oferd func1iainclude cu care .p d-ign-"_-_r-r " .-A h'.r-"hL p: /
le putemincludein cadrulscriprului5i 'd w w w .v o g e l b u i d a . r o " > & c o p y , ' v o g e l
le refolosim in orice alt script in care Burda .onr.. aa- o1s</a P.
page bottom.php
avem nevoiede ele hra sa febuiascAsA </body>
le scriem din nou. </hlml>
Structura fiecdrei pagini din site-ul Fiqierulconectarc.phpva conlinecele
nostru.indilerentdacaesteprimapagind. doud instruc,tiuni,mysql_connect gi Pagina meniu.php va contine toate
pagina de domeniu saupagina cu detalii myiql_relecl_dbpecarele vom folosipe domeniiledecartedisponibileastlelincdt
desprecarte,va arataastfel: fiecare pagind a site-ului. ele si fie accesibilein odce moment de

CHIP SPECIAL SITEDINAMIC


EDIToRTAL
,, |NTRODUCERE
,, |NSTALARE
,, ORGAN|ZARE
MysQL
" , tr, ,,@,, ADtvilNtsTMRE
,, Ttps&TRtcKS

pe orice pagind a site-ului, precum 9i solid +632415 1px,,> Astfel, cAndafigdminformat'a desprecartea
casetadecdutare.in acestmomentsuntem <f ornl acrion=,,cauta!e. php/, cu id_carte=3putem sdii afiqim gi coperta
conectalilabazadedate,deoarecefigierul method-"cET,,> folosind<img src:"coper1e/3 jpg'>. pen-
meniu.php nu il vom accesadirect ci il <b>C;utare</b><br> tru mar multd siguranld,inainte de a afiga
includem dupi ce am inclus figierul <INPUT type=,,texr,, .ane=/,cuvan!,, imaginea,scriphrlnostruseva uita in direc-
conectare.php.Putem deci sd scrien di- size*"12"><br> torul coperte$i doar dacdva gisi imaginea,
rect scriptul pentru afigareanumelor de <INPUT type=,,submit,/ va1!e=,,caurE,,> o va afiga.
domenii, in ordine crescitoare (Aven-
tun, Biogafii, Clasici, etc.).

"!9!r9!!p _
\ <!d valiqn-"top"
$i, in final, sdcreemun fiqierindex.php .Li6r,iia mea
<d1v style-"width: 120px; backqrou.d_ care sd le cuprindi pe toate. in el vom
'olo-:4 tb:6'il-"-4"
adduga conlinut din baza de date astlel
r-r
9! r': oodo o:apr; oo.o-r: i':,:;_l

solid +532415
<b>A1ege doneniul</b><HR
1px,,>

s ize=,/ 1" >


incatsi arem o primd pagini dinamica.
Privili penhu un moment cum va arAta
pagma noastrd dup6 ce vom termina de
. - 5 f :""'""'-"''"rt"'
9sqL = "SELECT * FROU donenii oRDER scriscodul.imi gi imaginezce veJispune: ;- :::"-.:.':
BY nlme doneniu ASC'; ,"AreimaginiqipAndacumnu aspusnime- ,; ffi-m|Fl
Sresursa = mysql-query(gsq1) ; ni nimic despreimagini!". Putelitansfem tr;r'.',-#*" "H, .""l-"_J.
fi5ierepe server lolosind formulare5i
nysql ferch airay{Sresursa) PHP insd, cum subiectuldepA$e$te
) tema
{ propusa,va sugerezsd consultalimanua-
prin! r<a href="domeniu.php?
lul PHPde peCD dacddoritis6aflalimai
'.5Lost'ro
d dolel- oo--n. ,
multe. Mai simplu, putem crea,,manual,' Prima pagine contine cele mai impor-
'
">' $rou { ume domeniu' I .
. t n
cate o imagine in format JPEG de 75 de tante elemente.
pixeli lifme 9i 100de pixeli inil{ime pen-
l tru liecarc copertd a ci4ilor din baza de index.php_
dateSi.air damnumeleIjpg penn-u copcr-
ta cd4ii cuid cartFl,2 jpg pentu coperta incldde ('.conecr:are. php,,) ;
cdltii cu id_carte=2 qi a;a mai departe. anciude ("page-top, phF,, ) ;
<div sryle=//Hidrh:120px; background- Toate acesteimagini le vom pune intr-un i.clude ("meni!.pi1p,,) ;
colo!:,F9r1E7; padding:4px; border: director numit coperte in document root.
<td vaiign="top,,>
<h1>P.ina pasine</ht>
<b>ceie frai noi c;rli</b>
Mai utor decet Copy&Paste fiSierul variabile.php,,; <tabre cellpadding="5i>

Cu ajutorul filrlcliei irclude putem refolo-


si bucili de cod fdrd si fie nevoie si le scricm
$i iata9i fi$ierulcarele folosettepetoate
ori de cate od avem nevoie de ele, indiferent acestea:
dacd este cod PIIP precum instrucliunile de /* in urmitoarea interogareselectdm
conectarc la baza de daie sauHTML precum
notila de copyrighr de pe fiecarepigina a
informatiile desprecelemai noi trei cdrti
site-ului. inctude ("top. hrnl//)
5i le afi5dmpe fiecareinr-o celula de
;
Trebuie doar sdscriem pi4ile refolosibile tabel: */
in fi$iere separatepe care s6 le accesam <p>Un text oarecarej</p>
ahmci cand avem nevoie de ele. Iati clun *
Ssql "SELEC! id-carte, tirlu,
includem trei fitiere in alhrl: include ("va.iabi1e. php.,) ;
p eL fpov clr r, a--o..
p!rnr ;variabilal;
top.html WHEFI carti. icl auro!=autori.id autor
rncrDde ("copyriqht.hrnl,,) ;
oRDER B!.iara 5ESC i,lMrT 0,32;
<body bgcolor=,,#FFFFCc"> 9resursa - mysql queiy (gsql) ;
<h1>tiilul paqi.ii</h1> Observim ci fiqierele care contin cod
PHP febuie se confne tagurile <? Si ?>, f ry s q l _ f e t c h _ a r r a y (Sresursa)
copyright.html aceasta pentu cd parserul iese din modul
)
<p><a href=,,htrp: // Pl{P la incepurulfi5ierului inclus 5i rrecein {
sww. vogelburda. ro,.>&copy vogel Burda mod HTML, reluAndmodul pHp atunci cirno /* deschiden celula rabelllDi
comunications</a></p> lermind de eraluat fi$ierul respectiv.Vari- HTML */
abilele, f,urctiile gi resunele din figierele print .<td atign=,,cenler">,;
variabile.php inclusesunl disponibile in cadrul lcriptulul * Sd punem imagineacopenei.
a.- dupi ce au fost incluse. Dacii setalca
5i
pxidt "un text conginut
Este posibil ca nu pentru toate cdrtile
i. iiqierul L]Rl_fopen_wrappers esteactivaE in php.rnt
variabiLe.php/,; puteli include chiar !i fi$iere aflate pe alte saa! em o imagine-a$acAvom lacedupA
'v.rrab,td - ..si
o /dc.Eb .o o n servere: include("http://wwwchip.ro,). cum urmeaz5:dacdavemimaginepentru
copeftA,o afiqdm. Dacd nu, afigdm un

OHIPSPECIAL SITEDINAMTC
EDITORIAL
,, INTRODUCERE
,, INSTALARE
,, ORGANIZARE
, IU1i,SQL
,, PHP,, @@ ,, ADIYINISTRARE
,, TIPS&TRICK

layer DIV in care scriemsimplu,,Fird Cele mai vAndute,desigur. Afl6m care


imagine". Vom compune intdi adresa sunt cele mai vandute ce4i, consultdnd J i r J l : r 9 . J i ,

imaginii, gtiind ca aceastase afl5 in di- tabelulvdnzSri,cu interogareaurmdtoare.


rectorul coperte, are acela$i nume ca Dacdnu aveli nici un fel de datein tabelul
id cafie ii extensiajpg: x/ vanzdri,interogareava retuma 0 dndud
L i|riria mea
( n i c i o e a n e v d n d u r d5t i n u \ a a p a r e a
$a.iresaImaql.e = "coperte" nimic peprimapaginiin sectiunea,,Cele
. gro'i t 'rd .arre,l .,,. jpq"; mai populare c54i". Introduceli ceteva
date in acesttabel. */
* A d r e s a i m a g i n i i r a'fci o p e n el j p g '
penh'ucarteacu id carte l. DacSfigierul $sqiva.zaii = "sErlc? id ca.re,
exista,il afiqdm.Funcliafile_existsretur- sum{.r_buc) AS bucaiivanduae FROM
nea..iTRUE dacafi5ierulspecificar exis- Va.zaTi G R O U . DB Y i d ca:ie oRDER BY
td qi FALSE dacl nu existd.+/ bucatava4drte DEsc L]MIT 0,3 ";

r: (f ile exists (Sa.i.esarmaqine) ) * NotAexpiicalrvA pri\ ind aceastAin-


terogare:din tabelulr dn-/arine inlereseaTd
print '<imq sr.=
doud coloane: id_cate gi nr_buc (ci4i Comentariile utilizatorilor la aceastd
carte.
"' . $adresaIfraqine. "' toidih="?5" vAndute).Dacd.gmpdm id-urile, putem afla
hei9ha=":00'!><br>' ; numirul de total de bucdti vindute din
l fiecare carte folosind functia MySQL whi le (Sroacarte :
* Daci nu exisla
fisierul \peclficar. sum(nr buc).Id-urilele ordondmapoides- ftysql-fetch array (Sresursacarte) )
a l i S d ml a y e r u lD I V i n c a r es c r i c, , f a r d crcscdtor in funcfie de numdrul total de
imagine": */ bucSf vandutedin fiecare(ORDER BY pr1.t '<td aiign="ce.te!">,
;
bucatiVandute). bucativanduteestedefapt Fadresaimagine = \\copeite/
un alias pentru coloana creatd ad-hoc, ". Sroivanzari l 'id caxre').".)pq"i
prtr'<div style="width:75px; sum(nr buc). it (li1e_e:ists (Sadresalfraqine ) )
height:100px; border | 1px black Definireaunui aliassepoatefacefolo- {
solid; background-co1or:*cccccc,,> sind AS ca in SELECT sum(nr buc) AS pra.t'<img
F;ra inaqi.e</div>, ; bucatiVandute. Am definiraceasrd coloand src="' . SadresaImaqi.e., "
l creati insta.ntca alias deoarecenu am fi ridr4="r5" hei9.t-"10!'><br>,,
/* Sdcontinudmcu afigarearestuluide putut face ordonareadirect ORDER BY l
informafi,titlul,numeleautorului,pre[rl:*/ sum(bucativandute).Puteli rula aceastd
intercgarein linia de comanddpentru a I
!<b><a hief="carre,
print pnp? vedearezultatula9acum il oferdMySQL. pri.t \<div style="widrh:75px;
rd_carte='.9rou[' jdcaxte' ). ! ">, Si continudmcu scriptulPHP: */ heigh!: i 0Opx; border: 1pz bLack
. Srou I rtitlu' l .
/</a></b><b.> de
solid; background co1o.:+cccccc,'>
<i>'.$io{t.nrme auior, t./</i><br> SresursavanzariaysqI query(ssqlvanzari) ; F;ra tragine</div>/ ;
Prer:'.Srcw['!ret'].' iei l
/* Valorile din acest query sunt trei print'<b><a
/* inchidem celula <td> cu care arn id cafie din tabelul vAnziri care cores- h.ef="carle.php?1d carte=, .
inceput structura while. While va afiqa pundcelormaitreivendutecifti$i numdrul Sronvanza:i lrld ca.
toate cele trei ci4; selectatein interoga- total de bucafi vandutedin fiecare.Vom Sforcarfe[ \titru'
] ., < / a></b>.-br> oe
rea SQL 9i pentru fiecare din ele va folosi acesteid-uri pentru a intercga,cu <r>, .9rowcarte[ \nue autor, ] ., </i>
repetapa$iide mai sus.*/ fiecaredin ele,bazade date$i a afla titlul, <br>Pret: t.sroscarte['pret, ]., lei
autorul 9i prelul fiecireia din ele:*/
) while {Srowvarzari =
l
/* Am terminat cu cele mai noi cdrti. frysql fetc! ar.ay (SresDrsavanzarrr r l
Inchidemtabelul,tragemo linie de sepa- 1
rare dupb care vom scrie acelagi cod 9sqlcarte ='SEIECT iirtu,
pentru cele mai populare cdrti, modi- nume autor, plet FROM carti,
ficdnd doar interogareaSQL. +/ autorr IiHERa cart!.:d autor-
.'o. d_o.or l\D d o --..
9rowva.za!i rid carte/ ] ;
I
I re s ursaca !re=mysqL_qJe ry ( Ssqica !te ) ;

include ("Faqe botrom.php"),


<b>Cele nai popuLare carti</b> /x Acum avem toate datele care ne
<rab1e cellpadding='/5"> intereseaza: id carte (din interogarea
$sqlvanzari), titlul, numele autorului Acestaa fost index.php,prima pagind
qi numdrulde bucd{ivdndute. a site-ului nostru. intotdeaunainforma-
/* Care sunt cele mai popularecdrti? Sd lc afi;im: +/ tiile de pe ea vor h la zi. Puteti adeugao
CHIPSPEOIAL SIIE DINA]\IIC
EDITOR|AL,,
|NTR0DUCERE,, pHp,,@,
INSTALARE,,ORGAN|ZARE,
t4ysQl,, ADM|NTSTMRE,,
TtpseTRtcKs

cafie noui in bazade datepentru a yedea AND carti. id_autox=aurori. id autor include ("neniu.php") ;
cd apareimediatapoi5i pe primapagina AND domenii.id don€niu-". gid_dorcnru; $id carte = $_cET['id carte,];
(nu uitali sd mentionali $i data deoarece Sresursa = mysql query{9sq1);
Ssql = "SELECT ritlu, nlme auror,
acestaestecriteriul de ordonare!). ul ila's o,-r'so -- -- a!!o),s esuL\o,,
descrlere, pret FRoM carti, autoxi
{ WHERE id_ca!le='/.Sid_calte.,, AND
Domenii cartr. ad,autor=auio.i . 1d aDror,,;
$resursa = mysql-query (5sq1) ;
A doua pagind pe care o vom scrie este <td a1ign="center">
ceacareseocupdde domenii.Am gi scris Deoareceinterogarea nu retumeaza
deja. in capitolul anterior.un mic scripr Sadresahagine = "coperte" decdtun rAnd,nu vom folosi while pen-
care sd ne afiqeze rapid titlurile cd4ilor .Sros[,id carle't .,,. jp9,,; tm a itera pdn toate elementelearray-
dintr-undomeniuales.Acelagilucru vom if (fiLe erists ($adresahagine) ) ului ci le vom accesadirect.
lace in continuare,ceva mai elaborar.in I
pagina domeniu.php vom afi$a certjle ce print r<img src= s or nysq:- e.-n
apa4indomeniului selectat,pozelecoperte- "' . Sadresalmagine. "' aidtn="75"
1or, numele autorilor qi preJut. in acest heigbt="100"><br>' ; <rd vaLiqn=/'top">
script doar interogareaSQL estemai com- l
plicatd deoarece,,leag6" trci tabele (certi,
domenii.autoril dar resrular trebui sa \d { <td valign-"top">
parddejafloarela urechel Iatiqiunmictip prinl'<div styte="qidrh:75p:;
inainte de a incape. Atunci cdnd dorili sd height: i!Opx; border: 1px black Sadlesalmagine =,,coperre/,,
afi$ali valoarea unei variabile in cadrul solid; backgrolnd-color: +cccccc,,> . $id carre. ".jpq";
codului HTML, in loc sd scriefi: Fera imaqine</div>,; /iDace avem imaqine pentru co-
) per!4, o afi9An, iar daca nu
avem, nu afi$;m nimic:*/
prlnt inuneVariabila; 1f (ti1e_exisrs (Sadresalnaqine) )
I
<b><a h!ei="carle.php? print '<i(g src*
id,ca!te=<?=SroN ['id carte, ] ?>,,> "'.Sad!esahagine.'
putefiapelala mult mai simplul: <?=9row | 'ti !]u' I ?></ a>< /b>.,br> height="100" hspa.e="10"><br>, ;
<i>de <"=9row [ ,nume auror, ] ?></i> l
cod ltTlvll, <?-Snumeva!iab11a?> cod HTML <br>rre!: <?-$rowI rprer. ]?> rer

Sa rrecelnla treabdti sii folosim in <td valign="top,'>


urmdtorul script aceastdnoud facilitate: < h 1 > < ? = s i o wI \ r i r r u , I ? > </ i r 1 >
l 'i de b . S ow.'--ne., or, l
dlrnglu slp--
<P><t><?=9roil ['descriere' ] ?>
rncrude ("conecrare.php") ;
include ("paqe_top.php,, ); <p>Pret: <?=Srou [ .prer' ] ?> Iei</p>
include ("meniu.php") ; include (rrpage_bortom. php/') ;
Sid_doneniu = S _ G E T[ ' i d _ d o n e n i u ,
] ;
isqlNuneDomeniu = "SE],ECT

nume_donenru FRoM donenii WBERE Mai ar ernde llcut o paginain caresA <p><b>op:iniile cititorilor</b></p>
id domeniu=". S!d domeniu; prezentdmdetaliilecdrlii,sdii dimposibili-
$resursaNumeDoneniu = tateautilizatoruluisi adaugecarteain co$, $sqLcomentarii = nSEl,EcT i FROM
mysqL query (SsqlNuneDomeniu) ; sA citeascdpdrerile altora desprecaftea comentarlr I\4IERE :d_carte=,,.Sid carre;
5nlmeDoneniu = nysql-!esu1r respectivdsau si adaugepropria sa opi- $resursaCorentarii =
(giesursaNmDomeniu, 0, ,,nune dorEniu,,) ; nie. ln acestscriprvom face relerireIa nysqr query (ssqlconentarii) ;
doud fiqiere: comentarii.php(care prera
<td valign="top"> un comentariu trimis prin formular, il mysql fetch_array ($ resursaconentali i, ,
<b1>Domeniu : <?=SnuneDomeniu?></h1> prelucreazdgi il introducein bazadedate) {
<o > L a r E 1 1 n d o n e n l ! t
9i cog.php,paginacu ajutorul cdreiavom print'<div style=,,widrh:40opx;
<u><a><?=snlneDomeniu?></i></u> : </b> addugasau scoatec54i din coq $i ii vom border:1px solid +ffffff; back-
<iab1e cellpadding=,,5',> puteavizualizacon1inutul.Dar sd scnem ground color: +F9F1E?,
intai codul pentru carte.php: paddin9:5p:"><a
$sql = "SEi,ECT id_carte/ tittu, hFf="cil or'.S o..'a.r
descraere, prer. nDme_autor FROM carte.php
.$rowt'nune utilizaLor. I ., </a>
ca!L!r autorl, dodenii WHERE <b!>'. 9row ['comentariu, I .,
carti.,d_dona- . ! o o n p .1 . . d done,r.
include ("page_top. php', ) ;

OHIPSPEC]AL SITEDINAMIC
EDTTORTAL
,, TNTRODUCERE
,, TNSTALARE MysQL
,, ORGANTZARE ,, eHe,,@,, ,, rtps&TRlcK
ADI'ITNTSTRARE
"

/* Apoi redirec!iondmutilizatorulcdtre
.;.. paginacd4ii la carc a adeugatun comen-
<div sryle="wid:h:400px; border: 1px tarru:x/
solao +632 415; background
pa.iding:5px,">
L i6rorio*ea = "carte,FhF?id,-caite=".
colcr:+E9F1Dr; Sirapoi
<b>Adau9: ta: </b> 'i.t carte'
opinia $ P a J S T[ ] ;
header ("location: $inapoi") ;
' '' .r P
merhod-"9OST">

Nume: <input type="reat"


n a f re = " n u n e _ ! t i l i z a t o r " > Gogulde cumpereturi
Email: <j.pui lype-"tesl"

naFe-"aclresa email"><br><b.> N u a r r u i l a tc d m e n i r e ap r i n c i p a l a
d
cone.tairu: <br> acesfui site nu este doar de a prezenta
<lextaiea nane='/conentariJ// c64i qi a oferi posibilitateaca utilizatorn
col s=" 4: "></:exrarea><b.><b.> si-Ei impdrtdqeascd impresiile despreea
<input t!pe="liCoe." Codul HTML Si PHP a fost ci pi sd cumperelVom facc o singuri
lame="id carte" Comentariulapare ca text simplu! paginipentruco5uldecurnpa16turi- pagi-
value-"<?=Sid carte:>"> nd cu ajutorul cireia vom putea adeuga,
<certer><inp;l ryFe="sibnit" modificasau'coatecani din cossi aslain
scriptului*/
value="A.ia!qA"></center> mai pulin de 100 de linii de cod. Dar
inaintede c incepenc intrebim.pebuni
i f ( s _ ? o s T[ \ n u m e u t i L i ? a t o r ' ] == ""
dreptate:dacdvizitatorul adaugt o carte
S PosT['adresa_.efrai1'] -- ""
in cog dar apoi doregtesA cumperealti
5 rosl['coeenrari!'] == "")
car1e,undesepAsteazi informaliile des-
i.c1!.ie ( 'page boitom.p.p") ; pre prima carte vandutA?Nu se pierd
prinl "Trebuie sa .ompleiezi
odati ce a ieqit din pagina cos.php?
roate car,Furi 1e l'|i
in paginafiecdreica4i avernun lor- Am puteaoares5le pSstrdmin bazade
m 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 si ii - s i date?Am putea dar pentru astaar trebui
l
p o at ai m p i n o i ri r n p r e . r i lper e c u mr i l i ' t a sdcorelim informalia din bazade datecu
/x Dacd execufia scdphllui a ajuns
imprcsiilor deja addugate.Iati fiqierul utilizatorul 9i ar fi destul de complicat.
pdnd aici (adici a trecut cu succes de
adauga-comentariu.phpcare prelucrca- Amputea sdtimitem infotmaliile de-
cordilia de mai sus) inseamnacd toate
zd inlormalianimi.a prin lormularsi o sprecaneacumparatamai depaneprin
cAmpurileau fbst completate.
introducein baza de date: URL'I $i aqa ar fi prea complicat. Din
A$adar,seconecteazdla bazade date,
fericirc, PHP ne oferd o metodd foafie
prelucreazd infomaiiile transmise din
adauga comentariu.php uqoard qi la indemdni de a pistra
fomular gi le introduceinbazadedate:x/
/x Verifici daci toate campurile tor- infolmaliile, pe tot timpul cat estevjzitat
mularului de comentariiau fost comple- site-ul:sesiunile.
include ("conecraxe. pnp" ) ;
r a t e) i d a c do r i c a r ed i n e l e a f o . t o m i s -
afi5eazd mesajul..Trebuiesi completezi Seslu n I
/* Folosim din motive de securitate
t o a t ec a m p u r i l e i g
" r r n t r e r u pe r e c u t i a
functiastrip lagspenhua eliminataguile
Sesiunilesuntmijloculprin carcputem
HTML qi PHP din toate stringurile tri-
pistra o scricde infomalii in memone.
mise de utilizator.
Astfel, cumpArdtorulnostrupoateadiuga
E bine sd folosim strip tags pentru a
t0ranl mea . . c u r d 1 ai "n p u r u lu r r l i , , a t o r i l o
d re o r i c e
o c a n e i n c o 5 ; i a p o i . a c o n t i n u es E
vizitezesite-u1.Informaliile desprecartea
flm: .
cod potential rAuvoitor.*/
:- sau ci4ile deja adaugatein coq se vor

:.'.- G|* " S.uceFaraTags -

srrip laqs (s PosT[ \nuqe ur:i]:zatcr/ l);


SenaliFaraTags =

sLrip tags (S PosTlradresa email'j );


Scome.taritriaraTaqs =
' D O S
{-" l;;..i,i,i; !",. l_;;r^i,tr c - - o . ' ;
\\dNq r*ioi_s|an0 [Frr:r,i -:tr]]!rq!l cmot
- .rr:6i;nr!;r f $sql = ";ISERT IN?O comenrarii
sendnson.a.he lmter - head{s aiready$nt louFut
(id_carie, nume uirlrzator, naned al . \proerm 6l*\apmhe\hrdos\5 lnP 2) in
@ { Drog.hf es ^l n.[.Inlo.s 5 Dl'p onl&e 1
aclresa_efrai1, conenLariu)
varUES('- $ PoSTI'id ca::e'I.",

Putem preveni multe probleme dace ' ". $comertariuFaraTaqs. "' ) ";
folosim strip_tags pentru a elimina Sesiuneanu poate fi pornitd dupe ce
query{Ssql); am trimis deja un outputcitre browser.
tagurile din inputul utilizatorilor. rysql

CHIP SP]CIAL SITTDI}IAX{IC


ED|TOR|AL
,, INTRoDUCERE
INSTA|-ARE
,, ORGANIZARE
, MysQL pHp,, AD|'IN|STMRE
" " @,, ,, Ttps&TRtcKS

pdsftain memorie gi noi le putem accesa stocdm doud valori: FW


doar atunai cand este nevoie. Sesiunile File Edit VIBW Favoites lools Help
expira dupd 3 ore (pute{i ldsa browserul 1.php + , + _ , a l 0 d
deschis peste noaple Si dimineala qd Back .trrrrir 5top Refresh Home

reincdrcali o pagind care afiqeazdnigte saa,*'l€: r'tlqfir'*rr,"'ti+


pr,p
session_sta!t O ;
variabilede sesiLrne pentrua \ edeacAnu S SESSIONIrtirlD,I - "Dune,,;
sunt acolo) sau dupi ce toate instantele _ - - s 5 . O N|
'" ,.o.'
. - F'"ri e!D-..
brouseruluisunt inchise.intr-o sesiune
datelepotfi salyateintr-o variabild de tip <a href="2.php">pagina a doua</a> s$rsiil
array, numite $-SESSION. inainte de a
Eroare: datele stocate in sesiune nu
folosi aceastdvariabih pentru a stoca sunt disponibile deoarece nu am
informatii trebuie sd apelemfunctia pre- File Edit Vicw Falo te' Took Help reinitializatsesiunea.
definitd session_stado.session start € - . i , 6 t l d d
pome$teo sesiunedacdnu existdnicruna Back irt t.:t 5toF Relresh Home
pltnt $ _ s E s s I o N[ \ a
s a u or e i n i l i a l i z e a cz o
i n t i n upde c e a e r i s - prin! $ sEssloN[ 'altavariabila, ,,.!cr>,,;
].
tentd,dacAaceastaa fost deja pomitd.
Informa{iile din sesiune,spre deose-
bire de cookie-uri,sunt stocatepe server De ce nu vedem valorile gi pe a patra
directorul penbx fiqiere temporare. Pe Reinilializemsesiunea porniti in pagi-
na anterioareSi maiadAugdmdatein ea_ pagina?PenFuca nu am continuatsesi-
unele sistemeWindows, dacddirectorul unea cu session start. intotdeaunatre-
temporar nu este setat cum tebuie, va buie sd reinitializdm sesiuneafolosind
trebui sd deschideJiphp.ini 9i sd serali in pagina 2.php continudm sesiunea session start inainte de a adauga sau
chiar voi directonrl temporarunde sd fie folosind session_startdup6 care mai m a n i p u l a\ a l o r i i n s e s i u n e P
: e lenga
pdstratesesiunile.Pentru a vedea daci stocim o variabild: a c e a s t a .m a i e x i s l i o r e s t r i c l i e ;
configuratiad\s. eslecorecta.creali un session_starttrebuie folosit intotdeauna
nou fiqier sesiune.phpin care scdel: 2 . p h p_ _ inainte de a trimite date citre browser
altfel primim un mesaj de eroare:
session sLarr O ;
sesslon_start{); $ _ S E S S I O NI r a l t a v a l i a b i l a ' ] = *!n text 5 p_l:'p _ _

print "hello qorldl<b!>";


Rulali-l in browser. Daci primi{r un <a href="3.php">pagina a trela</a> session start O ;
mesajde eroare(Waming!), va trebui si
setati in php.ini directorul temporar.
Fib Edt vi* F.vort6 rooE Hap
Modificali linia Aceastareguldesrevalabildchiar gi
penhu tag-ul <html> carenu produceun
sesslon. save_-Path=/ rmp efectr izibil in brouser.exemplulurmd-
tor va da aceeaqieroare:
in
o plp _
parh=c: \lemp\
Afigdm datele stocate in sesiune in
paginile anlerioare.
Poatefi necesarsd repomili serviciul session_start O ;
Apachepentrucamodificdrile s6fie apli- ln pagtnaJ.pup lotostm dln nou
cate. Accesa-tiacum pagina. Dacd este session_start
dupAcareafigdmtoatedatele
goald gi nu a1i primit nici un mesaj de stocatepani acum in aceasti sesiune: line{i minte, intotdeauna rulali
eroare.configurafiadvs. estecorecta. ses\ion_starlinaintede a trimite orice
De ajuns cu ,,limba de lemn", sd ve- 3.php output cdtre browser!
dem sesiunilela lucru. Sesiunilene pot ajuta sd pistrdm m
in pagina l.php inilializdm sesiuneaqr sessron_srart O , memorie informaliile desprecd4ile deja
print I sEssION['tit]u, 1.,,<b!>"; cumpdrate de cdtle un vizitator. Cum
File Edit View Favo tes Tools Help
prrnt S - . s e s s I o N {t a u t a r ' 1 . " < b r > " ; salvdm totuqi mai mult decdt o carte?
pri.t $ SESSIOT,T I ra ltavariabila, ] , ,,<cr>,,; Folosind variabilele de sesiunepentru a
stoca array-uri. Iatd, de exemplu, cum
.d hfqt-"t.p1a,,o.9.r€ e pdtro. e. am puteastocavariabilelecorespunza-
Toate variabilele salvate in aceastd toare fiecirei cd4i, ca un array multidi-
sesiuneau fost afi$ate!Iatd $i 4.php: mensional:

4.php StitrD[1] = "Dune" '


Pomim sesiuneaSiaddugim catevadate $auro!l1l = "Frank Herbert,,;
in ea, nu afigem nimic utilizatorului prant 9_SESSIoN[ 'titln, ] ."<br>" ; Stitlu = "Poezii" '
l2l

CHIPSPECIAL SITEDINAMIC
EDtToRtALTNTRoDUCERE
,, TNSTALARE
,, ORGAN|ZARE
MysQL
, eHe" @,, AD|\I|N|STRARE
, Ttps&TRtcK
" "

Sautort2l = "Mihai Eminescu"; $ stssloNlr!i!1u' I ll = "Dune/'; /* inainte de a incheia loop-ul, vom


$ _ s E s S I o N [ r a u l o ! ' ]{ l - " F x a n k H e r b e r ! " ; adiuga aceasdvaloarela totalul general.
Astfel, prima cafie addugatdin co$ S sEssIoN['pret'j lj = 100000; Variabila $totalceneral va fi inilializatd
este Dune de Frank Herbert iar a doua, S _ s E s s I o N [ ' n rb u c ' ] l l = 1; la prima rulare a loop-ului $i va avea
Poezii de Mihai Eminescu. Iati cum valoareatotalului primei ce4i. La a doua
addugdmincA una: <A href="2.php">pagina a doua</a>

ft tui hw rawB io* Nlb


2.php d c t l d '.d jj

Sautor [] = "aLexandru Mitru";

sessaon_start o ;
\ - a m s p e c i f i c a tn i c i u n n u m A r Dwe r.Js.ib;
franhE.rb.'r iooooo
100000iI 100000
iooooo
$ sEssIoN['titlu'] [] = "Poezii";
loea Mlnlhin.$! 1000110
1 100000
deoarecefolosind [] datelesuntadeugate S sEssIoN{'autor/ I [] = "l4ihai Bainescu"; M;J;;;;;t;; t"p;;;i.; ioooo:o iiooooo
automat la sfhrEitul array-ului qi astfel S sEssIoN['prer'] tl = 100000;
vom avear aloarea..Legendele Olimpu- S _ S E S S I O N I ' n r _ b uI c[ '] - 1 ,
Datele din array, afigate sub forma de
lui" pentm $titlu[3]. tabel.
Operatorul l] pentru adiugarea de
valori intr-un array ne va folosi penhu a rularea loop-ului va aveaaceastavaloare
nu line tot timpul minte ce numtu seafld 3 .p h p plus valoarea totalului celei de-a doua
inlre paranlezelell. Puremsa adAugam ce4i $i ata mai departe pAni c6nd se
valori intr-un aray incepandde la 0, doar sessron start O ; terminca loop-ul. Atunci valoareasa va
folosind[]. nespecificdnd nici un numdr. $ _ S E S S T O N| ' ! i ! 1 u ' I Il = "Manuat de fi suma totaludlor. x/
Iati spre exemplu cum am putea accesa SrotalGeneral = Stotalceneral +
valorile anay-ului specificind valoarea S,SESSION['auror'] [] = "Popescu lon",
indexului numeric: S sEssIoN[\prer'] ll = 50000; l
s_SESSIONI'nr_buc' I [] - 30; prin! '</lable>'
;
7.php plint 'Toaal ceneral: r. Slotalceneral;

$rirlu - 'I\Dune"; /x avem pane acum trei cdr,ti


[]
Stirlu [] = "Poezii"; cumperate,sd qi trecem la afigarealor Sdvedem acum cum am puteafolosl rm
$titl\r [] = "Leqendele olinpului"; folosind for, folosind cate un rdnd de singur figier penbu a addugacd4i in tabel.
prin! Stitlu[0]; // va afiga Dune tabel <tr> penhu fiecare carte: +/ Vomprofita de fapn cA orice cod PHP se
er.eculd pe sener gi abiaapoioutput-ulsiu
p.int slirlu[2]; // va afiga Legendele esretrimiscatrebro\aser.Salacemun fiiier
olinpului test.php in care vom avea un formular al
/x ne ajunge sA $tim cate titlud sunt cdrui action sd fie chiar test.php.inainte de
$i iati cum acceslm toate valorile pentru a obline intai numArul de c64i a afi$a formularul, insi, vom acliuga in
aray-ului, folosind for: cumpercte(numirul de rAnduridin tabel, variabiledesesiunedatelen-imisechiarprin
numdrul de loop-uri din for)*/ folmular. DacAaceastaesteprima accesare
$titlu [] = "Dune", a scriptului,nici un fel de datenu vor fi fost
$titlull - "Poezii"; $nicarti = count($_sEssIoNI'titru'l ) ; trimise,9ivom aecepestecoduldeadAugare
Stitlu [] = "Legendele olinpului"; fo!(Si - 0; 5i < Snrcarti; $i++) in variabile de sesiune.Dacd apoi com-
{ plerdm cdmpurile lormuJamlu gi apasam
for(Si = 0; $i < SnrElementelnAlray; print '<!r>'t butonul ,"Adaugd",scriptul de la inceputul
9i++) print '<ld>', paginiivarecunoa5te cdsuntdaten-imise.le
'-d
{ 5 sFssIoNl'-i- r'.lS l.' i va salvain variabile de sesiune$i apoi le va
plint 9ti!1u[$i]."<b!>'/; prinr '<rd>'. afiSaintr-rn tabel, dupd formular.
) s _ s rs s t o N l \ d r . o ! ' l f s r l . ' . Lo 'j
prin! '<ld>'. test.php
Astfel,pentru$i:0, va fi afi$atdvaloar- S _ s E s s I o N[ ' p r e t ' ] t9il .'</td>';
ea lui $titlu[0], pentru $i : I valoarealui print '<td>'. // Pomim sesiunea
$titluf I I 9i agamai departepdndcdnd cdnd s _ S ' 5 5 1 O \l t _buc'l_S' ./ rd>'; session stalr O ;
seajungela limita reprezentatddenumirul /x calculim gi c6t estetotalul pentru /'F Verificdm daci a fost apdsatbutonul
d€ elementedin array. La fel vom folosi aceastdcarte,pentru Poezii va fi I buc x ,,Adaugd". Dacd a fost apdsatscriptrl va
aray-uri pentru a salva in variabile de 100000lei = 100000lei in timp ce pentru introducedateleir variabilede sesirme,daci
sesiune informatiile despre cdrqile Manualul de geografie va fi 30 buc x nu, va trec€de aceastisecriune,mai depafie.
cumparate.Seiacem intdi un mic exerciliu. 50000lei : 1500000lei+/ Verificarea o folosim folosind fmcfa isset
Sdtrecemprin 3 fiqiere, presupunAndci in careretumeaziTRIJE dacdo variabilda fost
fiecare se cumpdrd cete o carte: $Lota] : 9 s E s s I o N t ! n r _ b u c ' ll $ i l * :fiiiat'zafa. Butonul Adauga €stedefinit in
S s E s s I o N[ ' p r e t ' ] { 5 i 1 , codul HTML ca <input typF"submit"
1.php prin! '<td>' . $toLa]. '</td>' ; name-'butrcnulAdaugi' valur "Adzugd"'
iar variabilatrimisd cdhe scriphrlPHP va fi
session_star! {) ;
$_POST['butonulAclauga']:'Aclaugd'. Sd
CHIPSPECIAL_ SITEDINAMIC
,, TNTRODUCERE
EDTToRTAL ,, M)6QL,, PHP,,@@,,
,, 0RGANIZARE
,, INSTALARE ,, TIPS&TRICKS
ADIYINISTMRE

verifictur! deci, dac6variabilaa fost tdmrsa valoareatotalului primei cd4i. La a doua


Fih edt rarql:6 f@lt Hdp rularea loop-ului va aveaaceastdvaloare
(daci a fost apdsatbuionul)x/ "lifl
J l d plus valoarea totalului celei de-a doua
5top Rdr6h H@e
if (i sset (s_tosr { 'buronurAdauqa' I ) ) cd4i $i ata mai departe pAnd cdnd se
{ termincd loop-ul. Atunci valoareasa va
fi suma totalurilor. */
Tidu F"r"""dt
/* Dacii butonul a fost apdsat,se exe- "1"ryr*1tl"
cuta aceir cod. Dacdnu. scriptulignorl f,i6t"rc"r"-t/*qr* $totaLceneral = Stotalceneral + $totaL;

codul dintre parantezele{} lui if qi trece Pret: hr53oo l

mai depate +/ Nrbuc: F- print '</iable>'


'Tota1
;
'. $lotalcenera';
E#rcl print General:

5 S E S S T O N [ ' r i r L u '[ ,l ] = s r o s T { r t i t r u r ] ;
S sEssioNl'autor'l ll =S Posr['autor']; Cum am putea lolosi acelaqifiEier gt
Ti.lu -{lttor
['nr bu.'] ll =$-rosT{'nr b!c'l;
$ sEssIoN
pentru a modifica sau a tterge cd4i din
Total Generzl:
s_sEssroN['plet'] ll = 5 rosr['Prer' r; listd? Putem include tabelul cu lista
Formularulcu ajutorulcaruiavom sto' caqilor inlr-un formular 5i sd folosim
ca datein variabilede sesiune9i tabe-
* A m a d a u g at lo a t ed a t e l et r i m i s ei n elementede tip <input type="text'> pen-
lul in care afigem variabilele stocate
POST in variabile de sesiunex/ deia in memorie, tru valorile care specificl numlrul de
l buceli pentru fiecare carte in parte. Ne
/x Sd afiqdmacum formulalul a cdrui r- '*@
vom loloside laptulca elemenlele array-
ac(iuneva fi acelaqifiEier:*/ ului $ SESSION['pret']sunt ordonate
crescilur-incepand de Ia0 penru a speci-
<iorm aciion="test,phP" fica in elementeleinput 9i indexul nu-
nerho.l="post"> meric al array-ului carene va fi folositor
pentru a opera modiftcdrile.

<td>Titlr:</Ld>
<td><irp!t type="text" // Pomim sesiunea
naRe="tir1u"></id> session,slart O;

Datele trimise cu aiutoru I formularului * Daci a fostapasalbutonul.-Adaugi"


au fost adaugatein variabilede sesi-
<rd>Aulor: </ td> une iar apoi afigatein tabel. executAmaceslcodpentrua ad5ugacArtiin
<td><inpu]] tyle="lexr" listd,iar dacdnu, acestcod esteignont: */
S O\'\ :l '
name-"auior"></td> '-'' 5 '

for(5i = 0; 5i < Snrcarti; 51++) rf (isset (5 PosT [ \buionulAdauga'] ))

{ {
<td>Pret: </ td> !rint
'<tr>'; s sassroNl'rftlD'l!l - i rosTl'titlu'l;
'autor' ] ;
<td><input iype-"iext" print '<td>' .S sEssIoN['ritIu'l tSij $,sEssIoN[ 'a!tor' ] Il = S-I1lsT[
- _ 5 ' - s . o \ ' r . ro - c ' 1 . ! q ) SI r b r '
name*,,pret,'></rd>
pri.t < t d > ' , $ , s E s s 1 o N[ ' a l r o r ' ] tFil $ s E s s I o N [ ' p r e i ' ][ ] = $ P o s Tl ' p r e i ' l ,

< td>N_r buc: </td> prinr '<td>' .$ sEssroNl'pret'l!$il

<rd><!rPut tlPe="lezt" /* DacAa fost ap5satbutonul ,,Modi-


nane="nr buc"></ td> prini < r . 1 > '. S S E S S l O N { ' n rb l c ' I t S i j fict' executim acestcodpentm a n.rodifica
valori, iar dacd nu, codul urmdtor este
ignora.Dacaa foslapisal.inseamdcd '-
/* calculdm qi cat estetotalul penfu au trimis valorile pentru cempurile
<td><input type="submir" aceastdcarte,pentru Poezii va fi I buc x n r b u c .f o l o s i mi n d e x u nl u m e r i cs p e c i -
name-"bu!onulAdauga" l00000lei: 100000leiin timp cepentru
varue="Adaug;"></td> Manualul de geografie va fi 30 buc x
50000lei : 1500000lei*/

'| ON , b c' I

5 sEssloN t'prer'I ISi] ;


'<td>' . storal - '</td>' ;
Prinr
'</rr>' ;
/* Iar in final afi$dm toate od4ile din print

aceasti sesiune,lblosind ceteun rand de


tabel <tr> pentru fiecare carte: */ l* inainte de a incheia loop-ul, vom
addugaaceastdvaloarela totalul general.
print'<tabie boxder-"1" Variabila $totalceneral va fi inilializati Tabelul afigeaza toate variabilele de
cellspacinq="0" cetlpadding="4!>' ; la prima rulare a loop-ului gi va avea sesiune.

CHIPSPECIAL SI1'EDINAI.'{IC
E

&ED[OR|AL,,|NTRoDUcERE,|NSTALARE,0RGANlZARE"|YysQL,,PHP,,@,ADM|NlSTMR
I-

ficat atunci cAndvom fi creat cdmpurile <rd><b>Tirlu</b></Ld>


<inpu> ale formularului.*/ <td><b>Autor</b></rd>
if (isset (S PosT [ .butonulModifica' ])) <td><b>!!et</b></td> prrnt 'Total ' .
cene.al: $totalceneral;
{ <td><b>Nr br.rc</b></td>
for{Si = 0; $i < <td><b>rf oral</b></rd> Sd recapitulem, folosind pseudocod,
c o u n t( s _ s E s s I o N
[]tltlu,I ); $i++) execuliascriptului nostru.El estein mo-
{ sn!..rr i . o . - t l s S L S S I O N . t ' _1 r , . I - mentul de fald impd4it in cinci pdrfi
S _ s E s s I o NI \ n r _ b u c ' I t S i l = for(Si = 0; $: < 9nrcartl; Si++) distincte:
S - P o s TI ' n r _ b u c ' I l S i l ; { - pomirea/rein ilializareasesiuniil
l - codul pentru adiugareade elemente
] olinL .id>'.s_gsscN'utl .' lsit., b.j in variabilele de sesiune;
p_u - Lc>' ,S lSsICNr' - codul pentru modificarea numdrului
/* Am folosit for pentru a trece prin o ir r Ed r.s_SLS51c.,lfrpFr'. 3_ .,\ rd>,, de cirli;
toate elementelearray-ului $ SESSION - afiSarea formularului pentru
['ff_buc'] deoareceestecel mai simplu: adiugare de ca4i;
toatevalorilese rrimit prin formuiarin- - afigarealistei de cErJiqi a formularu-
diferentdacAsuntmodihcatesaunu. Noi lui pentru modificare.
le actualizdmpetoate,cu valorile modih- La prima rulare a scriptului, codul va
cate saunu.*/ fi executatastfel:
* Sa afiSdmacum formularula cdrui - se pome$tesesiunea;
ac{iuneva fi acelagifiqier:*/ - setrecepestecoduldeadiugaredeoarece
nu a fbst apdsatbutonul Adaugd.(nu existA
variabila $_POST['butonulAdauga']);
<forn actior="test.php" nethod=,,post,,> - s€ t€ce $i p€ste codul de modificare
Folosind formulare putem modifica deoarece nu afostapisatbutomrlModifici (nu
valorile stocate deja in sesiune.
existnvariabila$-POST['butomrlModifi ca']);
<td>Tit1u: </id> prinl'<td><input tlpe-'.text,, - se afigeazdformularul;
<rd><input tyPe=,,texiL,, name="nr buc tr.5i.'l /' - se ahqeazdlista de cirfi;
nahe-"titlu"></td></tr> value="',$_sEsslo:,J['nr buc'] lsil . "'> DacA utilizatorul a completat formu-
larul pentru addugare,scriptul esterulat
<td>Au!or: </rd> astfel:
<td><inplt l!.pe="text" /* calculamgi cat estetotalulpentru - se reinitializeazi sesiunea;
nane="autor/'></td></!r> aceastA
carte,pentrxPoeziiva fi 1 bucx - seexecuti codul de adAugare(existd
100000lei = 100000lei intimpcepentru variabila $ POST['butonulAdauga']);
<td>Pret:</td> Manualulde geografieva h 30 buc x - se trece peste codul de modificare
<td><rnput tyPe=,,text,, 50000lei : 1500000 lei*/ deoarecenu a fost apisatbutonul,,Modi
nane="p.er'/></td></rr> fici" (nu a fost transmisd variabila
= 9_sEssIoN [ ,nr_buc, I iSi]
Srotal " $_POST['butonulModifi ca'] deoarece
<tcDNr buc:</td> $ SESSIoNI'pret' I l$il ; estein alt formular!);
<td><input tt'pe='/lext" prin!'<td>,.Srota1,,</ld>,. - se afigeazdformularul;
nafre-"nr buc"></td></tr> print '< /tr>'
; - se afigeazdlista de cdrli, incluslv
ultima caxetocmai a fost introdusd.Pen-
/* inainte de a incheia loop-ul, vom tru cempul pret avem un elementde tip
<td><input type="subnit,, adluga aceastdvaloarelatotalul general. input care specifici indexul numeric al
!ame="butonulAdauga" Variabila $totalceneral va fi initializat6 array-ului, astlel;
value="AdauSe"></td></ti> la prima rulare a loop-ului gi va avea - ncnrn' nrimo .rfp

valoareatotalului primei cafti. La a doua


rulare a loop-ului va aveaaceastevaloare i-p-L Lwe 'r6xr' -a-e."rr bucl0'
plus valoarea totalului celei de-a doua
cdrJi qi aga mai departe pdni c6nd se
/* Iar in final afi$amtoate c54ile din termini loop-ul. Atunci valoareasava fi - pentru a doua carte:
aceastdsesiune intr-un tabel, folosind suma totalurilor. */
cateun rand de tabel <tr> pentru fiecare .inoJL -1,?e."1e"." nome'nr ou.. l'
carte'. 1/ StotalGeneraL -

l
'<table>.;
tr a trera caxte:
<form action=?'les ! , php" method="post,'> prinl ' :apul ryDe nr bL.l2l
<tab1e border="1n cellspacing-,/0"
ceilPaddinq='/4 ">
na$e="buronulModif ica"
Indexul numeric dinhe patantezele
value="Modificd">
lui nr buc[] esteacela5icu cel din vari-
. SITEDINAMIC
CHIPSPECIAI,
EDITORIAL
,, INTRODUCERE
, INSTALARE
, ORGANIZARE
, IV]YSQL
,, PHP,,@,, ADMINISTMRE
,, TIPS&TRICKS

abiladesesiune $_SESSION[,mbuc,][] La cumpirituri 5 S E S S I O N i ' ! t i t t u 'l [ l = $ , p o s T t , r i r l u ' l;


gi astfelva fi util pentru a actualizavalo-
$ s E s S I o Nl ' n u m e a u i o r , I l l
le stocatein sesiune. Penhx co$ulnostrude cumpirdturi vom - S P O S T[ ' n ! m e a u t o r , ] ;
Sd presupunemcd utilizatorul modi- folosi aproape acelagi cod, cu srngura )
fi cinumirul debucdtipentruprimacarte, diferenlS cd formulaml pentru addugarea /* Dacd este setatd variabila
$i in loc sd cumpere10, cumpfuddoar 7. ce4ii in listd seva afla in paginade carte. $ GET['actiune'] $i valoareaacesteia
Atunci cand apasdbutonul ,,Modifici',, Deschidericane.php5i adaugatiurmi- este,,modifica", se executAacestcod: */
execufiascriptului va fi; torul formular, intre informaliile despre
- se reinilializeazi sesiunea; carle gi opiniile utilizatorilor: if (lsser (5 cEr [ ]actiune't
- se trece peste codul de adiugare (nu ) &!
S cEr | 'acii!ne, I == ..nodlfica,,l
exrstivariabila$-POSTI'butonulAdauga,l); <form action=
- seexecuti codulpentrumodificare.Din {
" c o s . p h p ?a c t i u n e = a d a u g a , ,
I ,i.t carre' I I ;
for (Si=O;Si<counr($_SEssroN
lbrmular ne-au fost fansmise valorile pen- method="POST,,>
$i++)
trutrcicd4i,$ POSTI'nr_buc'][0]:7(modi- <INPUT type=/'hldden,,
ficatin formuiarr. $ _POSTInr bucl[t]-5 nane=" id_carte,,
s _ s E s s l o N[ ' n r _ b u c , ] t g i l =
qi $ POST['nr-buc'][2]=34. value="<?=5 id_carte?>,,> s rosr [ 'noulNrBD..lISi] ;
Trecemprin fiecareelemental anay-ului <INPUT type="hidden,,
l
folosind for qi actualizdm toate valorile, name="lit1u7' vatue=/, ]
modificatesaunu (estemai ugora5adecdtsd <?=Srowcarre [ \tirtu, ] ?>.,>
verificdm care au fost modificate qi sd Ie <INPUT type=,.hidden,, <ld valign="top',>
ach|alzim doar pe acelea).Atunci: autor,, vatue: <h1>Coqul de cunperEturi</h1>
"< ?:9 rowca rte [ , nume_autor, ]?>/> <FORM a ction=" cos . php?actiune+odi fica
5 sEssIoN[ 'nr-buc' ] Iol-S roSTt \nr_b!c,l tol; <INPUT type="hidden,,
merhod=,,PosT,,>
// 7, se modific; nane="pret" value= <tab1e border="1" celrspacinq="0"
S S E s s J o N [ ' nL! i i c ' ] f l j = S - r c s r t h ! b u c ,] t 1 t ; "<?=Srowcarte I rpret, l ?>,,> cel lpadding="4 ">
// 5, ^D se frodific; dar esre actu <INPUT type="submit,, <tr bgcolor="#F9tlE7,,>
value="Cunp6r; acumt,,> <rd><rr>Nr. buc<//b></rd>
t rr
S sEsSIoa{' buc' l t2 I =$_posTt rnr-buc, I I2l ;
<rd><b>carre</b></td>
// 34, ^n se modiflca dar esre acru- Acest formular va arita un singur bu- <rd><b>Fret</b></td>
ton pe pagind, ,,Cumpird acum',, dar <rd><b>Tota1</b></rd>
trimiresi inlormariilecareneintereseaza,
- se afi5eazdformularulde addugarc: din cdmpurileascunse(hidden)
prin me-
- se afigeazi lista de ci4i cu modi- l o d a P O S I . P e l a n g i a c e . t e ar a m a i for(9i = 0; Si <
ficirile efectuate. trimite $i o variabild de tip cET, counr (9_sEssioNI ,:id carre,I ) ; Si__,
$ GET['actiune'] : "adauga"(din URL- {
Cel mai indicatar fi sAscrieti chiar\ oi ul action:"cos.php?actiune-adauga',). o i . ' r d . o ' F e 6 y .
scriplulpenlrulesr.php. sa il rulali.sd ra Vom folosi aceastAvadabild pentru a n a m e = " n o u l N r B u cI \ . 5 i - ' ) ' size=,Ir
uitati in sursa documentului HTML delimitacoduldeaddugarea informaJiilor value="'.$ sEssroN[ 1nr-buc, ] I$i1 ., 2>
(View Source)din cAndincdnd(mai ales in variabile de sesiune.Similar, in for-
la formularul de modificare!). mulanrl de modilicare a cirlitor din listd < t d > < b > ' . s _ s E s s r o N [ \ r i t l u , ] [ s i ] _/ < / D
vom avea action:"cos.php?actiune= de ' .s-sEssroi [ \nlre,artor, I t$i].,</id>
modifica". Iati codul penhu cos.php: <rd align*"!:ght,,>/

.9 sEssloN[ \pier, ] lSil ., tei</!a>


isq€lp - <td align=,,righr,,>,
'Li7rdia . ($ sEssIoNt'pret,I tSit *

mta sesslon starr O ;


I sEssIoNl,nr buc,I tsil) .
include ("conectare,php,,) ;
include {"page-top, php,, ) ;
lnclude ("meniu.php,,) ; irotalGe.eral = Sroralceneral +
gactiune = S GErt'acriune,l;
(F sESsJoNl'pret'l l$il *

$_sEssIONI rnr_buc, I lgil );


/* Dacd este setatd variabila ]
$_GETI'actiune'] $i valoarea acestela
este "adauga", se executi acestcod: */ // $i totalul general:
i f ( i s s e r( S G E ? [ l a c r i u . e / ] ) & & prrna'<tx><td aIign=,,riqht,,
5 G E r[ ! a c t i u n e / ] = = " a d a u q a " ) colspan="3!'><b>Totat in co9</b></
I rd<rd a1i9!-"right"*>'.$totatceneral.
S sEssIo![ rid c]te/ I tl=$-Rl-ert'id crte.l; '</b> lei</td</tr>' ;
Butonul pe care vor apdsa utilizatorii S sESsIoNl,nr-buc'ltl = 1;
atunci cand doresc se cumDere. ; s E s S I o N rI p r e t ' ] t l = S p o s r t ' p r e t ' l ;

CHIPSPECIAL SITEDINAMIC
EDITORIAL
,, INTRODUCERE
,, INSTAIARE
,, ORGANIZARE
, IUIISQL
,, ETIE,, @,, ADIYINISTMRE
,, TIPS&TRI

for(5i - 0; 5i <
c o u n t ( S s E s s I o N [ . i d _ c a r t e ,] ) ; $i++)
I
1f (9 sEssloNI'ni_buc'ltS!l1= 0)
/* doar dac; nundruL de buc;li nu e
0, afiseazA randul*/
{

<td><input type-"rext"
.ame="nouINrEuc I r. $i.' I"

value=",.$ sEsSIoN['nr buc, ] Igil .,,,>


Cogulde cumparituri.
< t d > < b > ' . SS E s s I o Nr tt i r l u ' I [ $ i ] . /

I . 9 _ s E S s I c NI r n ' r e - a u t o r . ] | S i l . ,
Informatiileafigatein pagina cogului
de cumpereturi sunt consistente cu
cele afigatein meniu
<td alig.-"right">
'.$ sEssIoNI'pret'l
ISi].' Iei</rd>
<id a1i9n="righ:">,
. ( S - s E s s I o N[ ' ! r e t ' ] [ S 1 ] *
5 s E s s I o NI r n r _ b u c ' ] [ S i ] ) . 'o o :s o L-j F"dd..q:4p\; bo cJ.
' Lei</td></tr>' ; solid *632415 1px">
$roralceneraL = $tolalceneral + <b>co9</b><b!>
( $ _ 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 ) ;
Cedile ,,Sterse"din cogul de cumperd.
turi sunt incd afigate, chiar dace tota- ] Stotalvaloare - 0;
I = 0;
lul este 0. for(5! Si <
count (9 sEssloN['tit1u']); $i++)
<1nput lype="subnit" Acum clrlile cu 0 ca numar de bucAti {
va1!e*"Modi f icd"><br><b!> nu vor mai fi afi$ate.
Introduceli <b>0</b> pent!! c5rlile Spuneam1ainceputul acesn-riSpecial S s E s s l o N[ ' n r b u c ' l t $ i ] ;
ce dolif: se le scoateli din coSL cd vom pune pe toatepaginile site-uluro Stotalvaloare = Stotalvaloare +
<h1>Continua.€</h1> casetdcarese confindvaloareainsumatd (S sEssloNi !.r buc'I I$il *

a cdrlilor din co5. pentru o mar bund $_sEssroNl'pret' I I$il ) ;


<tr><ld width="20!" aLign="center"> odentarea utilizatorului. Aceasti casetd l
<ang src="cos. gif"> o vom pune in meniul din stenga.
De:.chideti meniu.phpSi adaugaliurmA- Aveti <b><?=9nrCarti?></b> car!i in
cumpareturile</a></td> torul cod inainte de </td>:
<rd ridrn="200" align=,,cenrer,,> <b><?=Sto!atvaloare?></b> Iei.
<ing src="casa. g:f">
<a href="casa,php">Mergi ra cas;</a> a vedea .onlinutul cogului l</a>
J l ) ' t )

Li|rdrid mta Acun numdrul de c6r1i din cog va fi


disponibilpe fiecarepagtni undearem 5i
meniul. Trebuiesi adduga{isessionstart
la inceputul fiecirei pagini pe care apare
meniul deoarece lucdm cu variabile de
\ar igariprin paginilelibririei r irruale. sesiune5i nu puteminilializasesiunea in
adiugali ctuti in cog,modificali numarul de rneniu deoarecepdni ah.mcisevor fi trans-
c54i pentru a vedeacum funcfloneazd.Mai FI mis deja date cAtre browser. Deschideti
avemo problemdderezolvat: cum scoatem index.php. domeniu.php 5i caae.phpSi in
cani din co5? Purempune num6rulde fiecare adAugatila inceput s€ssion start:
bucili ca 0 pentru carteape care nu donm
sAo cumpfudminsd caxteatot aparein 1ist6.
Putemcondiliona afigareacdr,tilordin loop- session-start O;
ul for: fiecare rand este afigat doar dacd Numdrul Si valoarea cdrtilor din co9 include {"conectare. php") ;
numirul de buc61inu este0. in consecintd sunt afigate tot timpul deoarece incrude ("paqe rop.php") ;
vom modificaloop-ulpentrua specihcaqi pestrem aceste informalii in variabile
condiliade afiqare: de sesiune,

CNIPSPECIAI_ SITEDINAMIC
EDITORIAL
, INTRODUCERE
,, INSTAI-ARE
ORGANIZARE
" , I.4YSQL
,, *' , @,, ADI4INISTMRE
, TIPS&TRICKS

La casd
data tranzaclieii
- va lua id_tranzactiecorespunzatof
Mai avem de Ihcut un singur lucru:
plata.Pentruacea\ta\om laceo pagind acesteiiffegistrdri;
<h1>Deial i i</h 1> - va folosi acestid tranzactiepentru
unde utilizatorul completeaziun formu_ a
Iar cu numelepi adresaundedoreStcsA introduce in tabelul vdnzdri ce4ile co_
Numele gi adresaundedorili sdprimiti mandate;
f'nmeascacomanda5i apoi alrd pagind cA4ile cumpArate: - vi va t mite un email de notificare;
care verificd dacd toate c6.mpurilefor_
- ,,curd(d" sesiunea,
mularului au fost completate,introduce <fcrm
$tergend toate
acrion-,'prelucrare _p h p , ,
informaliile in baza de date,trimite ad- d a t e l es a l r a t ei n e a d e o a r e cneu m a i e
met.od=,,POST,,>
mlnlstratoruluiun email 9i afigeazi utili_ nevotede ele gi ar puteainduceconfuzie
zatomlui un mesaj de multumire. Sd in utilizator;
- afi$eazi utilizatorului pagina,
facem intdi fonnularul: cu un
<id><b>Numete I < /b>< / i.t>
mesaj de multumire.
<td><i!put rype=/,rexr,,
!a!e hp inaintede a trece1ascriereacodului,
nane='.ume,,></td>
trebuie sd clarificdm un lucru: functia
sessaon srart {) ;
m a i l . P e s i s l e m e l el i n u x a c e a s t a
inclu.le (..conectare,
tbloseste sendmail sau qmail pentnr a
phF,, ) ;
<ld valign=/,aop,,><b>Adresa : </b></td>
i!c1!de ("page aop. php,,),
fflmlte mesaje,pe sistemeleWinoows
<rd><rextarea naDe=,,adiesa,,
:ncrude (..neni:.php,,)
foloseqte SMTP. Dacd sunteti pe o
; rous-,,6"></reTrarea></:d>
maqind Windows 2000 sau Xp puteti
porni serviciul SMTP pentru a trimite
<id va1ig.="Io!,,>
<h1>casa</.1>
emailuri dar dacdaveli Windows 9g, 95
Acestea
sau NT va rrebuj s6 modificafi setddle
sunt carliLe comandate de <td><INPUT .l'pe=,,subni.,, din php.ini (din directorulWindows)9i
va1!e="Trinite 1,,></ad>
<tab1e
sd lblositi SMTP-ul ISp-ului pentru a
border=,,1" cellspacing*,,0,,
trimite emailuri(celpe careil folosili
cellpa.ldi.q=,,4..> 9i
<tr
in clientul de mail). Singurul inconve_
bgcolor=,,+f9F1E?r>
<td><b>Nr.
n i e n tp e n r r ut r i m i t e r e da e e r n a r l u rpi r i n
buc</b></rd>
<rd><b>Ca!ae</b></td>
SMTP-ul ISP-uluiestecd trebuiesd fiti
<,:d><b>!ret</b></td>
conectala i l n r e r n ea r .l r f e lr e l i p r i m i u n
inclu.le ("paqe bottom.pip,,)
<rd><b>TotaI</b></td>
; mesaj de eroare.latd cum arati setarea
SMTP in php.ini la mine:
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, prelucrare.php, va executa tmail funcrio.l
for(sr = 0; Si < urmitoarele acfiuni: ; For Win32 only,
cou:!(;-sESsioN[,id,carre, ]); si++) - va verifica dacdnunele estecompletat;
SMT! - nai1. isp, ro
{ - va verifica dacdadresaestecompletati;
i f ( S - s E s s i c N[ , r r - b u c , I i S i ] t= O) - va verifica numdtul cd(ilor din
coq Dacd sunte{i pe o magind Windows
{ a s t f e il n c a tu r i l i z a r o mslan u t r i m i r al o r _
prrn.
2000 sau XP puteli seta SMTp = local-
<tr><rc>/.
host,darserviciul de SMTp trebuiesdfie
$ sEssIoN [ ,nr buc,]{sit _,</rd>
'd b,,a.5f.s pomiti facerimodificarea in php.ini apoi
o\ . 1., c .,
< / b > d e , . 9 s E s s r o N [ , n m ae r r o r , j r s i ] . ,
facefi un fiqier de test,numit mail.php:

<td aliqn=,,right,,>,
mair.php
. i s E s sr o N[ , p r e r , ] I S i I . , r e i < / r o >
m a i l ( " o a n a . 6 c n i p .r o , , , , , t e s r mesaj
<id atiqn-,,righr">,
smtp", " resti.g,,)
. ( s _ s E s s r o s l, '' p r e r , I I $ i l + ;

5 S E S S T O \ [ ' . br u c , ] I s i l ) . . i e i

F!otalcener6t = StotalGeaerat +
( F S E S S r O l i t . p r e t , :I $ i l * inlocuili adresameade email cu advs.
(dvs. trebuiesdprimiti emailul, nu eu) qi
S sEssroN i tnr_bic'I tsrl);
rula{i scriptulin browser.Dacenu sunteli
l
conectati la Intemet, adresa servemlui
l
// Si totalul general: SMTP este greqitd sau serviciul SMTp
La case: numele gi adresa unde utili-
zatorul va primi certile comandate. nu estepomit la adresarespectivd,veli
<t.l align="riqhr,, colspa.=-3,>
primi un mesajde eroare.alrfelvegiprimi
<b>Tota1
mularul llrd :, fi cumpdrat\ reo cane; rnesajulla adresadvs. de email.
de ptau</b></rd>
- se va conectala baza de date;
<rd a1ig.=,,.ighr,,> Desigur, nu estefoarte convenabilsd
- ra inrroduceo noud inregistrare
<b>,.Sroia1ceneraL..</b> tei</rd>
in trebuiasci se fiIi conectali la Internet de
tabelullran/actii cu numele.adre:a cAte ori dorili sA trimiteti un emai pnn
5i

CHIP SPECIAL SITEDINAI,IIC


EDITOR|AL
,, |NTRODUCERF
, |NSTALARE ,, tvtysQl,, pHp , @
, ORGAN|ZARE ADIVINISTMRE
,, Ttps&TRtc
"

intermediul PHP. sn.calr i-array_sum (S-sEssIoN [ 'nr buc. ]);


Din fericire, avem o soluJie simpli if (Snrcaxii == 0)

pentru aceasti problem6: putem pune /x schimbaliadresacu cea1acaredorili


operatoml@ in falafuncJieimail qi astfel prFt 'Trebuie sa crmpeiali cel <6 nrimiti meqr iele */

impicim qi capra qi varza: dacd poatc pltrn o carte I <a


trimite mail il trimite, dacdnu, nu retur- href -"cos.phF">I.aFoi</a>' ; Ssublect = "o noud comandSl";
neazdnici un mesajde eroare(darn ici nu
va trimite emailul). l /* Pentrua compunemesajul ne vom
folosi de operatorul.: de concatenarea
mail.php /* in acest moment toate datele sunt
verificate, putem sdne conectdmla bvza
lSmail ("oana13chip. ro", "test mesaj de date pentru a Ie introduce: */ snesaj = "o noue conaidi de 1a
smtp", "te st ing" ) ; <b>". S losT ['nune'] ."</b><bL>";
smesaj -= "Adresa:

".s :osT I radresa' ]. "<b!>";


/* Introducem intai datele in tabelul Smesaj .= "carrire
A s l l e lp u t e ml u c r aq i t e s t ai n c o n t i n u - tmnzactii.DeoarececAmpuldatadintabel co*a.date : <br><br>",'
are aplicaJiaoffline, iar dacd la un mo- estede tip TIMESTAMP, il putemomite 9nesar .= "<iab1e border='1'
ment da1 dodm sd o transferim pe un (se va setasingur, cu data curentl) */
s e r v ecr a r ep o a l eI r i m i r ee m a i l n. u v a m a i ic. {:i=!; $i<counr {S sEssIoN['id,cade'] );
trebuisd facemnici un fel de modificiri. sr_-)
Cu acestealdmurite, sA scriem codul
pentru figierul prelucrare.php aoresa,cunpararorr r:r-i_:Es31c\i r.:_bJc'
I {$il > 0)
values ( "'. S PosT['.ume'].
prelucrare.pnp sr::e_ .= "<a:><id>"
- . a_siss:a\ trillu,
SresursaTranzactie l I I$il ." de
// Verificdm daci numele este com- ".: S.S;IC\ [ r.urtre_autor' ] [$i] .
p l e t a t .i a r d a c An u e . o p r i r n e r e c u l i a "<,r:i><--$". S sEssIoN['nr_buc'] [$il .
scriptului /* Ob(inem id_ul acesteiinregistriri '' b.c</'-d></Lr>";

i f ( S P o s T 1 ' n u m e ' l= = ") folosind mysql insert id: */ s:.:alGenera] = StotaLcenelal +

I (s sEssIoN{'!r buc'I ISi] *

prina 'TrebDie sa completali aunerel S sEssIoN['pret'] ISil );


<a hrei-"cos.php">inapoi</a>' ;
/* iar acum ludm fiecare carte din
) sesiune5i o introducem in tabelul van- sresaj .='\</table>";
ziri. Introducem in tabel doar cinile al Snesaj -* "rotal:
/* Verificim daciadresaestecomple- cdror numdr de bucati estemai mare ca <b>". StotalGeneral. "</b>";
tati iar dacenu e, opdm execu,tiasc ptu- 0 (in condi{ia if, din cadrul structunr
lui */ for): */ /* Puneniheadereadilionalepentru a
tdmite mesajul in format HTML gi en-
if (s rosT['adresa.l == "") f o r ( S i = o ; $ i < c o u n l ( $ _ S E S S I o\Ni .[i . a r . e ' ] l ; codingul potrivit pentru caracterele
I Si++)
prinr 'Trebnie sa conpretati adresar
<a href="cos.php">i.apoi</a>' ; i f ( S s E S s I o N [ ' n rb u . ' ] t S i l > 3 l Sheadels = "MIME-version:

I 1.0\r\nco!tent-rype: te:t/hlml;
/* cieam interogarea */ charser:=iso 8859 2\r\n";
$sqlvanzare = "INSERT INTO vanzarr
/* Reinitializdmsesiuneadeoarece varues ( "' . Sid tranzacrie . "' . "' /* Acum putem trimite emailul: */
dorim sd verificdm numirul de cdrli co- 9 sEssIoNl'id carLe' ) Isi) ." ,"
mandatex/ S s E s s I o N [ ' n r _ b u c '] : 5 i ) . " ' ) " ; mail (gemailDestinatar, Ssubiect,
/* si o rut;m */ Smesaj, $headers) ;
sesston srarr O ;
l /x Curilim sesiuneadeoarecenu mat
/x numdrul de cirti conandate il afldm l avem nevoie de dateledin ea.*/
rapid,folosindarray_sum.aray sum($anay) /* Urmeazd sA tdmitem un email de
retumeazdsumavalorilor dintr-unarraydaci notificare folosind funclia mail. mail sessron_unser () ;
acesteasrnt numerice. Astfel, daci Sa : folose$te in p ncipal trei argumente:
and'1','1','2'), array sum($a)= 4. Nu mail(adresadestinatarului,subiectulme- /* elimindm toatevariabileleasociate
conirndali array_sumcu count,colm($a) : sajului, textul mesajului) dar mai poate acesteisesiuni */
3 elementein timp ce anay sum($a) = 4 prelua incd unul, pentru headere
(sumaelementelor).+/ adilionale. +/ session desrroy O ;

CHIP SPECIAL SIIE DINAMIC


EDITORIAL
,, INTRODUCERE
INSTALARE
, ORGANIZARE
MysQL, PHP,,
" " @,, ADIIINISTMRE
,, TIPS&TRICKS

Cdutare /+ Altfel, afigim rdndurile rezultate*/

Mai averno singuri pagind de fdcut: shile (Srow= nysqt ferch_afay (gresursa) )
cea de cdutare.Vom ldsa posibilitatea
{
utilizatorului si cautein bazanoastrdde prrnt ,<a href=,,aulor. php?
dateri sa ii afi5ezerezultatele pe o pagi_ rd-auto!='.srowl,id
nd. Sd deschidemint6.imeniu.php unde .5row J'nume aDtor, I . ,</a><br>/ .
se afld formularul pentru ciutare.
)
Observati cd are metoda GET (<form
action:"cautaxe.php"method-,'GET'>). </blockquore>
De ce?Pentruciatunci vomputeaadiuga <b>Titluri</b>
in lista Favorites a browserului rezul- <blockquore>
tatele unei cdutdri. Cu metoda pOST,
adresapaginiidc cauraredupaapasarea
Ssql="SElECT id_carte, tirtu FROl,t caftl
butonului "Cauti" ar fi http://localhost/ W H E R Et i r l u IIKE':,,.gcuvant,"g,-,
cautare.phpdar cu GET ea va fr httpl/ Sresursa = nysql qlery(Ssqt);
localhost/cautare.php?cuvant:poezll. i f ( m y s q t
nDfr xows(Sresursa) == o)
AcesrU RL ii pulemapoi trimirealrcuiva
pentru a vedeadirect rezultatelecdutdrii o -- ,
.L N
sauil putemaddugala Iisradc Fa\orite\
l
pentru mai tarziu. while (9 !ou=hysqr-ferch-a rray ( Sresu ! sa ) )
inainte de a scrie codul, sI ne aducem
{
amlnte care era comanda SeL pentru prrnt .<a href-,,carte.php?id_carre=,
selectareapa4iale a unui cuvdnt.Folose_ 'Froul'id carte' 1., ">, -$rowl'ritLu,1.,
am wildcard-ul %, astfel: SELECT *
FROM table WHERE coloana LIKE
)
"yocwattyo". Aceeagicomandi SeL o
vom folosi 9i in continuarepentrua inter_ </blocLquote>
oga tabelelecarti qi autori dupd cuvdntul <b>Descrieri</b>
sau cuvintele scrisede utilizator:

$sq] = "SEIECT id carte, tittu,


/* Stergemsesiunea*/ session_starr O ; descrrere FROM carti !iHERE
- ; I n l- | n a, ta -t ,t $ a mu l,l _j r. z a t o r u l u i p a g i n a
+
rnclude (.,conecrare. php,, ) ; .:",
descriere LrKE Scuvant. -t, "
cu mesa;ulde mullumire: +/ include (,.paqe rop,pi1p,,) ;
Sresursa = mysqr-query (Ssqr) ;
rnclude ("meniu.php,,) ; if(hysql num ross(Sresursa) == o)
rncrude (i'lpage,top. php,, ) ; Scuvant = S GEr[,cuvanr'l;
I
r.clude ("meniu.php,,) ; prlnt "<i>Nici un rezuLrar</i>,,;
<td valign="top,,>

<:d raliqn=,,top,,> <h1>Rezultatete cdut;rii</n1> 'hi1e { Srow=nysq1-fetch-affay ( g resursa ) )


<:- >l,jrltjfrin <p>Te:t!L c;utar; <b><?=Scuvant?>
l</h1> {
.:.:::rin c; ali cunpdrar de ta
:.:: ,=:: -orimi conanda solicirat; href -"carte.php?id_carte=,
:: ::: ::: sc:ri rinp. .5roBI'id-carre.l.,">,.srowt'rirlu.l _
' </a>z:Lr> , .
9Io, t ldescriere/t ..<br><br>, .
/x Interogdmint6i tabelul autori:*/ l
inclu.ie ("!a:. a.:tofr .php,,) ,

Ssql = "SELECT id_alror, nume autor


rPoF a ori lnlLoe ._F d-.o. .l(,
'3" $cuvant. "'' "' uc tude ("paqe bortom.php,,);
9resursa = nysql-query (Ssq1) ;

i* Dacainterogarea
nu a retumatnicr Observagici am ficut referire la un
un rezultat (0 rdnduri) scriem .,Nici un fi$ier inexistent,autori.php.Aceasta va
rcatltat" * / fi tema voastrd.Un click pe numele lui
Mihai Eminescuin pagina de cdutarene
if (nysq1 nun_rows (gresursa) -= o)
va duce la pagina http;//localhost/
La fiecarenoue comandd,putem primi -<i>Nici
autor.php?id autoFl.
prrnt un rezult-at</i>,,;
email de notificare Folosili $-GET['id-autor,] pentru a
)
i n t e r o glaa b c l ucl a n i5 i a o b r i n eo l i s t ac u

CHIPSPECIALSTIEDINAMIC
EDTTORIAL
,, TNTR0DUCERE
,, TNSTALARE , MysQL,, pHp ,,@,,
,, 0RGANIZARE ADtytNtsTRARE
,, Ttps&TRlcK

descrlere FROMcarti W H E R Ed e s c r i e r e
session srart o ; I,IKE !'.", $cuvant, /'t
"';
include ("conecaare.php") ; Sresuxsa = frysql_query(Ssql) ;
include ("page_top. php") ; if (frysqL num roqs ($resursa) == 0)

include ("menlu.php") ;
Scuvanr = 5 CETI'cuvant'l; prinr "<i>Nici ur rezulr:at</i>z;

)
<td valiqn-"lop">
<h1>Rezultatele cdutArii</n1> mysql fetch array ($resursa) )
<p>Textul ceutat: <b><?-scuvanr?> {
$descricre = srr xeplace
($cuvant, "<b>Scuvant</b>",

srowl'descriere'l);

' o 1
. Sroi l 'id_ca!re' I ."'>'
FROM aulori ITHERE nume autot II(E .5row['Itirlu' ].'</a><br>
' . $desc!iexe. '<br><br>'
Rezultateleceuterii pe site ;
Fresulsa = mysql query (SsqL) , l
cd4ile scrisede autorul respectiv.Luati if{mysql nlm_rows ($resursa) == 0)
pagina domeniu.phpca exemplu. {
Sd revenim la cdutareanoastre.Cum prinr "<i>Nici un rezulta!</i>/';
am putea ahqa rezultatele astfel incat l
cuvantul sau textul cdutat se fie
evidenliate,la fel ca in Google? Putem nysql fer:ch_array (Sresursa) )
folosi func1iastr_replacepentru a inlo- I
cur o parte dintr-un string. FuncJia se Snume auror = str_replace
folose$tein felul urmdtor: (9cuvant/ "<b>$cuvant</b>",
$rortrnune-auro!'l);
SstringModificat - slr replace print \<a href=zautor. php,
("textul vechi din srring ce urmea- id-a!tor=' . Sroq l'id_autor, I ., "> Librdria rrta
z; a fi nodificat", '\texrul nou, ' .9nune_auror. '</a><br>'
;
nodificat'/, Ssrringvecht) ; )

lata intr-un mic exemplu, cum se


folosegteaceastdfunctie:

.osu.pl'p

Ssol ^ELF I
Stex! = "un text oarecale"; FPO|,4-r'

Slext - str_replace ("re:r", "<b><foar I d H E P' E' _ ), i i.S rvd .'.".

color=' red' >rext</f grext) . $lesulsa = mysql_query(5sq1) ;


o4t></b>",
if (nysq1_num,rows ($!esursa) == 0)

1
Textul cdutat este evidentiat in rezul-
print "<i>Nici !n rezultat</i>"; tatele cdutarii.
l

File Edil View Fdvorites


Cu acesleaam terminatpanea..r izi-
ToEls mysqt ferch array (5resulsa) ) tabild" a site-ului nostru. Dupi cum v-
\F { am promis la inceput, am licut doar
Back ':r.i l $til:u - st! replace
c6tera fi5ierecaresdpoataafiSaun numar
(Scuvanrf "<b>Scuvant</b>",
uda$ de iffegistrdri... $i asta ftrA prea
$rl]6['titlu']); mult efort.
!<a href=?/carte,Php?
Prrnt Doar gdndul cd nu va mai trebui vre-
un tEr:t oarecafE id_car!€=, .S.owt.rd carle. I.,,,>,
odatd sA scrieli un singur tag HTML
. StitIu. ' </a><br>'
; pentru a adAugaelementenoi pe site ar
l trebui sd fie mullumire de ajuns!
Exemplu str_replace.
Vom trece in continuarela parteade
Aceea$ifunclie o vom folosi qi inainte administrarea site-ului,undevom vedea
de a afi$a rezultatelecduttuii, penhu a <b>Descrieri</b>
c u m p u l e mi n t r o d u c e c d q i . d o m e n i i5 i
evidenlia(bold) textul cdutat.latifitierul a u t o r ni o ii n l i b r i i r i e a s t l ienl c a t s A nm
u ai
cautare.phpmodificat astfel incdt sd fie avem vreodatdde-a face cu chinuitoarea
-
evidenliat textul cdutat: $sql "SEI,ECT id carte, litlu, linie de comandi. T
CHIP SPECIAL SITEDINAMIC
EDITORIAL
,' INTRoDUCERE
,, TNSTALARE , ryysQl,, pHp,, cREARE
,, ORGANTZARE srTE
l!ffiFlimr ,, Trps&TRrcKS

Administraresite
<td><INPUT

Stepanul datelor
type="subiit,,
value="Aurentif icare"></td>

ln acestcapitol ne vom ocupa de sectiuneade administrare,


in_
c:e-ang la securizareaei, pAni Ia introducereadatelor,
9e upload_
ul de liqiere gi manipulareade imagini.

*En kFatobr4$+
m pus utilizatorul pe primul plan gi
I
,--lam lZcut sectiunea .,vizitabili,' a
nii doar daci utilizatorul esteiffegistrat.
Fdrd aceastl verificare, un utilizator ar
; ^ AA * % . * "
srte-ului nostru astfel incet inlormafiile puteaaccesahtF://localhost/pagina.php,
sAfie intotdeauna,,lazi,'. Estemornenur hrd satreacAprin lormularulde inregrs_
si ne gdndim gi la noi gi la timpul pe care ttare.
l-amputeacdqtigadaciamaveaointefatd Sd trecem Ia treabi. Dupi cum spu-
s i m p l dS iu s o rd e u t i l i z apt e n r r um a n i p u - neam, index.phpcon{ine un simplu for_
lareadileriteloraspecleale site-ului. mular:
A$a cum am aYLrtdoar catevapaglm
p e n r r ua a f i 5 am a i m u l t ec a n i u t i l i / a r o _
Accesul in sectiuneade adminisrrare
rilor,la fel putemaveadoarcdtevapagrnr se face pe baze de nume $i parola,
pentru a intoduce informalii noi in baza
de date.Vom aveamai multe pagini, cate <meta 11trp-equiv=,,Co!rent_Type.. Pentrucain urmitorul fiqier,login.php,
una pentrufiecareactiunece dorim sa o content="lexr/htrd; sdpoatdconfruntadateledin formular cu
charset=iso 8e59 2,,>
i n t r e p r i n d c m :a d d u g a r e .m o d i f i c a r e , <title>1ibrArla celedin bazade date,trebuieint6i sdavem
nea</ri!te>
$tergere,moderarecornentariiutilizatori <sty1e tvpe-"rexilcss"> informa{iile stocatein baza de date. Va
pi urmdrirecomenzi.Vom in\ d!a cum febui se facem pentru aceasta un ruu
$i body, p, td lfonr-family: verdana,
sd oferim acces in aceastdzond doar Araal, tabel.admin.in bazade dareIibrarie
sans-se!i f; iont_size:
administratorului sau altor utilizatori I2p.; )
auroflzall. h1 CREATE TABTE adnin (
{fonl-fanily: Tines New Roma!,
Creafi un director nou in document Times, serii; adnrn_nume rext
font-size: 18px; NOT NUl,!,
r o o ts i d e n u m i ! i a
- ld m i n i s r r a rAei.c i v o m font-weight: adnia_parola
bold; cotor: +336699; tert NOT NULI
pAstratoatefigierelesec{iuniide admmr-
font-sty1e: italic; l
strare,ele fiind accesibilela adresah@;/ ,: (tui_o Id, Iy: v-.o.nE,A)._
/localhost/administrare/ a1. sans-se!if; in acest tabel vom salva numelc
foni-size: 14p:; ar
font deight: bold; cotor: parola penhu accesul la sectiunea de
Autentificare + 0 0 6 6 C C ;) administrare.Dar, cum salvareaparolei
..inclar" estein generalo ideeproastA,
o
Primul lucrupe caretrebuiesdil facem
vom introducein tabel criptatd:
este sa asigurAmaceastdzona, sd nu
<body bgcolor-,'+ffffff">
permrtem accesuldecAtadministratoru_
<ang src="../1o9o.gif{> INSERT INTO adnin 1.],LrES
l u i . c u o a n u m i t ac o m b i n a t idee n u m eg i
<h1>Autentif icare</h1> {"adninistrarox", nd5 {"parora")
parold. Pentru aceasta vom scrie uer ),
<FON]{ action-"1ogin, lhp(
fi9iere:
Iaracum araldconlinutultabelului:
- index.php unde vom afiga
formu_
laml de login
SEIECT ' !,ROt4 adni!;
- Iogin.phpundeverifi cim informatiile
<td align=',!ight">Nume: </td>
transmise din lormular,le coroborAm cu <td><INPUT ttFe='ttexttr iadrln nume .dnrn-pa!ora
celeexistentein bazade dategi dacdsunt
nane:"nume"></td>
corecte,acord5maccesulmai departe
atuastratort 323r453e23fa&€ff 9redbfabcd22ccL
- autorizarc.phpestepaginape
careo
vom includeapoi la inceputulfiecarui
<td align=ttright">parola: </td>
fiqier din secliuneade administrare.Ea
<td><INPIJT type=,rpasssordtr Criptarea folosind md5 nu este re_
va verifica la fiecareaccesaredac6utili_
name-iiparolan></rd> versibild (qi astfel nici dvs., nici altcine-
zatorul este inregistrat qi are acces pe
va nu o va puteaafla chiar dacdare acoes
pagrnarespectivd gi pemite rulareapagr_
la baza de date). Si scriem scriptul care

CHIPSPECIALS]TE!]]..i,I.:
EDITORIAL
,, INTRoDUCERE
,, INSTAI-ARE
, ORGANIZARE
, r4ysQl,, PHP,, CREARESITE
,tlllllllHiilA,, TIPS&TR|C

sdconfrunteinformaliile din formular cu int6i sesiuneadupd caretrecemla salva- salvate in variabile de sesiune sunt
cele din baza de date: rea informaliilor in ea: */ aceleaqicu cele din baza de date+I
sesslon starr O ; Ssql = I'SEIECT'FROM adnin WHERE

administrare/login.pl'p $ _ S E S S I O N[ ' n u ( e _ a d n i n ' ] - adirin_nuoe=' ". $,SISSION t'nldE_addn'l "'


S P o s T[ ' n u m e ' ] ; rND addn parola=

/* verific;fr intai dac; au fos! con- I sEssIoN ['parola encriptata'] * '". S sEssIoN encriprata']."'"'
['parola
plerare amandouA campuxile i/ SparolaEncriptata; $resursa = mysql query($sql);

if($ PosT['nume'l == "" ]l /* Pe ldngd acestea,pentru o ti mar /+ AceastAinterogare,dacd esteexe-


S Posl['parola'] == "") maresiguranlA.r om salra id-ul sesiunii cutate cu succes(numele gi parola din
{ in altl variabilA.Toate sesiunileau Lrnid variabilele de sesiunesunt valide $i co-
; A ' : ' ' - ' A ' F ' ; r - unic, un string careseamdndcu rezultaful respundcelor din baza de date) ar trebui
doue campurilel<br> unei criptdri md5.*/ se retumeze un singur rdnd din tabelul
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 ; admin. Dacd nu returneazd exact un
/* Cu autentificareaficut6, spunem rand vom afiga un mesaj de eroare9i
l scriptului si incarce prima pagind din vom opri execulia scriptului: */
/* Dacd au fost completate, ne sectiuneade administare: */
conectdmla baza de date pentru a putea I
confrunta datele. Folosim figierul
conectare.phpdin documentroot:*/
Crca,ti$i o pagind admin.phpin care )
/* Criptdm parola trimisd prin lormular scrielitextuI ..secliunea
deadministrare".
tot cu md5, pentru a o avea in fomatul in dupa care accesatiadresahnp:'/local-
care ea existd in baza de date: */ hostadminiskare $i aulentificali-vacu
SparolaEncriprata{ds (5_POSr ['parola' ]); mrmele,,administrator"qi parola ,,paro- File Edit View Fdvo tes Tods Help
/* qi scriem interogareade verihcare: 1a,,.Autentificareava f,i fEcutd$i veti fi + . + . o E d
redirec,tionalicdtre pagina admin.php. En.i Fi.,,lnrn stop Refresh Hotne
$sql = rrSEl-ECT * FROM adnin ITHERE
Sd facem un alt test: inchideji toate
adnin nune=' ".9 IOSTI'nune'1."' AND
instanlelebrowserului astfelincdt si ex-
adninjarola=. ". SparolaEncriptala . r' ";
pire sesiunea,pomili din nou un browser
$i accesatidirect a&esa http://localhost
/x Aceastdinterogare,daci esteexe-
administrare/admin.php.Ve{i avea ac- Dacenumelegi parolanu sunt corecte,
cutatd cu succes(numele gi parola din nu se acordi acces mai departe.
ces,chiar dacdnu v-a,tiautentificatfolo-
formular sunt valide gi corespundcelor
sind formularull Ei bine, putemimpiedi-
din baza de date) ar trebui sAretumeze un
singur rdnd din tabelul admin, carecore- ca accesul neautodzat daci scriem un Vom folosi autorizare.phplainceputul
spundenumelui gi parolei. P€ntru multi mic script de verificare a datelorsesiumr fiecdrei pagini 9i impuqcim astfel trei
programatori. r erificarearetumdriiunui inainte de a incarca odce pagind din iepuri dintr-un foc: in acest script
rezultat este de ajuns pentru a acorda secliuneade administrare.Iatd codul: inilializim sesiunea,ne con€ctim labaza
accesul mai departe.Noi vom extinde de date 9i verificim autentificarea.Ca
protec,tia$i vom acordaaccesuldoardacd autorizare.php urmare, dacd includem acest script in
rezultatul retumat are un singur rdnd orice fi9ier din secliuneade administrare
(maiprecis,vom afigaunmesajde eroare /* Pomim sesiunea,deoarece avem vom fi 5i gataconectalila bazade date.si
5 i v o m o p r i e x e c u ! i as c r i p t u l u id a c a nevoie de dateledin ea: */ cu sesiuneapomitdqi cu autorizareaefec-
numdrul de rdnduri nu e 1): x/ session_start o ; tuatd.Sa rescriemfigieruladmin.php:
/x gi verificSm datele, 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
'Nume sau paxolS
Prinl login.php caretrebuiesd fie acelaqicu
gre9ite I <br> session_id:+/
if ($_SESSION
l'key_adnin' I l-session idO)

{
l
/* Pdni acum s-au licut toate verifi- Fb Eda sd, Fawt6 ro€h ndp
cdrile, numelegi parolasrmtcorccte,sd tre- ) 1 " , . - g : i ] d q
8a.l F:r-t.; 5t@ R.fi6rh tbm sEd.h
cem la autentificareapropriu-zisd.Vom /* Neconectimlabazadedatedeoarece
folosi variabilede sesiunepenftu a plsha
vom reverificadateledin sesiuneou
in memorie cdtevainformatii despreau-
celedin bazade date:*/
tentificare,p€ntru a le reverifica mai tdr-
ziu, atunci c6.ndaccesdmalte pagini din Dace numele9i parolasunt valide,
/x Verificdm dacdnumeleqi parola
cadrulsecliuniide administrare. Pomim accesuleste acordat.

CHIP SPECIAL SITEDINAMIC


ED|TORIAL,,
|NTRODUCERE,, tyySQL,pHp,, CREARESTTE@,,
|NSTALARE,,0RGAN|ZARE
" TIPS&TRICKS

Inchideti toate instanlelebrowserului !rzatalori</a></id> Obscrvdn cd in cele doudfigiere care


pentrua$tergesesiunea(dac6v-aIilogat)
suntpartea lui test.phpnu facemdecdtsd
$r apol accesaliadresahttp://localhost/ href="conerzi .php" >c.nenzi </ a></ verificdm aulorizarea,lErd sd includem
a d m i n i s t r a racd m i n . p h p ( d i r e c r ,l l r d : d n i c i u n a l r f i ; i e r .( u m f u n c l i ad e a u r o r -
trecetiprin formularulde aurentificare).
rzare estc definiti in figierul ,,mamd",
Vom primi mesajul,,Accesneauto zatl,,
d a c dm e n i u . p h .pa u m a i np h p . u n r a p c -
$i restul textului nu va mai fi afigat! late din ca&ul lui, vor face verificarea
Accesali acum http://localhost/admrnts- Si modilicdm a c u m5 ra d m i n . p h p ;sia folosind funcfia deja definitd. Iatd struc-
trare/ $i completali formularul de auten- includcm acestfigier in el: tura celor patru fi$iere:
tificare.Dacele-ati completatcorect,veli
alungepe paginaadmin.phpgi veli vedea aomrn.pnp L ( \ , . p p , r r c r r u c r a u r o - t / a - ep n 0L a f e f o m c ) l e
. e . i u n c a . . e c o n e c r e ah/ :o a l . l d c d a t ed.e f in e ! l e
lextui..Accasra esleprimapagindi". pagi-
f un c r . do e o u t o n . , a rSetj o l o i e s t c - c e a s tr;u n c r i c
nile de pe sec{iuneade administraresunt r.c.Lrde (,'aurori zare, phF" ) ; penru a face autorizarea)
de acum asigurate! rn.lu{le { "adii. top.!}jp") ;
Pentru cA zona de administrare are o r . r - - . o 6 . 6 meniu.php (se apeleazi
o r . . o 1 J d i . . , main php (se ape-
mai multe sectiuDi, pentru adiugare, funclia de autorizare$i leaTafunctia dc au-
seacordasaunu accesul) torizare$i seacordi
S t e r g e r cel.c . ,r a t r e b u is aa v e ml i n k - u r i
cdtretoate acele secliuni, pe fiecare pa-
gind. Decdt si le scriem de fiecare datd ""!e
cdnd avem nevoie de ele, mai bine le -it 3
f_autorizare.php
scriern intr-un fiqier, admin_top.phppe
care sI il accesdm atunci cdnd avem
sessron sta.i O ;
nevoie Si in care scdem gi instrucliunile
<html>, <body>, etc. Iatd conlinutul L i|rdria mea
:rir t . lti! 1!:; :irr .!4j
1nc1!de (". . /co.ectare.php.')

iuncrioc a!rorizar
;

{)
figierului:
A.e35t. esre Fnm! paq n; {
Ssql = "SlrrCT a FROM adnin I{tiEFE
admin toD.oho
adnn .m+' " - s-SESSIONt. nre ad":in.I "'
trare.
AND adnin,parola=' ,' , S STSSION

['parola e.c:]pta.a,l . ", ",


<mera htrp-equiv-,,co.ten]]-Typei, Uneori, includereaunui fi;ier care sd SresJrsa = mysqt_query (Ssqt) ;
conl:ent="text/htnL; ctarset=iso Seocupecu autorrzarea
BB59-2'.> nu esteo solutie if (5 SESSIONl,key adnin/l t=
<title>tibr6xia mea</tit1e> r i a b i l a .D e e x c m p l up. ul e ma \ e a u r m a - session_l.i O I
<stYr e ty.e="text/css "> t o r uI e x e m p l ui n c a r eo p a g i n ia s e c r i uini mysql_-nun_rcrs (Sresursa) t= 1)
body/ p. td lfonr-fanity: verdana, de administrare(test.php)include alte I
Arial, sans-seri f; font-size: doud pagini(meniu.phpqi main.php). return false;
I2px; ] Atunci ar trebui sd includem figierul l
hi {font-fafriIy: ?imes New Roman, autonzare.php in fiecare din ele, dar
Tines/ serif; f...-size: :L8Fx; atunci am primi un mesaj de eroare (se I
font'1{eight: ba7.1; caiatt +336699; rciilializeazd. sesiunea de 3 ori qi in .eturn true;
i.nt style: iralic; l p l u s , i n m e n i u . p h p9 i m a i n . p h p s e ]
-:1:I: {fonr family: Verdana, A.i- r e i n i l i a l i , / e a tdau p a c e a u f o 5 t t r i m i . e l
: , sans-serrf, f.ni-size: t4px; date citre browser).
:..: ie:gh.: bold; coror: + O D 6 6 C CJ; Atuncr putem creao functie declarati
de noi, care sd faci autodzarea. fest.php
Aceastl funclie o putem apoi apela
<body og..l.:="::i:f f f ',> oricAndavem nevoie de ea (cu conditia /* include figierul f autorizare.php
<rnq sr.-"._, :r..q:i',> sd fie definitd intai !). carepome$tesesiunea,se conecteazdla
<TABLE bgcoic:=" =:9: tE? " celtspac- I a r ac u m a r a r d t a5 r r u c t u rsai t e - u i ui in baza de date qi declard funcfia de auto-
ing=" 0" celipadd::g='," Oo.o".=',r"t acestcaz: rizare*/
I nc1!de (" f phpn ) ;
'qrL.p p | 'lcruoc duroflTare.pt cdre pnm<)1e _a!toiizare.
n
, e . i u n e a . s e c o r e , r e " , , al a b a , , ud e d " l e , \ e F i c ; /r 5i verifici autorizareafolosind
h r e f - ' , a d a u g a r e _! h p " > ! , a : : q : < , / a > < /
func1iadefinitd in figienrl pe caretocmar
l-am inclus, f autorizare.php*/
meniu.php (include ma'n.php (include
auronzarc.php care if(lautorizatO)
auronzare.phpcare
href="nodif icare stergere, p.D,'> p o r n e i t e s e s i u n e a ,s e Pome$tesesiunea-se {
I4odificd sau grerge</a></rd> conecteazalabazadcdate. conecteaTdlabazade
vcnlicd autoizarea)
prrn Acces neartorizai I,;
<rd><A href="opi.nii.php">Opiiii
date. verifici awori-

CHIPSPECIATS1IEDINAIIIC
EDIToRIALINTRODUCERE,,
INSTALARE,ORGANTZARE
lYySQL,,PHP,, CREAREslTE,tltlllllt+l*,Lll
,, TtPS&TRtc
" "

I sener. inpagina adaugare.php vom avea: Domeniu dou: <INPUT tyle-"text"


include ("meniu.php" ); - fomularul pentru introducere do- name="domeriu no!">
include("main.php"); meniu nou; <INPUT type="submit"
- formularul pentru introducereautor name-"adauga domenlD"
nou; value="Adauqa">
- fomularul pentru introducerecartg
TglI!sry-
/+ verifrcd doar autortzatea*I noud; <b>Adargi autor</b>
if(lautorizatO) Pagina prelucrare_adaugare.phpva
{ aYeaurmAtoareastructurd:
prlnt 'Acces neautorizall'
; - include pagina admin top.php (se
pomegtesesiunea,se conecteazdIa baza Auto! nou r <INPUT type="text"

de date gi incarcd inceputul paginii); name-"auto! nou">


/* codul care re ruleazd dacd este - dacda fost trimis primul formular, il <INPUT type="submit"
autorizat */ prelucreazi;i introducedomeniulnouin name="adauga-autor"

tabeluldomenii5i apoiafirea,/6un mesaj value*,,Adaug;',>

de confirmare;
fblose$teaceastefunc1icpcnlru a lace autoriza- - dacda fost trimis al doilea formular, <b>ada!gi carre</b>
ilprelucreazi.il inrroducenoul autorin
meniu.php,inclus in tcst.php(define$tetunctia tabelul autori ti afi$eazdun mesaj de
de autorizare,foloscateaceastifunc1iepentru a
confirmare;
l h c e a u r o r ' , , d r e ae r o d r ef:- n c l r a af o . t d e l l n r r ;
de dou; ori ( o d a r ar n f 5 r e r u l. . m d m ; , o d a r i
- dacda fost trimis al treilea formular,
il prelucreazd 5i innoducenouacarle in
tabelul cafti $i apoi afigeazdun mesaj de <td>Domeeiu: </td>

confirmare.
m a r np h p _ Inainte de a crea cele doud fiqiere, <select name=" id_domeniu'r>
/* verificd doar autorizarea*/ vommai faceun singurlucru.Ne aducem /* Luimnumelededomeniidinbazade
if(lautorizat{)) a m i n t ec i t a b e l ucl a n ia r eu n c a m pd e t i p dateEile afiEdmutlizatoruluiintr-o listi
{ DATE numit data in care se slocheazi drop-down. Astfel putem obtine un
pri.t'Acces .eauiorizatl' ; data adaugArii ca4ii in baza de date. id_domeniucorespunzatordomeniulul
Aceastddati ne folos€$tepentru a afi$a selectat pe care sd il introducem in
pe prima pagini cele mai noi trei cdfii. tabelul carti +/
/* codul care se ruleazd dacA este S t i m d i n e x p e r i e n l caa e s t em u l l m a i
autorizat * / simplu sd lucrdm cu cdmpuri de tip
TIMESTAMP (se seteazeautomat cu
Fie Edt vew Falqt6 rooE |+
Astfel redem cum. folosindo fr.rnc1ie data curentd),agaci ne vom conectala
* . ' , J l 4 4 r i !
deflnitade noi.nu sevaputeaaccesanici bazade date5i vom modificatipul cam-
Add'.u l4l htte:/l ddrcn/adn i ft@/ada4a€.pte
unul din figiereleincluseferd autorizare! pului:
De celemai multe ori, o funcfie estemult J
. , l

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 L tordnd med


alegereaestea dvs. Fitriatenji doar sdnu IIMES1AMP(10) NOT NUi,!; .,. n. i,rtrr,.::r':t:,:r .1 . ,l:t,t:" !1"::l
definiti functia de doui ori in cadml
aceluiagiscript, altfel veli primi mesajul Toatevalorile inregistrateanterioryor
de eroareFatal error: Cannotredeclare fi convertite,iar de acum incolo cdmpul
o o m e n u n . u- A d ' u q ,I
numele functieiQ. data se va seta automat la fiecare N-
DacAfllnc,tiaa fost dejadefinitd unde- SERT.Altfel ar fi febuit sdil specificdm
va in executiascriptului.trebuiedoarsd no1. Autofno!f- A d a u q l.

o apelati. Iatd cele doud figiere:


o"."", lA",^'*I
Addugare aoaugare.pnp _ lA'e^*---l
lFios,ari I
locoosls I
in baza de date putem ad5uga trei @@
lMaiurs I
lMedicni I
Iucruri: domenii. autori sau cdni noi. includ€ ("admin,top.php") ; lMiloroeie I
tf@z I
Pentruacesteavom lolosi o pagina in lFolen' I
lsF I
care vom afiga trei formulare, cdteunul <h1>AdAuqaxe</h1>
lTeari! |

pentru fiecare qi altd pagind careva pre- <b>Adaugd domeniu</b>


lucra informatiile din acestefornulare, . ." F
in funclie de care a fost tdmis citre helhod="POST'>
Alegerea unui domeniudintr-o lista
generatA automat.

OHIPSPECIAL SITEDINAMIC
EDTToRTAL
, TNTRoDUCERE
,, TNsTALARE
, oRGANTzARE
" , plp , cREARE
NrlsQL srTE
llll|ililFE{if ,, Trps&TRrcKs

niul specificatexistddejain bazade date.


9sqL = 'SEIECT * FROM done.ii
Nu il vom addugadin nou ci doar vom
ORDERBy nlme-domeni! ASC,r;
atenflona utilizatorul de eroare vom
9resursa - mysql-query($sqt) ; <td>Titlu: </rd>
9t
inrrerupeereculia ullerioaraa scriptu_
\ - -rS on sqi 6r-1 a,royi..8 -sa,) <td><INPUT type="text" naee=',ritlu-> lui:*/
i
'<oFiion if (mysql_.un-ro$s (Sresursa)
print value= t=
I
"'.$rowf i6 domerru'l./">'.
pran Doneniul
$rowI'nune domeniu' l ..</oprio.>,, <td valign="lop">Descriere : </ld> <b>, .S_posrl,dome.iu
] <td><textarea nane="descriere..
nou, l., </!>
exrsiE deja in baza de datel<br>
rows=,'8"></rexra!ea></rd>
<a hre f="adauqare . php" >i napoi</ a>. ;

i
<rd>Prel: </td>
/x Am verificat sd nu fie erod, putem
<rd><INpUT type-"rext,,
<td>Autor:
nahe=,,pret,!> acumsdadAugam noul numede dorneniu
</id>
in baza de date: +/
$sql = "INSERT rNTO
<select nafre=iiid dome.il
auto!ii>
(nume domeni!) VALUES
Fi.EdtVewFavdb5roo]5Nelp l'",_ posr' oorp.

# '
<td><INPUT t\?e="subfrii,,
.l- .;:- ..*, #.. name= mysql_query{gsql);
ro."
"t
r*p.r"-r,"a,r "*
prp " "adausa_carte" value=.'Adause,,></td>
/x qi afiEdmutilizatorului un mesajde
".iJu".
confirmare: */

i|rdria,mea
!.-;,rL
prinr , Doneniul

<b>'.S posr[,doneniu nou.].,</b>


a
. rr ', r:,-.. -r-.,
fost
ad;ugat in baza de datej<br>
<a href-"adaugare.php,,>inapoi</

u o m e n L . o uI: A d a u q Ie
l
include ("autorizare. p h D , , );
Aur.f nou I
/* Acelaqi script, cu mici diferen{e,il
Ada,q. I rnctude {',adnin rop_pip,,) ; vom folosi pentru addugareaunui autor
/" Dacd s-a trimis formularul pentru nou, dacd s-a trimis formularul de
D.*",,1s--'l adaugarede domeniu */ adeugare autor: x/
f -.
.DOs- rf (isset (5 posrt,adauga autor,l))
I
{
/* inainte de a introducenoul nume de x Verificamdacdnu
esregol: *
domeniuverificlm doudlucruri: sdnu fie i f ( s _ P O S r l ' a u . o r. o u . t _=,,,,)
gol gi sdnu errsredejain bazade dare.in
{
cazulin carenumelede domeniuestegol prany Trebuie sa cohpletezi runete
5auseaflAdejain tabeluldomenii.afi'am
autorut!i t<br>
un mesaj de eroare qi oprim executra
$i listaautorilordin bazade datepoate <a href="adaugare.php,,>inapoi</a-
lr generateautomat_ scriptului: x/ ;

if ($,PosT l, domeniu_.ou,I == "n) l


/x Afi9am 5i lista dropdown cu autori */
{ * Verificdm
dac6 nu exisradeja in
prlnt , Trebuie
Ssql = "c;_;-r r
s; conpletezi baza de date..*/
FROM aurori oRDER numete de domeniul<br>
BY nume arrc: Asc,,; <a hre f=',adalqare . phn,,> inapoi</a>, -
$resursa = mrsqi qrery(gsqt);

" j - J s . ol r ,Ja r , md - * ;j ; ra a r
Add*, lcl htF.t a"i *qad,";;;;;;;;;;;;
mysql,f etch_airay (S.esursa) ) * Verificdm dacd
nu existddeja in
*/
baza de d,ate.. J
print '<oprion t 't

valDe="'.SrowJ,id_a
Ssql = "SELECT * FROM domenii

nme do,'Mau=,".5 losT t/d@niu


WHER!] Llorana. med
nou,l.,,,,,; | .r1!,.r !lt!]lt f: .:4i-it!1!rt !!urt!
, 1r: !l!!r! !!!r:Lll]]:
srov [, nlme_auto., ] . </ aptia.>, ; siesursa - myscl_query(gsql) ; Do nu sF €r+5 dej. in b.z. de datel
) /* Interogarea retumeazd 0 dnduri
daci domeniul nu existdin bazade date. Dacd se ince"rca aauaugareaunui
Dacenu retumeazd0 inseamni c6 dorre_ domeniu deja existentprimimacest
mesaj

liltTD (r5 -.
a : - -
EDITOR|AL,,
INTRoDUCERE,INSTALARE,,
oRGANlzARE,lvlysQt,,
PHP,,IREARESITE,,tllllllllFl![il
,, TIPS&TR

9sql = ''SE]-ECT + FROM autori WHERE /+ Verihcdm dacA titlul, descrierea


FIe Edr vbd Favoft65 Todr H.h
nEe_af,to!="'. S P o s T[ ' a u t o r nou']. "'"; sau prelul nu sunt goale: */ + - " r . r - ! l d ' o
3a.[ Rdrc$
9resursa = frysql_query(Ssql) ; 1l{s PosT[']rirlu'l == "" I
Foh..d 5l@ rorc td.h

!f(mysql num rows(Sresursa) l= 0) $_Posrl'descriere'I -= ""


S P o s Tl ' p r e r ' I = = " " )
piint I Au!orul

<b>'.$-PosTl'autox nou' I . '</b>


{ r0rdrm med
.1i:r.r rri.ir.; i:-rr it:-r {! .[ iL!D!:l!!
exisu deja in baza de daiel<br> prelul sunt 9oa1ei<br>
<a h.ef-"adalsare.php">hapoi</a>' ; a | . a ' ' ;

l Dom€nu.au llee A d a u q !|
/* Am verihcat sd nu fie erori, putem /* Verificdm dac6 valoareaintrodusd
acum sd adiugim noul autor in baza de in campul Pre,testede tip numeric folo-
ao'uglI
date: */ sind func1iais numeric: */ a,t-
"", f-
$sql = "INSERT Il'rTO aulori (nume-auto!) if ( | is_nuneric (S_Posri'pret' I ))
I A L U E S( ' " . 9 _ P O S T [ ' a { D"'"", lA"ffi_l
mysql_query ($sql ) ; print 'Campul Pret rrebuie se fie lAbffiffi,.-_l
* 5i afipim utilizatoruluiun mesajde de tip numexicl (scrieli <b>:1000

confirmare; */ </b> in loc de <b>1000 lei</b>)<br>

pri.r'Autorut ..e , , . d " - 9 "e . F r p , , . 1 p o - . o . , ;


"
<b>'.$,PosT['auror nou'I . '</b> a

l
/* Verificim dacd aceast5cafie ru
existiideja in baza de date.dupd doua
l cdterii: id autor gi titlu. */
Adeugareaunui domeniu nou.
/x Scriptulpentruaddugarea cd4ii va fi $sql = "SEIECT * FROM carti tiHERE

o ideemai complicatdeoarece arem mai id_autor-' r !. s _ P o s r


[' id,auror' I . "'
ului, http://localhostpentrua vedeaadiu-
multe variabile de verificat, dar in mare A\D r '".5_oO.
.', ..I' , ;
girile, continutulnou al site-ului,addugat
are acelagimod de funcfionare:*/ 9resursa = mysql q:ery{9sql);
in citeva secunde!
ii (isset (9 rosr [ ' adauqa-carre/ ] ) )
{
Modificare gi gtergere
baza de datel <br>

Era Ee !d F!va't.r look d.rp <a href-"adauqare.php">Inapol</a>' ; Ce ne facem anrnci cdnd am ldcut o
+ - 4 9 i l d a - n greqealiscriind greqitun numede dome-
l niu sau titlul unei ca4i?
J . r - /* Am vedficat sdnu fie erori, putem Dar daci nu mai avem o cafie in stoc
IrX0fdnL med
j=l..
acumsdadiugdmcarleainbazadedate.*/ $i dorim sd o scoatemde pe site?
:+!!: ,.i,,r';.., ;;;;,,1,t-;jr
-\-O
s ol "-\SEP- --- r i_dc-F . ., Vom scrie trei figiere pentru modifi-
id a!tor, rirlu, descriere, p:et) careasau gtergereade elementeale site-
' ! A L U : S( '
", S POST['i.i Co..€.iu/I."r,'r. ului nostru.
I Easi t' id tu_o/ : . "r , "'. S_F]6II'tjtlu' -, ' FiEierul modificare stergere.phpva
1, ",
Domenunou,|- A d a u q I!
$_IcsI t/ es6ie@/ 1 . "' , "' . 5,461 1'pret' 1 . "') "; con{ine trei formulare: unul pentru nu-
mysql_query(Ssqr); mele de domenii, unul pentru numele
a,r","", [- ad*ra l *
$i afi5im ulilizatoruluiun mesajde autorilor qi altul pentru ce4i.
confirmare: */ N u m e l ed e d o m e n i ig i n u m e l ea u l o -
'Carrea
prrnt a fost adaDgate in baza rilor le vom afi$a in liste dropdown,
de darel<br> astlel incat se putem selectaimediat do-
oesrera lirrl-eflerc
meniul sau autorul ce dorim sd il $ter-
gem.
Formularul pentru cd4i va con{ine
doud cdmpuri: autor qi titlu. Numele au-
F5ooo torului ra fi disponibilinrr-o lista&op-
A,laugdI
down, iar titlul cd4ii il vom scrieintr-un
Rulali acestescripturi pentru a intro- <input type="text">.
Formularulcu aiutorulceruiaputem duce ca4i, autori qi domenii noi in baza Iatdcodul acestuiscript qiputefi vedea
addugarapido carte. de date. Accesaliprrma pagind a site- i n i m a g i n edae I a p a g .5 8 r e z u l t a r us ld u :

CHIPSPECIAL S]TEDINAMIC
FDITORIAL,,
INTRODUCERE,,
INSTAI.ARE
ORGANIZARE,
" MYSQL,PHP CREARESITEI!ilIIFil'!!|I, TIPS&TRICKS
"

Sresursa = mysql query(Ssql);


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

incrude (,'aurorizare. php,,) ;


<serecr name-"id autor,>
include ( "adnin,top.
/+ Afiqdm 9i listadropdowncu autori */ php') ;
/" nodificare nume domeniu */

= "SEIECT * FROM if (isset (g rosTl,modifica doneniuft))


$sql auloli O R D E RB y Figierulformulare_modificare_stergerc.
nune-autor ASC";
{
php va prelua informalile din modificare
/x ludmnumelede domeniudin baza

CHIPSPECIAT S]'I'EDINAI{IC
EDITORIAL
INTRODUCERE
, INSTATARE
ORGANIZARE
, MysQL
,, PHP,, CREARESITE
II''IIiIFilT,, TIPS&TRICK
" "

de date deoarecene-a fost trimis din <h1>ModlficA nuhe autor</h1>


formular doar id-ul domeniului: +/
Ssql = ' T S E L E C Tn u m e d o m e n i u FROM - r .n- brcl,r,-F
donenri fiHERE
f, 'r -. nethod=" POSTr'>

L t0rdrw med <INPUT lype="text"


$resursa = mysqt-qlery {ssqt) ; nahe=iinune a-tor,,
$dune domeniu -
value="<?=g.une a!tor?> ">
nysql-resDrt (5!esDrsa, 0/ Gre;u *r in ere tn:nb de a *sqe
<INPUT type:"hicden"
tol d:d 6in: !:t h b::: de d*; l
"nume domeniu" ) ; name="id autor"
* gi afildm numelevechi
de domeniu h*", h**M l M"d , I s,a. i value="<?=S IOST [' id-auror, I ?>">
intr-un textbox pentru a fi modificat */ <INFUT type="submit"

{b,F ;;^/tu I M d n . tI $ " a " name="modifica auior "


<hl>Modificd nume doheniu</ht> value-"Modlfica">
<iorm ac!ion= tut..FbdM,.--l

"prelucrare nodif icare stergere. pdp,'


rt"r
Md d I sEa,
nethod-'r!OST">

<INPUT type='!rexr" */
/- 9tergere autor
!ame="nufre,doneniu', if (isset (s_PosT t, srrerge-a!ror, I))
value="<?=Snume-doneniu?>">

<INPUT lype="hiddenI' Paginacu vom /x verificdm daci sunt cd4i in bazade


naRe="id,doneniu" ca sau Stergeinformatiide pe site. date care aparfin acestuiautor: x/
value="<?=9_PosT [, id_domeaiu, ] ?>" > = "SELECT titlu
tsql FRoM carli,
<INPUT type-r'subnit" /x iardacdnusuntcdrliin acestdome- autora WHEREcarti, id alror=
.ame="nodif ica_domenlu" niu ceremconfirmareapentruslergere: autori.id autor AND
va1!e="Modi iicA " > carti. id autor=
r r. S P o s r
t' id-autor/ I ;
{ Fresursa = mysql qrery(Ssql);
) Snrcarti = nysql num roas(Sresursa)t
/+ domeniu */
stergere <rt>9rerge nume dome.iu</h1> /* daca sunt cd4i apa4inand acestui
rf (isser (S Posll,sterge domeni!,1)) E9ti sigur cd vrei s; gtergi ac- a u t o r .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
{ esl donenru? eroare: */
/* verificdm daci suntcd4i in bazade if (Snrcarti > 0)
date care apa4in acestuidomeniu: */ a. o -"oFl' -zr,-ro @ .a.rF,dD"
{
$sql = "SEI,ECT titIu. nume autor method="POST"> pxlnt "<p>S!ni: SnrCarti car!i d€
FROM carti, autori, domenii W]ERE <INPUT qpe"diddd! narF"id-d(reniu" acesi autor in baza de dalel</p>";
carii, id_domeniD=don€.ii, id_domenlu varue="<?=5 losT {' id_domeniu, I ?>'> while (Sroq =
AND carti,id autor-aurori.id-a!ror <lNP01 type-,,s!bmit" name= nysql ferch array (Sresursa) )
AND domenii. iddomeniu=
"sterge domeniD" val!e="gielqet"> {
".F Posrl'id domeniu' l ; prant Frowt' tit1u, I . "<br>";
9resursa = mysql query{gsqt);
I
inrcarri = mysql nm_roqs (9resursa);
l print "<p>Nu putefi Srerge acest
x dac6sunr cdni apanindndacesrui
) aulorl</p>";
domeniu, afi9dm lista lor gi un mesaj de /+ modificarenumeautor*/ l
eroare: x/ if {isset ($-PosT [, nodifica autor, ] / l /* iar dacdnu suntcd4i deacestautor
1f (9nrcarti > 0) { ceremconfirmarea pentru$tergere;*/
{ /x luim numele autorului din bazade
plinr datedeoarecene-a fost trimis din forrlu-
"<p>Sut $nrcarri carfi {
care apartin acestDi doneniul</p>,,; lar doar id_autor: */
whrle ($row = $sql = "SELECT nune_autor FROM <h1>Sterqe autor</h1>
mysqr-fetch_ar!ay (5resu!sa ) ) autori t'iHERE id_au!o!= Eqai siqur cd vrei s5 giergi
{ '
". $ Posrt' id_auto!' l. "'
('
aces! autox?
print "<b>i.$rowt'rit1u,I . "</b> Sresursa = mysqr-query(gsqt) ;
de ". Srow l'nume_auto!, I . "<br>'- s.une autor = mysql resull acti@-"pre1udaF_nDlif r(re steryere.Fbp!!
(Sxesursa, 0. "nume auto!"); methoci-" POST'r>
prinL't<p>Nu puteli gterge acesr /* 9i afiqim numele intr-un textbox <INPUT type=trhidden"
domeni! l</p>"; nahh,'fi-^.1ifi^"+*/
nane=" id autor"
l value="<?=$ POsr{'id autor, I ?>,,>

CHII'SPECIAL SITEI]INAMIC
EDlTORtAt,
'NTRODUCERE,
|NSTAIARE, MysQr-pHp CREARES|TE@)
oRGANtzARE, Ttps&rRtcKs
" "

<INPUT type="subnit,' if ($ro{l'id ==


doneniu,l vatue="<?=$rowcarle I, rirlu' I ?>">
nane="s!erge_autor" $rowcaltet'id doneniu, l)
value-"9terqei">
{
print , <option SEItrECTED
valuer" . $!ow l ' id_ddlHiu, I ., ">' . <tcl va1i9n-"toptr>Descriere : </td>
] g.owI' nwte-domeniu, I ., <td><texta!ea nane="descriere"
] </option>,; .ows:" 8rr><?=9roeca!te ,
t descriere' I ?>
/* nodificare carre */
l </textaiea></td>
i f ( l s s e t ( $ _ P o s T[ ' n o d i f i c a carre']))

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

CHIPSPECIAL_ SITEDINAMIC
EDITORIAL
, INTRODUCERE
,, INSTALARF
, 0RGANIZARE
,, MySQL
, PHP, CREARESTTE
,,GtllllllFEilif ,, Ttps&TRtcK

Fr. Ed. vew FaYo*a, roo3 eh


baza de date; if(S POST['nume autor'l == "")
- (sau) gtergereadomeniului din baza {
de date;
- (sau)modificarcanumeluiautorului; l
- (sau) $tergereaautorului:
- (sau) actualizareainformatiilor de- I
iu"lr",,.-i.r" spre cane;
"rrl ii -"","',.i
erui.lJo .9 DDr I rt n-".-o-.
"r
- (sau)Ftergereacd4ii din bazadc date '
" .s_POST[' nlme auior' ] . "' ftiHErE
IInnilitti d tk, tlnutufil
$i a tuturor comentariilorutilizatorilor 1a id auto!-".S ? o S TI ' i d arror,l;
lsr voo,n.lI cartearespectivd. mysql query (Ssq1) ;

C o d u l c s l e u r m a r o r u(l s e m ni f i c ail\ pri.r "Numele autorutui a fost


Formularul pentru modificarea unui
nume de domeniu scris gregit. mai simplu decAlcel al fiqierului prece- modificall'.;
dent): l

ttt:tod="no"t"t l

<INPUT rype="hiddenn prelucrare_nodificare


stergere.pht /* $tergere aulor'/

nane-" rd carte,l i f ( i s s e r ( S - P o s T[ / s t e r q e auLor'] ))

value="<?=5id_carie?>"> include ("a!toriza!e.php") ; {


include ("adnin rop. php" ) ; .q .D. r .oov d
<INIUT type=r'subnit" r o. d I

nane=t's!elge carte" /* modificare nume domeniu +/ id a u t o r = " . $ _ P O S T{ ' i d autor' I ;

varue-"gterge | "> rf (isset ($ rOsT['nodifica doneniu,]r, nysql-query(5sql.);

{ prini "Autorui a fost qtersl";

/* Verificdm dacdnoul numede dome-


niu a fost introdus. +/
ii (S-9oST [' nume domenau'] == "") :: (:sset (5 roST['modifica carte']) )
{
print "Nu a!i introdus nrmele * Verificdm daci toate dateleau fost
domeni!1ui I "; introduse aorect. N-am vrea sd intro-
l ducem date eronatein baza de datedoar
Dupi cum r edem. pagina pentruca a sarirpisicape tastaturi)i a
formulare_modificare stergere.php 1 apAsalE\TER in timp ce intoduceam
conline doar formulare, pentru toate Ssql - "UPDATE domenii SET datele.Daca credeticA nu vi se poate
,, .
operaliunilede modificare$i $tergeredin nLre dd@iu=, $ Fos_rI intdmpla... eibine.din proprieexperientd
baza de date. Sd mai facem un ultim ndEl,E id_done.iu=r'. vd spun ci sepoate.Vom folosi o struc-
fiEier,in caresdprelucrim dateletrimtse S POsr [' id_domeni u' I ; tura if... elseil.. else:*/
pdn acestefbrmulare. Structurasa va fi mysql ouery(gsqr);

prirt I'NumeIe domeniului


urmdtoarea: a fost

- modificarcanumeluide domeniuin mod:ficar | ";

l r::r: I'Nu af: introdus rirLul:";

Fh Edi v$ F.wt.e r@k trh


/* De ce nu am folosi exit in structura
+ o d a if(condi{ie){codul de executat;exit;}? e.ise rf(5 Pcsll'descriere'l == "")

Pentru ci daci nu se executdcodul din ]


if(conditie){ }, seexecutdcoduldinelsr:{}
qi atunci exit ar fi superfluu.*/
t0rdna med )
iC.@+.'*- -d..1- * /x gtergeredomeniu */
if (isset (s_PosT [' srerge doheniu, ])) o .ll a
{
oo*""i, lF*"il SsqI = "DEI-ETE FROiI doeenii WHERE
alror ltr,.-+*--
lF,.t
mysql
id domeniu=" . S rosr {' id

query ($sq1) ;
cloneniu' r ,
Li\rdria *ta
':,r.'!rr !![!r:F:q!
Drint I'Doheniul a fosr grersl"; !!+!-:!!j+4

gu.t 3.are :pai!n 3.enui domen'!


]
/* modificarenumeautorx/ Prerudiur Fund.!iei de rsa:cA5 moe
Fundali. 5i Inp€riul de IsaacAs m.!

if (isset (S PosTt'modifica auror'I ))


Nu p!te!' :terse acest domen u
ivodica I
* Verificam dacd numelemodifica(
Modificareainformatiiloruneiinregis- Nu putemStergeun domeniuin care
al autorului a fost introdus. */
treriestesimple. existdcd4i.

CHIPSPECIAL SITEIJINAMIIJ
ED|T0RjAL,,
INTR0DUCERE,,
INSTAI-ARE,,
ORGANIZARE,I'4ysQL,,
PHP,,CREARESITE@, Ttps&TRIcKS

else if ($_Pos1l,pre administrareo sec[iune specialdpentru


{ moderare unde vom afiqa comentariile '
prait "Nu ati iorrodus pretutt"; noi (adiugate de Ia ultima moderare). a.clude (,'autorizare.php.') ;
] Pentru a afla care sunt oomentariile include ("a.Lrin,top. php,,) ;
else if ( lis_nmeric (S_msT I'pret/ l)) noi de la ultima accesarea sectiunii de
{ moderarevatrebui sdspecihcdmundeva r l v o l r . . . a r p
prut 'Pletul trebuie si fie care esteultimul comentafiugatamode- tarii utili?atori</irl >
numeric I scrieli <b>1000</b>, ral. Nu \om seta un cookic pentru ca <b>Comentarii 1e urilizaroriLor de ra
nu <b>1000 tei</b>,"' arunci am fi condilionalide lolo.irea !Lrima moderare</b>
l aceluiaqi calculator $i browser pentru
accesareapaginii de administrare.Vom 5sq1 = "SELECT * rROM comentarii,
I adiuga incd un cdmp in tabelul admin adnan, caitar aulori WtiERE
Ssql - "UPDATE carti SET unde vom pdstm id-ul ultimului comen- id or6r'd r o.ln ... 1 oe.-
i d c t o m e n i u * ". S l o s r l ' i d domeniu,l.", tadu moderat. modeiat AND carli. i.d .arre=
d d. o . " . 5 P O ,c . ' o d .o Cum id-urile sunt create in ordine conentarii . id carte AND
r r .S - P O S f a l ' t i t 1 u ' i'
titlu=r l. / crescdtoare,comentariilenoi vor fi cele carr:r. 1d autor-aurori. id,a!tor
descriere-' " . S Posr | , descriee, I ." . . care au id mai mare decat cel setat in ORDER BY id.,comentaiiu ASC',;
Piet=t'. S POSTIrpret']," 'THERE tabelul admin. Sd credm noul cdmp: 9resursa = nysql. query(gsq.L);
rd-carte=" . s PosT [, id carre' L
mys.l1 query(9sqr); ALTER TABI,E AdMiN ADD mysql-f etch_array (Sresr.rrsa) )
Pri.t " I.forftaiiiIe aD fosi ullim!l comenra.iu moderat tNT
iodificate | ,'; UNSIGNED DEFAU],T ''O'' NOT NUI,L;
I

l Ultimul comentariu moderat este in aclion="f orrulare froderare opinii.php


/'9terqere carte */ momentul de fali 0. Comentariilenoi le method="POS?n>
if (isset (5 PosTt'sterqe carre'l)) putem afla cu interogarca: <.liv sttle-"widri1:500px; border: 1px
{ sotid +ffffff; backqround-
$sqlcarre = 'DEIETE FROM carti SEIECT ' FROM conenr:ari;, adnin color:#F9F1E7; padding:5px.'>
l'il.lERE id carte=tr ttHERE comentarii. id cofrenraliu > <b><?=$ros [/ tirlu' ] ?></b> de
. S-IOST t' id,carre, I ; admin. ultiriul conentari! moderat; <?=lror l' rume_a!tor, I ?>
mysqr_que.y (Ssqlca!re) ;
."DrIClF
ssq Coaenra rpOV o-a-.dL_- Pentrua afla $ititludle qiautorii cdrlilor la
WHERE id_carle=". S_POSTl, id_carrer l; care sunt comentariinoi, interogarcaeste: "frail.o: <?=;row ['adresa_efrai]. I ?>">
mysql queiy (9sqlconenrarii) ; <?-$row t'nuRe utili2ator, I ?>
prinl "Cartea a fost Stearsa din SEI,ECT * FROM come.tarii, a.Iain/
baza de dale 1"; w-!l1l ).i oe Larr, <?:5rou 1'comentartu' I ?>
l achin,Dltinut,comenrariu moderai AND
carta. rd carte=comeniarii. id_ca(e
IND carti.id_auror=aurori.id autor;

Vom folosiaceastd inrerogarein pagi-


nade moderare comentarii5i r om adduga
Moderare comentarii un fonnular cu ajutorul cdruia sA putem
modifica valoarea cAmpului ultimul_
Urmdtorul lucru de carene vomocupa comentariu moderatla fiecarevizitd ast-
va li moderareacomentariilor vizitato- lel incdtdacdazi moderdmcomentariile,
rilor. Degi utilizatorul obignuit estebrne mAine sd nu vedem decdt comentariile
cresoutSi cunoa$teregulile neticheternu addugaredupd ultimul comentariu mode-
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 esad mt de azi. Dc asemenea,vom avea bu*
trebuiasci sd editali sau chiar sd qtergeti toanepentru modificare sau $tergereco-
unele comentarii. mentariu.
Sdmonitorizdmfi ecarepagindde carte Dupd ce vom revizui comentadileuti-
in fiecarezi pentrua vedeace comentarii Iizatorilor.modificandu-lesau Srergan-
noi au fost postatenu esteo solulie vla- duJc peceleneporri\ile.vom puleaapdsa
bili: necesiramulr rimp 5i ar fi practic butonul ,,Seteazi aceste comentarir ca
imposibild in cazul unui site cu multe fiind moderate"pentru a nu le mai vedea
cdrli. De aceea.\om a\ea in zona de Comentariilenoi Si incd nemoderate
la urmdtoareaverificare. ale utilizatorilorsite-ului.

CITIPSPECIAL SITEDINAX.4IC
EDITORIAL
, INTRODUCERE
INSTALARE
,, ORGANIZARE
MySQL
, PHP, CREARESITE
,,fiIIIIIF!.'I.!I , TIPS&TRICK
" "

apirea dacdnu avem comentariiin listi 9i /* fiind retumat un singur rdnd, nu


- J l l : l O i r , 3 r aloareavariabilei$ultimul comentariu folosim while */
ar fi nuld. */ ).q _'e "_" d\'5. . . j

L i|rdrio *e,t $nrcomentarii-mysql


if (Snrconentalii
nM

> 0)
roqs (Siesursa) ; <h1>Modifice</h1>

<b>Modifice acesl comenta.lu</b>

{
a o iiF'e . Q p rc!c'6 @?n o..r,pnp

method=r!OST">

o' " o --",e 'odeL.r- ooi_ .o o" Nume: <input type="textr


"
melhod-"POST"> nane="nune_utilizator"
<INPUT lype="hidden'' value= " <?=Sroq [ ' nse utilizator' ]?>">
name="u1iimul id" Enail: <input iype="resl.
vaiue=r'<?-$ultinul,id?>"> nane-"aclresa emai l"
<IN!UT lyoe*''submit'' aEtue"<?=Srst'ad-€$ <mil' l>"*r>'<br>

Formularulcu ajutorulceruiaputem nane*" seteaza,mode!are" Comenlaxiu: <br><textarea nane=


editaun comentariuneDotrivit... o1 ,6
_-6
6d /; "conentariu'!
ca frind moderate"> <?=$ros I' cofrentariu' I ?>
</textarea><br><br>

<input !:ype="hidden"

l name=rtid_cofrentariu"

I value="<?=S i!s1'l' id comentariu' I ?>">

Lt,rarm med <:nput type:"sutimit',

rame-"nodif ica" vatue="Modif ica">


r!r:rr! rr!! 1 :!i :j!r-!!r!!

E5t 5qur .; vre 5:5terq :ce3r..mentanul

srelq.l /* confirmare gtergerecomentariu*/


...sauchiar Eterge. if (is set ($,POsr l' sterqe' I ) )

<IN?UT lype-"hidden" Fiqierul care preia informaJiile din


name=" 1d comentariu" o p i n i i . p hrpa a f i 5 a 3f o r m u l a r ei n. f u n c g i e <h1>Srerqe</n1>

de butonul apdsat. Egii sigur cd vrei s; gtergi acest


<INPUT type="suLhit; - dacd s-a apdsatbutonul ,,Modifici"
naFe="nodifica" value="Mo.1ii1ca"> afiqeazdunformular astfelincet sdputem
' \D- ---9 edita confinutul mesajului;
roe-".-b._ " n.- " action:'prelucri@_ntrl:re_l](trrEtdii.Fp"
value=,,grelge"> - daci i-a apisar buronul ..$terge' meihod="POST">

afi5eazdun mesajde conlirmare5i un <input t:,?e="nidden"

buton pe careputem apasapentru a con- nane=rrrd-come.lariu''

$ultimul_id : $row['id comentariu']; +i1.mq erFraPreq' value="<?=$ FOST['id corectariu' ] ?>">


/* Aceastd variabili preia la fiecare - daca s-a apasatbutonul ..Sereazd <anput rype="subm1l"
iterare cu while a array-ului valoarea aceste comentarii ca fiind moderate", na(e="stexge" valre="$rerge">
id comentariu,ajungdndca la ultima ite- afigeazi un mesaj gi un buton pe care
rare sA aibi valoarea id-ului ultimului putem apisa pentru a confima cA am
comgntariu. teminat moderarea comentariilor din 1
Avem nevoiede aceastivaloareastfel n.a;h. nrp^adarrn
/* conhrmare moderare*/
incat sd putem seta valoarea campului if (isset (S PoSTI'seteaza moderate'l))
ultimul_comentariu moderatdintabelul {ormularemoderareoprniiphp
admin folosind fomularul umdtor. x/
include ("autorizare. php" ) ; <hi>seteaza cohe.tariile ca fiind
* in continuarevom )crie o smrctura i.clude ("adnin top.php" );
condifonald. /* fornular modifica.e comentariu. ,
DacAsuntcomenrariiinlistaafi5dLrn for- if (isset {$_Posr ['mod!fica' I))
mularul5i butonulde \elarea comentari- {
ilor ca fiind moderate.Dacdnu e nici un Ssql - "SEIECT r mOM comentarii I'HE!.E

comentariu in listd vom afiSa doar un id corentariu=".9 mST [' id,co'r€.tariu' ]; action="Fre1usa@,rc@rare_q€ntarii.dp!'
mesaj. Astfel evitdn erorile carear putea Siesursa * mysql-que.y(ssql) ;

CHIP SPECIAL SITEDINAMIC


ED|TOR|AL,,
INTRoDUCERE,,
INSTAI-ARE,,
ORGAN|ZARE,, pHp,, CREARESTTE@,
tyySQL,, T|PS&TR|CKS

l { care. Ce ne facem insd dacd sewerul nu


prini "c;rpul Conentariu este gott ; poatetnmite email?Saudacdun virus gterge
datele de pe partila unde pestldm email-
urile? Putem face o pagini in sec$uneade
{ administrarecu ajutorul cdreiasi monitor-
/* campudle suntcompletate,
sefacem izdm comenzile, la fel cum modedm co-
modificarea
in bazade date*/ mentariile.Avem o singuraproblema:
Comentariiledejamoderatenu vor mal
apereala urmetoareavizitdin sectiunea 9sq1 = "'PDAT: comentarii SET comenzilesefac in zile diferite, banii nu vtlr
administrative. lre Ltiliatoi? ". S ECBrI'r@ uriliztoi -
I, , neapdnt in ordineain careavemcomenzile
&ires <rul="'.S ICSI i. adresa-@it, I .r,, in baza de date.Agadarnu putem pune pur
cor€.rarrf,='".S EaSTt ' .omentarru, I ", qi simplu un nou cdmp in tabelul admin cu
''H:RE ic ccne.tariu=" "ultima comanddonoratd"deoarecepot ex-
. s P O S T[ ' i d comentari!,]; ista comenzimai vechi decAtaceea,comen-
mysql query(Ssql); zi pentru care itcd nu au venit banii. Va

i|rdria 'mea
lr,l]-". ]rL -
print

l
'Co(enrariut a fosr modificart.'; trebui atunci sI facem o delimitare per co-
mandd,indiferentde datasauid-ul acesteia.
l Vom lace urmitorul lucru: in tabelul tran-
.r t,l i/ i,r h, aht \ t,. (...','..t r.t tutii 1nili I r nti
/x $tergerecomentariu*/ zactii (tabelulde comenzi)vom md adiuga
Con€nt.riil! utilizdtorilord.la ultimd noderare 1 f ( 1 s s e t ( S _ P o s T[ ' s t e r q e , ] ) ) un cdmp;comanda onoratacarepoateavea
{ doudvalori: I dacdtranzacliaa fost efectu-
Nu exisii nici un comentariu nou ne- $sql="DEI-ETE FROM comenrarii'r,rHERE at cu succes(am primir banii.am trimis
moderat de Ia ultima accesare a id,.rmntariF" . S,IOST l' id d€nranu,l; cirlile) sau0 dacdcomandanu a fost (incd)
sectiunii de administrare, hysql query(Ssql); onorati. Sd addugdmnoul cimp in tabelul
prrnt "Comenlariul a fost: grerst"; tranzactii, cu valoareadefault 0:
<1nput type=".idden,'

name="rlr:mul id" /* setareaultimului comentariumode- ALTER TABIE :ranzactii ADD


raltre="<?=$ P O S Tl , u 1 i : r u l id. j ?>"> rat in tabelul admin */ cohanda.onorata TINYINT UN"SIGNED
<inpu: type="surnii" nane=" if (isser (S posr[/ sereaza_mode.a.e, ] ) ) DEIAUIT "0" *'OT NUI,L;
seteaza modeiate" value=,'Da I , ? { SEI,ECT * FROI4tranzacaii;
9sq1 - I'UPDATEadnin SET

ultim!1 comentari! mcderar=" Sd scriem qi codul pentru figierul


l . s , P O S T[ ' u l t i m u l icl' ] ; comenzi.php.in acestavom avea toate
nysql query ($sql) ; comenzileneonorate cutoatedetaliilen€oe-
</body></htnr> p ' i
o o ) sare: nume qi adresdcumpdrdtor,data,
$i, in final, fiqierul care preia datele l c64ile comandate,numdrul qi valoarea
din lormulare moderare_opinii.phpgi 1or.De asemenea, pentrufiecarecomandi
efectueazdmodificdrile in baza de date: vom aveadoudbutoane:,,Comanddono-
ratd" pe oarevom apesaatunci cand vom
prelucrare_moderare_comentarii.php fi primit banii ti trimis ce4ile penhu co-
Testali functionareaacestorscripturi, mandarespectivigi ,,Anuleazicomanda"
iiclude ("auto.izaxe, p h p ' ,) ; modificdnd gi qtergAndcomentarii. De pe care vom apdsaatunci cAndcouranda
lnclude {"adni. top,php',) ; acum, la fiecarenoud vizitd in sectiunea estefoanevechepi urilizatorul nu a trimis
/x modrficare comenta!iu*/ de administrarenu veti vedea decat co- incd banii sauatunci cdnd utilizatorul ne
i f ( i s s e t ( $ _ P o s Tt ' n o d i f i c a , mentariilenoi, nemoderate.Daca mai
I )) anuntdcd nu mai dore$tecdrtile coman-
{ addugati administrato ai site-ului, toti date).Iatd codul:
/+ Verificdrn sdfie completatecenpu- vor vedea cele mai noi comentarii, rn-
rile. */ diferentde cine le-a moderatpe ultimele. comenzi.php
if (S_Posr ['nme-utilizaior' ] == ",,)

Comenzi incl!de ("autorizaxe.php" );


print "Nu ai conpletai numele rnclude ("admin top.php,') ;
utiLizaroruLuit"; Am vdzutcumatuncicandselaceonoua
] comanddputem primi un email de notifi- <h1>Cofrenzi</hi>
else if (s_PosT [ ' adresa-emiI' ] - "")
{
prmr'ltd ai @pletat adEsa de (mifl';
l
eise ii (9_PosT[,comenrariu,l =- "")

CHIPSPECIALSITEDINAMIC
INTRoDUcERE,,
EDITORIAL MysQr, PHP, CREARESITE
INSTALARE,,oRGANIZARE @,, TIPS&TRICK
" "

while ($rowcarre =
<b>Conenzi inca neonorate</b>
mysql_f erch,array (Sresursacarti ))

/* Afiqdm lista comenzilor neonorate {


'<Lt><td>'
(WHERE comanda onorata:o) drn print

tabelul tranzactii; x/ .Sxoucarte[',titlu']' de


l-Ibrdrw mea
: :.,..1 u-u-:r.::.. .L 1-111--' . !:1
= "SE]-ECT id ' . Srowcarte [' nune artar' ).' </].d>
Ssqllranzactii tranzactie,
' td-5n tsY- ) <td align="right">
DATE_EOR AT (data_rranzactie.
' . $xowcarte l'nr-bLrc'I .'</td>
as data rlanzactie,
sr !!!r ?7,3!drci
nume_cumPa!a!or. adresa_cunpa!ator <td aLign="riqht">
'.$rowcarre['pret' </td>' ; p.uurur*. i.ri";t.'"
FROM rlanzactii wsERE ].'

cordanda onorata=0"; /* Calculdm totalul pentru aceastdcarte (omfeoodr


I I bdsdonrd'
,-"^r + nr hr,.\*/
/* DATE_FORMAT este o tunclie a
*
MySQL cu careputem fomata o date 9total=$roscartel'Pret' I

stocati intr-un tim€stamp dupi cum Sioucartel'nr buc'l;


'* Afi$amacesttoLal5i apoi il adundm
dorim (in cazul de fa1d, zz-ll-aaaa).
Func{ianu modificd nimic in baza de la totalul generalp€ntru aceastAcomanda:
dateci doar afiqeazi un TIMESTAMP
intr-un format mai utor digerabil (04-
03-2003in loc de 20030304).*/ . stotal. '</td>
aliqn="r:iqht">'

s!esursaTtanzact!! = /x comandaa fost onomtix/


nysql,querY ($sqlrranzactii) ; Stotalceneral = Stolafceneral r il (isse! (S rosr['comanda onorata'l))

while (9rotTranzactre = I

nysql felch_aday(SresursaTranzactir) ) ] /* setdmcampul comanda onorata:l


I
in tabelul hanzactii penhu aaeastaco-
mandi x/
<TD colsPan="3" 9sq1 = "UIDATE tranzactii SET

aLiqn="right">1otaL comand;:</td> conanda onorata=1 wllERE


act ion= "pre lDc rare_conen z t . phP "
<td><?=$to!alGeneral?> 1ei</td> id tranzacriF'. $-tosT ['id tratactie'];
nethod-"P051">
ny3qr_query (Ssql) ;
Data cofrenzrf:

<b><?=$ror{ranzactie ['.lata uanzactie' j ?> /* 9i afiEdmun mesajx/


<INPltI t:,?F'hidden" print "conanda a fost onorat;1";

<div style*"width:500px; border: 1Px nG"id ixanzactie" value: l


*/
solid +ffffff; backqround- "<?=Srodrranzactie I/ id tranzacrre' I ?> " > /* comandaa fost anulata
<INPUT tyPe="subnit" i f ( i s s e r ( S _ P o s T{ ' a n l t e a z a comanda'l))
color:+F9F1E7; Padding:5Px">
<b>< ?=$ro&'rranzacL:e ['nlre cunparalor'l ?> name="comanda-onorata " {
vaLJe="conande onoratS"> /* Etergemtrarzac{ia (din tabelul tran-
<?=5ror'Irdzaclie '
I adresa,cwparato!' I ?> <TNPUT type:"subnit" zactii) 5i cdrlile comandate (din tabelul
<TABLE border-"1" cellpadding="4" name="anuleaza_comanda" vanzai)x I
conanda"> SsqlTranzaclii ='DE1,ETE FROM
cellsPaclnq=" 0"> value="Anuleaz;
tranzactii i'iHERE id tlanzaclie-"

<td align-"cenrer"><b>Carte</b></rd> . S Posr [' id rranzactie' ];

buc</b></rd> nysql,querY (Ssqlrranzactit) ;


<td aliqn-.cenler"><b>Nr.
_ p o r ' {v . zal'
<td a1i9n="center"><b>?re!</b></td> l ssq,'.!L "DL-d E L

<td atign="celter"><b>To!al</b></td> wllERE id_tranzactie="

- $_PosT [' id rranzactie' ] ;

nysql_que!y (9sqlcarti) ;

* qi.pentrufiecaretranzactie.
ali$Am /+ qi afiEdmun mesajx/
ca4ile comandate (titlul ti autorul), Nu vom mai trece prin formulare de prin! "conanda a fost anulat;]",

numiml qi valoarealor: */ confirmare(gtiii deja cum sd face{i acest l

9sqlCarti = "se1ect airlu, lucru), facemdirectun fiqiercareoperea-


nume_autor, pret, nr buc fron zi modificirile in baza de date:
vanzali, carti, autorr where

carti, id,carre=vanzari. id carle prelucrare_comenzi.PhP


and ca!ti.id auto!=autorr.id_ant.r Aceastaa fost sec{iuneade admrnts-
and id_tranzaclie=" . include ("autorizare.PhP") ; trare.Acum ave!i un sile hmclional.si-
SroeTran2actie l' id_tranzactie' I; incrude ("adnin toP'PhP") ; gur, uqor de navigat Ei mai ales uqor de
query($sqlcarr1) print admrmstrat. I
9resursacarti<ysgL ; "<h1>conenzi</h1>";

- SITEI]INAMIO
CHIPSPECIAL
EDITORIAL
,, INTRODUCERE
, INSTALARE
,, ORGANIZARE
, lvlySQL
,, PHP,, CREARE
SITE,, ADMINISTMRE
"@

Tips and tricks


,\

lntrebiri frecvente
In acestcapitol veli afla cum si crea(i aplicafii on-line sigure qi cum penhu iffegistareape site esteSELECT
* FROM usersWHERE nume:'$nume'
si vi proteja{i de neplScerile giurilor de securitate.
and parola:'$parola' 9i dacdinterogarea
esteexecutatdcu succes,utilizatorul este
fi m adunatin aceslcapilol ra.pun- 1. Variabileleglobale logat. in acestcaz, folosind parola ' OR
/lsurile la celemai arzatoareintrebAri 'l : I oricine poate avea accespe site
puse de programatorii incepdtori. Ele- Avdnd variabilele globale ON puteli deoareceinterogareaSELECT + FROM
mentecarelaprimavederearputeapdrea accesadateletrimise prin formulare mat users WHERE nume='un nume oare-
'1
inofensive pot fi pedculoasedacd sunt simplu: $variabila in loc de care'AND PAROLA=" OR : l' este
p r i ri t ed i na l t u n g h i V
. a r i a b i l e lgcl o b a l e . $_GET['variabila'],la fel qipentruPOST executatecu succesgi refumeazaun re-
lipsa ghilimelelor magice qi extensiile sau FILES. Dacd scriptul nu estefoarte zultat (toate iffegistrtuile din baza de
[i5ierelorpot fi lolosite impotrira bine g6ndit, variabilele globale pot date,de fapt).
dumneavoastr6. prezentaun risc major de secudtate.Din Mai mult, atunci cand v5 aSteptapca
acest motiv php.ini este distdbuit cu bazade date sdretumezeun singur rdnd,
Misuri de securitate globals:off in ultimele versiuni. verificali acest lucru gi nu dacd intero-
gareas-a gxecutarcu succes:
Securizareaaplicaliilor on-line este 2. Ghilimele,,magice"
un subiect vast abordat in nenumirate /* aganu */
cirli. Aici vom vedea doar citeva din Dacd in php.ini magio quotes gpc Ssql = "SE]-ECT * IROM users IiAERE

metodelepe careun programatorPHP le suntOFF folosif funclia addslashes pen-


are la indemdndpentru a scrie aplicafii trua preceda g h i l i m e l e ld
e i n d a t e l en r - $resursa = mysqr,query (Ssqr) ;

mai sigure. mise de utilizatori cu caracterul\. DacA


Regula numdrul unu a securitAliion- magic quotes gpcsuntON. PHP adaugd {
l i n e e . t e : n u r a i n c r e d e fni i c i o d a t di n automatoaracterul\inainte deghilimelele .,. aulenlr.fr.cat,..

utilizator. intotdear.rnaverificali datele dar dacd ele sunt OFF, ghilimelele din )
trimisecdtreseryer$i,,cul6,tati-le" inaint€ input vd pot crea probleme serioase.Ca /* aga da x/
de a le utiliza.Penlruaceasra trebuiesi exemplu, sd presupunemcd interogarea 9sql = "5!LaCT * EROM users IdHERE

considera{icdtevaposibile,,gduri": SQL de verificare a numelui qi parolei nume:, $nume, and parola='Sparola"';

Sresursa : mysql query(9sq1);

{
... autentificat...

Notd: magic_quotes_gpcsunt impli-


cit ON in php.ini pentru a vA proteja de
astleldeatacuri,darestebinesdr erificati
inainte de a remrn{ala addslashes.

3. Includere
lncercalisi evitagiincluderea..riz-
ibil6" a figierelor in forma http://site.ro/
fisier.php?fi1e:cutare.htmlpentru a rn-
clude figiere in cadrul unei pagini. Cu
putindneatenliedin paxteavoastreataca-
torul ar putea accesa astfel informatii
sensibiledin cadrul sistemului.
Nu includeli figierestreine.PHPpoate
,,include" figiere aflate pe alte servere
dec6tcel careruleazddacd setareaURL
fopen wrappers esteactivatdin php.rnl.
In exemplulde mai sus.un alacalorar fi
Pe site-ul Secure Realitygisiti mai multe articole privind securitateaPHP. putut accesaadresa http://site.ro/

CHIP SPECIAL S]TEDINAMIC


EDITORIAL
INTRODUCERE,,
INSTAURE,,
ORGANIZARE
MISQT,PHP,,CREARTSIE,,
ADI4INISTRARE,@
" "

fisier.php?file:http://www.raul.ro/
scriptrau.phppentru include in fiqier un
script localizat pe alt ser"vergi astfel
obtine acces cAtre toate resursele
sistemului la careare accesPHP,putand
executa comenzi de sistem, afiga
informalii confidenliale sau fterge baza
de date. Nu permiteti includerea
figierelor din altdpartedecAtde pe sewe-
rul vostru. Setali allow_url_fopen:Off p€plo!ihd
Two: Honevd ift1he
in php.ini.
Th s c tha se.ond Fbdof a th.ee part

4. Formulare
. . . c o m p . 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 .
ihe nbni i! to tedHdnayd br rernq
Folosili metoda POST in formulare
atunci cdnd informatia din acesteaur-
meazi sd he inhodusd in baza de date.
Am sd vd dau un exemplu: sd presupu- j u m p n q ! h i p , a i d a n a r y + r4 o f r t h a t o n r y

nem cd avem un formular cu ajutorul


cdruia utilizatorii pot introduce pdrerile
Ior despr€site, formular caxeesteprelu-
crat de cAtreun hsier userinput.phpr

formular.html
<form action="userinpua.php'/
Pe SecurityFocus.comsunt prezentatecele mai noi geuri de securitate intalnite in
aplicalii.
<]]ertarea name-"par in acest mod. Avdnd la dispozilie un lizatorilor. inchiderea gi deschiderea
dictionar, intuitia sauun generatordeparole browseruluipentruaincercade 3 ori este
<input type="submit"> sepoateaccesafoarteusorgi rapid adresa suficientde descurajantAca sAdelermine
www.site.ro/login.php?username= un hacker sd i$i caute de lucru in altd
NumeleTau&parola:aaa, www.site.ro/ pafie.
usgrilq!!!!p login.php?username:tu&parola:aab,
w w w . s i t e .r o / l o g i n .p h p?u se r n a me = 5. Extensii
m y s q l _ c o n n e c r( . . . ) ; tu&parola:aac ai agamai departepdndla
mysql_query ("insert inro pareri descoperireacombinalieivalide de nume O practicd obi;nuitd estede a acorda
values ( '$parerea mea. )") ; gi paroli. in acestcaz va trebui sdpunefi extensia.inc figierelorcareconlinbiblio-
o prolecliesuplimentard caresd nu per- teci de funclii ce urmea,/A a fi incluse5i
mite mai mult de trei incercdri consecu- folosite in cod. PHP nu parseazdfigierele
Dacd variabileleglobale sunt OFF in tive e$uatede logare pentru un nume de cu extensia.inc qi dacdacesteasunt ape-
php.ini sau metodade transmiterea for- utilizator. Iatedirect ele sunttrimise plain text cdte
mularului este CFT, un utilizarorrdu Aceastd problemd se rezolvd rapid browser.
intenlionalar puteaaccesaadresahhp: folosind sesiunile.in momentul in uare Evitati expunereainformaliilor daci
site.rolusednput.php?parereamea:blabla un utilizator trimite numele qi parola da{i acestorfiqiere extensia.php - astfel
gi ar introduce comentariul ,,blabla" in citre login.php,putem setao variabildde ele vor fi rulate in loc si fie afigate.Nu
baza voastrd de date IbrA sd treacdpro- sesiune$_SESSIONI'logincount'] care puneli informalii sensibile (precum nu-
pdu-zis prin site. se,tindminte numdrul incercirilor. Cdnd mele gi parola cu care vd conectali la
Dacd vd gdndili cumva cd astan-ar f1 valoarea acesteiatrece de 3 (trei incer- serverul MySQL) in fi$iere cu extensia
chiaro problemaatdtde mare,imaginati- c A r i n e r e u $ i t e n) i c i m d c a r n u m a i .inc. .txl sau.hrmlcarepol fi accesate $i
vi cd ,,riufacatorul" scrie un script care interogaJibaza de date pentru a verifica a vdzute.
acceseazd adresaftrA opriretimp de cdte- patra incercaxe. Folosili pentm acesteafi$iere cu ex-
va ore. Daci legdtura lui la Intemet e Variabila$_SESSION['login_count'] tensia .php care, dacd sunt accesatedi-
bun5.e posibilca a douazi diminealdsA va rdmaneinmemorie catbrowseruleste rect, vor fi rulate fird sA afigezeinfor-
vd tuezitifU.respaliu p€ server,cu cateva deschissi sesiunea acriva{opliuneaim- matiile conjinute in ele.
milioane de comentariicarespun acelasi pliciti a PHP de mentinere a sesiunilor Cum spuneam,acesteasuntdoar cate-
lucru: ,,blabla". active este de o ori). Dace atacatorul va din metodelepe care le puteti folosi
Verificarea provenientei cererilor agteaptdo ori sauiti inchide browserul, pentru a face aplica{ii sigure. SiguranJd
cire serveresrefoafle imporlanlaSi in sesiuneava fi inchisd 9i va puteaincerca absolutdnu existdinsd prevenireapoate
alt caz:formularelede login: Cinevacare de alte trei ori sd se logheze. fi salvatoaxe. Mai multe informa{ii pri-
vd gtie numelede utilizatorar pureasA De celemai mulle ori aceasrd masurd vind securitatea puteli gesilawww.secure
incerce (9i, cu ceva noroc, chiar sd reu- de siguranldestesuficient6pentru a pre- reality.com.au gi www.sccurityfo
$easce)sevd gdseascdparolafoarte uqor veni incercarilede aflare a parolelor uti- cus.com. T
CHIP SPECIAL SITEDINAMIC

You might also like