Sunteți pe pagina 1din 61

Capitolul

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.

Figure 1.Reprezentare a structuri a acestei lucrri

2
CAPITOLUL
2 ABORDAREA TEORETIC

Motivul creerii unei platforme de manangement


Datorita complexitati interne si structurii a firmei , gasirea unui program cu o specificare
si flexibilitate de manipulare a datelor in conformitatea cu scopul organizarii mai bine a
informatiilor, a fost mai usor a creea ceva care as putea sa manipulez mult mai bine si la fel sa
ma limitez la anumite aspecte legate de functionalitatea aplicatiei, intr-un mod mult mai lejer
decat preluarea unei aplicatii direct fabricate de la un alt producator si modificarea ulterioara a
acesteia.

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.

Limbaje de programare folosite


Pentru c limbajele web de azi sunt multe la numr i cu structur destul de diferite ntre
ele, n momentul n care alegem un anumit limbaj de programare este nevoie sa lum n
considerarea mai mult dect limbajul n sine, pentru ca acesta, sa ne ofere o sigurana a datelor
noastre odat urcate pe mediul online.
Dup prerea specialitilor n domeniu , securitatea web este principala ramur de care
niciunul dintre noi nu trebuie sa ne lipsim. Accesibilitate deasemenea este de luat n considerare
cauza fiind sumedenia dizpozitivelor de azi,care de la telefoane smart la tablete de toate
dimensiunile necesit acces la aplicaiile noastre, iar nu n ultimul rnd extensibilitatea, de care

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

Php-ul ct i celelalte limbaje de programare sunt foarte bune la un lucru, automatizarea


unor aciuni repetitive.
Spre exemplu dac dorim sa facem zece ecuaii, cu trei variabile, scrierea codului pentru
fiecare ecuaie ar fi:
$1 = (1*2)-3;
$2 = (2*2)-4;
$3 = (3*2)-5;
$4 = (4*2)-6;
$5 = (5*2)-7;
$6 = (6*2)-8;
n schimb am putea face o bucl3 de cod care se repet pn cnd condiia este fals:
for($i=0;$i<10;$i++) {
aici se afl condiia, dac $i este mai mic decat 10 ruleaz codul
$resultat = (($i+1) * 2)-(3+$i);
ecuaia de mai sus a fost scris ntr-un singur rnd folosindu-ne de variabila $i care la
fiecare execuie este mai mare cu 1;
echo $resultat; } postm rezultatul pe pagin dup execuie.
Un alt lucru foarte important la PHP este posibilitatea de a crea funcii, sau extinde
funcionalitatea unei aciuni. De exemplu dac dorim s facem o nmulire ntre dou numere i
dup s verificm dac nmulirea este mai mare decat 20, codul ar fi:
$rezultat = 3*4;

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.

SQL (legtura dintre PHP i Mysql)


SQL (Structured Query Language - Limbaj Structurat de Interogare) este un limbaj de
programare specific pentru manipularea datelor n sistemele de manipulare a bazelor de date
relaionale (RDBMS), iar la origine este un limbaj bazat pe algebr relaional. Acesta are ca
scop inserarea datelor, interogaii, actualizare i tergere, modificarea i crearea schemelor,
precum i controlul accesului la date. A devenit un standard n domeniu, fiind cel mai popular
limbaj utilizat pentru crearea, modificarea, regsirea i manipularea datelor de ctre Sistemele
de Gestiune a Bazelor de Date relaionale. Pe lng versiunile standardizate ale limbajului, exist
o mulime de dialecte i variante, unele proprietare, fiind specifice anumitor SGBD-uri i de
asemenea coninnd extensii pentru a suporta SBD-urile (Sistemele de Baze de Date) obiectuale
(obiectual-relaionale). SQL permite att accesul la coninutul bazelor de date, ct i la structura
acestora. Cele mai frecvente comenzi sunt cele de selectare, inserare, modificare i stergere a
informaiilor din baza de date. Selectarea rndurilor/randului dntr-o baz de data are forma:

SELECT * FROM tabel WHERE nume_atribut = valoare

Aceast comand selecteaz rndul care verific condiia de nume_atribut=valoare

Inserarea ntr-un tabel are forma:


INSERT INTO tabel (nume_atribut_1, nume_atribut_2, nume_atribut_3) VALUES
(valoare_1, valoare_2, valoare_3, )

Pentru a modifica un rnd dintr-un tabel avem nevoie de un identificator pentru a


modifica ceea ce ne intereseaz, i interogarea n Sql are forma:
UPDATE tabel SET nume_atribut_1 = valoare_1, nume_atribut_2 = valoare_2 ...
WHERE nume_atribut_x = valoare_x

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.

5 Tag: etichet folosit la formatarea unei pagini web.

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.

Administratorul (sau webmasterul)


Odat ce am neles toate aspectele componente ale aplicaiei putem spune c am ncheiat
primii pai, ns pe lng partea de programare avem nevoie de un lucru foarte important, o parte
uman care se ocup de problemele aprute n momentul n care aplicatia ntmpina situaii
neprevzute. Administratorul conduce activiti de ntreinere a acesteia, execut testarea i
asigur calitatea funcionrii site-ului sau aplicaiei web. Dac avem o aplicaie care a fost
realizat i nu cumprat, administratorul putem spune c este persoana care l-a realizat. Desigur
c se poate angaja o persoan care s se ocupe doar de aceast rol, ns avem nevoie de o persoan
calificat care are cunotinele necesare pentru a ntmpina problemele sau erorile neprevzute.
Atribuiile administratorului se extind de la inserare de studenti, editare, newsletter, pn
la extinderea aplicaiei dac are cunotine n cauz.
Considerand scopul aplicatiei si modul in care a fost contruit , implicare studentiilor si a
persoanelor neautorizate este fara scop deoarece , informatiile vor fi manipulate doar de cei
autorizati de ctre firm.
n cazul nostru persoana autorizat de ctre firm fiind un administrator , principalul lui
obiectiv fiind ntreinerea aplicaiei, n cazul n care aceasta ntmpin anumite probleme. ns
aceast atribuiune nu este singura pe care un administrator it o are, exemplu ar fi instalarea si
configurarea de programe software, acesta fiind un centru de training, se mai ocupa i cu crearea
de site-uri, caz n care necesit colaborarea cu webdesigneri sau webdeveloperi pentru o mai
bun creare de design a paginilor i bineneles creare de cod curat i bineorganizat.Deasmenea
siturile create mai necesit i o ntreinere, aici administratorul trebuie la cerinele clientului s
actualizeze situl cu noile informaii date de acesta.
Ct despre mediul e-Learning este practic un mediu virtual de educaie care folosete
tehnologia digital i a internet-ului cu scopul de a oferi tuturor celor preocupai de evoluia lor
profesional o serie de instrumente de predare, nvare, evaluare, comunicare, consultare a
cursurilor i materialelor didactice auxiliare, pentru administrarea grupurilor de cursani, a
programelor educaionale i a cursurilor aferente acestora, pentru colectarea i organizarea

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

1 Setarea mediului de rulare a aplicatiei


Pentru ca aplicaia s fie online avem nevoie de un server web pentru a putea rula online.
Modul prin care putem face aceasta, este fie s ne facem propriul server, fie cumprm un
domeniu6 web i l gzduim7 pe un server. Desigur, cel mai avantajos este de a gzdui aplicaia
pe un server, din motive de mentenana i securitate. Gsirea unui serviciu n materie de gazduire
web, este relativ uoar. Exist foarte multe servicii de gazduire web, ns pentru a crea acest tip
de magazin online avem nevoie de o gzduire web care s ne ofere cel puin:
Support php
Opiunea de a accesa fiiere cu adres web , prin intermediul php-ului.
Baz de date Mysql.
Pentru testare, aplicaia este gzduit pe un server care ofer gazduire, support php, baz
de date i un subdomeniu. nregistrarea pentru un cont s-a fcut la adresa mxhost.ro i aplicaia
se poate accesa la adresa administrare.parohiaravasel.ro.

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.

3 Informatii despre baza de date


O baz de date, uneori numit i banca de date, reprezint o modalitate de stocare a
unor date pe un suport extern (un dispozitiv de stocare), cu posibilitatea extinderii uoare i a
regsirii rapide a acestora. De obicei o baz de date este memorat ntr-unul sau mai multe
fiiere. Bazele de date sunt manipulate cu ajutorul sistemelor de gestiune a bazelor de date. Cel
mai rspndit tip de baze de date este cel relaional, n care datele sunt memorate n tabele. Pe
lng tabele, o baz de date relaional mai poate conine: utilizatori i grupuri de utilizatori,
tipuri de date, mecanisme de securitate i de gestiune a tranzaciilor etc. Baza de date poate fi
creat din PhpMyAdmin, o aplicaie open source programat n PHP, care poate fi accesat din
pagina de membru al site-ului pe care ne-am nregistrat pentru gzduirea site-ului.

4 Crearea bazei de date


Pentru aplicatia noastr, vom crea o baz de date numit administ_base i va conine
tabelele cu informaiile necesare acestuia.Imaginea de mai jos ilustreaz baza noastr de date cu
tabele folosit n aplicaie.

17
Figura 3

Tabelele i relaionarea lor


Un tabel este un set de valori, care este organizat folosind un model de coloane verticale
(care sunt organizate dup nume) i rnduri orizontale. Acesta are un numr specific de coloane
dar poate s aib orice numr de rnduri . Fiecare coloan este definit cu o valoare setat n
momentul crerii sale i poate fi ordonat prin colaioanarea sa. Colaionarea (din englez
collation) este un set de reguli care determin cum s compare i s ordoneze caracterele care
sunt stocate ca i date. Fiecare coloan din tabelele create n baza de date, are o colaionare
standard i anume latin_swedish_ci. Orice aplicaie virtual are nevoie de cel puin dou tabele
n baza de date prin intermediul crora poate s funcioneze corect,n cazul nostru am folosit opt
tabele.
Depinznd de natura aplicaiei tabelele pot fi modificate pentru a stoca si simboluri
specifice limbajelor din lumea intreag, ca exemplu avem limba roman, unde sunt o mul ime de
simboluri speciale iar acestea pot fi inregistrate si inelese de tabel, prin transformarea acestuia in
utf8_general_ci.

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);

Iar partea de verificare a conexiuni se face prin codul :


if (!$conn) {
echo 'Eroare MYSQL '.mysqli_connect_error();
}
De regula acest fisier, mai poate contine si alte variabile care pot ajuta in eliminarea
repetrii a codului sau este doar partea de conectare la baza de date.Alte prescurtri pentru cele
legate de URL i importana lor este necesar schimbrea domeniului.O modalitate de a le scrie
este in felul urmtor:
define('BASE_URL', 'http://administrare.parohiaravasel.ro/');

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

Sistemele de logare pot fi mprite n mai multe etape depinznd de complexitatea


codului , acestea depistnd i mprind partea de memorare a uneia sau mai multora
informaii preluate de la utilizator sau utilizatori.Metoda de memorare se face printr-o asa zis
sesiune, care poate s-i mai fie adaugat mai multe valori, una dintre ele fiind numele/email-ul
utilizatorului, acestea depinznd de complexitatea codului, pot fi unice care de regula este doar n
cazul email-ului, sau pot fi asemntoare ,care de regul se poate aplica doar numelui de
utilizator.
Metoda de aranjare a codului pentru sesiune este de asa natur nct acesta trebuie s fie
n fiecare pagin, pentru o verificare constant a informaiilor i a celui care este logat.
Sesiunea n sine nu o s fie limitat doar la depistarea informaiilor,dar i la timpul de
memorare a informaiei care de regul trebuie s fie introdus , motivul fiind cel al securiti n
cazul n care utilizatorul este absent / inactiv o perioad de timp ,aceast perioad de timp fiind
dat de administrator, utilizitatorul automat delogndu-se pentru a putea preveni eventuale
pagube.
Deasemenea fie prin absen de la site sau aciunea utilizatorului de logare , metoda prin
care sesiunea se va termina va fi prin codul specific pentru terminarea sesiuni :
session_destroy();
Fisierul header.php contine codul de integrarea a fisierului de conexiune pentru baza de
date, acesta fiind primul, dupa care urmand codul de html pentru inceperea unei pagini web,
etichetele urmand in ordinea <!DOCTYPE>, <HEAD>, <BODY>.in partea de <head> se va
face referinta la librariile folisite aceastea continand partea de stilizare si functionalitate. In
partea de body se face referinta la lucrurile care se vor repeta in celelalte pagini, care de regula
aceasta fiind meniul, in cazul respectiv fiind doua, care si acestea sunt incluse folosiindu-ne din
nou de php prin care se va face referinta la cele doua fisiere care contin cele doua meniuri :
include 'menu-user.php';
include 'menu-left.php';

30
Deasemenea fisierul header contine o parte din cod care face o verificare la persoanele care sunt
logate sau nu:

Figura 12

if(!isset($_SESSION['loged'])){ //if login in session is not set


header("Location: http://administrare.cu.cc/index_login.php");
}

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']);

Generarea a dou coduri aleatorii pentru siguranta parolei


$salt = '459++u11|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';

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

$pass_hash = hash('sha512', $password);

Partea de verificare daca a scris ceva in una dintre casue :


if(($_POST['email'] == '') || ($_POST['password'] == '')) {
se face verificarea dac a fost introdus ambele informatii ,
echo '<h1 style="color:#F00">Completeaza casutele.</h1>
<h3> Inapoi <a href="'.BASE_URL.'index_login.php">Log-In</a></h3>';
} else {
Selecia din baza de date a utilizatorului care se logheaza,
$select_users = $conn->query('SELECT email FROM traineri_swa WHERE email ="'.
$_SESSION['email'].'" AND password="'.$pass_hash.'" ' );

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);

Funcia mysqli_fetch_array va face verificare la selectia fcut si va prelua informaiile


dintr-un singur rnd.
Aici se verific partea n care utilizatorul este existent
if($data[0] != 0) {
se va face verificare dac informaiile care vor fi inregistrate vor fi existente, apelnd la
una dintre cele mai simple comparatii ,adic nu este egal !=
echo '<h3> Mai incearca <a href="'.BASE_URL.'">AICI</a></h3>';
} else {
echo '
<h1>Va multumim. </h1>

34
Iar dac datele au fost introduse corect un mesaj de confirmare va aprea cu textul

Figura 14

<p> Datele au fost introduse cu succes in baza de date. </p>


<h3> Pentru a va autentifica apasati <a
href="'.BASE_URL.'index_login.php">AICI</a></h3>';

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

Acesta este codul care face trimiterea mail-ului


mail($to_anunt, $subject_anunt, $msg_mail, $headers );
}
}
break;
}
Metoda de autentificare dar si cea de stocare a utilizatorului , la fel si modul de
securizare a informaiilor , n momentul n care acesta ii introduce parola poate fi n moduri
diferite depinznd din nou de cunotiinele programatorului.

Modul de verificare si stocare a parolei se face in modul urmator :


- Parola este introdusa intre doua variabile ce contin un numar de caractere aleatori,
$salt = '459++u11|g;FY9vq{s10;DO*cd!7PXqM^5EgV1R8h9+:1hHt?;67XZFong_N=Ue';
$pepper =

36
'~~^j 0L{t7QGqYX4*^NK$R2f8L4w|6~Kx-aMkm-K5n#=wksepF5t;W(V-`IP+DUN';
Ex: $salt.parola_ta.$pepper

- Dupa care parola va fi amestecate cu acea variabila cu caractere aleatorii ,


folosiindu-se de diferite metoda de amestecare a codului, fie aceastea fiind MD5
sau SHA512. Exemplu folosit :
$pass_hash = hash('sha512', $password);

Partea de meniu

Cele dou fiiere care se ocup de afiearea meniului sunt: meniu_left.php i


meniu_user.php .
Meniu_left.php se ocup de partea de navigaie, i de afiare a avatarului i numele
utilizatorului care aceastea sunt preluate din baza de date cu ajutorul codului ce se afl in fisierul
code.php.

Figura 15

$sel_username = $conn->query('SELECT * FROM traineri_swa WHERE email="'.


$_SESSION['email'].'" ');
$the_user = mysqli_fetch_row($sel_username);

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

Fiierul ce se ocup de partea de editare a profilului este trainer_profile.php iar acesta se


va ocupa de editarea informaiilor cu caracter personal specifice trainer-ului acestea fiind nume ,
prenume, avatar, cv si email.
Prin codul de mai jos ,facem referire la utilizatorul care este logat si preluam informaiile
care sunt preluate n baza de date, dar deaseamenea prin aceasta verificm dac cel care este
logat, are informaiile necesare , iar n momentul n care nu sunt informaii care nu sunt afiate,
ele vor fi inlocuite de informaii standard.
<?php if ( !($the_user[7] == '')): ?>
<img src="<?php echo BASE_URL .'img/trainer_pic/'. $the_user[7] ?>"
class="img-circle" alt="User Image">
<?php else: ?>
<img src="<?php echo BASE_URL ?>img/trainer_pic/avatar.png" class="img-
circle" alt="User Image"> <?php endif; ?>

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'];

Codul de inserare a informatiilor in tabel


$ins_stud = $conn->query('INSERT INTO studenti_swa (nume, prenume,telefon,
email,cnp,serie_ci,judet, localitatea,adresa, nume_mama,
nume_tata,studii, ultim_act_studiu, laptop_personal)
VALUES ("'.$nume.'","'.$prenume.'","'.$telefon.'", "'.$email.'","'.$cnp.'",
"'.$serie_ci.'","'.$judet.'","'.$oras.'","'.$adresa.'",
"'.$nume_mama.'","'.$nume_tata.'","'.$studii.'",
"'.$ultim_act_studiu.'","'.$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';
}
}

Seciunea de vizualizare a stundeilor

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();

#myTableLocation este un Id unic tabelului pentru a putea determina cui se va oferi


propriettile oferite de funcia DataTabel();

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>

n seciunea de mai jos, am procedat n modul n care depinznd de ce doresc s fac, si a


situatiei prezente informaiile chiar dac sunt acealeai , vor fi preluate diferit fie in funcie de
editare sau tergere, astfel n fiierul student_code.php se va prelua id-ul unic care prin acesta se
va stabili actiunea executat.Metoda prin care id-ul va fi preluat , va fi prin URL si se va face cu
codul $_GET.
<td>
<a href="'.BASE_URL.'student_code.php?id_edit='.$row['id_student'].'"style="color:#0f0"
target="_blank"> <i class="fa fa-pencil" aria-hidden="true"></i></a>
-
<a href="'.BASE_URL.'student_code.php?id_delete='.
$row['id_student'].'"style="color:#f00"> <i class="fa fa-trash" aria-
hidden="true"></i></a>
</td>
</tr>';
}

Sectiunea de editare a studentului

Din seciunea de vizualizare a stundentului ,prin apsarea butonului de editare, vom fi


redirectionai spre o pagin, n care se va putea edita date personale despre acesta.Fiierul cu
codul pentru aceast seciune se numete student_code.php.

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.

$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'];

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

while ($row = mysqli_fetch_array($sel_ALL_trainers)) {


echo '
<tr><td>';
Verificare dac utilizatorul are o imagine incrcat
if ( !($row['img'] == '')):
echo '<img src="'.BASE_URL .'img/trainer_pic/'.$row['img'].'" style="width:60px;
height:60px;">';
iar dac nu are i se va aloca una standard.
else: echo '<img src="'.BASE_URL .'img/trainer_pic/avatar.png" style="width:60px;
height:60px;">';
endif;
echo '</td><td>'.$row['nume'].'</td><td>'.$row['prenume'].'</td>
<td>'.$row['email'].'</td>
<td>';
if ( !($row['cv_trainer'] == '')): echo '<a href="'.BASE_URL .'img/trainer_cv/'.
$row['cv_trainer'].'" target="_blank">CV</a>';
else: echo 'NO CV';
endif;
echo '</td></tr>';}

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, '.'));

Verificarea tipului de fiier care va fi incrcat pe server


$file_ext_img= substr($file_img, strripos($file_img, '.')); - acesta preia extensia fisierului
$full_name_i= $file_basename_img.$file_ext_img;- acesta preia numele plus extensia
$filesize_img= $_FILES["myImg"]["size"]; - marimia fisierului
$allowed_file_types = array('.gif','.jpg','.jpe','.jpeg','.png'); - tipul de extensii ce sunt permise

$file_basename_cv= substr($file_cv, 0, strripos($file_cv, '.'));


$file_ext_cv= substr($file_cv, strripos($file_cv, '.'));
$full_name_cv= $file_basename_cv.$file_ext_cv;
$filesize_cv= $_FILES["myCV"]["size"];

$uploaddir = $_SERVER['DOCUMENT_ROOT'].'/img/'; - calea unde o sa fie uploadate,


trebuie folosit $_SERVER['DOCUMENT_ROOT'] pentru a avea acces
$file_path_img = $uploaddir.'trainer_pic/'.$full_name_img; - calea pentru imagine
$file_path_cv = $uploaddir.'trainer_cv/'.$full_name_cv; -calea pentru cv

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.

if ($insProf) { echo '<META HTTP-EQUIV=Refresh CONTENT="0;


URL='.BASE_URL.'trainer_profile.php">'; }
} elseif ( !empty($movePoza)) {

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

Seciunea de adugare grup


nainte de a creea grupa cu stundei, este nevoie sa creem cursul, pentru a ti ce fel de
curs se pred in grupa respectiv,n primul cmp vom scrie cum se va numi grupa , din al doilea
cmp se alege cursul care se va preda si numele la trainer,fiind urmat de campurile sala n care
se va ine cursul, cnd acesta va ncepe, data finalizare si data de exemanire.

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));

Pentru a putea fi citit de brows-ere diferite , modalitatea de afiare a timpului va fi


utilizat cu ajutorul la jquery, prin funcia datepicker().

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.

Sectiunea de vizualizare grupa


n aceast parte avem afiate grupele cu sala n care se in cursurile, deasemenea numele
trainer-ului care pred materia respectiva. Dac dorim s vedem si studeni care fac parte din
grupa respectiv, trebuie doar s facem un simplu click pe nume si o sa fim redirecionai la
pagina de afisare a grupei individual.

50
Figura 24

Prin

while ($row = mysqli_fetch_array($sel_group_specs)) {


echo '
<div class="col-md-2 text-center">
<h1><a href="'. BASE_URL.'grup_single.php?id_grupa='.$row['id_grupa'].'"
target="_blank">'.$row['denumire'].'</a></h1>
<h4>'.$row['nume_sala'].'</h4>
<b>'.$row['nume'].' '.$row['prenume'].'</b>
</div>';

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.

Seciunea de vizualizare a grupei individual


Acest tabel afiseaz stundeti care sunt in grupa respectiv.Aici putem vedea data cnd
aceast grupa a nceput cursul , cnd se termin si data de examinare. n partea de sus a pagini
avem o bar procentual, aceasta ne arat ct de plin este grupa respectiv. O grupa fiind
format din maxim 20 de stundeni, iar 17 stundeti din 20 , reprezint numarul lips de stundei

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.'"');

n a doua selecie, este o combinaie ntre tabelul studenti_swa si tabelul


studenti_in_grupa, cu o adaugare a unei noi coloane,prin funcia de COUNT, va face suma a
tuturor studenilor din grupa respectiv.
$nr_of_stud_in_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,
COUNT(studenti_swa.nume)
FROM studenti_swa INNER JOIN studenti_in_grupa

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';}

Sectiunea de mutare student in alta grupa


Panoul de mutare a stundenilor dintr-o grupa n alt grup, ne este de folos dac un
stundent n care de exemplu acesta fiind in grupa de Web Design , acesta se hotrte sa urmeze
cursuri de C++,din panoul de vizualizare a studentului, la seciunea de Aciune apsam butonul
de editare si vom fi redirecionai pe pagina grup_single_edit.php, iar prin simpla selectare a
cursului dorit i prin apsarea butonul Transfera student acesta va fi mutat in grupa dorit.

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);

Sectiunea de adaugare a stundetilor in grupa

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

$time_now_time = date('Y-m-d H:m:s');


$sel_Grup_Stud_exist = $conn->query('SELECT studenti_swa.id_student,
studenti_swa.nume,studenti_swa.prenume,
studenti_in_grupa.id_grupa,grupa.id_grupa, grupa.data_finalizare
FROM studenti_swa
LEFT OUTER JOIN studenti_in_grupa

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.'") '); }

Deasemenea daca studentul a fost cu succes adaugat, un mesaj va aparea cu Stundetul a


fost adaugat cu succes.
if ($insert_studenti_group) {
echo 'Studentul a fost adaugat cu succes<br>';
echo '<META HTTP-EQUIV=Refresh CONTENT="0;
URL='.BASE_URL.'grupa_stud_grup.php">';
} else {
echo 'Studentul nu a fost adaugat<br>';
}
}

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

Sectiunea de adaugare a cursurilor


Deasemenea mai este nevoie de creearea cusurilor, acestea avnd un rol informativ n ce
ine de denumirea cursului, tipul cursului i anume online , la sala etc.,cursul odat introdus prin
tabel de afisare vom avea o mai buna viziune despre cursurile care se predau n interiorul
centrului.

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 ";}}

Sectiunea de vizualizare a cursurilor


n aceasta seciune putem vizualiza cursurile i informaii despre acesta, cum ar fi preul
cursului, numrul de edine cte ore pe edine , daca acesta este unul la sala sau online, cte
locuri sunt n grup si dac acesta este acreditat n vreun fel.Prin apsarea butonului de la rndul
aciune, vom fi redirectiona-i ctre o nou pagina n care putem edita date, care necesit
modificare.

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'].' &euro;</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

while ($row = mysqli_fetch_array($sel_Location)) {


prin aceast comand se face selecia pentru afisare a rndurilor nume_sala i localitate.
echo '
<tr>
<td>'.$row['nume_sala'].'</td>
<td>'.$row['localitate'].'</td>
<td>
<a href="'.BASE_URL.'location_code.php?id_edit='.
$row['id_locatie'].'"style="color:#0f0">
<i class="fa fa-pencil" aria-hidden="true"></i>
</a>
-
<a href="'.BASE_URL.'location_code.php?id_delete='.
$row['id_locatie'].'"style="color:#f00">
<i class="fa fa-trash" aria-hidden="true"></i>
</a>
</td>
</tr>';
}

60
Concluzii

ntruct internetul i nevoile societi sunt ntr-o continu schimbare i evoluie,


aplicaiile web sunt ntr-o cretere continu, pentru c ofer utilizatorului posibilitatea de a avea
acces i control , de oriunde acesta s-ar afla asupra nevoilor sale. Aceast aplicaie vine la
solicitarea unui director de centru training web, n cautarea unei mai bune administrri n ce
privete centrul acestuia.Fiind ntr-o continu dezvoltare, si-a dorit o platform online de
management, pentru c lejeritatea oferit de platformele online fiind de neegalat din orice
direcie. ntr-o masura satifctoare , lucrarea si-a atins elul ei, aceasta oferind directorului de
centru o mai buna organizare a viitoarelor grupe care se formeaz.
Acum despre dezovoltarea ei ulterioar, aceasta n viitor va oferi posibilitatea
cursantiilor de a se loga i ei, pentru vizualizare cursuri, situaia lor n grup i multe altele,
deasemenea structura codului va fi modificata, aceasta fiind ulterior schimbat dupa o structura
framework Laravel, acesta fiind un cadru web open-source gratuit de PHP i a fost creat de
Taylor Otwell destinat pentru dezvoltarea de aplicaii web dupa un model arhitectural
MCV(model-view-controller ).

61

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