Necesitatea Unei Platforme de Traduceri

CUPRINS

Pagina

INTRODUCERE

CAPITOLUL 1 – NECESITATEA UNEI PLATFORME DE TRADUCERI

CAPITOLUL 2 – TEHNOLOGII UTLIZATE ÎN REALIZAREA PAGINILOR WEB

2.1. Serverul Apache

2.2. HTML & CSS

2.3. jQuery – librărie bazată pe Javascript

2.4. Pagini Web dinamice

2.5. PHP

2.5.1. Introducere în PHP

2.5.2. Instrucțiunile PHP

2.5.3. Funcțiile în PHP

2.5.4. Șiruri în PHP

2.5.5. Tablourilor în PHP

2.5.6. Obiecte și clase în PHP

2.6. MySQL Gestiunea bazelor de date

2.6.1. Introducere în MySQL

2.6.2. Conectarea la serverul MySQL

2.6.3. Executarea interogărilor INSERT, UPDATE și DELETE

2.6.4. Prelucrarea rezultatelor interogărilor SELECT

2.6.5. Scăparea automată de șiruri de caractere speciale

CAPITOLUL 3 – APLICAȚIE

3.1. Cerințe și specificații

3.2. Structura site-ului

3.2.1. Secțiunea 1 – Hederul Paginii

3.2.2. Secțiunea 2 – Main Content

3.2.3. Secțiunea 3 – Side Content

3.2.4. Secțiunea 4 – Informațiile din partea de jos a index-ului

3.2.5. Secțiunea 5 – Footerul Paginii

3.2.6. Structura bazei de date

3.2.7. Logica din spatele interfeței grafice

3.3. Prezentarea site-ului

3.3.1. Pagina principală

3.3.2. Pagina Solutions

3.3.3. Pagina Processes

3.3.4. Pagina Selectare Creare Cont

3.3.5. Pagina Creare Cont Client

3.3.6. Pagina Creare Cont Translator

3.3.7. Pagina Sign in

3.3.8. Pagina Client

3.3.9. Pagina Translator

CAPITOLUL 4 – DIRECȚII DE DEZVOLTARE A APLICAȚIEI

4.1. Modificările ulterioare

4.2. Configurarea și darea în funcțiune a platformei

4.2.1. Instalarea infrastructurii software

4.2.2. Crearea bazei de date

CONCLUZII

BIBLIOGRAFIE

INTRODUCERE

Aproximativ 40 % din populația globului are acces la internet în acest an, 2014, la finele anului 1995 doar aproximativ 1% din populația globului avea acces la internet. Din punct de vedere economic, internetul a devenit unealta principala de promovare a firmelor.  

În 2014, aproape 75% (2,1 miliarde) din totalul utilizatorilor de internet din lume (2,8 miliarde), locuiesc în primele 20 de țări. Restul de 25% (0,7 miliarde) este distribuit între celelalte 178 de țări, fiecare reprezentând mai puțin de 1% din totalul utilizatorilor. China, țara cu cei mai mulți utilizatori (642 milioane de euro în 2014), reprezintă aproape 22% din total, și are mai mulți utilizatori decât următorii trei țări combinate (Statele Unite ale Americii, India, și Japonia). Printre primele 20 de țări, India este cea cu cel mai scăzut de penetrare: 19%, iar cea mai mare rată de creștere anuală. La capătul opus al gamei, Statele Unite, Germania, Franța, Marea Britanie, și Canada au cea mai mare penetrare: peste 80% din populația din aceste țări are o conexiune la internet.

Ne apropiem rapid de 1 miliard de site-uri web, o piatră de hotar care la această rată va fi atins până la sfârșitul anului 2014. De la primul site-ul web în 1991 la peste 700 milioane în 2013.[13]

      În cele mai multe cazuri firmele își creează site-uri de prezentare, o carte de vizită a acestora, un mod de a se face cunoscute și de a atrage clienții mult mai ușor. 

    Datorită globalizării firmele nu mai sunt constrânse să-și desfășoare activitatea pe teritoriul țării de origine și reușesc astfel să-și diversifice clientela.

      În ultimii ani tendința oricărei firme este de a reduce costurile pe cât posibil, un motiv fiind și criza financiară care a cuprins o multitudine de state. Tendința aceasta poate fi observată imediat în cazul multinaționalelor care preferă să-i deschidă filiale prin țările din estul Europei sau pe continentul asiatic astfel încât să nu mai fie nevoite să plătească salarii mult mai mari în occident.       Aceste lucruri aduc cu ele și necesitatea traducerii unei mulțimi de documente necesare atât în interiorul unei companii cât și pe paginile web ale companiilor care se doresc a avea suport pentru mai multe limbi. 

Bineînțeles, traducerea documentelor necesare sunt făcute întotdeauna de către firme specializate în astfel de traduceri care sunt foarte scumpe. 

    Un minus al firmelor de traduceri în trecut era legat de faptul că o firma de traduceri nu poate avea mai mult de 10-15 perechi de limbi străine cu care puteau să facă traduceri legalizate. Era cam dificil să angajeze traducători pentru vreo limba a unei țări îndepărtate. Acest minus a început sa dispară odată cu internetul și cu ieftinirea telecomunicațiilor.

Aplicația Google translate este o aplicație foarte puternica dar care încă nu a ajuns la un nivel bun de performanta sau de încredere. Se presupune ca va mai dura 10-15 ani până când platforma va fi pusă la punct din toate punctele de vedere, dar probabil și atunci va avea anumite costuri de utilizare. Până atunci firmele de traduceri vor mai câștiga destul din necesitățile pieței.

O modalitate foarte bună de a reduce costurile unei firme de traduceri este "outsourcing"-ul, aceste presupune plata unor oameni externi firmei să facă munca care ar putea fi făcută de un angajat obișnuit al firmei. Astfel pot fi angajați oameni din diferite colțuri ale lumii, la costuri mai mici decât ar trebui plătit un angajat obișnuit.

Mulți tineri prefera să lucreze ca freelanceri din toate colțurile lumii, astfel aceștia nu mai pierd timp cu deplasarea spre lucru, cu relocarea și chiar unii evită astfel interacțiunea cu alte persoane. În anumite câmpuri de munca această interacțiune nefiind neapărat necesară. 

Mai mult, plătind oameni externi să realizeze traduceri, firma nu este nevoită să aibă o locație a firmei, astfel nu este nevoita să plătească chirie și cheltuieli. 

Iar probabil cel mai important motiv este faptul că astfel o firma care își desfășoară activitatea exclusiv pe web are acces la experți din toate colțurile lumii. [13]

CAPITOLUL 1 – NECESITATEA UNEI PLATFORME DE TRADUCERI

Se pare că limba engleză este limba globală sau chiar limba Universului. Este destul de ușor să-ți intre în cap ideea că toată lumea vorbește limba engleză: chiar Asterix sau Cleopatra sau creaturi din alte galaxii. Deci, atunci când toată lumea înțelege limba engleză, de ce există profesia de traducător?

Limba engleză este, de asemenea, un limbaj important de traducere. Practică comună este că, chiar dacă ceva este scris cu propria limbă, o traducere în limba engleză este, de obicei, pasul următor. Acesta a fost cazul cu, de exemplu, prima carte sursă Twitter. Acesta a fost prima carte scrisă, în finlandeză. Apoi a fost mai întâi tradusă în engleză și doar apoi în mai multe alte limbi. Cele mai multe proiecte de traducere sunt fie din limba engleză sau în limba engleză.

Figura 1.1- Țările în care limba engleză este o limbă oficială

Logica pare a fi rezonabilă, deoarece o mare parte din populația lumii știe cel puțin ceva engleză și pentru că vedem, auzim sau citim în limba engleză peste tot. Cu toate acestea, percepția puterii în limba engleză poate fi înșelătoare. Potrivit Wikipedia, engleza este vorbită ca prima limbă de 309-400 milioane de oameni, în timp ce în general la fel de mult ca 1,8 miliarde sunt în măsură să vorbească limba engleză. Ar fi multe limbi disponibile. De exemplu, spaniola are mai mulți vorbitori nativi decât engleza.

Realitatea poate fi, de asemenea, diferită. De exemplu, texte islandeze sunt traduse în principal în germană, înainte de toate traducerile ulterioare. În pofida acestor excepții, engleză are rădăcinile înfipte peste tot în lume. Un rezultat al acestei tendințe este faptul că distribuția de cunoștințe în jurul Lumii nu este cu siguranța egală. Când engleză conduce lumea, cei care vorbesc engleza au toate informațiile. Altă consecință este că, atunci când oamenii cred că ar trebui să folosească limba engleză, este posibil ca limba lor maternă să aibă de suferit. Limbile au mai puțină atenție și resurse pentru a trăi și de a dezvolta, în cazul în care limba engleză este folosit în cele mai multe domenii literatură, romane și alte distribuții lingvistice.

Nedrept? Da. Dar pentru a face lumea un pic mai mult egală, este reconfortant să știi că chiar lumea care vorbește limba engleză (în special americani) nu au totul. Ei nu au multă literatură tradusă pe piața americană.

Acest întreg fenomen nu este cu totul pozitiv, nici chiar pentru limba engleză în sine. Când non-vorbitori nativi folosesc limba engleză, o folosesc în mod diferit decât vorbitori nativi o fac. Parcă nu este deloc aceeași limbă. Poate suna și arata la fel, dar regulile sunt diferite. Nu are rost să negăm, noi vorbitori non-nativi facem mai multe greșeli cu limba engleză decât cei care o au ca limbă nativă.

Și dacă ne întoarcem la întrebarea mea inițială: Traducători sunt necesari cu disperare?. Cu cât limba engleză este utilizată mai mult în lume cu atât mai dificil este să găsim o limba engleză folosită impecabil. Noi în mod credem că știm limba. Traducători ne ajuta, pentru a evita toate posibilele greșeli și neînțelegeri. Nu sunteți de acord?[14]

Aceasta este ideea aplicației – creare unei platforme de traduceri în care un administrator poate coordona munca mai multor traducători care lucrează ca freelanceri din întreaga lume; Astfel platforma poate aduna un domeniu mare lucru, multe perechi de limbi din care pot fi traduse documente.

Nevoia documentelor traduse dintr-o limba în alta este imensa. 

Mai urmează câțiva ani în care gigantul Google trebuie să lucreze la platforma lor Google translate ca să fie de încredere inclusiv pentru documente oficiale. 

Astfel, nevoia traducerilor fiind într-o continua creștere din cauza internaționalizării, nevoia de a tăia din costuri și posibilitatea de a folosi freelanceri, oameni din întreaga lume dispuși să lucreze de acasă au generat posibilitatea creării unei platforme care să permită accesul acestora la muncă.

CAPITOLUL 2 – TEHNOLOGII UTLIZATE ÎN REALIZAREA PAGINILOR WEB

Serverul Apache

Serverele de web sunt computere care oferă (servesc) pagini Web. Fiecare server Web are o adresă IP și, eventual, un nume de domeniu.

Apache este cunoscut drept cel mai popular Web server din lume. Apache, altfel cunoscut sub numele de Apache HTTP Server, este un standard stabilit în distribuția online a serviciilor site-ului, care a dat impulsul inițial pentru extinderea World Wide Web-ului. Este o platforma de server web open-source, care garantează disponibilitatea on-line a majorității site-urile active de azi. Serverul are ca scop la a servi pe scara largă o mare parte a platformelor web / sistemelor de operare moderne și populare, cum ar fi Unix, Windows, Linux, Solaris, Novell NetWare, FreeBSD, Mac OS X, Microsoft Windows, OS / 2, etc.

Sunt două versiuni cunoscute pentru originea numelui proiectului. Conform celui mai răspândit – numele serverului de web a fost ales din respect pentru tribul nativ american indian Apache, bine cunoscut pentru abilitățile sale militare. Cealaltă versiune se referă la un set de patch-uri atașate la codebase-ul NCSA HTTPd 1.3, ceea ce îl face "patchy" server.

Serverul Apache a fost dezvoltat de o comunitate open source – Apache Software Foundation, ai cărei membri adăugă constant noi funcționalități utile, cu unicul scop de a oferi o platformă server sigură și extensibilă care asigură furnizarea de servicii HTTP, în conformitate cu standardele HTTP actuale.

Există o cantitate mare de module create special pentru serverul Apache, care suportă diverse scripturi și permite conținut dinamic pentru a fi rulat pe server. Cele mai multe dintre modulele vin ca parte a distribuției Apache, făcând serverul să dispună de o gamă largă de capabilități, cum ar fi suport pentru CGI (Common Gateway Interface), un protocol standard de comunicare între programe externe aplicație și un server web, și de asemenea SSI (Server Side Include), un simplu limbaj de scripting server-side. Alte module Apache includ: executarea script-uri CGI, autentificarea utilizatorului, redirecționare de URL, acces utilizator anonim, directorul de listări automate, suport pentru Metafișierele antet HTTP, suport pentru mod. Serverul are ca scop la a servi pe scara largă o mare parte a platformelor web / sistemelor de operare moderne și populare, cum ar fi Unix, Windows, Linux, Solaris, Novell NetWare, FreeBSD, Mac OS X, Microsoft Windows, OS / 2, etc.

Sunt două versiuni cunoscute pentru originea numelui proiectului. Conform celui mai răspândit – numele serverului de web a fost ales din respect pentru tribul nativ american indian Apache, bine cunoscut pentru abilitățile sale militare. Cealaltă versiune se referă la un set de patch-uri atașate la codebase-ul NCSA HTTPd 1.3, ceea ce îl face "patchy" server.

Serverul Apache a fost dezvoltat de o comunitate open source – Apache Software Foundation, ai cărei membri adăugă constant noi funcționalități utile, cu unicul scop de a oferi o platformă server sigură și extensibilă care asigură furnizarea de servicii HTTP, în conformitate cu standardele HTTP actuale.

Există o cantitate mare de module create special pentru serverul Apache, care suportă diverse scripturi și permite conținut dinamic pentru a fi rulat pe server. Cele mai multe dintre modulele vin ca parte a distribuției Apache, făcând serverul să dispună de o gamă largă de capabilități, cum ar fi suport pentru CGI (Common Gateway Interface), un protocol standard de comunicare între programe externe aplicație și un server web, și de asemenea SSI (Server Side Include), un simplu limbaj de scripting server-side. Alte module Apache includ: executarea script-uri CGI, autentificarea utilizatorului, redirecționare de URL, acces utilizator anonim, directorul de listări automate, suport pentru Metafișierele antet HTTP, suport pentru module de încărcare, negocierea conținutului, abilitățile caching proxy, afișarea stării de server, directoarele de utilizatori, etc . Utilizatorii pot alege pentru a instala aceste module cu instalarea serverului Apache. Dacă nu, le pot instala mai târziu, cu ajutorul modulelor dinamice.

Apache oferă diverse avantaje pentru utilizatori, dezvoltatori si administratori de Web:

Caracteristici. Apache are diferite caracteristici utile, inclusiv punerea în aplicare a celor mai recente protocoale.

Personalizabil. Arhitectura modulară Apache vă permite de a construi un server care este "făcut pentru a măsura."

Administrare. Fișierele de configurare Apache sunt în ASCII, au un format simplu, și pot fi editate folosind orice editor de text. Ele sunt transferabile, astfel încât se poate clona în mod eficient un server. Se poate controla serverul din linia de comandă, ceea ce face ca administrarea de la distanță foarte convenabilă.

Extensibil. Apache server și codul sursă API sunt deschise pentru public. Dacă există orice caracteristică pe care doriți, dar nu există în Apache, puteți scrie propriul modul de server pentru al implementa.

Eficient. Mult efort a fost pus în optimizarea codului în C a lui Apache pentru performanță. Ca urmare, se rulează mai rapid și consumă mai puține resurse de sistem decât multe servere.

Portabilitate. Apache rulează pe o mare varietate de sisteme de operare, inclusiv toate variantele de UNIX, Windows, MacOS (pe PowerPC), și altele.

Stabilitate / Fiabilitate. Codul sursă a lui Apache este deschis pentru public. Când sunt găsite orice fel de defecte, acestea sunt de multe ori comunicate rapid, și sunt rapid fixate.[1]

Actualizările sunt făcute și anunțate ulterior. Datorită acestui lucru Apache devine din ce în ce mai stabil, și prin urmare de încredere, server de-a lungul timpului.

Pentru acest proiect am ales Serverul Apache datorita acestor avantaje și am ales un soft te tip server care are inclus Serverul Apache numit WAMP.

Orice calculator poate fi transformat într-un server Web prin instalarea software de tip server ca WAMP. WAMP este un acronim pentru Windows, Apache HTTP Server, MySQL și PHP.

WampServer este un mediu de dezvoltare web sub Windows. Acesta vă permite să creați aplicații web cu Apache2, PHP și MySQL. Alături, PhpMyAdmin vă permite să gestionați cu ușurință baza de date MySQL. Am ales WAMP din mai multe motive:

Se poate configura serverul dintr-un singur click

Se pot gestiona serviciile Apache și MySQL foarte ușor

Se schimba starea serverului online/offline – dă acces la toată lumea sau doar la localhost

Se pot instala și schimbă diferite versiuni de Apache, MySQL și PHP

Se pot gestiona setările de server

Se pot accesa log-urile și la fișierele de setare

Se pot crea alias-uri

Se poate sa mergi la directorul root cu un singur click[21]

HTML & CSS

Web design-ul înseamnă planificarea și crearea de site-uri web. Un site web este o colecție de pagini web (documente care sunt accesate prin intermediul Internetului). O pagină web este ceea ce vedem pe ecran, atunci când introducem o adresă Web, facem click pe un link, sau punem o interogare într-un motor de căutare. O pagină web poate conține orice tip de informații, și poate conține text, culoare, grafică, animație și sunet. Când analizăm elementele din care este construită, o pagină web poate să aibă până la trei straturi – conținut, prezentare și comportament.

Layer-ul de conținut este întotdeauna prezent. El conține informațiile pe care creatorul paginii web dorește să le transmită publicului, și este încorporat în HTML mark-up care definește structura și semantica acestuia. Cea mai mare parte a conținutului de pe Web este un text, dar conținutul poate fi, de asemenea, furnizat prin intermediul imaginilor, animațiilor, sunetelor, videoclipurilor etc.

HTML este un limbaj de calculator conceput pentru a permite crearea de site-uri web, de fapt HTML înseamnă " Hypertext mark-up language":

Hyper este opusul de liniar. Programe de calculator vechi trebuiau sa fie liniare – adică, au avut o anumită ordine. Dar cu un limbaj "hyper", cum este HTML, utilizatorul poate merge oriunde pe pagina de web în orice moment.

Text este exact ceea ce se vede în pagina web – caractere în limba engleză utilizate pentru a face cuvinte obișnuite.

Mark-up este ceea ce se face la text pentru a schimba aspectul acestuia. De exemplu, "marcarea" textul cu <b> înainte de a și </ b> după va pune textul în bold.

Language este doar asta. HTML este limbajul pe care computerele îl citesc, în scopul de a înțelege pagini web.

Nu trebuie neapărat să știm limbajul HTML ca să creăm un Website. Sunt multe programe de construit website-uri pe piață care nu necesită cunoștințe de HTML. II spunem programului ce vrem să facem și programul creează HTML pentru noi. Totuși, este cu siguranță un beneficiu să înțelegem cum funcționează HTML, chiar daca folosim unul din aceste programe, pentru a putea profita de toate avantajele pe care le oferă.

HTML constă într-o serie de coduri scurte scrise într-un fișier text de autorul site-ului – acestea sunt tag-uri. Textul este apoi salvat ca un fișier HTML, și vizualizat prin intermediul unui browser, cum ar fi Internet Explorer sau Google Chrome. Acest browser citește fișierul și traduce textul într-o formă vizibilă, făcând pagina să apară așa cum autorul a intenționat. Codarea HTML face ca site-ul nostru să arate mai degrabă ca un site web și nu doar un text simplu. Cu HTML putem: crea titles, headings, subheadings (titluri, subtitluri), face liste cu bullet-uri sau numerotate, defini paragrafe, pune text în bold sau italic (îngroșat sau înclinat), adăuga imagini și link-uri și multe atele. [5]

Layer-ul de prezentare definește modul în care conținutul va apărea pentru cineva care accesează pagina web într-un fel sau altul. Modul convențional de a vizualiza o pagină web este cu un browser web regulat, desigur, dar asta e doar unul dintre mai multe metode posibile de acces. De exemplu, conținutul poate fi, de asemenea, convertit într-o descriere audio pentru utilizatorii care au probleme de vedere sau dificultăți de citire.

CSS sau Cascading Style Sheets, este modul recomandat pentru a controla stratul de prezentare într-un document web. CSS completează HTML, oferind un aspect paginii web. Paginile create cu HTML sunt destul de simple având un fontul și dimensiunea fontului implicite. Folosind CSS, puteți îmbunătății aspectul, adăugând de culoare și imagini de fundal, schimbând fonturi și dimensiunea acestuia, desenând margini din jurul anumitor zone, și chiar modificând aspectul paginii în sine.

CSS are propriul limbaj de programare, separat de HTML, dar nu poți folosi CSS fără pagina HTML. Cu alte cuvinte, deși HTML poate să funcționeze singură și să prezinte o pagină la un browser, CSS nu se poate. Nu este posibil să creezi o pagină CSS. Mai întâi trebuie scris cod HTML și apoi să utilizăm CSS pentru a da paginii un anume stil pe care îl dorim.

Înainte de CSS, cu HTML schimbarea de fonturi și culori, se făcea prin schimbarea de atribute pentru fiecare element. În cazul în care se dorea ca toate heading-urile să arate într-un anumit fel, trebuia să se schimbe fiecare dintre aceste heading-uri. Imaginați-vă acest lucru pe o pagina cu zece heading-uri, și apoi imaginați-vă făcând acest lucru pe 50 de pagini web. Sarcina devine obositoare repede. Și apoi gândiți-vă ce se întâmplă atunci când se decide că se vrea ca toate heading-urile să fie schimbate cum au fost inițial. CSS ușurează această povară de a actualiza individual fiecare element și face în așa fel încât să putem aplica un stil unic pe unul sau mai multe elemente. Puteți aplica mai multe stiluri aceluiași element, și puteți aplica un anumit stil pentru fiecare element individual. De exemplu, dacă doriți ca toate heading-urile să fie cu bold(îngroșate) dar un anumit heading trebui să fie italic(înclinat), puteți face acest lucru cu CSS. Se utilizează CSS pentru a face modificări la aspectul, amplasarea unei pagini web. CSS face ca gestionarea acestor modificări să fie ușoară

Prin externalizarea stratul de prezentare , CSS oferă o serie de avantaje semnificative :

Stilul întregului site este păstrat într-un număr limitat de foi de stil. Acest impact pozitiv pe care îl are asupra întreținerii site-ului nu poate fi supraestimat – editarea a unui fișier de stil este evident mai eficientă decât editarea a 10.000 de fișiere HTML !

Economisirea lățimii de bandă este măsurabilă. Deoarece foaia de stil este salvată în memoria cache de la prima solicitare și pot fi reutilizată pentru fiecare pagină de pe site, aceasta nu trebuie să fie descărcată cu fiecare pagină web . Scoțând toate mark-up-urile de prezentare de la paginile de web , în favoarea folosiri CSS reduce, de asemenea, dimensiunea și lățimea de bandă de utilizare a acestora, cu mai mult de 50 %, în multe cazuri. Acest lucru aduce beneficii proprietarul site-ului , datorită micșorării lățimi de bandă și costurilor de stocare, precum și vizitatorilor site-ului, pentru care paginile web se încarcă mai repede.

Separarea de conținut de prezentarea face ca proprietarii de site-uri să reutilizeze mai ușor conținutul pentru alte scopuri , cum ar fi feed-uri RSS sau conversia text-to-speech conversia .

Reguli de stil separate pot fi utilizate pentru diferite medii de ieșire . Nu mai este nevoie să cream o versiune specială a fiecărei pagini pentru printare, putem crea pur și simplu o foaie de stil unic, care controlează

modul în care va fi printată fiecare pagină de pe site.

jQuery – librărie bazată pe Javascript

Layer-ul de comportament implică în timp real interacțiunea utilizatorului cu documentul. Această sarcină este în mod normal manipulată de JavaScript. Interacțiunea poate fi orice, de la o banală validare care asigură că un câmp obligatoriu este completat înainte de un formular de comandă să fie trimis, până la aplicații web sofisticate care funcționează la fel ca programele de desktop obișnuite.

JavaScript este un limbaj de programare dezvoltat de Netscape pentru a permite autorilor web să proiecteze site-uri interactive. Deși împărtășește multe dintre caracteristicile și structurile limbajului Java, a fost dezvoltat independent. Javascript poate interacționa cu codul sursă HTML, care permite autorilor Web pentru a condimenta site-urile cu conținut dinamic. JavaScript este un limbaj susținut de o serie de companii de software și este gratuit, poate fi folosit de către oricine fără a cumpăra licență. El este suportat de toate browser-ele recente, cu toate că Internet Explorer suporta doar un subset, pe care Microsoft îl numește Jscript.

Html definește cum este conținutul paginii web și aspectul paginii web este definit folosind CSS. Folosind doar aceste două limbaje puteți crea pagini web statice , care vor fi accesibile indiferent de ce dispozitiv este folosit pentru a accesa pagina. Aceste pagini statice pot interacționa cu vizitatorul , prin utilizarea formularelor . Odată ce un formular este completat și depus o cerere este trimis înapoi la serverul pe care pagina de web din nou static este construit și în cele din urmă descărcate în browser.

Dezavantajul mare ale acestor pagini web este faptul că singura cale prin care vizitatorul interacționează cu pagina este prin completarea formularului și de așteptare pentru ca o nouă pagină să fie încărcată. JavaScript are rolul de a rezolva această problemă. Acest limbaj face acest lucru prin convertirea paginii statice într-una care poate interacționa cu vizitatorii fără ca ei să fie nevoiți să aștepte ca o nouă pagină să se încarce pentru ca să proceseze cererea lor. JavaScript adaugă comportament la pagina web în cazul în care pagina web este capabilă să răspundă la acțiunile efectuate de vizitatorii fără a fi nevoie de a încărca o nouă pagină web pentru a procesa cererea. Vizitatorul nu trebuie sa mai completeze toate formularele și sa dea submit pentru a primi feedback care să-i spună dacă a făcut greșeală în primul câmp și va trebui să introducă tot din nou. Cu JavaScript putem valida fiecare dintre câmpurile care vizitatorul le completează și să ofere feedback imediat atunci când fac o greșeală de scriere.

JavaScript, de asemenea, permite ca pagina să fie interactivă în alte moduri care nu implică formulare deloc. Puteți adăuga animații în pagina care, fie atrage atenția la o anumită parte a paginii sau care face pagina mai ușor de folosit. Cu JavaScript puteți încărca imagini noi, obiecte, sau scripturi în pagina web fără a fi nevoie să reîncărcați întreaga pagină. Există chiar și o modalitate prin care JavaScript transmite cererile înapoi la server și tratează răspunsurile de la server fără a fi nevoie să încarce pagini noi .

Încorporând JavaScript într-o pagină web putem îmbunătăți experiența vizitatorilor paginii web prin conversia de la o pagină statică într-una care poate interacționa cu ei. Un lucru important de reținut însă este că nu toată lumea care vizitează pagina dvs. va avea JavaScript și astfel pagina dvs. va trebui în continuare să lucreze pentru cei care nu au JavaScript.

jQuery nu este un limbaj, dar este un cod JavaScript bine scris. După cum este citat pe site-ul oficial jQuery, "aceasta este o librărie JavaScript rapidă și concisă, care simplifică parcurgerea de documente HTML, manipularea de evenimente, animarea, și interacțiunile Ajax pentru dezvoltarea web rapidă".

jQuery este o bibliotecă JavaScript. Bine, acest lucru s-ar putea să nu aibă mult sens. Ce este o bibliotecă JavaScript? O bibliotecă JavaScript este o colecție de cod pe care le utilizăm, atunci când dorim să obținem acces la funcționalități suplimentare sau pentru a face viața mai ușoară. jQuery face ambele.

jQuery este pur și simplu JavaScript pe care o adăugăm paginii web pentru a scrie mai ușor JavaScript. Sunt multe lucruri pe care jQuery le face mult mai bine decât vechiul JavaScript simplu. Lucrul cu pagini web este unul din acele lucruri. De exemplu, în cazul in care s-ar putea folosi getElementById, jQuery are niște chestii numite selectors care permit mult mai multe moduri puternice de acces la elemente pe o pagină web pentru ca JavaScript să le folosească.

jQuery este destul de popular. Deși nu există statistici exacte pentru a arăta cât de des este folosit jQuery, o privire rapidă asupra site-urilor populare arată că jQuery este peste tot pe web. jQuery, de asemenea, face ca dezvoltarea cross-browser-ul să fie mai ușoară. Suportul pentru JavaScript diferă mult de la browser la browser și de la o versiune la alta. Ce funcționează în Firefox s-ar putea să nu funcționeze deloc în Internet Explorer sau s-ar putea să funcționeze complet altfel. Vestea cea bună este că jQuery ne scapă de aceste complicații. Funcțiile jQuery își dau seama ce fel de browser este folosit într-un mod precis și apoi tine cont de aceasta pentru a face browser-ul să se comporte într-un mod consistent.

Pagini Web dinamice

 Ce reprezintă paginile web statice și ce reprezintă cele dinamice?

Foarte multe pagini web pe internet sunt statice. La multe din acestea nu ne putem da seama din prima clipă din care categorie fac parte. Dacă pagina prezintă informații de bază, aparține unei companii mai mici și pur și simplu prezinta informații legate de aceasta companie, sunt șanse mari ca această pagină web să fie una statică. 

Paginile statice pot fi updatate doar de către o persoană care are cunoștințe în domeniul tehnologiilor web. Aceste pagini web statice au un cost de creare mult mai mic comparativ cu cele dinamice și astfel multe companii de dimensiuni mici încă folosesc acest tip de pagini web pentru a avea o prezență pe web. 

Avantajele unei pagini web statice

timp de creare mic

prețul de creare este redus

găzduirea pe internet este de obicei este mai ieftină decât cea necesară unei pagini dinamice. 

Dezavantajele unei pagini web statice

necesită cunoștințe web pentru întreținere și îmbunătățire.

pagina web nu este la fel de folositoare pentru utilizator

conținutul acestei pagini poate stagna

Pe de altă parte paginile web dinamice pot avea un cost mai mare inițial necesar dezvoltării, dar avantajele sunt numeroase. 

La un nivel de bază, o pagina web dinamică poate da administratorului unei pagini web să updateze și să adauge nou conținut pe site. De exemplu, știri și evenimente pot fi postate pe site printr-o simplă interfață în browser. 

Detaliile dinamice ale unui site sunt limitate doar de către imaginație.

Exemple de pagini web dinamice sunt:

CMS-urile (content management systems), acestea sunt pagini(platforme) care oferă posibilitatea utilizatorilor de a crea propriile pagini web.

e-commerce (magazine virtuale) 

site-uri care permit utilizatorilor sau clienților să urce documente, sau administratorilor să creeze conținut sau să adauge informații pe un site.

Avantajele unei pagini web dinamice:

pagina web mult mai funcțională și folositoare

actualizarea conținutului mult mai facilă

conținutul nou aduce înapoi vizitatori și astfel pagina web este mai bine văzută de către motoarele de căutare.

poate funcționa ca un sistem care permite utilizatorilor să colaboreze

Dezavantajele unei pagini web dinamice:

timp de creare mai mare, cost mai mare

găzduirea are un cost mai mare de obicei. (găzduirea necesita acces la php și la o baza de date)

Concluzii pagini web statice vs dinamice

Foarte multe site-uri făcute în trecut sunt statice, dar din ce în ce mai mulți oameni realizează avantajele deținerii unei pagini web dinamice.

Paginile web dinamice întrebuințează maxim site-ul iar astfel vizitatorii acestuia pot ori să-l folosească ca pe o unealta, ori să aibă o experiență interesantă. 

PHP

Introducere în PHP

PHP fost inițial pentru Personal Home Page Tools. A început în 1994 ca un set de programe scrise de către programatorul Rasmus Lerdorf, care le-a folosit pentru a efectua sarcini legate de întreținerea pagini sale personale, cum ar fi afișarea CV-ul său. Lerdorf a lansat PHP publicului în 08 iunie 1995 pentru a accelera găsirea de defecte și de a îmbunătăți codul. Această livrare a fost numită PHP versiunea 2 și deja a avut funcționalitatea de bază pe care PHP o are în prezent. Aceasta a inclus variabile, manipulare de form-uri și capacitatea de a încorpora HTML.

PHP (acronimi recursiv pentru PHP: Hypertext Preprocessor) este probabil cel mai popular limbaj de scripting de pe web, distribuit în sistem Open Source, utilizat pentru a dezvolta aplicații web. PHP este un limbaj care este integrat în HTML pentru a adăuga funcții pe care HTML nu le poate face singur. PHP ne permite să colectăm, procesăm și să utilizăm date pentru a crea produsul dorit.

În general PHP rulează pe un server web și pot fi instalat pe cele mai multe servere web și pe aproape orice sistem de operare și platforme gratuit, sub o licență Open Source. Disponibilitate gratuită, puterea, și ușurința de utilizare explică în mare parte adoptarea pe scară largă: PHP este instalat pe mai mult de 20 de milioane de site-uri și 1 milion de servere web.

PHP este foarte flexibil: funcții simple PHP poate fi integrat în pagini web, sau se poate lucra în altă parte: Codul HTML poate fi încorporat în PHP.

PHP este foarte versatil: se poate vorbi cu o varietate de aplicații externe, folosind o mare varietate de protocoale, și se poate analiza (înțelege) o gamă largă de formate de schimb de date. De exemplu, se poate vorbi de programe de baze de date cum ar fi MySQL și Oracle, precum și programe de baze de date de dimensiuni mai mici, cum ar fi MS Access și Filemaker. Asta îl face foarte util pentru dezvoltarea de aplicații web care folosesc baze de date. Poate comunica, de asemenea, cu alte lucruri, cum ar fi servere LDAP (pentru informații de utilizator) și, în lumea librăriilor, servere Z39.50, și numeroase alte lucruri.

Ceea ce distinge PHP de alte limbaje cum ar fi limbajul JavaScript care este client-side , este că PHP este executat pe server, generând HTML care este apoi trimis către client. Clientul va primi rezultatele rulării acelui script, dar nu va ști ce codul de bază al scriptului. Puteți chiar configura și serverul de web pentru a procesa toate fișierele HTML cu PHP, și astfel tot codul este ascuns utilizatorului.

E adevărat … PHP nu este singurul limbaj de acest fel. Adevărul fie spus, există o multitudine de instrumente care fac lucruri similare. În domeniul Microsoft, este . Net. În domeniul Java, este JSP. Și există chiar și o mulțime de alternative Open Source, cum ar fi Perl și Ruby (și framework-ul său de mare succes, Ruby on Rails). Deci de ce să alegi PHP, mai degrabă decât una dintre aceste alte opțiuni? PHP combină o serie de avantaje, care sunt destul de greu de învins: e gratis (spre deosebire de ASP), este relativ ușor de învățat (spre deosebire de JSP), este construit în totalitate pentru web (spre deosebire de Perl), și este aproape omniprezent (spre deosebire de Ruby). Cele mai bun lucru în folosirea PHP este că este extrem de simplu pentru un începător, dar oferă multe caracteristici avansate pentru un programator profesionist.

Spre deosebire de un script scris în alte limbaje cum ar fi Perl sau C – în loc de a scrie un program cu o mulțime de comenzi pentru a produce un HTML, folosind PHP se poate scrie un script HTML ce include cod pentru a realiza ceva. Codul PHP este delimitat de coduri de start și de sfârșit ce permit intrarea și ieșirea din "modul PHP": <? php instructions … ?>.

Instrucțiunile PHP

Utilizarea de instrucțiuni condiționale

O instrucțiune condiționată executa un bloc de instrucțiuni numai atunci când anumite condiții sunt adevărate. Sunt două tipuri utile de instrucțiuni condiționale:

Instrucțiunea if: Stabilește o condiție și o testează. Dacă condiția este adevărată, un bloc de instrucțiuni este executat.

Formatul general al unei instrucțiuni if :

if ( condiție )

{

bloc de instrucțiuni;

}

elseif ( condiție )

{

bloc de instrucțiuni;

}

else

{

bloc de instrucțiuni;

}

Instrucțiunea switch: Stabilește o listă de condiții alternative. Testează pentru condiția adevărată și execută blocul apropiat de instrucții

Pentru cele mai multe situații, instrucțiunea condițională if funcționează cel mai bine. Totuși, uneori aveți o listă de condiții și doresc să execute diferite declarații pentru fiecare condiție. Instrucțiunea switch este creată pentru astfel de situații:

Formatul general al unei instrucțiuni switch:

switch ( $numelevariabilei )

{

case value :

bloc de instrucțiuni;

break;

case value :

bloc de instrucțiuni;

break;

default:

bloc de instrucțiuni;

break;

}

Utilizarea de instrucțiuni buclă (repetitive)

Sunt utilizate frecvent în scripturi pentru a configura un bloc de instrucțiuni care repeta. Bucla se poate repeta un anumit număr de ori. Sunt trei tipuri de instrucțiuni de acest tip:

Instrucțiunea repetitivă for: Stabilește un contor; execută un bloc de instrucțiuni până când contorul ajunge la un număr specificat.

Formatul general pentru o instrucțiune for:

for (valoareadestart;condițiadeiesire;increment)

{

bloc de instrucțiuni ;

}

Instrucțiunea repetitivă while: Stabilește o condiție; verifică condiția și dacă e adevărată, repetă un bloc de instrucțiuni până când condiția devine falsă.

Formatul general pentru instrucțiunea while:

while ( condiție )

{

bloc de instrucțiuni;

}

Instrucțiunea repetitivă do..while: Stabilește o condiție; execută un bloc de instrucțiuni; verifică condiția, și dacă este adevărată, repetă blocul de instrucțiuni până când condiția devină falsă.

Formatul general pentru instrucțiunea do..while:

do

{

bloc de instrucțiuni;

} while ( condiție );

Funcțiile în PHP

Utilizarea funcțiilor

O funcție este un set de instrucțiuni care îndeplinește o anumită funcție și opțional returnează o valoare. Aplicațiile deseori pot efectua de multe ori aceeași sarcină la diferite puncte în script sau în diferite script-uri. Funcțiile sunt concepute pentru a ne permite să reutilizam aceleași cod în locații diferite. O funcție este un grup de declarații PHP care efectuează o anumită sarcină. Putem folosi funcția de ori de câte ori avem nevoie pentru a efectua sarcina.

De exemplu, să presupunem că avem de afișat logo-ul companiei frecvent de-a lungul site-ul cu următoarele instrucțiuni:

echo " <p> < img src = ’Imagini / logo.jpg’ width = ’50’ height = '50'

hspace =’10’ align = ’ left’ / > < / p > " ;

echo " <p style=’font-size: x-large’> Compania mea < / p > " ;

echo " <p style=’font-style: italic’>calitatea produselor < / p > " ;

Decât să scriem acest cod în fiecare loc în scripturi în cazul în care dorim să afișam logo-ul, avem posibilitatea să cream o funcție care conține instrucțiunile și să o numim afiseaza_logo. Apoi, putem folosi doar funcția ori de câte ori dorim să se afișăm logo-ul. Utilizarea funcției se face astfel:

afiseaza_logo ( ) ;

Prin utilizarea acestei linii se reduce scrierea și este mai ușor de citit și de înțeles decât scrierea instrucțiunilor „echo” peste tot unde logo-ul este necesar de afișat.

Crearea funcțiilor

Putem crea o funcție prin punerea codului într-un bloc de funcție. Formatul general este:

function numelefuncției([parametru [, …]])

{

instrucțiunii;

return;

}

Funcțiile au multe avantaje:

Mai puțin scris de cod.

Funcțiile reduc erorile de sintaxă și alte erori de programare.

Ele reduc timpul de încărcare a fișierelor de program.

Ele, de asemenea, reduc timpul de execuție, pentru că fiecare funcție este compilată o singură dată, indiferent de cât de des este apelată.

Funcțiile accepta argumentele și, prin urmare, pot fi utilizate pentru cazuri general, cât și pentru cele specifice.

Putem crea o funcție oriunde în script, dar practica obișnuită este sa punem toate funcțiile la începutul sau la sfârșitul scriptului. Funcțiile pe care plănuim să le folosim în mai multe scripturi pot fi definite în fișier separat, fișier pe care îl putem include în orice script care are nevoie de funcțiile respective.

Șiruri în PHP

Un șir este o serie de caractere. Caracterele sunt literele, numerele și semne de punctuație. Atunci când un număr este folosit ca un caracter, acesta este doar un caracter stocat, la fel ca și o literă. Nu poate fi utilizat în aritmetică. De exemplu, un număr de telefon este stocat ca un șir de caractere, pentru că trebuie să fie doar stocat – nu adăugat sau multiplicat.

Atribuire de șiruri variabilelor

Când stocați un șir de caractere într-o variabilă, ii spuneți la PHP unde începe și se termină un șir cu ajutorul ghilimelelor duble sau simple. De exemplu, următoarele două instrucțiuni produc același rezultat:

$string = “Hello World!”;

$string = ‘Hello World!’;

Dacă vrem să stocăm un șir care conține ghilimele simple sau duble în interiorul șirului, trebuie să folosim de asemenea și backslash (\) în fața acestor ghilimele:

$string = ‘It is Sally\’s house’;

Șirurile puse între ghilimele simple și cele puse între ghilimele duble sunt tratate în mod diferit, după cum urmează:

șiruri puse între ghilimele simple cu un singur citat sunt stocate literalmente – cu excepția \’ care este stocat ca un apostrof.

în șiruri puse între ghilimele duble, variabilele și unele caractere speciale(\n o noua linie, \t inserează un tab) sunt evaluate înainte ca șirul să fie stocat.

Alăturarea de șiruri

Putem alătura șiruri de caractere, un proces numit concatenare, prin utilizarea unui punct (.). De exemplu, putem alătura șiruri de caractere cu următoarele instrucțiuni:

$string1 = ‘Hello’;

$string2 = ‘World!’;

$stringall = $string1.$string2;

echo $stringall afișează HelloWorld

Putem adăuga spațiu între cuvinte folosind următoarea instrucțiune de concatenare:

$stringall = $string1.” ”.$string2;

Putem să folosim .= pentru a adăuga caractere la un șir nou. De exemplu putem folosi următoarele instrucțiuni:

$stringall = “Hello”;

$stringall .= “ World!”;

Stocare șirurilor foarte lungi

PHP oferă o facilitate numită heredoc care este utilă pentru atribuirea de valori care conțin șiruri de caractere foarte lungi care se întind pe mai multe linii. heredoc permite să-i spui la PHP unde să înceapă și să termine citirea unui șir. O declarație heredoc are următorul format:

$varname = <<<ENDSTRING

text

ENDSTRING;

ENDSTRING poate include orice șir doriți să o utilizați. Includem textul pe care dorim stocat în variabila $varname prin tastarea ENDSTRING la începutul și la sfârșitul acesteia. Când PHP procesează heredoc, citește primul ENDSTRING și știe să înceapă citirea textului în $varname. Acesta continuă citirea textului în $varname până când întâlnește același ENDSTRING din nou. În acel moment, se termină șirul. Șirul creat de o instrucție heredoc evaluează variabile și caractere speciale în același mod ca și un șir pus între ghilimele duble.

Tablourilor în PHP

Tablourile sunt variabile complexe. Un tablou stochează un grup de valori în cadrul unui singur nume de variabilă, și este util pentru stocarea valorilor aferente. De exemplu, puteți stoca informații despre o floare (cum ar fi soi, culoare, și de cost) în un singur tablou numit $floareinfo. Informațiile într-un tablou pot fi manipulate, accesate și modificate cu ușurință. De exemplu, PHP are mai multe metode pentru sortare unui tablou.

Crearea de tablouri

Cel mai simplu mod de a crea un tablou este de a atribui o valoare unei variabile cu paranteze pătrate ([]) la sfârșitul numelui său. De exemplu, presupunând că nu aveți nici o referință la $orase mai devreme în script, următoarea instrucțiune creează un tablou numit $orase:

$orase[1] = “Timișoara”;

În acest moment, tabloul numit $orase a fost creat și are doar o singură valoarea: Timișoara Apoi, utilizam următoarele instrucțiuni:

$orase[2] = "București";

$orase[3] = "Craiova";

Acum tabloul $orase conține 3 valori: Timișoara, București și Craiova.

Un tablou poate fi văzut ca o listă de perechi chei/valori. Fiecare pereche cheie/valoare este numită element. Pentru a obține o valoare anume, trebuie să specificăm cheia între paranteze. Putem să folosim ca și cheie cuvinte. De exemplu următoarele instrucțiuni creează un tablou de capitale:

$captiale[’TM’] = ”Timișoara”;

$captiale[’B’] = ”București”;

$captiale[’DJ’] = ”Craiova”;

Putem utiliza comenzi rapide, mai degrabă decât să scriem instrucțiuni de atribuire separate, pentru fiecare număr:

$orase[] = ”Timișoara”;

$orase[] = ”București”;

$orase[] = ”Craiova”;

Când creați un tablou folosind această comandă rapidă, valorile sunt asignate în mod automat cheilor care sunt numere crescătoare, începând cu numărul 0.

O modalitate și mai bună comandă rapidă de creare de tablou este să folosim următoarea instrucțiune:

$orase = array(”Timișoara”, ”București”, ”Craiova);

Sau pentru varianta cu cuvinte ca și chei:

$capitale = array( ”TM” => ”Timișoara”, ”B” => ”București”, ”DJ” => ”Craiova);

Utilizarea funcțiilor specifice tablourilor

is_array

Tablourile și variabilele pot fi confundate deoarece au același format de nume. Nu putem avea o variabilă string numită $radu și un tablou numit tot $radu. Dacă ești nesigur și vrei ca codul tău să verifice ce este dacă variabila este un tablou poți folosi funcția is_array:

echo(is_array($radu)) ? ”Este un tablou” : ”Nu este un tablou”

Dacă la $radu nu ia fost încă asignată o valoare, mesajul ”Undefined variable” va fi generat.

count

Pentru a număra toate elementele ale unui tablou folosim următoarea comandă

count($radu)

sort

Sortarea este atât de comună că PHP oferă o funcție built-in pentru acest scop. În forma cea mai simplă, ar trebui să-l folosim așa:

sort($radu)

Spre deosebire de alte funcții, sortarea va acționa direct pe tabloul furnizat, mai degrabă decât să întoarcă o nouă serie de elemente sortate. Returnează TRUE în caz de succes și FALSE la eroare și sprijină, de asemenea câteva flag-uri. Principalele două metode pe care le-am putea folosi pentru a forța sortarea fie numeric, fie ca șiruri de caractere:

sort($radu, SORT_NUMERIC);

sort($radu, SORT_STRING);

Putem să sortăm și în ordine inversă folosind funcția rsort:

rsort($radu, SORT_NUMERIC);

rsort($radu, SORT_STRING);

shuffle

Dacă dorim să punem într-o ordine aleatorie elementele unui tablou folosim:

shuffle($radu)

Ca și sort, shuffle acționează direct asupra tabloului furnizat și returnează TRUE în caz de succes și FALSE în caz de eroare

explode

Este o funcție foarte utilă care ne dă voie să luăm dintr-un șir de caractere care conține diferite elemente separate printr-un caracter unic (sau un șir de caractere unice) și să adăugăm fiecare dintre aceste elemente într-un tablou. Un exemplu este să împărțim o propoziție într-un tablou care să conțină toate cuvintele.

$cuvinte = explode(’ ’, ”Acesta este o propoziție cu șapte cuvinte”);

extract

Uneori poate fi convenabil de a transforma perechile cheie/valoare de la un tablou în PHP în variabile. Un astfel de moment ar putea fi atunci când se procesează variabilele $_GET sau $_POST trimise la un script PHP de un form.

Când un form este submit-uit pe Web, serverul de web despachetează variabilele într-un tablou global pentru script PHP. Dacă variabilele au fost trimise prin metoda GET, ele vor fi introduse într-un tablou asociativ numit $_GET, iar în cazul în care acestea au fost trimise prin POST, ele vor fi introduse într-un tablou asociativ numit $_POST.

Ai putea, desigur, parcurge aceste tablouri asociative. Cu toate acestea, uneori vrei doar să stochezi valorile trimise în variabile pentru o utilizare ulterioară. În acest caz, putem să-l facem pe PHP să facă treaba în mod automat:

extract($_GET);

compact

S-ar putea fi, de asemenea, momente când vom dori să folosim compact, inversul de extract, pentru a crea un tablou din variabile și valorile lor.

Ex:

$fnume = Popescu

$snume = Ion

$contact = compact(’fnume’, ’snume’);

Obiecte și clase în PHP

Introducere în programarea orientată pe obiecte

Programarea orientată pe obiecte este o abordare de programare care folosește obiecte și clase. Programare orientată pe obiecte (POO) este un mod diferit te analizare a problemelor programării. Aplicația este creată prin modelarea problemei de programare.

Obiecte și clase

Elementele de bază ale programelor orientate pe obiecte sunt obiectele. Este mai ușor să înțelegi obiectele ca obiecte fizice. De exemplu, o mașina este un obiect. O mașină are proprietăți (numite atribute), cum ar fi culoarea, modelul, motor, și anvelope. O mașina are elemente care pot face diferite lucruri, cum ar fi să meargă înainte, se meargă înapoi, să se parcheze, să se dea peste cap, și să moară.

În general, obiectele sunt substantive. O persoană este un obiect. La fel sunt și animalele, casele, birourile, cutiile de gunoi, hainele, norii, planetele și butoane. Cu toate acestea, obiecte nu sunt doar obiecte fizice. Ca substantive, obiectele de multe ori sunt mai mult conceptual. De exemplu, un cont bancar nu este ceva ce se poate ține în mână, dar acesta poate fi considerat un obiect. La fel poate fi și un cont de calculator sau un credit ipotecar. Un fișier este de multe ori un obiect. La fel este și o bază de date, mesajele e-mail, adrese, cântece, Emisiuni TV, întâlniri, și datele pot fi toate obiecte. Obiecte în aplicațiile web ar putea fi cataloage, articolele din catalog, cărucioare de cumpărături, clienții, comenzi, sau liste de clienți.

O clasă este codul PHP care servește ca matriță, sau modelul, care este folosit pentru a crea un obiect. Clasa definește proprietățile, atributele obiectului. Ea definește, de asemenea, lucrurile pe care un obiect le poate face – responsabilitățile sale.

Proprietăți

Obiectele au proprietăți, de asemenea, numit uneori atribute. Proprietățile sunt stabilite în clasa ca variabile. Variabilele care stochează proprietăți pot avea valori implicite, li se pot da valori atunci când este creat obiectul, sau valorile pot fi adăugate sau modificată mai târziu.

Metode

Lucrurile pe care obiectele le pot face sunt uneori menționate ca responsabilități. Fiecare lucru pe care un obiect îl poate face – fiecare responsabilitate – este programat într-o clasa și este denumit metodă. In PHP, metode folosesc aceeași sintaxă ca și funcțiile. Deși codul arată ca și codul pentru o funcție, distincția este că metodele sunt în interiorul unei clase. Acesta nu poate fi chemată în mod independent de un obiect. PHP nu va permite acest lucru. Acest tip de funcție poate îndeplini sarcina numai atunci când e chemată cu un obiect. Când crem metode, trebuie să le dea nume, care sunt descriptive pentru ceea ce fac ele. Metodele sunt interfața între obiect și restul lumii. Obiectul are nevoie de metode pentru toate responsabilitățile. Obiectele ar trebui să interacționeze cu lumea exterioară numai prin metode lor.

Moștenirea

Obiectele ar trebui să conțină numai proprietățile și metodele de care au nevoie, nici mai mult, nici mai puțin. O modalitate de a realiza acest lucru este de a împărtăși proprietățile și metodele între clase prin utilizarea de moștenire. De exemplu, să presupunem că aveți două obiecte trandafir : unul cu trandafiri albi și unul cu trandafiri roșii . Am putea scrie două clase : o clasa trandafirrosu și o clasă trandafiralb. Cu toate acestea, o mulțime de informații este aceeași pentru ambele obiecte. Ambele sunt tufișuri, ambele sunt spinoase, și ambele înfloresc in iunie. Moștenirea ne permite să eliminam dublarea. Puteți scrie o clasa numita trandafir Puteți stoca comun informațiile din această clasă , cum ar fi $planta = arbust , $tulpina = spini, și $infloreste = din iunie. Apoi, puteți scrie subclase pentru cele două tipuri de trandafiri. Clasa trandafir este numită clasa master sau clasa părinte . trandafirrosu și trandafiralb sunt subclase , care sunt menționate ca clase copil.

Clasele de copii moștenesc toate proprietățile și metodele din clasa părinte. Dar ele pot avea, de asemenea, propriile lor proprietăți individuale, cum ar fi $culoare = alb pentru clasa trandafiralb și $culoare = rosu pentru clasa trandafiralb . O clasa copil poate conține o metodă cu același nume ca o metodă într-o clasă părinte. În acest caz, metoda din clasa copil are prioritate pentru un obiect copil. Putem specifica metoda din clasa părinte pentru un obiect copil, dacă vrem, dar dacă nu, metoda de clasă pentru copii este folosită. Unele limbaje permit o clasă copil să moștenească de la mai mult de o clasă părinte, numită moștenire multiplă. PHP nu permite moștenirea multiplă. O clasa poate moșteni de la o singură clasă părinte.

Definirea și instanțierea unei clase

Înainte de a putea utiliza un obiect, trebuie să definiți o clasă cu cuvântul cheie class. Definirea de clasă conține numele clasei (care este case-sensitive), proprietățile sale, și metodele sale.

class Utilizator

{

public $nume, $parolă;

function salveaza_utilizator()

{

echo "Codul de salvare a utilizatorului este scris aici";

}

}

Clasa are două proprietăți $nume și $parolă, clasa are o singură metodă slaveaza_utilizator().

Instanțierea unui obiect

Pentru a crea un obiect cu o anumită categorie, utilizați noul cuvânt cheie, cum ar fi aceasta: $obiect = noua clasa. Aici sunt un câteva moduri în care putem face acest lucru:

$utilizator= new Utilizator;

$temp = new Utilizator ("nume", "parola");

Pe prima linie, am atribuit pur și simplu un obiect la clasa Utilizator. În cea de a doua, am trecut parametri de apel.

O clasă poate cere sau interzice argumente; acesta poate permite, de asemenea, argumente, dar nu le poate cere.

Pentru a invoca metoda salveaza_utlizator folosim instrucțiunea:

$utilizator->salveaza_utilzator

MySQL Gestiunea bazelor de date

Introducere în MySQL

Multe site-uri dinamice necesită o bază de date în spate. Baza de date poate conține informații pe care paginile web le afișează utilizatorului, sau scopul bazei de date ar putea fi de stocare de informații furnizate de către utilizator. În unele aplicații, baza de date oferă atât informații disponibile dar și stochează informații.

MySQL, cea mai populară baza de date pentru a fi utilizată în site-uri web, a fost dezvoltată pentru a fi rapidă și mică, în special pentru site-uri web. MySQL este deosebit de popular pentru folosirea împreună cu site-urile care sunt scrise în PHP, și PHP și MySQL funcționează bine împreună.

Motivul pentru utilizarea PHP ca o interfață pentru MySQL este de a formata rezultatele de interogări SQL într-o formă vizibilă într-o pagină web. Atâta timp cât ne putem conecta la instalarea MySQL folosind numele de utilizator și parola, putem face, de asemenea, din PHP. Cu toate acestea, în loc să folosim linia de comandă MySQL pentru a rula instrucțiuni și vizualiza output-ul, vom crea șiruri de caractere de interogare care sunt transmise la MySQL. Când MySQL întoarce răspunsul său, el va veni ca o structură de date pe care PHP o poate recunoaște în loc output-ul formatat pe care îl vedem atunci când lucram în linia de comandă. Alte comenzi PHP poate prelua datele și le pot formata pentru pagina web.

Procesul de utilizare a MySQL cu PHP este:

1. Conectarea la MySQL.

2. Selectați baza de date pentru a o utiliza.

3. Construiește un șir de interogare.

4. Efectuați interogarea.

5. Preluare rezultatelor și de afișarea lor pe o pagină web.

6. Repetați pașii de la 3 la 5 până când toate datele dorite a fost preluate.

7. Deconectați de la MySQL.

Conectarea la serverul MySQL

Conectarea la serverul MySQL se face cu comanda următoare:

mysql_connect(nume_hostname, nume_utilizator, parola)

nume_hostaname – numele hostname-ului pe care ruleaza serviciul MySQL;

nume_utlizator – este numele utlizatorului MySQL

parola – este parola MySQL asociată utilizatorului

Un exemplu de conectare la serverul MySQL:

$db_server = mysql_connect(”localhost”,”root”,”bazadedate”);

if (!$db_server) die("Nu s-a putut conecta la serverul MySQL: " . mysql_error());

Acest exemplu rulează funcția mysql_connect. Dacă rularea a fost cu succes returnează un identificator la server; dacă nu returnează FALSE. A doua instrucțiune folosește instrucțiunea if cu funcția die, care face exact a ce sună și iese din PHP cu un mesaj de eroare dacă $db_server nu este TRUE.

Mesajul die explică că nu a fost posibilă conectarea la baza de date MySQL, și – ca să ajute să vedem ce s-a întâmplat – include un apel al funcției msql_error. Această funcție returnează textul eroare de la ultima funcție MySQL apelată.

Selectarea unei baze de date

După ce ne-am conectat cu succes la MySQL, suntem gata să selectăm o baza de date pe care dorim să o folosim. Selectarea bazei de date se face cu funcția de mai jos:

mysql_select_db(bazadedate)

bazadedate – este numele bazei de date la care dorim să obținem acces

Exemplu de mai jos de selectare a unei baze de date

mysql_select_db(”utilizatori”)

or die(”Nu s-a putut conecta la serverul MySQL” .mysql_error());

Comanda de selectare a bazei de date este mysql_select_db. Trece numele bazei de date pe care doriți și serverul la care vă conectați. Ca și în exemplul anterior, o instrucțiune die a fost inclusă pentru a furniza un mesaj de eroare și explicații. mysql_select_db, întoarce TRUE dacă se poate obține accesul la baza de date și FALSE în caz contrar.

Executarea interogărilor INSERT, UPDATE și DELETE

Adăugarea de informații la o bază de date – INSERT

Fiecare bază de date are nevoie de date. De exemplu, am putea dori să adăugăm date la baze de date, astfel încât utilizatorii să vadă această informație. Sau este posibil să dorim să cream o bază de date goală pentru ca utilizatorii să pună date în ea. În oricare dintre aceste scenarii noi date sunt adăugate în baza de date.

Dacă aveți o cantitate mică de date, puteți adăuga câte un rând o dată în tabel. Scripturile PHP de multe ori au nevoie pentru a adăuga câte un rând o dată. De exemplu, atunci când un script PHP acceptă date de la un client într-un form, de care are nevoie, de obicei, are nevoie să introducă informațiile despre client în baza de date într-un rând nou.

Pentru a insera un rând în baza de date folosim interogarea INSERT. Această instrucțiune ii spune la MySQL în care tabel să adauge rândul și care sunt valorile pentru câmpurile din rând. Forma generală:

INSERT INTO numeletabelului (numelecoaloanei1, numelecoloanei2,…,numelecoloaneiN) VALUES (valoare1, valoare2,…,valoare3)

Valorile trebuie înșiruite în aceeași ordine in care sunt numele coloanelor. Prima valoare din lista de valori este inserată în coloana care este numită prima din lista de coloane; a doua valoare din lista de valori este inserată în coloana care este numită a doua, și așa mai departe

O listă de coloane completă sau parțială este permisă. Nu trebuie să înșiruite toate coloanele. Colonelelor are nu sunt înșiruite le sunt atribuite o valoarea implicită sau lăsate goale daca o valoare implicită nu este definită.

O listă de coloane nu este necesară. Dacă asignăm valori pentru toate coloanele, nu este nevoie să înșiruim coloanele. Dacă nici o coloană nu este înșiruită MySQL caută după valori pentru toate coloanele, în ordinea în care apar în tabel.

Lisa de coloane și lista de valori trebuie să fie la fel. Trebuie sa punem o valoare pentru fiecare coloană pe care o înșiruim sau vom primi un mesaj de eroare ca acesta: Column count doesn’t match value count.

Următoarea interogare INSERT adaugă un rând pentru tabelul Client:

INSERT INTO Client (prenume, strada, oras, judet, codpostal, email, telefon)

VALUES (”Radu”, ”Atomului nr. 12”, ”Timisoara”, ”TM”, ”300520”, ”[anonimizat]”, ”0740221182”)

Actualizarea informațiilor într-o bază de date – UPDATE

Modificarea informațiilor într-un rând existent este actualizarea informațiilor. De exemplu, s-ar putea să trebuiască să schimbam adresa unui client, deoarece el s-a mutat, sau s-ar putea să trebuiască să adăugăm un număr de fax pe care un client l-a lăsat necompletat când a completat inițial informație lui.

Interogarea UPDATE este simplă:

UPDATE numeletabelului SET coloanaX=valoareaX, coloanaY=valoareaY

WHERE condiție

În partea de SET, înșiruim colanele care vor fi actualizate și noi valori care vor fi inserate. Scrie toate coloanele pe care vrei sa le modifici într-o singură interogare. Fără WHERE, valorile coloanelor vor fi modificate în toate rândurile. Dar cu WHERE, poți specifica care rânduri să fie actualizate. De exemplu, pentru a actualiza adresa în tabelul Client, folosim următoarea interogare:

UPDATE Client SET strada =” Nicolae Iliesu nr. 13”

WHERE prenumele = ”Radu”

Ștergerea informațiilor dintr-o bază de date – DELETE

Se zice să păstrăm informația în baza de date prin ștergerea de informație învechită. Cu toate acestea, să fim foarte atenți atunci când ștergem informații. După ce am șters informațiile, acestea au dispărut pentru totdeauna. Nu poate fi recuperate. Le poți avea din nou doar dacă le introduci din nou.

Putem elimina un rând sau o coloană dintr-un tabel, sau putem scoate întregul tabel sau baza de date și începem de la început.

Putem elimina un rând dintr-un tabel cu interogarea DELETE:

DELETE FROM numeletabelului WHERE condiție

Trebuie să fim foarte atenți când folosim DELETE. Daca utilizăm DELETE fără WHERE, vom șterge toate informațiile din tabel. Această informație nu mai poate fi recuperată.

Prelucrarea rezultatelor interogărilor SELECT

Construirea și executarea unei interogări

Trimiterea de interogare pentru MySQL din PHP se face folosind funcția mysql_query. Mai jos se arată cum să folosim această funcție:

$query = ”SELECT * FROM Client”;

$result = mysql_query($query);

În primul rând ,variabila $query setează ca interogarea să fie făcută . În acest caz, se cere pentru a vedea toate rândurile din tabelul Client. Spre deosebire de atunci când se utilizează linia de comandă MySQL , nu este necesară punct și virgulă sfârșitul interogări . Acest lucru se datorează faptului că funcția mysql_query este utilizată pentru a emite o interogare completă, și nu pot fi folosită pentru a interoga prin trimiterea multiplă, ci câte una odată. Prin urmare, MySQL știe că interogarea este completă și nu se uită pentru punct și virgulă.

Această funcție returnează un rezultat pe care îl punem în variabila $result. Folosind MySQL la linia de comandă , s-ar putea crede că conținutul $rezultat va fi la fel ca și rezultatul întors de la o interogare de linie de comandă , cu linii orizontale și verticale, și așa mai departe. Totuși, acesta nu este cazul cu rezultatul returnat la PHP. In schimb, la succes, $rezultat va conține o resursă care poate fi folosită pentru a extrage rezultatele interogării. După eșec, $rezultat este egal cu FALSE.

Preluarea un rezultat

Odată ce avem o resursă returnată de funcția mysql_query, o putem folosi pentru a prelua datele pe care le dorim. Cel mai simplu mod de a face acest lucru este să-i aducă celulele pe care le dorim, pe rând, utilizând funcția mysql_result.

Exemplul de mai jos combină și extinde exemplele anterioare într-un program prin care se pot prelua rezultatele returnate:

<?php // query.php

$db_server = mysql_connect($db_hostname, $db_username, $db_password);

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error());

mysql_select_db($db_database)

or die("Unable to select database: " . mysql_error());

$query = "SELECT * FROM classics";

$result = mysql_query($query);

if (!$result) die ("Database access failed: " . mysql_error());

$rows = mysql_num_rows($result);

for ($j = 0 ; $j < $rows ; ++$j)

{

echo 'Author: ' . mysql_result($result,$j,'author') . '<br />';

echo 'Title: ' . mysql_result($result,$j,'title') . '<br />';

echo 'Category: ' . mysql_result($result,$j,'category') . '<br />';

echo 'Year: ' . mysql_result($result,$j,'year') . '<br />';

echo 'ISBN: ' . mysql_result($result,$j,'isbn') . '<br /><br />';

}

?>

Scăparea automată de șiruri de caractere speciale

Foarte des se întâlnesc situații când ghilimelele simple(’), ghilimele duble(”) și backslash-urile(\) provoacă probleme interogărilor bazelor de date. De exemplu scrierea unei informații pe care un vizitator a introdus-o într-un formular HTML și trebuie introdus în baza de date MySQL, cum ar fi mysql_query(”UPDATE Client SET clientblog = ’radu’s blog’).În această situație PHP va reporta o eroare, deoarece MySQL nu permite înglobarea unor ghilimele în interiorul valorii unui șir.

PHP rezolvă aceste probleme prin conversia automată a acestor șiruri de caractere cu funcții speciale:

Funcția addslashes este utilizată să adauge backslash-uri (\) datelor introduse în formularele HTML. Această funcție primește ca parametru șirul de caractere inițial și returnează același șir de caractere având o formă care se poate utiliza cu MySQL (și alte limbaje folosite).

Funcția addslashes () are o funcție complementară stripslashes (). Funcția stripslashes este utilizată pentru a elimina backslash-uri dintr-un string. O utilizare pentru acest funcție, este de a afișa date în care a fost aplicat addslashes

În php.ini este o opțiune "magic_quotes_gpc", pe care o putem seta pentru a permite funcționalitate "ghilimele magice". Dacă este activat, PHP va apela în mod automat addslashes () pe fiecare bucată de date trimise de la utilizatori, care poate fi, uneori, un lucru bun. Cu toate acestea, în realitate, este de multe ori enervant – în special atunci când aveți de gând să folosiți variabilele în alte moduri.

CAPITOLUL 3 – APLICAȚIE

Cerințe și specificații

Aplicația își propune următoarele funcționalități:

Afișare informații legate de traduceri pentru diferite combinații de limbi străine precum și pentru limbaje tehnice.

Posibilitatea atragerii diverșilor traducători – freelanceri din întreaga lume astfel ara avea de câștigat atât platforma (Optimum Translations), traducătorii, cât și clienții având astfel parte de servicii de cea mai bună calitate la tarife competitive

Adăugarea unor conturi pentru traducătorii noi astfel cunoștințele lor legate de traduceri sunt adăugate la cunoștințele platformei

Orice client poate urca pe site documentele pe care și le dorește traduse; acesta primește un tarif estimativ în funcție de combinația de limbi și de gradul de dificultate al domeniului din care face parte documentul.

După acceptarea și plata (prin platforma securizată de plată) acest document devine vizibil pentru traducătorii care au cunoștințe necesare traducerii documentului în cauză

Orice client are o interfață în care ii sunt afișate și disponibile următoarele informații:

Documente traduse prin intermediul acestei platforme în trecut

Documente care așteaptă să fie asignate unui traducător

Documente în curs de traducere

În momentul în care documentul este asignat unui traducător clientul primește un mail de notificare; de asemenea clientul primește notificare și în momentul în care un document de a lui tocmai a fost tradus

Orice traducător are o interfață în care poate:

Vizualiza documentele care trebuie traduse și nu sunt asignate încă unui traducător

Vizualiza documentele asignate pentru traducere

Posibilitatea de a încărca pe site un document aflat în lucru care tocmai a fost tradus; moment în care clientul își primește notificarea

Interfața administratorului presupune

Vizualizarea tuturor clienților

Vizualizarea tuturor traducătorilor

Ștergerea oricărui cont de client/traducător în caz de comportament impropriu

Vizualizarea oricărui document neasignat, asignat precum și tradus

Structura site-ului

  Optimum translations este un website – unealta. Această unealta foarte pe scurt trebuie să permită pe de o parte utilizatorilor posibilitatea de a-și crea un cont în care să poată uploada documente pentru a fi traduse, și în același timp, utilizatorilor de tip traducător, posibilitatea de a vedea care sunt documentele care necesita traducere, posibilitatea de a-și le asigna. apoi în momentul în care uploadează pe site documentul tradus, trebuie sa apară la clienți aceste documente gata traduse. (un link către acestea).

Unealta are 2 părți principale:

Interfața grafica (ceea ce vede clientul)

Logica paginii  (business logic )

Interfața grafica a paginii. 

Pagina principala a acestui site este index.php, după cum se poate observa și în extensia acestui fișier, formatul este php. 

Elementele grafice au fost așezate cu ajutorul elementelor css care direcționează elementele html pentru așezarea în pagină. Așezând etichetele <div> într-un anumit fel și dimensionarea lor prin stil css ne ajută pentru a obține design-ul dorit.

Majoritatea codului css se afla într-un fișier extern care este inclus în fiecare pagină unde este nevoie de acesta cu ajutorul etichetei: 

<link rel="stylesheet" href="style/style.css" type="text/css" />.

Astfel structura paginii principale este:

include('header.php') 

include('main_content.php')

include('side_content.php')

include ("content/bottom_index.html");

include('footer.php')

Acestea 5 sunt secțiunile paginii. 

În fiecare din aceste secțiuni am ales să includem fișiere externe din simplul motiv pentru a nu avea cod redundant pe alocuri și pentru a păstra fiecare pagina aerisita, pentru a ușura modificări în cod. 

Secțiunea 1 – Hederul Paginii

Figura 3.1- Header Pagina

În header se află inclus un fișier extern(header.php).Din punct de vedere vizual, header-ul conține secțiunea de autentificare(linkurile Home, Sign in, Create account) precum și meniul.          

      Pe lângă acest conținut vizual, în secțiunea header se mai află și funcții care verifică dacă un utilizator tocmai s-a înregistrat sau dacă un nou cont a fost creat. (acest lucru este decis în funcție de existența eventualelor variabile trimise parametru dinspre formularele de pe site). 

Secțiunea 2 – Main Content

      Pe fiecare pagina exista o componentă care conține informația principală a paginii respective. Pentru o mai bună așezare și citire a codului deja existent, am decis introducerea pe fiecare pagină a conținutului din fișiere externe. Acest lucru este făcut în limbajul php prin comanda include('cale/nume_fișier.extensie');

Figura 3.2- Main Content

Numele containerului în care este pus conținutul principal are numele "main" 

    <div id="main">

          <?php 

include ("content/index.html");

?>       

</div><!–main–> 

Caracteristicile acestui container le găsim bineînțeles în fișierul style.css iar o parte din acest cod este:

#main{

float:left;

width:600px;

padding:0 15px 10px 10px;

}

Prin scrierea caracterului # în fața unui nume, codul css înțelege astfel că avem de-a face cu un id unic. (Este un singur element cu numele main folosit la un moment dat în pagină).

    Dacă de exemplu aveam de pus mai multe elemente de același tip și doream să scriem caracteristicile css o singură dată, în fișierul style aveam definit .main{…}   ceea ce ar fi reprezentat clasa de obiecte cu numele main.

    Apoi în fiecare etichetă de html am fi scris de exemplu <div class="main"> ..

Secțiunea 3 – Side Content

Această secțiune este inclusă pe aproape fiecare pagină. Acest lucru este făcut astfel:

include ("content/side_index.html");

Fișierul side_index.html conținând desigur informațiile care ajung să fie prezente în caseta de noutăți. Momentan acest lucru este făcut în mod static, pe viitor se dorește ca informațiile să fie citite din baza de date, probabil o tabela numita noutăți care să conțină câte o înregistrare – text cu fiecare noutate și un câmp "data" după care să poată fi sortate cele mai noi înregistrări ca să fie afișate în casetă. 

    În acel moment vom fi nevoiți să modificăm extensia fișierului side_index.html în side_index.php pentru a putea să citim informațiile din tabela dorită. 

Figura 3.3- Side Content

Secțiunea 4 – Informațiile din partea de jos a index-ului

Figura 3.4- Index jos

Pe prima pagină mai găsim 4 casete de informare care conțin text și un link; Pagina care conține aceste componente este inclusa prin  include ("content/bottom_index.html"); În momentul in care unul din linkuri este accesate de către utilizator apar informații adiționale legate despre acel subiect cu ajutorul codului jQuerry care este inclus în pagină cu ajutorul etichetei: <script type="text/javascript" src="js/home_scripts.js"></script>

Secțiunea 5 – Footerul Paginii

Figura 3.5- Footerul Paginii

    În această secțiune se află informații adiționale legate de site, modalități de contact care trebuie adăugate pe fiecare pagină. 

Aceste informații au fost adăugate desigur cu ajutorul comenzii: include('footer.php').

Structura bazei de date

Figura 3.6- Structura bazei de date

    În prezent acestea 4 sunt tabelele din baza de date. Tabela de bază în orice bază de date este desigur tabela de utilizatori. Aceasta este numită users.

Tabele folosite: 

users – conține informațiile comune atât pentru traducători cât și pentru clienți.

clients – conține restul informațiilor legate strict despre clienți

traducator_basic – conține informațiile legate de traducător care nu sunt comune cu informațiile necesare pentru clienți și sunt necesare pentru o minima funcționare.

traducator – conține informații detaliate legate de fiecare traducător în parte. (aceste informații nu sunt momentan obligatorii dar vor fi pe viitor)

documents – această tabelă conține toate documentele care sunt urcate de clienți, detalii despre aceasta tabela foarte importantă sunt afișate într-un capitol separat.

Cheia principală în tabela "users"  este id_users, acest câmp este desigur unic și reține pentru fiecare utilizator nou înregistrat(fie el client, traducător sau admin) un indice. 

Tipuri de utilizatori 

 – administrator

 – traducător 

 – client

Tipul de utilizator: administrator

    Vom crea manual un cont de administrator. Modul prin care acest cont se va diferenția de restul este câmpul type. Acesta va conține textul "admin".

    Ca direcție de dezvoltare, în momentul în care administratorul se va loga va exista un link către panoul de administrare.  

    Administratorul va putea din panoul de administrare să vizualizeze conturile tuturor clienților, conturile tuturor traducătorilor și să șteargă anumite conturi în caz de comportament necorespunzător 

    De asemenea, din panoul de administrare, e nevoie sa fie vizibile toate documentele, atât cele urcate de client cât și cele urcate de către traducători, astfel încât administratorul să poată verifica la nevoie conținutul acestora. 

 Tipul de utilizator: traducător

    La crearea unui cont de traducător se vor insera în baza de date toate câmpurile necesare acestui cont, iar câmpul "type" va fi automat completat cu valoarea "translator"

    În momentul în care este creat un traducător este introdusă o înregistrare și în tabela traducator_basic. Aceasta conține un câmp de legătură id_traducator prin care se face legătura între aceasta tabela și tabela de utilizatori. 

    Tabela traducator_basic conține și un câmp foarte important și anume "approved". Nu orice persoana care își face cont de traductor poate sa-și și asigneze documente de tradus fără o verificare în prealabil a contului acestuia. Astfel, doar in momentul în care câmpul approved are valoarea 1, traducătorul respectiv are anumite privilegii pe site. Administratorul este cel care decide care traducători primesc aceste privilegii după o vizualizare a cv-ului acestora și bineînțeles, un proces de verificare a cunoștințelor. Această funcționalitate va deveni disponibilă în momentul creării panoului de administrare.

Pe lângă câmpurile minime de email, parola, nume, prenume și telefon, orice traducător va putea să își completeze un profil personal care să conțină o multitudine de alte câmpuri relevante pentru acesta. 

Informațiile detaliate ale traducătorului vor fi salvate în tabela "traducator". Aceasta are un câmp id_traducator, care reprezintă Cheia Straina (ForeignKey) cu care sunt legate înregistrările acestei tabele de tabela de utilizatori. 

În momentul în care dorim sa aflam informații detaliate pentru traducătorul cu id-ul 100, vom parsa toate liniile din tabela de traducător și vom lua în calcul doar liniile scrise pentru id_traducator=100. 

Informațiile în această tabelă sunt momentan opționale și pot la fel de bine sa nu fie completate fără a influența funcționarea platformei în vreun fel. 

Tipul de utilizator: client

La crearea unui cont de tip client vor fi introduse în tabela users toate informațiile comune cu ale clientului de traducător, informațiile care nu sunt comune cu cele ale traducătorilor sunt introduse în tabela "clients". Acest lucru nu era neapărat necesar în aceasta fază a dezvoltării platformei, dar am decis că o separare a acestor informații poate fi extrem de folositoare pe viitor, în cazul adăugării altor câmpuri de informații în tabele.

Tabela documents

Această tabelă este instrumentul cel mai important al bazei de date. În ea sunt scrise înregistrări de fiecare dată când un client decide să urce pe site un document care necesită traducere.

Fiecare document este legat de către un client prin câmpul id_client. Astfel în momentul în care parcurgem tabela de documente știm care document a fost urcat de către care client.

În momentul urcării unui document și adăugării unei înregistrări în această tabelă, câmpul id_translator este gol. Acesta va fi scris de-abia în momentul în care un traducător își asignează acest document. Astfel din acel moment știm care document a fost asignat unui traducător prin intermediul câmpului id_translator.

Această tabelă mai conține câmpuri prin care se specifică calea către fișierul care necesită traducere precum și calea către fișierul final în momentul în care acesta a fost tradus de către traducător.

Fiecare înregistrare mai conține câmpuri în care se specifica limba de origine în care a fost scris documentul precum și limba în care este necesara traducerea..

Câmpurile start_date și urgent sunt gândite în perspectiva astfel încât documentele care au o data de înregistrare mai veche pe site să aibă o prioritate mai mare de traducere precum și documentele care au câmpul urgent setat pe 1.  

De asemenea câmpurile in_revision sau finished sunt cele care determină dacă documentul a fost tradus și are nevoie de o revizie, o a doua părere, respectiv câmpul finished este cel care atunci când este setat pe 1, platforma știe că documentul a fost tradus cu succes.

Logica din spatele interfeței grafice

Clienții trebuie să aibă posibilitatea de a urca pe site(server) orice document pe care îl doresc tradus;

De asemenea în momentul în care traducătorul urcă pe site un document tradus, acesta trebuie să fie disponibil pentru client așa încât să poată să-l downloadeze. 

Astfel, în componența care urcă fișiere pe server din partea clienților am decis să cream o structura astfel:

Directorul documents, în acest director se afla directoarele clients & translators. 

Fiecare client care urcă cel puțin un fișier pe server are un director propriu numele acestuia fiind compus din "nume_client"+id_unic_client. În interiorul acestui director se află toate fișierele pe care le-a urcat clientul pentru traducere.

La fel, fiecare traducător care a urcat cel puțin un fișier tradus are un director; numele acestui director fiind compus din "nume_traducator"+id_unic_traducator.     

Ce face site-ul în momentul în care un client urcă un fișier

Trebuie să verifice în structura site-ului dacă acest client are deja sau nu încă un director propriu.

Dacă nu există acest director, atunci trebuie creat. 

După ce este creat acel director, este urcat și fișierul la acea locație. 

Este adăugată o linie în baza de date în tabela documents. Aceasta linie conține id-ul clientului care a urcat acel fișier, un link către server prin care se poate accesa fișierul;

În momentul în care vreun traducător își asignează acest fișier, în aceasta linie din documents este modificat un câmp și anume id_translator. Acea linie va conține din acel moment id-ul traducătorului care și-a asignat documentul.

În momentul în care un traducător termină de tradus un document, intra pe site; acolo în partea dedicată traducătorilor poate să vadă toate documentele pe care le are în munca in acel moment. El poate sa urce pe site acolo documentul tradus. În momentul în care a uploadat acel document în tabela "documente" este modificat câmpul "finalizat" iar calea către acest fișier este introdusă în tabela de documente -> Din acel moment fișierul rămâne pe server, iar clientul poate sa-l acceseze. 

În funcție de acest câmp "finalizat" în interfața grafica a traducătorilor sunt afișate categoriile:

Documentele asignate care așteaptă traducerea

Documentele care nu sunt asignate încă unor traducători

Documentele traduse în trecut. 

La fel, pentru clienți categoriile sunt:

Adăugare document pentru traducere

Documente care așteaptă asignarea

Documente care așteaptă traducerea

Documente traduse în trecut.

Prezentarea site-ului

Pagina web este destinată atât persoanelor care au nevoie de documente traduse cât și celor care doresc sa obțină un venit din traduceri având posibilitatea să lucreze de acasă. Astfel, am numit persoanele care au nevoie de traduceri clienți și persoanele care traduc, traducători.

Pagina principală

Figura 3.7- Pagina Principală

În momentul în care un utilizator se află pe pagina principală îi sunt afișate următoarele lucruri:

Logo-ul platformei împreună cu un text de descriere în secțiunea de main content a paginii.

O casetă de noutăți legate de platformă în secțiunea de side content a paginii ex: Dacă un traducător nou a fost înregistrat și știe nativ o limbă care este mai rară cum ar fi chineza, japoneza sau chiar o limbă pe care ceilalți traducători nu o știu va fi afișat în această casetă.

În parte de jos ne sunt prezentate pe scurt filozofia platformei, o scurtă descriere a: misiunii, valorilor, responsabilitatea și viziunea platformei

Link-urile de Read more ale acestor casete sunt controlate cu jQuery astfel încât în momentul în care utilizatorul dă click pe textul respectiv devine vizibil ca și în poza de mai jos:

Figura 3.8- Read more

Codul jQuery din spate care este responsabil pentru aceste acțiuni este:

$(document).ready(

function(){

$("#vision_hidden").hide();

$("#mission_hidden").hide();

$("#values_hidden").hide();

$("#corporate_hidden").hide();

$(".vision_href").click(

function(){

$("#values_hidden").fadeOut();

$("#corporate_hidden").fadeOut();

$("#mission_hidden").fadeOut();

$("#vision_hidden").fadeIn(1500);

}

);

$(".values_href").click(

function(){

$("#vision_hidden").fadeOut();

$("#corporate_hidden").fadeOut();

$("#mission_hidden").fadeOut();

$("#values_hidden").fadeIn(1500);

}

);

$(".corporate_href").click(

function(){

$("#values_hidden").fadeOut();

$("#vision_hidden").fadeOut();

$("#mission_hidden").fadeOut();

$("#corporate_hidden").fadeIn(1500);

}

);

$(".mission_href").click(

function(){

$("#values_hidden").fadeOut();

$("#vision_hidden").fadeOut();

$("#corporate_hidden").fadeOut();

$("#mission_hidden").fadeIn(1500);

}

);

}

);

Pagina Solutions

Figura 3.9- Pagina Solutions

Când utilizatorul selectează butonul Solutions din meniu a ii este prezentată o descriere a serviciilor actuale și viitoare ale platformei Optimum Translations în secțiunea de main content a paginii. Se poate observa că pe lângă facilitatea de traducere de documente sunt prezentate și alte facilități care vor fi disponibile în viitor: revizii de documente, copyediting etc. Caseta de noutăți este vizibilă în continuare și în acesta pagină în secțiunea de side content.

Pagina Processes

Figura 3.10- Pagina Processes

Utilizatorul poate de asemenea să afle detalii despre procesele platformei selectând butonul de Processes din meniul paginii. La fel ca și pagina Solutions această pagină conține o scurtă descriere al proceselor platformei.

În pagina avem o descriere a procesului prin care un document este tradus și verificat. De asemenea avem informații despre procesul de recrutare al translatorilor. Pagina de noutăți este vizibilă de asemenea și în această pagină tot in secțiunea de side content.

Pagina Selectare Creare Cont

Figura 3.11- Pagina Selectare Creare Cont

Pagina Selectare Creare Cont este pagina de unde îți poți alege ce fel de cont vrei să-ți creezi unul de traducător sau un cont de client. Utilizatorul este direcționat către această pagină în 3 moduri diferite:

Selectând Create account din meniul din stânga sus din secțiunea de autentificare

Din Pagina Translator făcând click cu mouse-ul pe linkul Click to register as Translator

Din Pagina Client făcând click cu mouse-ul pe link here.

Din această pagină utilizatorul are 2 opțiuni de creare de cont disponibile prin cele 2 butoane CUSTOMER și TRANSLATOR. Prin selectarea acestor butoane ajungem în pagina Creare Cont Client respectiv Creare Cont Translator. De fapt acest lucru se întâmplă prin efecte de apariție și dispariție a formularelor de creare de cont pentru client și translator care sunt controlate cu ajutorul jQuery.

Codul din spate care face acest lucru posibil:

$(document).ready(

function(){

$("#translator").hide();

$("#customer").hide();

$("#customer_button").click(function(){

$("#customer").fadeIn(2000);

$("#translator").hide();

});

$("#translator_button").click(function(){

$("#translator").fadeIn(2000);

$("#customer").hide();

});});

Pagina Creare Cont Client

Figura 3.12- Pagina Creare Cont Client

Pagina Creare Cont Client este folosită de utilizator pentru crearea unui nou cont de client. Pentru aceasta pagina pune la dispoziția utilizatorului un formular pe care acesta trebuie să-l completeze cu următoarele date: nume, prenume, e-mail, parola, companie, țară și număr de telefon.

În momentul când utilizatorul a dat submit fiecare șir de caractere din fiecare câmp este preluat într-o variabilă și verificate.

Următorii pași se fac pentru introducere de cont nou de client

Dacă câmpurile email și parolă nu sunt completate se afișează un mesaj corespunzător în caz că acestea nu au fost introduse.

Dacă aceste 2 câmpuri au fost adăugate se verifică dacă e-mail-ul mai este atașat unui alt cont de client iar dacă da se afișează mesajul că există deja un cont de client cu acest email.

Dacă emailul nu mai există atunci se creează un nou cont și clientul este logat automat.

În caz că nu s-a putut crea contul un mesaj de eroare este afișat

Pașii descriși mai sus se fac astfel:

Fiecare șir de caracter introdus în câmp este preluat într-o variabilă php. Se verifică dacă variabila în care este păstrat e-mailul și variabila în care este păstrată parola sunt diferite de spațiu și dacă rezultatul este negativ atunci se afișează ” The email and password fields are mandatory.”

Dacă rezultatul este negativ atunci se face o interogare pe tabelul USERS al bazei de date cu ajutorul instrucțiunii SELECT folosind variabila în care este păstrat e-mail-ul care returnează numărul de rânduri găsite cu e-mail-ul introdus. Rezultatul acestei interogări este păstrat într-o variabilă. Se verifică dacă numărul de rânduri ale variabilei este egal cu 0 și dacă da atunci cu ajutorul instrucțiunii INSERT INTO se inserează în tabelul USERS tipul contului(client), numele, prenumele, e-mail-ul, parola și numărul de telefon și în tabelul CLIENTS compania și țara. Câmpurile clientului adăugate în tabelul USERS sunt cele comune cu cele ale traducătorului, iar celelalte sunt specifice clientului care deocamdată nu sunt folosite decât pentru afișare de informații dar pe parcursul dezvoltării aplicației aceste câmpuri vor fi folosite.

Se preia statusul adăugării într-o variabilă. Dacă adăugarea de valori în aceste tabele din anumite motive nu se poate realiza variabila este false iar dacă da atunci este true. În caz ca ea este false după adăugarea în tabelul USERS atunci înseamnă că din diferite motive adăugarea de valori în acest tabel nu a fost posibilă și un mesaj este afișat ” Problems when adding in Users”. Dacă a trecut de adăugarea în tabelul USERS cu valoarea true dar este false după adăugarea în tabelul CLIENTS atunci înseamnă că adăugarea de valori în acest tabel nu a fost posibilă și un mesaj este afișat ” Problems when adding in Clients”.

Dacă valoarea este true după cele 2 adăugări înseamnă că contul a fost creat, toate datele clientului sunt salvate în tabele. La fel o variabilă cu statusul acestei întregi operații de creare de cont este salvat într-o variabilă. Dacă variabila este true atunci tipul contului(client), prenumele și id-ul userului sunt salvate în variabile globale de tip php pentru a le folosi mesajul de logare și se face logarea automată a clientului pe care tocmai l-am adăugat.

Dacă valoarea variabilei cu statusul întregii operații de adăugare este false se afișează un mesaj de eroare cu motivul pentru care operația nu s-a realizat.

Crearea cu succes a unui cont de client înseamnă că în baza de date în tabelele USERS și CLIETS au fost inserate cu succes datele acestuia. În momentul acesta el poate să urce documente pentru a fi traduse din Pagina Client a site-ului.

Pagina Creare Cont Translator

Figura 3.13- Pagina Creare Cont Translator

Pagina Creare Cont Translator este folosită de utilizator pentru crearea unui nou cont de translator. Pentru aceasta pagina pune la dispoziția utilizatorului un formular pe care acesta trebuie să-l completeze cu următoarele date: nume, prenume, e-mail, parola, companie, țară și număr de telefon pentru moment, mai târziu vor fi alte câmpuri cum ar fi: experiență(profesor sau student), limba maternă, limbi cunoscute, ariile de domeniu cunoscute etc.

În momentul când utilizatorul a dat submit fiecare șir de caractere din fiecare câmp este preluat într-o variabilă și aceste variabile sunt verificate.

Următorii pași se fac pentru introducere de cont nou de translator:

Dacă câmpurile email și parolă nu sunt completate se afișează un mesaj corespunzător în caz că acestea nu au fost introduse.

Dacă aceste 2 câmpuri au fost adăugate se verifică dacă e-mail-ul mai este atașat unui alt cont de traducător iar dacă da se afișează mesajul că există deja un cont de traducător cu acest email.

Dacă emailul nu mai există atunci se creează un nou cont și traducătorul este logat automat.

În caz că nu s-a putut crea contul un mesaj de eroare este afișat

Pașii descriși mai sus se fac astfel:

Fiecare șir de caracter introdus în câmp este preluat într-o variabilă php. Se verifică dacă variabila în care este păstrat e-mailul și variabila în care este păstrată parola sunt diferite de spațiu gol și dacă rezultatul este negativ atunci se afișează ” The email and password fields are mandatory.”

Dacă rezultatul este negativ atunci se face o interogare pe tabelul USERS al bazei de date cu ajutorul instrucțiunii SELECT folosind variabila în care este păstrat e-mail-ul care returnează numărul de rânduri găsite cu e-mail-ul introdus. Rezultatul acestei interogări este păstrat într-o variabilă. Se verifică dacă numărul de rânduri ale variabilei este egal cu 0 și dacă da atunci cu ajutorul instrucțiunii INSERT INTO se inserează în tabelul USERS tipul contului(translator), numele, prenumele, e-mail-ul, parola și numărul de telefon și în tabelul TRADUCATOR_BASIC compania țara și un o valoare de 1 pentru un câmpul approved. Acest câmp a fost creat pentru viitor și este folosit pentru a aproba un cont de traducător sau nu de către administratorul site-ului. Când această opțiune va fi valabilă valoarea inițială adăugată automat va fi 0. Când administratorul va aproba contul atunci valoarea va deveni 1. Câmpurile clientului adăugate în tabelul USERS sunt cele comune cu cele ale clientului, iar celelalte sunt specifice traducătorului care deocamdată nu sunt folosite decât pentru afișare de informații dar pe parcursul dezvoltării aplicației aceste câmpuri vor fi folosite.

Se preia statusul adăugării într-o variabilă. Dacă adăugarea de valori în aceste tabele din anumite motive nu se poate realiza variabila este false iar dacă da atunci este true. În caz ca ea este false după adăugarea în tabelul USERS atunci înseamnă că din diferite motive adăugarea de valori în acest tabel nu a fost posibilă și un mesaj este afișat ” Problems when adding in Users”. Dacă a trecut de adăugarea în tabelul USERS cu valoarea true dar este false după adăugarea în tabelul TRADUCATOR_BASIC atunci înseamnă că adăugarea de valori în acest tabel nu a fost posibilă și un mesaj este afișat ” Problems when adding in Clients”.

Dacă valoarea este true după cele 2 adăugări înseamnă că contul a fost creat, toate datele traducătorului sunt salvate în tabele. La fel o variabilă cu statusul acestei întregi operații de creare de cont este salvat într-o variabilă. Dacă variabila este true atunci tipul contului(traducător), prenumele și id-ul userului sunt salvate în variabile globale de tip php pentru a le folosi mesajul de logare și se face logarea automată a clientului pe care tocmai l-am adăugat.

Dacă valoarea variabilei cu statusul întregii operații de adăugare este un mesaj de eroare ” When creating an account for the email(".$email.") the fallowing error occured:” care arată motivul pentru care operația nu s-a realizat acesta se afișează.

Crearea cu succes a unui cont de traducător înseamnă că în baza de date în tabelele USERS și TRADUCATOR_BASIC au fost inserate cu succes datele acestuia. În momentul acesta el poate să vadă ce fișiere sunt urcate de către client pentru a fi traduse.

Pagina Sign in

Figura 3.14- Pagina Client nelogat

Pagina Sign In este folosită de utilizator pentru a se loga la contul aferent acestuia și este accesată din secțiunea Header a paginii din meniul de autentificare. Pentru a se loga pagina pune în secțiunea main content un formular în care acesta trebuie să completeze emailul și parola aferente contului.

În momentul când clientul a dat submit fiecare șir de caracter este salvat în câte o variabilă care sunt verificate.

Următorii pași se fac pentru logarea unui utilizator:

Dacă câmpurile email și parolă nu sunt completate se afișează un mesaj corespunzător în caz că acestea nu au fost introduse.

Dacă cele 2 câmpuri au fost introduse se verifică dacă emailul este atașat unui cont. Dacă nu este atașat se afișează un mesaj în care se spune că contul nu există cu un link spre Pagina de Creare de Cont. Dacă emailul este atașat unui cont se verifică parola și dacă este incorectă se afișează un mesaj în care se specifică că parola este incorectă

Dacă emailul și parola sunt corecte se utilizatorul este logat contului aferent client sau translator. În acest moment poate să-și selecteze pagina aferentă pentru ași vedea în ce stadiu este proiectul de traducere a acestuia.

Pașii descriși mai sus se fac astfel

După completarea câmpurilor valorile acestora sunt preluate în două variabile. Se verifică dacă cele variabila pentru email respectiv pentru parolă sunt diferite de spațiu gol și dacă nu sunt diferite un mesaj de eroare este afișat: ”Please complete both fields in order to login. Or create an account… here”.

Dacă variabile sunt diferite de spațiu gol atunci se face o interogare pe tabelul USERS al bazei de date cu ajutorul instrucțiunii SELECT care are ca rezultat toate informațiile din tabel. Acest rezultat este păstrat într-o variabilă de tip array. Dacă nu se poate conecta la baza de date și interogara nu s-a putut realiza un mesaj de eroare este afișat.

Se parcurge tot array-ul și se verifică dacă variabila în care este păstrat emailul este egală cu o valoare din variabila array. Dacă nu se găsește nici un valoare egală cu valoarea din variabilă atunci se afișează un mesaj ”Your email ('.$email.') is not present in our database. Create an account …here”.

Dacă valoarea variabilei pentru email este egală cu o valoare a variabilei array atunci se parsează array-ul din nou de data asta pentru a verifica dacă valoarea variabilei pentru parolă este egală cu o valoare a variabile array de pe rândul unde s-a găsit emailul. Dacă nu există nici o valoare egală atunci se afișează la fel un mesaj de eroare ”Wrong password, try again, or admit you forgot your password Create an account …here”

Dacă valoarea variabilei de parolă este egală cu valoarea din array de pe rândul unde s-a găsit emailul atunci se salvează în variabile globale user id-ul, tipul contului și prenumele utilizatorului din aceeași linie din array unde s-a găsit emailul care se folosesc pentru logare. Se face logarea cu ajutorul acestor variabile și se afișează mesajul ” 'Welcome back ' prenumele utilizatorului”

Logarea cu succes a unui utilizator modifică Pagina Client sau Translator în pagină personalizată pentru fiecare client sau traducător. După logarea cu succes aceștia își pot vedea starea proiectul de traducere și pot facilita de funcționalitățile platformei.

Pagina Client

Clientul este logat

Figura 3.15- Pagina Client logat

Logarea unui client se face în pagina Sign in a platformei. După logare clientul poate vedea în această pagină în secțiunea Main Content a paginii starea proiectului de traducere. Pagina clientului este împărțită în 4 zone în secțiunea de main content:

Zona 1 – Add document for translation este rezervată mesajului de întâmpinare și unde clientul poate să urce un document pentru traducere de la el de pe calculator pe platformă. Pentru acesta el selectează butonul Choose File care deschide o fereastră de căutare pe host-ul clientului. Clientul selectează fișierul și acest fișier va apărea în casetă. Tot aici clientul alege în ce limbă este documentul și în ce limbă vrea ca acesta să fie tradus. Momentan limbile pe care le poate selecta sunt codate și sunt doar 3: română, engleză și germană atât la limba în care este documentul cât și la limba în care dorește să fie tradusă. Pe viitor limbile care vor fi disponibile în meniu vor fi afișate în funcție de traducătorii disponibili și de limbile pe care aceștia le cunosc. După apăsarea butonului Submit se verifică dacă fișierul selectat are formatul diferit de doc, docx, pdf sau jpg și un mesaj de eroare este afișat. De asemenea dacă dimensiunea fișierului depășește 10000000 bytes la fel o eroare va apărea.

Dacă documentul are formatul și dimensiunea corespunzătoare acesta va fi urcat pe platformă și în momentul acesta orice traducător care are cont pe platformă va vedea acest document în Zona 3 unde sunt documentele neasignate și va putea să și-l asigneze pentru traducere. Documentul trebuie să apară în tabelul din Zona 2 a clientului.

Urcarea și verificare de mai sus se face astfel:

Documentul care este selectat trebuie urcat fizic pe server iar informațiile acestuia trebuie introduse în tabelul DOCUMENTS al bazei de date pentru aceasta se folosesc 2 funcții diferite: una de adăugare a documentului pe server și un de adăugare în tabel a informațiilor despre acest document.

Prima dată se execută funcția de adăugare a documentului pe server. Această funcție este folosită și atunci când documentul tradus este urcat de către traducător. Așadar prima dată se verifică ce fel de cont este client sau traducător. La o variabilă i se atribuie calea către directorul unde se țin documentele urcate de către clienți plus un director cu numele clientului și id-ul acestuia. Dacă clientul este nou directorul cu numele și id-ul acestui este creat. La o variabilă i se atribuie cele 4 extensii acceptate se folosește funcția explode pentru a prelua într-un array numele și extensia fișierului. La fel se folosește funcția end pentru a prelua în altă variabilă extensia. Se verifică dacă variabila cu ajutorul in_array dacă extensia documentului este una din cele 4 din variabila de extensii și dacă documentul depășește 10000000 bytes. Dacă condițiile de mai sus nu sunt îndeplinite un mesaj de eroare este afișat ”Invalid file”. Dacă condițiile sunt îndeplinite fișierul este copiat în locația specifică clientului. Aici înainte de copiere se mai fac verificări să nu aibă același nume și dacă copierea din anumite motive nu poate fi realizată și la fel mesaje specifice de eroare sunt afișate.

Dacă această funcție se execută cu succes atunci se trece la cea de-a doua funcție care adaugă informațiile despre document în tabelul DOCUMENTS al bazei de date. Prima dată se face o interogare pe tabelul DOCUMENTS al bazei de date cu ajutorul instrucțiunii SELECT care returnează rândul unde se găsește numele fișierului cu același nume cu cel pe care vrem să-l urcăm. Dacă numărul rândurilor este mai mare de 0 atunci un mesaj de eroare este afișat ” The file … already exists.”. Dacă numărul rândurilor este egal cu 0 atunci cu ajutorul instrucțiunii INSERT INTO următoarele valori sunt introduse în tabelul DOCUMENTS id-ul_documentului care este pus sa fie consecutiv, id-ul clientului, data de azi, limba sursa, limba destinație, calea către fișier urcat de client și valoarea 0 pentru în câmpurile finished, id-ul traducător, calea traducător și in_revision care spun că starea fișierului este netradus și încă nu este preluat de nici un traducător.

După ce funcția este executată statusul acesteia este preluată într-o variabilă. Dacă variabila este un mesaj de eroare se afișează acest mesaj dacă este true înseamnă că documentul este adăugat și pe server și informațiile despre el în tabelul bazei de date și un mesaj este afișat: ”The file: numele fișierului was uploaded and will be handed to one of our skilled translators”.

Zona 2 – Documente în așteptare este rezervată documentelor care au fost urcate pentru a fi traduse dar încă nu sunt asignate încă către un traducător. Aceste documente sunt afișate într-un tabel care conține număr criteriu, numele fișierului, limba în care este și limba în care trebuie tradusă.

Documentele care sunt afișate aici sunt afișate în urma unei verificări asupra tabelului DOCUMENTS din baza de date. Verificarea se face astfel:

Se face o interogare pe tabelul DOCUMENTS al bazei de date cu ajutorul funcției SELECT care are ca condiție ca id-clientului logat să fie egal cu id_client din tabel și id_translator din tabel să fie egal cu 0. Interogarea ar trebui să returneze ca rezultat rândurile care îndeplinesc această condiție. Rezultatul este preluat într-o variabilă și verificat. Dacă numărul de rânduri ale variabilei este egală cu 0 înseamnă că pentru acest client nu s-a găsit nici un document care să nu fi asignat nici unui traducător și un mesaj este afișat în loc de tabelul cu documente:” You don't have any pending documents.”. În caz că numărul de rânduri ale variabilei nu este 0 este afișat în tabel datele din această variabilă: numele fișierului cu link prin care se poate salva pe calculatorul utilizatorului acest document, limba sursă și limba destinație.

Zona 3 – Documente în lucru este rezervată documentelor care sunt în lucru adică care au fost urcate pentru a fi traduse și pe care un traducător și le-a asignat deja. Zona 3 a clientului se regăsește în Zona 2 a traducătorului care și-a asignat documentele. Documentele sunt afișate la fel într-un tabel care conține număr criteriu, numele fișierului, limba sursă, limba destinație și prenumele traducătorului care și-a asignat acest document. Verificarea se face la fel ca și la precedenta zonă doar că atunci când se face interogarea pe tabel aceasta este diferită. Interogarea se face cu JOIN IN pentru a afișa prenumele traducătorului din tabelul USERS în funcție de id-ul traducătorului din tabelul DOCUMENTS. Interogarea este făcută la fel cu ajutorul SELECT și este aceasta:

SELECT * from `documents` JOIN IN `users` on documents.id_translator=users.id_users where `id_client`='".$_SESSION['userul_logat']."' and id_translator!=0 and finished=0;

Interogarea returnează documentele care apațin clientului logat, care au un id_translator diferit de 0 și care au starea de finished pe 0. La fel ca și mai sus rezultatul acestei interogări este savat într-o variabilă care daca are numărul de rânduri egal cu 0 se afișează mesajul ” You don't have any documents currently in work.”. Dacă nu este egal cu 0 se afișează este afișat în tabel datele din această variabilă: numele fișierului la fel cu link de salvare, limba sursă, limba destinație și prenumele traducătorului.

Zona 4 – Documente traduse este rezervată documentelor care deja au fost traduse adică cele care au fost urcate de către traducător pe server după ce le-a terminat de tradus. Documentele din Zona 4 a clientului se regăsesc în Zona 4 a traducătorului care le-a tradus. Documentele sunt afișate la fel ca și în zonele precedente într-un tabel care conține număr criteriu, numele fișierului, limba sursă, limba destinație și numele traducătorului care a tradus documentul.

Verificarea se face la fel ca și la zona precedentă singura diferență fiind la interogare condiția pe câmpul finished care trebuie să fie egal cu 1 și este scoasă condiția pe câmpul id_translator. Interogarea:

SELECT * from `documents` join `users` on documents.id_translator=users.id_users where `id_client`='".$_SESSION['userul_logat']."' and finished=1;

În caz că interogarea nu are nici un rezultat este afișat (adică numărul rândurilor variabilei în care este preluat rezultatul interogării este egal cu 0): ” You don't have any previously translated documents”. Dacă interogare are rezultate acestea sunt afișate în tabel: numele fișierului cu link pe care clientul îl poate salva pe calculatorul său, limba sursă, limba destinație și numele traducătorului.

Această pagină ajută clientul să aibă o situație clară a toate documentelor care le-a urcat pentru traducere. Pe moment nu avem implementat să primească și email de fiecare dată când statusul unui document este schimbat dar pe viitor o să implementăm și această funcționalitate. De asemenea stări ca și cea de în revizie vor fi implementate pe viitor pentru ca documentul înainte să fie transmis la traducător să i se facă o revizie de către administrator și la fel după ce a fost tradus pentru a stabili dacă documentul este ok pentru tradus sau a fost tradus cum trebuie.

Clientul nu este logat

Figura 3.16- Pagina Client nelogat

Dacă utilizatorul nu este logat și selectează din meniul principal butonul Client în secțiunea main content a paginii apare o descriere cum poți să faci o cere de cost pentru facilitățile pe care le oferă platforma. Tot aici poți să-ți configurezi o cere de preț gratuită, configurare care poți să o trimiți cu ajutorul unui formular către administratorul platformei. Configurarea se face astfel:

Se selectează domeniul din care face parte documentul pe care vrei sa-l traduci

Se selectează perechea de limbi sursă – destinație a documentului

Se selectează ce serviciul trebuie aplicat acestui document

Se completează formularul cu nume, email, companie și opțional un număr de telefon

Se apasă butonul Submit

Informațiile selectate sunt trimise pe emailul administratorului cu ajutorul funcției php: mail(..). Administratorul după primirea emailului va răspunde automat utilizatorului cu un mesaj că emailul a fost primit și va reveni cu o estimare în cel mai scurt timp.

Utilizatorul este îndemnat pentru a-și crea un cont pentru a putea avea o situație a documentelor. Pentru acesta avem un link care duce spre pagina de înregistrare a unui nou utilizator.

Pagina Translator

Traducătorul este logat

Figura 3.17- Pagina Translator logat

Logarea unui traducător se face în pagina Sign in a platformei. După logare traducătorul poate vedea în această pagină în secțiunea Main Content a paginii starea proiectului de traducere. Pagina traducătorului este împărțită în 4 zone în secțiunea de main content:

Zona 1 – Mesaj de întampinare este rezervată mesajului de întâmpinare pentru traducător.

Zona 2 – Documente care sunt atribuite și trebuie traduse este rezervată documentelor care sunt în lucru adică pe care traducătorul și le-a asignat pentru traducere și se ocupă de ele. Aceste documente sunt afișate într-un tabel care conține număr criteriu, numele fișierului cu link de salvare, limba sursă și limba destinație. De asemenea tot în această zonă putem alege să trimite documentele deja traduse către client. Pentru acest lucru traducătorul urcă un document (cel tradus în limba specificată) pe platforma. Pentru acesta el selectează butonul Choose File care deschide o fereastră de căutare pe host-ul traducătorului. Traducătorul selectează fișierul pe care dorește să-l urce și acesta va apărea în caseta. După apăsarea butonului Send File se verifică dacă fișierul selectat are formatul diferit de doc, docx, pdf sau jpg și un mesaj de eroare este afișat. De asemenea dacă dimensiunea fișierului depășește 10000000 bytes la fel o eroare va apărea.

Dacă documentul are formatul și dimensiunea corespunzătoare acesta va fi urcat pe platformă și în momentul acesta clientul care l-a pus spre traducere pe platformă va vedea acest document în Zona 4 unde sunt documentele traduse și va putea să și-l salveze pe propriul calculator Documentul trebuie să apară în tabelul din Zona 4 a traducătorului.

Verificare pentru ce documente să apară în tabel în Zona 2 se face la fel ca și la Pagina Clientului pentru celelalte zone. Se face o interogare pe tabelul DOCUMENTS cu ajutorului funcției SELECT în care se verifică dacă id-ul traducătorului logat este egal cu cel din câmpul tabelului și valoarea din câmpul finished este egala cu 0.

SELECT * from `documents` WHERE `id_translator`=".$_SESSION['userul_logat']." and finished=0;

Rezultatul interogării este preluat într-o variabilă. Se verifică dacă numărul rândurilor din această variabilă este egal cu 0 atunci tabelul este gol. Dacă nu este egală cu 0 sunt afișate valorile următoare din variabile: numele fișierului cu link de salvare, limba sursă și limba destinație.

Verificare și urcarea pe server a fișierului tradus se face astfel:

Ca și în cazul clientului documentul care este selectat trebuie urcat fizic pe server iar informațiile despre documentul inițial trebuie modificate în tabelul DOCUMENTS al bazei de date pentru aceasta se folosesc 2 funcții diferite: una de adăugare a documentului pe server și una de modificare în tabel a informațiilor despre documentul inițial.

Prima dată se execută funcția de adăugare a documentului pe server. Această funcție este folosită și atunci când documentul care vrea să fie tradus este urcat de către client. Așadar prima dată se verifică ce fel de cont este client sau traducător. La o variabilă i se atribuie calea către directorul unde se țin documentele urcate de către traducători plus un director cu numele traducătorului și id-ul acestuia. Dacă traducătorul este nou directorul cu numele și id-ul acestui este creat. La o variabilă i se atribuie cele 4 extensii acceptate se folosește funcția explode pentru a prelua într-un array numele și extensia fișierului. La fel se folosește funcția end pentru a prelua în altă variabilă extensia. Se verifică dacă variabila cu ajutorul in_array dacă extensia documentului este una din cele 4 din variabila de extensii și dacă documentul depășește 10000000 bytes. Dacă condițiile de mai sus nu sunt îndeplinite un mesaj de eroare este afișat ”Invalid file”. Dacă condițiile sunt îndeplinite fișierul este copiat în locația specifică traducătorului. Aici înainte de copiere se mai fac verificări să nu aibă același nume și dacă copierea din anumite motive nu poate fi realizată, la fel mesaje specifice de eroare sunt afișate.

Dacă această funcție se execută cu succes atunci se trece la cea de-a doua funcție care modifică informațiile despre documentul inițial în tabelul DOCUMENTS al bazei de date. Această modificare se face cu ajutorul instrucțiunii UPDATE:

"UPDATE `documents` SET doc_revision='".$newPath."', finished=1 where id_documents=".$id_document.";";

Cu ajutorul acestei instrucțiuni următoarele câmpuri sunt modificate calea traducătorului primește calea unde documentul a fost urcat pe server și câmpul finished primește valoarea 1. Această funcție de modificare este preluată de o variabilă. Dacă variabila este false înseamană ca sunt probleme la modificarea bazei de date și un mesaj de eroare este afișat: ” The file … was not saved in the DB”. Dacă variabila este true atunci documentul a fost urcat pe server și datele au fost modificate cu succes în baza de date și următorul mesaj este afișat: ”The file: … was uploaded and is ready for the client to check and use.”

Zona 3 – Documente care nu sunt încă atribuite traducătorilor este rezervată documentelor care au fost urcate de către client și nu sunt atribuite nici unui traducător. Documentele care sunt aici ar trebuie să se regăsească la fiecare client în Zona 2. Documentele sunt afișate în tabel cu următoarele informații: număr criteriu, nume fișier cu link de salvare, limba sursă și limbă destinație. Tot de aici traducătorul poate să-și atribuie aceste documente pentru a le traduce dacă are competențele necesare selectând butonul Assign. Când selectează acest buton documentul trece din Zona 3 a traducătorului în Zona 2 și la client trece din Zona 2 în Zona 3.

Verificarea a ceea ce afișăm în tabel se face ca și în celelalte zone. Se face o interogare pe tabelul DOCUMENTS la bazei de date cu ajutorul instrucțiunii SELECT doar cu condiția ca câmpul id_translator să fie 0:

SELECT * from `documents` WHERE `id_translator`=0;

Rezultatul acestei interogări este preluată într-o variabilă care este parcursă și sunt afișate în tabel valorile acesteia dacă numărul rândurilor acestei variabile este diferit de 0. Dacă numărul rândurilor este egal cu 0 următorul mesaj este ” There is no document that is not assigned to any translator.”

Dacă traducătorul apasă butonul Assign din această zonă se execută o funcție care modifică câmpul id_traducător din tabelul DOCUMENTS din 0 cu id-ul traducătorului logat pentru documentul cu id_document specific. Această funcție se face cu ajutorul instrucțiunii UPDATE:

UPDATE `documents` SET id_translator=".$id_translator." where id_documents=".$id_document.";

Dacă funcția se succes atunci modificare a fost realizată și un mesaj este afișat: ” The document was assigned.”

Zona 4 – Documente deja traduse este rezervată documentelor care sunt traduse de traducător. Aceste documente trebuie să se regăsească și pe server în directorul specific al traducătorului. Documentele din zona aceasta se regăsesc pentru fiecare client al traducătorului tot în Zona 4. Toate aceste documente sunt afișate în tabel cu următoarele informații: număr criteriu, nume fișier cu link de salvare, limbă sursă și limbă destinație.

Verificarea a ceea ce afișăm este identică cu cea de la Zona 4 la client doar diferă verificare de id în loc să se facă pentru id_client se face pentru id_traducător. Se face o interogare pe tabelul documents cu instrucțiunea SELECT:

SELECT * from `documents` WHERE `id_translator`=".$_SESSION['userul_logat']." and finished=1;

Rezultatul interogării este preluat într-o variabilă care este parcursă și sunt afișate în tabel valorile acesteia(numele fișierelor, limba sursă, limba destinație). Dacă nu se găsește nimic în urma interogării această zonă nu este vizibilă.

Traducătorul nu este logat

Figura 3.18- Pagina Translator nelogat

Atunci când utilizatorul nu este logat și selectează din meniu butonul Translator pagina este una simplă cu o descriere despre traducătorii acestei platforme și cu o scurtă informație despre cum să-ți faci un cont nou de traducător. Pentru aceasta în josul paginii avem un link care duce spre pagina de înregistrare a unui nou utilizator.

Pagina Sign out

Figura 3.19- Pagina Sign out

Pagina Sign out apare când un utilizator selectează butonul Sign out din secțiunea header a paginii din partea de autentificare. Utilizatorului i se afișează un mesaj: ”Have a nice day prenumele utilizatorului”.

Funcția din spate care face acest lucru este prezentată mai jos:

<?php

echo '

<br>

<h2>Logout</h2>

<hr>

<br>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Have a nice day '.$_SESSION['last_user'].' </p>

<br><br>';

unset($_SESSION['last_user']);

?>

Pagina Contact

Figura 3.19- Pagina Contact

Pagina Contact apare în momentul când utilizatorul selectează butonul Contact din meniu. Aici se poate vedea datele de contact ale administratorului platformei. Utilizatorul din această poate trimite orice mesaj pe email, mesaj ce va fi transmis administratorului. Pentru acest lucru se pune la dispoziția utilizatorului un formular în care trebuie să-și completeze numele, email-ul și textul pe care dorește să-l trimită. Când utilizatorul apasă submit un email este trimis către administratorul platformei. Se verifică ca emailul să fie valid. Funcția din spate este aceeași ca și la pagina de client când acesta nu este logat. Administratorul după primirea emailului va răspunde automat utilizatorului cu un mesaj că emailul a fost primit și va reveni cu o estimare în cel mai scurt timp.

CAPITOLUL 4 – DIRECȚII DE DEZVOLTARE A APLICAȚIEI

Pașii următori

Pentru a face platforma cunoscută pentru început aceasta va fi simplă. Un utilizator își face un cont de client de unde urcă un document care dorește să îi fie tradus. Un alt utilizator care știe să traducă îți face un cont de traducător și face de bunăvoie fără nici un cost traducerea acestui document după care îl urcă pe server pentru ca clientul să profite de această traducere. Pe viitor se dorește dezvoltarea acestei platforme de aceea trebuie gândiți pașii următori care trebuie făcuți pentru a face acest lucru posibil:

Terminarea panoului de administrare pe pagina direct astfel încât administratorul să nu fie nevoit să verifice baza de date direct ci într-un mod mai ușor. Acesta trebuie să aprobe toate conturile atât cele de client cât și cele de traducător. El va trebui să aprobe documentele urcate de client și cele traduse și urcate de către traducători;

Se va adăuga o stare suplimentară pe care atât clientul cât și traducătorul să o vadă: Documente în revizie la administrator;

Un sistem de e-mail automat trebuie implementat pentru a trimite email cu schimbarea unui document dintr-o stare în alta care va fi trimis la clientul care a urcat documentul respectiv. Acest sistem va trimite email și la traducător când un document a fost urcat de client pe platformă și este în aria lui de competență;

Adăugarea de câmpuri suplimentare pentru înregistrarea de traducător pentru a avea o idee despre competențele acestuia. Afișarea de documente urcate pentru acesta în funcție de aceste competențe;

Adăugarea celorlalte servicii pentru documente în afară de traducere;

Crearea pentru fiecare traducător a unei pagini de profil pe site, în care să fie scrise datele acestuia. Clienții vor știi astfel cine se ocupă de documentele lor;

Posibilitatea pentru clienți ca după fiecare traducere să dea calificative pentru documentele traduse;

Semnarea unui contract cu o firmă de plăti securizate pe web astfel încât să putem implementa o secțiune de plăti cu cardul pe pagina web;

Îmbunătățirea SEO (search engine optimizations);

Contactarea unei persoane specializate în design pentru schimbarea aspectului paginii web;

Folosirea instrumentelor oferite de google – atât pentru statistici de căutare cât și adwords – pentru publicitate;

Adăugarea google adsense pentru introducerea de publicitate pe site pe alocuri;

Configurarea și darea în funcțiune a platformei

Instalarea infrastructurii software

Așa cum am precizat în capitolul de început pentru Wamp este soluția aleasă pentru această aplicație web deoarece este ușor de instalat, de configurat, de utilizat și este gratuit (open source). El cuprinde și gestionează aplicațiile Apache, MySQL și PHP.

După descărcarea installer-ului de pe site-ul http://www.wampserver.com se execută instalarea. Instalarea este destul de ușoară:

Figura 4.1- Instalarea WAMP

După instalare pe Desktop va apărea un shorcut numită Wamp Server. Apăsând această iconiță wamp serverul va fi pornit și de asemenea o iconiță cu starea acestui care ar trebui sa fie verde.

Dacă Wamp Serverul are iconița roșie înseamnă că este oprit. Pentru a-l porni se dă click pe iconița și se selectează Start All Services ca în figura de mai jos:

Figura 4.2- Pornire Wamp Server

Tot din acest meniu se poate opri serverul și de asemenea fiecare serviciu în parte al aplicațiilor Apache și MySQL.

Serverul Apache, pornește implicit pe portul 80, port care poate fi testat din meniul Apache dacă este ocupat sau nu. Configurări specifice pentru fiecare aplicație Apache, PHP și MySQL se face din meniurile vizibile mai sus (activare de extensii sau setări pentru PHP, activare de module pentru Apache, setări pentru Apache și MySQL, folosirea diferitelor versiuni dacă sunt mai multe instalate).

Aplicația web trebuie creată în folderul www din folderul de wamp. Aici trebuie copiat folderul Optimum care să conțină toate fișierele aplicației (index.php, register.php, sign_in.php, /images, /documents, /home_scrips.js etc).

Aplicația poate fi pornită după un restart de server deschizând un browser și introducând adresa http://localhost/Optimum.

Totuși pentru ca aceasta să funcționeze trebuie creată în prealabil baza de date.

Crearea bazei de date

Cu Wamp gestionarea bazei de date se face cu ajutorul aplicație phpMyAdmin care poate fi pornită atât din browser cu linkul http://localhost/phpmyadmin/ cât și din meniul aplicație Wamp apăsând phpMyAdmin.

Cu această aplicație putem crea baza de date de care avem nevoie ca această aplicație să funcționeze. Crearea bazei de date și a tabelelor se poate face și din linia de comandă dar această aplicație ușurează foarte mult munca după cum se poate observa în figura 4.3:

Figura 4.3- Creare Bază de date

După ce am creat baza de date trebuie creat un utilizator cu nume și parolă care să aibă drepturi de administrare pe această baza de date. Numele bazei de date, numele utilizatorului și parola se folosesc la conectarea bazei de date de care avem nevoie pentru aplicație această conectare este în fișierul connection.php și mai jos este codul:

<?php

class mySqlConnection

{

public function connect(){

mysql_select_db('optimum_trad',$db);*/

$db = mysql_pconnect('localhost', 'root', '') or die('~Server(s) down~'); mysql_select_db('optimum_trad',$db) or die ("( database selection error )".mysql_error().mysql_errno());

$connection = true;

}

public function disconnect(){

mysql_close($db);

$connection = false;

}

}

?>

După crearea bazei de date trebuie create tabele folosite pentru această aplicație. Am creat 5 tabele USERS, CLIENTS, TRADUCATOR_BASIC, DOCUMENTS și TRADUCATOR. Primele 4 tabele sunt folosite dar cel de-l 5 lea (TRADUCATOR) este creat pentru ca pe viitor informațiile despre translator să fie mai complexe.

Figura 4.4- Tabele Bază de date

CONCLUZII

Ideea realizării acestui instrument de traduceri capabil de a mulțumii clienți la nivel global la costuri mici este foarte bună, dificultăți rămân desigur la implementarea acesteia.  

Platforma are un potențial uriaș, desigur, pentru a atinge acel nivel este nevoie de foarte multă muncă: interfața grafică, partea de logică din spatele interfeței grafice (partea cea mai complexă, creierul aplicației), securitatea platformei, SEO, marketing. 

Am ales să creez platforma pe pași, astfel încât scheletul să fie primul în stare finalizata, un schelet finalizat pe care să putem construi în continuare în timpul funcționarii. 

Nu putem spune cu siguranță că aceasta platforma va înlocui locul de munca într-o zi, dar cu munca multă i se poate oferi această șansă. 

BIBLIOGRAFIE

[1] Steven Suehring, Janet Valde, (2013) PHP, MySQL, Javascript & HTML5 All in one

[2] Julie C. Meloni, (2005) Invata singur PHP, MYSQL si Apache

[3] Traian Anghel, (2005) Dezvoltarea aplicațiilor WEB folosind XHTML, PHP și MySQL

[4] Curioso A., Bradford R., Galbraith P., (2010) Expert PHP and MySQL

[5] Robin Nixon, (2012) Learning PHP, MySQL

[6] Dan Pescariu, (2004) MySql – Elemente de bază, Note de curs

[7] Robert Schifreen, (2010) How to create Web sites and applications with HTML, CSS, Javascript, PHP and MySQL

[8] Kevin Yank, (2012) PHP & MySQL: Novice to Ninja

[9] Sabin Buraga, (2003) Aplicații Web la cheie. Studii de caz implementate în PHP

[10] Jonathan Chaffer, Karl Swedberg, (2011) Learning jQuery

[11] Luke Welling, Laura Thomson, (2003) Php and MySQL Web Development

[12] Larry Ullman, (2004) PHP pentru World Wide Web

[13] http://www.internetlivestats.com

[14] http://translation-blog.multilizer.com

[15] http://www.php.net

[16] http://www.mysql.com

[17] http://www.phpmyadmin.net

[18] http://www3.ntu.edu.sg/home/ehchua/programming/sql/MySQL_Beginner.html

[19] http://www.phpromania.ro

[20] http://www.w3schools.com

[21] http://www.wampserver.com

BIBLIOGRAFIE

[1] Steven Suehring, Janet Valde, (2013) PHP, MySQL, Javascript & HTML5 All in one

[2] Julie C. Meloni, (2005) Invata singur PHP, MYSQL si Apache

[3] Traian Anghel, (2005) Dezvoltarea aplicațiilor WEB folosind XHTML, PHP și MySQL

[4] Curioso A., Bradford R., Galbraith P., (2010) Expert PHP and MySQL

[5] Robin Nixon, (2012) Learning PHP, MySQL

[6] Dan Pescariu, (2004) MySql – Elemente de bază, Note de curs

[7] Robert Schifreen, (2010) How to create Web sites and applications with HTML, CSS, Javascript, PHP and MySQL

[8] Kevin Yank, (2012) PHP & MySQL: Novice to Ninja

[9] Sabin Buraga, (2003) Aplicații Web la cheie. Studii de caz implementate în PHP

[10] Jonathan Chaffer, Karl Swedberg, (2011) Learning jQuery

[11] Luke Welling, Laura Thomson, (2003) Php and MySQL Web Development

[12] Larry Ullman, (2004) PHP pentru World Wide Web

[13] http://www.internetlivestats.com

[14] http://translation-blog.multilizer.com

[15] http://www.php.net

[16] http://www.mysql.com

[17] http://www.phpmyadmin.net

[18] http://www3.ntu.edu.sg/home/ehchua/programming/sql/MySQL_Beginner.html

[19] http://www.phpromania.ro

[20] http://www.w3schools.com

[21] http://www.wampserver.com

Similar Posts