Chip Special - Website PHP
Chip Special - Website PHP
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.
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).
CHIPSPECIALSITEDINAI4IC
, llllEtiltlGln,
EDTToRTAL ,, oRGANTzARE
TNsTALARE ,, pHp,, CREARE
, MysQL srTE, ADMTNTsTRARE
,, Trps&TRrc
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
"
CHIPSPECIAL SITEDINAMIC
EDTToRTAL
,, |NTR0DUCERF oRGANtzARE ,, TlPs&TRlcK
ADM|NiSTRARE
, M)6QL,, PHP,, CREARESTTE
"@ "
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.
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.
Introducerein MySQL
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
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:
CHIPSPECIAI SITEDINAMIC
EDIT0RTAL,,
TNTRODUCERE,
TNSTALARE,0RGANTzARE pHp,, cREARESTTE,,
ADMTNTsTMRE,
Trps&TRrcKs
@
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)
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
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';
Itrtl-u
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
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:
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:
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
labaza de date, s-au extras informa{iile asiguraJi-vdci serverulweb estepomit $i $!o!al = Sprirul*nunar +
a inceput sd il cunoascdde cdnd Zeev le veli accesain browser la adresah!!p!: $al dotlea runar;
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> 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");
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
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
= 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.
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) ;
.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
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
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
CHIPSPECIAL S]TEDINAMIC
ED|TOR|AL
,, TNTR0DUCERE
, INSTA|-ARE
,, 0RGANTZARE
, tyySQL
,@ ,, cnrnarsrE , ADMINIsTMRE
,, TIIS&TRICKS
CHIPSPECIAL_ SITEDINAMIC
EDTToRTAL
,, TNTRoDUCERE
,, TNsTALARE
,, oRGANTzARE
MFQL, @,, cnrnnrsrE,, ADrvrNrsTMRE
, Trps&TR
"
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
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):
;
CHIPSPECIAL_ SITEDINAMJC
EDTTORTAL
, TNTRODUCERE
,, INSTA|-ARE
, 0RGANTZARE
MySQL
,,@ ,, Cneme
srE ,, ADM|N|STMRE
,, T|PS&TR
"
Sresursa2 = nysql
FRoM domenii";
query(Ssql2); Rulali scriptul accesandadresahttp:// r Romeo
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
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
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,,>
OHIPSPECIAL SITEDINAMTC
EDITORIAL
,, INTRODUCERE
,, INSTALARE
,, ORGANIZARE
, IU1i,SQL
,, PHP,, @@ ,, ADIYINISTRARE
,, TIPS&TRICK
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
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">
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
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
CHIPSPECIAL SITEDINAMIC
EDtToRtALTNTRoDUCERE
,, TNSTALARE
,, ORGAN|ZARE
MysQL
, eHe" @,, AD|\I|N|STRARE
, Ttps&TRtcK
" "
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;
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;
{ {
<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 ,
'| ON , b c' I
CHIPSPECIAL SI1'EDINAI.'{IC
E
&ED[OR|AL,,|NTRoDUcERE,|NSTALARE,0RGANlZARE"|YysQL,,PHP,,@,ADM|NlSTMR
I-
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
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"
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 *
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
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 ;
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:
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) ; )
.osu.pl'p
Ssol ^ELF I
Stex! = "un text oarecale"; FPO|,4-r'
1
Textul cdutat este evidentiat in rezul-
print "<i>Nici !n rezultat</i>"; tatele cdutarii.
l
Administraresite
<td><INPUT
Stepanul datelor
type="subiit,,
value="Aurentif icare"></td>
*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
/* verific;fr intai dac; au fos! con- I sEssIoN ['parola encriptata'] * '". S sEssIoN encriprata']."'"'
['parola
plerare amandouA campuxile i/ SparolaEncriptata; $resursa = mysql query($sql);
{
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.
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
CHIPSPECIATS1IEDINAIIIC
EDIToRIALINTRODUCERE,,
INSTALARE,ORGANTZARE
lYySQL,,PHP,, CREAREslTE,tltlllllt+l*,Lll
,, TtPS&TRtc
" "
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
OHIPSPECIAL SITEDINAMIC
EDTToRTAL
, TNTRoDUCERE
,, TNsTALARE
, oRGANTzARE
" , plp , cREARE
NrlsQL srTE
llll|ililFE{if ,, Trps&TRrcKs
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
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/ ;
" 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
liltTD (r5 -.
a : - -
EDITOR|AL,,
INTRoDUCERE,INSTALARE,,
oRGANlzARE,lvlysQt,,
PHP,,IREARESITE,,tllllllllFl![il
,, TIPS&TR
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
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
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
"
CHIPSPECIAT S]'I'EDINAI{IC
EDITORIAL
INTRODUCERE
, INSTATARE
ORGANIZARE
, MysQL
,, PHP,, CREARESITE
II''IIiIFilT,, TIPS&TRICK
" "
<INPUT type='!rexr" */
/- 9tergere autor
!ame="nufre,doneniu', if (isset (s_PosT t, srrerge-a!ror, I))
value="<?=Snume-doneniu?>">
CHII'SPECIAL SITEI]INAMIC
EDlTORtAt,
'NTRODUCERE,
|NSTAIARE, MysQr-pHp CREARES|TE@)
oRGANtzARE, Ttps&rRtcKs
" "
{ {
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
ttt:tod="no"t"t l
query ($sq1) ;
cloneniu' r ,
Li\rdria *ta
':,r.'!rr !![!r:F:q!
Drint I'Doheniul a fosr grersl"; !!+!-:!!j+4
CHIPSPECIAL SITEIJINAMIIJ
ED|T0RjAL,,
INTR0DUCERE,,
INSTAI-ARE,,
ORGANIZARE,I'4ysQL,,
PHP,,CREARESITE@, Ttps&TRIcKS
CITIPSPECIAL SITEDINAX.4IC
EDITORIAL
, INTRODUCERE
INSTALARE
,, ORGANIZARE
MySQL
, PHP, CREARESITE
,,fiIIIIIF!.'I.!I , TIPS&TRICK
" "
> 0)
roqs (Siesursa) ; <h1>Modifice</h1>
{
a o iiF'e . Q p rc!c'6 @?n o..r,pnp
method=r!OST">
<input !:ype="hidden"
l name=rtid_cofrentariu"
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) ;
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,'
CHIPSPECIALSITEDINAMIC
INTRoDUcERE,,
EDITORIAL MysQr, PHP, CREARESITE
INSTALARE,,oRGANIZARE @,, TIPS&TRICK
" "
while ($rowcarre =
<b>Conenzi inca neonorate</b>
mysql_f erch,array (Sresursacarti ))
while (9rotTranzactre = I
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;]",
- SITEI]INAMIO
CHIPSPECIAL
EDITORIAL
,, INTRODUCERE
, INSTALARE
,, ORGANIZARE
, lvlySQL
,, PHP,, CREARE
SITE,, ADMINISTMRE
"@
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
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
{
... autentificat...
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/
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
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