Documente Academic
Documente Profesional
Documente Cultură
1 Introducere
Internet odat cu trecerea timpului a evoluat semnificativ oferind noi oportuniti pentru
indiferent de tipul de domeniu, acesta fcndu-l mai atractiv si personal n funcie de dorinele
utilizatorului.Cnd m refer la dorinele utilizatorului, aceast aplicaie a fost creat la cererea
unui director al unui centru de training web, oferiindu-i acestuia posibilitatea de a avea o mai
buna gestionare a centrului care l deine.
Nu cu mult timp n urma , a aprut o nou form de nvamnt i anume nvarea
asistat de calculator care mai poarta numele de E-learning iar fondatorul ei fiind Internet Time
Group.Exist o legtura ntre aplicaia noastr i E-learning , iar acea fiind ca amandou provin
din aceai arie, diferena fcnd-o c E-learning reprezint metoda de educaie sau mai bine zis
instruirea unui grup de persoane prin mijloace electronice, iar aplicaia este un sprijin n ce
privete managementul intern al centrului, ajutnd la o mai bun formare a viitoarelor grupe i nu
numai.Centrele de training au nceput s fie tot mai solicitate de ctre mariile compani , pentru c
odat cu aceast evoluie a internetului si a tehnologiei, cerinele s-au schimbat iar programele
colare clasice, au rmas n urm, ne mai putnd produce oameni cu formare profesional
adecvat cerinelor compani.Dar totui de ce aceste centre de training? Rspunsul vine tot de la
aceste compani, i anume , mpingem lumea s nvee ceva ce nu i nspir,ceva ce nu crete
natural n ei.Acest idee dac a fost ascultat de persoanele potrivite a dat natere acestui
fenomen, l putem numi aa pentru c procesul de predare este diferit de cel cu care am fost noi
obinuii, acesta bazndu-se pe suporturi online interactive, care fac mult mai interesant procesul
de nvare, cursurile online acestea fac procesul de predare sa fie mai uor , ne mai fiind nevoie
de deplasarea noastr fizic, aici putem aduga timpul pierdut pn la coal i napoi i pe
deasupra ocuparea unei clase de curs, care poate fi costisitoare .De aceasta mariile companii
prefer n zilele noastre formarea angajailor si n astfel de centre, ajutndu-i s in pasul cu
evoluia continu a tehnologiei.
Acum ce ine de structura lucrri , capilolul unu fiind partea de introducere n care
explicm motivul pentru care am creat acest aplicaie odat cu benefiicile ei urmnd ca n
1
capitolul doi sa ne ocupm de partea teoretic a limbajelor de programare folosite cu toate
detaliile posibile despre acestea, dup care n capitolul 3 o s explicm structura a codului pe
care am folosit, aplicaia n sine a aplicaiei aratnd cum se formeaz o grup, tot odat cum
adaugm studeni, mai pe scurt spus vom arat cum ajut aceast aplicaie pentru o mai bun
gestionare a centrului de training dupa care n ncheiere concluziile la tot ce am fcut pna n
acel punct.
2
CAPITOLUL
2 ABORDAREA TEORETIC
Avantajele acesteia
Crearea si structurarea a unei aplicaii in jurul careia se bazeaz niste idei clare pe o
structura aleasa de mine , cu idei si schematici specifici pe un anumit punct, ar produce rezultate
mult mai bune i un cod mult mai bine definit, dect o aplicaie care se imprtie n mai multe
direcii i la care s-ar putea s folosesc doar o anumit parte a functionaliti ei, far ca aceasta s
imi fie cu adevarat de folos.
Garantia unei aplicatii individuale bazata pe niste concepte si scopuri propii va fi mult
mai bine organizata si mai putin costisitoare decat gasirea unei aplicatii deja existente apoi
manipularea ei spre dorinte sau scopuri care sunt setate.
3
trebuie deasemenea s inem cont, pentru ca limbajul n care dorim s construim aplicaia , s fie
uor de neles i nu numai.
Securitatea
Securizarea informaiilor nu este un lucru de trecut cu vederea, acesta putnd fii
elementul principal al unei aplicaii online, pentru c odat cu nregistrarea un o pagina web a
datelor personale ncepnd de la nume , prenume, numere de telefon pn la cod numeric
personal, acestea putnd pe urm s ne creeze probleme dac ajung pe mna raufactorilor.
Bineneles ca nu putem evita problemele priviind securitatea, ns ce privete cerinele minime
de securitatea n momentul creari de aplicaii web, nu trebuie trecute cu vederea.
Accesibilitatea
Accesibilitatea un cuvnt tot mai des ntlnit n zilele noastre, i nu din cauza internetului
neaparat, ci mai degrab din cauza dispozitivelor noi aprute. Dac ignorm acest lucru ,
accesibilitatea pe noile dispozitive nu va putea fi posibil pentru c dimensiunea ecranului nu ne
permite acest lucru, de aceea crearea unei aplicaii cu funcii adaptabile oricrui tip de dispozitiv
este foarte important.
Extensibilitatea
Acest factor fr de care ne-am complica munca, este important pentru ca aplicaia odat
creat s poat fi uor de modificat, adaugat si chiar ters n cod, ne scutete de rescrierea
aceluia-si tip de funcii, iar extragerea de informaii s fie fcute cu uurin. n aplicaia propus,
am ncercat pe msura cunotiinelor proprii s ating aceste trei puncte importante pentru ca
utilizatorii s poate beneficia de o protecia a datelor, ct i accesibilitate , aceast aplicaie fiind
una adaptabil tuturor dispozitivelor actuale, iar in ce ine de structura codului, acesta poate cu
uurin fi modificat.
Descrierea limbajelor
Dei HTML-ul classic permite redactarea unor documente hypertext de un nivel foarte
nalt i elaborat, o dat cu evoluia limbajelor de programare vizuale, a nceput s devina mai
puin atractiv dect a fost la nceput.Din acest motiv, a fost pus la punct ce numim
DTHML(Dynamic HTML) care nu este un limbaj n sine, ci un termen prin care sunt
desemnate tehnicile utilizate pentru a face paginile web ct mai dinamice i ct mai interactive.
4
Pe lng HTML-ul propriu-zis, noile unelte recunoscute de browser-ele din ultima
generaie sunt CSS (Cascading Style Sheets), JavaScript ,Php, MySql. Scopul acestei lucrri nu
este studiul amnunit al acestora, de aceea le vom trece doar n revist, folosind mici exemple
comentate pentru fiecare dintre ele.
Noiunea de stil este, pentru un document HTML, asemtoare cu formarea
documentului, spre exemplu, pentru un document Word.Exist o mulime de atribute prin care se
pot stabili font-urile, caracteristicile de aliniere a textului, forma elementului, culorile de font si
ale literelor, marginile, poziia elementelor, etc.Pentru a putea gestiona ct mai eficient stilurile, a
fost pus la dispoziia programatorilor de pagini web un limbaj prin care se poate realiza acest
lucru.Acest limbaj este cunoscut sub de numele de CSS .(actualmente sa ajuns la vartianta
CCS3).
Legatura dintre HTML si CSS se realizeaz prin intermediul tag-ului care trebuie aezat
intre <HEAD>
<STYLE>..</STYLE>
<HEAD> .
Alt limbaj folosit de mine in aplicatie este JavaScript ,acesta este un limbaj de
programare orientat pe obiecte.n ciuda numelui i a unor oarecare similariti in sintax,ntre
JavaScript si Java nu exist nici o legatur.JavaScript are o sintax apropiat de cea a C-ului, din
acest motiv un programator care are cunotine de C poate cu uurin s nvee JavaScript.Dei
acest limbaj are o plaj mai larg de extindere, cel mai des ntlnit este n scriptarea paginilor
web. Programatorii web pot ngloba n paginile HTML script-uri pentru diverse activiti, cum ar
fi verificare datelor introduse de utilizatori, sau crearea de meniuri ori de alte efecte animate.
Browser-ele rein n memorie o reprezentare a paginii web sub forma unui arbore de obiecte,
punnd aceste obiecte la dispoziia JavaScript-ului, care le poate citi i manipula.
In ce ine de aspect, pentru aceasta aplicatie sa folosit Bootstrap framework 1, acesta fiind
partea de editare web din fata, care este mai rapid si mai uoar folosindu-ne de el. Bootstrap
include template-uri de design HTML si CSS cum ar fi butoane , tabele, meniuri de navigare,
1 framework definete, n termeni generali, un ansamblu standardizat de concepte, practici i criterii pentru
a se aplica asupra unui tip particular de problematic, ce servete ca referin pentru a propune i rezolva probleme
cu conotaii similare. n dezvoltarea de software un framework este o structur conceptual i reprezint o arhitectur
de software care modeleaz relaiile generale ale entitilor domeniului (site-ului). Aporteaz o structur i o
metodologie de munc pe care aplicaiile domeniului web o extind sau utilizeaz.
5
carousele, deasemenea si plugin-uri optionale JavaScript.Ne mai ofera si posibilitatea de creare a
unui website personalizat.2Avantajele folosiri acestui framework ar fi c este uor de folosit,
oricine cu cunotiine HTML si CSS de baz ar putea folosi Bootstrap, acesta mai este
compatibil cu toate browsere-le moderne (Chrome, Firefox, Internet Explorer, Safari, and
Opera). PHP: Hypertext Preprocessor este utilizat pe scar larg, ca i scop general: limbaj de
scripting pe parte de server, care a fost proiectat iniial pentru a produce pagini web dinamice. n
acest scop, codul PHP este incorporat n documentul HTML i interpretat de ctre un server web
cu un modul de procesare PHP, care genereaz pagina web. Rasmus Lerdorf a scris primele
scripturi PHP (la nceput numindu-se Personal Home Page) ca i o serie de scripturi PERL
folosite pentru a urmrii vizitatorii de pe site-ul su, i s vad cine i verific cv-ul. PHP
evolueaz din 1994 ca i open source. De-a lungul anilor acronimul de Personal Home Page sa
schimbat i a trecut la Hypertext Preprocesor. Este un software gratuit lansat sub licena PHP.
PHP-ul a fost construit cu un gnd, s fie ct mai simplu. Este foarte uor de neles i de nvat,
mai ales de ctre persoanele care au cunotine de programare n C, javascript i HTML.
Limbajul de programare este similar cu C i PERL, cei care au programat n C i PERL vor
nva foarte repede PHP. Deasemenea PHP ruleaz pe aproape orice platform, dar principalele
fiind UNIX, Mac, i Windows. Din punct de vedere al resurselor, nu folosete mult din resursele
sistemului, ruleaz rapid i nu ncetinete alte aplicaii care ruleaz deja. Este folosit ca i un
modul pentru Apache ( server http ) scris n C. De asemenea este stabil i fiind open source,
comunitatea PHP lucreaz mpreun pentru a repara orice erori aprute. Ofer posibilitatea de a
modific orice aspect al unei aplicaii, ncepnd de la funcii de manipulare a unui strng ( siruri
de caractere ) , pn la manipulare de directoare pe server i imagini. Php-ul ofer accesibilitatea
de care avem nevoie datorit faptului c orice server are capabilitatea de procesare php, putem
extinde aplicaia cu noi funcii datorit complexitii sale i avem parte de o securitate prin
funcii care filtreaz informaiile trimise spre server.
2 Web design personalizat, cunoscut sub acronimul englez RWD (Responsive Web Design) este o filozofie
de design i dezvoltare destinat adaptrii apariiei de pagini web pentru dispozitivul utilizat pentru vizualizare. Astzi
paginile web sunt afiate pe mai multe tipuri de dispozitive, cum ar fi tablete, Smartphone-uri, cri electronice,
calculatoare, i asa mai departe. Mai mult, fiecare dispozitiv are caracteristicile sale specifice: dimensiunea ecranului,
rezoluie, putere CPU, capacitatea de memorie, printre altele. Aceast tehnologie i propune ca, dei cu un design
unic sa poat fi vizualizat de pe orice dispozitiv.
6
Figura 1
3 Un "loop sau bucl se poate defini ca fiind o declaraie de control care permite codului
s se execute repetat bazat pe o condiie de tip adevrat sau fals.
7
If($rezultat > 20) {
Echo numerele nmulite rezult un numr mai mare dect 20;
}Else {
Echo numerele nu rezult un numr mai mare dect 20;
}
Tot acest cod ar trebui rescris la fiecare verificare a nmulirii dintre dou numere.
Prin PHP putem s scriem o funcie care nu mai necesit dect invocarea acelei funcii.
Function verifica_inmultire ($cifra1, $cifra2, $compara) {
$rezultat = $cifra1*$cifra2;
If($rezultat > $compara) {
Echo numerele inmulite rezult un numr mai mare dect 20;
} Else {
Echo numerele nu rezult un numar mai mare dect 20;
}
}
Funcia de mai sus face exact acelai lucru cu primul exemplu, singura excepie o face
faptul c acum putem s folosim aceast procedura de cate ori dorim, doar invocnd numele
funciei i completnd cele trei variabile necesare. Spre exemplu, dorim nmulirea a trei
seturi a cte dou numere sa fie mai mici dect treizeci:
verifica_inmultire (5, 3, 30); //adevrat
verifica_inmultire (10, 4, 30); // fals
verifica_inmultire (1, 18, 30); //adevrat
Cele trei invocri de funcii sunt exact la fel cu scrierea fiecrei comparaii n parte.
Odat scris funcia, o putem invoca, iar dac dorim modificarea funciei doar o modificm i
aciunea se va schimba pentru fiecare invocare a funciei n parte. Prin acest exemplu am
combinat dou operaii matematice ntr-o singur funcie. Un alt lucru care se poate face n PHP
este verificarea unor valori dac sunt sau nu de un anumit tip. Spre exemplu dac avem o valoare
care este de tip string:
$valoare = cuvant;
Dorim verificarea acestei valori mpotriva atacurilor web, i putem s o verificm prin
comanda:
is_string($valoare); //adevrat dac este string, fals pentru orice altceva
is_int($valoare); //adevrat dac este numar ntreg, fals pentru orice altceva
Metodele de mai sus sunt folosite pentru securitatea unui site, filtrnd informaiile
primite.
MySQL este un sistem de gestiune a bazelor de date relaional, produs de compania
suedeza MySQL AB i distribuit sub Licena Public General GNU. Este cel mai popular
SGBD (sistem gestiune baz de date) open-source la ora actual, fiind o component cheie a
8
stivei LAMP (Linux, Apache, MySQL, PHP). Dei este folosit foarte des mpreun cu limbajul
de programare PHP, cu MySQL se pot construi aplicaii n orice limbaj major. Exist multe
scheme API disponibile pentru MySQL ce permit scrierea aplicaiilor n numeroase limbaje de
programare pentru accesarea bazelor de date MySQL, cum are fi: C, C++, C#, Java, Perl, PHP,
Python, FreeBasic, etc., fiecare dintre acestea folosind un tip spefic API. O interfa de tip
ODBC denumit MyODBC permite altor limbaje de programare ce folosesc aceast interfa, s
interacioneze cu bazele de date MySQL cum ar fi ASP sau Visual Basic. n sprijinul acestor
limbaje de programare, unele companii produc componente de tip COM/COM+ sau .NET
(pentru Windows) prin intermediul crora respetivele limbaje s poat folosi acest SGBD mult
mai uor dect prin intermediul sistemului ODBC. Aceste componente pot fi gratuite (ca de
exemplu MyVBQL) sau comerciale. Licena GNU GPL nu permite ncorporarea MySQL n
softuri comerciale; cei care doresc s fac acest lucru pot achiziiona, contra cost, o
licen comercial de la compania productoare, MySQL AB. MySQL este component integrat
a platformelor LAMP sau WAMP (Linux/Windows-Apache-MySQL-PHP/Perl/Python).
Popularitatea sa ca aplicaie web este strns legat de cea a PHP-ului care este adesea combinat
cu MySQL i denumit Duo-ul Dinamic. n multe cri de specialitate este precizat faptul ca
MySQL este mult mai uor de nvat i folosit dect multe din aplicaiile de gestiune a bazelor
de date, ca exemplu comanda de ieire fiind una simpl i evident: exit sau quit.
Pentru a administra bazele de date MySQL se poate folosi modul linie de comand sau,
prin descrcare de pe internet, o interfa grafic: MySQL Administrator i MySQL Query
Browser. Un alt instrument de management al acestor baze de date este aplicaia gratuit, scris
n PHP, phpMyAdmin. MySQL poate fi rulat pe multe dintre platformele software existente:
AIX, FreeBSD, GNU/Linux, Mac OS X, NetBSD, Solaris, SunOS, Windows
9x/NT/2000/XP/Vista. Mysql i MS SQL sunt doua dintre cele mai folosite sisteme baza de date
de catre developerii web. De aici au aparut diverse controverse referitor la avantajele unui sistem
deasupra celuilalt. Ambele sisteme funcioneaza ca i sistem de suport XML (Extensible Markup
Language).
9
Figura 2
Din punct de vedere al stocrii i accesrii, funcioneaz mai mult sau mai puin diferit:
Ce tine de licenta Mysql este open source (codul surs al programului poate fi modificat), ceea
ce permite oricrei persoane care creaz o aplicaie s nu plteasca foarte mult, costurile ar fi
cele de hosting. ns dac cineva face un soft care vrea s-l vnd are nevoie de licen
comercial. Pentru MS SQL lucrurile stau puin diferit, trebuie achiziionat cel puin ediia
standard dac folosim MS SQL n scopuri comerciale, doar pentru test se ofer un server SQL
gratuit.
MS SQL se poate definii ca fiind closed source(codul surs al programului nu poate fi
modificat), n comparaie cu MySql care este open source, nu avem acces la codul surs.
Dac cele dou sisteme sunt comparate ca i performane, MySql are cele mai multe
avantaje. Are nevoie de puin spaiu de stocare, i baza de date MyISAM d randament ridicat. n
afar de Windows, sistemul se comport bine i pe sistemele UNIX i Linux. Pentru MS SQL,
performanele sunt comparativ mai scazute. Este dificil s lucrm cu acest sistem fr s avem
cunotine legate de MS SQL i fr hardware eficient. De asemenea MS SQL necesit mai mult
spaiu de stocare comparat cu MySql.
n cazul n care cele dou sisteme sunt comparate pe baza procesului de recuperare, MS
SQL are mai multe beneficii dect MySQL. Datorit configuraiei MyISAM, uneori devine un
10
dezavantaj pentru sistem. n cazul n care se produce o perturbare sau ntrerupere cu MySQL,
poate duce la pierderea de date. Chiar dac sistemul se confrunt cu o problem n timp ce se
lucreaz cu MS SQL , datele nu se pierd.
Att MySQL i MS SQL adopt msuri ample de securitate de la bun nceput. Dac un
port devine prea vulnerabil utilizatorului i este permis s-l schimbe. Utilizatorul are obligaia de
a actualiza software-ul din timp n timp pentru a le proteja de utilizari nedorite.
11
tergerea se face cu comanda:
DELETE FROM tabel WHERE nume_atribut_x=valoare_x
n momentul n care introducem WHERE ntr-o interogare Sql, nu facem altceva dect
s setm o condiie care dac nu este adevrat, interogarea nu are loc. De obicei la condiii ne
folosim de un atribut numit (id) care l setm la crearea structurii tabelului n baza de date
mysql. Id-ul sau identificatorul poate fi numit i cu alte nume, atta timp ct identificatorul are
proprietatea de AUTO_INCREMENT i este de tip INTEGER, ceea ce face este de a crete
valoarea cu 1 la fiecare inserare de rnduri n baz de date. ex: dac avem 6 rnduri ntr-un tabel
valoarea identificatorului va crete cu 1 pentru fiecare rnd ncepnd de la 0. Primul rnd va avea
identificatorul 0, al doilea va avea 1, al treilea 2 ... etc. Interogarea Sql de selectare poate fi
folosit pentru toate rndurile dintr-un tabel fr a mai pune o condiie WHERE, ns pentru a
extrage informaiile avem nevoie de PHP. Sql permite multe alte tipuri de interogri care ne d
posibilitatea nu numai de editare, inserare, tergere i selectare, ci i de cutare a unui cuvnt sau
string n cadrul atributelor unui rnd din cadrul tabelului. Pentru a cuta o informaie n baza de
date ne folosim de comanda LIKE i operatorul % care compar caracterele string-ului sau
cuvntului cu valoarea atributului din baza de date.
Odat ce am neles PHP-ul, orice aplicaie se poate extinde prin intermediul unor funcii
create special pentru aceasta. PHP ofer multe funcii care combinate alctuiesc un sistem, odat
ce am fcut un sistem l putem combina cu alte sisteme care duc la soluionarea celor mai
imposibile probleme legate de o aplicaie online. Logica pe care se bazeaz sistemul de extragere
al informaiilor , fr s avem acces la baza lui de date, este foarte simpl:
Orice pagin de la site online are un link, sau URL4.
Orice pagin a unui aplicaii online este creat sub forma unui tipar sau template.
Orice pagin care are un tipar, are informaiile afiate ntr-o forma standard,
nconjurate de alte tag5 -uri html.
4 URL: (din englez de la Uniform Resource Locator, tradus Adres uniform pentru localizarea
resurselor) este soluia aleasa de World Wide Web Consortium, prescurtat W3C, pentru specificarea unei resurse
(unui site web sau a unei pagini web) n internet.
12
URL-ul este unul dintre variabilele sistemului care urmeaz a fi creat, pe cnd tag-urile
HTML sunt celelalte variabile de care o s ne folosim ca s extragem orice informaie dorim.
Singurul lucru care necesit asistena unei persoane la crearea acestei funcii de citire este
mprirea codului surs a paginii web.
13
notelor cursanilor etc.Mediul e-Learning poate fi descris din perspectiv pedagogic,
funcional, de coninut sau tehnologic, deoarece desemneaz o form modern de nvare
distribuit, la distan sau n sala de curs, care acoper o gam larg de aplicaii i procese
educaionale de tipul nvare asistat de calculator, nvare bazat pe internet, nvare bazat
pe conferine video etc.
Din punct de vedere pedagogic, mediul e-Learning reprezint o metod de predare,
nvare i evaluare bazat pe tehnologia digital, de comunicaie i multimedia, care asigur
transferul accelerat de informaii, cunotine, inclusiv tehnici de nelegere i modaliti de
interpretare a acestora, de la profesor la cursant oriunde, oricnd i la cerere, cu scopul de a
obine rapid rezultate performante, accelernd astfel procesul educaional.
Aplicaia e-learning are la baz trei componente principale, interconectate din punct de
vedere funcional, eseniale funcionrii unei platforme de nvmnt electronic.
Acestea sunt:
din punct de vedere al coninutului mediul e-Learning este format din baza de
date distribuit de cunotine, suportul on-line i modalitile de instruire asistat de
tehnologia digital. Baza de date distribuit de cunotine reprezint biblioteca i
librria virtual cea mai accesibil, care pune la dispoziia tuturor celor interesai n
evoluia lor profesional un volum teoretic nelimitat de cunotine din toate domeniile
de activitate, individual sau n cadrul unor programe de instruire organizate, gratis sau
contra cost. Suportul on-line desemneaz tehnologia informaional i de comunicaie
care permite utilizatorilor mediului e-Learning s discute ntre ei pentru a schimba
cunotine sau informaii, punnd ntrebri i primind rspunsuri, chiar i imediat.
Modalitile de instruire folosite sunt determinate de mijloacele tehnice de
comunicare ce susin procesul electronic de nvare care pot fi sincrone sau
asincrone, dup cum pot sau nu pot da celor interesai posibilitatea de a participa
simultan la procesul de nvare.
din punct de vedere funcional mediul e-Learning este format din platforma e-
Learning (suportul hardware i software indispensabil unui sistem electronic de
predare nvare - evaluare), resursele eLearning (toate datele de interes n mediul e-
Learning - cunotine, informaii i strategii) i utilizatorii (cei care folosesc resursele
e-Learning - cursani, profesori, tutori i administratori).
din punct de vedere tehnologic mediul e-Learning reprezint tehnologia de
14
susinere a procesului de predare i nvare. Reprezint suportul tehnic al unui proces de
instruire care permite elaborarea unor resurse de nvare complexe, uor de utilizat, folosind
tehnici i metode de eliminare a problemelor specifice cursanilor nscrii la diferitele forme de
nvmnt, fiecare cu specificul ei.
Obiectivul principal al efortului de modernizare al tehnologiei e-Learning const n
implementarea de aplicaii educaionale care vor avea o flexibilitate mai mare, o fiabilitate mai
bun, un set de faciliti care s asigure o siguran crescut a comunicaiei n cadrul Internetului
global
15
CAPITOLUL
3 Functionalitate
6 domeniu web : n Internet, domeniile sunt colecii de host-uri. De exemplu, pentru host-ul
ro.wikipedia.org, numele domeniului este wikipedia.org. Domeniile sunt arborescente: un domeniu poate fi
subdomeniu al unui alt domeniu. Domeniile "rdcin" se mai numesc i domenii de nivel superior (n englez Top
Level Domain, prescurtat TLD). n acelai exemplu, "org" este TLD-ul pentru host-ul ro.wikipedia.org. Pentru
domeniile .RO, autoritatea naional este RNC.
7 gzduire web : (n englez: web hosting) este un serviciu oferit att companiilor ct i persoanelor
particulare, care le permite acestora s si publice un site web n Internet - s l pun la dispoziie n web
"vizitatorilor", online. Furnizorul acord clientului spaiu de memorare pe un server conectat la internet i de obicei
aflat fizic ntr-un centru de calcul. Deseori furnizorul aloc fiecrui site web gzduit i cte un nume de domeniu
web unic, pune la dispoziie clientului nu numai spaiul de stocare necesar site-ului, dar chiar un ntreg server
(virtual) inclusiv sistemul su de operare.
16
2 Descrierea aplicatiei
In functie de capabilitatiile programatorului , lejeritatea si complexitatea in cod in sine
poate varia drastic depinzand si de ceriintele fiecarui fisier in parte.Tipurile de scriere a codului
pot fi progresive pornind de la lucruri simple si clare , exemplu : $nume = $_POST[nume]; ,
unde este descries clar intentia codului pentru preluarea de informatii, pana la cod mai complex
referiindu-ne la P.O.O .
Diferentele dintre programare simpla si P.O.O este una care vizeaza o diferenta estetica lejera si
o simplitate de a rescriere a codului.
Dezavantajul de a scrie cod simplu este repetia in sine a codului si incetinirea
programului si capacitatea lui de a lucra.
Structura codului care este utilizata in aplicatia curenta variaza de la pagina la pagina, iar
chiar daca nu e aplicat principiul P.O.O , fisierele sunt distribuite in asa fel incat este usor de
urmarit unde poate fi gasit codul sau partea de vizualizare.
17
Figura 3
18
Coloanele din tabel pot varia de continutul lor depinznd de necesitaile aplicaiei in sine
si de mrimea acesteia.Diferenta unei coloane de a avea varchar(30) si varchar(255) pentru
aplicaii de statura mic este una nesimnificativ, nsa pe aplicaii ce pot fi inregistrate informa ii
a mii de utilizatori, aceasta poate face diferent a citiri si afisrii informa iei a zecilor de secunde
de care nici utilizatorul nici programatorul nu dispune.
Datele care o sa fie stocate in tabele vor varia de la varchar la int, date time , timestamp si
tinyint acestea avnd un numr limitat de caractere care pot fi introduse depinznd de scopul
tabelului din care fac parte.Deasemenea tabelele vor avea un identificator propiu care va fi unic
in fiecare dintre acestea i acesta va ajuta in sortarea, idenfircarea si gsirea elementului unic
care acesta o sa fie exprimat prin PRIMARY KEY8, dar i corelarea ntre tabele folosind
FOREIGN KEY. Aceste doua componente vor ajuta pentru o mai strns legtura intre
identificarea informaiilor ntre tabele, dar care va exprima si complexitatea aplicaiei n sine.
Cantitatea de tabele si numrul de informaii din aceastea vor putea varia in functie de
numrul de informaii si gndirea care poate fi pus in aplicaie cu scopul mariri apliaca iei in
sine, astfel un tabel simplu cu zece tipuri de informaie poate fi transformat in trei tabele conform
cerinei aplicaiei.
Numrul de tabele si informaiile necesare aplicaiei pe care o creem vor fi descrise in
rndurile ce urmeaza:
- Studenti_swa_log
- Studenti_swa
- Studenti_in_grupa
- Traineri_swa
- Catalog_cursuri
- Grupa
- Locatii_swa
- User_lvl
8 Acesta este un camp intr-un tabel care identifica in mod unic fiecare rand dintr-un tabel
de baza de date.Acestea trebuie sa contina valori unice.O coloana cheie primara nu poate avea
valori NULL.
19
Tabelul stundeti_swa_log
Tabelul va avea ca funcionalitate modul de logare pentru stundei si accesul acestora la
coninuturi diferite n site.Conturile pentru acetia sunt automat fcute in momentul n care unul
dintre administratori introduce un nou student.Funcionalitatea pentru acestea este nca n
dezvoltare i va fi luat in considerare in funcie de necesitaile aplicaiei.Tabelul este structurat
astfel :
Figura 4
Tabelul catalog_cursuri
Tabelul catalog_cursuri va conine informatii legate de tipul si denumirea cursului ct i
despre pre, nume edinte, zile pe sptmn.Acesta va ajuta la identificarea tipului de curs si va
servi pentru o mai bun adaptare sau imbunattire a cursurilor viitoare sau a celor prezente.Iar
tabelul va contine urmatoarele cmpuri :
Figura 5
20
Tabelul pentru studenti
Tabelul studenti_swa va conine informaii care vor ajuta la identificarea acestuia din
punct de vedere social, cum ar fi nume, prenume dar si informaii speciifice cum ar fi numr si
seria de buletin, telefon si email, precum si alte informaii pentru o mai bun categorizare privind
modul lui de preluare si asocierea intr-o grup in funcie de cunotiinele, studii superioare dar si
materialele pe care le are, laptop personal.Tabelul va conine urmatoarele cmpuri:
Figura 6
Tabelul studenti_in_grupa
Tabelul va conine o structurare si o ordonare a stundeilor clasificndu-i dupa grupele
care sunt sau care vor fi create.Desi tabelul in sine va conine doar cateva date legate de grupa si
student , el va ajuta la filtrarea studenilor care aparin si care nu aparin n grupe,dar si
diversificarea lor cnd acetia finalizeaza o grupa.Tabelul avnd un rol important in legarea
dintre tabelul de grupa si tabelul stundenilor.Acesta va conine urmatoarele informaii:
21
Figura 7
Tabelul traineri_swa
Acesta va conine datele de logare si acces n platforma pentru administratori dar si
pentru profesori in sine.Pe lnga datele de logare tabelul va conine i informaii legate de
profesori cum ar fi numele personal i o imagine/portret al trainarului , chiar si un CV cu
cunostiinele si experiena profesional.Acesta va conine urmatoarele informaii:
Figura 8
Tabelul grupa
Acest tabel va defini tipurile de grupe care vor fi create si modul de desfurare a
acestora , dar si alte informaii relevente cum ar fi, locaia, data nceperi , data finalizri si data
de examen.Informaiile sunt strict legate de grup pentru a nu fi confundate cu cel de curs,
diferenele fiind , grupa se refer strict la colectiv iar cursul se refer la materie. Pe lng toate
aceste informaii, studenii vor fi informai i de persoana care se va ocupa de aceea
grupa.Structura este :
22
Figura 9
Tabelul locatii_swa
Tabelul va conine nu numai locaia n care se va desfsura cursul dar si numele sli n
care acesta se va ine.Tabelul acesta va conine urmatoarele informaii:
Figura 10
Tabelul user_lvl
Acest tabel va face referina si diversificare , dar si acces in aplicaie.El va delimita
aciunile fiecrui utilizator, fie acesta este administrator, profesor sau stundent.Momentan
funcionalitile acestuia sunt nc n desfurare i nu vor fi aplicate n momentul de fata doar in
cazul n care aplicaia va fi dezvoltat i va fi necesar acest lucru.Acesta conine urmatoarele
informaii:
Figura 11
23
Structura fiierelor
Pentru a nelege modul de structurare a fiierelor i ele cum sunt mprite n cadrul
acestei aplicaii, trebuie neales structrura simpla a unui fiier sau a unei pagini html i aceasta
n sine s fie divizat n bucti, la fel si structura templatului utilizat n aceasta aplicaie.
Structura unei pagini html este considerat din urmatoarele etichete html Doctype Head
si Body. Lund n considerare elementele prezente ntr-o pagin html, noi deja cunoatem c
linkurile asociate care fac legatura cu partea de scripturi, stilizare i chiar i partea ntre legturi
fiiere este partea de header. Datorit acestui fapt putem deduce, c doar n aceast sec iune
lucrurile se pot repeta n fiecare dintre paginile utlizate.Avnd n vedere natura unui template si a
paginilor html nu doar partea de header o sa se repete ntro aplica ie, dar si multe alte fi iere
depinznd de complexitate.
Interfata meniului utilizat n aceast aplicaie conine doua meniuri , unu pentru navigare
iar altul pentru informaii personale.Pentru structurarea si aranjarea fiecarui element n asa natur
nct la nevoia schimbrii celui mai mic detaliu, este nevoie de eficientizarea mpr irii si
aranjrii documentelor n asa natura nct la nevoia fieacrei schimbri , aceasta s fie fcut ntr-
un singur fiier.
Structura si limbajul php ne permite eficientizarea unei aplicaii astfel nct s nu ne
repetam din punct de vedere al codului, astfel i cea mai simpl structur a unui document html
poate ajunge sa fie imprit in minim doua documente php , pentru a nltura repe ia codului si
pentru a uura accesibiliatea modificri unei zone care se repet n anumite sau n toate fiierele.
Pentru a nelege mai bine modul de structurare a fiierelor putem avea un exemplu
simplu n care n partea de header sunt etichete care se repet n fiecare dintre pagini iar prin
metoda utilizari de php , header-ul va fi scris ca un fisier separat in care eticheta din acesta se va
scrie o singura dat i apelat in fiierele care este nevoie de el .Natura aplicaiilor pot fi
categorizate depinznd de scopul acestora, de regul o aplicaie este numit in acest sens datorit
faptului c opereaz cu baza de date. Scopul unei baze de date este de a stoca informa ii si
variind de scopul aplicaiei , acestea pot fi viziualizate sau manipulate depinznd de nivelul
utilizatorului.
O aplicaie online trebuie s fie gndit n aa fel nct dac dorim s schimbm anumite
variabile privind fie accesul la baza de date sau scrierea unei noi funcii, s o putem face dintr-un
24
singur fiier, astfel nct ntreaga aplicaie s foloseasc informaiile nou modificate dintr-o
singur locaie. Scopul const n a simplifica modul n care putem modifica aplicaia. Primul
lucru la o aplicaie online care are nevoie de informaii dintr-o baz de date este de a se conecta
la baza de date printr-o comand PHP i de a selecta baza de date. Folosirea aceastui script este
necesar n aproape fiecare pagin a aplicaiei, aa c din dorina de a simplifica modul n care
vom modifica utilizatorul i parola de acces la baza de date, o s crem un nou fiier PHP numit
connect.php care va conine doar comenzile de conectare i selectare a bazei de date.
Un exemplu concret este cel de dedesupt:
$conn = mysqli_connect(localhost, usernamul, parola, baza de date);
Fiecare din acestea este fcut pentru o accesibilitate mai lejer, mai ales cnd este vorba
de schimbare a URL-ului avnd n vedere c acestea sunt utilizate n toate paginile. Avnd n
vedere natura aplicaiei un alt cod este necesar pentru a fi introdus, fie intr-un fiier care este
deasupra fiecrui fiier sau care apare primul.De regula acest fiier poate fi, fie connect.php
care este apelat in fiecare dintre pagini sau header.php care conine toate link-urile.
Acest cod este session_start() , acesta ne va ajuta pentru partea de logare si memorare a
utilizatorului care se va loga. Session_start seteaz o sesiune nou n browser care permite
salvarea de informaii ntr-un array.
Dupa stabilirea conexiuni in fiierul connect.php se va decide amplasarea lui care de
regul se afl in fisierul header.php. Acest fiier conine nu numai legtura la baza de date dar si
conexiunile la scripturi , css si depinznd de complexitatea interfeei, buctiale meniu-lui sau
meniu-rilor.Motivul ndepartrii a meniului din header, este datorita lungimi codului din bucata
de meniu si pentru o uurare a citiri codului.
25
Fiierul principal de care orice site nu se poate lipsi se numete index.php sau index.html.
Motivul folosiri terminaiei de php , este cu scopul personalizri fiecarei pagini si lejeritatea
integrri codului html i php , integrarea si refolosirea fiierelor n alte fiiere, astfel index.php
este compus din :
<?php
require_once 'connect.php';
include 'header.php';
include 'container.php';
include 'footer.php';
?>
Fiecare din aceste linii , semnific apelarea unui anumit fiier care i acesta la rndul lui,
poate s includ i alte fiiere.
Datorit utilizri codului session_start() si a naturi acestei aplicaii utilizatorul trebuie
neaparat sa fie logat, altfel aplicaia prin codul de mai jos, va trimite utilizatorul la pagina de
logare.
if(!isset($_SESSION['loged'])){
header("Location: http://administrare.parohiaravasel.ro/index_login.php");
}
Meniurile vor fi imprite astfel nct unul se va ocupa de partea de navigare n aplicaie
iar celalalt se va ocupa de partea de informaii despre utilizator. Meniul care se ocup de partea
de navigare se numete menu-left.php, coninnd modalitatea de vizualizare ,creare, modificare
si tergere a diferitelor funcionalii apartinnd fiecrei seciuni a meniului. Meniul conine
partea de introducere a clienilor care sunt categorizai ca studeni, partea de traineri ,
categorizarea i crearea noilor grupe din care ambii pot s apartin, tipul de curs din care o s
fac parte si locaia.Deasemenea se mai pot gsi i informaii importante specifice firmei.
Meniul specific utilizatorului va contine link ctre profilul acestuia unde ii poate
modifica sau adaug informaii personale, la fel i link pentru delogare.
Seciunea de header este prima bucat care este doar nceputul structurii aplicaiei , care
este apelat o singur dat la inceputul structurii fiecrui fiier,dar care de asemeanea ea trebuie
s fie i finalizat cu ajutorul unui alt fiier care si acesta este apelat la sfritul fiecarei pagini.
Fiierul footer.php va conine sfritul etichetelor din header.php , alte scripturi , plus sau minus
alte informaii relevante aplicaiei.
Seciunea cea mai importanta care este cea de body va fi cuprins ntre cele dou fiiere
de header si footer i va conine informaii diferite conform denumirii si structurri ei n
aplicaie.
26
Seciunea pentru studeni va fi imprit n trei fiiere fiecare avnd o sarcin diferit, una
pentru visualizare a studenilor, alta pentru preluarea datelor iar cealalt pentru editarea lor.
Fierul pentru vizualizarea studenilor se numete student.php iar aceasta ne permite nu numai
vizualizarea acestora dar si ordonarea lor , dup datele care ne sunt oferite n pagin, cum ar fi:
Nume , Prenume , Telefon, Email, Cnp, Jude,Ora, Adresa, Nume tat, Nume mam, Studii ,
Ultimul act de studiu, Laptop personal , i nc o coloan pentru modificare sau tergere .
Deasemenea o alt functionalitate ncorporat n aplicaie este cea de cutare a studentului.
In pagina de adugare i in pagina de editare a studentului informaiile de preluare cu
ajutorul etichetelor sunt acealeasi, astfel n ambele pagini se vor gasi urmatoarele cmpuri de
completare asemtoare informaiilor gsite la student.php.
Pentru seciunea de traineri se vor gsi tot trei fiiere care fiecare dintre ele se va ocupa
de partea de adugare a trainerului , partea de vizualizare a trainerilor si partea de profil al
trainerului. Fiierul pentru vizualizare este trainer.php care conine urmatoarele informaii :
imaginea de profil, numele , prenumele ,email si cv-ul, deaseamea pentru aceast parte am
ncorporat aceleasi funcionaliti ca i n fiierul de vizualizare a studeniilor. In partea de
adaugare a trainerilor se vor introduce doar un email i o parola, iar n partea de profil al
trainerului pot fi modifacate toate datele legate de trainer care sunt specificate la vizualizare
traineri. La sectiunea de grupe ele vor fi imprite n cinci fiiere fiecare ocupndu-se de
anumit portiune din punct de vedere al vizualizri si editri coninutului . Fiierul pentru
vizualizarea grupei este cel de grupa.php , acesta se va ocupa de vizualizare a tuturor grupelor
din aplicaie si acestea vor conine urmtoarele informaii: numele grupei, numele slii si
numele trainrului, care va permite si vizualizarea grupei respective (care face parte din fiierul
grup_single.php) pentru a confirma informaiile legate de acea grup cum ar fi numrul de
studeni , data nceperi , data finalizri , data examenului si numrul de studeni care ar putea s
mai intre n acea grup, precum i schimbarea studenilor din acea grup( care face parte din
fierul grup_single_edit.php) .
Pentru partea de adugare a grupei aceasta se face n fisierul grup_add.php , aceasta
prelund urmatoarele informaii : denumirea grupei, denumirea cursului , numele si prenumele
trainerului, numele slii , data nceperii cursului, data finalizri cursului i data de examinare.
La partea de adugare a studentului/lor n grup se face n fiierul grup_stud_grup.php
i informaiile care se vor prelua aici vor fi numele grupei si numele studeniilor.
27
In seciunea pentru adaugarea cursului, acesta va fi mprit n patru fiiere, unul
ocupndu-se de vizualizarea tuturor cursurilor create si anume curs_view.php , acestea avnd
functionalittile asemntoare fiierelor de vizualizare a trainerilor i a studenilor avnd
urmtoarele informaii legate de curs :denumirea cursului, preul cursului, numrul de edine ,
orele per sedina,tipul cursului, locurile din grupa, acreditarea i o coloana care semnaleaz un
buton de editare a cursului n sine care duce n curs_edit.php, deaseamnea se poate accesa cursul
individual ntr-o pagina separata numit curs_one_view.php, unde se pot gsi informaii mai
detaliate despre curs i anume tipul cursului , preul, numrul de edine, zilele de curs pe
sptmn, orele per sedin, locurile n grupa respectiv, curiculla i despre acreditare.
Pentru adugarea cursului acesta se face n pagina curs_add.php i va conine informaii
asemantoare paginii de curs_edit.php care const n urmtoarele : denumire curs, tipul cursului,
preul , numrul de edinte, zilele pe sptmn, orele de edint, locurile n grup, acreditarea
si curiculla.
Seciunea de locaie avem dou fiiere unul care preia partea de cod si transmite
informaiile acesta fiind location_code.php si al doilea fiier care se ocup de preluarea
informaiilor dar i vizualizarea lor, acesta fiind location.php .Informaiile ce vor fi preluate,
editate i vizualizate vor si cele legate de numele slii i numele locaiilor. Pentru partea de
vizualizare si aceasta va beneficia de funcionalitile menionate din cellalte fiiere, ct i
accesibiliate pentru editare sau tergere.
28
Conectarea la baza de date
Fisierul connect.php contine partea de cod pentru conexiunea la baza de date, partea de sesiune,
partea de definire a URL-ului, si o alt parte a unui fiier ce conine preluarea informaiilor din
alte pagini, acesta fiind code.php .
1.session_start();
2.$local = 'localhost';
3.$user = 'administ_rare_CS';
4.$password = '9E0T1)As.@TN';
5.$db = 'administ_base';
6.$conn = mysqli_connect($local, $user, $password, $db);
define('APP_ROOT', __DIR__);
define('BASE_URL', 'http://administrare.cu.cc/');
define('PAGES_URL', 'http://administrare.cu.cc/pages/');
define('ADMIN_URL', 'http://administrare.cu.cc/cust_adm');
if (!$conn) {
echo 'Eroare MYSQL '.mysqli_connect_error();
}
require_once 'code.php';
Linia ase a fiierului PHP seteaz o variabil connect care se conecteaz la baza de
date prin comanda mysqli_connect i are nevoie de patru variabile: numele serverului (n cele
mai multe cazuri putem s scriem doar localhost), utilizatorul ,parola i baza de date. Linia 5
doar selecteaz baza de date prin variabila $db , care necesit numele bazei de date. Acest fiier
dup ce a fost salvat l putem include n orice alt document HTML sau PHP, prin funcia
`include(fiier.terminaie)`. Fiierul code.php va include toate funciile logice care vor fi
folosite la diferitele funcii ale aplicaiei. Funciile sunt structuri logice care execut fiecare pas
programat ntr-o anumit ordine. O funcie ofer cod reutilizabil pentru sarcini repetitive, de
asemena mbuntete codul datorit liniilor de cod care sunt mai puine de fiecare dat cnd
folosim aceleai comenzi. Odat ce am definit o funcie o putem invoca de cte ori este necesar,
doar schimbnd variabilele acesteia pentru a schimba rezultatul dorit. Orice funcie poate s
conin una sau mai multe variabile care schimb rezultatul acesteia, sau putem defini o funcie
fr nici o variabila. Pentru a defini o noua funcie folosim sintaxa9:
function funcie_noua( $variabila_1, $ variabila_2, ... $variabila_n ) {
codul funciei;}
9 sintaxa : sintaxa unui limbaj de programare este un set de reguli care definesc combinaii de simboluri care sunt
considerate a fi structurate corect.
29
Sectiunea de logare
30
Deasemenea fisierul header contine o parte din cod care face o verificare la persoanele care sunt
logate sau nu:
Figura 12
Acest cod in momentul dedectari utilizatorului care nu este logat, va face o redirecionare
ctre fiierul index_login.php , acesta va conine un formular pentru logare care va prelua
informaiile necesare autentificri,dar i un link ctre alt fiier , n cazul n care persoana nu are
un cont.
Modul de verificare i felul n care informaiile sunt preluate , sunt print-o aciune
specificat n eticheta formularui , care aceasta verific ce anume se preia in momentul n care
utilizatorul apasa pe butonul log in .Pentru o uurare a modului de preluare este folosit o
aciune care verific cazuri diferite depinznd de butonul care este apsat.In cazul de fat a fost
folosit metoda switch , metoda care n cazul de fa preia o valoare care este dat de atributul
formularului care n cazul de fat este actiune, prin acesta ducndul la fiierul code.php unde
acesta este situat codul si prelund informaiile mai departe , fie acesta fiind logarea sau
inregistrarea.
if(!isset($_GET['actiune'])) $_GET['actiune'] = '';
switch($_GET['actiune']) {
case '':
echo '
<form role="form" action="code.php?actiune=login" method="post" autocomplete="off">
<input type="email_username" name="email" placeholder="Email">
<input type="password" name="password" placeholder="Password">
<input type="submit" name="submit_login" value="Log In" class="btn btn-info">
</form> ';
31
}
Dup preluare se va face un redirect catre fiierul code.php unde se afl majoritatea
codului si vom face referina la el n acest proiect.
Codul care preia informaiile pentru logare este urmatorul :
switch($_GET['actiune']) { case 'login':
partea n care email-ul este memorat pentru sesiune si se detecteaz care este utilizatorul curent:
$_SESSION['email'] = htmlentities($_POST['email']);
Plasarea parolei ntre cele doua coduri aleatori , dar si verificarea acesteia pentru
caractere speciale, msur mpotriva SQL injection. SQL injection este o vulnerabilitate web ce
apare atunci cnd datele primite de la utilizatornu sunt prelucrate corect.Atunci un rufactor
poate schimba cererea la baza de date, astfel nct sa faca posibil furtul datelor private.
$password = $salt.htmlentities($_POST['password']).$pepper;
Ultima etap fiind amestecarea codului ntr-un mod solid, prin care ar fi nevoie de un
calculator puternic si mult timp pentru a putea fi descifrat
Selectare a informaiei specifice care va prelua un singur rnd n loc de toate informaiile din
tabel.
$numar = mysqli_num_rows($select_users);
32
Partea de verificare a utilizatorului si de verificare a parolei
if( $numar == 1 ){
aici verificm dac informaiile sunt existente
while($rand = mysqli_fetch_array($select_users)) {
$_SESSION['loged'] = TRUE;
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.BASE_URL.'student.php">';
}
} else {
echo '<h1 style="color:#F00">Date incorecte. </h1>
<h3> Inapoi <a href="'.BASE_URL.'index_login.php">Log-In</a></h3>';
}
}
break;
}
In cazul n care utilizatorul nu are un cont el poate fi redirectionat n alt pagin n care
acesta ii poate crea unul, si acest fisier se numeste register.php .
Figura 13
Fiierul de nregistrare respectiv conine acealeai informaii pentru preluarea datelor ,ca
si fisierul index_login.php , diferena fiind n preluarea lor si stocarea lor ntr-o baza de date si nu
verificarea lor pentru autentificare.
Codul pentru inregistrarea utilizatorului este cel de mai jos, n care sa folosit tot
metoda switch , sa folosit o funcie de verificare i introducere a caracterelor speciale pentru a nu
se face MSQL injection, acestea fiind htmlspecialchars,(convertete caractere predefinite n
entitti HTML)
33
switch($_GET['actiune']) {
case 'register':
$_SESSION['email'] = htmlspecialchars($_POST['email']);
$username = htmlspecialchars($_POST['username']);
$email = htmlspecialchars($_POST['email']);
Partea de generare a codului pentru verificarea parolei trebuie sa fie asemntoare celei de
verificare pentru logare
$salt = '459++u1-1|g;FY9vq{s10;DO*cd!7PXqM^5EgV1R8h9+:1hHt?;67XZFong_N=Ue';
$pepper = '~~^j 0L{t7QGqYX4*^NK$R2f8L4w|6~Kx-aMkm-K5n#=wksepF5t;W(V-
`IP+DUN';
$password = $salt.htmlspecialchars($_POST['password']).$pepper;
$pass_hash = hash('sha512', $password);
if( ($_POST['email'] == '') || ($_POST['password'] == '') ){
echo 'Nu ai introdus date in formular sau cele introduse nu sunt corecte. <br>
Apasa <a href="'.BASE_URL.'">aici</a> pentru a te intoarce la pagina anterioara.';
} else {
Aici selectam din baza de date pentru a verifica dac utilizatorul este existent, n care
variabila $check-user , va selecta toate cmpurile din tabelul traineri_swa , unde email va fi
selectat din variabila $email si acela va fi numele de utilizator.
$check_user = $conn->query('SELECT * FROM traineri_swa WHERE email = "'.
$email.'" ');
Prin comanda de SELECT totul (*) din tabelul traineri_swa , unde coloana email va face
o verificare, n care variabila introdusa de noi $email va prelua valoarea inputului care
reprezinta locul n care introduci emailul, prin $_POST
$data = mysqli_fetch_array($check_user, MYSQLI_NUM);
34
Iar dac datele au fost introduse corect un mesaj de confirmare va aprea cu textul
Figura 14
Dup care inregistrarea fiind cu succes, pentru a ne putea loga in aplicaie este nevoie s
revenim la pagina de logare pentru a ne introduce datele tocmai create.Codul de mai jos face
posibil inregistrarea .
$insert = $conn->query("INSERT INTO
traineri_swa (
username,
email,
password
) VALUES (
'".$username."',
'".$email."',
'".$pass_hash."')");
if ($insert) {
Dup inserarea utilizatorului /trainer acestuia i se va adaug ntr-un tabel separat un
numr ce va reprezenta nivelul lui n aplicaie.Momentan aceasta este ntr-un stadiu de test si nu
va fi aplicat n aplicaie.
Aceast funcionalitate poate avea multiple scopuri, unul pregtitor n cazul n care dorim
ca i stundenti s se poate loga ,dar accesul acestora sa fie limitat, sau pentru vizualizare
/descarcre a anumitor cursuri, dar mai poate avea si functionalitatea de a determina nivelul de
acces pe care l au administratori ntre ei.
$sel_us = $conn->query('SELECT id_trainer FROM traineri_swa WHERE email="'.
$_SESSION['email'].'" ');
$the_id = mysqli_fetch_row($sel_us);
$insert = $conn->query('INSERT INTO user_lvl ( id_user,
lvl
) VALUES (
"'.$the_id[0].'",
"1"
35
)'
);}
Dupa inserarea trainerului , se va face o selecie din baza de date specific pe emailul
trainerului i se vor prelua doar informaiile acestuia prin funcia mysqli_fetch_row .
Astfel cand i se va adauga nivelul de acces , id-ul caruia se va oferi accesul, va fi acelasi
din tabelul trainer_swa.
Dupa inregistrare se va primi un email de confirmare a inregistrri :
$_SESSION['email'] = '';
$_SESSION['password'] = '';
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
$headers .= 'From: <alinuRipper1@gmail.com>' . "\r\n";
Acesta va fi sectiunea ctre persoana care va primi mail-ul
$to_anunt = $_POST['email'];
Acesta va fi titlul mail-ului ,
$subject_anunt = 'Inregistrare';
i coninutul mail-ului,
$msg_mail = '<h2> Felicitari pentu inregistrarea dumneavoastra
</h2>';
Deasemenea mai exista posibilitatea, n cazul n care utilizatorul va uita parola, acesta va
putea prin linkul afiat s poate recupera parola.
$msg_mail .= 'Numele utilizatorului este mailul , in caz ca v-ati uitat
parola, urmati linkul de mai jos<br>';
$msg_mail .= '<a href="'.BASE_URL.'_page_forgot_pass.php">Uitat Parola</a>';
$msg_mail = wordwrap($msg_mail,200); // folosim wordwrap() daca
liniile sunt mai mult de 70 characters
36
'~~^j 0L{t7QGqYX4*^NK$R2f8L4w|6~Kx-aMkm-K5n#=wksepF5t;W(V-`IP+DUN';
Ex: $salt.parola_ta.$pepper
Partea de meniu
Figura 15
Variabilele care preiau i afieaza informaiile din baza de date pot fi aleatori sau
intiuntive pentru a nu confunda sau interpreta greit informaiile cu care lucrm.Altfel variabila
$sel_username se va subntelege ca se va face o selecie a numelui de utilizator din baza de date
a celui care este logat, iar variabila de $the_user face afiearea numelui n sine, pentru o
distincie mai clar a cea ce vrem s afim , prin acestea imprind chiar si obiectivul fiecarei
variabile si ce rol are ea in cod.
37
Meniu_user.php se ocup de partea utilizatorului afiind-ui un avatar, emai-ul, data nregistrri i
opiuni de delogare i acces la profil pentru editare.
Figura 16
Modul de afiare a informaiilor care sunt preluate din baza de date, pot fi afisate in mai
multe feluri, metoda care am folosit-o este sub forma unui array, iar noi specificm cifra care
corespunde informaiilor care vrem sa fie preluate, astfel $the_user, va prelua toate informaiile
din baza de date, doar cu adaugarea unei cifre corespunztoarea numerelor coloanei din baza de
date, in exemplu de fata $the_user[7], aceasta fiind coloana cu imaginea utilizatorului.
Deasemenea pentru o identificare mai lejera a variabilei care o putem utiliza, $the_user[7] putea
fi asociat unei altei variabile , exemplu $the_user_img.
38
Partea de stundent
Variabililele care sunt utilizate pentru o uurare n citirea codului in cazul prelurii
informaiilor din fiecare formular n parte, pot fi asemntoare deoarece ele vor fi termporar
asociate unor valori , ele fiind in interiorul unei functii.Preluarea informaiilor se va face doar in
momentul acionrii butonului de submit a fiecrui formular in parte , iar metoda de preluare
se va face prin $_POST.Depinznd de necesitatea utilizri aplicaiei i a cantitai utilizatorilor
care vor folosi, sau se vor loga in aplicaie, va fi necesar o form de verificare a informaiilor
care sunt introduse n formular dar si ce informaii vor fi preluate de acolo.
Pentru cazuri n care intr-unul dintre cmpuri trebuie introdus doar cifre sau numere
acesta va fi presetat astfel nct este imposibil de introdus litere, la fel i n cazul introduceri de
email, din nou se va face o verificare in mod corespunztor pentru validarea unui email real.
Dei modul de preluare a informaiilor se va face prin $_POST, acesta poate fi
acompaniat de mai multe funcii, care vor asigura introducerea informaiilor in baza de date, fr
ca acestea s produc pagube.
Exemplu : htmlspecialcharater($_POST) sau htmlspecial_entities($_POST)
Dup preluarea datelor se vor face urmtoarele aciuni: se va anuna rezultatul aciuni, fie
c acesta este de introducere a informaiilor sau a unei erori n baza de date, iar n cazul
introduceri, urmatoarea actiune va fi de remprosptare a pagini pentru a nu se face greseala de
reintroducere a datelor.
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.BASE_URL.'">';
Depinznd de complexitatea codului , informaiile pot fi introduse prin mai multe etape
una din ele fiind direct prin PHP, iar cealalta fiind cu ajutorul altui limbaj , acesta fiind Ajax sau
JSON.
Seciunea de adugare stundeni
In sectiunea aceasta vor fi afisate campurile pentru identificarea studentului care acestea
vor contine informatii personale cum ar fi cine este , unde locuieste ce fel de studii are si daca ar
in posesie si un laptop personal.
39
Figura 17
Funcia isset specific o anumit aciune dac demareaz sau nu, nsemnnd c pn n
momentul n care formularului nu se va aciona butonul de submit, informatiile nu vor fi
preluate.De regula este important ca i numele butonului s fie diferit pentru fiecare formular
pentru ca n cazul n care avem multiple formulare pe aceai pagin i aciunea formularului ,
rezult n preluarea informaiilor n alt pagina, unde sunt mai multe variaii de preluare de
informatie pentru diferite formulare.
if (isset($_POST['submit_student']) ) {
denumirea variabilor este pentru o ntelegere mai uoar a codului i pentru mbuntirea
lui , n caz de modificare, nu este necesar crearea unei variabile pentru preluarea informaiilor
din tabel.
$nume = $_POST['nume'];
$prenume = $_POST['prenume'];
$telefon = $_POST['telefon'];
$email = $_POST['email'];
$cnp = $_POST['cnp'];
$serie_ci = $_POST['serie_ci'];
$judet = $_POST['judet'];
$oras = $_POST['oras'];
$adresa = $_POST['adresa'];
$nume_mama = $_POST['nume_mama'];
$nume_tata = $_POST['nume_tata'];
$studii = $_POST['studii'];
$ultim_act_studiu = $_POST['ultim_act_studiu'];
$laptop_personal = $_POST['laptop_personal'];
40
Functia de verificare a codului daca informatiile sunt introduse sau nu
if ($ins_stud) {
echo '<h2>Studentul a fost inserat cu succes</h2>';
echo '<META HTTP-EQUIV=Refresh CONTENT="0;
URL='.BASE_URL.'student_add.php">';
} else {
echo 'Nici un student nu a fost ranit in acest proces';
}
}
In seciunea aceasta vor fi afiai toi cei care sunt nregistrai, ntr-un mod ales de
administrator datorit funcionaliti paginii care permite acest lucru.Deasemenea dac se dorete
editarea unuia dintre stundei, la coloana Actiune, avem butonul de editare i tergere.
Figura 18
Pentru afiarea cursanilor este folosit un tabel la care sau adugat proprietti jquery ,
folosindu-ne de o librrie specific tabelelor , codul care este folosit :
$('#myTableLocation').DataTable();
n aceast secvent vom asocia toate valorile din tabel care vor fi preluate de la variabila
sel_ALL_students (aceasta prelund informaiile din tabelul cu stundei) cu o alt
variabil pentru interpretare mai lejer a codului, care aceasta o s aib ca durata de via
doar n cadrul codului while().Pentru a afisa informaiile necesare trebuie ataat numele coloanei
din tabelul respectiv, dupa exemplul urmtor: $row['nume_coloana'] care aceasta va afisa toate
informaiile din coloana respectiv.
41
while ($row = mysqli_fetch_array($sel_ALL_students)) {
echo '<tr>
<td>'.$row['nume'].'</td> <td>'.$row['prenume'].'</td><td>'.$row['telefon'].'</td>
<td>'.$row['email'].'</td><td>'.$row['cnp'].'</td><td>'.$row['serie_ci'].'</td>
<td>'.$row['judet'].'</td><td>'.$row['localitatea'].'</td><td>'.$row['adresa'].'</td>
<td>'.$row['nume_mama'].'</td><td>'.$row['nume_tata'].'</td> <td>'.
$row['studii'].'</td><td>'.$row['ultim_act_studiu'].'</td>
<td>'.$row['laptop_personal'].'</td>
42
Figura 19
$getIdEdit = $_GET['id_edit'];
$getIdDel = $_GET['id_delete'];
Din descrierea de mai sus, putem determina n funcie de aciunile care au fost fcute de
trainer, fie de stergere care este prezentat in codul de mai jos:
if ($getIdDel) {
$del_student = $conn->query('DELETE FROM studenti_swa WHERE id_student = "'.
$getIdDel.'" ');
echo '<h2>Studentul a fost STERS cu succes</h2>';
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.BASE_URL.'student.php">';
}
sau de editare:
if (isset($_POST['submit_edited_student']) ) {
n momentul editri se vor ntampla mai multe etape, una dintre ele fiind preluarea
datelor din baza de date , cu ajutorul id-ului care este preluat cu ajutorul $_GET, dar si
continuarea de preluare a informaiei din formulare care va fi facuta cu $_POST.In momentul
editri oricrui tip de informaie, informaia nu este inserata n baza de date, ci ea este
actualizat.
43
$studii= $_POST['studii']; $ultim_act_studiu = $_POST['ultim_act_studiu'];
$laptop_personal = $_POST['laptop_personal'];
Astfel codul pentru actualizare se va face prin UPDATE, numele tabelului , SET(alocarea
noii valori specifice coloanei) i numele coloanei i noua valoare, neuitnd de specificarea id-
ului unde valorile sa fie modificate.
$upd_stud = $conn->query('UPDATE studenti_swa SET nume = "'.$nume.'", prenume= "'.
$prenume.'", telefon = "'.$telefon.'",email= "'.$email.'",cnp= "'.$cnp.'",
serie_ci= "'.$serie_ci.'",judet= "'.$judet.'",localitatea= "'.$oras.'",
adresa= "'.$adresa.'", nume_mama= "'.$nume_mama.'", nume_tata= "'.$nume_tata.'",
studii= "'.$studii.'", ultim_act_studiu= "'.$ultim_act_studiu.'",
laptop_personal= "'.$laptop_personal.'" WHERE id_student= "'.$getIdEdit.'"');
if ($upd_stud) {echo '<h2>Studentul a fost modificat cu succes</h2>';
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.BASE_URL.'student_code.php?
id_edit='.$getIdEdit.'">';
} else {echo 'Nici un student nu a fost ranit in acest proces';}
}
Panou de trainer
Sectiunea de adugare trainer
In aceast seciune se pot creea noi traineri, iar aceasta se face prin adugarea adresei de email
i a unei parole ,iar prin apsarea butonului de Adaug , trainerul respectiv va fi adaugt in baza
de date.Acesta odata introdus va putea edita propiul profil, de la sectiunea de Profile.
Figura 20
Aici avem partea de cod , iar fiierul creat pentru aceast seciune se numete
trainer_add.php. sa folosit tot metoda switch .
if(!isset($_GET['actiune'])) $_GET['actiune'] = '';
switch($_GET['actiune']) {
case '':
echo '
<h4>Inregistrare Traineri</4>
<form class="" action="code.php?actiune=register" method="post">
<input type="email" name="email" placeholder="Email" class="form-control">
<input type="password" name="password" placeholder="Password" class="form-
control">
<input type="submit" name="submit_register" value="Adauga">
</form>
';
}
44
Sectiunea de vizualizare trainer
Odat traineri creai , acetia vor putea fi vizualizai prin selectarea meniului principal n
seciune de vizualizare. Fiierul care conine codul pentru aceast seciune se numete
trainer.php.
Figura 21
45
Seciunea de editare profil al trainarului
Trainer-ul odata creat, va aparea n baza de date, n tabelul traineri_swa, ns doar
cu emailul i parola , dar dac acesta se va loga n aplicaie va putea s ii adauge el un nume de
utilizator, nume si prenume.Deasemenea prin apsarea butonului Poza acesta va putea s ii
aleag o poz de profil, deasemenea un Cv acesta folosind n cazul n care avem nevoie s aflm
mai multe informaii despre trainer, cum ar fi pregtirea lui profesional.
Figura 22
if (isset($_POST['submit_profile'])) {
$username = $_POST['username'];
46
$nume = $_POST['nume'];
$prenume = $_POST['prenume'];
$file_img = basename($_FILES['myImg']['name']); -acesta preia imaginea
$file_cv = basename($_FILES['myCV']['name']); - acesta preia CV-ul
$file_basename_img= substr($file_img, 0, strripos($file_img, '.'));
if ( ! is_dir($uploaddir)) { mkdir($uploaddir);}
verifica calea daca exista $uploaddir , daca nu o creaza cu ajutorul functiei mkdir.
$moveCV = move_uploaded_file($_FILES["myImg"]["tmp_name"], $file_path_img);
$movePoza = move_uploaded_file($_FILES["myCV"]["tmp_name"], $file_path_cv);
if ( !empty($moveCV) && !empty($movePoza) ) {
se verific daca sa incarcat un fisier in una sau ambele inputuri
n prim instant dac nu sa introdus nimic in tabel , el va fi gol, atunci ca rezultat nu se
va face o insertie ci se va face un update.
Motivul de ce se face update este pentru ca in momentul in care un trainer fie isi creaza
singur sau este adaugat, campurile care o sa fie completate , o sa fie doar de email sau parola iar
restul de nume, prenume , cv si imagina o sa fie goale. Acestea putand pe urma sa fie modificate
din meniu Profil , facand astfel inregistrarea mult mai lejera si rapida.
$insProf = $conn->query('UPDATE traineri_swa SET username = "'.$username.'",
cv_trainer = "'.$full_name_cv.'",nume = "'.$nume.'",prenume = "'.$prenume.'",
img = "'.$full_name_img.'" WHERE email = "'.$_SESSION['email'].'"');
Dupa incarcarea fisierelor pagina va reveni la cea care a fost , cea de profil.
47
Se vor face multiple modificari pentru a determina care dintre fisiere au fost incarcate si
se va face un UPDATE corespunzator fisierului incarcat, pentru a nu actualiza coloana
respectiva, dintr-una cu text intr-una goala.
$insProf = $conn->query('UPDATE traineri_swa SET username = "'.$username.'",
cv_trainer = "'.$full_name_cv.'", nume = "'.$nume.'",prenume = "'.$prenume.'"
WHERE email = "'.$_SESSION['email'].'"');
if ($insProf) { echo '<META HTTP-EQUIV=Refresh CONTENT="0;
URL='.BASE_URL.'trainer_profile.php">';
}
} elseif (!empty($moveCV) ) {
$insProf = $conn->query('UPDATE traineri_swa SET username = "'.$username.'",
nume = "'.$nume.'", prenume = "'.$prenume.'",img = "'.$full_name_img.'"
WHERE email = "'.$_SESSION['email'].'"');
if ($insProf) {
echo '<META HTTP-EQUIV=Refresh CONTENT="0;
URL='.BASE_URL.'trainer_profile.php">';
}
} else {
Daca nici una dintre fisiere nu este incarcat atunci vor putea fi actualizate celelalte date.
$insProf = $conn->query('UPDATE traineri_swa SET username = "'.$username.'",
nume = "'.$nume.'",prenume = "'.$prenume.'" WHERE
email = "'.$_SESSION['email'].'"');
if ($insProf) {echo '<META HTTP-EQUIV=Refresh CONTENT="0;
URL='.BASE_URL.'trainer_profile.php">';}}}
48
Panou Grupa
Figura 23
if (isset($_POST['submit_grupa'])) {
$denumire = $_POST['denumire'];
$cursul = $_POST['cursul'];
$trainerul = $_POST['trainerul'];
$locatia = $_POST['locatia'];
$date_register = $_POST['date_register'];
$date_finish = $_POST['date_finish'];
$date_exam = $_POST['date_exam'];
$date_register1 = date("Y-m-d",strtotime($date_register));
$date_finish1 = date("Y-m-d",strtotime($date_finish));
$date_exam1 = date("Y-m-d",strtotime($date_exam));
49
Preluarea valorii acestei funcii va trebui convertite deoarece afiarea acesteia va face ca
valorile sa fie separate cu un / exemplu : 01/06/2017 , problema fiind n faptul c modalitatea
de recunoastere a datei in tabelul din baza de date este prin - exemplu : 01-06-2017.
Preluarea valorii se va face tot prin $_POST , dar aceasta va fi convertit cu ajutorul
strtotime() aceasta convertind timpul n text, dar adaugnd nca o parte care va ajuta la
transformarea codului sa fie citibil. Pentru a putea ntelege mai bine cum am putea manipula
timpul, putem face referina la codul de baza pentru afiarea timpului care este date(), prin acesta
putem afia nu doar ziua, luna si ora, dar si minute , secunde si zona.Pentru o afiare mai clar,
putem scrie astfel: date(Y-m-d) astfel nu numai afisnd cea ce ne trebuie dar i n modul n care
ne trebuie, codul nsa fiind inc incomplet, deoarece aceasta ne va afia doar data prezent.Astfel
pentru a afisa i data care va trebui preluat dar si modul de afisare a acestuia, codul va fi
transformat astfel : date("Y-m-d",strtotime($date_register));
$ins_Group = $conn->query('INSERT INTO grupa (denumire,id_curs,id_trainer,
id_locatie,data_incepere, data_finalizare, data_examen) VALUES
("'.$denumire.'","'.$cursul.'","'.$trainerul.'","'.$locatia.'","'.$date_register1.'",
"'.$date_finish1.'","'.$date_exam1.'")');
if ($ins_Group) { echo 'Grupa Creata';
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.BASE_URL.'grupa.php">';
}
}
Iar pentru cmpul de inserare denumirea cursului se va folosi codul
while ($rCurs = mysqli_fetch_array($sel_Curs)) {
echo '<option value="'.$rCurs['id_curs'].'">'.$rCurs['denumire'].'</option>';}
la fel si pentru celalalte doar diferenta fancnd-o numele fiecrui cmp in parte.
50
Figura 24
Prin
Modalitile de vizualizare a tabelelor pot fi simple , nsemnand doar tabelul n sine, sau
vizualizarea mai multor tabele ntr-un singur tabel, folosind un singur cod SQL. Modalitatile de
legare sunt de multiple feluri depinzand de rezultatul dorit.
INNER JOIN selecteaz toate rndurile din ambele tabele, atta timp ct exist o
potrivire ntre coloanele din ambele tabele.
RIGHT JOIN returneaz toate rndurile din tabelul din dreapta , cu rndurile care se
potrivesc din tabelul din stnga. Rezultatul este NULL n partea stng atunci cnd nu exist nici
o potrivire.
FULL OUTER JOIN returneaz toate rndurile din tabelul din stnga i din tabelul de
dreapta i combina rezultatele.
LEFT JOIN unde se va face o afisare a tabelului A, plus a lucrurilor comune din tabelul B
in cazul in care id-urile primare a ambelor tabele sunt egale.
51
din acea grup. Pe coloana de Actiune avem butonul de editare, prin apsarea lui o sa fim trimii
la pagina in care vom putea muta studentul dorit in alta grupa.
Figura 25
$getIdGroup = $_GET['id_grupa'];
in exemplele urmatoare , n prima variabil se face selecie ntre coloanele din tabelul
stundenti_swa si adugare a coloanei din tabelul studenti_in _grupa, pe premiza a id_stundent a
ambelor tabele fiind egale, unde id-ul grupei fiind egal cu id-ul specific care a fost selectat, ca
rezultat al aciuni de editare.
$sel_single_group = $conn->query('SELECT
studenti_swa.nume,studenti_swa.prenume,
studenti_swa.telefon, studenti_swa.email,
studenti_swa.laptop_personal,studenti_in_grupa.id_student
FROM
studenti_swa INNER JOIN studenti_in_grupa
ON
studenti_swa.id_student = studenti_in_grupa.id_student
WHERE id_grupa="'.$getIdGroup.'"');
52
ON studenti_swa.id_student = studenti_in_grupa.id_student
WHERE id_grupa="'.$getIdGroup.'"');
$selGrPesc = $conn->query('SELECT * FROM grupa WHERE id_grupa="'.$getIdGroup.'"');
$GrPesc = mysqli_fetch_row($selGrPesc);
$za_fetch = mysqli_fetch_row($nr_of_stud_in_group);
if ($nr_of_stud_in_group < 20 ) {
$total = 20;
Am dat unei variabile valoare de 20,dup care am fcut calculele.
Variabila $za_fetch va prelua informaiile unui singur rnd, din selecia unde avem
coloana care numar stundei din grup iar prin ataarea unui numr acestei variabile vom
specifica acea coloana.
$stud_req = 20-$za_fetch[6];
$stud_are = $za_fetch[6];
$percentage = $stud_are/$total * 100;
echo '<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="70" aria-valuemin="0" aria-
valuemax="20" style="width:'.$percentage.'%">'.$percentage.'%</div></div>
<h3>'.$GrPesc[1].'- <b>'.$stud_req.'</b> studenti din 20</h3>';} else {echo 'no';}
Codul de mai jos este o reprezentare a cum funcioneaza transferul stundentul dintr-o
grup n alt grupa i anume. Prin variabila $getIdEdit se preia id-ul de la actiunea edit, dupa
care varibila $sel_Stud_Group_In_Gr face selectie din studenti_in _grupa doar unde e id-ul
preluat.Iar prin variabila $SSIG se preia doar un singur rnd, pentru a nu face loop prin toate
datele din tabel. $nameGrupa face selecia pentru numele grupei, dupa care prin variabila
53
$SSWS se va face selecia si afiare la stundei din grupele particulare unde id-ul este cel care va
fi preluat de variabila $getIdEdit .
$getIdEdit = $_GET['id_edit'];
$sel_Stud_Group_In_Gr = $conn->query('SELECT * FROM studenti_in_grupa WHERE
id_student = "'.$getIdEdit.'" ');
$SSIG = mysqli_fetch_row($sel_Stud_Group_In_Gr);
$nameGrupa = $conn->query('SELECT * FROM grupa WHERE id_grupa = "'.
$SSIG[1].'" ');
$GroupName = mysqli_fetch_row($nameGrupa);
$sel_Stud_SWA = $conn->query('SELECT * FROM studenti_swa WHERE id_student =
"'. $SSIG[2].'" ');
$SSWS = mysqli_fetch_row($sel_Stud_SWA);
Stundei odat creai o s-i putem bga n grupa dorit, prin selectarea cursului dorit, si
persoana care va urma mutat. Prin apsarea butonului de Adauga stundeti in grupa , acesta il
vom putea vedea la grupa de Web Design ca si exemplu.
Figura 26
54
ON studenti_in_grupa.id_student = studenti_swa.id_student
LEFT OUTER JOIN grupa
ON studenti_in_grupa.id_grupa = grupa.id_grupa
WHERE grupa.data_finalizare <= "'.$time_now_time.'"
OR grupa.data_finalizare IS NULL
');
sa fcut selecie combinat din tabelele studenti_swa , studenti_in_grupa, grupa la care
sau luat cmpuri specifice, unde cmpul din stundeti_swa.id_student este asemntor cmpului
din studenti_in_grupa.id_student apoi se va mai asocia i tabelul grupa unde cmpul din
studenti_in_grupa.id_grupa este asemntor cmpului grupa.id_grupa, deasemenea avnd grija
unde cmpul data_finalizare din tabelul grupa este mai mic sau egal cu timpul finalizri grupei
respective sau dac nu exista timp.
if (isset($_POST['submit_stud_in_curs'])) {
$multi_stud = $_POST['studentii'];
$denumire_curs = $_POST['denumire_curs'];
foreach ($multi_stud as $show) {
pentru fiecare variabila care mi preia rezultatele din baza de date sa fie afiate ca $show ,
Variabila $show fiind informaiile preluate i inserate n baza de date, dupa care inserate
n tabel.
$insert_studenti_group = $conn->query('INSERT INTO studenti_in_grupa (id_grupa,
id_student) VALUES ("'.$denumire_curs.'", "'.$show.'") '); }
Afiarea grupelor n care vor fi adugai studenii care nu aparin sau au terminat deja o
grup.
while ($row = mysqli_fetch_array($sel_Group)) {
echo '<option value="'.$row['id_grupa'].'">'.$row['denumire'].' '.
$row['data_incepere'].'</option>';
}
55
Panou de Cursuri
Figura 27
if (isset($_POST['submit_curs'])) {
$denumire = $_POST['denumire'];
$tip_curs= $_POST['tip_curs'];
$curicula= $_POST['curicula'];
$pret= $_POST['pret'];
$nr_sedinte= $_POST['nr_sedinte'];
$zile_pe_sapt= $_POST['zile_pe_sapt'];
$ore_per_sedinta = $_POST['ore_per_sedinta'];
$locuri_grupa= $_POST['locuri_grupa'];
$acreditare = $_POST['acreditare'];
Odata introdu-se date n cmpurile de mai sus prin variabila $ins_curs se va crea cursul
dorit, inserarea facndu-se n tabelul catalog_cursuri .
$ins_curs = $conn->query('INSERT INTO catalog_cursuri (
denumire, tip_curs, curicula, pret, nr_sedinte, zile_pe_sapt,
ore_per_sedinta, locuri_grupa, acreditare )
56
VALUES ("'.$denumire.'","'.$tip_curs.'", "'.$curicula.'",
"'.$pret.'", "'.$nr_sedinte.'", "'.$zile_pe_sapt.'",
"'.$ore_per_sedinta.'", "'.$locuri_grupa.'",
"'.$acreditare.'" )');
if ($ins_curs) {
Dac datele au fost introdu-se corect acest mesaj va aparea Catalog adaugat cu succces,
iar daca nu este introdus cu succes va aparea mesajul Catalogul nu a fost adaugat
echo 'Catalog adaugat cu succes';
echo '<META HTTP-EQUIV=Refresh CONTENT="0">';
} else { echo "Catalogul nu a fost adaugat ";}}
Figura 28
Pentru afiarea cursurilor sa folosit un tabel, iar funciile pentru selectarea datelor sunt
urmatoarele:
$view_curs = $conn->query('SELECT * FROM catalog_cursuri');
while ($row = mysqli_fetch_array($view_curs)) {
Prin variabila $view_curs se face selecia a tuturor cmpurilor din tabelul
catalog_cursuri, pentru a fi afiate.
echo '
<tr>
<td><a href="'.BASE_URL.'curs_one_view.php?id_view='.$row['id_curs'].'"
target="_blank">'.$row['denumire'].'</a></td>
<td>'.$row['pret'].' €</td>
<td>'.$row['nr_sedinte'].'</td>
57
<td>'.$row['ore_per_sedinta'].'</td>
<td>'.$row['tip_curs'].'</td>
<td>'.$row['locuri_grupa'].'</td>
<td>'.$row['acreditare'].'</td>
<td>
<a href="'.BASE_URL.'curs_edit.php?id_edit='.$row['id_curs'].'"style="color:#0f0">
<i class="fa fa-pencil" aria-hidden="true"></i></a></td></tr>';}
Editarea cursului
Sa creat aceasta pagin, n cazul n care un anumit cmp necesit modificare, s putem cu
uurin modifica, un exemplu ar fi orele pe edina sau dac cursul va avea vreodat
acreditare.De asemenea la seciunea de curricula, putem insera informaii despre aceasta.
Fisierul creat pentru aceast pagin se numete curs_edit.php.
Variabila $getIdCursEdit prin apsarea butonului de editare aceasta preia informaiile din
formular si le modifica prin comanda UPDATE.
$getIdCursEdit = $_GET['id_edit'];
if (isset($_POST['submit_edit_curs'])) {
$denumire = $_POST['denumire'];
$tip_curs = $_POST['tip_curs'];
$curicula = $_POST['curicula'];
$pret = $_POST['pret'];
$nr_sedinte = $_POST['nr_sedinte'];
$zile_pe_sapt = $_POST['zile_pe_sapt'];
$ore_per_sedinta = $_POST['ore_per_sedinta'];
$locuri_grupa = $_POST['locuri_grupa'];
$acreditare = $_POST['acreditare'];
$upd_curs = $conn->query('
UPDATE
catalog_cursuri
SET
denumire = "'.$denumire.'",
tip_curs = "'.$tip_curs.'",
58
curicula = "'.$curicula.'",
pret = "'.$pret.'",
nr_sedinte = "'.$nr_sedinte.'",
zile_pe_sapt = "'.$zile_pe_sapt.'",
ore_per_sedinta = "'.$ore_per_sedinta.'",
locuri_grupa = "'.$locuri_grupa.'",
acreditare = "'.$acreditare.'"
WHERE
id_curs = "'.$getIdCursEdit.'"
');
if ($upd_curs) {
aici dupa ce a fost editat, pagina face un refresh.
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.BASE_URL.'curs_edit.php">';
}
Panoul de locaii
Seciunea de adugare sal
Nevoia de a ti in ce sal se vor ine urmtoarele cursuri, crearea sli este
necesare.Cmpurile care creaz sala, este denumirea ei i locaia.Este nevoie s tim locaia , n
cazul n care cursurile se in n alt jude.n fiierul location.php se afl codul de mai jos.
Figura 29
if (isset($_POST['submit_location'])) {
$sala = $_POST['sala'];
$locatie = $_POST['locatie'];
Prin variabila $ins_loc se face inserarea sli si a localitati in tabelul locatii_swa.
$ins_loc = $conn->query('INSERT INTO locatii_swa (
nume_sala,
localitate
) VALUES (
"'.$sala.'",
"'.$locatie.'")');
if ($ins_loc) {
echo 'Locatie inserata';
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.BASE_URL.'location.php">';
} else {
echo 'Eroare cod inserare locatie';
}
59
}
Pe aceai pagina, odat sala creat o putem vedea n tabelul pentru vizualizarea sli.
Deasemenea fiecare rnd se poate edita, sau terge prin acionarea butonul de editare , respectiv
tergere.
Figura 30
60
Concluzii
61