Internet odat ă cu trecerea timpului a evoluat semnificativ oferin d noi oportunit ăți pentru [605001]
1
Capitolul
1 Introducere
Internet odat ă cu trecerea timpului a evoluat semnificativ oferin d noi oportunit ăți pentru
indiferent de tipul de domeniu, acesta f ăcându-l mai atractiv si personal în func ție de dorin țele
utilizatorului.Când m ă refer la dorin țele utilizatorului, aceast ă aplica ție a fost creat ă la cererea
unui director al unui centru de training web, oferi indu-i acestuia posibilitatea de a avea o mai
buna gestionare a centrului care îl de ține.
Nu cu mult timp în urma , a ap ărut o nou ă form ă de înva țământ și anume înv ățarea
asistat ă de calculator care mai poarta numele de E-learning iar fondatorul ei fiind Internet Time
Group.Exist ă o leg ătura între aplica ția noastr ă și E-learning , iar acea fiind ca amandou ă provin
din acea și arie, diferen ța f ăcând-o c ă E-learning reprezint ă metoda de educa ție sau mai bine zis
instruirea unui grup de persoane prin mijloace elec tronice, iar aplica ția este un sprijin în ce
prive ște managementul intern al centrului, ajutând la o m ai bun ă formare a viitoarelor grupe și nu
numai.Centrele de training au început s ă fie tot mai solicitate de c ătre mariile compani , pentru c ă
odat ă cu aceast ă evolu ție a internetului si a tehnologiei, cerin țele s-au schimbat iar programele
școlare clasice, au r ămas în urm ă, ne mai putând produce oameni cu formare profesion al ă
adecvat ă cerin țelor compani.
Dar totu și de ce aceste centre de training? R ăspunsul vine tot de la aceste compani, și
anume , împingem lumea s ă înve țe ceva ce nu îi înspir ă,ceva ce nu cre ște natural în ei.Acest ă
idee dac ă a fost ascultat ă de persoanele potrivite a dat na ștere acestui fenomen, îl putem numi a șa
pentru c ă procesul de predare este diferit de cel cu care am fost noi obi șnui ți, acesta bazându-se
pe suporturi online interactive, care fac mult mai interesant procesul de înv ățare, cursurile online
acestea fac procesul de predare sa fie mai u șor , ne mai fiind nevoie de deplasarea noastr ă fizic ă,
aici putem ad ăuga timpul pierdut pân ă la școal ă și înapoi și pe deasupra ocuparea unei clase de
curs, care poate fi costisitoare .De aceasta mariil e companii prefer ă în zilele noastre formarea
angaja ților s ăi în astfel de centre, ajutându-i s ă țin ă pasul cu evolu ția continu ă a tehnologiei.
Acum ce ține de structura lucr ări , capilolul unu fiind partea de introducere în c are
explic ăm motivul pentru care am creat acest ă aplica ție odat ă cu benefiicile ei urmând ca în
2
capitolul doi sa ne ocup ăm de partea teoretic ă a limbajelor de programare folosite cu toate
detaliile posibile despre acestea, dup ă care în capitolul 3 o s ă explic ăm structura a codului pe
care am folosit, aplica ția în sine a aplica ției aratând cum se formeaz ă o grup ă, tot odat ă cum
adaug ăm studen ți, mai pe scurt spus vom arat ă cum ajut ă aceast ă aplica ție pentru o mai bun ă
gestionare a centrului de training dupa care în înc heiere concluziile la tot ce am f ăcut pâna în
acel punct.
Figure 1.Reprezentare a structuri a acestei lucr ări
3
CAPITOLUL
2 ABORDAREA TEORETICĂ
Motivul creerii unei platforme de manangement
Datorit ă complexit ăți interne și structurii firmei , g ăsirea unui program cu o specificare si
flexibilitate de manipulare a datelor în conformita te cu scopul organiz ării mai bine a
informa țiilor, a fost mai u șor a creea ceva care a ș putea sa manipulez mult mai bine și la fel s ă
mă limitez la anumite aspecte legate de func șionalitatea aplica ției, într-un mod mult mai lejer
decât preluarea unei aplica ții direct fabricate de la un alt produc ător și modificarea ulterioara a
acesteia.
Avantajele acesteia
Crearea si structurarea a unei aplica ții in jurul careia se bazeaz ă niste idei clare pe o
structura aleasa de mine , cu idei si schematici sp ecifici pe un anumit punct, ar produce rezultate
mult mai bune și un cod mult mai bine definit, decât o aplica ție care se „impr ăștie” în mai multe
direc ții și la care s-ar putea s ă folosesc doar o anumit ă parte a functionalit ăți ei, far ă ca aceasta s ă
îmi fie cu adevarat de folos.
Garantia unei aplica ții individuale bazat ă pe ni ște concepte și scopuri propii va fi mult
mai bine organizat ă și mai pu țin costisitoare decât g ăsirea unei aplica ții deja existente apoi
manipularea ei spre dorin țe sau scopuri care sunt setate.
Limbaje de programare folosite
Pentru c ă limbajele web de azi sunt multe la num ăr și cu structur ă destul de diferite între
ele, în momentul în care alegem un anumit limbaj de programare este nevoie sa lu ăm în
considerarea mai mult decât limbajul în sine, pentr u ca acesta, sa ne ofere o siguran ța a datelor
noastre odat ă urcate pe mediul online.
Dup ă p ărerea speciali știlor în domeniu , securitatea web este principala ramur ă de care
niciunul dintre noi nu trebuie sa ne lipsim. Accesi bilitate deasemenea este de luat în considerare
cauza fiind sumedenia dizpozitivelor de azi,care de la telefoane smart la tablete de toate
4
dimensiunile necesit ă acces la aplica țiile noastre, iar nu în ultimul rând extensibilitat ea, de care
trebuie deasemenea s ă ținem cont, pentru ca limbajul în care dorim s ă construim aplica ția , s ă fie
ușor de în țeles și nu numai.
Securitatea
Securizarea informa țiilor nu este un lucru de trecut cu vederea, acesta putând fii
elementul principal al unei aplica ții online, pentru c ă odat ă cu înregistrarea un o pagina web a
datelor personale începând de la nume , prenume, nu mere de telefon pân ă la cod numeric
personal, acestea putând pe urm ă s ă ne creeze probleme dac ă ajung pe mâna raufac ătorilor.
Bineîn țeles ca nu putem evita problemele priviind securita tea, îns ă ce prive ște cerin țele minime
de securitatea în momentul creari de aplica ții web, nu trebuie trecute cu vederea.
Accesibilitatea
Accesibilitatea un cuvânt tot mai des întâlnit în z ilele noastre, și nu din cauza internetului
neaparat, ci mai degrab ă din cauza dispozitivelor noi ap ărute. Dac ă ignor ăm acest lucru ,
accesibilitatea pe noile dispozitive nu va putea fi posibilă pentru c ă dimensiunea ecranului nu ne
permite acest lucru, de aceea crearea unei aplica ții cu func ții adaptabile oric ărui tip de dispozitiv
este foarte important ă.
Extensibilitatea
Acest factor f ără de care ne-am complica munca, este important pentr u ca aplica ția odat ă
creat ă s ă poat ă fi u șor de modificat, adaugat si chiar șters în cod, ne scute ște de rescrierea
aceluia-si tip de func ții, iar extragerea de informa ții s ă fie f ăcute cu u șurin ță . În aplica ția propus ă,
am încercat pe m ăsura cuno știin țelor proprii s ă ating aceste trei puncte importante pentru ca
utilizatorii s ă poate beneficia de o protec ția a datelor, cât și accesibilitate , aceast ă aplica ție fiind
una adaptabil ă tuturor dispozitivelor actuale, iar in ce ține de structura codului, acesta poate cu
ușurin ță fi modificat.
Descrierea limbajelor
Html-ul la începutul lui, permitea redactarea de do cumente hypertext de nivel înalt și
bineîn țeles foarte elaborat, îns ă evolu ția internetului și a paginilor web f ăcândul s ă devina mai
pu țin atractiv decât a fost la începutul lui, cauza fi ind aspectul vizual pe care acesta nu poate s ă îl
5
ating ă.De aceea a fost gândit un nou limbaj care în sine este mai mult un termen prin care numim
tehnicile utilizate pentru a crea paginile web cât mai interactive și dinamice.
Câtava dintre tehniciile actuale, pe lâng ă cel de HTML-ul clasic, ar fi CSS(Cascading
Style Sheets) , JavaScript, Jquery, Php , Mysql ace stea ne ofer ă posibilitatea de creere a paginilor
web interactive și nu numai. Acum scopul acestei lucr ări nu este studiul am ănun țit al acestora,
dar pe scurt vom folosi cateva exemple si ce înseam n ă acestea.
No țiunea de stil este, pentru un document HTML, asem ătoare cu formarea
documentului, spre exemplu, pentru un document Word .Exist ă o mul țime de atribute prin care se
pot stabili font-urile, caracteristicile de alinier e a textului, forma elementului, culorile de font s i
ale literelor, marginile, pozi ția elementelor, etc.Pentru a putea gestiona cât mai eficient stilurile, a
fost pus la dispozi ția programatorilor de pagini web un limbaj prin car e se poate realiza acest
lucru.Acest limbaj este cunoscut sub de numele de C SS .(actualmente sa ajuns la vartianta
CCS3).
Legatura dintre HTML si CSS se realizeaz ă prin intermediul tag-ului care trebuie a șezat
intre <HEAD>
<STYLE>..</STYLE>
<HEAD> .
Alt limbaj folosit de mine in aplicatie este JavaSc ript ,acesta este un limbaj de
programare orientat pe obiecte.În ciuda numelui și a unor oarecare similarit ăți 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 cuno știn țe de C poate cu u șurin ță s ă înve țe JavaScript.De și
acest limbaj are o plaj ă mai larg ă de extindere, cel mai des întâlnit este în scripta rea paginilor
web. Programatorii web pot îngloba în paginile HTML script-uri pentru diverse activit ăți, cum ar
fi verificare datelor introduse de utilizatori, sau crearea de meniuri ori de alte efecte animate.
Browser-ele re țin în memorie o reprezentare a paginii web sub form a unui arbore de obiecte,
punând aceste obiecte la dispozi ția 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 u șoar ă folosindu-ne de el. Bootstrap
1 framework define ște, în termeni generali, un ansamblu standardizat d e concepte, practici și criterii pentru a se
aplica asupra unui tip particular de problematic ă, ce serve ște ca referin ță pentru a propune și rezolva probleme cu
conota ții similare. În dezvoltarea de software un framework este o structur ă conceptual ă și reprezint ă o arhitectur ă de
6
include template-uri de design HTML si CSS cum ar f i butoane , tabele, meniuri de navigare,
carousele, deasemenea si plugin-uri optionale JavaS cript.Ne mai ofera si posibilitatea de creare a
unui website personalizat. 2Avantajele folosiri acestui framework ar fi c ă este u șor de folosit,
oricine cu cuno știin țe HTML si CSS de baz ă ar putea folosi Bootstrap, acesta mai este
compatibil cu toate browsere-le moderne (Chrome, Fi refox, 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 ini țial pentru a produce pagini web dinamice. În
acest scop, codul PHP este incorporat în documentul HTML și interpretat de c ătre 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 urm ării vizitatorii de pe site-ul s ău, și s ă vad ă cine îi verific ă cv-ul. PHP
evolueaz ă din 1994 ca și open source. De-a lungul anilor acronimul de Pers onal Home Page sa
schimbat și a trecut la Hypertext Preprocesor. Este un softwa re gratuit lansat sub licen ța PHP.“
PHP-ul a fost construit cu un gând, s ă fie cât mai simplu. Este foarte u șor de în țeles și de înv ățat,
mai ales de c ătre persoanele care au cuno știn țe 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
înv ăța foarte repede PHP. Deasemenea PHP ruleaz ă pe aproape orice platform ă, dar principalele
fiind UNIX, Mac, și Windows. Din punct de vedere al resurselor, nu fo lose ște mult din resursele
sistemului, ruleaz ă rapid și nu încetine ște alte aplica ții 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 ap ărute. Ofer ă posibilitatea de a
modific ă orice aspect al unei aplica ții, începând de la func ții de manipulare a unui strîng ( siruri
de caractere ) , pân ă 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, p utem
extinde aplica ția cu noi func ții datorit ă complexit ății sale și avem parte de o securitate prin
func ții care filtreaz ă informa țiile trimise spre server.
software care modeleaz ă rela țiile generale ale entit ăților domeniului (site-ului). Aporteaz ă o structur ă și o metodologie
de munc ă pe care aplica țiile domeniului web o extind sau utilizeaz ă.
2 Web design personalizat ,”cunoscut sub acronimul englez RWD (Responsive Web Design) este o filozofie de design
și dezvoltare destinat ă adapt ării apari ției de pagini web pentru dispozitivul utilizat pent ru vizualizare. Ast ăzi paginile
web sunt afi șate pe mai multe tipuri de dispozitive, cum ar fi t ablete, Smartphone-uri, c ărți electronice, calculatoare, și
asa mai departe. Mai mult, fiecare dispozitiv are c aracteristicile sale specifice: dimensiunea ecranul ui, rezolu ție,
putere CPU, capacitatea de memorie, printre altele. Aceast ă tehnologie î și propune ca, de și cu un design unic sa
poat ă fi vizualizat ă de pe orice dispozitiv.” Sursa wikipedia
7
Figura 1
Php-ul cât și celelalte limbaje de programare sunt foarte bune la un lucru, automatizarea
unor ac țiuni repetitive.
Spre exemplu dac ă dorim sa facem zece ecua ții, cu trei variabile, scrierea codului pentru
fiecare ecua ție 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 bucl ă3 de cod care se repet ă pân ă când condi ția este fals ă:
for($i=0;$i<10;$i++) {
aici se afl ă condi ția, dac ă $i este mai mic decat 10 ruleaz ă codul
$resultat = (($i+1) * 2)-(3+$i);
ecua ția de mai sus a fost scris ă într-un singur rând folosindu-ne de variabila $i care la
fiecare execu ție este mai mare cu 1;
echo $resultat; } post ăm rezultatul pe pagin ă dup ă execu ție.
Un alt lucru foarte important la PHP este posibilit atea de a crea func ții, sau extinde
func ționalitatea unei ac țiuni. De exemplu dac ă dorim s ă facem o înmul țire între dou ă numere și
dup ă s ă verific ăm dac ă înmul țirea este mai mare decat 20, codul ar fi:
$rezultat = 3*4;
If($rezultat > 20) {
Echo “numerele înmulțite rezultă un număr mai mare decât 20”;
3 Un "loop” sau bucl ă se poate defini ca fiind o declara ție de control care permite codului s ă se execute repetat bazat
pe o condi ție de tip adev ărat sau fals.
8
}Else {
Echo “numerele nu rezultă un număr mai mare decâ t 20”;
}
Tot acest cod ar trebui rescris la fiecare verifica re a înmul țirii dintre dou ă numere.
Prin PHP putem s ă scriem o func ție care nu mai necesit ă decât invocarea acelei func ții.
Function verifica_inmultire ($cifra1, $cifra2, $com para) {
$rezultat = $cifra1*$cifra2;
If($rezultat > $compara) {
Echo “numerele inmulțite rezultă un număr mai mare decât 20”;
} Else {
Echo “numerele nu rezultă un numar mai mare decât 2 0”;
}
}
Func ția de mai sus face exact acela și lucru cu primul exemplu, singura excep ție o face
faptul c ă acum putem s ă folosim aceast ă procedura de cate ori dorim, doar invocând numele
func ției și completând cele trei variabile necesare. Spre exe mplu, dorim înmul țirea a trei
seturi a câte dou ă numere sa fie mai mici decât treizeci:
verifica_inmultire (5, 3, 30); //adevărat
verifica_inmultire (10, 4, 30); // fals
verifica_inmultire (1, 18, 30); //adevărat
Cele trei invoc ări de func ții sunt exact la fel cu scrierea fiec ărei compara ții în parte.
Odat ă scris ă func ția, o putem invoca, iar dac ă dorim modificarea func ției doar o modific ăm și
ac țiunea se va schimba pentru fiecare invocare a func ției în parte. Prin acest exemplu am
combinat dou ă opera ții matematice într-o singur ă func ție. 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 atacuril or web, și putem s ă o verific ăm prin
comanda:
is_string($valoare); //adev ărat dac ă este string, fals pentru orice altceva
is_int($valoare); //adev ărat dac ă este numar întreg, fals pentru orice altceva
Metodele de mai sus sunt folosite pentru securitate a unui site, filtrând informa țiile
primite.
MySQL este un sistem de gestiune a bazelor de date rela țional, produs de compania
suedeza MySQL AB și distribuit sub Licen ța Public ă General ă GNU. Este cel mai popular
SGBD (sistem gestiune baz ă de date) open-source la ora actual ă, fiind o component ă cheie a
stivei LAMP (Linux, Apache, MySQL, PHP). De și este folosit foarte des împreun ă cu limbajul
9
de programare PHP, cu MySQL se pot construi aplica ții în orice limbaj major. Exist ă multe
scheme API disponibile pentru MySQL ce permit scrie rea aplica țiilor î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 fol osind un tip spefic API. O interfa ță de tip
ODBC denumit ă MyODBC permite altor limbaje de programare ce folo sesc aceast ă interfa ță , s ă
interac ționeze cu bazele de date MySQL cum ar fi ASP sau Vi sual Basic. În sprijinul acestor
limbaje de programare, unele companii produc compon ente de tip COM/COM+ sau .NET
(pentru Windows) prin intermediul c ărora respetivele limbaje s ă poat ă folosi acest SGBD mult
mai u șor decât prin intermediul sistemului ODBC. Aceste c omponente pot fi gratuite (ca de
exemplu MyVBQL) sau comerciale. Licen ța GNU GPL nu permite încorporarea MySQL în
softuri comerciale; cei care doresc s ă fac ă acest lucru pot achizi ționa, contra cost, o
licen ță comercial ă de la compania produc ătoare, MySQL AB. MySQL este component ă integrat ă
a platformelor LAMP sau WAMP (Linux/Windows-Apache- MySQL-PHP/Perl/Python).
Popularitatea sa ca aplica ție web este strâns legat ă de cea a PHP-ului care este adesea combinat
cu MySQL și denumit Duo-ul Dinamic. În multe c ărți de specialitate este precizat faptul ca
MySQL este mult mai u șor de înv ățat și folosit decât multe din aplica țiile de gestiune a bazelor
de date, ca exemplu comanda de ie șire fiind una simpl ă și evident ă: “exit” sau “quit”.
Pentru a administra bazele de date MySQL se poate f olosi modul linie de comand ă sau,
prin desc ărcare de pe internet, o interfa ță grafic ă: MySQL Administrator și MySQL Query
Browser. Un alt instrument de management al acestor baze de date este aplica ția gratuit ă, scris ă
în PHP, phpMyAdmin. MySQL poate fi rulat pe multe d intre 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 func ționeaza ca și sistem de suport XML (Extensible Markup
Language).
10
Figura 2
Din punct de vedere al stoc ării și acces ării, func ționeaz ă mai mult sau mai pu țin diferit:
Ce tine de licenta Mysql este open source (codul su rs ă al programului poate fi modificat), ceea
ce permite oric ărei persoane care creaz ă o aplica ție s ă nu pl ăteasca foarte mult, costurile ar fi
cele de hosting. Îns ă dac ă cineva face un soft care vrea s ă-l vând ă are nevoie de licen ță
comercial ă. Pentru MS SQL lucrurile stau pu țin diferit, trebuie achizi ționat ă cel pu țin edi ția
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(codu l surs ă al programului nu poate fi
modificat), în compara ție cu MySql care este open source, nu avem acces la codul surs ă.
Dac ă cele dou ă sisteme sunt comparate ca și performan țe, MySql are cele mai multe
avantaje. Are nevoie de pu țin spa țiu 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,
performan țele sunt comparativ mai scazute. Este dificil s ă lucr ăm cu acest sistem f ără s ă avem
cuno știn țe legate de MS SQL și f ără hardware eficient. De asemenea MS SQL necesit ă mai mult
spa țiu de stocare comparat cu MySql.
În cazul în care cele dou ă sisteme sunt comparate pe baza procesului de recup erare, MS
SQL are mai multe beneficii decât MySQL. Datorit ă configura ției MyISAM, uneori devine un
dezavantaj pentru sistem. În cazul în care se produ ce o perturbare sau întrerupere cu MySQL,
11
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.
Atât MySQL și MS SQL adopt ă m ăsuri ample de securitate de la bun început. Dac ă un
port devine prea vulnerabil utilizatorului îi este permis s ă-l schimbe. Utilizatorul are obliga ția de
a actualiza software-ul din timp în timp pentru a l e proteja de utilizari nedorite.
SQL (legătura dintre PHP și Mysql)
SQL (Structured Query Language – Limbaj Structurat de Interogare) este un limbaj de
programare specific pentru manipularea datelor în s istemele de manipulare a bazelor de date
rela ționale (RDBMS), iar la origine este un limbaj bazat pe algebr ă rela țional ă. Acesta are ca
scop inserarea datelor, interoga ții, actualizare și ștergere, modificarea și crearea schemelor,
precum și controlul accesului la date. A devenit un standar d în domeniu, fiind cel mai popular
limbaj utilizat pentru crearea, modificarea, reg ăsirea și manipularea datelor de c ătre Sistemele
de Gestiune a Bazelor de Date rela ționale. Pe lâng ă versiunile standardizate ale limbajului, exist ă
o mul țime de dialecte și variante, unele proprietare, fiind specifice anum itor SGBD-uri și de
asemenea con ținând extensii pentru a suporta SBD-urile (Sistemel e de Baze de Date) obiectuale
(obiectual-rela ționale). SQL permite atât accesul la con ținutul bazelor de date, cât și la structura
acestora. Cele mai frecvente comenzi sunt cele de s electare, inserare, modificare și stergere a
informa țiilor din baza de date. Selectarea rândurilor/randu lui dîntr-o baz ă de data are forma:
SELECT * FROM tabel WHERE ‘nume_atribut’ = ‘valoare ’
Aceast ă comand ă selecteaz ă rândul care verific ă condi ția de ‘nume_atribut’=’valoare‘
Inserarea într-un tabel are forma:
INSERT INTO ‘tabel’ (‘nume_atribut_1‘, ‘nume_atribu t_2‘, ‘nume_atribut_3‘) VALUES
(‘valoare_1’, ‘valoare_2’, ‘valoare_3’, )
Pentru a modifica un rând dintr-un tabel avem nevoi e 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’
Ștergerea se face cu comanda:
12
DELETE FROM ‘tabel’ WHERE ‘nume_atrib ut_x’=’valoare_x‘
În momentul în care introducem WHERE într-o inter ogare Sql, nu facem altceva decât
să set ăm o condi ție care dacă nu este adev ărat ă, interogarea nu are loc. De obicei la condi ții ne
folosim de un atribut numit (id) care îl set ăm la crearea structurii tabelului în baza de date
mysql. Id-ul sau identificatorul poate fi numit și cu alte nume, atâta timp cât identificatorul are
proprietatea de AUTO_INCREMENT și este de tip INTEGER, ceea ce face este de a cre ște
valoarea cu 1 la fiecare inserare de rânduri în baz ă de date. ex: dac ă avem 6 rânduri într-un tabel
valoarea identificatorului va cre ște cu 1 pentru fiecare rând începând de la 0. Primu l rând va avea
identificatorul 0, al doilea va avea 1, al treilea 2 … etc. Interogarea Sql de selectare poate fi
folosit ă pentru toate rândurile dintr-un tabel f ără a mai pune o condi ție WHERE, îns ă pentru a
extrage informa țiile avem nevoie de PHP. Sql permite multe alte tip uri de interog ări care ne d ă
posibilitatea nu numai de editare, inserare, ștergere și selectare, ci și de c ăutare a unui cuvânt sau
string în cadrul atributelor unui rând din cadrul t abelului. Pentru a c ăuta o informa ție în baza de
date ne folosim de comanda LIKE și operatorul % care compar ă caracterele string-ului sau
cuvântului cu valoarea atributului din baza de date .
Odat ă ce am în țeles PHP-ul, orice aplica ție se poate extinde prin intermediul unor func ții
create special pentru aceasta. PHP ofer ă multe func ții care combinate alc ătuiesc un sistem, odat ă
ce am f ăcut un sistem îl putem combina cu alte sisteme care duc la solu ționarea celor mai
imposibile probleme legate de o aplica ție online. Logica pe care se bazeaz ă sistemul de extragere
al informa țiilor , f ără s ă avem acces la baza lui de date, este foarte simpl ă:
Orice pagin ă de la site online are un link, sau URL 4.
Orice pagin ă a unui aplica ții online este creat ă sub forma unui tipar sau template.
Orice pagin ă care are un tipar, are informa țiile afi șate într-o forma standard,
înconjurate de alte tag 5 -uri html.
URL-ul este unul dintre variabilele sistemului care urmeaz ă a fi creat, pe când tag-urile
HTML sunt celelalte variabile de care o s ă ne folosim ca s ă extragem orice informa ție dorim.
4 URL: (din englez ă de la Uniform Resource Locator, tradus „Adres ă uniform ă pentru localizarea resurselor”)
este solu ția aleasa de World Wide Web Consortium, prescurtat W3C, pentru specificarea unei resurse (unui site we b
sau a unei pagini web) în internet.
5 Tag: etichet ă folosit ă la formatarea unei pagini web.
13
Singurul lucru care necesit ă asisten ța unei persoane la crearea acestei func ții de citire este
împ ărțirea codului surs ă a paginii web.
Administratorul (sau webmasterul)
Odat ă ce am în țeles toate aspectele componente ale aplica ției putem spune c ă am încheiat
primii pa și, îns ă pe lâng ă partea de programare avem nevoie de un lucru foart e important, o parte
uman ă care se ocup ă de problemele ap ărute în momentul în care aplicatia întâmpina situa ții
neprev ăzute. Administratorul conduce activit ăți de între ținere a acesteia, execut ă testarea și
asigur ă calitatea func țion ării site-ului sau aplica ției web. Dac ă avem o aplica ție care a fost
realizat ă și nu cump ărat ă, 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 cuno știn țele necesare pentru a întâmpina problemele sau eror ile neprev ăzute.
Atribu țiile administratorului se extind de la inserare de studenti, editare, newsletter, pân ă
la extinderea aplica ției dac ă are cuno știn țe în cauz ă.
Considerand scopul aplicatiei si modul in care a fo st contruit , implicare studentiilor si a
persoanelor neautorizate este fara scop deoarece , informatiile vor fi manipulate doar de cei
autorizati de c ătre firm ă.
În cazul nostru persoana autorizat ă de c ătre firm ă fiind un administrator , principalul lui
obiectiv fiind între ținerea aplica ției, în cazul în care aceasta întâmpin ă anumite probleme. Îns ă
aceast ă atribuțiune 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 pent ru o mai
bun ă creare de design a paginilor și bineîn țeles creare de cod curat și bineorganizat.Deasmenea
siturile create mai necesit ă și o între ținere, aici administratorul trebuie la cerin țele clientului s ă
actualizeze situl cu noile informa ții date de acesta.
Cât despre mediul e-Learning este practic un mediu virtual de educa ție care folose ște
tehnologia digital ă și a internet-ului cu scopul de a oferi tuturor celo r preocupa ți de evolu ția lor
profesional ă o serie de instrumente de predare, înv ățare, evaluare, comunicare, consultare a
cursurilor și materialelor didactice auxiliare, pentru administ rarea grupurilor de cursan ți, a
programelor educa ționale și a cursurilor aferente acestora, pentru colectarea și organizarea
notelor cursan ților etc.Mediul e-Learning poate fi descris din per spectiv ă pedagogic ă,
func țional ă, de con ținut sau tehnologic ă, deoarece desemneaz ă o form ă modern ă de înv ățare
14
distribuit ă, la distan ță sau în sala de curs, care acoper ă o gam ă larg ă de aplica ții și procese
educa ționale de tipul înv ățare asistat ă de calculator, înv ățare bazat ă pe internet, înv ățare bazat ă
pe conferin țe video etc.
Din punct de vedere pedagogic, mediul e-Learning re prezint ă o metod ă de predare,
înv ățare și evaluare bazat ă pe tehnologia digital ă, de comunica ție și multimedia, care asigur ă
transferul accelerat de informa ții, cuno știn țe, inclusiv tehnici de în țelegere și modalit ăți de
interpretare a acestora, de la profesor la cursant oriunde, oricând și la cerere, cu scopul de a
ob ține rapid rezultate performante, accelerând astfel procesul educa țional.
Aplica ția e-learning are la baz ă trei componente principale, interconectate din pun ct de
vedere func țional, esen țiale func țion ării unei platforme de înv ăță mânt electronic.
Acestea sunt:
din punct de vedere al con ținutului – mediul e-Learning este format din baza de
date distribuit ă de cuno știn țe, suportul on-line și modalit ățile de instruire asistat ă de
tehnologia digital ă. Baza de date distribuit ă de cuno știn țe reprezint ă biblioteca și
libr ăria virtual ă cea mai accesibil ă, care pune la dispozi ția tuturor celor interesa ți în
evolu ția lor profesional ă un volum teoretic nelimitat de cuno știn țe din toate domeniile
de activitate, individual sau în cadrul unor progra me de instruire organizate, gratis sau
contra cost. Suportul on-line desemneaz ă tehnologia informa țional ă și de comunica ție
care permite utilizatorilor mediului e-Learning s ă „discute” între ei pentru a schimba
cuno știn țe sau informa ții, punând întreb ări și primind r ăspunsuri, chiar și imediat.
Modalit ățile de instruire folosite sunt determinate de mijlo acele tehnice de
comunicare ce sus țin procesul electronic de înv ățare care pot fi sincrone sau
asincrone, dup ă cum pot sau nu pot da celor interesa ți posibilitatea de a participa
simultan la procesul de înv ățare.
din punct de vedere func țional – mediul e-Learning este format din platforma e-
Learning (suportul hardware și software indispensabil unui sistem electronic de
predare – înv ățare – evaluare), resursele eLearning (toate datele de interes în mediul e-
Learning – cuno știn țe, informa ții și strategii) și utilizatorii (cei care folosesc resursele
e-Learning – cursan ți, profesori, tutori și administratori).
din punct de vedere tehnologic – mediul e-Learning reprezint ă tehnologia de
15
sus ținere a procesului de predare și înv ățare. Reprezint ă suportul tehnic al unui proces de
instruire care permite elaborarea unor resurse de î nv ățare complexe, u șor de utilizat, folosind
tehnici și metode de eliminare a problemelor specifice cursa n ților înscri și la diferitele forme de
înv ăță mânt, fiecare cu specificul ei.
Obiectivul principal al efortului de modernizare al tehnologiei e-Learning const ă în
implementarea de aplica ții educa ționale care vor avea o flexibilitate mai mare, o fi abilitate mai
bun ă, un set de facilit ăți care s ă asigure o siguran ță crescut ă a comunica ției în cadrul Internetului
global
16
CAPITOLUL
3 Functionalitate
1 Setarea mediului de rulare a aplicatiei
Pentru ca aplica ția s ă fie online avem nevoie de un server web pentru a p utea rula online.
Modul prin care putem face aceasta, este fie s ă ne facem propriul server, fie cump ărăm un
domeniu 6 web și îl g ăzduim 7 pe un server. Desigur, cel mai avantajos este de a g ăzdui aplica ția
pe un server, din motive de mentenan ța și securitate. G ăsirea unui serviciu în materie de gazduire
web, este relativ u șoar ă. Exist ă foarte multe servicii de gazduire web, îns ă pentru a crea acest tip
de magazin online avem nevoie de o g ăzduire web care s ă ne ofere cel pu țin:
Support php
Op țiunea de a accesa fi șiere cu adres ă web , prin intermediul php-ului.
Baz ă de date Mysql.
Pentru testare, aplica ția este g ăzduit ă pe un server care ofer ă gazduire, support php, baz ă
de date și un subdomeniu. Înregistrarea pentru un cont s-a f ăcut la adresa mxhost.ro și aplica ția
se poate accesa la adresa administrare.parohiarava sel.ro.
2 Descrierea aplicatiei
In functie de capabilitatiile programatorului , lej eritatea si complexitatea in cod in sine
poate varia drastic depinzand si de ceriintele fiec arui fisier in parte.Tipurile de scriere a codului
6 domeniu web : ‘ În Internet, domeniile sunt colec ții de host-uri. De exemplu, pentru host-ul ro.wikip edia.org,
numele domeniului este wikipedia.org. Domeniile sunt arborescente: un domeniu poate fi su bdomeniu al unui alt
domeniu. Domeniile "r ădăcin ă" se mai numesc și domenii de nivel superior (în englez ă Top Level Domain,
prescurtat TLD). În acela și exemplu, "org" este TLD-ul pentru host-ul ro.wiki pedia.org. Pentru domeniile .RO,
autoritatea na țional ă este RNC. ‘
7 găzduire web : ‘ (în englez ă: web hosting) este un serviciu oferit atât compani ilor cât și persoanelor particulare,
care le permite acestora s ă îsi publice un site web în Internet – s ă îl pun ă la dispozi ție în web "vizitatorilor", online.
Furnizorul acord ă clientului spa țiu de memorare pe un server conectat la internet și de obicei aflat fizic într-un
centru de calcul. Deseori furnizorul aloc ă fiec ărui site web g ăzduit și câte un nume de domeniu web unic, pune la
dispozi ție clientului nu numai spa țiul de stocare necesar site-ului, dar chiar un într eg server (virtual) inclusiv
sistemul s ău de operare. ’
17
pot fi progresive pornind de la lucruri simple si c lare , exemplu : $nume = $_POST[“nume”]; ,
unde este descries clar intentia codului pentru pre luarea 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 , fisierel e sunt distribuite in asa fel incat este usor de
urmarit unde poate fi gasit codul sau partea de viz ualizare.
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 st ocare), cu posibilitatea extinderii u șoare și a
reg ăsirii rapide a acestora. De obicei o baz ă de date este memorat ă într-unul sau mai multe
fi șiere. Bazele de date sunt manipulate cu ajutorul si stemelor de gestiune a bazelor de date. Cel
mai r ăspândit tip de baze de date este cel rela țional, în care datele sunt memorate în tabele. Pe
lâng ă tabele, o baz ă de date rela țională mai poate con ține: utilizatori și grupuri de utilizatori,
tipuri de date, mecanisme de securitate și de gestiune a tranzac țiilor etc. Baza de date poate fi
creat ă din PhpMyAdmin, o aplica ție open source programat ă în PHP, care poate fi accesat ă din
pagina de membru al site-ului pe care ne-am înregis trat pentru g ăzduirea site-ului.
4 Crearea bazei de date
Pentru aplicatia noastr ă, vom crea o baz ă de date numit ă administ_base și va con ține
tabelele cu informa țiile necesare acestuia.Imaginea de mai jos ilustrea z ă baza noastr ă de date cu
tabele folosit ă în aplica ție.
Tabelele și relaționarea lor
Un tabel este un set de valori, care
(care sunt organizate dup ă nume)
dar poate s ă aib ă orice num ăr de rânduri . Fiecare coloan
momentul cre ării sale și poate fi ordonat
collation ) este un set de reguli care determin
sunt stocate ca și date . Fiecare coloan
standard și anume latin_swedish_ci
în baza de date prin intermediul c ă
tabele.
Depinzâ nd de natura aplica
specifice limbajelor din lumea intreag
simboluri speciale iar acestea pot fi inregistrate si in
utf8_general_ci.
18 Figura 3
Tabelele și relaționarea lor
Un tabel este un set de valori, care este organizat folosind un model de coloane verticale
nume) și rânduri orizontale. Acesta are un num ăr specific de coloane
r de rânduri . Fiecare coloan ă este definit ă cu o valoare setat
poate fi ordonat ă prin cola țioanarea sa. Cola ționarea (din englez
) este un set de reguli care determin ă cum s ă compare și să ordoneze caracterele care
. Fiecare coloan ă din tabelele create în baz a de date, are o cola
latin_swedish_ci . Orice aplica ție virtual ă are nevoie de cel pu
de date prin intermediul c ărora poate s ă func ționeze corect ,în cazul nostru am folosit opt
nd de natura aplica ției tabelele pot fi modificate pentru a stoca si si mboluri
specifice limbajelor din lumea intreag ă, ca exemplu avem limba roman ă, unde sunt o mul
simboluri speciale iar acestea pot fi inregistrate si in țelese de tabel, prin transformarea acestuia in
organizat folosind un model de coloane verticale
r specific de coloane
cu o valoare setat ă în
ionarea (din englez ă
ordoneze caracterele care
de date, are o cola ționare
cel pu țin dou ă tabele
,în cazul nostru am folosit opt
iei tabelele pot fi modificate pentru a stoca si si mboluri
, unde sunt o mul țime de
elese de tabel, prin transformarea acestuia in
19
Coloanele din tabel pot varia de continutul lor dep inzând de necesita țile aplica ției in sine
si de m ărimea acesteia.Diferenta unei coloane de a avea varchar(30) si varchar(255) pentru
aplica ții de statura mic ă este una nesimnificativ ă, însa pe aplica ții ce pot fi inregistrate informa ții
a mii de utilizatori, aceasta poate face diferent ă a citiri si afis ării informa ției a zecilor de secunde
de care nici utilizatorul nici programatorul nu dis pune.
Datele care o sa fie stocate in tabele vor varia de la varchar la int, date time , timestamp
si tinyint acestea având un num ăr limitat de caractere care pot fi introduse depinz ând de scopul
tabelului din care fac parte.Deasemenea tabelele vo r avea un identificator propiu care va fi unic
in fiecare dintre acestea și acesta va ajuta in sortarea, idenfircarea si g ăsirea elementului unic
care acesta o sa fie exprimat prin PRIMARY KEY 8, dar și corelarea între tabele folosind
FOREIGN KEY. Aceste doua componente vor ajuta pentru o mai strân s ă leg ătura intre
identificarea informa țiilor între tabele, dar care va exprima si complexi tatea aplica ției în sine.
Cantitatea de tabele si num ărul de informa ții din aceastea vor putea varia in functie de
num ărul de informa ții si gândirea care poate fi pus ă in aplica ție cu scopul mariri apliaca ției in
sine, astfel un tabel simplu cu zece tipuri de info rma ție poate fi transformat in trei tabele conform
cerin ței aplica ției.
Num ărul de tabele si informa țiile necesare aplica ției pe care o creem vor fi descrise in
rândurile 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 pri mara nu poate avea valori NULL.
20
Tabelul stundeti_swa_log
Tabelul va avea ca func ționalitate modul de logare pentru stunde ți si accesul acestora la
con ținuturi diferite în site.Conturile pentru ace știa sunt automat f ăcute in momentul în care unul
dintre administratori introduce un nou student.Func ționalitatea pentru acestea este înca în
dezvoltare și va fi luat in considerare in func ție de necesita țile aplica ției.Tabelul este structurat
astfel :
Figura 4
Tabelul catalog_cursuri
Tabelul catalog_cursuri va con ține informatii legate de tipul si denumirea cursulu i cât și
despre pre ț, nume ședinte, zile pe s ăpt ămână.Acesta va ajuta la identificarea tipului de curs s i va
servi pentru o mai bun ă adaptare sau imbunat ătire a cursurilor viitoare sau a celor prezente.Iar
tabelul va contine urmatoarele câmpuri :
Figura 5
21
Tabelul pentru studenti
Tabelul studenti_swa va con ține informa ții care vor ajuta la identificarea acestuia din
punct de vedere social, cum ar fi nume, prenume dar si informa ții speciifice cum ar fi num ăr si
seria de buletin, telefon si email, precum si alte informa ții pentru o mai bun ă categorizare privind
modul lui de preluare si asocierea intr-o grup ă in func ție de cuno știin țele, studii superioare dar si
materialele pe care le are, laptop personal.Tabelul va con ține urmatoarele câmpuri:
Figura 6
Tabelul studenti_in_grupa
Tabelul va con ține o structurare si o ordonare a stunde ților clasificându-i dupa grupele
care sunt sau care vor fi create.Desi tabelul in si ne va con ține doar cateva date legate de grupa si
student , el va ajuta la filtrarea studen ților care apar țin si care nu apar țin în grupe,dar si
diversificarea lor când ace știa finalizeaza o grupa.Tabelul având un rol import ant in legarea
dintre tabelul de grupa si tabelul stunden ților.Acesta va con ține urmatoarele informa ții:
22
Figura 7
Tabelul traineri_swa
Acesta va con ține datele de logare si acces în platforma pentru a dministratori dar si
pentru profesori in sine.Pe lânga datele de logare tabelul va con ține și informa ții legate de
profesori cum ar fi numele personal și o imagine/portret al trainarului , chiar si un CV cu
cunostiin țele si experien ța profesional ă.Acesta va con ține urmatoarele informa ții:
Figura 8
Tabelul grupa
Acest tabel va defini tipurile de grupe care vor fi create si modul de desf ășurare a
acestora , dar si alte informa ții relevente cum ar fi, loca ția, data începeri , data finaliz ări si data
de examen.Informa țiile sunt strict legate de grup ă pentru a nu fi confundate cu cel de curs,
diferen țele fiind , grupa se refer ă strict la colectiv iar cursul se refer ă la materie. Pe lâng ă toate
aceste informa ții, studen ții vor fi informa ți și de persoana care se va ocupa de aceea
grupa.Structura este :
23
Figura 9
Tabelul locatii_swa
Tabelul va con ține nu numai loca ția în care se va desf ăsura cursul dar si numele s ăli în
care acesta se va ține.Tabelul acesta va con ține urmatoarele informa ții:
Figura 10
Tabelul user_lvl
Acest tabel va face referin ța si diversificare , dar si acces in aplica ție.El va delimita
ac țiunile fiec ărui utilizator, fie acesta este administrator, pro fesor sau stundent.Momentan
func ționalit ățile acestuia sunt înc ă în desf ășurare și nu vor fi aplicate în momentul de fata doar in
cazul în care aplica ția va fi dezvoltat ă și va fi necesar acest lucru.Acesta con ține urmatoarele
informa ții:
Figura 11
24
Structura fișierelor
Pentru a în țelege modul de structurare a fi șierelor și ele cum sunt împ ărțite în cadrul
acestei aplica ții, trebuie în țeales ă structrura simpla a unui fi șier sau a unei pagini html și aceasta
în sine s ă fie divizat ă în buc ăti, la fel si structura templatului utilizat în ace asta aplica ție.
Structura unei pagini html este considerat ă din urmatoarele etichete html Doctype Head
si Body. Luând în considerare elementele prezente într-o pag in ă html, noi deja cunoa ștem c ă
linkurile asociate care fac legatura cu partea de s cripturi, stilizare și chiar și partea între leg ături
fi șiere este partea de header. Datorit ă acestui fapt putem deduce, c ă doar în aceast ă sec țiune
lucrurile se pot repeta în fiecare dintre paginile utlizate.Având în vedere natura unui template si a
paginilor html nu doar partea de header o sa se rep ete întro aplica ție, dar si multe alte fi șiere
depinzând de complexitate.
Interfata meniului utilizat în aceast ă aplica ție con ține doua meniuri , unu pentru navigare
iar altul pentru informa ții personale.Pentru structurarea si aranjarea fieca rui element în asa natur ă
încât la nevoia schimb ării celui mai mic detaliu, este nevoie de eficienti zarea împ ărțirii si
aranj ării documentelor în asa natura încât la nevoia fiea c ărei schimb ări , aceasta s ă fie f ăcut într-
un singur fi șier.
Structura si limbajul php ne permite eficientizarea unei aplica ții astfel încât s ă nu ne
repetam din punct de vedere al codului, astfel și cea mai simpl ă structur ă a unui document html
poate ajunge sa fie imp ărțit in minim doua documente php , pentru a înl ătura repe ția codului si
pentru a u șura accesibiliatea modific ări unei zone care se repet ă în anumite sau în toate fi șierele.
Pentru a înțelege mai bine modul de structurare a fi șierelor putem avea un exemplu
simplu în care în partea de header sunt etichete ca re 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 fi șierele care este nevoie de el .Natura aplica țiilor pot fi
categorizate depinzând de scopul acestora, de regul ă o aplica ție 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 aplica ției , acestea pot fi viziualizate sau manipulate de pinzând de nivelul
utilizatorului.
O aplica ție online trebuie s ă fie gândit ă în a șa fel încât dac ă dorim s ă schimb ăm anumite
variabile privind fie accesul la baza de date sau s crierea unei noi func ții, s ă o putem face dintr-un
25
singur fi șier, astfel încât întreaga aplica ție s ă foloseasc ă informa țiile nou modificate dintr-o
singur ă loca ție. Scopul const ă în a simplifica modul în care putem modifica aplic a ția. Primul
lucru la o aplica ție online care are nevoie de informa ții 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 scr ipt este
necesar ă în aproape fiecare pagin ă a aplica ției, a șa c ă din dorin ța de a simplifica modul în care
vom modifica utilizatorul și parola de acces la baza de date, o s ă cre ăm un nou fi șier PHP numit
“connect.php ” care va con ține 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 c odul :
if (!$conn) {
echo 'Eroare MYSQL '.mysqli_connect_error();
}
De regula acest fisier, mai poate contine si alte variabile care pot ajuta in eliminarea
repet ării a codului sau este doar partea de conectare la baza de date.Alte prescurt ări pentru cele
legate de URL și importan ța lor este necesar ă schimb ărea domeniului.O modalitate de a le scrie
este in felul urm ător:
define('BASE_URL', 'http://administrare.parohiara vasel.ro/');
Fiecare din acestea este f ăcut pentru o accesibilitate mai lejer ă, mai ales când este vorba
de schimbare a URL-ului având în vedere c ă acestea sunt utilizate în toate paginile. Având în
vedere natura aplica ției un alt cod este necesar pentru a fi introdus, f ie intr-un fi șier care este
deasupra fiec ărui fi șier sau care „apare” primul.De regula acest fi șier poate fi, fie connect.php
care este apelat in fiecare dintre pagini sau header.php care con ține toate link-urile.
Acest cod este session_start() , acesta ne va ajuta pentru partea de logare si „m emorare” a
utilizatorului care se va loga. Session_start seteaz ă o sesiune nou ă în browser care permite
salvarea de informa ții într-un array.
Dupa stabilirea conexiuni in fi șierul connect.php se va decide amplasarea lui care de
regul ă se afl ă in fisierul header.php. Acest fi șier con ține nu numai leg ătura la baza de date dar si
conexiunile la scripturi , css si depinzând de comp lexitatea interfe ței, „buc ăti”ale meniu-lui sau
meniu-rilor.Motivul îndepart ării a meniului din header, este datorita lungimi co dului din
„bucata” de meniu si pentru o u șurare a citiri codului.
26
Fi șierul principal de care orice site nu se poate lips i se nume ște i ndex.php sau index.html.
Motivul folosiri termina ției de php , este cu scopul personaliz ări fiecarei pagini si lejeritatea
integr ări codului html și php , integrarea si refolosirea fi șierelor în alte fi șiere, 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 fi șier care și acesta la rândul lui,
poate s ă includ ă și alte fi șiere.
Datorit ă utiliz ări codului session_start() si a naturi acestei aplica ții utilizatorul trebuie
neaparat sa fie logat, altfel aplica ția prin codul de mai jos, va trimite utilizatorul l a pagina de
logare.
if(!isset($_SESSION['loged'])){
header("Location: http://administrare.parohiaravase l.ro/index_login.php");
}
Meniurile vor fi imp ărțite astfel încât unul se va ocupa de partea de navi gare în aplica ție
iar celalalt se va ocupa de partea de informa ții despre utilizator. Meniul care se ocup ă de partea
de navigare se nume ște menu-left.php, con ținând modalitatea de vizualizare ,creare, modificar e
si ștergere a diferitelor func ționali țăți apartinând fiec ărei sec țiuni a meniului. Meniul con ține
partea de introducere a clien ților care sunt categoriza ți ca studen ți, partea de traineri ,
categorizarea și crearea noilor grupe din care ambii pot s ă apartin ă, tipul de curs din care o s ă
fac ă parte si loca ția.Deasemenea se mai pot g ăsi și informa ții importante specifice firmei.
Meniul specific utilizatorului va contine link c ătre profilul acestuia unde i și poate
modifica sau adaug ă informa ții personale, la fel și link pentru delogare.
Sec țiunea de header este prima bucat ă care este doar începutul structurii aplica ției , care
este apelat ă o singur ă dat ă la inceputul structurii fiec ărui fi șier,dar care de asemeanea ea trebuie
să fie și finalizat ă cu ajutorul unui alt fi șier care si acesta este apelat la sfâr șitul fiecarei pagini.
Fi șierul footer.php va con ține sfâr șitul etichetelor din header.php , alte scripturi , plus sau minus
alte informa ții relevante aplica ției.
27
Sec țiunea cea mai importanta care este cea de body va fi cuprins ă între cele dou ă fi șiere
de header si footer și va con ține informa ții diferite conform denumirii si structur ări ei în
aplica ție.
Sec țiunea pentru studen ți va fi imp ărțit ă în trei fi șiere fiecare având o sarcin ă diferit ă, una
pentru visualizare a studen ților, alta pentru preluarea datelor iar cealalt ă pentru editarea lor.
Fi șerul pentru vizualizarea studen ților se nume ște 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 aplica ție este cea de c ăutare a studentului.
In pagina de ad ăugare și in pagina de editare a studentului informa țiile de preluare cu
ajutorul etichetelor sunt acealeasi, astfel în ambe le pagini se vor gasi urmatoarele câmpuri de
completare asem ătoare informa țiilor g ăsite la student.php.
Pentru sec țiunea de traineri se vor g ăsi tot trei fi șiere care fiecare dintre ele se va ocupa
de partea de ad ăugare a trainerului , partea de vizualizare a train erilor si partea de profil al
trainerului. Fi șierul pentru vizualizare este trainer.php care con ține urmatoarele informa ții :
imaginea de profil, numele , prenumele ,email si cv -ul, deaseamea pentru aceast ă parte am
încorporat aceleasi func ționalit ăți ca și în fi șierul de vizualizare a studen țiilor. In partea de
adaugare a trainerilor se vor introduce doar un ema il și o parola, iar în partea de profil al
trainerului pot fi modifacate toate datele legate d e trainer care sunt specificate la vizualizare
traineri. La sectiunea de grupe ele vor fi imp ărțite în cinci fi șiere fiecare ocupându-se de
anumit ă portiune din punct de vedere al vizualiz ări si edit ări con ținutului . Fi șierul pentru
vizualizarea grupei este cel de grupa.php , acesta se va ocupa de vizualizare a tuturor grupel or
din aplica ție si acestea vor con ține urm ătoarele informa ții: numele grupei, numele s ălii si
numele train ărului, care va permite si vizualizarea grupei resp ective (care face parte din fi șierul
grup_single.php ) pentru a confirma informa țiile legate de acea grup ă cum ar fi num ărul de
studen ți , data începeri , data finaliz ări , data examenului si num ărul de studen ți care ar putea s ă
mai intre în acea grup ă, precum și schimbarea studen ților din acea grup ă( care face parte din
fi șerul grup_single_edit.php ) .
28
Pentru partea de ad ăugare a grupei aceasta se face în fisierul grup_add.php , aceasta
preluând urmatoarele informa ții : denumirea grupei, denumirea cursului , numele si prenumele
trainerului, numele s ălii , data începerii cursului, data finaliz ări cursului și data de examinare.
La partea de ad ăugare a studentului/lor în grup ă se face în fi șierul grup_stud_grup.php
și informa țiile care se vor prelua aici vor fi numele grupei si numele studen țiilor.
In sec țiunea pentru adaugarea cursului, acesta va fi împ ărțit în patru fi șiere, unul
ocupându-se de vizualizarea tuturor cursurilor crea te si anume curs_view.php , acestea având
functionalit ătile asem ănătoare fi șierelor de vizualizare a trainerilor și a studen ților având
urm ătoarele informa ții legate de curs :denumirea cursului, pre țul cursului, num ărul de ședin țe ,
orele per sedin ța,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 g ăsi informa ții mai
detaliate despre curs și anume tipul cursului , pre țul, num ărul de ședin țe, zilele de curs pe
săpt ămână, orele per sedin ță, locurile în grupa respectiv ă, curiculla și despre acreditare.
Pentru ad ăugarea cursului acesta se face în pagina curs_add.php și va con ține informa ții
aseman ătoare paginii de curs_edit.php care const ă în urm ătoarele : denumire curs, tipul cursului,
pre țul , num ărul de ședinte, zilele pe s ăpt ămână, orele de ședint ă, locurile în grup ă, acreditarea
si curiculla.
Sec țiunea de loca ție avem dou ă fi șiere unul care preia partea de cod si transmite
informa țiile acesta fiind location_code.php si al doilea fi șier care se ocup ă de preluarea
informa țiilor dar și vizualizarea lor, acesta fiind location.php .Informa țiile ce vor fi preluate,
editate și vizualizate vor si cele legate de numele s ălii și numele loca țiilor. Pentru partea de
vizualizare si aceasta va beneficia de func ționalit ățile men ționate din cel ălalte fi șiere, cât și
accesibiliate pentru editare sau ștergere.
29
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 fi șier ce con ține preluarea informa țiilor 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/pa ges/');
define('ADMIN_URL', 'http://administrare.cu.cc/cu st_adm');
if (!$conn) {
echo 'Eroare MYSQL '.mysqli_connect_error();
}
require_once 'code.php';
Linia șase a fi șierului 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 fi șier
dup ă ce a fost salvat îl putem include în orice alt doc ument HTML sau PHP, prin func ția
`include(“fișier.terminație”)` . Fi șierul code.php va include toate func țiile logice care vor fi
folosite la diferitele func ții ale aplica ției. Func țiile sunt structuri logice care execut ă fiecare pas
programat într-o anumit ă ordine. O func ție ofer ă cod reutilizabil pentru sarcini repetitive, de
asemena îmbun ătățește codul datorit ă liniilor de cod care sunt mai pu ține de fiecare dat ă când
folosim acelea și comenzi. Odat ă ce am definit o func ție o putem invoca de câte ori este necesar,
doar schimbând variabilele acesteia pentru a schim ba rezultatul dorit. Orice func ție poate s ă
con țin ă una sau mai multe variabile care schimb ă rezultatul acesteia, sau putem defini o func ție
fără nici o variabila. Pentru a defini o noua func ție folosim sintaxa 9:
function funcție_noua ( $variabila_1, $ variabila_2, … $variabila_n ) {
codul funcției ;}
9 sintaxa : “sintaxa unui limbaj de programare este u n set de reguli care definesc combina ții de simboluri care sunt
considerate a fi structurate corect .”
30
Sectiunea de logare
Sistemele de logare pot fi împ ărțite în mai multe etape depinzând de complexitatea
codului , acestea depistând și împ ărțind partea de „ memorare” a uneia sau mai multora
informa ții 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/emai l-ul
utilizatorului, acestea depinzând de complexitatea codului, pot fi unice care de regula este doar în
cazul email-ului, sau pot fi asem ănătoare ,care de regul ă se poate aplica doar numelui de
utilizator.
Metoda de aranjare a codului pentru sesiune este de asa natur ă încât acesta trebuie s ă fie
în fiecare pagin ă, pentru o verificare constant ă a informa țiilor și a celui care este logat.
Sesiunea în sine nu o s ă fie limitat ă doar la depistarea informa țiilor,dar și la timpul de
memorare a informa ției care de regul ă trebuie s ă fie introdus ă , motivul fiind cel al securit ăți în
cazul în care utilizatorul este absent / inactiv o perioad ă de timp ,aceast ă perioad ă de timp fiind
dat ă de administrator, utilizitatorul automat delogându -se pentru a putea preveni eventuale
pagube.
Deasemenea fie prin absen ță de la site sau ac țiunea utilizatorului de logare , metoda prin
care sesiunea se va termina va fi prin codul specif ic pentru terminarea sesiuni :
session_destroy();
Fisierul header.php contine codul de integrarea a fisierului de conexiu ne pentru baza de
date, acesta fiind primul, dupa care urmand codul d e 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 cont inand 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 fisier e care contin cele doua meniuri :
include 'menu-user.php';
include 'menu-left.php';
Deasemenea fisierul header contine o parte din cod care face o verificare la p ersoanele care sunt
logate sau nu:
if(!isset($_SESSION['loged'])){ //if log
header("Location: http://administrare.cu.cc/index_l ogin.php");
}
Acest cod in momentul dedectari utilizatorului care nu este logat, va face o
redirec ționare c ătre fi șierul index_login.php
prelua informa țiile necesare autentific
nu are un cont.
Modul de verificare
specificat ă în eticheta for mularui , care aceasta verific
utilizatorul apasa pe butonul „log in” .Pentru o u
ac țiune care verific ă cazuri diferite depinz
folosit ă metoda switch , metoda care î
formularului care în cazul de fat ă
acesta este situat codul si preluâ nd informa
inregistrarea.
if(!isset($_GET['actiune'])) $_GET['actiune'] = '';
switch($_GET['actiune']) {
case '':
echo '
<form role="form" action="code.php?actiune=login" m ethod
<input type="email_username" name="email" placehold er="Email">
<input type="password" name="password" placeholder= "Password">
<input type="submit" name="submit_login" value="Log In" class="btn btn
</form> ';
31 contine o parte din cod care face o verificare la p ersoanele care sunt
Figura 12
if(!isset($_SESSION['loged'])){ //if log in in session is not set
header("Location: http://administrare.cu.cc/index_l ogin.php");
Acest cod in momentul dedectari utilizatorului care nu este logat, va face o
index_login.php , acesta va con ține un formular p entru logare care va
iile necesare autentific ări,dar și un link c ătre alt fi șier , în cazul î
Modul de verificare și felul în care informa țiile sunt preluate , sunt print
mularui , care aceasta verific ă ce anume se preia in momentul
utilizatorul apasa pe butonul „log in” .Pentru o u șurare a modului de preluare este folosit o
cazuri diferite depinz ând de butonul care este ap ăsat.In cazul de fat
, metoda care î n cazul de fa ță preia o valoare care este dat ă
ă este actiune , prin acesta ducândul la fi șierul code.php
nd informa țiile mai departe , fie acesta fiind logarea sau
if(!isset($_GET['actiune'])) $_GET['actiune'] = '';
switch($_GET['actiune']) {
<form role="form" action="code.php?actiune=login" m ethod ="post" autocomplete="off">
<input type="email_username" name="email" placehold er="Email">
<input type="password" name="password" placeholder= "Password">
<input type="submit" name="submit_login" value="Log In" class="btn btn –
contine o parte din cod care face o verificare la p ersoanele care sunt
Acest cod in momentul dedectari utilizatorului care nu este logat, va face o
entru logare care va
în care persoana
iile sunt preluate , sunt print -o ac țiune
ce anume se preia in momentul în care
urare a modului de preluare este folosit o
sat.In cazul de fat ă a fost
preia o valoare care este dat ă de atributul
code.php unde
departe , fie acesta fiind logarea sau
="post" autocomplete="off">
-info">
32
}
Dup ă preluare se va face un redirect catre fi șierul code.php unde se afl ă majoritatea
codului si vom face referin ța la el în acest proiect.
Codul care preia informa țiile 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#=wksep F5t;W(V-`IP+DUN';
Plasarea parolei între cele doua coduri aleatori , dar si verificarea acesteia pentru
caractere speciale, m ăsur ă împotriva SQL injection. SQL injection este o vuln erabilitate web ce
apare atunci când datele primite de la utilizatornu sunt prelucrate corect.Atunci un r ăufac ător
poate schimba cererea la baza de date, astfel încât sa faca posibil furtul datelor private.
$password = $salt.htmlentities($_POST['passwor d']).$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 dintr e casu țe :
if(($_POST['email'] == '') || ($_POST['password'] = = '')) {
se face verificarea dac ă a fost introdus ambele informatii ,
echo '<h1 style="color:#F00">Completeaza casu tele.</h1>
<h3> Inapoi <a href="'.BASE_URL.'index_ login.php">Log-In</a></h3>';
} else {
Selec ția din baza de date a utilizatorului care se loghea za,
$select_users = $conn->query('SELECT email FR OM traineri_swa WHERE email
="'.$_SESSION['email'].'" AND password="'.$pass_has h.'" ' );
Selectare a informa ției specifice care va prelua un singur rând în loc de toate informa țiile din
tabel.
$numar = mysqli_num_rows($select_users);
Partea de verificare a utilizatorului si de verific are a parolei
if( $numar == 1 ){
aici verific ăm dac ă informa țiile sunt existente
while($rand = mysqli_fetch_array($select_users)) {
$_SESSION['loged'] = TRUE;
echo '<META HTTP –
URL='.BASE_URL.'student.php">';
}
} else {
echo '<h1 style="color:#F00">Date incorecte. </h1>
<h3> Inapoi <a href="'.BASE_URL.'index_login.php">L og
}
}
break;
}
In cazul în care utilizatorul nu are un
acesta i și poate crea unul, si acest fisier se numeste
Figura 13
Fi șierul de înregistrare respectiv con
si fisierul index_login.php , diferen
verificarea lor pentru autentificare.
Codul pentru inregistrarea utilizatorului este cel de mai jos, în care sa folosit tot
metoda switch , sa folosit o func ț
se face MSQL injection, acestea fiind
entit ăti HTML)
33 Partea de verificare a utilizatorului si de verific are a parolei
iile sunt existente
while($rand = mysqli_fetch_array($select_users)) {
$_SESSION['loged'] = TRUE;
-EQUIV=Refresh CONTENT="0;
URL='.BASE_URL.'student.php">';
echo '<h1 style="color:#F00">Date incorecte. </h1>
<h3> Inapoi <a href="'.BASE_URL.'index_login.php">L og -In</a></h3>';
care utilizatorul nu are un cont el poate fi redirectionat în alt ă pagin
i poate crea unul, si acest fisier se numeste register.php .
ierul de înregistrare respectiv con ține acealea și informa ții pentru preluarea datelor ,ca
, diferen ța 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
ție de verificare și introducere a caracter elor speciale pentru a nu
face MSQL injection, acestea fiind htmlspecialchars,( converte ște caractere predefinite
In</a></h3>';
cont el poate fi redirectionat în alt ă pagin ă î n care
ii pentru preluarea datelor ,ca
o baza de date si nu
Codul pentru inregistrarea utilizatorului este cel de mai jos, în care sa folosit tot
elor speciale pentru a nu
te caractere predefinite în
34
switch($_GET['actiune']) {
case 'register':
$_SESSION['email'] = htmlspecialchars($_POST['e mail']);
$username = htmlspecialchars($_POST['username' ]);
$email = htmlspecialchars($_POST['email']);
Partea de generare a codului pentru verificarea par olei trebuie sa fie asem ăntoare celei de
verificare pentru logare
$salt = '459++u1-1|g;FY9vq{s10;DO*cd!7PXqM^5 EgV1R8h9+:1hHt?;67XZFong_N=Ue';
$pepper = '~~^j 0L{t7QGqYX4*^NK$R2f8L4w|6~Kx-a Mkm-K5n#=wksepF5t;W(V-`IP+DUN';
$password = $salt.htmlspecialchars($_POST['passw ord']).$pepper;
$pass_hash = hash('sha512', $password);
if( ($_POST['email'] == '') || ($_POST['password' ] == '') ){
echo 'Nu ai introdus date in formular sau cele int roduse 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 da c ă utilizatorul este existent, în care
variabila $check-user , va selecta toate câmpurile 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 train eri_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);
Func ția mysqli_fetch_array va face verificare la selectia f ăcut ă si va prelua informa țiile
dintr-un singur rând.
Aici se verific ă partea în care utilizatorul este existent
if($data[0] != 0) {
se va face verificare dac ă informa țiile care vor fi inregistrate vor fi existente, ape lând 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>
Iar dac ă datele au fost introduse corect un mesaj de confirm are va ap
<p> Datele au fost introduse cu succes in baza de d ate. </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 pu tea loga in aplica
revenim la pagina de logare pentru a ne introduce d atele tocmai create.Co
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
num ăr ce va reprezenta nivelul lui
va fi aplicat în aplica ție.
Aceast ă func ționalitate poate avea multiple scopuri, unul preg
ca și stundenti s ă se poate loga , dar accesul
/descarc ăre a anumitor cursuri, dar mai poate avea si functi onalitatea de a determina nivelul de
acces pe care î l au administratori
$sel_us = $conn- >query('SELECT id_trainer FROM traineri_swa WHERE
email="'.$_SESSION['email'].'" ');
$the_id = mysqli_fetch_row($sel_us);
$insert = $conn
35 datele au fost introduse corect un mesaj de confirm are va ap ărea cu textul
Figura 14
<p> Datele au fost introduse cu succes in baza de d ate. </p>
h3> Pentru a va autentifica apasati <a
href="'.BASE_URL.'index_login.php">AICI</a></h3>';
care inregistrarea fiind cu succes, pentru a ne pu tea loga in aplica ție este nevoie s
revenim la pagina de logare pentru a ne introduce d atele tocmai create.Co dul de mai jos face
>query("INSERT INTO
traineri_swa (
username,
email,
password
) VALUES (
'".$username."',
'".$email."',
'".$pass_hash."')");
inserarea utilizatorului /trainer acestuia i se va adaug ă într-un tabel separat un
va reprezenta nivelul lui în aplica ție.Momentan aceasta este într- un stadiu de test si nu
ionalitate poate avea multiple scopuri, unul preg ătitor î n cazul
dar accesul acestora sa fie limitat, sau pentru vizualizare
re a anumitor cursuri, dar mai poate avea si functi onalitatea de a determina nivelul de
l au administratori între ei.
>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"
rea cu textul
ție este nevoie s ă
dul de mai jos face
un tabel separat un
un stadiu de test si nu
n cazul în care dorim
acestora sa fie limitat, sau pentru vizualizare
re a anumitor cursuri, dar mai poate avea si functi onalitatea de a determina nivelul de
36
)'
);}
Dupa inserarea trainerului , se va face o selec ție din baza de date specific pe emailul
trainerului și se vor prelua doar informa țiile acestuia prin func ția 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 confi rmare a inregistr ări :
$_SESSION['email'] = '';
$_SESSION['password'] = '';
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UT F-8" . "\r\n";
$headers .= 'From: <alinuRipper1@gmail.com>' . "\r\n";
Acesta va fi sectiunea c ătre persoana care va primi mail-ul
$to_anunt = $_POST['email'];
Acesta va fi titlul mail-ului ,
$subject_anunt = 'Inregistrare';
Și con ținutul mail-ului,
$msg_mail = '<h2> Felicitari pentu inregistrar ea dumneavoastra
</h2>';
Deasemenea mai exista posibilitatea, în cazul în ca re utilizatorul va uita parola, acesta va
putea prin linkul afi șat s ă poate recupera parola.
$msg_mail .= 'Numele utilizatorului este mailu l , in caz ca v-ati
uitat parola, urmati linkul de mai jos<br>';
$msg_mail .= '<a href="'.BASE_URL.'_page_forgot_pas s.php">Uitat Parola</a>';
$msg_mail = wordwrap($msg_mail,200); // folos im wordwrap() daca
liniile sunt mai mult de 70 characters
Acesta este codul care face trimiterea mail-ului
mail($to_anunt, $subject_anunt, $msg_mail, $h eaders );
}
}
break;
}
Metoda de autentificare dar si cea de stocare a ut ilizatorului , la fel si modul de
securizare a informa țiilor , în momentul în care acesta i și introduce parola poate fi în moduri
diferite depinzând din nou de cuno știin țele programatorului.
Modul de verificare si stocare a parolei se face in modul urmator :
– Parola este introdusa intre doua variabile ce conti n un numar de caractere aleatori,
$salt = '459++u11|g;FY9vq{s10;DO*cd!7PXqM^5EgV1R8h 9+:1hHt?;67XZFong_N=Ue';
$pepper =
37
'~~^j 0L{t7QGqYX4*^NK$R2f8L4w|6~Kx-aMkm-K5n#=wksepF 5t;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 co dului, fie aceastea fiind MD5
sau SHA512. Exemplu folosit :
$pass_hash = hash('sha512', $password);
Partea de meniu
Cele dou ă fi șiere care se ocup ă de afi șearea meniului sunt: meniu_left.php și
meniu_user.php .
Meniu_left.php se ocup ă de partea de naviga ție, și de afișare 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 tra ineri_swa WHERE
email="'.$_SESSION['email'].'" ');
$the_user = mysqli_fetch_row($sel_username) ;
Variabilele care preiau și afi șeaza informa țiile din baza de date pot fi aleatori sau
intiuntive pentru a nu confunda sau interpreta gre șit informa țiile cu care lucr ăm.Altfel variabila
$sel_username se va subîntelege ca se va face o selec ție a numelui de utilizator din baza de date
a celui care este logat, iar variabila de $the_user face afi șearea numelui în sine, pentru o
distinc ție mai clar ă a cea ce vrem s ă afi șăm , prin acestea imp ărțind chiar si obiectivul fiecarei
variabile si ce rol are ea in cod.
38
Meniu_user.php se ocup ă de partea utilizatorului afi șind-ui un avatar, emai-ul, data înregistr ări
și op țiuni de delogare și acces la profil pentru editare.
Figura 16
Fi șierul ce se ocup ă de partea de editare a profilului este trainer_profile.php iar acesta se
va ocupa de editarea informa țiilor cu caracter personal specifice trainer-ului a cestea fiind nume ,
prenume, avatar, cv si email.
Prin codul de mai jos ,facem referire la utilizator ul care este logat si preluam informa țiile
care sunt preluate în baza de date, dar deaseamenea prin aceasta verific ăm dac ă cel care este
logat, are informa țiile necesare , iar în momentul în care nu sunt inf orma ții care nu sunt afi șate,
ele vor fi inlocuite de informa ții standard.
<?php if ( !($the_user[7] == '')): ?>
<img src="<?php echo BASE_URL .'i mg/trainer_pic/'. $the_user[7] ?>"
class="img-circle" alt="User Image">
<?php else: ?>
<img src="<?php echo BASE_URL ?>i mg/trainer_pic/avatar.png"
class="img-circle" alt="User Image"> <?php endif; ? >
Modul de afi șare a informa țiilor care sunt preluate din baza de date, pot fi a fisate in mai
multe feluri, metoda care am folosit-o este sub for ma unui array, iar noi specific ăm cifra care
corespunde informa țiilor care vrem sa fie preluate, astfel $the_user , va prelua toate informa țiile
din baza de date, doar cu adaugarea unei cifre core spunz ătoarea 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 varia bilei care o putem utiliza, $the_user[7] putea
fi asociat unei altei variabile , exemplu $the_user_img.
39
Partea de stundent
Variabililele care sunt utilizate pentru o u șurare în citirea codului in cazul prelu ării
informa țiilor din fiecare formular în parte, pot fi asem ănătoare deoarece ele vor fi termporar
asociate unor valori , ele fiind in interiorul unei functii.Preluarea informa țiilor se va face doar in
momentul ac țion ării butonului de “ submit” a fiec ărui formular in parte , iar metoda de preluare
se va face prin $_POST.Depinzând de necesitatea uti liz ări aplica ției și a cantita ți utilizatorilor
care vor folosi, sau se vor loga in aplica ție, va fi necesar o form ă de verificare a informa țiilor
care sunt introduse în formular dar si ce informa ții vor fi preluate de acolo.
Pentru cazuri în care intr-unul dintre câmpuri treb uie introdus doar cifre sau numere
acesta va fi presetat astfel încât este imposibil d e introdus litere, la fel și în cazul introduceri de
email, din nou se va face o verificare in mod cores punz ător pentru validarea unui email real.
De și modul de preluare a informa țiilor se va face prin $_POST, acesta poate fi
acompaniat de mai multe func ții, care vor asigura introducerea informa țiilor in baza de date, f ără
ca acestea s ă produc ă pagube.
Exemplu : htmlspecialcharater($_POST) sau htmlspecial_entities($_POST)
Dup ă preluarea datelor se vor face urm ătoarele ac țiuni: se va anun ța rezultatul ac țiuni, fie
că acesta este de introducere a informa țiilor sau a unei erori în baza de date, iar în cazu l
introduceri, urmatoarea actiune va fi de reîmprosp ătare a pagini pentru a nu se face greseala de
reintroducere a datelor.
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='. BASE_URL.'">';
Depinzând de complexitatea codului , informa țiile pot fi introduse prin mai multe etape
una din ele fiind direct prin PHP, iar cealalta fii nd cu ajutorul altui limbaj , acesta fiind Ajax sau
JSON.
Secțiunea de adăugare stundenți
In sectiunea aceasta vor fi afisate campurile pentr u identificarea studentului care acestea
vor contine informatii personale cum ar fi cine est e , unde locuieste ce fel de studii are si daca ar
in posesie si un laptop personal.
40
Figura 17
Func ția isset specific ă o anumit ă ac țiune dac ă demareaz ă sau nu, însemnând c ă pân ă în
momentul în care formularului nu se va ac ționa 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 acea și pagin ă și ac țiunea formularului ,
rezult ă în preluarea informa țiilor în alt ă pagina, unde sunt mai multe varia ții de preluare de
informatie pentru diferite formulare.
if (isset($_POST['submit_student']) ) {
denumirea variabilor este pentru o întelegere mai u șoar ă a codului și pentru îmbun ătățirea
lui , în caz de modificare, nu este necesar crearea unei variabile pentru preluarea informa țiilor
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 student i_swa (nume, prenume,telefon,
email,cnp,serie_ci,judet, localit atea,adresa, nume_mama,
nume_tata,studii, ultim_act_studi u, laptop_personal)
VALUES ("'.$nume.'","'.$prenume.'","'.$te lefon.'", "'.$email.'","'.$cnp.'",
"'.$serie_ci.'","'.$judet.'","'.$ oras.'","'.$adresa.'",
"'.$nume_mama.'","'.$nume_tata.'" ,"'.$studii.'",
"'.$ultim_act_studiu.'","'.$lapto p_personal.'")');
41
Functia de verificare a codului daca informatiile sunt introduse sau nu
if ($ins_stud) {
echo '<h2>Studentul a fost inserat cu suc ces</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';
}
}
Secțiunea de vizualizare a stundeților
In sec țiunea aceasta vor fi afi șați to ți cei care sunt înregistra ți, într-un mod ales de
administrator datorit ă func ționalit ăți paginii care permite acest lucru.Deasemenea dac ă se dore ște
editarea unuia dintre stunde ți, la coloana Actiune , avem butonul de editare și ștergere.
Figura 18
Pentru afi șarea cursan ților este folosit un tabel la care sau ad ăugat propriet ăti jquery ,
folosindu-ne de o libr ărie specific ă tabelelor , codul care este folosit :
$('#myTableLocation').DataTable();
#myTableLocation este un Id unic tabelului pentru a putea determina cui se va oferi
propriet ătile oferite de func ția DataTabel();
În aceast ă secvent ă vom asocia toate valorile din tabel care vor fi pr eluate de la variabila
sel_ALL_students (aceasta preluând informa țiile din tabelul cu stunde ți) 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 informa țiile necesare trebuie ata șat numele coloanei
din tabelul respectiv, dupa exemplul urm ător: $row['nume_coloana'] care aceasta va afisa toate
informa țiile din coloana respectiv ă.
42
while ($row = mysqli_fetch_array($sel_ALL_student s)) {
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_st udiu'].'</td>
<td>'.$row['laptop_personal'].'</td>
În sec țiunea de mai jos, am procedat în modul în care depi nzând de ce doresc s ă fac, si a
situatiei prezente informa țiile chiar dac ă sunt acealea și , vor fi preluate diferit fie in func ție de
editare sau ștergere, astfel în fi șierul 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-hidde n="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 sec țiunea de vizualizare a stundentului ,prin ap ăsarea butonului de editare, vom fi
redirectiona ți spre o pagin ă, în care se va putea edita date personale despre a cesta.Fi șierul cu
codul pentru aceast ă sec țiune se nume ște student_code.php.
43
Figura 19
$getIdEdit = $_GET['id_edit'];
$getIdDel = $_GET['id_delete'];
Din descrierea de mai sus, putem determina în func ție de ac țiunile care au fost f ăcute de
trainer, fie de stergere care este prezentat in cod ul 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 edit ări 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 informa ției din formulare care va fi facuta cu $_POST.In mo mentul
edit ări oric ărui tip de informa ție, informa ția 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']; $ser ie_ci = $_POST['serie_ci'];
$judet= $_POST['judet']; $oras= $_POST['oras']; $ad resa= $_POST['adresa'];
$nume_mama= $_POST['nume_mama']; $nume_tata= $_POST ['nume_tata'];
44
$studii= $_POST['studii']; $ultim_act_studiu = $_PO ST['ultim_act_studiu'];
$laptop_personal = $_POST['laptop_personal'];
Astfel codul pentru actualizare se va face prin UPD ATE, numele tabelului , SET(alocarea
noii valori specifice coloanei) și numele coloanei și noua valoare, neuitând 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.'",local itatea= "'.$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_st udent= "'.$getIdEdit.'"');
if ($upd_stud) {echo '<h2>Studentul a fost modifi cat cu succes</h2>';
echo '<META HTTP-EQUIV=Refresh CONTENT="0;
URL='.BASE_URL.'student_code.php?id_edit='.$getIdEd it.'">';
} else {echo 'Nici un student nu a fost ranit in acest proces';}
}
Panou de trainer
Sectiunea de adăugare trainer
In aceast ă sec țiune se pot creea noi traineri, iar aceasta se face prin ad ăugarea adresei de email
și a unei parole ,iar prin ap ăsarea butonului de Adaug ă , trainerul respectiv va fi adaug ăt in baza
de date.Acesta odata introdus va putea edita propiu l profil, de la sectiunea de Profile.
Figura 20
Aici avem partea de cod , iar fi șierul creat pentru aceast ă sec țiune se nume ște
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" placeho lder="Password" class="form-
control">
<input type="submit" name="submit_register" va lue="Adauga">
</form>
';
}
45
Sectiunea de vizualizare trainer
Odat ă traineri crea ți , ace știa vor putea fi vizualiza ți prin selectarea meniului principal în
sec țiune de „ vizualizare ”. Fi șierul care con ține codul pentru aceast ă sec țiune se nume ște
trainer.php .
Figura 21
while ($row = mysqli_fetch_array($sel_ALL_trainers) ) {
echo '
<tr><td>';
Verificare dac ă utilizatorul are o imagine inc ărcat ă
if ( !($row['img'] == '')):
echo '<img src="'.BASE_URL .'img/trai ner_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>'.$ro w['prenume'].'</td>
<td>'.$row['email'].'</td>
<td>';
if ( !($row['cv_trainer'] == '')): echo '<a href="' .BASE_URL
.'img/trainer_cv/'.$row['cv_trainer'].'" target="_b lank">CV</a>';
else: echo 'NO CV';
endif;
echo '</td></tr>';}
46
Sec țiunea 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 aplica ție va putea s ă i și adauge el un nume de
utilizator, nume si prenume.Deasemenea prin ap ăsarea butonului “Poza” acesta va putea s ă i și
aleag ă o poz ă de profil, deasemenea un Cv acesta folosind în caz ul în care avem nevoie s ă afl ăm
mai multe informa ții despre trainer, cum ar fi preg ătirea lui profesional ă.
Figura 22
if (isset($_POST['submit_profile'])) {
$username = $_POST['username'];
47
$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, strrip os($file_img, '.'));
Verificarea tipului de fi șier care va fi inc ărcat pe server
$file_ext_img= substr($file_img, strripos($file_img , '.')); – acesta preia extensia
fisierului
$full_name_i= $file_basename_img.$file_ext_img;- ac esta 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($fi le_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/'.$fu ll_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, atun ci ca rezultat nu se
va face o insertie ci se va face un update.
Motivul de ce se face update este pentru ca in mome ntul in care un trainer fie isi creaza
singur sau este adaugat, campurile care o sa fie co mpletate , o sa fie doar de email sau parola iar
restul de nume, prenume , cv si imagina o sa fie go ale. Acestea putand pe urma sa fie modificate
din meniu Profil , facand astfel inregistrarea mult mai lejera si ra pida.
$insProf = $conn->query('UPDATE traineri_swa SET us ername = "'.$username.'",
cv_trainer = "'.$full_name_cv.'",nume = "'.$n ume.'",prenume = "'.$prenume.'",
img = "'.$full_name_img.'" WHERE email = "'.$ _SESSION['email'].'"');
Dupa incarcarea fisierelor pagina va reveni la cea care a fost , cea de profil.
48
if ($insProf) { echo '<META HTTP-EQUIV=Refresh C ONTENT="0;
URL='.BASE_URL.'trainer_profile.php">'; }
} elseif ( !empty($movePoza)) {
Se vor face multiple modificari pentru a determina care dintre fisiere au fost incarcate si
se va face un UPDATE corespunzator fisierului incar cat, pentru a nu actualiza coloana
respectiva, dintr-una cu text intr-una goala.
$insProf = $conn->query('UPDATE traineri_swa SET us ername = "'.$username.'",
cv_trainer = "'.$full_name_cv.'", nume = "'. $nume.'",prenume = "'.$prenume.'"
WHERE email = "'.$_SESSION['email'].'"');
if ($insProf) { echo '<META HTTP-EQUIV=Refresh CO NTENT="0;
URL='.BASE_URL.'trainer_profile.php">';
}
} elseif (!empty($moveCV) ) {
$insProf = $conn->query('UPDATE traineri_swa SET us ername = "'.$username.'",
nume = "'.$nume.'", prenume = "'.$prenume.'",im g = "'.$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 atunc i vor putea fi actualizate celelalte date.
$insProf = $conn->query('UPDATE traineri_swa SET us ername = "'.$username.'",
nume = "'.$nume.'",prenume = "'.$prenume.'" W HERE
email = "'.$_SESSION['email'].'"');
if ($insProf) {echo '<META HTTP-EQUIV=Refresh CONTE NT="0;
URL='.BASE_URL.'trainer_profile.php">';}}}
49
Panou Grupa
Sec țiunea de ad ăugare grup ă
Înainte de a creea grupa cu stunde ți, este nevoie sa creem cursul, pentru a ști ce fel de
curs se pred ă in grupa respectiv ă,în primul câmp vom scrie cum se va numi grupa , di n al doilea
câmp se alege cursul care se va preda si numele la trainer,fiind urmat de campurile sala în care
se va ține cursul, când 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_fi nish));
$date_exam1 = date("Y-m-d",strtotime($date_exam ));
Pentru a putea fi citit de brows-ere diferite , mod alitatea de afi șare a timpului va fi
utilizat ă cu ajutorul la jquery, prin func ția datepicker().
50
Preluarea valorii acestei func ții va trebui convertite deoarece afi șarea 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 adaugând în ca o parte care va ajuta la
transformarea codului sa fie citibil. Pentru a pute a întelege mai bine cum am putea manipula
timpul, putem face referin ța la codul de baza pentru afi șarea timpului care este date() , prin acesta
putem afi șa nu doar ziua, luna si ora, dar si minute , secund e si zona.Pentru o afi șare mai clar ă,
putem scrie astfel: date(Y-m-d) astfel nu numai afisând cea ce ne trebuie dar și în modul în care
ne trebuie, codul însa fiind inc ă incomplet, deoarece aceasta ne va afi șa 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 (d enumire,id_curs,id_trainer,
id_locatie,data_incepere, data_finalizare, data_exa men) 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 câmpul 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 fancând-o numele fiec ărui câmp in parte.
Sectiunea de vizualizare grupa
În aceast ă parte avem afi șate grupele cu sala în care se țin cursurile, deasemenea numele
trainer-ului care pred ă materia respectiva. Dac ă dorim s ă vedem si studen ți care fac parte din
grupa respectiv ă, trebuie doar s ă facem un simplu click pe nume si o sa fim redirec ționa ți la
pagina de afisare a grupei individual.
51
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>';
Modalit ățile de vizualizare a tabelelor pot fi simple , înse mnand doar tabelul în sine, sau
vizualizarea mai multor tabele într-un singur tabe l, folosind un singur cod SQL. Modalitatile de
legare sunt de multiple feluri depinzand de rezulta tul dorit.
INNER JOIN selecteaz ă toate rândurile din ambele tabele, atâta timp cât exist ă o
potrivire între coloanele din ambele tabele.
RIGHT JOIN returneaz ă toate rândurile din tabelul din dreapta , cu rându rile care se
potrivesc din tabelul din stânga. Rezultatul este N ULL în partea stâng ă atunci când nu exist ă nici
o potrivire.
FULL OUTER JOIN returneaz ă toate rândurile din tabelul din stânga ș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.
Sec țiunea de vizualizare a grupei individual
Acest tabel afiseaz ă stundeti care sunt in grupa respectiv ă.Aici putem vedea data când
aceast ă grupa a început cursul , când se termin ă si data de examinare. În partea de sus a pagini
avem o bar ă procentual ă, aceasta ne arat ă cât de plin ă este grupa respectiv ă. O grupa fiind
format ă din maxim 20 de stunden ți, iar 17 stundeti din 20 , reprezint ă numarul lips ă de stunde ți
52
din acea grup ă. Pe coloana de Actiune avem butonul de editare, pr in ap ăsarea lui o sa fim trimi și
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 selec ție între coloanele din tabelul
stundenti_swa si ad ăugare 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 ac țiuni de editare.
$sel_single_group = $conn->query('SELECT
studenti_swa.nume,studenti_swa.prenume,
studenti_swa.telefon, student i_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_st udent
WHERE id_grupa="'.$getIdGroup .'"');
în a doua selec ție, este o combina ție între tabelul studenti_swa si tabelul
studenti_in_grupa , cu o adaugare a unei noi coloane,prin func ția de COUNT, va face suma a
tuturor studen ților din grupa respectiv ă.
$nr_of_stud_in_group = $conn->query('SELECT stude nti_swa.nume,studenti_swa.prenume,
studenti_swa.telefon,stude nti_swa.email,
studenti_swa.laptop_person al,studenti_in_grupa.id_student,
COUNT(studenti_swa.nume)
FROM studenti_swa INNER JO IN studenti_in_grupa
53
ON studenti_swa.id_student = studenti_in_grupa.id_student
WHERE id_grupa="'.$getIdGr oup.'"');
$selGrPesc = $conn->query('SELECT * FROM grupa WH ERE 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 f ăcut calculele.
Variabila $za_fetch va prelua informa țiile unui singur rând, din selec ția unde avem
coloana care numar ă stunde ți din grup ă iar prin ata șarea unui num ăr 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-v aluenow="70" aria-valuemin="0"
aria-valuemax="20" style="width:'.$percentage.'%">' .$percentage.'%</div></div>
<h3>'.$GrPesc[1].'- <b>'.$stud_req.'</b> studenti d in 20</h3>';} else {echo 'no';}
Sectiunea de mutare student in alta grupa
Panoul de mutare a stunden ților 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 hot ărăște sa urmeze
cursuri de C++,din panoul de vizualizare a studentu lui, la sec țiunea de Ac țiune ap ăsam butonul
de editare si vom fi redirec ționa ți pe pagina grup_single_edit.php, iar prin simpla selectare a
cursului dorit și prin ap ăsarea butonul Transfera student acesta va fi mutat in grupa dorit ă.
Codul de mai jos este o reprezentare a cum func ționeaza 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 rând, pentru a nu face loop pr in toate
datele din tabel. $nameGrupa face selec ția pentru numele grupei, dupa care prin variabila $SSWS se
54
va face selec ția si afi șare la stunde ți 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 * FR OM studenti_in_grupa WHERE
id_student = "'.$getIdEdit.'" ');
$SSIG = mysqli_fetch_row($sel_Stu d_Group_In_Gr);
$nameGrupa = $conn->query('SELECT * FR OM grupa WHERE id_grupa =
"'.$SSIG[1].'" ');
$GroupName = mysqli_fetch_row($nameGru pa);
$sel_Stud_SWA = $conn->query('SELECT * FR OM studenti_swa WHERE id_student =
"'. $SSIG[2].'" ');
$SSWS = mysqli_fetch_row($sel_Stu d_SWA);
Sectiunea de adaugare a stundetilor in grupa
Stunde ți odat ă crea ți o s ă-i putem b ăga în grupa dorit ă, prin selectarea cursului dorit, si
persoana care va urma mutat ă. Prin ap ăsarea butonului de Adauga stundeti in grupa , acesta il
vom putea vedea la grupa de Web Design ca si exempl u.
Figura 26
$time_now_time = date('Y-m-d H:m:s');
$sel_Grup_Stud_exist = $conn->query('SELECT student i_swa.id_student,
studenti_swa.nume,studenti_swa.prenume,
studenti_in_grupa.id_grupa,grupa.id_g rupa, grupa.data_finalizare
FROM studenti_swa
LEFT OUTER JOIN studenti_ in_grupa
55
ON studenti_in_grupa.id_s tudent = studenti_swa.id_student
LEFT OUTER JOIN grupa
ON studenti_in_grupa.id_g rupa = grupa.id_grupa
WHERE grupa.data_finaliza re <= "'.$time_now_time.'"
OR grupa.data_finalizare IS NULL
');
sa f ăcut selec ție combinat ă din tabelele studenti_swa , studenti_in_grupa , grupa la care
sau luat câmpuri specifice, unde câmpul din stundeti_swa.id_student este asem ănător câmpului
din studenti_in_grupa.id_student apoi se va mai asocia și tabelul grupa unde câmpul din
studenti_in_grupa.id_grupa este asem ănător câmpului grupa.id_grupa , deasemenea având grija
unde câmpul data_finalizare din tabelul grupa este mai mic sau egal cu timpul finaliz ări 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 afi șate ca $show ,
Variabila $show fiind informa țiile 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>';
}
}
Afi șarea grupelor în care vor fi ad ăuga ți studen ții care nu apar țin sau au terminat deja o
grup ă.
while ($row = mysqli_fetch_array($sel_Group)) {
echo '<option value="'.$row['id_gru pa'].'">'.$row['denumire'].'
'.$row['data_incepere'].'</option>';
}
56
Panou de Cursuri
Sectiunea de adaugare a cursurilor
Deasemenea mai este nevoie de creearea cusurilor, acestea având 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 câmpurile de mai sus prin variabila $ins_curs se va crea cursul
dorit, inserarea facându-se în tabelul catalog_cursuri .
$ins_curs = $conn->query('INSERT INTO catalog_cur suri (
denumire, tip_curs, curicula, pret, n r_sedinte, zile_pe_sapt,
ore_per_sedinta, locuri_grupa, acredi tare )
VALUES ("'.$denumire.'","'.$tip _curs.'", "'.$curicula.'",
57
"'.$pret.'", "'.$nr_sed inte.'", "'.$zile_pe_sapt.'",
"'.$ore_per_sedinta.'", "'.$locuri_grupa.'",
"'.$acreditare.'" )');
if ($ins_curs) {
Dac ă datele au fost introdu-se corect acest mesaj va ap area ‘ Catalog adaugat cu succces ’,
iar daca nu este introdus cu succes va aparea mesaj ul ‘ 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 sec țiune putem vizualiza cursurile și informa ții despre acesta, cum ar fi pre țul
cursului, num ărul de ședin țe câte ore pe ședin țe , daca acesta este unul la sala sau online, câte
locuri sunt în grup ă si dac ă acesta este acreditat în vreun fel.Prin ap ăsarea butonului de la rândul
ac țiune, vom fi redirectiona- ți c ătre o nou ă pagina în care putem edita date, care necesit ă
modificare.
Figura 28
Pentru afi șarea cursurilor sa folosit un tabel, iar func țiile 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 selec ția a tuturor câmpurilor din tabelul
catalog_cursuri , pentru a fi afi șate.
echo '
<tr>
<td><a
href="'.BASE_URL.'curs_one_view.php?id_view='.$row[ 'id_curs'].'"
target="_blank">'.$row['denumire'].'</a></td>
<td>'.$row['pret'].' €</td>
<td>'.$row['nr_sedinte'].'</td>
58
<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></t d></tr>';}
Editarea cursului
Sa creat aceasta pagin ă, în cazul în care un anumit câmp necesit ă modificare, s ă putem cu
ușurin ță modifica, un exemplu ar fi orele pe ședin ța sau dac ă cursul va avea vreodat ă
acreditare.De asemenea la sec țiunea de curricula, putem insera informa ții despre aceasta.
Fisierul creat pentru aceast ă pagin ă se nume ște curs_edit.php .
Variabila $getIdCursEdit prin ap ăsarea butonului de editare aceasta preia informa țiile
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.'",
59
tip_curs = "'.$tip_curs.'",
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; UR L='.BASE_URL.'curs_edit.php">';
}
}
Panoul de locații
Sec țiunea de ad ăugare sal ă
Nevoia de a ști in ce sal ă se vor ține urm ătoarele cursuri, crearea s ăli este
necesare.Câmpurile care creaz ă sala, este denumirea ei și loca ția.Este nevoie s ă știm loca ția , în
cazul în care cursurile se țin în alt jude ț.În fi șierul 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 s ăli 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 {
60
echo 'Eroare cod inserare locatie';
}
}
Pe acea și pagina, odat ă sala creat ă o putem vedea în tabelul pentru vizualizarea s ăli.
Deasemenea fiecare rând se poate edita, sau șterge prin ac ționarea butonul de editare , respectiv
ștergere.
Figura 30
while ($row = mysqli_fetch_array($sel_Location)) {
prin aceast ă comand ă se face selec ția pentru afisare a rândurilor 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" ari a-hidden="true"></i>
</a>
–
<a
href="'.BASE_URL.'location_code.php?id_delete='.$ro w['id_locatie'].'"style="color:#f0
0">
<i class="fa fa-trash" aria -hidden="true"></i>
</a>
</td>
</tr>';
}
61
Concluzii
Întrucât internetul și nevoile societ ăți sunt într-o continu ă schimbare și evolu ție,
aplica țiile web sunt într-o cre ștere continu ă, pentru c ă ofer ă utilizatorului posibilitatea de a avea
acces și control , de oriunde acesta s-ar afla asupra nevo ilor sale. Aceast ă aplica ție vine la
solicitarea unui director de centru training web, î n cautarea unei mai bune administr ări în ce
prive ște 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
direc ție. Într-o masura satif ăcătoare , lucrarea si-a atins țelul ei, aceasta oferind directorului de
centru o mai buna organizare a viitoarelor grupe c are se formeaz ă.
Acum despre dezovoltarea ei ulterioar ă, aceasta în viitor va oferi posibilitatea
cursantiilor de a se loga și ei, pentru vizualizare cursuri, situa ția lor în grup ă și multe altele,
deasemenea structura codului va fi modificata, acea sta fiind ulterior schimbat ă dupa o structura
framework Laravel, acesta fiind un cadru web open-s ource gratuit de PHP și a fost creat de
Taylor Otwell destinat pentru dezvoltarea de aplica ții web dupa un model arhitectural
MCV(model-view-controller ).
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Internet odat ă cu trecerea timpului a evoluat semnificativ oferin d noi oportunit ăți pentru [605001] (ID: 605001)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
