Administrarea Utilizatorilor de Retea Intr Un Camin cu Ajutorul Unei Aplicatii Web

Administrarea utilizatorilor

De retea

Dintr-un camin cu

Ajutorul unei aplicatii web

Cuprins

Capitolul 1

Introducere

1.1. Mediul WEB

Internetul reprezinta o retea formata din calculatoare conectate intre ele prin protocolul IP – Internet protocol. Avem cateva tipuri de protocoale fundamentale care asigura operabilitatea intre calculatoare , ele sunt IP (Internet Protocol) , TCP (Transmission Control Protocol) , UDP (User Data Protocol).

In mediul WEB se folosesc numeroase aplicatii pentru afisarea de informatii statice de tip text , imagini sau audio (ex. pagina web) , pentru transmiterea de informatie , pentru email , telefonie cu imagine prin internet , chat , video , televiziune , pentru orice tip de muzica , pentru controlul unor dispozitive de la distanta , pentru tranzactii bancare , pentru raspandirea stirilor si in multe alte domeni.

Cel mai de succes si cel mai important serviciu al internetului de pana acum este World Wide Web sau pe scurt WWW .Acest serviciu care de fapt este o aplicatie multimedia si interactiva , cu o interfata de tip GUI (Graphic User Interface) si o grafica foarte usor de folosit si foarte prietenoasa.

Aceasta aplicatie World Wide Web este un imens sistem de pagini care se gasesc pe mai multe servere ce sunt conectate intre ele prin link-uri , ele continand text, fisiere video, postscript-uri , sunete flash-uri si alte formate.Accesarea sau folosirea acestor informatii se face printr-un program care poarta numele de browser, el permitand utilizatorilor din toata lumea sa foloseasca documente care aproape tot timpul sufera modificari de continut.In acesta aplicatie de face o distictie clara intre partea de client a aplicatiei si partea de server a acesteia.In general un server WWW gestioneaza cerintele clientilor in materie de documente , el trimitand documentele cerute de catre client.Clientul are posibilitatea sa solicite documnete ce se afla pe un server Web,acesta la randul lui le afiseaza pe monitorul calculatorului intr-un anumit format. Comunicarea dintre client si server , adica protocolul care realizeaza acesta comunicatie se numeste HyperText Transfer Protocol. Toate actiunile care desfasoara in cadrul acestui protocol se fac dintr-o cerere facuta de catre client in formatul ASCII si un raspuns dat de server , in care se aplica conventile MIME (MUltipurpose Internet Mail Extensions).

1.2. Enuntul temei

"Retele de calculatoare si internet" este o tema care poate fi dezvoltata in orice organizatie, atat intr-o companie de succes cat si intr-o intreprindere noua pe piata economica. In cazul de fata sarcina mea este sa dezvolta o retea de calculatoare si internet intr-un camin studentesc ,pe viitor poate chiar intr-un campus intreg.

Acesta aplicatie gestioneaza o baza de date creata de administratori si folosirea acesteia de catre mai multi utilizatori .Fiecare administrator are acces doar la baza de date a utilizatorilor sai, el nu poate sa stearga sau sa introduca un nou utilizator in baza de date a altui administrator. Dupa ce administratorul de retea se autentifica pentru baza lui de date , poate sa modifici , sa adauge sau sa strearga utilizatorii sai. Prin aceasta aplicatie se urmareste ca administratori de camine studentesti sa aibe o baza de date a fiecarui student ce locuieste in caminul lui , o mai buna organizare , evidenta si nu in ultimul rand un control asupra fiecarui student.

Capitolul 2

Cerinte de baza

Pentru completarea datelor despre utilizatori de catre administrator este necesar un studiu referitor la anumite reguli de completare si adaugare a unui utilizator nou in retea.

2.1. MAC-ul fiecarui utilizator

MAC-ul(Media Access Control) este un numar intreg de 6 octeti sub forma unei adrese, pe care il are orice calculator care se afla legat intr-o retea de tip Token-ring sau Ethernet , el folosind la identificarea lui intr-o retea locala.Pentru inceput s-a dorit ca aceste MAC-uri sa fie unice , ele find date diferitilor producatori de retele , apoi sa trecut la MAC-uri configurabile adica ele pot fi modificate.

Adresele MAC sunt de doua feluri :

– adrese administrate universal

– adrese administrate local

Adresa administrata universal este data in mod unic de producatorul placii de retea si ea este salvata si memoria acesteia , neputand fi modificata sau stearsa.

Adresa administrata local este data de catre administratorul retelei placii de retea , el modificand valoarea memorata initial. Cele doua tipuri de administrare a unei adrese sunt diferite intre ele prin valoarea bitului U/L (Universal?Local).

– " 0 " adresa administrata global

– " 1 " adresa administrata local

Figura 2.1.1. Structura unei adrese MAC

In momentul fabricatiei memoriei ROM(Read-Only memory aceasta find un tip de momerie al carei continut nu poate fi schimbat ,el pastrnadu-se chiar si atunci in adaptorul nu este alimentat cu energie electrică) pentru placa de retea se inscriptioneaza adresa MAC.

Datorita faptului ca furnizori de Internet sunt nevoiti sa-si identifice clientii unic , sunt implementate protocoale de securitate care verifica autenticitatea clientilor pe baza placilor de retea din calculatoarele cu care acestia se conecteaza la Internet si ale caror MAC-uri sunt deja inregistrate in bazale de date ale furnizorului din prima clipa in care acesta s-a conectat. Exista si posibilitatea ca pe parcursul folosirii calculatorului sa fim nevoiti sa schimbam calculatorul sau placa de retea , iar atunci automat se siteaza conexiunea la Internet pana in momentul interventiei unui specialist de la furnizor.

În cazul în care folosiți, asemenea majorității covârșitoare a utilizatorilor de Internet, sistemul de operare Windows, indiferent de versiune, va trebui să parcurgeți următorii pași pentru a vedea adresa MAC a plăcii d-voastră de rețea:

a). folosirea butonului Start -> Run , iar in chenarul ce se va deschide introducem comanda cmd sau command (versiuni mai vechi de windows) , ca in Figura 2.1.2 :

Figura 2.1.2. Fereastra pentru comenzi

b).tot prin folosirea butonului Start – > Run , in acelasi chenar tastam comanda ipconfig -all/more , care va genera un raspuns asemanator celui din Figura 2.1.3

Figura 2.1.3. Fereastra cu informatiii pentru adresa MAC

2.2. IP-ul fiecarui utilizator

Dispozitivul care se conecteaza sau este introdus intr-o retea foloseste o adresa IP (Internet Protocol) , care este de fapt un protocol care asigura un serviciu de transmitere a datelor , fara o conexiune permanenta. Indentificand fiecare interfata logica a echipamentelor conectate printr-un numar care poarta denumirea de "adresa IP" . Versiunea standard folosita in majoritatea cazurilor este IPv4. Standardul in IPv4 pentru comunicarea in Internet este reprezentata pe 32 de biti (ex. 192.168.2.1) Aceste adrese au o lungime de 32 de biti (4 octeti) si fiecare adresa identifica o retea si o statie de lucru din cadrul acelei retele.

Adresele sunt impartite pe 5 clase :

Tabel 2.2.1. Clase de adrese

Adresele retelelor au toti biti de statie 0 ,le nu pot fi folosite pentru o singura statie. Pe langa acest lucru mai exista si adrese de difuzare , care la randul lor au biti de statie 1. La identificarea statilor se folosesc doar adresele de la clasa A pana la clasa C.

Fiecare bloc de retea nu trebuie obligatoriu alocat doar unei singure retele , acest lucru se face deobicei de catre administrator , care va imparti un bloc in subretele , mai exact mai multe routere pentru uz personal folosesc subreteua 192.168.0.0 – 192.168.0.255 (192.168.0.0/24) .

Ambele tipuri de retea IPv4 cat si IPv6 folosesc subnetarea , care e de fapt impartirea adresei IP in adresa de retea si adresa de statie .Prin folosirea masti de retea , calculatorul stie sa determine unde poate imparti adresa IP . Solutia de subnetare a aparut datorita faptului ca sau epuizat adresele IP.

Pentru a putea afla adresa IP din linia de comanda , deschidem Linia de Comanda si apoi scriem ipconfig , acesta comanda va afisa o lista a adaptoarelor de retea din calculatorul vostru si binenteles detali despre acesta (Figura 2.1.4. ) .

Figura 2.1.4. Fereastra cu informatiii pentru adresa IP

Pentru fiecare adaptor de retea sunt afisate , in campurile alaturate , atat adresa IPv4 cat si IPv6.

Figura 2.1.5. Informatii adresa IP

Mai multe informati despre parametrii acceptati de comanda ipconfig puteti sa tastati ipconfig/?.

2.3. Tipuri de retele de calculatoare

Deobicei o retea de calculatoare conecteaza intre ele un numar de mai multe calculatoare cu scopul de a se putea accesa datele sau programele de pe un claculator prin alt calculator, ele find conectate la aceasi retea. Binetetles ca se impun si cateva protocoale se securitate pentru a limita accesul la anumite informati fara acceptul adminitratorului de retea.

Sunt mai multe metode de a conecta calculatoarele intre ele si binenteles inca se dezvolta noi metode , incepand cu cabluri metalice , fibra optica , submarine si terminand cu legaturi fara fir prin unde radio cum ar fi Wireless , WiMAX sau Bluetooth , se mai poate prin infrarosu exemplu IrDA sau prin intermediul satelitilor de telecomunicații. Retelele de telefonie , televiziune sau radio transmiterea informatilor originale sunt mai intai tranformate in date ca mai apoi sa poate fi transmise prin retelele de Internet sau retelele de calculatoare, find un mare avantaj fata de transmiterea lor prin retele analogice.

Modul prin care elementele unei retele se conecteaza intre ele se numeste topologie .Topologia determina drumul pe care il face informatia din punctul X in punctul Y. Principalele tipuri de tipologi pentru retelele LAN sunt :

topologia Bus (înseamnă magistrală) – are o fiabilitate sporită și o viteză mare de transmisie;

topologia Ring (inel) – permite ca toate stațiile conectate să aibă drepturi și funcțiuni egale;

topologia Star (stea) – oferă o viteză mare de comunicație, fiind destinată aplicațiilor în timp real.

Topologia unor retele mai mari este formata din combinarea celor 3 tipuri de topologii. Tipuri de topologi sunt prezentate mai jos in figura 2.3.1.

Figura 2.3.1. Tipuri de topologi ale retelelor de calculatoare

O alta clasificare ale retelelor de calculatoare se mai poate face si dupa relatile de functionare dintre elementele acelei retele , ca de exemplu : Active Networking Architecture, Client-Server Architecture și Peer-to-peer (workgroup) Architecture.

Un alt tip de clasificare functionala foloseste termenii : Storage Area Network (SAN) sau Network Attached Storage (NAS) . SAN este o retea special facuta pentru interconectari eficiente a dispozitivelor de stocare a datelor , NAS sunt dispozitive de stocare facute pentru a fi atasate direct la retea si automat sunt disponibile pentru toate calculatoarele din acea retea.

Dupa tipul de extindere retelele se mai impart si in retele de tip : LAN , WAN , MAN si un tip de retea mai nou PAN . Retelele care au in componentat cateva sute de calculatoare legate intre ele direct ,gen cladire de birouri sau campus universitar ,sunt considerate retele relativ mici si poarta denumirea de Local Area Network (LAN).Se poate ca acesta retea LAN sa fie conectata nu prin fir ci prin unde radio , atunci ea poarta denumirea de WLAN , adica Wireless Local Aria Network.Retelele care se intind pe o arie mai mare adica pe teritoriul unei tarii sau a unui continent poarta denumirea de Wide Aria Network (WAN).In trecut acest tip de retea si-l permiteau doar companile foarte mari deoarece era foarte scump de facut si intretinut.In prezent majoritatea conexiunilor de tip WAN folosesc Internetul , care nu poate fi controlat de utilizator dar este foarte convenabil din punct de vedere financiar. Personal Area Network (PAN) este de fapt o retea mica facuta doar pe cativa metri ce conecteaza dispozitivele dintr-o incapere.

Mai exista un tip de retea Campus Area Network (CAN) care este de formata din mai multe retele LAN interconectate pe o suprafata mai mare , cum ar fi un campus universitar ,aprope ca o retea de tip MAN. Normal acest tip de retea a fost creat pentru a unii mai multe departamente dintr-un campus ,pentru ca studenti sa aibe acces din camerele de camin la toate informatile necesare de pe internet si departamentele respective.

Capitolul 3

Aprofundarea teoretica

3.1. Sistemele de administrare ale bazelor de date

Baza de date reprezinta posibilitatea de a stoca informati si date pe un suport extern si de a avea acces la aceste informati foarte rapid. Aceste baze de date sunt salvate in fisiere si ele sunt mutate cu ajutorul unor sistele de gestiune a bazelor de date.

Termenul de bază de date apare în 1967 și reprezintă o colecție de informații corelate despre subiectul studiat, relațiile logice dintre aceste informații și tehnicile de prelucrare corespunzătoare (sortare, regăsire, apreciere, ștergere, adăugare, inserare, modificare). Sistemul de gestiune a bazelor de date S.G.B.D. reprezintă sistemul de programe care permite construirea bazelor de date, introducerea de înregistrări în bazele de date și dezvoltarea de aplicații privind bazele de date, permițând astfel accesul utilizatorului la date printr-un limbaj de nivel înalt, apropiat modului obișnuit de operare; el reprezintă o interfața între utilizator și sistemul de operare.

Un sistem de gestionare a bazelor de date contine urmatoarele :

limbajul de descriere a datelor (LDD) , acesta permite descrierea structurii acesteia , a relattiilor dintre componentele respective , a componentei si a drepturilor de a accesa baza de date de care utilizator (BD) ;

limbajul de cereri (LC) ,este locul unde se scriu programele pentru a se realiza prelucrarea datelor ;

limbajul de prelucrare a datelor (LPD) ,acesta permite, operati de inserare ,stergere, cautare sau modificare a unui element , din BD si realizarea de statistici.

Gestionarul bazei de date are cateva sarcini principale .Ele sunt :

identifica informatia si face o organizare corespunzatoare a aplicatiilor pentru a reduce reduntanta acesteia ;

din reducerea reduntantei rezulta anumite inconsistente , care trebuie eliminate

gestioneaza utilizarea simultanta a bazei de date de catre mai multi utilizatori

standardizeaza informatia din baza de date

asigura protocoalele de securitate a BD-ul prin urmarirea si verificarea utilizatorilor in momentul in care acestia acceseaza componentele acestuia.

in cazul in care BD-ul este acessat de mai multi utilizatori simultant asigura sincronizarea informatiei pentru a fi transmisa pe mai multe sisteme.

Din punctul de vedere a tipului de exploatare a bazei de date , exista doua feluri de utilizatori, utilizatori care cer si folosesc informatia fara a sti programare si utilizatori care sunt programatori care fac aceste aplicati le compileaza si le memoreaza in fisiere program ,ca mai apoi ele sa poata fii lansate si folosite.

La fel sunt si administratorii unei baze de date . Sunt administratori de baza de date care , care stabilesc anumite reguli din punct de vedere al securitatii , modului de memorare a datelor la nivel fizic , drepturile pe care le au utilizatori , asigura intretinerea acesteia si sunt administratori de sistem care stabilesc bazele de date de pe un sistem, aloca spati de memorare si asigura drepturi de acces.

3.2. Proiectarea bazei de date

Pentru a avea o baza de date precisa si actualizata, ea trebuie proiectata corespunzator .Atat timp cat ea este proiectata corespunzator din toate punctele de vedere , automat ea furnizeaza si date corecte si esentiale. Ca urmare a acestei proiectarii corecte baza de date va indeplinii toate cerintele noastre si poate fi mai usor de modificat.

Organizarea informatilor se face in tabele , ea poate sa contina si un singur tabel.Un tabel este format dintr-un rand si se numeste inregistrare si fiecare coloana se numeste camp. Inregistrarea este modalitatea de a combina anumite informatii, iar campul este un element singulart de informatie care apare in orice inregistrare.

Exista anumite principi care ghideaza procesul de proiectare al unei baze de date. Unul este acela ca informatiile dublura au o influenta negativa, ele consumand spatile si creste posibilitatea producerii de erori si inconsistente.Al doilea este importanta corectitudinii si caracterul complet al informatiei. Daca aceste principi nu se respecta automat baza de date contine informati gresite si in acelasi timp orice rapoarte extrase pe baza acelor informati devin automat si ele gresite.

Proiectarea acestui proces urmareste anumiti pasi :

determinarea scopului bazei de date.

organizarea si descoperirea informatiilor necesare.

adunarea si inregistrarea tututror informatiilor in baza de date.

impartirea informatiilor in tabele.

elementele de informatie se impart in subiecte majore ,iar apoi ele devin tabele.

transformarea elementelor de informații în coloane: se va decide ce informații se vor stoca în fiecare tabel. Fiecare element devine un câmp care este afișat sub formă de coloană în tabel .

se va specifica cheia primara pentru fiecare tabel ,ea foloseste la identificarea randului .

se va face configurarea datelor , asocierea datelor dintru tabel cu alt tabel , adugarea de noi campuri pentru tabelele existente sau noi create.

rafinarea proiectarii consta in analiza acesteia pentru eliminarea erorilor , mai exat se introduc anumite informati pentru a vedea daca rezultatul dorit este corect.

se vor aplica reguli de normalizare a datelor pentru a vedea daca tabelele sunt corect structurate.

Baza de date proiectata corect , este a cea baza care imparte informatiile in tabele pe baza subiectelor , pentru a reduce datele redundante , furnizeaza informatiile dorite pentru asocierea lor dupa necesitati , asista si securizeaza corectitudinea informatiilor si sincronizeaza necesitatile de procesare a datelor si cele de raportare.

In majoritatea cazurilor baza de date este utilizata de mai multe persoane , deci este o baza de date mai complexa , deobicei aceaste situati se intalnesc la marile corporati si campusuri universitare. In aceste cazuri trebuie introduse mai multe paragrafe cu cine si de catre cine va putea fi utilizata acesta baza de date.Acest lucru se va face la inceput cand se executa proiectul acestei baze. Acest lucru usureazaconcentrarea asupra obiectivelor atunci cand se vor lua decizi.

Prin crearea si proiectarea mentala a rapoartelor si a listelor postale ,aceste doua lucruri ne ajuta la identificarea elementelor de care avem nevoie in baza de date. Pentru inceput se construieste un prototip pentru fiecare raport sau listare de iesire si se ia in considerare fiecare element necesar pentru a produce raportul.Informatiile trebuie impartite in cele mai mici parti utile. Deobicei pentru sortarea, cautarea sau raportarea unei celule in functie de elementul informational , acel element trebuie pus intr-un camp propriu.

Pentru impartirea informatiilor in tabele se vor alege cele mai importante entitati sau subiecte. Tentatia la prima examinare a listei preliminare de elemente este de a pune toate elementele intr-un singur tabel. La priectarea bazei de date se va incerca sa se inregistreze fiecare informatie o singura data. In cazul in care se vor repeta informtiile in mai multe locuri , automat informatia se va plasa intr-un tabel separat.

Daca am ales subiectul ce este reprezentat de un tabel , atunci coloanele din tabelul respectiv trebuie sa stocheze informati doar despre acel subiect. Stabilirea coloanelor dintr-un tabel se face prin deciderea informatiei necesare pentru acel subiect inregistrat in tabel .Dupa stabilirea setului de coloane initial pentru fiecare tabel in parte putem sa imbunatatim coloanele.Tot aici trebuie specificat daca informatiile din baza de date au caracter intern sau si international. Mai jos osa prezentam cateva sfaturi pentru o mai buna organizare si stabilire a coloanelor din baza de date :

de cele mai multe ori nu se vor include resultatele unor calcule in tabele.

stocam cele mai mici aprti logice din informatie , ulterior find greu de gasit date individuale daca se combina mai multe tipuri de informatii intr-un camp.

Daca sa facut imbunatatirea coloanelor de date din tabele , automat se poate alege cheia primara a fiecarui tabel. Un tabel ar trebuii sa includa cel putin o coloana care identifica in mod unic , fiecare rand stocat in tabel. Pentru acest lucru se utilizeaza un numar unic pentru identificare , se poate pune o serie sau un ID. Aceste informatii sunt de fapt cheia primara a tabelului.

Existenta unui identificator unic pentru un tabel ne ofera posibilitatea sa utilizam acel identificator ca si cheie primara , dar numai daca valorile din acea coloana sunt diferite pentru fiecare inregistrare.Nu putem utiliza numele unor persoane pentru cheie primara,deoarece ele nu sunt unice.

Cheia primara tot timpul trebuie sa aibe o valaore. Daca cumva acesta valoare a coloanei devine neatribuita sau necunoscuta , ea nu se poate utiliza ca si componenta intr-o cheie primara. Cheia primara trebuie aleasa in functie de imposibilitatea de a schimba valoarea acesteia. Intr-o baza de date se poate utiliza cheia primara unui tabel si ca referinta in alt tabel , dar daca acesta cheie primara se modifica , atunci modificarea se aplica oriunde se face referire la ea. Daca acest lucru nu se face atunci reduce sansele de a desincroniza cheia primara cu celalalte tabele care fac referinta la ea. Deobicei se foloseste ca si cheie un numar arbitrat.

Existenta unei coloane sau a unui set de coloane care se pot utiliza ca si cheie primara , automat luam in considerare utilizarea coloanei care are tipul de date AutoNumerotare .Utilizand acest tip de date AutoNumerotare , programul atribuie o valoare automat. Identificatorul care nu are date si nu contine informatii care sa descrie randul care il reprezinta sunt ideali pentru rolul de cheie primara, deoarece acestia nu se modifica.

În unele cazuri, este de preferat să se utilizeze două sau mai multe câmpuri care împreună asigură cheia primară a unui tabel. Când o cheie primară utilizează mai mult de o coloană, aceasta se mai numește și cheie compusă.

Impartirea informatiilor in tabel , este precedata de asocierea utila a informatiilor. In orice baza de date relationala, informatiile se impart in tabele separate , bazate pe subiecte.

In momentul in care am creat tabelele , campurile si relatiile necesare , trebuie sa cream si sa umplem tabelele cu date esantion si sa incercam sa lucram cu informatiile prin creare, adaugare de inregistrari , modificare. Incercand sa lucram cu aceste informatii , v-or iesi in evidenta problemele de genul inserari uni tabel nou sau de separarea altor doua pentru evitarea duplificarii. Dupa toate acetea se verifica daca se poate utiliza baza de date pentru a obtine raspunsurile cerute. Vom cauta dubluri inutile de date si in cazul in care gasim dubluri schimbam proiectarea pentru a le sterge. In timp ce inaintam cu testarea bazei de date initiale o sa observam ca se pot face imbunatatiri. Se mai pot face reviziuri asupra structurii tabelului pentr a gasii grupuri repetitive , iar daca acestea exista vom reproiecta tabelul.

Un alt pas din cadrul proiectarii unei baze de date sunt regulile de normalizare a datelor , care la randul lor sunt utilizate pentru a verifica daca tabelele sunt structurate corect.Procesul prin care se aplica aceste reguli poarta denumirea de normalizarea bazei de date si este foarte utila daca deja a fost creat un proiect preliminar si au fost determinate toate elementele informationale.

Regulile de normalizare se aplica succesiv si ele ne asigura ca proiectul ajunge la forma normala. Prin acest lucru intelegem ca exista o singura valoare la fiecare intersectie dintre o coloana si un rand si niciodata nu o sa existe o lista de valori. O a doau forma normala inseamna ca fiecare coloana care nu este cheie sa depinda total de cheia primara , regula folosindu-se atunci cand se utilizeaza o singura cheie primara care contine mai multe coloane.

A treia formă normală necesită ca fiecare coloană care nu este cheie să depindă de întreaga cheie primară, dar și ca toate coloanele care nu sunt chei să fie reciproc independente. Un alt mod de a spune aste este că fiecare coloană care nu este cheie trebuie să depindă de întreaga cheie primară și numai de cheia primară.

3.3.Limbajul MySQL

MySQL(Structured Query Language) sistem de gestiune a bazelor de date relationale super rapid si foarte bine pus la punct.Acesta permite sa stochezi , sa caute , sa sorteze si sa regaseasca datele foarte repede si foarte eficient. MySQL este disponibil în mod public din 1996, dar istoria dezvoltării sale începe încă din 1979 și a câștigat de mai multe ori premiul cititorilor – Linux Journal Readers’ Choice Award.

Acest limbaj de programare este disponibil si gratis dar si sub licenta comerciala , poate fi folosit atat in sistemul de operare Windows, cat si pe Unix. Binenteles ca la codurile sursa se pot aduce modificari si poate fi redistribuit mai apoi gratis.

SQL este unul din cele mai folosite limbaje de programare pentru bazele de date si normal este ca majoritatea programatorilor sa foloseasca acest limbaj pentru crearea acestor baze. SQL- ul este limbajul standard folosit pentru mutarea si regasirea datelor dintr-o baza de date relationala. Cu ajutorul acestui limbaj de programare , administratori sau programatori pot face diferite lucruri :

schimbarea valorilor de configurare pentru siguranta sistemului.

sa interogheze baza de date referitor la anumite informati.

modifica structura unei baze de date.

modifica drepturile utilizatorilor.

actualizeaza continutul bazei.

Mai jos o sa prezentam unele din cele mai frecvente si cunoscute comenzi din MySQL :

SHOW DATABASES – afișează lista cu numele bazelor de date existente

USE "numele bazei" – alege baze de date cu care lucrăm în continuare

CREATE DATABASE "numele bazei" – crează o bază de date

CREATE TABLE "tabel unu" (camp a TEXT) – crează tabelul ‘tabel_unu’ cu un câmp numit ‘camp a’ al cărui tip este TEXT

DROP TABLE "tabel unu" – șterge tabelul numit

DROP DATABASE "numele bazei" – șterge baza de date

INSERT INTO tabel (camp1, camp2,) VALUES (valoarea1, valoarea2,); – introduce în tabelul cu numele ‘tabel’, în ‘campul1′ ‘valoarea1′, în ‘campul2′ ‘valoarea2′.

SELECT * FROM "tabel" – afișează tot (*) ce se gaseste în tabel

SELECT campul1 FROM tabel; – afișare conținut câmp ‘campul1′ din tabelul ‘tabel’.

DELETE FROM tabel WHERE conditi; – șterge înregistrarea din tabel.

Ca si o lege nescrisa este de prefereat sa nu folosim diacritice in numele tabelelor, campurilor sau a bazelor de date , chit ca limbajul MySQL contine diacritice.

Nu se pot folosi ca si nume la tabele sau la campuri cuvinte rezervate , adica nume de functi , tipuri de caractere din SQL cum ar fi DROP , COLUMN sau CREATE. Semnul steluta (*) in limbajul MySQL inseamna tot.toate. GROUP BY este o instructiune care ne poate ajuta la gruparea rezultatelor astfel sa nu vedem duplicate ci doar valori unice.Limitarea numarului de rezultate se face cu ajutorul instructiunii LIMIT ,urmata de 2 cifre ,prima insemnad dela ce inregistrare sa inceapa si cea de-a doua arata cate inregistrari vrei sa iti afiseze. Pentru a sterge o inregistrare se foloseste comanda DELETE , iar pentru stergerea unei baze sau a unui tabel se foloseste DROP.Pentru modificare exista comanda UPDATE , iar pentru schimbarea structurii unui tabel sau sa adaugam alte coloane folosim ALTER TABLE. Indexul este cel mai folosit tip de id ,comanda este INDECSI .Acest id este un numar unic de identificare pentru un elemet al unui tabel. Putem crea un camp care introduce automat un numar pentru fiecare rand nou adaugat , pe care il putem folosii la afisare.

MySQL stochează fizic datele unui tabel într-un fișier pe hard disc și cu cât tabelul e mai mare, cu atât mărimea acestui fișier crește. Putem verifica mărimea maxima pentru un tabel cu ajutorul comenzilor SHOW TABLE STATUS sau myisamchk -dv table_name.

3.4. Limbajul PHP

Limbajul PHP este perfect pentru a crea o pagina web dinamica. Foarte usor de invatat , este gratis, ruleaza pe mai multe platforme si se poate conecta la mai multe tipuri de baze de date. Lucrul cel mai important referitor la acest limbaj este ca poate fi imbracat cu cod HTML , astfel se pot crea pagini HTML statice si in unele cazuri se poate introduce dinamismul cu ajutorul limbajului PHP.

Limbajul PHP s-a "născut" în 1994 din nevoia lui Rasmus Lerdorf de a afla câte persoane ii vizitează CV-ul online. El a denumit setul de scripturi create PHP, acronimul pentru Personal Home Page. Pe parcursul următorilor trei ani limbajul a evoluat dar adevăratul succes a început să îl cunoască de când Zeev Suraski și Andi Gutmans au rescris motorul PHP de la cap la coadă, motor care poartă din versiunea 4 a PHP numele Zend, o combinație de litere din prenumele creatorilor săi: Zeev și Andi.

Limbajul PHP are un foarte mare suport din partea comunitatii online , el find folosit la crearea majoritatii site-urilor .

Cel mai cunoscut limbaj scriptic pentru crearea site-urilor web interactive este interpretorul PHP. Diferenta dintre el si alte limbaje de scripting , gen JavaScript este faptul ca este un interpretor server-side, adica operationile sunt executate pe server nu pe calculatorul utilizatorului.Pentru a testa o pagina PHP este nevoie de un pachet PHP instalat si de un server web Apache. Acest limbaj permite folosirea elementelor specifice limbajelor de programare , iesirea standard a acestui script devine intrarea standard pentru programul ce vizualizeaza pagina web.

Pe lângă manipularea conținutului paginilor de web, PHP poate trimite headere HTTP pentru autentificare, poate sa seteze cookie-uri sau se redirectioneze utilizatorii.. Cu ajutorul bibliotecilor externe de funcții poate pastra fișiere XML, crea sau sa manipuleze imagini, animați Shokwave Flash, PDF-uri sau poate sa se conecteze la un server de mail, acestea find doar câteva din funcțiile pe care le poate îndeplini.

Interceptorul parcurge documentul pe care la accesatmpana in clipa in care acesta intalneste un marcaj de deschidere care arata faptul ca textul care urmator se poate interpreta in cod PHP.Textul care nu a putut fi interpretat ca cod PHP este trimis la iesire exact cuma fost preluat la intrare. exista mai multe marcaje care indica inceperea unei secvente PHP , remarcate se fac doar doua care se folosesc deobicei.

Prima posibilitate este atunci cand dorim ca documentul sa-si pastreze specificatiile XML si atunci singura varianta de a insera codul PHP este prin folosirea secventei urmatoare :

<?php

//cod PHP

?>

Posibilitatea a doua este prin utilizarea marcajului SCRIPT . Includerea este asemanatoare ca si la JavaScript :

<SCRIPT language = "php">

//cod PHP

</SCRIPT>

Binenteles ca sunt si alte posibilitati de utilizare a PHP-ului , acestea sunt situati particulare. Se poate iesii si intra in modul PHP ori de cate ori este necesar in pagina , normal aceasta varianta este folosita si utila atunci cand se lucreaza pe texte de dimensiuni mari. Instructiunile PHP sa poata fi interpretate corect , ele trebuie sa fie saparate de caracterul "," . In acest limbaj caracterele pot fi inserate folosint sintaxe din limbajul C sau C++ si shell-urile Unix. Secventa de caractere " // " sau "#" indica faptul ca restul de linie reprezinta un comentariu. Inserarea a mai multor comentarii pe mai multe linii trebuie delimitate de secventa " /* " la inceput si de secventa " */" la sfarsit.

3.5. Limbajul JavaScript

Limbajul Javascript este un limbaj de programre orientat pe obiect , bazat pe conceptul prototipurilor. In general este folosit la introducerea unor functionalitati in paginile web , codul find rulat de catre browser. Se stie ca limbajul JavaScript este folosit la construirea site-urilor web si pentru a accesa obiecte incastrate in alte aplicati.

In ciuda faptului ca multa lume crede ca Java si JavaScript sunt c-am acelasi tip de limbaj , ele chair nu se aseamana deloc.Amandou au la baza limbajul C < dar JavaScript se apropie mai mult de limbajul Self.Cu ajutorul acestui limbaj , programatori pot ingloba in paginile lor script-uri pentru diferite activitati , crearea de meniuri si efecte animate.In general browser-ele retin in memoria lor reprezenatrea unei pagine web sub forma unui arbore de obiecte care sunt puse la dispozitia script-urilor JavaScript si pe care binenteles acestea le pot citi si manipula. Acest tip de arbore poarta denumirea de Document Object Model sau prescurtat DOM.

3.6. Serverul WEB Apache

Serverul HTTP Apache este un server de tip open source.Acesta joaca un rol important in dezvoltarea mediului web , find folosit de aproximativ 50% din paginile web de pe glob. Serverul are o semnificativa importanta in dezvoltarea Internetului, reprezentant o alternativa remarcabila la Netscape Communications Corporation , si a evoluat rapid in functionalitatea si performante concurand cu alte servere bazate pe Unix. Apache a dezvoltat o comunitate importanta de programatori sub fundatia Apache Software Foundation. Aplicatia paote fii folosita pe o gama larga de platforme incluzand Unix, FreeBSD, Linux, Solaris, Novell NetWare, Mac OS X, Microsoft Windows si OS/2.

Apache se caracterizeaza ca fiind un software gratuit si open source si incepand cu aprilie 1996 este considerat cel mai popular server HTTP. El suportand o mare varietate de module care in maresc functionalitatea , ele variind de la tipuri sideprogramming pana la scheme de autentificare. Limbajele care care sunt suportate de Apache sunt : mod perl , mod python , Tcl si PHP .alte tipuri de module : SSL si TSL , un modul proxyun , modul de rescriere URL , custom log files si suport de filtrare mod include si mod ext filter. O alta calitate a serverului este gazduirea virtuala, care este de fapt posibiliattea de a gazduii mai multe site-uri pe acelasi server.

Principalul adversar al acestui server este Microsoft Internet Information Service (IIS), dar Apache este folosit pe unele din cele mai mari site-uri din lume.

Exista asa numitul pache WAMP , ca server HTTP , numele provine de la Windows Apache-MySQL-PHP , ca este de fapt o soluti de server web Apache care vine cu un modul PHP instalat si combinat cu o baza de date MySQL. Administrarea acestor baze de date se face cu un phpMyadmin si SQLiteManage.

3.7. Notiuni de baza despre HTML și CSS

HyperText Markup Language (HTML) e limbajul de marcarecare este utilizat la crearea paginilor web ce pot fi aratate intr-un browser. Defapt scopul acestui limbaj este de a prezenta informatia , paragrafe ,fonturi , table si alce cele decat sa descrie semantica documentului. HTML-ul este orientat inspre prezentarea documentului text pe o singura pagina folosind un software specializat care poarta denumirea de agent utilizator HTML.Acesta furnizeaza mijloace prin care continutul unui documet poate fii adnotat cu difeirte tipuri de metadate si indicati de redare. Indicatile pot fi de genul decoratiuni minore ale textului , adica sublinierea unui cuvant sau micsorarea unei litere pana la scripturi super sofisticate , harti de imagini si formulare.

Acest limbaj este un text proiectat pentr a oute fi editat si citit de utilizatori cu ajutorul uni editor de text simplu. Oricum pentru a putea sa modifici sau sa scrii asemenea pagini este necesar sa ai ceva cunostinte in limbajul HTML.Mai exista editoare de grafica cum ar fi Macromedia Dreamweaver , Adobe GoLive sau Microsoft FrontPage care permit ca paginile web sa fie deschise asemanator documentelor Word , dar cu observatia ca acete programe genereaza codul HTML de o calitate mai slaba.

Acest tip de limbaj se mai poate genera direct utilizand tehnologi de codare din partea serverului cum ar fi PHP , JSP sau ASP.

Majoritatea aplicatiilor de email folosesc un editor HTML , introdus pentru compunerea mail-urilor si un motor de prezentare a acestor tipuri de mail-uri. HTML – ul sta la baza paginilor web , ele fiind formate din etichete sau tag-uri si au extensia .html . aproape toate etichetele sunt pereche, una deschide eticeta celalta inchide eticheta si automat browser-ul interpreteaza aceste etichete si afiseaza rezultatul pe ecran.Principala pagina a unui domeniu este fisierul indexhtml , ea fiind setata sa fie afisata automat la vizitarea unui anumit domeniu.

HTML-ul are componenta documentelor formata din :

versiune documentului HTML

etichetele din zona head

etichetele din zona body

Versiunile HTML sunt si ele impartite pe 3 categori : HTML 4.01 Strict , HTML 4.01 Transitional si HTML 4.01 Frameset.paginile HTML incep cu cu eticheta <html> si se termina cu eticheta </html> , iar in interiorul acestor etichete gasim perechile <head>si <body>,</body>.

Etichetele tip meta ce contin descrierea paginii , cuvinte cheie ,date despre autor sau informati utile motoarelor de cautare si au format de tipul <META NAME="nume CONTENT="continut>. Acesta gazduieste toate etichetele afisate de browser pe ecran.

Sunt trei tipuri de elemente de marcare in HTML :

exista marcarea structurala care descrie scopul unui text.

exista marcarea pentru prezentare care descrie cum apare textul , indiferent de functiile sale.

exista marcarea pentru hyperlink care leaga parti ale unui document cu alte documente.

Doar marcatori de prezentare determina cum va fii prezentat continutul din interiorul marcatorului. Ceilalti marcatori vor spune browser-erului ce obiecte pot sa redea sau ce functii o sa execute.

Un fisier HTML are urmatoare structura de baza :

<html>

<head>

<title>Titlul</title>

</head>

<body>

</body>

<head>

</html>

Intre tag-urile body se scriu celalalte instructiuni , tag-ul body permitand stabilirea fundalului si a culorilor hyperlink-urilor.

Fisierul CSS (Cascading Style Sheet) permite separarea continutului HTML de stilul ce se afiseaza in pagina .Utilizam codul HTML pentru aranjarea continutului in pagina, insa toata prezentarea , fonturi , culori , borduri si alte caracteristici sunt realizate din fisierul CSS. Fisierele CSS se pot folosi in doua moduri , metoda interna si metoda externa.

Pentru aplicarea metodei interne fiecare fisier HTML ca contine codul CSS folosit la stilizare , insemnand ca atunci cand dorim sa facem o modificare de stil va fi necesar sa facem acele modificari in toate paginile care contin acel stil. Metoda acesta este aplicabila daca este vorba de trei sau patru pagini , pentru mai multe pagini nu este convenabil din punct de vedere al timpului.

Orice fisier extern poate fi realizat cu orice editor simplu de text sau cu un editor avansat cum ar fii Dreamweaver. Fisierele CSS nu contin coduri HTML ci doar coduri CSS, ele trebuind salvate cu extensia .css . Inserarea fișierului extern în paginile HTML se face foarte ușor, prin plasarea unui link (legatura) în secțiunea <head> </head> a fiecarei pagini pe care dorim să folosim stilul respectiv.

Pentru aplicare metodei externe , toate paginile HTML vor folosii acelasi fisier de stil , insemnand ca atunci cand vrem safacem o modificare care sa aibe efect pe toate celalalte pagini , este destul sa modificam un singur fisier , cel de stil si efectul se va implementa pe toate celalalte pagini HTML ce folosesc acel fisier. Asadar cu aceasta metoda putem sa facem modificari indiferent de numarul de pagini web.

Mai exista o modalitate si anume stilurile in linie , acestea se pot defini chair si in codul HTML , in elemntul pe care doril sa-l stilizam. Acesta metoda nu ne permite schimbari rapide si usoare pe mai multe fisiere in acelasi timp.

In general nu toate browser-erele interpreteaza la fel stilurile ,CSS-ul va fi interpretat diferit , ceea ce va duce la probleme si pierdere de timp , dar exista si alte metode de a rezolva aceste interpretari , despre care vom vorbi la timpul potrivit.

3.8. Dezvoltarea in mediul Dreamweaver

Macromedia Dreamweaver este un produs cu care se pot crea pagini web. Ultima versiune a fost creata de catre Macromedia in februarie 2015 in versiunea CC. Cu primele versiuni se putea doar edita simple pagini HTML de tipul WYSIWYG , iar acum cu versiunile noi se pot implementa functii de editare avansate si suport pentru alte tehnologi cum sunt CSS-ul sau JavaScript.Acest produs poate sa ruleze pe diferite platforme software , cum ar fii Windows , Mac si cu ajutorul unor emulatoare software poate sa ruleze si pe platforma Unix.

Editorul Dreamweaver poate ascunde detalile de implementare a paginii HTML , facand posibila crearea unei pagini web si de catre unii utilizatori fara experienta. acesta facilitate este criticata de programatori cu experienta deoarece , acestia creaza pagini mult mai mari decat este necesar si automat accesarea lor este mult mai grea si mai dificila. Adesea a mai fost criticat si pentru faptul ca produce anumite coduri care nu sunt conform cu standardele W3C , lucrul acesta schimbandu-se cu aparitia versiunilor mai recente. Mascromedia a ridicat suportul pentru tehnologia CSS precum si alte modalitati de design fara a fi necesar folosirea design-ului pe baza de tabel.

Dreamweaver permite folosirea majoritatii browser-elor instalate pe calcculatoarele utilizatorilor , pentru previzualizarea site-ului creat. El contine si cateva utilitare pentru a administra aceste site-uri , utilitara pentru a gasi si modifica paragrafe sau o linie de cod , pe baza oricaror parametri specificati de catre utilizator.

Odată cu apariția versiunii MX, Macromedia a încorporat utilitare de generare dinamică a conținutului. De asemenea este oferit suport pentru conectarea la baze de date (cum ar fi MySQL) pentru a filtra și afișa conținutul folosind script-uri de genul PHP, ColdFusion, Active Server Pages (ASP) și ASP.NET, fără a avea nevoie de o prealabilă experiență în programare.

Un aspect foarte lăudat al Dreamweaver-ului îl reprezintă arhitectura sa extensibilă. Extensiile, așa cum sunt ele cunoscute, sunt mici programe, pe care orice dezvoltator le poate scrie (de obicei în HTML și JavaScript) și pe care oricine le poate descarca și instala, acestea aducând un spor de performanță și funcționalitate îmbunătățită programului. Există o comunitate de dezvoltatori care produc aceste extensii și le publică pentru probleme de dezvoltare web, de la simple efecte rollover până la soluții complete de vânzare online.

Capitolul 4

Proiectarea de detaliu a aplicatiei

4.1. Arhitectura programului

Figura 4.1.1. Arhitectura programului

4.2. Descrierea componentelor

Dintre aceste module prezentate, cel pentru manipularea utilizatorilor este accesibil doar administratorului, acesta având acces doar la acest tip de operații. Administratorul de retea este cel care are acces la modulele care manipulează datele utilizatorilor de retea, inclusiv posibilitatea de emitere de adresa MAC, adresa IP,drepturi,restrictii și de vizualizare a unor informații, sub formă tabelară, necesare pentru procesul de luare a deciziilor. Un utilizator obișnuit, neautentificat nu are accesul la datele privitoare la utilizator. Legătura dintre aceste module este asigurată de conexiunea la baza de date, astfel acestea partajând aceleași informații.

Securitatea este implementată la nivelul interfeței cu baza de date, realizate prin PHP. Astfel orice operație se poate efectua doar în urma autentificării, realizată cu ajutorul sesiunilor.

În urma unei autentificări reușite, meniul devine activ, astfel că utilizatorul poate selecta opțiunea pe care o dorește prin simpla apăsare a butonului corespunzător din meniu. Umătorul pas în utilizarea aplicației îl reprezintă introducerea datelor de la tastatură, urmată de procesarea acestora fie prin stocarea lor în baza de date, prin afișarea informațiilor pe ecran sau prin imprimarea acestora sub formă de documente. De asemenea, la introducerea datelor este verificată corectitudinea lor, unele dintre ele fiind completate automat astfel încât să se asigure validitatea și corectitudinea lor.

La rularea aplicației se va intra automat în formularul de autentificare verificându-se validitatea utilizatorului și a parolei de logare, cu ajutorul sesiunilor. Numele utilizatorului și parola sunt preluate cu ajutorul funcției POST din căsuțele de text ale formularului, și sunt comparate cu datele existente în tabela corespunzătoare datelor despre utilizatorii de retea.

if (isset($_POST['username']) && isset($_POST['password']) && $_POST['username'] != "") {

$username = $_POST['username'];

$password = $_POST['password'];

include ("connection.php");

$query = "SELECT username ,password, drepturiUtilizator, idUtilizator FROM utilizator WHERE username='$username' AND password='$password'";

$result = mysql_query($query);

while ($row = mysql_fetch_array($result))

{

$today = date('Y-m-d');

$sqlUpdate = "UPDATE `atesta_camin`.`utilizator` SET `ultimaVizita` = '".$today."' WHERE `utilizator`.`idUtilizator` = '".$row['idUtilizator']."' LIMIT 1";

mysql_query($sqlUpdate);

$_SESSION['valid_user'] = $username;

$_SESSION['id_user'] = $row['idUtilizator'];

$_SESSION['drepturi_user'] = $row['drepturiUtilizator'];

}

}

Dacă numele și parola vor fi găsite în tabelă, se va prelua identificatorul corespunzător administratorului, făcându-se posibilă și vizualizarea și utilizarea meniului. În caz contrar se va afișa din nou formularul de autentificare cu mesajul aferent de eroare, și anume „Userul sau parola nu au fost introduse corect!”.

După o autentificare reușită se va face afișarea opțiunilor din meniu și completarea automată a identificatorului corespunzător administratorului, în cazul adăugarii datelor, iar în cazul prelucrării datelor făcându-se selecția pentru a nu avea acces decât la datele utilizatorilor de retea administratorului deja autentificat. Pentru opțiunea „Utilizatori” va fi posibilă adăugarea unui nou utilizator în baza de date cu ajutorul formularului de adăugare. Datele din formularul de adăugare vor fi preluate cu POST din căsuțele de text, ComboBox-uri, sau butoanele radio.

<?php

session_start();

//conectare la baza de date

if (!isset($_SESSION['valid_user'])) {

header("location:login.php");

exit();

}

include ("connection.php");

if (isset($_POST['numeUtilizator']))

{

if ($_POST['password'] != $_POST['password2'])

{

throw new Exception("Error Processing Request: Parola introdusa nu coincide", 1);

}

$sql="UPDATE `atesta_camin`.`utilizator` SET `numeUtilizator` = '".$_POST['numeUtilizator']."',

`adresaUtilizator` = '".$_POST['adresaUtilizator']."' , `password` = '".$_POST['password']."',

`email` = '".$_POST['email']."' , `drepturiUtilizator` = '".$_POST['drepturiUtilizator']."'

WHERE `utilizator`.`idUtilizator` =".$_SESSION['id_user']." LIMIT 1 ";

mysql_query($sql);

}

?>

<!DOCTYPE html>

<html lang="en">

………..

<div class="navbar navbar-fixed-top">

<div class="navbar-inner">

<div class="container"> <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"><span

class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span> </a><a class="brand" href="index.php">

<?php

if (!isset($_SESSION['headerTitle']))

echo "Administrare camin";

else

echo $_SESSION['headerTitle'];

?>

</a>

<div class="nav-collapse">

<ul class="nav pull-right">

<li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown"><i

class="icon-user"></i> <?php echo $_SESSION['valid_user'];?> <b class="caret"></b></a>

<ul class="dropdown-menu">

<li><a href="profil_user.php">Profil</a></li>

<li><a href="login.php?action=logout">Logout</a></li>

</ul>

</li>

</ul>

</div>

<!–/.nav-collapse –>

</div> <!– /container –>

</div> <!– /navbar-inner –>

</div> <!– /navbar –>

<div class="subnavbar">

<div class="subnavbar-inner">

<div class="container">

<ul class="mainnav">

<li><a href="index.php"><i class="icon-home"></i><span>Home</span> </a> </li>

<li><a href="avizier.php"><i class="icon-list-alt"></i><span>Avizier</span> </a> </li>

<li><a href="adresemac.php"><i class="icon-th-large"></i><span>Adrese MAC</span> </a></li>

<li><a href="adresepppoe.php"><i class="icon-signal"></i><span>Adrese PPPoE</span> </a> </li>

<li><a href="studenti.php"><i class="icon-user"></i><span>Studenti</span> </a> </li>

<?php

if (isset($_SESSION['drepturi_user']) && ($_SESSION['drepturi_user'] == "administrator" || $_SESSION['drepturi_user'] == "root") )

{

?>

<li><a href="regulament.php"><i class="icon-list-ol"></i><span>Regulament</span> </a> </li>

<li><a href="mesaje.php"><i class="icon-envelope-alt"></i><span>Mesaje</span> </a> </li>

<li><a href="setari_generale.php"><i class="icon-cogs"></i><span>Setari Generale</span> </a> </li>

<?php

}

?>

</ul>

</div>

<!– /container –>

</div>

<!– /subnavbar-inner –>

</div>

<!– /subnavbar –>

<div class="main">

<div class="main-inner">

<div class="container">

<div class="row">

<div class="span12">

<div class="widget ">

<div class="widget-header">

<i class="icon-user"></i>

<h3>Detalii profil utilizator</h3>

</div> <!– /widget-header –>

<div class="widget-content">

<div class="tab-pane" id="formcontrols">

<form id="edit-profile" class="form-horizontal" action="profil_user.php" method="POST">

<fieldset>

<?php

$query = "SELECT * from utilizator WHERE idUtilizator = ". $_SESSION['id_user'];

$res = mysql_query($query);

while ($row = mysql_fetch_array($res))

{

?>

<div class="control-group">

<label class="control-label" for="username">Username</label>

<div class="controls">

<?php

echo '<input type="text" class="span6 disabled" id="username" value="'.$row['username'].'" disabled>';

?>

<p class="help-block">Username-ul este folosit pentru logare si nu poate fi schimbat.</p>

</div> <!– /controls –>

</div> <!– /control-group –>

<div class="control-group">

<label class="control-label" for="firstname">Nume utilizator</label>

<div class="controls">

<?php

echo '<input type="text" class="span6" id="numeUtilizator" name="numeUtilizator" value="'.$row['numeUtilizator'].'">';

?>

</div> <!– /controls –>

</div> <!– /control-group –>

<div class="control-group">

<label class="control-label" for="firstname">Adresa utilizator</label>

<div class="controls">

<?php

echo '<input type="text" class="span6" id="adresaUtilizator" name="adresaUtilizator" value="'.$row['adresaUtilizator'].'">';

?>

</div> <!– /controls –>

</div> <!– /control-group –>

<div class="control-group">

<label class="control-label" for="firstname">Drepturi utilizator</label>

<div class="controls">

<?php

$selected_root = "";

$selected_administrator = "";

$selected_administrator_retea = "";

switch ($_SESSION['drepturi_user']) {

case 'root':

$selected_root = "selected";

break;

case 'administrator':

$selected_administrator = "selected";

break;

case 'administrator_retea':

$selected_administrator_retea = "selected";

break;

default:

# code…

break;

}

echo '<select name="drepturiUtilizator" id="drepturiUtilizator">

<option value="root" '.$selected_root.'>Root</option>

<option value="administrator" '.$selected_administrator.'>Administrator</option>

<option value="administrator_retea" '.$selected_administrator_retea.'>Administrator retea</option>

</select>';

?>

</div> <!– /controls –>

</div> <!– /control-group –>

<div class="control-group">

<label class="control-label" for="email">Adresa de mail</label>

<div class="controls">

<?php

echo '<input type="text" class="span4" id="email" name="email" value="'.$row['email'].'">';

?>

</div> <!– /controls –>

</div> <!– /control-group –>

<br /><br />

<div class="control-group">

<label class="control-label" for="password1">Parola user</label>

<div class="controls">

<?php

echo '<input type="password" class="span4" id="password1" name="password" value="'.$row['password'].'">';

?>

</div> <!– /controls –>

</div> <!– /control-group –>

<div class="control-group">

<label class="control-label" for="password2">Confirmare</label>

<div class="controls">

<?php

echo '<input type="password" class="span4" id="password2" name="password2" value="'.$row['password'].'">';

?>

</div> <!– /controls –>

</div> <!– /control-group –>

<div class="control-group">

<label class="control-label">Data inregistrare</label>

<div class="controls">

<?php echo $row['dataInregistrare']; ?>

</div> <!– /controls –>

</div> <!– /control-group –>

<div class="control-group">

<label class="control-label">Ultima vizita</label>

<div class="controls">

<?php echo $row['ultimaVizita']; ?>

</div> <!– /controls –>

</div> <!– /control-group –>

<?php

}

?>

<div class="form-actions">

<button type="submit" class="btn btn-large btn-primary">Salveaza</button>

<button class="btn btn-large">Anulare</button>

</div> <!– /form-actions –>

</fieldset>

</form>

</div>

Deoarece pentru a alege numele și etajul, din care provine utilizatorul, au fost folosite butoanele, acestea au fost introduse în două tabele diferite, asocierea făcându-se prin intermediul unui identificator al numelor respective al etajelor.

La fel s-a procedat și în cazul alegerii tipului utilizatorului.

<div class="tabbable">

<ul class="nav nav-tabs">

<?php

$sql = mysql_query("SELECT * FROM etaje");

while($row = mysql_fetch_array($sql))

{

$class_active = "";

if ($row['idEtaj'] == 1)

{

$class_active = 'class="active"';

}

$denumireEtaj = "etaj".$row['idEtaj'];

echo '

<li '.$class_active.'>

<a href="#'.$denumireEtaj.'" data-toggle="tab">'.$row['denumireEtaj'].'</a>

</li>';

}

?>

</ul>

<br>

<div class="tab-content">

<?php

$sql = mysql_query("SELECT * FROM etaje");

while($row = mysql_fetch_array($sql))

{

$class_active = "";

if ($row['idEtaj'] == 1)

{

$class_active = 'active';

}

$denumireEtaj = "etaj".$row['idEtaj'];

echo '<div class="tab-pane '.$class_active.'" id="'.$denumireEtaj.'">';

$sqlCamere = mysql_query("SELECT DISTINCT cameraStudent FROM student where idEtaj = " . $row['idEtaj']);

while($rowC = mysql_fetch_array($sqlCamere))

{

echo '

<form method="POST">

<button class="btn btn-info" formaction="camere.php?id_camera='.$rowC['cameraStudent'].'">'.$rowC['cameraStudent'].'</button>

</form>';

}

echo '</div>';

}

?>

</div>

</div>

<?php

}

else if (isset($_GET['id_camera']))

{

$id_camera = $_GET['id_camera'];

echo "<h2>Camera ".$id_camera."</h2>";

$sql = "SELECT * FROM student where cameraStudent = ".$id_camera;

$res = mysql_query($sql);

echo "<table width=\"100%\" style=\"margin:30px;\"><tr>";

while ($row = mysql_fetch_array($res)) {

echo "<td>";

$calculator = translate_truth($row['calculator']);

$router = translate_truth($row['router']);

print "<h3>". $row['numeStudent'] . " " .$row['prenumeStudent'] . "</h3>";

print "Act identitate: <strong>". $row['serieBuletin'] . $row['numarBuletin'] . "</strong><br>";

print "Studii: <strong>". $row['facultateStudent'] . ", Anul " .$row['anStudiu'] . "</strong><br>";

print "Calculator: <strong>". $calculator . "</strong><br>";

print "Router: <strong>". $router . "</strong>";

echo "</td>";

}

echo "</tr></table>";

}

?>

</div>

Datele privind adresa utilizatorului sunt preluate separat, în consecință a fost folosită concatenarea câmpurilor de adresă, fiind posibilă astfel introducerea adresei complete în câmpul din tabelă.

Inserarea propriu-zisă se va face prin comanda insert a limbajului MySQL.

Pentru modului Utilizator mai există opțiunea de căutare a utilizatorilor de retea dupa nume respectiv după adresa MAC.

<div class="widget-content">

<h2 style="padding-left:50px; padding-top:25px;"></h2><br>

<?php

echo '

<form id="edit-profile" class="form-horizontal" method="POST" action="search_mac.php">

<div class="control-group">

<label class="control-label" for="radiobtns">Cauta MAC</label>

<div class="controls">

<div class="input-append">

<input class="span2 m-wrap" id="appendedInputButton" name="cauta" type="text">

<button class="btn" type="submit">Cauta!</button>

</div>

</div> <!– /controls –>

</div> <!– /control-group –>

</form>

';

if (!isset($_POST['cauta']))

{

?>

<table class="table table-striped table-bordered">

<thead>

<tr>

<th> Nume student </th>

<th> Adresa MAC</th>

<th> Adresa IP</th>

<th> Stare adresa</th>

<th> Data trimitere</th>

<th> Email</th>

<th> Camera</th>

</tr>

</thead>

<tbody>

<?php

$res = mysql_query("SELECT * from student");

while ($row = mysql_fetch_array($res))

{

$etajQ = mysql_query("SELECT * from adresemac WHERE idStudent = ". $row['idStudent']);

$rowE = mysql_fetch_array($etajQ);

echo '

<tr>

<td> '.$row['numeStudent'].' '.$row['prenumeStudent'].' </td>

<td> '.$rowE['adresaMac'].' </td>

<td> '.$rowE['adresaIP'].' </td>

<td> '.$rowE['stareAdresa'].' </td>

<td> '.$rowE['dataTrimitere'].' </td>

<td> '.$row['emailStudent'].' </td>

<td> Camera '.$row['cameraStudent'].' </td>

</tr>';

}

?>

</tbody>

</table>

<?php

}

else if (isset($_POST['cauta']))

{

?>

<table class="table table-striped table-bordered">

<thead>

<tr>

<th> Nume student </th>

<th> Adresa MAC</th>

<th> Adresa IP</th>

<th> Stare adresa</th>

<th> Data trimitere</th>

<th> Email</th>

<th> Camera</th>

</tr>

</thead>

<tbody>

<?php

$cauta = $_POST['cauta'];

$res = mysql_query("SELECT * from student, adresemac WHERE student.idStudent = adresemac.idStudent AND

numeStudent LIKE '%".$cauta."%' OR prenumeStudent LIKE '%".$cauta."%'

OR adresaMac LIKE '%".$cauta."%' OR adresaIP LIKE '%".$cauta."%'");

if (mysql_num_rows($res) > 0)

{

while ($row = mysql_fetch_array($res))

{

echo '

<tr>

<td> '.$row['numeStudent'].' '.$row['prenumeStudent'].' </td>

<td> '.$row['adresaMac'].' </td>

<td> '.$row['adresaIP'].' </td>

<td> '.$row['stareAdresa'].' </td>

<td> '.$row['dataTrimitere'].' </td>

<td> '.$row['emailStudent'].' </td>

<td> Camera '.$row['cameraStudent'].' </td>';

echo ' </tr>';

}

}

?>

</tbody>

</table>

<?php

}

?>

</div>

<!– /widget-content –>

Similar se procedează și în cazul căutării după nume și prenume.

La apelarea opțiunii de modificare datelor unui anumit utilizator se va face din nou o căutare a utilizatorului, după care se va face modificarea datelor dorite prin comanda update a limbajului MySQL.

Pentru ștergerea unui utilizator din baza de date se va căuta utilizatorul după care se va face ștergerea prin interogare.

Pentru un utilizator deja existent în baza de date vor fi posibile emiteri de adrese MAC,adresa IP,drepturi si restrictii, precum și vizualizări, căutări, modificari sau ștergeri ale acestora, folosindu-se preluări de date, și comenzi ale limbajului MySQL similare cu cele prezentate mai sus, cu modificările aferente.

Pentru reprezentatii de pe fiecare etaj exista restrictia ca respectivul student sa fie cazat e acel etaj:

<?php

// aici schimbam responsabil etaj

if (isset($_POST['id_reprezentant_nou']) && isset($_POST['id_etaj']))

{

$sqlUpdate = "UPDATE `atesta_camin`.`etaje` SET

`idReprezentant` = '".$_POST['id_reprezentant_nou']."'

WHERE

`etaje`.`idEtaj` = ".$_POST['id_etaj']." LIMIT 1

";

mysql_query($sqlUpdate);

echo '<div class="alert alert-success">

<button type="button" class="close" data-dismiss="alert">&times;</button>

<h2>Responsabilul de etaj a fost schimbat cu succes in baza de date.</h2>

</div>';

}

?>

<div class="widget-content">

<?php

if (!isset($_GET['id_etaj']))

{

?>

<h2>Responsabili etaj</h2>

<div class="tabbable">

<ul class="nav nav-tabs">

<?php

$sql = mysql_query("SELECT * FROM etaje");

while($row = mysql_fetch_array($sql))

{

$class_active = "";

if ($row['idEtaj'] == 1)

{

$class_active = 'class="active"';

}

$denumireEtaj = "etaj".$row['idEtaj'];

echo '

<li '.$class_active.'>

<a href="#'.$denumireEtaj.'" data-toggle="tab">'.$row['denumireEtaj'].'</a>

</li>';

}

?>

</ul>

<br>

<div class="tab-content">

<?php

$sql = mysql_query("SELECT * FROM etaje");

while($row = mysql_fetch_array($sql))

{

$class_active = "";

if ($row['idEtaj'] == 1)

{

$class_active = 'active';

}

$denumireEtaj = "etaj".$row['idEtaj'];

echo '<div class="tab-pane '.$class_active.'" id="'.$denumireEtaj.'">';

echo '<div style="padding-left:50px;">';

$sqlR = "SELECT * FROM student, etaje WHERE etaje.idReprezentant = student.idStudent

AND student.idEtaj = " . $row['idEtaj'];

$sqlCamere = mysql_query($sqlR);

if (mysql_num_rows($sqlCamere) == 0)

{

$reprezentant = "-";

$detalii_buletin = "-";

$camera_responsabil = "-";

$mail_responsabil = "-";

$telefon_responsabil = "-";

}

else

{

$rowC = mysql_fetch_array($sqlCamere);

$reprezentant = $rowC['numeStudent'] . " " . $rowC['prenumeStudent'];

$detalii_buletin = $rowC['serieBuletin'] . " " . $rowC['numarBuletin'];

$camera_responsabil = $rowC['cameraStudent'];

$mail_responsabil = $rowC['emailStudent'];

$telefon_responsabil = $rowC['telefonStudent'];

}

echo '<h3>Responsabil etaj: '.$reprezentant.'</h3>';

echo '<h3>Detalii buletin: '.$detalii_buletin.'</h3>';

echo '<h3>Camera: '.$camera_responsabil.'</h3>';

echo '<h3>Adresa mail: '.$mail_responsabil.'</h3>';

echo '<h3>Telefon: '.$telefon_responsabil.'</h3><br>';

echo '<form method="POST" action="responsabili.php?id_etaj='.$row['idEtaj'].'" >

<button type="submit" class="btn btn-warning btn-large"><span class="icon-edit "></span> Schimba reprezentant</button>

</form>';

echo "</div>";

echo '</div>';

}

?>

</div>

</div>

<?php

}

else

{

$sql = mysql_query("SELECT * FROM etaje WHERE idEtaj = " . $_GET['id_etaj']);

$row = mysql_fetch_array($sql);

echo '<h3 style="padding-left:20px;">Alegeti un student ca reprezentat pentru '.$row['denumireEtaj'].'</h3>';

echo ' <form method="POST" action="responsabili.php">

<select style="margin-left:50px; margin-top:20px;" name="id_reprezentant_nou">';

$sql = mysql_query("SELECT * FROM student WHERE idEtaj = " . $_GET['id_etaj']);

while ($row = mysql_fetch_array($sql)) {

echo ' <option value="'.$row['idStudent'].'">'.$row['numeStudent']. ' ' .$row['prenumeStudent'].'</option>';

}

echo '</select><br>

<input type="hidden" name="id_etaj" value="'.$_GET['id_etaj'].'">

<button style="margin-left:50px;" type="submit" class="btn btn-success btn-large">

<span class="icon-ok "></span> Alege reprezentant

</button>

</form>';

}

?>

</div>

<!– /widget-content –>

4.3. Funcții JavaScript

Adăugarea datelor in diagrame se realizeaza cu ajutorul apelurilor de JavaScript catre functiile din chart.min.js si excanvas.min.js, functii care folosesc ca parametri rezultatele interogarilor SQL obtinute cu PHP. Pentru a afisa informatii corecte din baza de date se utilizează funcții JavaScript.

<script src="js/jquery-1.7.2.min.js"></script>

<script src="js/excanvas.min.js"></script>

<script src="js/chart.min.js" type="text/javascript"></script>

<script src="js/bootstrap.js"></script>

<script src="js/base.js"></script>

<?php

$sql = "SELECT * FROM etaje";

$res = mysql_query($sql);

$etaje = "";

$data1 = "";

$data2 = "";

while ($row = mysql_fetch_array($res))

{

$etaje .= "\"".$row['denumireEtaj']."\", ";

$sqlD = mysql_query("SELECT count(*) FROM student WHERE idEtaj = ". $row['idEtaj']);

$rowS = mysql_fetch_array($sqlD);

$data1 .= $rowS['count(*)'] . ", ";

$sqlC = mysql_query("SELECT count(*) FROM student WHERE idEtaj = ". $row['idEtaj']." AND calculator = 1");

$rowC = mysql_fetch_array($sqlC);

$data2 .= $rowC['count(*)'] . ", ";

}

?>

<script>

<?php

echo '

var barChartData = {

labels: ['.$etaje.'],

datasets: [

{

fillColor: "rgba(220,220,220,0.5)",

strokeColor: "rgba(220,220,220,1)",

data: ['.$data1.' 0]

},

{

fillColor: "rgba(151,187,205,0.5)",

strokeColor: "rgba(151,187,205,1)",

data: ['.$data2.' 0]

}

]

}

';

?>

var myLine = new Chart(document.getElementById("bar-chart").getContext("2d")).Bar(barChartData);

</script>

4.4 Structurile bazelor de date si a tabelelor.

Pentru realizarea aplicației a fost utilizată o bază de date care conține tabele relationate prin identificatori care au activată proprietatea de autoincrementare și nu acceptă valoarea NULL.

Baza de date se numește „camin” și conține următoarele tabele:

administrator de retea cu câmpurile: id, nume, user, parola, unitate_administratorala, cui, sediu, judet , vezi figura 4.4.1.

Figura 4.4.1. Tabel administrator de retea.

Câmpul id este cheie primară pentru tabela administrator de retea.

tabela utilizator cu câmpurile: idMAC, nume, prenume, adresaMac, adresaIP, dataTrimitere, stareAdresa, stareVirusare, observarii,idStudent. Câmpul idMAC este identificatorul utilizatorului și este cheie primară pentru acest tabel. Tabelul mai conține si campul idStudent pentru a face relaționarea cu tabela administrator de retea

Figura 4.4.2. Tabel retea PPPOE

tabela adresa cu câmpurile: idAdresa, idStudent,usernamePPOE, stareAdresa, observatii , vezi figura 4.4.2.

Câmpul idAdresa este cheie primara iar relaționarea se face ca și în cazul anterior prin idStudent.

Figura 4.4.3. Tabel anunt

tabela anunt cu câmpurile: idAnunt, idUtilizator,titluAnunt, textAnunt, dataAnunt , vezi figura de mai sus 4.4.3.

Câmpul idAnunt este cheie primara iar relaționarea se face ca și în cazul tabelei adresa prin idUtilizator.

Figura 4.4.4. Tabel repartitie etaj

tabela etaj cu câmpurile: idEtaj, idReprezentant,denumireEtaj , vezi figura 4.4.4.

Câmpul idEtaj este cheie primara iar relaționarea se face ca și în cazul anterior prin idReprezentant.In acest care avem o relationare intre sefii de paliere si administrator.

Figura 4.4.5. Tabel optiuni

in aceasta tabela exista o relationare intre campurile setare si optiune, vezi figura 4.4.5.

Figura 4.4.6. Tabel regulament

această tabele este compusă din câmpurile tip și text , vezi figura 4.4.6.

Ambele tabele cea de regulament cât și cea de opțiuni sunt tabele informaționale și au caracter doar informativ.Acestea aducând în față utilizatorului termenii și condițiile inpuse de admistratorul de rețea celor care folosesc sau doresc accesul în rețea controlată de el.

Figura 4.4.7. Tabel student

tabela cu câmpurile: idStudent și numeStudent. Câmpul idStudent este cheie primară iar relaționarea se face prin idEtaj cu câmpul idMAC din tabelele prezentate anterior , vezi fugura 4.4.7.

Figura 4.4.8. Tabel utilizator

tabela cu câmpurile: idUtilizator, nume și adresa. Câmpul idUtilizator este cheie primară iar relaționarea se face prin idAnunt din tabela anunturi pentru a face corespondența dintre numele aparținătoare unui anumit anunt selectat în formularul de introducere al datelor.

Figura 4.4.9. Tabel vizitator

În figură 4.4.9. este ilustartă o schemă a relaționării tabelelor bazei de date:

Figura 4.4.9. Relationarea tabelelor din baza de date

Capitolul 5

Utilizarea aplicației.

5.1. Interfata Utilizatorului

La rularea aplicației se va deschide automat formularul de autentificare (figura 5.1.1., unui utilizator neautentificat ne având permisiunea de a accesa datele gestionate în baza de date.

Figura 5.1.1 Formular de autentificare

La accesarea butonului de logare se va deschide meniul principal (figura 5.1.2.) în cazul în care atât numele utilizatorului cât și parola sunt corecte și există în tabela cu datele privitoare la administrator de retea.

Figura 5.1.2. Pagina principala

În caz contrar va apărea din nou formularul (figura 5.1.3.) de autentificare împreuna cu un mesaj aferent de eroare a introducerii parolei și/sau a utilizatorului.

Figura 5.1.3. Formular de autentificare cu mesaj eroare

În cazul accesării butonului Studenti din meniu se vor desfășura un submeniu cu mai multe opțiuni, ca și în figura 5.1.4.

Figura 5.1.4. Meniu principal

La apăsarea oricărei opțiuni din submeniu se va afișa în pagină câte un formular aferent fiecărei opțiuni ,vezi figura de mai jos 5.1.5.

Figura 5.1.5. Formular de adăugare al utilizatorilor de retea

La opțiunea de Cautare utilizatori se va desfășura un alt submeniu oferind posibilitatea de a alege dacă se dorește căutarea după nume și prenume, dupa cum se vede in figura 5.1.6.

Figura 5.1.6. Meniu cautare

După selectarea celor două, prin acționarea butonului de Căutare din formular se vor afișa studentii aparținănd camerei selectate.

Butonul responsabili din meniu va afișa un submeniu cu opțiunile de selectare a etajului (figura 5.1.7.si 5.1.8.), care permite alegerea tipului de adresa dorită pentru prelucrare.

Figura 5.1.7. Detali etaje

Figura 5.1.8 Meniul principal

Ca și în cazul opțiunilor referitoare la responsabili pe etaje, și la activarea butoanelor din acest submeniu se vor afișa formularele specifice fiecarei opțiuni , vezi figura 5.1.9.

Figura 5.1.9 Formular de adăugare a responsabililor pe etaj

Figura 5.1.10. Meniul principal Oglinda MAC

La adăugarea unui student si o adresa MAC (figura 5.1.10.) se va încărca pagina ce conține formularul cu datele necesare de completat pentru pentru a putea fi asignat.

Figura 5.1.11. Formular de adăugare a unui student si o adresa MAC

Capitolul 6

Concluzii

Aplicația realizată poate fi utilizată cu ușurință de către administratorii de retea pentru gestionarea bazei de date a utilizatorilor de retea unui camin studentesc.

Datorită cererii de autentificare, un administrator nu are accesul la toata baza de date, ci doar la informațiile privitoare la utilizatori săi, celelalte date fiind inaccesibile.

Proiectul permite adăugarea de noi utilizator, vizualizarea datelor despre aceștia, modificarea datelor. Baza de date a fost creeată astfel încât informațiile pot fi introduse conform cu realitatea.

Administratorul serverului aplicației are dreptul de a gestiona, prin autentificare, tabela corespuzătoare administratorului de retea, de a adăuga administratori de retea noi în sistem prin crearea de cont după atribuirea unui user și a unei parole, de a modifica datele existente în legatură cu un anumit administrator, sau de a șterge un administrator din baza de date.

Proiectarea interfețelor utilizator este un subiect care preocupă tot mai mult dezvoltatorii de software. Deoarece aplicația realizată este adresată unui grup țintă, și anume administrator de retea, cu o anumită pregătire profesională și culturală nevoia de interfață potrivită și centrată pe utilizator (sau client) este stringentă. O interfață potrivită face ca aplicația să fie ușor de utilizat și învățarea funcțiilor sale trebuie să se apropie de “natural” și să poată fi realizată în timp scurt, fără să fie nevoie ca utilizatorul să comute pe alt gen de abordare decât cel pe care îl posedă prin cultură si pregătire profesională.

Așadar, limbajul utilizat în realizarea interfeței conține termeni specifici administratorali, dar care pot fi percepuți într-un mod facil de către cei cărora le este destinată aplicația.

Bibliografie

Aurel Serb – Arhitectura si structura calculatoarelor – 2011

Alan Forbes – Bucuria de PHP: Un Ghidul începător pentru programarea Interactiva a aplicatii web cu PHP si MySQL – 2012.

Buraga Sabin – Programarea in Web 2.0, editura Polirom – 2007.

Ciprian Bogdan Chirila – Structuri de date si algoritm.Sisteme de Operare – Ed. Fundatiei ïoan Slavici" – 2007

Dr. Richard Stibbard – Aflați mai multe despre HTML5, CSS, PHP, MySQL, jQuery și AJAX:. Proiect dinamic de dezvoltare a site-ul: Aflați întregul proces de … – 2014.

Eric Meyer – CSS Smashing: Tehnici profesionale pentru Aspect modern – 2010.

Filip Ioan – Sisteme de gestiune a bazelor de date, Editura orizonturi universitare, – 2007

Florin Molnar – Utilizarea si programarea calculatoarelor ,Fundatia "Ioan Slavici" – 2010

Horia Ciocarlie – Tehnici de compilare – Editura Orizonturi – Timisoara 2010

James M. Coulter – PHP MySQL Ghid de programare – Ia site-urile dvs. si il duce la nivelul următor cu dinamic, baze de date, baza de cod de condus – 2013.

Justin Pot și Angela Alcorn – Invăța sa construiesti cu PHP: un curs intensiv de Matthew Hughes, – 2014.

Kevin Yank – Construieste-ti propria bază de date Driven site-ul Web folosind PHP si MySQL – 2009.

Laura Thomson – Dezvoltarea aplicațiilor Web cu PHP și MySQL, Editura Teora, – 2003.

Paul DuBois – MySQL (5th Edition) (Biblioteca Developer) – 2013.

Riaz Ahmed – Dezvoltare Web în PHP, MySQL, JavaScript, HTML si CSS: Pas-cu-pas proiectare web – 2014.

Titus Slavici – Elemente fundamentale ale proiectarii si fabricarii asistate de calculator,Eurobit – 1999

Simon Stobart și David Parsons – Dezvoltare Dinamica a Application Web folosind PHP si MySQL – 2008.

Vikram Vaswani – MySQL. Utilizarea si administrarea bazelor de date MySQL – 2010.

Vladimir Ioan Cretu – Dezvoltarea aplicațiilor timp-real. Concepte avansate – 2011.

Similar Posts