Sunteți pe pagina 1din 68

Proiectarea i realizarea unui Parc Auto

virtual

Coordonator:
Absolvent:
2007

Cuprins
Generaliti .................................................................................................................3
Cap. 1 Tema proiectului...............................................................................................7
Cap. 2 Descrierea aplicaiilor folosite...........................................................................8
2.1 Introducere n HTML................................................................................10
2.2 Introducere n CSS....................................................................................17
2.3.ComenziMySQL....................................................................................... 24
2.3.1 Tranzaciile MySQL folosind PHP...............................32
Cap. 3 Prezentare Site.......................................................................................................45
3.1.Structura bazei de date.................................................................................50
3.2. Administrare pagina....................................................................................52
3.3. Managementul categoriilor.........................................................................54
3.4. Adaugare anun...........................................................................................55
Concluzii...........................................................................................................................57
Anexa Cod Surs...............................................................................................................59
Bibliografie........................................................................................................................69

Generalitaii
Mai mult de 600 de milioane de oameni navigheaza pe internet. Cu ajutorul unui site web
te poi adresa acestor persoane, ii poi expune propria oferta de produse i servicii web la
un pret scazut, 24h /zi, 7 zile /saptamana!
De ce am nevoie de un site web?
Internetul a devenit o parte integranta a vieii de zi cu zi. Milioane de oameni acceseaz
zilnic situri din intreaga lume n cautare de noi i noi informaii care sa le satisfac
necesitaile. Un site web poate oferi companiei dumneavoastra o identitate prin care sa v
evidentiai pe aceast vast piaa de desfacere reprezentat de Internet.
Ce presupune realizarea unei pagini web?
Realizarea unei pagini web este un proces compus din mai multe etape strns legate intre
ele:
Consultant n aceat prima etap se discut scopul sitului, coninutul i
funcionalitatea sa.
Designul paginii web, presupune crearea stucturii de baz a sitului, scheletul pe
care se va aduga coninutul. n general acest lucru e reprezentat de crearea
structurii XHTML i a stilurilor CSS. De asemenea sistemul de navigaie se
implementeaz tot n acest stagiu.
Adugarea coninului util (texte, imagini) impreun cu editarea i adugarea
fiierelor media (imagini, animaii flash, sunete, video) ce vor fi incluse n site.
De obicei, n acest stagiu se face i optimizarea pentru motoarele de cautare
(optimizarea de baza).

Verificarea compatibilitatilor cu majoritatea browserilor existente (sub diverse


configuratii pe diverse platforme) i incarcarea pe un server web. De asemenea
se valideaza codul sursa.
O pagin de Web poate s conin referine la alte pagini. S explicm cum sunt
implementate aceste referine. nc de la crearea Web-ului a fost clar c pentru a avea o
pagin care s indice spre alt pagin este necesar un mecanism care s permit numirea i
regsirea paginilor. n particular sunt trei ntrebri la care trebuie sa se rspund nainte de
a se putea afia o pagin:
1. Cum se numete pagina ?
2. Cum este localizat pagina ?
3. Cum se face accesul la pagin ?

Dac fiecare pagin ar avea un nume unic, atunci nu ar exista nici o ambiguitate n
identificarea paginilor. Totui, problema nu este nc rezolvat. S considerm de exemplu
o paralel ntre oameni i pagini. n SUA aproape fiecare persoan are un numr de
asigurare social; care este un identificator unic, astfel nct nu exist dou persoane cu
acelai numr. Totui, cunoscnd numai numrul respectiv nu exist nici o posibilitate de
a gsi adresa persoanei respective, i sigur nu se poate afla dac persoanei respective
trebuie s i se scrie n englez, spaniol sau chinez. Web-ul are practic acelai fel de
probleme.
Soluia aleas identific paginile ntr-un mod care rezolv toate trei problemele n acelai
timp. Fiecare pagin are un URL (Uniform Resource Locater - adresa uniform pentru
localizarea resurselor) care funcioneaz ca nume al paginii general valabil. Un URL are
trei componente: protocolul, numele DNS al mainii pe care este memorat fiierul i un
nume local, care indic n mod unic pagina (de obicei numele fiierului care conine

pagina). De exemplu, URL-ul departamentului din care face parte autorul este:
http://www.cs.vu.nl/welcome.html
Acest URL este format din trei componente: protocolul (http), numele DNS al serverului
(www.cs.vu.nd) i numele fiierului (welcome.html), cu semnele de punctuaie
corespunztoare.
Se utilizeaz notaii care reprezint prescurtri standard. De. exemplu user/ poate s fie
pus n coresponden cu directorul WWW al utilizatorului user, folosind convenia c o
referin la directorul respectiv implic un anumit fiier, de exemplu index.html. De
exemplu

pagina

autorului

poate

fie

referit

ca:

http://www.cs.vu.nl/~ast/

chiar dac de fapt numele fiierului este diferit. Pe multe servere un nume de fiier indic
implicit pagina organizaiei creia i aparine serverul.
Acum ar trebui s fie clar cum funcioneaz hipertextul. Pentru a face o poriune de text
selectabil, cel care scrie pagina trebuie s furnizeze dou elemente: textul prin care se
face selecia i URL-ul paginii care trebuie adus dac textul este selectat. Cnd se face
selecia, programul de navigare caut numele serverului utiliznd DNS-ul. Pe baza adresei
IP a serverului, programul de navigare stabilete o conexiune TCP spre server. Utiliznd
aceast conexiune, se transmite numele fiierului utiliznd protocolul specificat. Bingo.
Acum sosete pagina.
Protocolul http este protocolul nativ pentru Web; e1 este utilizat de ctre serverele de
HTTP.
Protocolul ftp este utilizat pentru accesul la fiiere prin FTP (File Transfer Protocol -protocol pentru transferul de fiiere), protocolul Internet de transfer de fiiere. FTP este
utilizat de peste douzeci de ani i este foarte rspndit. Numeroase servere de FTP din
toat lumea permit ca de oriunde din Internet s se fac o conectare i s se aduc orice
fiier plasat pe un server FTP. Web-ul nu aduce schimbri aici, face doar ca obinerea

fiierelor s se fac mai uor, pentru c FT'P are o interfa mai puin prietenoas. n viitor
probabil c FTP-ul va dispare, deoarece nu exist nici un avantaj pentru o organizaie s
aib un server de FTP n loc de un server de HTTP, care poate s fac tot ce face un server
de FTP, i chiar mai mult (desigur mai exist nite argumente legate de eficien).
Este posibil s se fac acces la un fiier local ca la o pagin de Web, fie utiliznd
protocolul file (fiier), sau pur i simplu utiliznd numele fiierului. Aceast abordare este
similar utilizrii protocolului FTP, dar nu implic existena unui server. Desigur
funcioneaz numai pentru fiiere locale.
{Protocolul news permite unui utilizator de Web s citeasc un articol din tiri ca i cum
ar fi o pagin de Web. Aceasta nseamn de fapt c un program de navigare este n acelai
timp i un cititor de tiri. De fapt multe programe de navigare au butoane sau elemente de
meniu care permit citirea tirilor USENET mai uor dect daca se utilizeaz cititoare de
tiri obinuite.
Protocolul news admite dou formate. Primul format specific un grup de tiri i poate sa
fie utilizat pentru a obine o list de articole de la un server de tiri preconfigurat. Al
doilea format cere identificatorul unui articol, de exemplu AA0134223112@csutah.edu.
Programul de navigare aduce articolul de la serverul corespunztor utiliznd protocolul
NNTP.
Protocolul gopher este utilizat de sistemul Gopher, care a fost proiectat la universitatea
Minnesota. Numele este cel al echipei atletice a universitii, the Golden Gopher, de
asemenea acest nume este utilizat n argou pentru go for; adic o comand de aducere
Gopher-ul a precedat Web-ul cu civa ani. Este o metod de regsire a informaiei,
similar conceptual cu cea utilizat de Web, dar acceptnd numai text i imagini. Cnd un
utilizator se conecteaz la un server de Gopher, va avea la dispoziie un meniu de fiiere i
directoare, fiecare intrare putnd s fie conectat la orice meniu de Gopher oriunde n
lume.

Marele avantaj al Gopher-ului n raport cu Web-ul este c funcioneaz foarte bine cu


terminale ASCII care afieaz 25 x 80 caractere i din care exist nc foarte multe n
lume. Pentru c este bazat pe text, Gopher este foarte rapid. De aceea n lume exist multe
servere de Gopher. Utilizatorii de Web pot s acceseze un server de Gopher i s vad
fiecare meniu Gopher ca o pagin Web cu intrri selectabile. Dac nu ai lucrat cu
Gopher-ul utilizai maina favorit de cutare n Web pentru a cuta cuvntul gopher.
Este posibil s se trimit cerere de cutare complet unui server de Gopher utiliznd un
protocol gopher+. Ce se va afia este rezultatul cererii transmise serverului de Gopher.
Ultimele dou protocoale nu unt de fapt protocoale pentru aducerea unor pagini de Web
i nu sunt suportate de orice program de navigare, dar sunt utile. Protocolul mailto permite
transmiterea de pot dintr-un program de navigare. Pentru a face aceast operaie se
selecteaz butonul OPEN i se specific un URL constnd din mailto: urmat de adresa
destinatarului. Majoritatea programelor de navigare vor rspunde cu un formular care are
intrri corespunztoare subiectului i altor informaii din antet i spaiu pentru mesaj.
Protocolul telnet este utilizat pentru stabilirea unei conexiuni pe o main aflat la
distan. Se utilizeaz n acelai fel ca i programul Telnet, ceea ce nu constituie o
surpriz, deoarece majoritatea programelor de navigare utilizeaz programul Telnet.}
Pe scurt URL-urile au fost proiectate nu numai pentru a permite utilizatorilor s navigheze
prin Web, dar i pentru a utiliza FTP, news, Gopher, email i telnet, ceea ce face inutile
interfeele specializate pentru aceste protocoale integrnd astfel ntr-un singur program,
navigatorul n Web, aproape toate tipurile de acces n Internet. Dac metoda nu ar fi fost
proiectat de un fizician ar fi putut s par produsul departamentului de publicitate al unei
companii de software.
n ciuda tuturor acestor proprieti, creterea Web-ului scoate n eviden i o slbiciune a
metodei utilizrii URL-urilor. Pentru o pagin care este foarte des referit, ar fi de preferat

s existe mai multe copii pe servere diferite, pentru a reduce traficul n reea. Problema
este c URL-urile nu ofer nici o posibilitate de indicare a unei pagini fr s se specifice
unde este localizat pagina respectiv. Nu exist nici o metod pentru a spune ceva de
genul: Vreau pagina xyz, dar nu m intereseaz de unde o aduci. Pentru a rezolva aceast
problem i a permite multiplicarea paginilor IETF lucreaz la un sistem de URL
(Universal Resource Identifiers - identificatori universali de resurse). Un URL poate s fie
privit ca un URL generalizat. Acest subiect este n curs de cercetare.

CAPITOLUL 1

Tema proiectului

Proiectarea i realizarea unui Parc Auto virtual cu baz de date structurat n mysql
Din administrarea pagini trebuie sa poi adauga, sterge i modifica inregistrarile din baza
de date.

n partea de administrare se pot:


- aduga categorii pentru produse;
- aduga produse specifice fiecarei categorii, momentan doar auto;
- se poate vizualiza lista de anunuri publicate n site;
- vizualiza pozele aferente
- editarea anunurilor.

CAPITOLUL 2

Descrierea tehnologiilor

2.1 Introducere n HTML


Realizarea unui pagini web presupune cunoaterea limbajului HTML (HyperText Markup
Language). Acesta e un limbaj de marcare, introdus de Tim Berners-Lee. Fiind un limbaj
de marcare, HTML nu utilizeaz instruciuni sau comenzi, ci etichete, acestea fiind numite
i balize, elemente sau tag-uri.
Origini
Unul din primele elemente, fundamentale de altfel, ale WWW (World Wide Web) este
HTML, standard ce descrie formatul primar n care documentele sunt distribuite i vzute
pe Web. Multe din trsturile lui, cum ar fi independena fa de platform, structurarea
formatrii i legturile hipertext, fac din el un foarte bun format pentru documentele
Internet i Web. Primele specificaii de baz ale Web-ului au fost HTML, HTTP i URL.
Menire i semnificaii
HTML a fost dezvoltat iniial de Tim Berners-Lee la CERN n 1989. HTML este un
limbaj bazat pe SGML (Standard Generalized Markup Language), o aa-numit aplicaie a
acestuia. SGML este un standard internaional (ISO-8879) aprobat n 1986. HTML a fost
iniial vzut ca o posibilitate pentru fizicienii care utilizeaz computere diferite s schimbe
ntre ei informaie prin mijlocirea Internetului. Erau prin urmare necesare cteva condiii
eseniale: independena de platform, posibiliti hipertext i structurarea documentelor.

10

Independena de platform semnific faptul c un document poate fi afiat n mod


asemntor (sau aproape identic) de computere diferite (deci cu font, grafic i culori
aidoma), lucru vital pentru o audien numeroas i extrem de variat. Hipertext se
traduce prin faptul c orice cuvnt, fraz, imagine sau element al documentului vzut de
un utilizator (client) poate face referin la un alt document sau chiar la paragrafe din
interiorul aceluiai document, ceea ce uureaz mult navigarea ntre prile componente
ale unui document sau ntre multiple documente. Structurarea riguroas a documentelor
permite convertirea acestora dintr-un format n altul precum i interogarea unor baze de
date nglobnd aceste documente.
nceputurile
Nscut n urm cu aproximativ 30 de ani, ntr-o tentativa de a rezolva unele probleme ivite
la transportul documentelor ntre diferite computere, limbajul hipertext a evoluat ncet. n
primii ani de evoluie HTML a demarat lent n principal pentru c i lipseau posibilitile
de a reda publicaii electronice profesionale; limbajul permitea oarece control asupra
fonturilor dar nu permitea inserarea graficii. n 1993, NCSA a mbogit limbajul pentru a
permite inserarea graficii i a construit primul navigator grafic: Mosaic. Au urmat apoi
contribuii ad hoc ale diverselor firme care au adus tot felul de adugiri limbajului HTML
astfel nct, n 1994, limbajul prea scpat de sub control. Urmarea a fost c la prima
conferin WWW de la Geneva (Elveia) s-a constituit un grup de specialiti (HTML
Working Group) a crui prim misiune a fost formalizarea HTML, lucru care s-a
concretizat n HTML 2.0. Importana aciunii acestui grup const n faptul c, odat
standardizat, limbajul a putut fi apoi extins ntr-un mod mai controlat la alte nivele.
Standardizarea
Standardul oficial HTML este dat de World Wide Web Consortium (W3C), care este
afiliat la Internet Engineering Task Force (IETF). W3C a enunat cteva versiuni ale
specificaiei HTML, printre care i HTML 2.0, HTML 3.0, HTML 3.2, HTML 4.0 i, cel

11

mai recent, HTML 4.01. n acelai timp, autorii de browsere cum ar fi Netscape i
Microsoft, au dezvoltat adesea propriile "extensii" HTML n afara procesului standard i
le-au ncorporat n browserele lor. n unele cazuri (cum ar fi tagul Netscape), aceste
extensii au devenit standarde de facto adoptate de autorii de browsere. Cnd navigatorul
ncarc un document HTML, el "citete" documentul n cutarea tag-urilor HTML,
formateaz textul i imaginea i le afieaz pe ecran. Este motivul pentru care acelai
document HTML apare uor diferit cnd este privit utiliznd navigatoare diferite. Stadiile
prin care trece un standard elaborat de W3C sunt:
1. Orice standard i ncepe aventura ca W3C Note.
2. De aici este preluat de ctre un grup particular de lucru (Working Group) i este
discutat pn cnd se ajunge la un consens.
3. n acest moment este publicat ca propunere (Working Draft) i n acest stadiu
oricine poate face comentarii.
4. n momentul n care se obine o susinere i un consens suficient de larg, directorul
W3C decide dac specificaia este gata s devin propunere oficial de
recomandare (Proposed Recommendation).
5. Urmeaz o perioad de 6 sptmni n care toi membrii W3C au sansa s voteze
aceast propunere de recomandare; votul nu este obligatoriu, putndu-se vota n 4
moduri diferite:
*da;
*da, sub rezerva unor mbuntiri;
*nu, pn cnd anumite sarcini nu sunt ndeplinite;
*nu, specificaia trebuie abandonat.
6. Charta W3C stipuleaz necesitatea obinerii consensului complet, astfel c fiecare
vot trebuie s fie un da fr rezerve.
7. Dac toi paii anteriori au fost ndeplinii, specificaia trebuie aprobat n final de
Director i se public sub forma unui standard (W3C Recommendation).
De ce HTML

12

Dar de ce a fost preferat HTML pentru publicaii pe Web, cnd pentru realizarea
publicaiilor electronice exist multe alte tehnologii? Primul motiv este simplitatea. Al
doilea este c permite formatarea textului ASCII cu tag-uri n format ASCII. Rezult de
aici o compresie bun, suport pentru legturi hipertext i uurina n a scrie navigatoare
pentru vizualizarea documentelor.
Varianta 2.0
HTML 2.0, elaborat n Iunie 1994, este standardul pe care ar trebui s-l suporte toate
browserele curente - inclusiv cele n mod text. HTML 2.0 reflect concepia original a
HTML ca un limbaj de marcare independent de obiectele existente, focalizndu-se pe
aezarea lor n pagin, n loc de a specfica exact cum ar trebui s arate acestea. Dac dorii
s fii siguri c toi vizitatorii vor vedea paginile aa cum trebuie, folosii tagurile HTML
2.0.
Varianta 3.0
Specificaia HTML 3.0, enunat n 1995, a ncercat s dezvolte HTML 2.0 prin adugarea
unor faciliti precum tabelele i un mai mare control asupra textului din jurul imaginilor.
Dei unele din noutile HTML 3.0 erau deja folosite de autorii de browsere, multe nu
erau nc oficializate. n unele cazuri, taguri asemntoare implementate de autorii de
browsere au devenit mai rspndite dect tagurile "oficiale". Specificaia HTML 3.0 a
expirat repede, deci nu mai este un standard oficial n prezent.
Varianta 3.2
n Mai 1996, W3C a scos pe pia specificaia HTML 3.2 , care era proiectat s reflecte
i s standardizeze practicile acceptate la scar larg. Deci HTML 3.2 include tagurile
HTML 3.0 care erau adoptate de autorii de browsere precum Netscape i Microsoft plus
noi extensii HTML.

Revoluia HTML 4.0, HTML 4.01

13

n acest moment, HTML 4.0 este larg utilizat i au fost deja publicate specificaiile HTML
4.01. Limbajul HTML d proiectanilor de pagini web posibilitatea:
*s publice documente cu headere, texte, tabele, liste, fotografii, etc...
*s regseasc on-line informaii prin intermediul hiperlink-urilor accesate printr-un
simplu click de mouse
*s proiecteze formulare pentru realizarea tranzaciilor cu servere aflate la distan,
pentru cutri de informaie sau pentru activiti specifice comerului
*s includ foi de calcul tabelar, clipuri video, sunete i alte aplicaii direct n
documente.
Elementul esenial diferit adus de versiunea 4.0 i mai ales 4.01 fa de versiunea 3.2 este
posibilitatea separrii structurii unui document de prezentarea lui prin introducerea
stilurilor de documente (style sheet). Utiliznd limbajul HTML pentru structurarea unui
document i style sheet-urile pentru a stiliza prezentarea acestuia, proiectanii pot obine
mult mai usor independena de periferic/computer/platforma hard-soft, lucru care a facut
HTML-ul att de popular. Un document cu o structur complex poate fi prezentat n
diferite moduri pe medii diferite, permind documentului nsui s se adapteze mai uor
noilor tehnologii (cum ar fi, de exemplu, browserele capabile s vorbeasc, cititoarele
braille, etc...).
n plus, separarea coninutului de partea de prezentare permite modificarea nfirii
chiar a unui ntreg site doar prin modificarea unui style-sheet (a unui document care
descrie stilul). Experiena a demonstrat c o astfel de abordare poate reduce dramatic
costurile de deservire a unui spectru larg de platforme i probleme, facilitnd i o
intreinere ulterioar i modificri mult mai uoare.
HTML este utilizat pentru a structura informaia unei pagini web, pentru a stabili partea
de nceput, titlul, coninutul paginii i ncheierea pagini. Aceste informaii se realizeaz
prin tagurile HTML care explic browserului cum s afieze textul pe ecranul

14

monitorului. Tag-urile n limba englez nseamna "eticheta". Pentru a se putea deosebii de


textul propriuzis, tag-urile sunt incluse ntre paranteze speciale i anume < i >. De obicei
tagurile sunt folosite n perechi, de exemplu pentru a scrie un text cu caractere ngroate
se foloseste partea de deschidere a tagului <b>textul propriuzis</b> i la ncheiere se
folosete acelai marcaj la care se adaug semnul / care specific c acolo se nchide
marcajul cu acelai nume deschis anterior.
Versiunile de nceput ale limbajului, erau destul de limitate, dar mai apoi, odat cu
dezvoltarea web-ului i apariia mai multor browsere, au fost introduse mai multe taguri,
elemente i atribute pentru un impact i o structurare a informaiilor dintr-o pagina mult
mai bune. Dei browserele actuale pot afia o pagina web chiar dac sintaxa limbajului
acelei pagini nu este corect, este de preferat s se respecte standardele, asa fiind siguri c
acea pagin se va vedea aproximativ la fel pe orice browser. Spun "aproximativ" i nu "la
fel", deoarece sunt unele browsere care nu respect ntru totul standardele.
n continuare, am s ncerc s v explic cte ceva despre structura i sintaxa unui
document HTML.

Cod:

Pentru orice document web trebuie sa i se atribuie un tip. Acest tip este specificat n prima
linie a documentului. Este important pentru a se putea deosebi documentul de tip HTML
de cel de tip XHTML sau alte tipuri existente. Pentru documentele de tip HTML exista 3
tipuri i anume strict, transitional i frameset. n mare, documentele de tipul "strict"
exclud din prezentarea lor atributele i elementele cu suport pentru formatarea paginii

15

(CSS), cele "transitionale" includ i aceste atribute iar cele de tip "frameset" sunt n
general construite din mai multe buci (frame)
Urmtoarea linie conine un tag care anun browserul c ncepe un document n format
HTML.
Linia urmtoare specific partea de sus a documentului, antetul (head). n aceast parte
sunt incluse diferite informaii cum ar fi titlul paginii sau diferite taguri care spun
bowserului anumite informaii despre pagina curenta. Aceste taguri sunt cunoscute sub
numele de meta-taguri i au o importan mai mare dect tagurile normale. n cazul
exemplului de mai sus este specificat un meta-tag care spune browserului ce tip de
caractere sunt folosite n pagina curent (este util n cazul n care scriei pagini n mai
multe limbi, browserele i motoarele de cutare vor ti s afieze caracterele din acele
pagini).
Urmtoarea linie din cadrul antetului este linia care conine titlul paginii curente. Este de
preferat ca fiecare pagin de web s aib un titlu ct mai sugestiv (util n cadrul
motoarelor de cutare, dar i dac vrei sa tiprii pagina la imprimant)
Tagul urmtor este un tag de nchidere, i anume se specific browserului c acolo se
termina partea de antet a documentului. Dup antet, urmeaz coninutul efectiv al
documentului, care este specificat prin tagul de deschidere <body>
ntre acest tag i pn cnd browserul ntlneste tagul de nchidere </body> se poate pune
coninutul efectiv al paginii, i anume text, taguri de formatare a textului, elemente de
aranjare n pagin precum i hipertext
Ultima linie din document trebuie sa fie ntotdeauna tagul de nchidere al documentului
HTML i anume tagul </html>
Un document html se poate scrie n orice tip de editor de texte care tie s salveze textul
neformatat (gen Notepad, dar nu i Word care preformateaz textul). Documentele HTML

16

de obicei au extensia .htm sau .html dar pot fi i alte extensii cum ar fi .dhtml sau .xml sau
.php Desigur alte extensii sunt date de tipuri diferite de documente HTML, despre care am
sa vorbesc pe masur ce discutm despre ele. Dup crearea unei pagini, pentru a verifica
dac este compatibil cu standardul, se poate verifica la adresa http://validator.w3.org/
unde gsii un validator automat care verific structura i corectitudinea sintaxei paginii.

2.2 Introducere n CSS


CSS este un acronim provenind din Cascading Style Sheets, care nseamn "foi de stil n
cascad". n documentele W3C, CSS nu e definit ca un nou limbaj, ci ca un mecanism
care permite formatarea documentului HTML. CSS-ul nu exclude HTML-ul din pagina
web. Nu se poate realiza o pagin web folosind numai CSS, care a fost proiectat astfel
nct s conlucreze cu HTML-ul. Tagurile HTML au fost iniial destinate pentru a defini
coninutul unui document. Pentru a afia "Acesta este un antet", "Acesta este un paragraf"
sau "Acesta este un tabel", trebuiau folosite taguri ca <h1>,<p>,<table> etc. Modul de
aranjare al documentului era sarcina browser-ului, far a fi folosite taguri de structur.
Pe masur ce Netscape i IE continuau s adauge noi taguri HTML i atribute (ca tagul
<font> i atributul color) sintaxei HTML originale, devenea din ce n ce mai greu s creezi
site-uri web n care coninutul documentelor HTML s fie separat clar de aranjamentul
documentului. Stilurile definesc cum s fie afiate elementele HTML 4.0, aa cum face
tagul font sau atributul color n HTML 3.2. Stilurile sunt salvate n mod normal n fiiere
diferite de cele cu extensia html. Foile de stil externe v permit s schimbai apariia i
aranjarea tuturor paginilor n site-ul dvs. web, doar prin editarea unui singur document
CSS. Dac ai ncercat vreodat s schimbai fontul sau culoarea tuturor anteturilor din
paginile web pe care le-ai creat, vei ntelege cum CSS v poate scuti de mult munc
inutil. Proiectanii CSS-ului au urmrit ndeosebi separarea ntre coninutul paginii
(textul destinat vizitatorului i imaginile din pagin) i codul-surs. Folosind CSS, se
ajunge la un control mai fin asupra paginii web, la scderea dimensiunii n octeti a paginii
web, atunci cnd codul CSS e coninut ntr-un fiier extern. Modificnd fiierul CSS

17

extern, modificm simultan toate paginile web n care acesta e inclus. Se pot crea efecte
mai sofisticate dect cele produse de codul HTML: suprapunerea unei imagini peste alt
imagine, a unui text peste alt text, impresia de relief, efectul hover, afiarea unor fonturi
mai mari dect h1 etc.
CSS este foarte util n Web design, deoarece le permite developerilor s controleze stilul
i chenarul mai multor pagini web n acelai timp. Ca web developer putei defini un stil
pentru fiecare element HTML i s-l aplicai ctor pagini web doriti. Pentru a face o
schimbare global, schimbai stilul i toate elementele din paginile web vor fi modificate
automat.
Dezavantaj lucrri cu CSS este c pagina coninnd cod CSS poate arata diferit n
navigatoare diferite, deoarece nu toate browserele interpreteaz codul CSS la fel.
Adugnd cod JavaScript, se obtin efecte i mai sofisticate, chiar de animatie. CSS +
JavaScript = DHTML (Dynamic HTML). Aceste efecte spectaculoase justific titulatura
de "artiti CSS" sau "artizani CSS" acordat unor creatori de pagini web.
Foile de stil dau posibilitatea specificrii informaiei despre stil n mai multe feluri.
Stilurile se pot specifica ntr-un singur element HTML, n interiorul elementului <head>
al unei pagini HTML sau ntr-un fiier extern CSS. Dintr-un singur document HTML se
pot face referiri ctre mai multe foi de stil externe. Deci, un stil din interiorul unui element
HTML are cea mai mare prioritate, ceea ce nseamn c va suprascrie fiecare stil declarat
n tagul <head>, ntr-o foaie de stil extern i n browser.
n documentul HTML, codul CSS poate fi introdus n mai multe moduri:
Codul CSS e prezent n pagina web, iar efectul su se aplic asupra ntregului document.

18

Consecin: Orice text cuprins ntre <b>i </b> va fi afiat cu rou, oriunde s-ar afla n
document.

Orice

text

afiat

cu

italice

va

fi

de

culoare

albastr.

Se observ c introducerea codului CSS n head duce la mrirea dimensiunii n octeti a


fiierului.

Se observ c nu mai avem, n acest caz, o etichet <style>, ci un atribut style al etichetei
<a>. Orice etichet HTML poate beneficia de acest atribut. Pentru formatarea unor
poriuni mari de text, putei folosi containerele div sau span. Totui, aceast abordare nu
satisface principiul separrii codului CSS de textul afisat n browser.
3 Codul CSS se afl ntr-un fiier extern, cu extensia css. Efectul su se aplic ntregului
document.

19

Fiierul extern poate fi scris n Notepad i salvat cu extensia css. Includerea sa n pagina
web se face folosind tag-ul <link>, care trebuie s se afle ntre <head>i </head> (n
antetul

paginii).

Fisierul x.css poate conine urmtorul cod:


Cod:
body { color: blue;}
a {color: red; text-decoration: none;}
Consecina va fi afiarea cu fonturi albastre a ntregului text, exceptnd link-urile, care vor
fi colorate n rosu.
Observaie:
ntr-un fiier html, pot fi incluse astfel oricte alte fisiere cu extensia css, htm, html sau
pdf.
Aceast metod de includere a CSS-ului n pagina web e mai avantajoas ca primele dou.
Codul CSS introdus astfel conlucreaz cu cel scris direct n pagin.
4. Documentul CSS se poate importa n pagina web.

20

Cod:
<html>
<head>
<style>
@import url(http://www.cartomatica.net/fis/x.css);
</style>
</head>
<body>
</body>
</html>
Importul trebuie declarat imediat dup tag-ul <style>, naintea oricrei alte linii de cod. n
exemplul alturat, s-a realizat importul n pagina curent a fiierului x.css din directorul
fis al sitului www.cartomatica.net. Desigur, fiierul importat poate avea i o adres
relativ.
Sintaxa CSS este alctuit din trei pri: un selector, o caracteristic i o valoare.
Selectorul este elementul/tagul pe care vrei s-l definii, caracteristica este atributul pe
care dorii s-l schimbai i fiecare caracteristic poate lua o valoare. Caracteristica i
valoarea sunt separate de semnul (:) i sunt ncadrate de acolade:
Cod:
body {color: black}
Dac dorii s specificai mai mult de o caracteristic, trebuie s separai fiecare
caracteristic cu semnul (;). Exemplul de mai jos arat cum s definii un paragraf aliniat
central, cu culoarea roie a textului:

21

Cod:
p {text-align: center; color: red}
Pentru a ntelege mai bine aceasta definiie de stil, putei descrie o caracteristic pe fiecare
rnd, ca n exemplul urmtor:
Cod:
p{
text-align: center;
color: black;
font-family: arial
}
Atributul class
Cu acest atribut putei defini stiluri diferite pentru acelai element. S zicem c vrei dou
tipuri de paragrafe n documentul dvs: unul aliniat la dreapta i unul centrat. Iat cum
putei face asta cu stiluri:
Cod:
p.right {text-align: right}
p.center {text-align: center}
Trebuie s folosii atributul class n documentul dvs. HTML:
Cod:
<p class="right">

22

Acest paragraf va fi aliniat la dreapta.


</p>
Cod:
<p class="center">
Acest paragraf va fi aliniat pe centru.
</p>
Atributul id
Atributul id trebuie s fie unic pe pagin. Nu poate exista dect un element cu un id dat
ntr-un document. El este marcat n documentul HTML cu id n loc de class:
Cod:
<p id="intro">
Acest paragraf va fi aliniat la dreapta.
</p>
Atributul id poate fi definit n doua moduri. Poate fi definit pentru a se potrivi tuturor
elementelor cu un id specific sau s se potriveasc numai unui element cu un id specific.
n exemplul urmtor, atributul id se va aplica tuturor elementelor cu id= "intro":
Cod:
#intro {
font-size:110%;
font-weight:bold;
color:#0000ff;
background-color:transparent
}

23

2.3 Comenzi MySQL


Baza de date este coloana vertebral a unui site dinamic. n acest articol aflai ce avei
nevoie pentru a construi o baz de date.
Cteva detalii legate de instalarea i configurarea serverului.

Pentru pornirea serverului de MySQL din Windows trebuie s rulai fisierul mysqld.exe
aflat (dac sa fcut instalarea standard) n c:\mysql\bin\mysqld.exe pe Windows 95/98 sau
c:\mysql\bin\mysqldnt.exe pe NT/2000/XP.

Dac vrei ca serverul de MySQL s porneasc automat la fiecare repornire a Windowsului, putei aduga un shortcut n Start Menu/Start up. Este recomandat ca pe Windows
NT/2000/XP

setai

serviciul

MySQL

porneasc

automat.

n cazul n care dorii s verificai dac serverul MySQL este pornit, scriei urmatoarea
linie de cod n comand prompt:
c:\mysql\bin\mysqladmin version status proc
La Windows NT4 trebuie s avei instalat Service Pack 3 minim ca s ruleze MySQL. Mai
are nevoie i de protocolul TCP/IP.
Dac atunci cnd accesai adresa http://localhost nu se vede o pagina trimis de server (de
obicei conine mesajul "If you can see this, if means that the installation of the Apache
web server software on this system was successful."), verificai nti dac serverul este
pornit i dac nu cumva avei alt server HTTP (PWS, IIS) care ruleaz.
La Windows 95 trebuie s descrcai i s instalai Windows Socket 2 Update de la
Microsoft nainte de a ncepe instalarea Apache. Windows NT 4.0, 98, ME i 2000 nu au
nevoie de acest update.

24

Cu Windows XP, ca s ruleze serverul Apache trebuie s fie instalat Windows XP Service
Pack 1 (minim).

Pe unele sisteme poate fi necesar s copiai fiierele php4apache.dll i php4ts.dll din


directorul /php/ n directorul /windows.
Cte ceva despre MySQL
Cel mai bun exemplu pe care l tiu despre cum arat (virtual) o baz de date este un
document Microsoft Excel cu rndurile i coloanele aferente. La fel ca i n Excel se pot
face calcule, sortri, adunri i chiar mai mult.

MySQL este cel mai popular sistem de management pentru baze de date relaionale
deoarece este Open Source (cu surse deschise). ntr-o baz de date relaional datele sunt
stocate n mai multe tabele separate, fiind astfel mbuntit viteza i flexibilitatea.
Tabelele pot fi legate ntre ele prin relaii definite de noi, fiind astfel posibil s combinm
la cerere datele din mai multe tabele.

SQL, acronimul pentru "Structured Query Language", este limbajul standard pentru
comunicarea cu bazele de date. Comenzile SQL sunt folosite pentru a interaciona cu baza
de date (de exemplu s adauge, s modifice sau s stearg datele). Alte sisteme de baze de
date care folosesc SQL sunt Microsoft SQL Server, Acces, Oracle, Sybase, etc.
Pentru a ne putea face o baz de date trebuie ca serverul MySQL s fie pornit. n
continuare va trebui s folosim o aplicaie cu ajutorul creia s comunicm cu serverul.
Aplicaia se numeste mysql.exe i se gsete n c:\mysql\bin\. Pentru a rula, din prompul
MSDOS scriem: "c:\mysql\bin\mysql.exe -p -u root" iar cnd ni se cere parola apsm
ENTER (sau scriem parola dac am introdus la instalare vreuna). Dac serverul nu este
pornit vom primi mesajul de eroare "Can't connect to MySQL server on 'localhost'".

25

Cele mai frecvent utilizate comenzi MySQL sunt prezentate n coloana de mai jos. Ele
sunt mult mai multe, dar aici nu doresc dect s fac o scurt prezentare, urmnd ca voi s
studiai n detaliu comenzile utiliznd manualul oficial pe care l gsiti la adresa
http://dev.mysql.com/doc/.

SHOW DATABASES;

# afieaz o list cu numele bazelor de date

USE numele_bazei_de_date

existente
# alegerea bazei de date cu care lucrm n

SHOW TABLES;
SHOW COLUMNS;

continuare
# afieaz tabelele existente n baza curent
# afieaz informaii despre coloanele unui

tabel
CREATE DATABASE numele_bazei;
# creaz o baz de date cu numele respectiv
CREATE TABLE tabel_unu (camp_a# creaz tabelul 'tabel_unu' cu un cmp
TEXT);
numit 'camp_a' al crui tip este TEXT
CREATE TABLE tabel_unu (camp_a TEXT,# creaza tabelul 'tabel_unu' cu un cmp
camp_b INT, camp_c TINYINT);

numit 'camp_a' al crui tip este TEXT, un


cmp numit 'camp_b' n care datele de pe
coloana respectiv vor fi numere ntregi i n
cmpul 'camp_c' vor fi introduse doar

DROP TABLE tabel_unu;


DROP DATABASE numele_bazei;

numere ntre -128 i 127


# terge tabelul numit 'tabel_unu'
# terge baza de date cu

numele

'numele_bazei'
INSERT INTO tabel (camp1, camp2, camp3) # introduce n tabelul cu numele 'tabel', n
VALUES (valoarea1, valoarea2, valoarea3); 'campul1'

'valoarea1',

'campul2'

'valoarea2' i n 'campul3' 'valoarea3'. Iata


cum ar arta n format tabelar:

INSERT

INTO

tabel

(camp1,

VALUES (valoarea1, valoarea2);

campul1
campul2
campul3
valoarea1
valoarea2
valoarea3
camp2)# Se poate omite una din coloane, dac avem
5 coloane, dar vrem s introducem numai n
3, specificm cmpul i valoarea doar pentru

26

cele pe care le vrem, restul le ignorm.


campul1
campul2
campul3
valoarea1
valoarea2
INSERT INTO tabel VALUES (valoarea1,# o variant simplificat care se poate aplica
valoarea2, valoarea3);

doar

cnd introducem

valori

toate

cmpurile tabelului (nu se poate omite)


INSERT INTO tabel VALUES (valoarea1,# identic ca cea dinainte, doar c n lipsa
valoarea2, '');
SELECT * FROM tabel;

unei valori se pun ghilimele.


# Afieaz tot (*) ce exist n tabelul cu

SELECT campul1 FROM tabel;

numele 'tabel'
# afieaz coninutul cmpului 'campul1' din

SELECT campul1, campul2 FROM tabel

tabelul 'tabel'
# afieaz coninutul cmpurilor 'campul1' i

'campul2' din tabelul 'tabel'


SELECT * FROM tabel WHERE campul1 =# afieaz cmpurile a cror coninut este la
'valoare1';
fel cu 'valoare1'
SELECT campul1, campul2 FROM tabel# caut i afieaz toate nregistrrile n care
WHERE campul2 LIKE 'valoare2';
'campul2' este asemntor cu 'valoare2'
SELECT campul1, campul2 FROM tabel# caut i afieaz toate nregistrrile n care
WHERE campul2 LIKE 'valoare2%';
'campul2' ncepe cu 'valoare2'
SELECT campul1, campul2 FROM tabel# caut i afieaz toate nregistrrile n care
WHERE campul2 LIKE '%valoare2';
'campul2' se termin cu 'valoare2'
SELECT campul1, campul2 FROM tabel# caut i afieaz toate nregistrrile n care
WHERE campul2 LIKE '%valoare2%';
SELECT

FROM

campul1=valoare1 AND

tabel

'campul2' se aseamn cu 'valoare2' oriunde

n cadrul textului.
WHERE# afieaz toate cmpurile care conin

campul2 LIKE'valoarea1' i se asemn cu 'valoare2'

'%valoare2%';
SELECT campul1, campul2 FROM tabel# caut i afieaz toate cmpurile care difer
WHERE campul1 != valoarea3;
de 'valoarea3'
SELECT campul1, campul2 FROM tabel# caut i afieaz toate cmpurile care nu
WHERE campul2 NOT LIKE 'valoarea3%'; ncep cu 'valoare3'
SELECT campul1 FROM tabel ORDER BY# afieaz coninutul cmpului 'campul1' n
campul1 ASC;
ordine cresctoare
SELECT campul1, campul2 FROM tabel# afieaz coninutul cmpului 1 n ordine

27

ORDER BY campul1 ASC, campul2 DESC; cresctoare


SELECT count(*) FROM tabel;

cmpul

ordine

descresctoare.
# afieaz cte nregistrri sunt n total n

tabel
SELECT count (*) FROM tabel WHERE# cte nregistrri sunt n tabel al cror
campul1=variabila1;
'camp1' este 'variabila1'
SELECT camp1 FROM tabel GROUP BY # afieaz coninutul cmpului 1 grupat dup
camp1 ORDER BY camp1 ASC;
SELECT * FROM tabel LIMIT 0,3;

'camp1' ascendent
# afieaz din tabel ncepnd de la prima

SELECT * FROM tabel LIMIT 10,5;

nregistrare nc 3.
# afieaz ncepnd de la nregistrarea 10

DELETE FROM tabel WHERE conditii;

nca 5 nregistrri din tabel


# terge nregistrarea din tabel. Sintaxa este

la fel ca la comanda SELECT.


UPDATE tabel SET coloana1='noua valoare # pentru actualizarea coninutului unei
a coloanei 1', coloana2='noua valoare anregistrri din tabel. Sintaxa este la fel ca la
coloanei 2' WHERE conditii;

comanda SELECT. (se terge valoarea veche

ALTER TABLE tabel ADD dat TEXT;

i se scrie cea nou)


# adugare la tabelul existent a unei coloane

numit 'dat' de tip text.


ALTER TABLE tabel CHANGE dat data# redenumete coloana numit 'dat' cu
TEXT;
numele 'data'
ALTER TABLE tabel CHANGE data data# modific tipul coloanei 'data' din 'TEXT' n
DATE;
coloana de tip 'DATE'
ALTER TABLE tabel ADD nr MEDIUMINT# adaug o coloan numita 'nr' dupa
UNSIGNED AFTER coloana1;
INDECSI

'coloana1' n tabelul 'tabel'


# vezi descrierea de mai jos

Dei MySQL are suport pentru diacritice i setul de caractere 8859-2, este preferabil s nu
folosii diacritice n numele bazelor de date, tabelelor sau cmpurilor. De asemenea, nu
putei folosi ca nume de tabel sau de cmp cuvinte rezervate (nume de funcii, tipuri de
caractere din MySQL precum CREATE, DROP sau COLUMN). Se pot folosi nume de
tabele care conin spaii dar n practic trebuie s ncadrai numele ntre back-ticks `
(semul ` il gsii pe tasta aflat imediat sub Escape i nainte de 1).

28

Exemplu:
CREATE

TABLE

`tabel

al

carui

nume

are

spatii`

(`camp

1`,

TEXT);

SHOW COLUMNS FROM `tabel al carui nume are spatii`;


Semnul * este definit n MySQL ca nsemnnd tot/toate.
Semnul % este folosit n interogrile MySQL dac vrem s gsim cuvntul oriunde n
carul textului. Mai exact:
%cuvant_cautat - dac vrem s afieze toate cuvintele care se termin cu
'cuvantul_cautat' (pot fi i cteva caractere)
cuvant_cautat% - afieaz toate cuvintele care ncep cu 'cuvantul_cautat'
%cuvant_cautat% - afieaz toate cuvintele care conin 'cuvantul_cautat' oriunde n text.
Putem afla cte nregistrri sunt pentru un criteriu de selecie cu ajutorul lui count().
Putem afla astfel cte nregistrri sunt n total n tabel sau cte nregistrri sunt n tabel al
cror cmp este cel cautat...

Cu ajutorul instruciunii GROUP BY putem "grupa" rezultatele astfel nct s nu vedem


duplicatele i s vedem doar valorile unice. Pentru a limita numarul de rezultate folosim
instructiunea LIMIT. Dac avem 10000 de nregistrri i nu dorim s vedem dect primele
3, folosim LIMIT 0,3 (adic de la prima nrgistrare afieaz 3 nregistrri) sau LIMIT 10,5
(afieaz ncepnd de la nregistrarea 10 nc 5 nregistrri).
Pentru tergerea nregistrrilor dintr-un tabel se folosete comanda DELETE. Pentru
tergerea unui tabel sau a unei baze de date comanda este DROP.
Comanda UPDATE se foloeste cnd vrem s modificm coninutul unei nregistrri fr
a o sterge.
Dac dorim s schimbm structura unui tabel existent sau s adugm alte coloane
folosim comanda ALTER TABLE.

29

INDECSI - Cel mai folosit tip de index este id-ul. Id-ul este un numr unic de identificare
pentru un element distinct (un rand) al unui tabel. Un exemplu de id din viaa real este
numerotarea cd-urilor. Cnd avei un cd nou l numerotai i l punei n raft la sfrit iar n
catalog putei s l punei sortat dupa titlu sau dup numrul de ordine. La fel i ntr-o baz
de date, putei crea un cmp care s introduc automat un nr pentru fiecare rnd nou
adugat n baza de date i la afiare putei s l folosii (de exemplu la vizualizarea
ultimilor 10 vizitatori folosii id-ul).
Pentru a creea un index avem urmtoarele comenzi:
S zicem c avem o baz de date numit lista cu un cmp caseta i adugm cmpul
id_casete - comanda este urmtoarea:
ALTER TABLE `caseta` ADD `id_caseta` INT;
ALTER TABLE `caseta` CHANGE `id_caseta` `id_caseta` INT(11) UNSIGNED NOT
NULL;
ALTER TABLE `caseta` ADD PRIMARY KEY (id_caseta);
ALTER TABLE `caseta` CHANGE `id_caseta` `id_caseta` INT(11) UNSIGNED
DEFAULT "0" NOT NULL AUTO_INCREMENT;
i din acest moment, orice caset nou introdus va avea automat un nr de ordine. Este
posibil ca toat niruirea de comenzi de mai sus s se poata face printr-o singur linie de
cod, dar este mai sigur s facei cte o modificare n parte dect toate odat, pentru a
detecta eventualele erori. Este bine s creai un id la nceputul tabelului, cnd nu avei
ntrri n baza de date, pentru a face incrementarea automat, altfel e posibil s v dea erori.
Cu ajutorul id-ului putei afia de exemplu noutaile, cu o comand de genul - afieaz
ultimele 10 intrri sortate dup id..., tiind c ntotdeauna ultima intrare are numarul cel
mai mare...
Ct de mare poate fi un tabel?
MySQL stocheaz fizic datele unui tabel ntr-un fiier pe hard disc i cu ct tabelul e mai mare, cu
att mrimea acestui fiier crete. Versiunea 3.22 a MySQL are o limit de 4 GB pentru mrimea
unui tabel. n versiunile superioare aceast limit este extins pn la 8 milioane TB pentru tipul
de tabel MyISAM. Cu toate acestea, sistemele de operare pot avea propriile limitri ale mrimii

30

fiierelor. Mrimea impicit a tabelelor MySQL este de aproximativ 4 GB. Putei verifica
mrimea maxima pentru un tabel cu ajutorul comenzilor SHOW TABLE STATUS sau

myisamchk -dv table_name. Pe platforma Windows va trebui s folosii sistemul de fiiere


NTFS dac dorii s avei tabele mai mari de 4 GB.

3.1. Tranzaciile MySQL folosind PHP

Despre tranzacii SQL


O tranzacie const din una sau mai multe instruciuni SQL, care sunt executate complet
ca un ntreg, iar toate modificrile aprute n baza de date accesat, sunt salvate
permanent folosind comanda mysql commit, sau anulate folosind comanda rollback.
ATENTIE!!! Pentru a putea folosi corect tranzaciile trebuie ca tabelele din baza de date s
fie de tipul INNODB.
Un prim exemplu (avem o baz de date "tutoriale" i o tabel "useri"):
(comenzile de mai jos sunt date n fereastra de lucru cu MySQL, iar prompterul este
specificat prin mysql>)
Cod:
mysql> use tutoriale;
Database changed
mysql> Select * from useri;
Empty set (0.00 sec)
mysql> Start transaction;
Query OK, 0 rows affected (0.00 sec)

31

mysql> Insert into useri(user_name) values ('utilizator1');


Query OK, 1 row affected (0.00 sec)
mysql> Insert into useri(user_name) values ('utilizator2');
Query OK, 1 row affected (0.00 sec)
mysql> Insert into useri(user_name) values ('utilizator3');
Query OK, 1 row affected (0.00 sec)
mysql> Insert into useri(user_name) values ('utilizator4');
Query OK, 1 row affected (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.01 sec)
mysql> Select * from useri; //tabela useri nu va contine
inregistrarile
deoarece s-a dorit renuntarea la acesta, prin executia lui
rollback.
Empty set (0.00 sec)
mysql> Start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> Insert into useri(user_name) values ('utilizator5');
Query OK, 1 row affected (0.00 sec)
mysql> Insert into useri(user_name) values ('utilizator6');
Query OK, 1 row affected (0.00 sec)
mysql> Select * from useri; //tabela contine inregistrarile,
dar aceste inregistrari pot fi citite doar de catre cel ce a
initiat tranzactia (depinde acum i de nivelul de izolare)
+---------+-------------+
| user_id | user_name

32

+---------+-------------+
|

5 | utilizator5 |

6 | utilizator6 |

+---------+-------------+
2 rows n set (0.00 sec)
mysql> Insert into useri(user_name) values ('utilizator7');
Query OK, 1 row affected (0.00 sec)
mysql> Insert into useri(user_name) values ('utilizator8');
Query OK, 1 row affected (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.01 sec)
mysql> Select * from useri; //tabela ramane goala,
deoarece sa dorit renuntarea la inregistrarile anterioare
prin executia lui rollback
Empty set (0.00 sec)
mysql> Start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> Insert into useri(user_name) values ('utilizator9');
Query OK, 1 row affected (0.00 sec)
mysql> Insert into useri(user_name) values ('utilizator10');
Query OK, 1 row affected (0.00 sec)
mysql> Insert into useri(user_name) values ('utilizator11');
Query OK, 1 row affected (0.00 sec)

33

mysql> commit;
Query OK, 0 rows affected (0.03 sec)
mysql> Select * from useri; // tabela contine inregistrarile
deorece s-a executat commit.

+---------+--------------+
| user_id | user_name

+---------+--------------+
|

9 | utilizator9

10 | utilizator10 |

11 | utilizator11 |

+---------+--------------+
3 rows n set (0.00 sec)
mysql> quit
Motivaii pentru folosirea tranzaciilor
Cteva motive pentru care folosirea tranzaciilor i gsesc justificare ar putea fi:
Necesitatea de a realiza operaii atomice - presupune situaia n care se dorete ca mai
multe operaii separate, s se execute mpreun, ntr-o maniera atomic. Aceast abordare
este util, spre exemplu, n cazul n care dorim s facem modificri asupra mai multor
tabele aflate eventual n baze de date diferite pe maina local sau n reea, modificri care
i au locul doar fcute mpreun. Mai particular, putem da drept exemplu cazul
transferului de bani dintr-un cont n altul, transfer care presupune c, o dat suma de bani
citit i modificat din contul surs, s fie scris i n contul destinaie. Dac operaia nu
decurge n mod atomic, se va ntmpla, spre exemplu, ca suma s nu fie transferat efectiv

34

i s se regseasc i n surs i n destinaie, ceea ce reprezint un transfer incorect


(inconsisten). Tranzaciile rezolv aceast problem prin garantarea principiului "totul
sau nimic".
Cderi ale mainii sau ale reelei - n cazul n care bazele de date sunt distribuite n reea,
situaiile ce pot determina excepii cresc. De asemenea, maina pe care se afl bazele de
date poate s cad la un moment dat. n cazul n care cderea se petrece atunci cnd se
face o scriere n baza de date, aceasta poate s fie deteliorat irecuperabil. Tranzaciile
sunt cele care ofer suport pentru recuperarea datelor.
Partajarea acelorai date de mai muli utilizatori - ntr-un intranet apare frecvent
posibilitatea accesrii unei baze de date de mai muli clieni n acelai timp. Conexiunile
concurente pot determina o serie de erori, printre care amintim:
Citiri murdare (eng. dirty reads) - aceast problem apare n cazul n care un client citete
date dintr-o baz de date ce nu a fost salvat definitiv pe suportul de stocare de un alt
client prin operaia commit.
Citiri nerepetabile (eng unreapeatable reads) - aceast problem apare atunci cnd un
client citete date dintr-o tabel, dar n acelai timp acestea sunt modificate de un alt
client.
Problema fantomelor (eng. phantoms) - aceast problem presupune apariia unei noi
mulimi de date ntre dou operaii de citire fcute de un acelai client.
Diferena ntre citiri nerepetabile i problema fantomelor este accea c n primul caz este
vorba de modificri de date existente, iar n al doilea caz este vorba de date cum ar fi
nregistrri sau coloane noi, care nu existau anterior.
ACID *

35

n cazul folosirii tranzaciilor, un numr de patru principii sunt totdeauna garantate pentru
operaiile efectuate. Aceasta poart i numele de proprietile ACID ale tranzaciilor,
denumire care vine de la abrevierea celor patru nume de proprieti: Atomicitate,
Consisten, Izolare i Durabilitate.
Atomicitate - garanteaz c mai multe operaii sunt grupate mpreun i apar ca o singur
unitate continu de lucru. De asemenea, atomicitatea garanteaz c mai multe operaii
sunt executate toate odat sau nici una.
Consisten - garanteaz c starea sistemului rmne consistent dup ce o tranzacie este
terminat. Prin stare consistent se nelege o stare n care sistemul respect o anumit
regul sau, mai general anumite reguli. Sistemul poate trece prin stri temporare de
inconsisten, dar, n final, tranzaciile garanteaz consistena sistemului.
Izolare - permite ca mai muli clieni s citeasc i s scrie ntr-o baza de date fr s tie
unul de altul, deoarece tranzaciile sunt izolate una de alta. Este metoda prin care se
rezolv problemele legate de partajarea resurselor. Acest lucru este util pentru cazul mai
multor clieni care acceseaz baza de date n acelai timp, fiecare avnd impresia c el
este singurul conectat. Tranzaciile asigur blocri automate ale datelor sesibile, care
asigur c o dat ce un client acceseaz zona sensibila (critic), nimeni altcineva nu mai
poate face acest lucru. nc odat trebuie remarcat faptul c, prin folosirea tranzaciilor,
programatorii nu mai trebuie s scrie cod pentru tratarea concurenelor multiple, deoarece
de acest lucru se ocup DBMS-ul. Tot ce trebuie s facem este s specificm tipul de
acces.
Durabilitate - garanteaz c toate actualizrile permanent salvate folosind "commit"
supravieuiesc cderilor de sistem, erorilor de reea, cderii ale hard diskului sau cderilor
de tensiune. Acest lucru este posibil datorit faptului c tranzaciile pstreaz un fiier de
siguran n care sunt nregistrate toate operaiile asupra bazelor de date, nainte ca acestea
s fie efectiv comise. Datele salvate permanent pot fi astfel reconstituite prin reaplicarea
pailor salvai n acest fisier.

36

Niveluri de izolare
Nivelurile de izolare necesit o abordare mai special, mai atent, din partea
programatorilor, tocmai datorit problemelor ce apar n momentul partajrii acelorai
resurse de ctre mai muli clieni.
Programatorul aplicaiei poate specifica nivelul de izolare al tranzaciilor efectuate.
Izolarea poate fi strict sau relaxat. O izolare strict determina separarea total a
tranzaciilor, care se realizeaz prin restricii impuse asupra datelor din tabelele bazei,
soldate cu o scdere a performanelor. De aceea trebuie ales cu grij nivelul de izolare de
care este nevoie.
Care sunt nivelurile de izolare?
READ UNCOMMITTED - Nu ofer nici un fel de izolare, dar garanteaz performane
nalte n ceea ce privete viteaza de acces. Acest nivel de izolare nu este indicat n cazul
conexiunilor concurente i, mai ales, n cele cu date sensibile, cum ar fi sistemul bancar,
din cauza problemelor inevitabile care pot aprea.
READ COMMITTED - Rezolv problema citirilor murdare. Folosind acest nivel de
izolare, nu se vor citi datele care au fost modificate n tabela accesat, fr a fi salvate
definitiv prin "commit".
REPEATABLE READ - Rezolv problemele citirii murdare i citirii nerepetabile. Acesta
este nivelul de izolare implicit pentru servere ca Oracle i MySQL.
SERIALIZABLE - Rezolv problemele citirii murdare, citirii nerepetabile i problema
fantomei. Folosind acest nivel de izolare, tranzaciile sunt izolate total, ceea ce nseamn

37

ca ele se vor executa secvenial, independent una fa de alta. Alegerea acestui nivel va
determina ncetinirea simitoare a tranzaciilor concurente.
Gata cu teoria, hai s vedem cum putem folosi tranzaciile n codul nostru php. Am creat o
clas care ca i utilizare este asemntoare cu folosirea tranzaciilor n .NET i JAVA.
Fiier transaction.php - instanierea i folosirea acestei clase se poate face corect doar dac
avei versiunea PHP 5.X
Cod:
<?php
class tranzactii{
public $conexiune;
private $tablou_interogari;
public $tablou_rezultate;
private $execut=false;
function tranzactii($host,$user,$parola){
$this->conexiune=mysql_connect($host,$user,$parola);
}
public function start($nivel_izolare=3){
if($this->conexiune!=NULL){
if($nivel_izolare==1){
mysql_query('set transaction isolation level
read uncommitted',$this->conexiune)
or die(mysql_error($this->conexiune));
}
elseif($nivel_izolare==2){
mysql_query('set transaction isolation level

38

read committed',$this->conexiune)
or die(mysql_error($this->conexiune));
}
elseif($nivel_izolare==3){
mysql_query('set transaction isolation level
repeatable read',$this->conexiune)
or die(mysql_error($this->conexiune));
}
else{
mysql_query('set transaction isolation level
serializable',$this->conexiune)
or die(mysql_error($this->conexiune));
}
mysql_query('Start Transaction',$this-

>conexiune)
or die(mysql_error($this->conexiune));
}
}
private function pastreaza(){

mysql_query('Commit',$this->conexiune);
}
private function renunta(){
mysql_query('Rollback',$this->conexiune);
}
public function rezultat(){
return $this->execut;
}

39

public function adauga($tablou_sql){


$this->tablou_interogari[]=$tablou_sql;
}
public function executa(){
$this->execut=true;
try{
if(count($this->tablou_interogari)>0 and $this>conexiune!=NULL){
foreach($this->tablou_interogari as
$keye=>$valoare){
$selecteaza_bd=mysql_select_db($valoare[
0],$this->conexiune);
if($selecteaza_bd){
$rezultat_fraza_sql=mysql_query($val
oare[1],$this->conexiune);
if($rezultat_fraza_sql!=false){
$this>tablou_rezultate[]=array('SQL No.'=>$keye,
'DB'=>$valoare[0],'SQL phrase'=>$valoare[1],'SQL
result'=>'Good','Error'=>'');
}
else{
$this>tablou_rezultate[]=array('SQL No.'=>$keye,
'DB'=>$valoare[0],'SQL phrase'=>$valoare[1],'SQL
result'=>'Bad',
'Error'=>mysql_error($this->conexiune));
$this->execut=false;

40

}
}
else{
$this->execut=false;
$this->tablou_rezultate[]=array('SQL
No.'=>$keye,
'DB'=>$valoare[0],'SQL phrase'=>$valoare[1],'SQL
result'=>'No result',
'Error'=>'Am intalnit o problema la selectarea bd-ului');
}
}
if($this->execut==true){
$this->pastreaza();
}
else{
$this->renunta();
}
}
}
catch(Exception $e){
$this->execut=false;
$this->tablou_rezultate[]=array('Exceptie'=>$e>getMessage());
}
}

41

public function inchide_conexiune(){


@mysql_close($this->conexiune);
}
}
?>
Ok, cum folosim aceast clas? n primul rnd se include fiierul transaction.php, se
instaniaz clasa, se alege nivelul de izolare, se adaug interogrile SQL dorite i apoi le
executm pe toate ca un ntreg. Putem de asemeni s aflm dac toate interogrile au fost
executate corect i salvate permanent n baza de date, sau care este rezultatul interogrilor
SQL (ideal de folosit atunci cnd una sau mai multe dintre acestea nu ndeplinesc anumite
condiii).

n continuare v prezint fiierul testare_tranzactii.php


od:
<?php
include ('transaction.php');
?>
<html>
<head>
<title>Untitled Document</title>
</head>
<body>
<?php
// se instantiaza clasa
$conexiune = new tranzactii('host','user','parola');
// se alege nivelul de izolare. 1-read uncommitted 2-read
committed 3-repeatable read (implicit) 4-serializable
$conexiune->start(4);
// se adauga interogarile SQL respectiv un tablou a carui
pozitie 0 este numele bd-ul iar pozitia 1 va fi interogarea

42

SQL dorita.
// Aceasta interogare SQL are sintaxa corect scrisa.
$conexiune->adauga(array('java','Insert into studenti
(nume_student) values (\'Diesel\')'));
// se adauga a doua interogare SQL. Aceasta interogare SQL
are sintaxa incorect scrisa.
$conexiune->adauga(array('java','Insert into studenti
(\'Diesel\')'));
// se executa interogarile SQL adaugate. Prima interogare
SQL este corect scrisa, n consecinta ea va fi executata cu
succes.
// A doua interogare SQL este incorect scrisa, n
consecinta ea nu va fi executata cu succes,
// acest lucru determinand executarea lui rollback. Deci
ambele interogari sql nu sunt salvate n bd.
$conexiune->executa();
// $conexiune->rezultat() ne returneaza TRUE sau FALSE n
functie de rezultatul executiei interogarilor SQL.
// Daca cel putin o interogare SQL nu este executata cu
succes atunci rezultatul lui $conexiune->rezultat() va fi
FALSE.
var_dump($conexiune->rezultat());
// n cazul n care se doreste inchiderea conexiunii cu
MySQL
$conexiune->inchide_conexiune();
// $conexiune->tablou_rezultate va returna un tablou ce va
afisa rezultatele pentru fiecare interogare SQL adaugata.
// Va trebui sa folositi print_r pentru a intelege
structura tabloului.
print_r($conexiune->tablou_rezultate);
?>
</body>
</html>
n cazul n care serverul MySQL este nchis pentru a nu obine Warning la linia 10 din
transaction.php,

putei

pune

nainte

de

instania

clasa.

Tranzaciile pot fi folosite pe MySQL i pe versiuni mai vechi ale acestuia, ns cei de la
MySQL recomand ultima versiune (5.0)

43

CAPITOLUL 3
Prezentare Site

Prima pagin a sit-ului a fost facut n html dup care codul surs a fost imparit n 3
fiiere php :
1) header.inc.php
2) main.inc.php;
3) foot.inc.php;
Pentru a putea folosi funcia include. Insernd toate aceste fiiere intr-un singur fiier
index.php am generat prima pagin a sit-ului de prezentare pentru parcul auto.
header.inc.php conine cod surs html i css

44

Sursa fiierului index.php

Prima pagina a sit-ului, conine 3 butoane, putnd fi extins pe viitor dup necesitai

Home butonl care duce vizitatorul la prima pagin index.php


Oferta Auto acest buton duce la prezentarea mainilor disponibile n parc
Contact buton pentru formularul de contact

45

Afiarea masinilor intruduse n site de ctre administrator.

La fiecare produs se pot accesa detaliile princilape, care sunt:


1. Preul
2. An Fabricaie
3. Tip combustibil
4. Culoarea
5. Km Parcui
6. Detalii sumare
Iar la apsarea butonului detalii se deschide o alt fereastr care conine toate detaliile i
pozele inserate n site din administrare. Se pot introduce n baz de date pan la 5 poze.

46

Pentru afiare este nevoie de o conexiune la baza de date a sit-ului.


Tehnologiile folosite aici sunt : html, css i php

47

Conectarea la baza de date se face prin fiierul mysql.data.php aflat n directorul lib.
Aici gsim definite numele bazei de date, serverul pe care se afl aceasta, userul i parola
de acces.

48

Structura bazei de date


Baza de date este structurata pe 4 tabele :

Orice pagin are nevoie de un formular de contact, pentru ca vizitatorul sa poat intra n
contact cu firma respectiv.
La acest formular s-a folosit metoda post deoarece metoda POST permite trimiterea unei
cantiti mai mari de date dect metoda GET

<form id="form1" name="form1" method="post" action="send.php">

49

Formularul conine cmpurile


1. Nume
2. Prenume
3. Telefon
4. Email
5. Mesaj
Iar dac este nevoie se mai pot adauga unele noi.
Codul surs din formularul de contact

50

Fiierul send.php preia datele din formular i le trimite n mailul definit.

Administrare pagina

Pentru adugarea produselor ( mainilor ) i informaiilor aferente pagina are o parte de


administrare, protejat cu user i parol , stabilite la creearea bazei de date.

51

Userul admin este creat n baza de date cu numele Admin iar parola este criptat n
protocolul MD5

Pentu a modifica parola trebuie accesat administrarea siteului i din meniu alegem
opiunea Modificare Cont
n cmpul Username se introduce utilizatorul i n cmpul Parola noua se introduce
parola care vrei s o avem pe viitor dar pentru a fi sigur ca nu am gresit parola trebuie s o
introducem din nou n cmpul Confirmati parola dupa ce toate cmpurile sunt
completate apsam butonul salvare.

n partea de administrare se pot:


- adaug categorii pentru produse;
- adaug produse specifice fiecrei categorii, momentan doar auto;
- se poate vizualiza lista de anunuri publicate n site;
- vizualiza pozele aferente
- editarea anunurilor

Managementul categoriilor

52

Din meniul de administrare alegem opiunea management categorii i ne apare fereastra


Adugati o noua categorie

Pentru a aduga un anun nou alegem din meniul de administrare opiunea Adaug
anunuri ne apare meniul Adugati un nou anun cu urmatoarele opiuni
Categoria care este stabilit anterior din meniul Alege o noua categorie
Denumire autovehicul unde va aprea denumirea spre exemplu VW Passat 1.9TDI
Bussines line

Pre:
Moneda: este definit n baza date, se poate selecta EURO sau alte monede definite
imiial
An fabricaie
Combustibil
Capacitatea cilindric

53

Adaugare anun

Lista de anunuri este o previzualizare din admin de unde se pot vizuliza pozele, edita
toate detaliile i sterge anunul.

54

meniu editare vizualizare - tergere

n ordine de la stnga la dreapta


Cu primul buton se adaug partea detaliile mainii (partea scris scrisa a
anunului)
Al doilea buton adauga poya pricipal a produsului
Urmtoarele butone trei i patru adaug poye suplimentare produsului
Iar al treilea buton terge intregul anun

Concluzii

55

De ce sa va faceti website?
Un website de internet este o unealta de marketing, consecintele unui website profesional
sunt comparabile cu o echipa de oameni care ar umbla prin lume icercand sa va faca
publicitate i sa va promoveze produsele i serviciile, diferenta fiind ca un website
profesional va costa infim fata de beneficiile care vi le aduce.
Importanta Internetului n zilele noastre este deja cunoscuta iar exploatarea oportunitatilor
oferite de acesta trebuie sa fie o prioritate pentru o firma moderna mai ales daca
concurenta are deja prezenta online.
Un website asigura prezenta firmei dvs. pe Internet, va face cunoscuta afacerea n
Romania i n lume intr-un mod simplu economic i eficient i nu n ultimul rand va
imbunatateste imaginea.
Un website costa o singura data i ramane permanent, 24 de ore din 24 n atentia
publicului din orice zona a lumii. Oricand, continutul unui website poate fi actualizat sau
modificat dupa bunul Dvs. plac.

Acest site se poate extinde, ajungand la un adevarat portal auto-moto.


Privind spre tot mai numeroi utilizatori de Internet, cel mai important lucru pare a fi
dorina omului de a obine informaii utile din uriaa resurs informaional, accesibil cu
ajutorul calculatorului iar n aceast epoc a globalizrii, atunci cnd se vorbete la tot
pasul.
Beneficiile acestui site sunt:
Este convenabil, situl fiind operaionale 24 ore pe zi, 7 zile pe sptmn dnd
posibilitatea clientului de a putea accesa ntodeauna informatiile legate de produse.
Spaiul nelimitat - siturile de prezentare putnd afia/indexa un numr nelimitat de bunuri
i servicii;
Service mai bun pentru clieni consultana poate fi disponibil non-stop, relaiile
interumane fiind mai strnse;
Iar unele din dezavantaje:

Asisten - gradul de informaii referitoare la un produs poate fi insuficient;

56

Fiabilitate i credibilitate - punctul cheie este ca multitudinea de date pe web, pe


care le poate oricine accesa, s se transforme n informaii ce vor deveni ulterior
cunoatere. Din cauza timpului scurt de existen sau a dinamicitii ridicate, datele
se nvechesc foarte rapid, lipsind mecanismele necesare unei analize de termen
lung.

Bibliografie:

57

1. Luke Welling,Laura Thomson; Dezvoltarea aplicatiilor WEB cu


PHP i MySQL, Editia a II-a (+CD); Editura Teora [2005]
2. Laura Thomson; Dezvoltarea aplicatiilor WEB cu PHP i
MySQL; Editura Teora [2004]
3. Traian Anghel; Dezvoltarea aplicatiilor WEB folosind XHTML,
PHP i MySQL; Editura Polirom [2005]
4. Julie C. Meloni; INVATA SINGUR PHP, MYSQL I APACHE;
Editura Corint [2005]
5. Sabin Buraga; Aplicatii Web la cheie. Studii de caz implementate
in PHP; Editura Polirom [2003]
6. Teodoru Gugoiu; HTML, XHTML, CSS i XML prin exemple ghid practic; Editura Teora [2005]

www.phpromania.ro
www.oscommerce.com
www.w3schools.com/asp/default.asp

ANEXA
CODUL SURSA

58

Baza de date
masini.sql
-- phpMyAdmin SQL Dump
-- version 2.9.0.1
-- http://www.phpmyadmin.net
--- Host: localhost
-- Generation Time: Mar 01, 2007 at 12:31 PM
-- Server version: 5.0.24
-- PHP Version: 5.1.6
--- Database: `masini`
-USE `masini`;
-- ---------------------------------------------------------- Table structure for table `admin`
-CREATE TABLE `admin` (
`id` int(11) NOT NULL default '0',
`username` varchar(50) collate latin1_general_ci NOT NULL default '',
`password` varchar(50) collate latin1_general_ci NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
--- Dumping data for table `admin`
--

59

INSERT INTO `admin` VALUES (0, 'admin', 'c4ca4238a0b923820dcc509a6f75849b');


-- ---------------------------------------------------------- Table structure for table `adverts`
-CREATE TABLE `adverts` (
`id` int(11) NOT NULL auto_increment,
`category` int(1) NOT NULL default '0',
`title` varchar(200) collate latin1_general_ci NOT NULL default '',
`content` text collate latin1_general_ci NOT NULL,
`price` varchar(30) collate latin1_general_ci NOT NULL default '',
`fabrication_year` varchar(4) collate latin1_general_ci NOT NULL,
`fuel_type` varchar(20) collate latin1_general_ci NOT NULL,
`cmc` varchar(10) collate latin1_general_ci NOT NULL,
`cp` varchar(10) collate latin1_general_ci NOT NULL,
`mileage` varchar(15) collate latin1_general_ci NOT NULL,
`color` varchar(30) collate latin1_general_ci NOT NULL,
`currency` int(11) NOT NULL default '0',
`date_added` varchar(25) collate latin1_general_ci NOT NULL default '',
`date_expires` varchar(25) collate latin1_general_ci NOT NULL default '',
`image` varchar(100) collate latin1_general_ci NOT NULL default '',
`image1` varchar(100) collate latin1_general_ci NOT NULL default '',
`image2` varchar(100) collate latin1_general_ci NOT NULL default '',
`image3` varchar(100) collate latin1_general_ci NOT NULL default '',
`image4` varchar(100) collate latin1_general_ci NOT NULL default '',
`is_valid` char(1) collate latin1_general_ci NOT NULL default '',
`is_active` char(1) collate latin1_general_ci NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
AUTO_INCREMENT=3 ;

60

--- Dumping data for table `adverts`


-INSERT INTO `adverts` VALUES (1, 12, 'PEUGEOT 407 HDI', 'CARTE
SERVICE,KM.REALI,CLIMATRONIC,JANTE ALIAJ,TEMPOMAT,COMPUTER
BORD,R+CD+MAGAZIE CD,SENZORI PLOAIE,SENZORI LUMINI,PLAFON
PANORAMIC STICLA HELIOMATA,GEAMURI ELECTRICE,OGLINZI ELECTRICE
INCALZITE,PARBRIZ I LUNETA INCALZITE,S.S:VF33HRHSB83364657.PRET CU TVA
I TAXE RAR 13000EURO.', '14000', '2003', 'Motorina', '2500', '200', '400000', 'ROSU
METALIZAT', 3, '1172739402', '1188594000', '', '', '', '', '', '1', '1');
INSERT INTO `adverts` VALUES (2, 12, 'PEUGEOT 407 DTI', 'NERULATA RO,CARTE
SERVICE,KM.REALI,CLIMATRONIC,JANTE ALIAJ,TEMPOMAT,COMPUTER
BORD,R+CD+MAGAZIE CD,SENZORI PLOAIE,SENZORI LUMINI,PLAFON
PANORAMIC STICLA HELIOMATA,GEAMURI ELECTRICE,OGLINZI ELECTRICE
INCALZITE,PARBRIZ I LUNETA INCALZITE,S.S:VF33HRHSB83364657.PRET CU TVA
I TAXE RAR 13000EURO.', '13000', '2002', 'BENZINA', '2100', '180', '350000', 'ROSU
METALIZAT', 3, '1172739431', '1188594000', 'a6c6ff6830.jpg', 'edb2ad8b6c.jpg',
'1b951a2cbb.jpg', '', '', '1', '1');
-- ---------------------------------------------------------- Table structure for table `categories`
-CREATE TABLE `categories` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(60) collate latin1_general_ci NOT NULL default '',
`is_active` char(1) collate latin1_general_ci NOT NULL default '',
PRIMARY KEY (`id`)

61

) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci


AUTO_INCREMENT=14 ;
--- Dumping data for table `categories`
-INSERT INTO `categories` VALUES (12, 'Auto', '1');
INSERT INTO `categories` VALUES (13, 'sd', '0');
-- ---------------------------------------------------------- Table structure for table `currency`
-CREATE TABLE `currency` (
`id` tinyint(4) NOT NULL auto_increment,
`name` varchar(10) collate latin1_general_ci NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
AUTO_INCREMENT=6 ;
--- Dumping data for table `currency`
-INSERT INTO `currency` VALUES (1, 'RON');
INSERT INTO `currency` VALUES (2, 'ROL

Formularul de contact
Send.php

62

<?
include('lib/config.inc.php');
class Login{
var $query;
function Login($idFld, $usernameFld, $passwordFld, $tbl, $usernameVar, $passwordVar){
$con = new Connection(MYSQL_HOST, MYSQL_USER, MYSQL_PWD, MYSQL_DB);
$this->query = 'select
'.$idFld.', '.$usernameFld.'
from
'.$tbl.'
where
'.$usernameFld.' = "'.$usernameVar.'" and '.$passwordFld.' = MD5("'.$passwordVar.'")';
Login::checkUser();
}
function checkUser(){
$sql = new Query($this->query);
print $sql->err;
if($sql->rows != 0){
$_SESSION['loggedUser']['id'] = $sql->resultArray[0][0];
$_SESSION['loggedUser']['username'] = $sql->resultArray[0][1];
header('location: admin.index.php');
}else{
header('location: index.php?err=1');
}
}
}
$c = new Login('id', 'username', 'password', 'admin', $_POST['username'], $_POST['password']);
?>

Fisierul de cofigurare
mysql.data.php
<?

63

define('MYSQL_HOST', 'localhost');
define('MYSQL_USER', 'root');
define('MYSQL_PWD', 'virusempire');
define('MYSQL_DB', 'masini');
?>

Codul CSS
.link_11px_gray_underline:link{
font-family:Arial, Helvetica, sans-serif;
color:#999999;
font-size:11px;
text-decoration:none;
}
.link_11px_gray_underline:visited{
font-family:Arial, Helvetica, sans-serif;
color:#999999;
font-size:11px;
text-decoration:none;
}
.link_11px_gray_underline:active{
font-family:Arial, Helvetica, sans-serif;
color:#999999;
font-size:11px;
text-decoration:none;
}
.link_11px_gray_underline:hover{
font-family:Arial, Helvetica, sans-serif;
color:#999999;
font-size:11px;
text-decoration:underline;
}

64

.link_11px_orange_underline:link{
font-family:Arial, Helvetica, sans-serif;
color:#FF6632;
font-size:11px;
font-weight:bold;
text-decoration:none;
}
.link_11px_orange_underline:visited{
font-family:Arial, Helvetica, sans-serif;
color:#FF6632;
font-size:11px;
font-weight:bold;
text-decoration:none;
}
.link_11px_orange_underline:active{
font-family:Arial, Helvetica, sans-serif;
color:#FF6632;
font-size:11px;
font-weight:bold;
text-decoration:none;
}
.link_11px_orange_underline:hover{
font-family:Arial, Helvetica, sans-serif;
color:#FF6632;
font-size:11px;
font-weight:bold;
text-decoration:underline;
}
.link_11px_nb_orange_underline:link{
font-family:Arial, Helvetica, sans-serif;
color:#FF6632;
font-size:11px;
text-decoration:none;

65

}
.link_11px_nb_orange_underline:visited{
font-family:Arial, Helvetica, sans-serif;
color:#FF6632;
font-size:11px;
text-decoration:none;
}
.link_11px_nb_orange_underline:active{
font-family:Arial, Helvetica, sans-serif;
color:#FF6632;
font-size:11px;
text-decoration:none;
}
.link_11px_nb_orange_underline:hover{
font-family:Arial, Helvetica, sans-serif;
color:#FF6632;
font-size:11px;
text-decoration:underline;
}
.link_11px_black:link{
font-family:Arial, Helvetica, sans-serif;
color:#000000;
font-size:11px;
text-decoration:none;
}
.link_11px_black:visited{
font-family:Arial, Helvetica, sans-serif;
color:#000000;
font-size:11px;
text-decoration:none;
}
.link_11px_black:active{

66

font-family:Arial, Helvetica, sans-serif;


color:#000000;
font-size:11px;
text-decoration:none;
}
.link_11px_black:hover{
font-family:Arial, Helvetica, sans-serif;
color:#000000;
font-size:11px;
text-decoration:underline;
}
.text_11px_black_nobold{
font-family:Arial, Helvetica, sans-serif;
color:#000000;
font-size:11px;
}
.text_11px_orange_nobold{
font-family:Arial, Helvetica, sans-serif;
color:#FF6600;
font-size:11px;
}
.input_text_11px_black{
font-family:Arial, Helvetica, sans-serif;
color:#000000;
font-size:11px;
border:1px #333333 inset;
background-color:#FFFFFF;
}
.select_11px_black{
font-family:Arial, Helvetica, sans-serif;
color:#000000;

67

font-size:11px;
border:1px #333333 inset;
}

68

S-ar putea să vă placă și