Lucrare de Licență

UNIVERSITATEA DIN ORADEA
FACULTATEA DE ȘTIINȚE
PROGRAMUL DE STUDIU: INFORMATICĂ
FORMA DE ÎNVĂȚĂMÂNT: CU FRECVENȚĂ
Lucrare de Licență
COORDONATOR/I ȘTINȚIFIC/I
CONF. UNIV. DR. CĂUȘ VASILE AUREL
LECT.UNIV. NOJE DAN CĂTĂLIN
ABSOLVENT
TOCUȚ CRISTIAN
ORADEA
2015
UNIVERSITATEA DIN ORADEA
FACULTATEA DE ȘTIINȚE
PROGRAMUL DE STUDIU: INFORMATICĂ
FORMA DE ÎNVĂȚĂMÂNT: CU FRECVENȚĂ
DEZVOLTAREA UNEI APLICATII WEB FOLOSIND MVC
(MODEL VIEW CONTROLER)
COORDONATOR/I ȘTINȚIFIC/I
CONF. UNIV. DR. CĂUȘ VASILE AUREL
LECT.UNIV. NOJE DAN CĂTĂLIN
ABSOLVENT
TOCUȚ CRISTIAN
ORADEA
2015
Cuprins
Pagina
Introducere………………………………………………………………………………………………….4
Capitolul I. Notiuni generale despre aplicatii web…………………………………………5
I.1. Componentele arhitecturii aplicațiilor web……………………………..5
I.2. Comunicarea client-server………………………………………………………8
Capitolul II. Tehnologii specifice aplicatiilor web ……………………………………….8
II.1. HTML (HyperText Markup Language)………………………………..8
II.2. CSS Cascading Style Sheets………………………………………………….14
II.3 PHP……………………………………………………………………………………..16
Capitolul III. CakePHP și tehnica de dezvoltare MVC………………………………..19
III.1. CakePHP framework………………………………………………………….19
III.2. MVC (Model View Controller)……………………………………………22
Capitolul IV. Prezentarea aplicatiei……………………………………………………………23
IV.1. phpMyAdmin…………………………………………………………………….23
IV.2. Front end (partea din față)…………………………………………………26
Bibliografie…………………………………………………………………………………………………..
Anexe (figuri, tabele, poze, etc)………………………………………………………………………
Introducerea
La inceputul anilor 1990 a apărut CGI (Common Gateway Interface) fiind prima dezvoltare in direcția folosiri unui server web permitând rularea unor scripturi pe server generâns un raspuns dinamic in format HTML[1].
In zilele nostre aplicațiile web au luat amploare fii tot mai mult felosite de marea majoritate a populației fiind disponibile si accesibile pe smartphone-uri, tablete, calculatoare si alte dispozitive. Incepand de la copii, adulți, instituții etc fiecare folosesc aplicațiile web in diferite scopuri de la simple documentatii pana la plați sau tranzactii bancare online influențand astfel viața de zi cu zi a oamenilor tot mai mult pe plan educațional, administrativ, economic, industrial și așa mai departe. De la inceput si pana in prezent World Wide Web s-a dezvoltat foarte mult de la proiectara lui ca un mediu de informare pana la aplicații de care depide viata unor oameni continuând astfel sa se dezvolte tot mai mult.
 Aplicațiile web sunt sisteme software bazate pe tehnologiile si standardele consortiului World Wide Web (W3C)[2]. In funcție de complexitatea aplicatțiilor web ele pot fi variabile incepand de la cele mai simple care sunt doar informationale pana la cele mai complicate care sunt folosite non-stop cum ar fi magazinele online care au un flux foarte mare de utilizatori.
Apariția Common Gateway Interface (http://hoohoo.ncsa.uiuc.edu/cgi/ interface.html) impreuna cu formularele HTML au aparut si aplicațiile web interactive fiind o forma mai simpla de interactivitate cu paginile cu ajutorul formularelor, meniurilor de selecție, butoanlor radio etc. Se generarea dinamic paginile si legaturile către alte pagini depinzand de ce introduce utilizatorul cum ar fi planificarea călătoriilor sau prezentările virtuale[2].
Aplicatiile tradiționale (cele non-web) difera de cele web detaliile lor cansta pe o parte in caracteristicile de care cele tratiționale nu au nevoie de navigarea non-liniara si caracteristicile care sunt foarte importante cum ar fi frecvența actualizarilor. Cu toate ca o poarte caracteristica este prezenta si depinde de tipul aplicatiei web dezvoltarea celor tranzactionale ca de exemplu sistemele de e-commerce au nevoie de o focalizare ma mare asupra actualizarii si asupra consistentei conținutului in comparație sistemele informatice pure ca de exemplu prezentarile virtuale. Acestea sunt motivut pentru care multe comcepte, tehnici, metode ale proiectări software traditionale trebuiesc adaptate cerintelor proiectarii web. Prin atribuirea unor caracteristici aplicațiilot web se paote vedea ce influenta au asupra calitatiisi asa sa considerăm caracteristicile ca un puct de pornire pentru definirea celor necesare proiectarii aplicațiilor web[2].
Tehnic vorbind aplicațiile web functionează pe baza principiului client/server. Latimea de banda, siguranța si stabilitatea conexiunii acestia sunt factorii independenți pe care trbuie să ii luăm in considerare la dezvoltarea unei aplicatii web pentru ca aceasta sa aiba o calitate adecvata. Latimea de banda pote poate fi marita pentru a crește cantitatea de date transferata incât conținutul media cum ar fi poze, video si altele va fi transferat la o rezolutie scazuta daca avem o latime de banda mai mica. Din cauza tendinței de orientare in spre aplicațiile web pentru telefoanele mobile acest aspect prinde o importanța mai mare asa cum retelele convergente au nevoie de mai multa adaptare la nivelul aplicatiei[2].
Aplicațiile web sunt intr-o continua schimbare si evoluaza permanent de la un an la altul din cauza schimbari cerintelor utilizatorilor acestora care au asteptari tot mai mari si a dispozitivelor tot mai prformante, odata cu schimbarea lor se schimba si tehnologiile web acestea fii mult mai complexe, aceste schimbari se datoreaza si utilizatorilor care se tin la curent cu ultimile apariții aplicațiilor web.
Capitolul I. Notiuni generale despre aplicatii web
Arhitectura aplicațiilor web joacă un rol foarte important in caliatea acestora astfel cu cat au o arhitectură mai bună cu atât le crește si calitatea iar lipsa arhitecturi bine stabilite unei aplicatii afectează in mod direct calitatea acesteia ducând la intreținerea greoaie a acesteia, a eficienței scăzute si dificultatea la folosirea acesteia. Trebuie luat in calcul pentru aceasta ca arhitecții sa fie bine pregatiți sa aibe o experienta îndelungata, sa folosească arhitecturi multi-strat flexibile.
In dezvoltarea de aplicații web trebuie luat in calcul un număr mare de cerinte si de constrângeri, incepand cu cele functionale cum ar fi comenzile de produse online si cele de calitate (performanta si calitate) și pana la integrarea sistemelor software existente (cele de mostenire sau depozitele de date care sunt pe aplicașiile web ar trbui sa le citeasca). Cu ajutorul arhitecturi se fac urmatoarele etape:
Descrie aspectele statice și cele dinamice ale sistemului software fiind necesara construirea diagramei de flux produsului in cauza.
Face trecerea de la analiza la implementare descompunând cerințele functionale si cele calitative in componente software.
Poate fi luata din mai multe puncte de vedere depinzând de care se pot specifica aspecte arhitecturale diferite, cum ar fi: abordarea in functie de momentul rularii (aceasta descrie componentele în momentul rularii sistemului), abordarea conceptuală (identifică indentitațile domeniului aplicației)[2].
Pe parcurs arhitectura software-ului și cerintele lui se mai modifică, tot odata se mai modifica si constrângerile tehnice cauzele putand fi cerințele neclare de la inceputul procesului sau a schimbari cerintelor spre sfarsitul finalizari. Din cauza schimbări continue a sistemelor sofware dezvoltarea lor se face intr-o maniera interativă fapt ce nu garanteaza o arhitectura solidă, abordarea interativă ne fiind suficientă in rezolvarea problemelor specifice de proiectare. IBM ne descrie in șabloanele pentru afaceri electronice acele șabloane de arhitectură pentru aplicațiile comerciale si modul in care pot fi mapate pe infrastructura IBM[2].
1. Componentele arhitecturii aplicațiilor web
Prezentarea componentelor de baza Figura 1.1, comunicarea dintre ele se bazează pe principiul de cerere-răspuns (o componenta – un browser trimite o cerere catre alta componentă iar serverul web si raspunsul la cerere es trimis inapoi pe acelas canal de comunicare)[2]
Componentele arhitecturii aplicațiilor web

Figura 1.1 (sursa http://www.scritub.com/files/informatica/429_poze/image046.gif)
Aceste componente fomează impreună arhitectura unei aplicații iar dupa rolul lor ele sunt urmatorele:
Client este de obicei un browser fiind controlat si manipulat de catre o persoană/un utilizator.
Proxy este folosit pentru stocarea paginilor web intr-un cache (in acesta se salveaza unele date disticte unui utilizator si altele).
Server web este un sotware care poate suporta diferite protocoale web cum ar fi HTTP si HTTPS pentru procesarea cererilor utilizatorilor.
Serverul pentru baze de date, este o locație unde se salveaza unele date structurate ale clientului sub forma de tabele.
Servarul media (audio și video) este folosit pentru streamingul continutului datelor nestructurate.
Serverul pentru managementul continutului (cum ar fi documente XML) acesta pastrează continutul aferent al aplicației in cauză fiind disponibil sub o forma de date nestructurate.
Serverul aplicațiilor (fluxul de date) in acesta se pastrează functionalitatea de care au nevoie diferite aplicații.
Arhitectura pe două sau mai multe straturi permite sa ne organizam aplicatiile pe un numar dorit de nivele caonstand de obicei in doar trei straturi acestea fiind: cel al datelor (oferă acces la datele aplicatiei), cel al afacerii (aici se afla logica de afacer a aplicatiei) si cel de prezentare (ne returneaza rezultatul cereri sub forma de iesire dorit)[2].
Arhitectura pe două sau mai multe straturi

Figura 1.2 (sursa http://www.scritub.com/files/informatica/429_poze/image048.gif)
Personalizarea sau fluxul de date se retin pe serverul aplicației fiind disponibile pentru toate aplicațiile web, aceste servicii sunt incorporate in serverele de aplicatii cu interfata definita putând fi folosită inclusiv pentru a administra aceste servicii cum ar fi serverul de aplicatii WebSphere.
Comunicarea client-server
Unul dintre cele mai importante lucruri al unei aplicații web este aceasta comunicare client-server care sta la baza aplicației facand legatura intr-e cele doua parti, utilizator și aplicația propriu zisa adica serverul. Comunicarea dintre aceste doua parti se are la bază arhitectura pe doua straturi iar pasi de procesare de pe serverul web pot avea si integrarea altor sisteme cum ar fi servere de aplcații sau baze de date iar arhitecturile de mai multe straturi au la baza pricipiul client-server cum are fi browserul web care trimite cererea care determina raspunsul de la servarul web. Simple Mail Transfer Protocol (SMTP) impreuna cu Post Office Protocol (POP3) permite primirea si trimiterea de e-mail-uri, SMTP fiind tot mai des folosit pentru a trasporta pentru schimbul de mesaje asincroane care sunt pabate pe SOAP[2].
Realt Time Streaming Protocol (RTSP) est un standard publicat de catre Internet Engineering Rask Firce (IETF) fiind proiectat cu scopul suportari distribuiri de date multimedia in timp real, in plus fata de celelalte protocoale amintite mai sus RTSP poate transmite resurselor de catre resurse clientuli intr-un mod foarte bun in comparatie cu transmiterea în intregime purtând denumirea de streaming. El permite schimbarea manuala a ¨ perioadei de timp¨ prin cererea stream-ului intr-un anumit moment încat ofera posibilitatea de control al rulari piesei media fara intrerupere cum ar fi implementarea functii similare celor de pe dispozitivele hi-fi: inapoi, inainte, pauză si altele[2].
Printr-e cele mai importante protocoale in ziua de azi este HyperText Transfer Protocol cunoscut sub denumirea de HTTP. Acest protocol controleaza felul in care resursele ca de exemplu continutul HTML sunt accesate, construirea lui este facuta pe stiva TCP/IP avand portul 80 avnd adresate resursele cu ajutorul URL-ului. Aceste URL-uri (Uniform Resource Identifier) nu sunt legate de un anume protocol, ele reprezinta un mecanism de adresare uniform fiind folosit în HTTP. Aceste URL-uri pot fi folosite in conexiunile cu Domain Name System (cunoscut sub numele de DNS) pentru a gasi sisteme gazda pe care se află acestea. În momentul primiri mai multor cereride la mai multi utilizatori in acelaș timp aplicatiile web trebuie sa poata face diferenta intre aceste cereri asta inseamna de a avea o sesiune intre user si server. URL-ul primeste datele relevante sub forma de parametru cu jutorul mecanismului de rescriere a URL-ului[2].
Pentru stocarea informatiei de pe server se folosesc asa numitele Cookies ele retin multe informatii foarte important ca de exemplu o parola, un email, locatia curenta, sau multe alte detalii legate de utilizator, ele ne sunt generate de catre server iar dupa sunt trimise utilizatorului. Ele pot fi doar pentru un anumit timp (acestea contin o data a expirări lor pana la care sunt valabile) sau pot fi permanente, cele care au o anumita durata se sterg la inchiderea pagini sau a motorului de cautare iar cele permanente ne sunt salvat in calculator oe har disk. Cu ajutorul acesto cookies servarul stie daca unele cereri vin de la acelas utilizator sau vine de la utlizatori diferiti astfel pe cele de la acelas utilizator le poate asocia unei sesiuni.
Pentru a preveni ca unele informatii legate de paginile internet pe care le accesăm sa nu fie salvat in cookies putem seta din browser ca acele pagini sa nu fie salvat niciodata astfel putem sa ne ferim ca informatiile ne dorita sa fie salvate și sa eliminăm riscul ca informatiile noastre personale sa ajunga pe maini ne dorite. In schimb sunt unle site-uri care folosesc cookies in scopul salvari informatiiolor cum ar fi cosul de cumparaturi, in acest caz daca site-ul a fost creat sa foloseasca cookies nu putem folosi cosul daca nu avem activat cookies la acel site. Mai nou site-urile moderne pun la dispozitia utilizatorului un mod de a alege daca vrea sa folosească cookies la acel site sau nu.
Aceste cookies pe langa avantajele care le au in usurinta schimbului de informatii intre client si server au si unele dezantaje cum ar fi schimbarea comportamentului browser-ului cauza pentru care multi utilizatori le dezactiveaza pentru a inpiedica acest lucru.
Unele programe pot contine asa numitele Plugin-uri sau insert acestea putând fi integrate in programe mai mari (programe de baza) pentru a indeplini o anumita funcționalitate sau mai multe.
Aceste pot fi folosite pentru afisarea formatelor grafice, execuția fisierelor multimedia, criptarea sau dectiptarea de e-mail-uri, filtrarea unor imagini în programele grafice. In cazul browserului se setează un standard pentru schimbut datelor cu plugin-ul permitând accesul lor la datele din program executand cererile pluginu-rilor, unii producatori de software oferă celor care le proiectează programele API-uri (Aplication Programming Interface) pentru plugin-ri in ideea de a creste utilitatile programului[3].
Capitolul II. Tehnologii specifice aplicatiilor web
1. HTML HyperText Markup Language
HTML (HyperText Markup Language) este un limbaj de marcare (un set de tag-uri markup) pentru a descrie documente web (pagini web). Documentele HTML suntdescrise de tag-uri HTML, fiecare tag HTML descrie continut diferit fiind. Tag-urile sunt cuvinte cheie care au la inceputul lor si la sfarșit paranteze unghiulare[4].
HTML a fost dezvoltat inițial de Tim Berners-Lee și popularizat de către browser Mosaic dezvoltat la NCSA, pe parcursul anilor 1990 a avut o dezvoltare exploziva pe web, in acest timp HTML fiind extins intr-o grămadă de moduri. HTML 2.0 Noiembrie 1995 a fost dezvoltat de catre Internet Enginnering Task Force (IETF) sa codifice o practică obijnuita in sfarșitul anului 1994. HTML. Fiecare versiune de HTML a incercat să reflecte mai consens intre jucatori din industrie, astfel ca investitia facută de furnizorii de continut nu a fost risipită.[5]
HTML este una dintre cele mai importante unelte in construirea unei aplicații web oferindu-ne o sumedenie de soluții la multe parti ale aplicației si il putem folosi in numeroase scopuri cum ar fi:
Publicarea unor documente online cu titluri, texte, tabele, liste, fotografii și altele.
Preia informatii online prin intermediul link-urilor la un clic pe buton.
Forme de proiectare pentru efectuarea tranzacțiilor cu servicii la distanța, pentru utilizarea in cautarea de infrmații, efectuarea rezervarilor, conda de produse si altele.
Includ foi de calcul, clipuri video, clipuri audio si alte aplicații direct in documentele lor[5].
HTML4 extinde HTML cu mecanisme de foi de stil, scripting, rame, obiecte incorporate, suport inbunatațit si altele. HTML4.01 este o revizie a HTML4.0 care corectează erori si face anumite schimbari de la revizia precedenta. [5]
Noul model de tabel in HTML ii bazat pe RFC1942, autorii avand un control mai mare asupra structurii si aspectului. Abilitatea designerilor pentru a recomanda latimile coloanelor permite utilizatorilor afișarea de date in tabele progresiv mai repede decat sa astepte pentru intregul tabel. Pot fi specificate informații pentru elementele individuale sau pentru grupurile de elemente, pot fi specificate într-un document HTML sau in foi de stil externe. Au dat atât autorilor cât și utilizatorilor controlul asupra prezentării documentelor cum ar fi: informații font, aliniere, culori și altele.
Referitor la Scripting cu ajutorul lor autorii pot crea pagini web dinamice cum ar fi ’’smart forms’’ care reactioneaza atunci cand sunt completate de utilizatori, si de a folosi HTML ca un mijloc de a construi aplicații in rețea.
Mecanismele furnizate pentru a include script intr-un document HTML sunt independente de limbajut de scripting.
Codificare caracterelor abordează problema modului in care aceste caractere pot fi reprezentate intr-un fisier sau pe internet, deoarece codificarea caracterelor nu poate reprezenta in mod direct toate caracterele pe care un autor poate sa le inclunda intr-un document HTML ne ofera alte mecanisme numite referinte la caractere care se pot referi la orice caracter. Din cauză că există un numar foarte mare de caractere in toate limbile din lume și o mare varietate de reprezentare a acestora îngrijirea adecvată trebuie luată astfel incât documentele sa fie intelese de catre utilizatorii din intreaga lume.
Pentru a promova interoperabilitatea SGML cere ca fiecare aplicatie (inclusiv HTML) specifica acestuia setul de caractere al documentului. Un set de caractere consta in:
Un repertoriu: Un set de caractere anstracte, cum ar fi litera “A” , litera chiriliacă “I”, caracterul chinezesc care inseamnă apă și altele.
Pozitie cod: Un set de intregi cu referinte la caractere din repertoriu.
Fiecare document SGML este (chiar si cele HTML) este o secventa de caractere din repertoriu, sisteme informattice identificăfiecare caracter prin poziția sa din cod cum ar fi in setul de caracter ASCII poziția de coduri 65, 66, 67 se referă la caracterele “A”, “B” și “C”. Setul de caracter ASCII nu este suficient pentru un sistem informatic global cum este web astfel incât HTML un set mai complet de caractere Universal (UCS) definit in ISO10646, acest standard defineste un repertoriu de mii de caractere utilizate de comunitați din intreaga lume. Setul de caractere definit in ISO10646 este caracter cu caracter echivalent la UNICODE, ambele standarde fiind actualizate periodic cu noi caractere[5].
Parametrul “charset” identifică codificarea caracterelor care este o metodă de conversie al unei secvențe de octeși intr-o secventă de caractere. O simplă tehnică de codificare un bit pentru un octetnu este suficienta pentru un text de caractere, repertoriu de caractere iimai mare ca ISO10646 fiind mai multe codificări pentru acesta in codificarile adiționale pentru întregul set de caractere ca de exemplu UCS-4.
Servere si proxy-urile pot schimba o codificare a caracterelor (transcodoare) din mers pentru a sadisface cererile utilizatorilor.
Tipul caloare atributului “culoare” (% color) se refera la definițiile de culoare, o valoare de culoare pote fi un numar hexazecimal (urmat de o marcă hash) sau unul din urmatoarele 16 nume de culoare afisate in lista de mai jos, acestea sunt case-insensitive[5].
Nume de culori și valorile sRGB


Negru = „# 000000”

Verde = „# 008000”


Argint = „# C0C0C0”

Tei = „# 00FF00”


Gri = „# 808080”

Olive = „# 808000”


Alb = „#FFFFFF”

Yellow = „# FFFF00”


Maroon = „# 800000”

Marina = „# 000080”


Roșu = „# FF0000”

Albastru = „# 0000FF”


Violet = „# 800080”

Teal = „# 008080”


Fuchsia = „# FF00FF”

Aqua = „# 00FFFF”


Astfel, valorile de culoare „# 800080” și „Purple” ambele se referă la culoarea violet.
HTML specifică trei tipuri de valori de lungime pentru atribute:
Pixelii, valoarea este un intreg care preprezintă un număar de pixeli de panză (ecran, hârtie), adica valoarea “50” înseamnă un numare de 50 de pixeli.
Lungime, valoarea poate fi un Pixel% sau un procent din spatiul orizontal sau vertical astfel ca caloarea “50%” inseamnă jumătate din spațiul disponibil.
Mai multe lungimi, aici valoarea poate fi o lungime sau o lungime relativă, o lungime relativă are forma “i *” unde “i” este un numar întreg.
Un link este o referintă, o legatura, un element de navigație intr-un document electronic catre alte parti ale acestui document sau ale altui document, pagini, site, poza etceterea[6].
Utilizatori pot interpreta aceste link-ri intr- varietate de moduri. Link-urile pot fi clasate pe mai multe tipuri cum ar fi:
Alternate acestea desemnează versiuni de substituție pentru documentul in care apare link-ul. Cand se utilizează impreuna cu atributul “lang” se presupune o versiune tradusă a documentului.
Style sheet acesta se referă la o foaie de stil externă, acesta estefolosit impreună cu tipul de link “Alternate” pentru ca utilizatori sa poata folosi o foaie de stil alternativă celei curente.
Start se referă la primul document intr-o cilectie de documente, acest tip de link spune motoarelor de cautare care document este considerat ca autor ca fiind punct de plecare la colectie.
Next se referă la un anume document intr-o serie de documente ordonate, utilizatori pot alege preâncarcarea “next” a documentului pentru a reduce timpul de incărcare a acestuia.
Prev se referă la documentul anterior intr-o serie ordonată de documente.
Contents se referă la un document care servește ca și cuprins s unei pagini sau a multor pagini.
Index se referă la un documentcare oferă un index pentru documentul curent.
Glossary se referă la un document care oferă un glosar de termeni care se referă la un document curent.
Copyright se referă la o declarație a drepturilor de autor pentru documentul curent.
Chapter se referă la un documentcare servește ca și capitol intr-o colectie de documente.
Section se refera la un document care servește ca o secțiune într-o colecție de documente.
Subsection se refera la un document care servește ca o subsecțiune intr-o colectie de documente.
Appendix se refera la un document care servește ca un appendix la o colecție de documente.
Help se refera la un document care oferă ajutor (mai multe informații, link-uri catre alte informatii surse, si altele.)
Bookmark se referă la un marcaj. Un semn de carte este un link la un punct de intrare-cheie în cadrul unui document extins. Atributul “title” poate fi folosit pentru a eticheta marcajul.
Utilizatori pot defini tipuri de link suplimentare care nu se afla in această descriere doar ca trebuie sa folosească un profil pentru a cita conventiile care se folosesc pentru definirea tipurilor de link-uri.
Un document HTML este cuprin din trei parti:
O linie care contine informații despre versiune.
O sectiune declarativă header (antet), aceasta este delimitată de elementul HEAD.
Body (corpul) care este conținutul efectiv al documentului, corpul poate fi implementat prin elementul BODY sau prin elementul FRAMESET.
Spațiul alb (spații, liniile, file, si comentarii) pot apărea înainte sau după fiecare secțiune. Secțiunile 2 și 3 trebuie să fie delimitate de elementul HTML după cum se vede și in exemplul de mai jos.



Aici avem un document HTML </ TITLE><br /> </ HEAD><br /> <BODY><br /> <P> Bună ziua!<br /> </ BODY><br /> </ HTML><br /> Fiecare document HTML trebuie sa aibe elementul TITLE in sectiunea HEAD, utilizatorii trebuie sa folosească elementul TITLE pentru a identifica continutul unui document deoarece utilizatorii consulta adesea documente din context, astfel autorii trebuie să ofere un titlu bogat si sa fie in context cu conținutul să fie ca o introducere ca și in exemplul următor:<br /> <! DOCTYPE HTML PUBLIC HTML 4.01 // EN" " https://www.facebook.com "><br /> <HTML><br /> <HEAD><br /> <TITLE> Lucrare de licență </ TITLE><br /> … Alte elemente …<br /> </ HEAD><br /> <BODY><br /> … Corpul documentului …<br /> </ BODY><br /> </ HTML><br /> HTML permite specificarea meta informațiilor (meta data) , elementul META specifică o proprietate și atribuie o valoare (autorul respectiv numele acestuia). Aceste date META ajută motoarele de cautare sa găsească documente identice ce coincid cu numele autorului. In general specificarea datelor meta se pot face in doua parti:<br /> Se declară o proprietate si valoarea ei din interiorul documentului prin elementul META sau din exteriorul documentului prin legarea datele META cu ajutorul unui element link.<br /> Referindu-se la un profil unde proprietatea si valorile sale sunt definite, pentru asta se utilizează atributul PROFILE al elementului HEAD.<br /> Deoarece un profil este definit pentru elementul HEAD acelaș profil publică elementelor META si LINK elemente in capul (HEAD) documentului[7].<br /> Pentru marimea caracterelor afisate in document avem șase nivele de elemente (Headings) de la cel mai mare si cel mai important pana la cel mai mic: H1, H2, H3, H4, H5, H6 pe care browserile le interpretează afișându-le cu fonturi diferite in ordine marimi lor.<br /> Următorul exemplu arată cum să utilizați elementul DIV pentru a asocia un titlu cu sectiunea document care urmează, procedând astfel vă permite să definiți un stil pentru secțiunea foii de stil (culoarea de fundal, setați fontul, etc.)[7].<br /> <DIV class="section" id= "păduri-elefanți"><br /> Elefanți <H1> padure </ H1><br /> <P> În această secțiune, vom discuta despre elefanți și pădure.<br /> … aceasta sectiune continua …<br /> <Div class = "subsection" id = "pădure-habitat"><br /> <H2> Habitat </ H2><br /> <P> elefanții din padure nu trăiesc în copaci, doar printre ei.<br /> … prezentei subsecțiuni continuă …<br /> </ Div><br /> </ Div><br /> Această structură poate fi decorată cu informații de stil, cum ar fi:<br /> <HEAD> <TITLE> … titlul documentului … </ TITLE><br /> <Tip STYLE = "text / css"><br /> DIV.section {text-align: justifica; font-size: 12pt}<br /> DIV.subsection {text-liniuță: 2em}<br /> H1 {font-style: italic; culoare: verde}<br /> H2 {color: verde}<br /> </ STYLE> </ HEAD><br /> HTML oferă utilizatorilor săi cateva mecanisme pentru specificarea listelor de informatii, ele trebuie să contină unul sau mai multe elemente de listă. Listele pot contine:<br /> Informații ordonate.<br /> Informații neordonate.<br /> Definiții.<br /> <UL><br /> <LI> informație neordonată.<br /> <LI> informație ordonată.</p> <li> Definiții.<br /> </ UL>[8]<br /> În exemplul de mai sus avem o listă neordonată creată cu ajutorul elementului UL (Unorder List), o listă ordonată creată folosind elementul OL (Order List) contine informații în care trebuie sa aibă o anumită ordine cum ar di de exemplu intr-o retetă de prajituri:<br /> Se amestecă bine ingredientele.<br /> Se toarnă apă peste ele.<br /> Se amentecă timp de 3 minute.<br /> Se pune la cuptor[8].<br /> Listele de definiții create cu ajutorul elementului DL costau intr-o serie de perechi termen/definitie. Astfel atunci cand in reclama unui produs s-ar putea utiliza o listă de definiții:<br /> Costuri mai mici.<br /> Noua versiune a acestui produs costa mai putin decât ce anterioară.<br /> Mai ușor de utilizat.<br /> Am făcut unele modificări produsului ca să fie mai ușor de folosit.<br /> În condiții de siguranță pentru copii.<br /> Puteti lăsa copii in această cameră ca sa fie in condiții mai mare de siguranță[8].<br /> Această listă ar arăta scrisă in cod HTML astfel:<br /> <DL> <DT> <STRONG> Costuri mai mici </ strong><br /> <DD> Noua versiune a acestui produs costa mai putin decât ce anterioară <DT> <STRONG> Mai usor de utilizat </ STRONG><br /> <DD> Am făcut unele modificări produsului ca să fie mai ușor de folosit.<br /> <DT> <STRONG> Sigurantă pentru copii </ STRONG><br /> <DD> Puteti lăsa copii in această cameră ca sa fie in condiții mai mare de siguranță. </ DL><br /> Pentru o aranjare mai ușor de intele a datelor putem folosi tabele, in acestea putem folosi o gamă variată de date cum ar fi: text, imagini, link-uri, forme, alte tabele și asa mai departe. Fiecare tabel poate avea asociat un subtitlu care ne oferă o descriere in mare a informațiilor din el. Randurile tabelului pot fi grupate în sectiunile HEAD, FOOT si BODY pri elementele THEAD, TFOOT si TBODY. Celulele tabelului pot contine informații header (antet) prin intermediul elementului TH sau date prin intermediul elementului TD, celulele pot acoperii mai multe randuri și coloane. Modelul de tabel HTML 4 ne permite să etichetăm fiecare celulă astfel încât utilizatorii non-vizuali pot comunica mai ușor poziția informații despre celula utilizatorului, nu numai că aceste mecanisme ajută foarte mult utilizatorii cu dizabilității vizuale fac și posibile pentru browserele wireless milti-modale cu capacității limitate de afișare[8].<br /> În exemplul de mai jos avem ilustrat unele dintre caracteristicile modelului tebel.<br /> <TABLE border = "1" rezumat = "Acest tabel da cateva statistici despre fructe zboară: înălțime medie și greutate, precum și procentul cu ochii rosii (atât pentru bărbați și femei). "><br /> <CAPTION> <EM> Un tabel de testare cu celule unite </ em> </ CAPTION><br /> <TR> <TH rowspan = "2"> <TH colspan = "2"> Media<br /> <TH rowspan = "2"> Red <BR> ochii<br /> <TR> <TH> înălțime <TH> greutate<br /> <TR> <TH> Masculii <TD> 1.9 <TD> 0,003 <TD> 40%<br /> <TR> <TH> Femei <TD> 1.7 <TD> 0,002 <TD> 43%<br /> </ TABLE><br /> Sau poate fi afișat pe un dispozitiv tty[8]:<br /> / –––––––––––––– \<br /> | | Media | Red |<br /> | | ––––––- | Ochi |<br /> | | Înălțimea | Greutatea | |<br /> | –––––––––––––– |<br /> | Masculi | 1.9 | 0,003 | 40% |<br /> | –––––––––––––– |<br /> | Femele | 1,7 | 0,002 | 43% |<br /> \ –––––––––––––– /<br /> sau ca aceasta de către un agent utilizator grafic din figura 2.3:<br /> Tabel de test cu celule inbunătățite<br /> <br /> Figura 2.3 (sursa: http://www.w3.org/TR/REC-html40/struct/tables.html)<br /> 2. CSS (Cascading Style Sheets)<br /> CSS este acronimul pentru Cascadin Style Sheets. CSS este o extensie a HTML-ului care permite sa editam stilul pegini noastre web. Un exemplu simplu pentru este acela de a face cuvinte bold in HTML este secventa de cod de mai jos[9]:<br /> < b > fămă bold < / b ><br /> Acesta funcționează bine și nu este nimic greșit cu el cu excepția faptului că dacă vrei acuma să schimbi tot textul care inițial l-ai facut bold sa il subliniezi va trebuii să mergi la fiecare spot in pagină și sa schimbi tag-ul, un alt dezavantaj ar mai fi dacă vrem să facem un text bold, să ii punem un stil și să ii schimbăm culoarea va trebuii sa adăugam o grămadă de tag-uri in jurul textului ca in exemplul de mai jos:<br /> < font color = "# FF0000" fata = "Verdana, Arial, Helvetica, sans-serif" ><br /> < strong > Aceasta este un text < / strong > < / font ><br /> Acest lucru fac ca tot codul nostru să arate foarte incarcat si greu de priceput sau chiar imposibil de refolosit, rezolvarea problemei constă in faptul de a ne ajuta de CSS făcând un un stil nou personalizat și să stabilim proprietătile sale ca in secventa de cod de mai jos:<br /> < p class = "myNewStyle" > My CSS textul stil < / p ><br /> Intre tag-urile de sus a pagini web putem insera acest cod CSS ce definește stilul si să il aplicăm:<br /> < style tip = "text / css" ><br /> .myNewStyle {<br /> font-family: Verdana, Arial, Helvetica, sans-serif;<br /> font-weight: bold;<br /> color: # FF0000;<br /> }<br /> < / style ><br /> Această modalitate se procedează pentru proiectele mai mici, pentru cele mai mari unde trebuie sa folosim spre exemplu un anume stil la mai multe pagini avem nevoie sa scriem mult cod așa că problema se rezolvă cu un fișier extern de CSS și in pahina noastră de HTML se punde doar lnk-ul către acel fișier extern ca in exemplul de mai jos:<br /> < link href = "myFirstStyleSheet.css" rel = "stylesheet" tip = "text / css" ><br /> Această secvență de cod se plasează intre tag-urile <head></head> în paginile web in gare dorim să o folosim.<br /> < div id = "Introducerea" > … < / div><br /> În secventa de cod de mai sus am folosit un ID in tag-ul div. ID-urile se pot folosiin tagurile HTML pentru a face referire la un anume tag dupa care putem sa ii atribuim o multitudine de proprietăațile ca și in codul de mai jos:<br /> # Introducerea {<br /> position : absolute ;<br /> width : 230px ;<br /> height : 400px ;<br /> margin : 0 ;<br /> margin-top : 0px ;<br /> border-right : 1px solid #C6EC8C ;<br /> font-weight : normal ;<br /> }<br /> ID-ul unui tag trebuie sa fie neaparat unic (să nu se mai afle in dicument un alt ID cu acelaș nume) și putem avea oricate in pagină.<br /> Îin cazul in care dorim ca mai multe tag-uri să aibă aceleași proprietăti ca și unul anume vom folosi clase. Acestea la fel ca și Id-urile se folosesc pentru tag-urile HTML dat spre deosebire de ele clasele au acelaș nume, având mai multe tag-uri care contin fiecare o clasă cu acelaș nume ne putem referi la toate tag-urile in acelaș timp asociind mai multe proprietăți CSS pentru acestea. Un exemplu de clasă folosită pentru doua tag-uri si codul CSS cu proprietătile lor avem in secvența de cod de mai jos.<br /> < div class = "texte" > .texte {</p> <p class = "texte">Avem un text.</p> <p> position : absolute ;<br /> < / div> width : 330px ;<br /> height : 660px ;<br /> margin : 0 ;<br /> margin-top : 0px ;<br /> border-right : 1px solid #C6EC8C ;<br /> font-weight : normal ; }<br /> In exemplele anterioare am arătat doar câteva căi prin care putem folosi CSS si cum se folosește. CSS-ul are o gamă foarte mare de proprietati prin care putem modifica aspectul la:<br /> Textele pot avea unele proprietăți cum ar fi: culoarea, direcția, spațiul intre caractere, inălțimea liniilor, alinierea textelor, decorarea lor, indentarea, efecte de umbră, spatiu intre cuvinte si altele.<br /> Proprietăti de de fonturi: putem specifica ce fel de font dorim, marimea fontului, stilul si altele.<br /> Modelul box (acesta infăsoară elementul HTML) putem stabili: marginile, bordura, umplutura și conținutul (margins, borders, padding, content.) Pentru bordura (borders) la randul ei putem stabili alte proprietăți: culoare, stil si inalțime pretru toate direcțiile (sus, jos, stanga și dreapta)<br /> Dimensiunile pot fi stabilite de asemenea: inălțime, inălțime maximă sau minimă, lătime, lătime maximă sau minimă.<br /> Pzițiile elementelor: sus, tipul de cursor afișat, la stânga, suprapus peste alt element, dreapta, sus, etcetera.<br /> Cu ajitorul CSS-ului putem crea pagini RESPONSIVE acesta face ca pagina noastră web să arate bine pe toate dispozitivele cum ar fi: desktop, tabletă si telefon. Paginile web nu trebui sa lase informații in urmă pentru a le putea afișa pe dispozitive mai mici ci trebuie să adapteze conținutul său pentru a se potrivi pe orice dispozitiv[10].<br /> La inceput paginile web au fost concepute doar pentru ecrane de calculatoare având un design static si o dimensiune fixă, o dată cu aparitia telefoanelor si a tabletelor lucrurile s-au schimbat, viewport-ul este zona vizibilă utilizatorilor de pe o pagină web acesta se poate seta preluând controlul acestuia introdus de HTML5 prin tagul <meta>[10].<br /> Următoarea secvență de cod este esențială paginilor web:<br /> <meta name="viewport" content="width=device-width, initial-scale=1.0"><br /> – width este lățimea dispozitivului, acesta stabilește lațimea pagini.<br /> – initial-scale=1.0 acesta stabilește nivelul de zoom atunci cand pagina este incărcată pentru prima dată, mai jos avem un exemplu cu eticheta viewport si fără aceasta[10]:<br /> Pagini web fără eticheta viewport și cu eticheta viewport.<br /> <br /> Figura 2.4 (sursa: http://www.w3schools.com/css/css_rwd_viewport.asp)<br /> 3. PHP (Php: Hypertext Preprosessor)<br /> PHP (este acronim pentru Php: Hypertext Preprosessor) este folosit in general pentru dezvoltarea paginile web dinamice și a aplicațiilor web. Se incorporează in codul HTML der de la versiunea 4.3.0 se poate folosi și in ”linie de comandă” pemițând astfel și creerea de aplicații noi independente. Acest limbaj de programare este unul din cele mai inportante fiind open-surce și server-side, existâns versiuni disponibile pentru majoritatea serverelor web si a sistemelor de operare. Statisticile ne arată că este instalat pe 20 de miloane de site-uri web si 1 milion de servere web[11].<br /> PHP este un lumbaj de scriptin pe server, ceea ce inseamnă ca nu este nevoie ca sa fie ela elaborat codul inainte de folosire, acesta esre deja prelucrat cu tot ce este necesat pentru a fi folosit, câteva dintre lucrurile care le putem face cu PHP sunt urmatoarele:<br /> Autentificarea si urmarirea utilizatorilor.<br /> Servește diferite pagini oamenilor folosind diferite browsere sau aparate.<br /> Publică un intreg site folosind doar un singur template foii de stil.<br /> Ne poate dervi pagini XML[12].<br /> In secventa de cod de mai jos avem un bloc de script PHP:<br /> <? Php print ( "Eu sunt Cristi" ); ?><br /> Când o să apelăm codul printr-un browser web acesta ne va citi pusr si simplu “Eu sunt Cristi”. Un script PHP incepe cu <?Php si se incheie cu ?><br /> Fiecare limbar de programare are sintaxa lui de bază iar sintaxa de bază a PHP-ului este după cum urmează:<br /> Numirea fișierrelor pentru a obține un script PHP valid, numele fișierului trebuie să se termine cu extensia .php<br /> Comentariile sunt foarte importante și in același timp utile astefel mai tarziu dacă ne uităm in cod să intelegem mai bine ce face acea secvență. Modul in care se fac comentariile este cu “//” la inceputul ficărei linii sau dacă dorim să facem pe un text mai mare ori pe mai multe linii folosim “/* */” și pune comentariul in interior, un astfel de exemplu gasim în secventa următoare de cod:<br /> <?php // Acest rand va fi ignorat print ("Bună ziua!"); /* Acesta este un comentariu pe mai multe rândri și va fi de asemenea ignorat */ ?><br /> Fiecare bucata de cod/instrucțiune se va termina cu semnul punct și virgulă “ ; ” .<br /> Funcția tipică va arăta astfel ’’ print (); ’’<br /> Un exemplu de script complet impreună cu codul HTML este acesta:<br /> <html><br /> <body><br /> <?php print ("Eu voi fi afișat");  ?><br /> </body><br /> </html><br /> Pentru rularea acestui cod trebuie să salvăm fisierul cu un nume având extensi .php și să il deschidem cu un browser.<br /> PHP-ul ne permite printr-e altele să facem diferite operații, pentru acestea se folosesc variabile. O variabilă este un container care retine una sau mai multe valori, cu ajutorul lor stocăm informații si le trecem din documente in funcții și așa mai departe. Sunt trei moduri de bază prin care putem să folosim variabilele:<br /> Le setăm, adică le asociem una sau mai multe valori.<br /> Le resetăm adică le aducem la starea inițială.<br /> Le accesăm, citim valoare care o are asociată și o folosim intr-un anumit scop.<br /> Variabilele in PHP încep in totdeauna cu semnul “$” unrmate de o literă mică sau mare putând conține si cratimă sau bară jos, ele sunt case-sensitive astfel $avion nu este același cu $Avion. Variabilele pot stoca și lucruri mai complexe nu doar texte, cum ar fi: obiecte, tablouri, Booleans.<br /> Una dintre cele mai importante instrumente sunt tablourile (Array), acestea ne oferă posibilitatea de a stoca mai multe valori intr-o singură variabilă. Cel mai simplu mod de a frea un tablou de elemente este cu ajutorul funției array(), un astfel de exemplu avem in codul de mai jos.<br /> $animale = array ( „Câine”, „Pisică”, „Iepure” );<br /> În codul de mai sus avem stocate toate trei animalele intr-o singură variabilă $animale care pot fi accesate cu indecși incepând de la 0 la 2 (primul fiind [0] adică Câinele și așa mai departe). Mai departe putem obține oricare dintr-e elemente din matrice prin referință la variabilă urmate de elementul din parantezele drepte de exemplu: $animale[2], avem in secvența de cod de mai jos[12].<br /> <?php print "$animale[2]"; ?><br /> Un concept mai complex decat tablourile sunt tablourile asociative. Ele au in interiorul functiei setat o cheie si o valoare folosind semnul “=>”. Un exemplu de astfel de tablou asociativ avem in secvența de cod de mai jos.<br /> $Telefon = array (<br /> name=>”Iphone”,<br /> description=>”smartphone”,<br /> color=>”grey and white”,<br /> model=>Iphone6+<br /> );<br /> Operatorii sunt folosiți pentru a efectua operațiuni cu variabile si valori, eu sunt imparțiți in următoarele grupe:aritmetici, de atribuire, de comparație, incremetare/decrementare, logici, string, array. Dacă dorim să efectuăm diferite acțiuni pe un anume cod pentru diferite deciziiputem folosi declarații conditionale in interiorul codului pentru a face acest lucru. În PHP avem următoarele declarații de condiții:<br /> If execută un anumit cod doar dacă condiția specificată ii adevătată.<br /> If else execută un anume cod dacaă condiția este adevărată și dacă așt cod din condiție este fals.<br /> If elseif specifică o nouă condiție la test dacă prima condiție este falsă.<br /> Switch selectează unul dintre blocurile de cod să fie executat[13].<br /> În PHP avem următoarele declarații de bucle:<br /> While treece printr-un bloc de cod atât timp cât condiția specificată este adevărată.<br /> Do while trece printr-un vloc de cod o dată și după repetă trecerea prin cod căt timp condiția specificată este adevărată.<br /> For trece printr-un bloc de cod de un număr specificat de ori.<br /> Foreach trece printr-un bloc de cod pentru fiecare element din tablou[14].<br /> Uul din cele mai importante lucruri in PHP sunt funcțiile, are peste 1000 de funcții incorporate, pe langă acestea putem sa creem propriile noastre funcții. O funcție este un bloc de declarații care pot fi folosite in mod repetat intr-un program, aceste nu sunt efectuate imediat ci doar printr-un apel al acesteia atunci când o pagină este incărcată. Sintaxa unei feuncții este următoarea:<br /> function numeleFuncției() {<br /> codul ce trebuie executat;<br /> }<br /> Numele unei funcții poate incepe cu o literă mare sau mică dar niciodata cu un număr, informațiile pot fi trimise funcțiilor prin intermediul argumentelor acestea fiind specificate după numele funcției in interiorul parantezelor[15].<br /> În PHP avem două variabile superglobale $_GET și $_POST, aceste variabile superglobale sunt folosite pentru a colecta date dintr-un formular, un astfel de exemplu avem in codul de mai jos[16]:<br /> <html> <body> </p> <form action="welcome.php" method="post"> Name: <input type="text" name="name"><br /> E-mail: <input type="text" name="email"><br /> <input type="submit"> </form> <p> </body> </html><br /> În momentul in care se completează formularul de mai jos și se face clic pe butonul de trimitere datele formularului sunt trimise pentru prelucrare intr-un fișier PHP numit “welcome.php”, acestea sunt trimise cu metoda HTTP POST la fel de bine se poate folosi si metoda GET. Atât GET cât și POST ne crează un tablou, fiind superglobale asta inseamnă că sunt accesibile tot timpul indiferent de scop și le putem accesa din orice funcție, clasă sau fișiere fără să faci nimic special. GET este un tablou de variabile trimis scriptului curent prin intermediu parametrilor URL-ului iar POST este o serie de variabile trimise scriptului curent prin metoda HTTP POST[16].<br /> Informațiile trimise la un formular cu metoda GET sunt vizibile pentru toată lumea (tot este afișat in URL) și mai are si limite de privind catitatea de informații trimise (aproximativ 200 de caractere). GET se folosește doar in cazul trimiteri de informații non-sensibile, nici de cum pentru trimiterea de parole sau alte informații secrete[16].<br /> Informațiile trimise la un formular cu metoda POST nu poate fi văzute de alții fiind incorporate in corpul cereri HTTP, această metodă susșine funcțonalități avansate cum ar fi suport pentru “multi-part binary input” cât timp incărcăm fișierele pe server[16].<br /> Versiunea de PHP5 poate manipula o bază de date MySQL folosind:<br /> Extensia MySQLi<br /> DOP (PHP Data Objects)<br /> Ambele sunt orientate pe obiecte și sunt protejate de injectarea SQL acest lucru fiind foarte important pentru securitatea aplicației.<br /> Pentru Linux sau Windows extensia MySQL este automat instalată in majoritatea cazurilor arunci când este instalat pachetul PHP5 mysql.<br /> Exemplu (MySQLi Procedural )<br /> <?php $servername = "localhost"; $username = "username"; $password = "password"; // Create connection $conn = mysqli_connect($servername, $username, $password); // Check connection if (!$conn) {     die("Connection failed: " . mysqli_connect_error()); } echo "Connected successfully"; ?>[17].<br /> Capitolul III. Cake PHP și tehnica de dezvoltare MVC<br /> Cake PHP<br /> Cartea de bucate CakePHP este un proiect deschis de dezvoltare și comunități editabil. CakePHP este rapid și usor de instalat fiind necesar doar un srverweb și o copie a fișierelor CakePHP, acesta este sub licența MIT, acest lucru insemnând că suntem liberi de a modifica, distribui și republica codul sursă. CakePHP folosește app/tmp ca director pentru un număr deiferit de operații[18].<br /> Într-o aplicație CakePHP avem trei părți principale:<br /> Biblioteca de bază CakePHP, in / lib / cake<br /> Codul aplicației, in / app.<br /> Webroot-ul aplicației, de obicei in / app / Webroot.<br /> Fiecare dintre aceste directoare pot fi localizate orunde pe sistemul de fișiere, mai puțin Webroot care trebuie sa fie accesibil prin serverul web<br /> Pentru a configura instalarea CakePHP trebuie sa feacem modificări in următoarele fișiere:<br /> /app/webroot/index.php<br /> /app/webroot/test.php (dacă utilizăm Testare caracteristica.)<br /> Există trei constante pe care va trebui sa le edităm:<br /> ROOT trebuie setat la modul de directorul care conține folderul app.<br /> APP_DIR trebuie setat la (de bază) numele folderul app.<br /> CAKE_CORE_INCLUDE_PATH trebuie setat la calea folderului biblioteci CakePHP[19].<br /> Framework-ul CakePHP este o bază solidă pentru aplicații, se poate ocupa de fiecare aspect de la cererea inițială a autilizatorului pâna la redareafinală a unei pagini web și din moment ce framework-ul respectă principiile de MVC permite particularizarea cu ușurința și extinderea multor aspecte ale unei aplicații[20].<br /> Framework-ul prevede o structură organizatorie de bază de la numele de fișiere la numele bazei de datepăstrând întreaga aplicație consecventă si logică.<br /> Pentru a putea folosi CakePHP să construim o aplicație avem nevoie de următoarele:<br /> Un server web care rulează ca de exemplu se poate folosi Apache, trebuie o versiune de PHP 5.2.8 sau mai nouă.<br /> Cunoștințe de bază de PHP.<br /> Cunoștințe de bază a modelului de programare MVC.<br /> Pentu a putea deschide browser-ul și a vedea pagina de bun venit CakePHP mai trebuie să salvăm fișierul database.php cu informațiile de mai jos:<br /> public $default = array (<br /> ‘datasource’ => ‘Database/Mysql’ ,<br /> ‘persistent’ => false ,<br /> ‘host’ => ‘localhost’ ,<br /> ‘port’ => ” ,<br /> ‘login’ => ‘cakeBlog’ ,<br /> ‘password’ => ‘c4k3-rUl3Z’ ,<br /> ‘database’ => ‘cake_blog_tutorial’ ,<br /> ‘schema’ => ” ,<br /> ‘prefix’ => ” ,<br /> ‘encoding’ => ‘utf8’<br /> );<br /> Crearea unui Model Post<br /> Clasa Model este pâinea și untul al unei aplicații CakePHP, prin crearea unui model de CakePHP acesta va interacționa cu baza noastră de date, vom avea baza in locul necesar să facem operașiile de vizualizare, adăugare, editare, și ștergere mai târziu. Fișierele CakePHP model class mergem în /app/model/ iar fișierul creat se va salva in /app/Model/Post.php, iar fișierul completat va arăta astfel:<br /> class Mesaj extinde AppModel {<br /> }<br /> Convențiile de denumire sunt foarte importante în CakePHP. Prin numirea modelul nostru post, CakePHP poate deduce în mod automat că acest model va fi utilizat în PostsController, și va fi legat de un tabel de bază de date numit posts[20].<br /> Crearea unui Posts Controler<br /> Pentru postari vom avea nevoie sa cream un Posts Controler, Controler-ul este locul unde se va desfașura partea de business logic. Vom plasa un nou controller în fișierul numit PostsController.php aflat în folderul /app/Controller. În secventa de cod de mai jos avem un exemplu de bază cum ar trebui să arate controller-ul. Mai jos avem un model de cum ar trebui să arate:<br /> class PostsController extends AppController {<br /> public $helpers = array(‘Html’, ‘Form’);<br /> }<br /> Acuma se poate adăuga o acțiune controller-ului. Aceste acțiuni reprezintă adesea o singură funcție or interfața in aplicatie, această acțiune ar putea fi de exemplu ca și cea de mai jos:<br /> class PostsController extends AppController {<br /> public $helpers = array ( ‘Html’ , ‘Form’ );<br /> public function index () {<br /> $this -> set ( ‘posts’ , $this -> Post -> find ( ‘all’ ));<br /> }<br /> }<br /> Crearea unui Post Views<br /> Având acuma acele date in model și logica aplicației și fluxul definit de controler putem crea un view pentru acțiunea de index creată anterior. View-urile CakePHP sunt doar fragmente prezentate ce se potrivesc in interiorul foi de stil al aplicației. View-urile CakePHP sunt stocate in /app/View în interiorul folderului numit după numele controlerului ca să corespundă cu acesta, in acest caz va trebui să cream un ’Posts’. Codul va trebui să arate ceva de genul[20]:<br /> <!-- File: /app/View/Posts/index.ctp --></p> <h1>Blog posts</h1> <table> <tr> <th>Id</th> <th>Title</th> <th>Created</th> </tr> <p> <!-- Here is where we loop through our $posts array, printing out post info --><br /> <?php foreach ($posts as $post): ?></p> <tr> <td><?php echo $post['Post']['id']; ?></td> <td> <?php echo $this->Html->link($post[‘Post’][‘title’],<br /> array(‘controller’ => ‘posts’, ‘action’ => ‘view’, $post[‘Post’][‘id’])); ?> </td> <td><?php echo $post['Post']['created']; ?></td> </tr> <p> <?php endforeach; ?><br /> <?php unset($post); ?><br /> </table> <p>Printr-e altele am folosit și un obiect numit #this->Html, aceasta este o instantă a CakePHP HtmlHelper class.<br /> În acest cas se poate crea un view pentru acțiunea noului ’view’ creat și să o plasăm în /app/View/Posts/view.ctp.<br /> <!-- File: /app/View/Posts/view.ctp --></p> <h1><?php echo h($post['Post']['title']); ?></h1> <p><small>Created: <?php echo $post['Post']['created']; ?></small></p> <p><?php echo h($post['Post']['body']); ?></p> <p> [20].<br /> CakePHP face un drum lung pentru a lua monotonia validări datelor, aici acest lucru se face mai ușor si mai rapid. Pentru a beneficia de caracteristicile validări trebuie folosit FormHelper CakePHP in view-ul curent este disponibil inplicit pentru orice view prin $this->Form. Un exemplu de adăugare view avem mai jos[20]:<br /> <!-- File: /app/View/Posts/add.ctp --></p> <h1>Add Post</h1> <p><?php echo $this->Form->create(‘Post’);<br /> echo $this->Form->input(‘title’);<br /> echo $this->Form->input(‘body’, array(‘rows’ => ‘3’));<br /> echo $this->Form->end(‘Save Post’);<br /> ?><br /> Se folosește FormHelper pentru a genera deschidetea tag-ului pentru formul HTML, mai jos avem $this->Form->create() care ne generază:</p> <form id="PostAddForm" method="post" action="/posts/add"> După cum ama mintit si la inceputul acestui capitol CakePHP folosește ca thnică de baza al cestui framework MVC Model View Controller, in capitolul ce urmează voi prezenta această tehnică de dezvolvare mai intâi independent de CakePHP și după cum se aplică ea in interiorul acestui feamework.<br /> MVC (Model View Controller)<br /> Înelegerea modul de programare este ușor de înteles, practică și foarte explicită. MVC după cum are si numele separă aplicația in trei părți Model, View și Controller astfel:<br /> Model (Modelul) acesta reprezintă parte implementată la inceputul aplicației cea de business logic, aceasta este resposabilă pentru preluarea datelor si conversia in cenceptele aplicației, aceasta include procesarea, validarea, asocierea sau alte sarcini de manipularea datelor[21].<br /> Obiectuele Model pot fi privite ca si un start a interacțiunii cu orice bază de date care ar puteea folosită pentru aplicație. În cazul unei retele de socializare Model se ocupa de sarcini cum ar fi salvarea de noi inregistrări, salvarea de prieteni, datele lor, si trimiterea de poze, gasire de sugestii pentru prieteni noi si altele. Obiectele modelului pot fi considerate in acest caz ca și “prieteni”, ”inregistrări”, ”comentarii” sau ”poze”[21].<br /> Controller (controlerul) acesta se ocupă de cererile din partea utilizatorilor el fiind resposabil cu redarea de raspunsuri cu ajutorul Model și View. Un controler poate fi văzut ca si un manager care asigură toate resursele necesare pentru finalizarea unei sarcini. Se asteaptă petiții de la clienți și cerifică validarea lor in conformitate cu regulile de autorizare sau autentificare, preia date si le prelucrează pentru model, selectează tipul de date de prezentare ce sunt acceptate de clienți și în final delegați procesul de rendare a View[21].<br /> O cerere tipica MVC in CakePHP este reprezentată de figura de mai jos.<br /> MVC in CakePHP<br /> <br /> Figura 3.5 (sursa: http://book.cakephp.org/2.0/en/cakephp-overview/understanding-model-view-controller.html)<br /> Un ciclu tipic de cerere CakePHP incepe cu utilizatorul care solicită o pagină sau o resursă in aplicație, cererea fiind procesată mai intai de dispecer care selectează obiectul corect din controller care ii corespunde.<br /> După ce ajunge in controller cererea cumunică cu comunică cu modelul pentru a procesa toate datele preluate sau operațiunile de de salvare care sunt necesare, după terminarea acestei operațiuni controllerul va delega corect obiectul view pentru sarcina de generare ieșirea rezultatului datelor provenit de la model, imediat această ieșire va fi returnată utilizatorului care a făcut cererea la inceputul ciclului[21].<br /> Capitolul IV. Prezentarea aplicației<br /> Aplicația despre care urmează să vorbesc este un web site pentru chestionare auto. M-am gandit să fac ceva diferit in acest web site față de ce se află făcut deja la acest moment. Ținând caont de faptul ca trecerea examenelor de teorie si practică pentru a obtine un permis auto nu este un lucru foarte ușor m-am gandit că as putea să dau o mână de ajutor celor care doresc acestu lucru, idee mi-a venit intr-o noapte, cam prin luna Ianuarie a anului curent când veneam spre casă din centru orașului văzând intersecțiile goale (fără mașini) prin care au trecut.<br /> M-am gândit că dacă cei care rezolvă mii de intrebări din chestionare pentru a promova examenul de teorie ar vedea in același timp exact atâtea mii de poze cu intersecțiile prin care urmează să treacă cu mașina in timpul examenului de conducere (practică) ar cunoaște acele intersecții mult mai bine și le-ar fi mult mai ușor sa știu ce au de făcut în momentul in care se află in fata lor. Cauzele pentru care cursanții cad examenul de conducere (practică) sunt in general datorate faptului ca ei nu știu ce să facă in diferite intersecții când ajung in fața lor în timpul examenului. Dacă le-ar vedea de mai multe ori înainte și dacă s-ar afla in acele intersecții de mai multe ori inainte de examen in diferite situații ar ar ști mai bine cu trebuie să procedeze și le-ar fi mult mai usor.<br /> Rezolvarea acestei problemei se poate face din momentul in care cursanții incep să rezolve întrebările de teorie. M-am gândit că dacă aș pune in loc de imaginile de la fiecare intrebare (aceste imagini sunt atașate la intrebări pentru a prezenta un caz, o sitație, o intersecție, o depășire, un sens giratoriu etc ) o altă imagine în care să fie aceiași situație dar să fie făcută pe străzile din orașul în care cursantul dorește să susțină examenul de conducere.<br /> Astfel el când ar rezolva intrebări de teorie cu imagini de pe străzile unde urmează să susțină examenul ar vedea cu această ocazie de zeci de ori majoritatea intersecțiilor prin care va trece in timpul examenului și va reține mai ușor situațiile care pot apărea in acele intersecții astfel ii va crește mult șansele să promoveze examenul de practică fără să facă nici un efort in plus.<br /> În acest site am folosit mai multe medii de programare pentru dezvoltarea de aplicații precum HTML, CSS, PHP, SQL si doua framework-uri CakePHP și Bootstrap.<br /> Capitolul IV.1. PhpMyAdmin.<br /> Site-ul are in spate o bază de date cu mai multe tabele pentru care am folosit phpMyAdmin. Acesta este un sistem pentru gestionarea bazelor de date MySQL open source scris in PHP care este destinat pentru administrarea bazelor de date cu ajutorul unui browser.<br /> Design-ul bazei de date.<br /> <br /> Figura 4.5<br /> Mai sus avem Figura 4.5 in care este prezentată schița acestor tabele.<br /> În imaginea de mai sus se văd bine legăturile dintr-e tabele toate împreună formează baza de date de unde site-ul își ia datele de care are nevoie in funcție de situație.<br /> Legaturile (liniile) dintre tabele sunt pentru a arăta care tabele sunt legate intre ele și mai exact care linie dintr-un tabel este le cată de o alta din alt tabel, asta inseamnă că informațiile acelei linii al unui tabel de la care pornește legătura sunt accesate/legate de celălalt tabel unde duce acea legătură.<br /> O altfel de prezentare a bazei de date este be bază de structură a tebelelor așa cum apare in imagine de mai jos.<br /> Structura bazei de date.<br /> <br /> Figura 4.6<br /> În figura 4.6 avem in partea din stânga tabelele in ordinea alfabetică urmate fiecare de acșiunea lor, numărul de rânduri, tipul si alte informații. Aici se pot exporta sau importa baze de date noi sau tabele, se pot manipula direct datele, ștergere de tabele, adăugare, modificare, editare, mutare și alte operațiuni.<br /> Vom lua toate tabelele intr-o ordine logică pentru a explica fiecare ce rol au:<br /> Users (utilizatori) acest tabel deține înregistrările cu toți utilizatori care s-au inregistrat in baza de date si detalii despre ei după cum se vede si in … de mai jos.<br /> Tabelul users din baza de date.<br /> <br /> Figura 4.7<br /> Utilizatori ca să poată face chestionare pe site trebuie mai intâi să se inregistreze și sunt ”salvați”. În acest tabel avem mai multe coloane după cum urmează:<br /> User_id estecoloana unde se salvează ID-ul utilizatorului de tip auto increment, este unic si pe baza lui se poate accesa în baza de date.<br /> Nume în această coloană se salvează toate numele utilizatorilor.<br /> Prenume aici avem coloana cu prenumele utilizatorilor.<br /> Email coloana cu email-ul urilizatorilor.<br /> Rol coloan unde putem vedea ce rol are fiecare utilizator.<br /> Următorul tabel despre care o să vorbesc este tabelul intrebare. În acest tabel avem salvată lista cu toate intrebările. Ele au mai multe particularități ca de exemplu id, tip și text. În id se salvează id-ul fiecărei inrebări fiind unic pentru fiecare intrebare, tipul intrebări care poate fi public sau privat (in cazul in care intrebare este de tip privat nu va fi putea accesată din site) și text unde este salvată intrebarea proprie. Un exemplu de tabel avem mai jos în figura 4.8.<br /> Tabelul ”intrebare” din baza de date.<br /> <br /> Figura 4.8<br /> Următorul tabel despre care o să vorbesc este tabelul chestionare acest tabel este unul mai mic în care găsim doar id-ul chestionarelor. Fiecare chestionar contine 26 de intrebări, întrebările din tabelul întrebare figura 4.8 sunt legate de acest tabel printr-un tabel de legătură care se numește asocieri_intrebari. În tabelul asocieri_intrebari avem datele care ne fac legătura intre celelalte două anterioare, acesta conține id_chestionare și id_intrebare.<br /> Următorul tabel despre care o să vorbim se numește raspuns, acesta este legatde tabelul intrebare și de scor. După cum se vede si în figura de mai jos acest tabel conține următoarele înregistrări:<br /> Id acesta este unic pentru fiecare intrebare in parte ca să poată fi accesată mai ușor cu ajutorul lui.<br /> Id_intrebare este coloana unde se salvează id-ul de la întrebarea căruia ii aparține acest răspuns.<br /> Corect acest câmp este de tip TINYINT și ne salvează două valori, 1 dacă răspunsul este corect sau 0 dacă este gresit.<br /> Text aici avem salvat textul/conținutul intrebări.<br /> O parte a tabelului raspuns.<br /> <br /> Figura 4.9<br /> În continuare o să vorbesc despre tabelul sesiune. În acest tabel se salvează date de fiecare dată când un user incepe un chestionar și in același timp se face update la unele câmpuri din el pe tot parcursul chestionarului până la sfârsâșitul acestuia. Unele din datele de aici sunt afișate in direct utilizatorului in pe parcursul rezolvări chestionarului.<br /> După cum urmează în acest tabel avem următoarele coloane:<br /> Id acest cămp se ocupă de salvarea id-ului fiecărei sesiuni incepute de utilizator, toate sesiunile au un id diferi.<br /> Start este coloana in care se salvează: anul, luna, ziua, ora, minutul și secunda in care un utilizator incepe o sesiune/chestionar.<br /> Final este coloana in care se salvează: anul, luna, ziua, ora, minutul și secunda in care un utilizator incheie o sesiune din orice cauză.<br /> Gresite aici avem salvat numărul total de raspunsuri greșite a utilizatorului in timpul unei sesiuni, el este implicit 0 și după ficare răspuns greșit al utilizatorului creste cu 1.<br /> Id_user acesta este câmpul unde se salvează id-ul utilizatorului care a inceput sesiunea putând astfel indentifica utilozatorul care a inceput acea sesiune si acestuia.<br /> Unul din cele mai mari tabele din această bază de date este scor. Acesta este legat de aproape toate tabelele cauză din care este mai mult un tabel de legătură după cum se vede in figura 4.10 de mai jos.<br /> Tabelul scor din baza de date.<br /> <br /> Figura 4.10<br /> Capitolul IV.2. Front end (partea din față).<br /> Site-ul web se accesează printr-un url local http://chestionare.dev/, la intrarea în site ne apare o pagină dinamică, prima pagină a site-ului home page sau index. Frontend-ul (partea din fața) este creat cu CSS și HTML în care avem mai multe elemente: in partea de sus avem un o imagine in care sunt două cupole care se pu pe masinile cu scoala de șoferi in una in timpul practicii (SCOALA) și una in timpul examenului (EXAMEN), așa cum apare in iamginea de mai jos. Imediat sub heder (partea de sus) avem o bară de navigavre cu trei butoane pe ea: Home acesta este butonul care ne duce la prima pagină, Register este butonul care ne duce la pagina de înregistrare, și About ne duce la pagina pagina sepre site.<br /> Pagina Home a site-ului web<br /> <br /> Figura 4.10<br /> Când intrăm prima dată pe site din cauză că nu suntem logați ne apare un mesaj imediat subt bara de navigare in care scrie că nu suntem logați și ne apare un link către pagina de logare, iar sub acesti link și sub bara de navigare avem o imagine de fundal in format png care se repetă pe tot body-ul așa cum apare in imaginea de mai sus.<br /> Dacă accesăm link-ul din imaginea alăturată ne va duce la o nuoă pagină a site-ului nostru web unde putem să ne autentifică (să ne logăm) agina de logare (login)<br /> Formularul de login a site-ului web<br /> <br /> Figura 4.11<br /> Spre deosebire de cealaltă pagină aceasta are o fereastră de login in care trebuie să completă adresa noastră de email si parola care le-am inregistrat după care dăm clic pe butonul Login. Pentru completarea scestui formular pot interveni următoarele situații:<br /> Dacă accesăm buronul Login fără să completăm căsutele imediat sub prima căsuță apare un mesaj “Completati acest câmp.” Dacă nu completăm căsuța cu o adresă de email validă vom primi mesaje de avertizare și nu vom putea merge mai departe pănă această căsuță va fi compltată ci o informație validă.<br /> În cazul in care prima căsuță este completată cu infomații calide ne mai rămâne căsuța cu parola, trebuie să procedăm la fel ca si cu prima. Pentru fiecare gresală vom primi un mesaj de avertizare imediat sub căsuță cu ce anume este greșit.<br /> În cazul in care ambele câmpuri sunt completate cu informații calide dar una dintr-e ele sau ambele nu se află in baza de date vom primi un mesaj de avertizare deasupra butonului Login ’’Invalid username or password, try again’’<br /> În cazul in care am mai fost logați de pe acelas pc și browser, am primit un mesaj de la browser care ne intreba dacă vrem să salvăm parola iar dacă am acceptat aceste două câmpuri se completează automat cu datele salvate.<br /> În continuare ne mai rămân două variante. Sau reușim să ne logăm cu o adresă de email din baza de date validă si parolă sau nu avem un cont inregistrat.<br /> Dacă nu avem un cont inregistrat pe acest site web trebuie să accesăm butonul Register din bara de navigare care ne va duce la pagina de adăugare de noi utilizatori (http://chestionare.dev/users/add ) unde va trebui să ne creăm un cont.<br /> Pentru a crea un cont pe acest site web avem nevoie de un nume, o adresă de email validă, o parolă care trebuie să o tine minte (să fie cat mai uăor de reăinut dar să conșină de preferat si caractere mari și numere pentru a nu fi ușor de ghicit). După ce ne-am hotărât ce parolă vrem să alegem trebuie să o introducem de două ori, în câmpul de Parola și in cel de Confirmare Parola, aceste trebuie să fie neaparat identice. Mai jos avem o imagine cu acest formular.<br /> Formularul de înregistrare a site-ului web.<br /> <br /> Figura 4.12<br /> Dacă am ajuns până la acest formular trebuie să il completăm cu grijă exact așa cu ni se cere după care care site-ul ne va redirecționa la pagina de Home unde trebuie să accesăm din nou butonul LOGATI-VA! și să urmărim pași următori.<br /> Formularul din imaginea de mai sus are ’’în spate’’ reguli de validare și nu permite completarea lui cu date eronate.<br /> Probleme ce pot apărea la completarea acestui formular:<br /> Trebuie să ne asigurăm că am completat corect si in intregime toate câmpurile formularului altfel o să primim eroare.<br /> Dacă nu introducem un nume care să aibe ce puțin trei caractere.<br /> Dacă intreoducem la casuța cu numele alte caractere inafară de litere si spații.<br /> Dacă nu introducem un email valid.<br /> Dacă la parolă nu introducem cel putin 5 caractere și acestea să fie doar numere întregiși litere.<br /> Dacă la câmpul confirmare parolă introducem o parolă care nu ii aceiași ca și cea de la câmpul parolă.<br /> Până in momentul în care nu facem așa cum am amintit mai sus butonul Inregistrează ne va arăta doar ororile de la greșelile care le-am făcut când am completat formularul de mai sus, pentru fiecare greșală vom primi un mesaj ajutător care ne va arăta ce anume ii greșit.<br /> După completarea formularului din imaginea de mai sus corect accesăm buronul Inregistreaza și com fi inregistrați in baza de date a site-ului web și vom putea să ne logăm fără probleme.<br /> În momentul în care avem un cont valid care este inregistrat in baza de date a site-ului web putem accesa pagina de login completăm formularul cu datele noaste și ni se va returna o pagină de bun venit in care vom avea unele date ale noastre și com putea incepe un chestionar cu intrebări.<br /> Un exemplu de formular pe care il vom primi este acel din imaginea de amai jos completat cu datele unui utilizator.<br /> Mesajul după logare.<br /> <br /> Figura 4.13<br /> În imaginea de mai sus avem un mesaj pe care il primim imediat duă ce reușim să ne logăm:<br /> Pe primul răn avem un salut si numele nostru. După înregistrare avem salvat numele cu care ne-am inregistrat iar acum ne apre acel nume din baza de date aici.<br /> Pe rândul doi avem adresa noastră de emai cu care ne-am inregistrat și care am folosit-o la logare, ne este livrată direct din baza de date.<br /> Pe rândul trei avem rolul cu care ne-am inregistrat, acesta este implicit iar utilizatori nu au acces la modificarea acestuia. La fel ca si celelalte de mai sus si acesta ne este afișat direct din baza de date așa cum este el.<br /> Iar pe ultimul rând avem un link sub numele de LOG OUT dacă il acesăam delogăm imdiat și ne este livrat pagina ed inceput, aceia din figura 4.10 adiă prima pagină de la care am inceput.<br /> Ultimul lucru care il avem aici in pagină este acel buton de jos cu numele de Incepe Chestionar. Dacă accesăm acest buton vom primi acea pagină pentru care am intrat pe acest site web adică pagina in care incepem un chestionar.<br /> În momentul in care ni s-a livrat pagina cu un chestionar se întâmplă următoarele lucruri:<br /> În baza de date pornește o nouă sesiune care ne cronometrează având la dispoziție 30 de minute să raspundem la toate cele 26 de intrebări.<br /> Primim un chestionar aleatoriu dintre cele din baza de date.<br /> Vom primi o intrebare aleatorie din cele 26 de intrebări din baza de date.<br /> Putem incepe să răspundem la intrebări.<br /> Vom putea să cadem testul (adica sa nu promovăm acest chestionar) in cazurile următoare:<br /> Dacă ni se termină cele 30 de minute inainte să reușim să răspundem la toate cele 26 de intrebări.<br /> Dacă greșim mai mult de 4 răspunsuri la țintrebări. Asta se poate întâmpola dacă<br /> Bifăm un răspuns sau două din cele care nu este corect.<br /> Nu bifăm unul, doua sau trei din răspunsurile care sunt corecte.<br /> Ambele variante de mai sus.<br /> Dacă inchidem pagina.<br /> Dacă accesăm unu din lincurile sau butoanele care le avem in pagină.<br /> Dacă dam refresh la pagină.<br /> Dacă ne cade netul.<br /> Dacă ni se inchide dispozitivut de pe care untem pe site.<br /> În imaginea de mai jos avem un model test cum am putea primi când incepem un chestionar.<br /> O intrebare test din chestionar.<br /> <br /> Figura 4.14<br /> În imaginea de mai sus avem o intrebare cu trei variante de răspuns, timpul de 30 de minute ne permite să citim fiecare intreabe de cel puțin două ori inainte de a da un răspuns. Pentru a putea promova chestonarul trebuie să procedăm astfe:<br /> Citim intrebare de atâtea ori până suntem siguri că am ințeles-o.<br /> Citim variantele de răspuns de atâtea ori până suntem siguri că am le-am inteles.<br /> Bifăm căsuțele corespunzătoare răspunsurilor corecte.<br /> Dăm clik pe buronu Next.<br /> Îm acest moment ne putem uita în partea de sus a pagini să vedem dacă intrebarea la care am răspunse este corectă și să vedem timpul disponibil rămas. Cu următoarea întrebare procedăm la fel pânâ la final cănd primim un răspuns dacă am trecut testul sau nu iar după aceea putem incepe un nou chestionar.<br /> Capitolul IV.3. Back end (partea din spate sau partea de business logic)<br /> PREZENTAREA SURSELOR BIBLIOGRAFICE<br /> [1] https://ro.wikipedia.org/wiki/Aplica%C8%9Bie_web<br /> [2] http://www.scritub.com/stiinta/informatica/Proiectarea-aplicaiilor-web204316910.php<br /> [3] https://ro.wikipedia.org/wiki/Plugin<br /> [4] https://en.wikipedia.org/?title=HTML<br /> [5] http://www.w3.org/TR/REC-html40/intro/intro.html<br /> [6] https://ro.wikipedia.org/wiki/Hiperlink<br /> [7] http://www.w3.org/TR/REC-html40/struct/global.html<br /> [8] http://www.w3.org/TR/REC-html40/struct/lists.html<br /> [9] http://www.csstutorial.net/css-intro/introductioncss-part1.php<br /> [10] http://www.w3schools.com/css/css_rwd_intro.asp<br /> [11] https://ro.wikipedia.org/wiki/PHP<br /> [12] http://www.webmonkey.com/2010/02/php_tutorial_for_beginners/<br /> [13] http://www.w3schools.com/php/php_if_else.asp<br /> [14] http://www.w3schools.com/php/php_looping.asp<br /> [15] http://www.w3schools.com/php/php_functions.asp<br /> [16] http://www.w3schools.com/php/php_forms.asp<br /> [17] http://www.w3schools.com/php/php_mysql_connect.asp<br /> [18] http://book.cakephp.org/2.0/en/installation.html<br /> [19] http://book.cakephp.org/2.0/en/installation/advanced-installation.html#advanced-installation<br /> [20] http://book.cakephp.org/2.0/en/getting-started.html<br /> [21] http://book.cakephp.org/2.0/en/cakephp-overview/understanding-model-view-controller.html<br /> Declaratie de autenticitate</p> <div class="copyright-notice-wrapper" style="margin-top:20px;padding:20px;background:#f9f9f9;border-left:4px solid #0073aa;"><h3 style="margin-top:0;">Copyright Notice</h3><p><p>© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.</p> </p><p><strong>Acest articol:</strong> Lucrare de Licență (ID: 700600)</p><p>Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră <a href="https://licentiada.org/copyright-takedown/?post_id=700600&post_url=https%3A%2F%2Flicentiada.org%2Flucrare-de-licenta%2F">Copyright Takedown</a>.</p></div></div><!-- .entry-content --> </div> </article><!-- #post-700600 --> <div class="entry-related alignfull entry-related-style-wide"> <div class="entry-related-inner content-container site-container"> <div class="entry-related-inner-content alignwide"> <h2 class="entry-related-title" id="related-posts-title">Similar Posts</h2> <div class="entry-related-carousel kadence-slide-init splide" aria-labelledby="related-posts-title" data-columns-xxl="3" data-columns-xl="3" data-columns-md="3" data-columns-sm="2" data-columns-xs="2" data-columns-ss="1" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-dots="true" data-slider-arrows="true" data-slider-hover-pause="false" data-slider-auto="false" data-slider-speed="7000" data-slider-gutter="40" data-slider-loop="true" data-slider-next-label="Next" data-slider-slide-label="Posts" data-slider-prev-label="Previous"> <div class="splide__track"> <ul class="splide__list kadence-posts-list grid-cols grid-sm-col-2 grid-lg-col-3"> <li class="entry-list-item carousel-item splide__slide"><article class="entry content-bg loop-entry post-608718 post type-post status-publish format-standard hentry category-licenta"> <div class="entry-content-wrap"> <header class="entry-header"> <div class="entry-taxonomies"> <span class="category-links term-links category-style-normal"> <a href="https://licentiada.org/category/licenta/" class="category-link-licenta" rel="tag">Licență</a> </span> </div><!-- .entry-taxonomies --> <h3 class="entry-title"><a href="https://licentiada.org/lucrarea-de-fata-mecanisme-de-crestere-a-productivitatii-la-nivel-de-firma-sc-nori-farm-608718-3cab0566/" rel="bookmark">Lucrarea de față Mecanisme de creștere a productivității la nivel de firma – S.C. NORI FARM [608718]</a></h3></header><!-- .entry-header --> <div class="entry-summary"> <p>1 INTRODUCERE Lucrarea de față “Mecanisme de creștere a productivității la nivel de firma – S.C. NORI FARM S.A.” este structurată pe patru capitole, care la rândul lor sunt împărțite în subcapitole pentru a asigura o analiză cât mai potrivită. În prima parte a lucrării s-a preze ntat principalele aspecte teoretice cu privire la analiză…</p> </div><!-- .entry-summary --> <footer class="entry-footer"> <div class="entry-actions"> <p class="more-link-wrap"> <a href="https://licentiada.org/lucrarea-de-fata-mecanisme-de-crestere-a-productivitatii-la-nivel-de-firma-sc-nori-farm-608718-3cab0566/" class="post-more-link"> Read More<span class="screen-reader-text"> Lucrarea de față Mecanisme de creștere a productivității la nivel de firma – S.C. NORI FARM [608718]</span><span class="kadence-svg-iconset svg-baseline"><svg aria-hidden="true" class="kadence-svg-icon kadence-arrow-right-alt-svg" fill="currentColor" version="1.1" xmlns="http://www.w3.org/2000/svg" width="27" height="28" viewBox="0 0 27 28"><title>Continue

  • Efectele termoelectrce sunt efecte care apar in conductoarele strabatute de c urent [616003]

    UNIVERSITATEA POLITEHNICA DIN BUCURESTI FACULTATEA DE INGINERIE ELECTRICA EFECTE TERMOELECTRICE STUDENT: [anonimizat] 2017 Efectele termoelectrce sunt efecte care apar in conductoarele strabatute de c urent electric in prezenta unui gradient de temperatura, sunt rezultatul interdependentei intre curentul electric si curentul caloric. Acest efect poate fi folosit pentru a genera electricitate, pentru a masura temperatura si…

  • Lect. Univ. Dr. GABROVEANU Mihai [610892]

    UNIVERSITATEA DIN CRAIOVA FACULTATEA DE ȘTIINȚE SPECIALIZAREA INFORMATICĂ LUCRARE DE LICEN ȚĂ Îndrumător științific : Lect. Univ. Dr. GABROVEANU Mihai Absolvent: [anonimizat] 2019 UNIVERSITATEA DIN CRAIOVA FACULTATEA DE ȘTIINȚE SPECIALIZAREA INFORMATICĂ DEZVOLTAREA APLICA ȚIILOR WEB FOLOSIND SPRING 5 Îndrumător științific : Lect. Univ. Dr. GABROVEANU Mihai Absolvent: [anonimizat] 2019 Cuprins 1. INTRODUCERE ………………………….. ………………………….. ……………………………..

  • Lucrare de licență [618603]

    1 2 UNIVERSITATEA “OVIDIUS” CONSTANȚA FACULTATEA DE ȘTIINȚE ALE NATURII ȘI ȘTIINȚE AGRICOLE Lucrare de licență Coordonator științific, Prof.Univ.Dr. George -Marius Cracu Student: [anonimizat] 2018 3 UNIVERSITATEA “OVIDIUS” CONSTANȚA FACULTATEA DE ȘTIINȚE ALE NATURII ȘI ȘTIINȚE AGRICOLE Lucrare de licență Studiu privind gradul de satisfacție a turiștilor cu privire la destinația turistică Studiu de caz…

  • Ceobanu Gheorghiță -Mădălin [620900]

    1 Ceobanu Gheorghiță -Mădălin Teoria și Practica Formării Religioase Anul I, Semestrul I Proiect catehetic despre crearea lumii Unitatea catehetică: Paraclisul din Sfânta Biserică . Tema catehetică: Crearea lumii . Tipul activităț ii: de consolidare a conținutului catehe tic (învățătura despre Crearea lumii ). Scopul activităț ii: de aprofundare, consolidare și însușire a cunoștinț elor…

  • 1.1 Necesitatea sistemelor de scanare cu raze X în aviație În urma nenumaratelor atentate întamplate pe parcursul anilor, s-a stabilit necesitatea… [307070]

    Capitilul I Introducere 1.1 Necesitatea sistemelor de scanare cu raze X în aviație În urma nenumaratelor atentate întamplate pe parcursul anilor, s-a stabilit necesitatea scanării cat mai performante a bagajelor și a pasagerilor. [anonimizat], se cere o scanare foarte buna a pasagerilor dar și a bagajelor, marfurilor de transport și containerelor. Se face un control…