Capitolul 1 Introducere………………………………………….. 4 1.1 Prezentare generală…………………………………………………………. 4 1.2… [625539]
1
UNIVERSITATEA DE VEST “VASILE GOLDIȘ ” ARAD
LUCRARE DE DISERTAȚIE
GESTIONAREA BULETINELOR
MEDICALE – APLIC AȚIE WEB
COORDONATOR ȘTI INȚIFIC
Prof.univ.dr. Popescu Marius
ABSOLVENT: [anonimizat]
2
Cuprins
Capitolul 1 Introducere………………………………………….. 4
1.1 Prezentare generală…………………………………………………………. 4
1.2 Tehnologii folosite……………………………………………………………. 5
1.2.1 HTML (HyperText Markup Language)…………………………………… 5
1.2.2 PHP (Hypertext Preprocessor)……………………………………………….. 5
1.2.3 CSS (Cascading Style Sheets)………………………………………………… 5
1.2.4 JS (JavaScript)……………………………………………………………………… 5
1.2.5 CodeIgniter …………………………………………………………………………. 6
1.3 Testarea aplicației…………………………………………………………….. 7
1.4 Structura fișierelor…………………………………………………………… 7
1.5 Fișierele de stil………………………………………………………………………….. 7
Capitolul 2 Baza de date și descriere………………………………….. 13
2.1 Schema conceptuală………………………………………………………….. 14
2.2 Descrierea tabelelor…………………………………………….. 23
Capitolul 3 Aplicația Web…………………………………………………… 19
3.1 Aspect și descriere generală……………………………………………… 19
3.2 Descrierea meniului…………………………………………………………. 23
3.3 Gestionarea meniului……………..…………………………….. 24
3.3.1 Tab- ul Dashboard………………………………………………….. 26
3.3.2 Tab- ul Pacient: [anonimizat]……………………………………………….. 27
3.3.2.1 Subtab-ul Add pacient………………………………………. 27
3.3.2.2 Subtab-ul Vizualizare pacient……………………………. 2 9
3.3.3 Tab- ul Pacient: [anonimizat]………………………………………………… 37
3.3.3.1 Subtab-ul Add pacient………………………………………. 37
3.3.3.2 Subtab-ul Vizualizare pacient……………………………. 38
3.3.4 Tab- ul Print………………………………………………………….. 39
3.3.5 Tab- ul Utilizatori………………………………………………….. 42
3.3.5.1 Subtab-ul Add utilizatori…………………………………… 42
3.3.5.2 Subtab-ul Vizualizare utilizatori………………………… 45
3.3.6 Tab- ul Backup………………………………………………………. 47
3.3.6.1 Subtab-ul Backup.db………………………………………… 47
Concluzii……………………………………………………………………………
65
Bibliografie……………………………………………………………………….. 66
3
Listă de figuri
Figura 1.1 Colaborarea dintre Model, View și Controller ……………………………………. 6
Figura 1.2 Stilul cu declarația “.menu -item” ………………………………………………………. 9
Figura 1.3 D eclarații de stil din structura “table” și "form" a paginii “histol.php” …… 12
Figura 2.1 Schema Conceptuală……………………………………………………………………….. 13
Figura 2.2 Importul sau exportul bazei de dat e……………………………………………………. 14
Figura 2.3 Tabelul unitate………………………………………………………………………………… 14 Figura 2.4 Tabelul users…………………………………………………………………………………… 15 Figura 2.5 Tabelul pacient_hp………………………………………………………………………. …. 16 Figura 2.6 Tabelul pacient_cito …………………………………………………………………………. 17
Figura 3.1 Secțiunea header ………………………………………………………………………………. 19
Figura 3.2 Aplicația web – gestionarea ecranului …………………………………………………. 21
Figura 3.3 Tab -urile aplicației web …………………………………………………………………….. 24
Figura 3.4 Meniul …………………………………………………………………………………………….. 24
Figura 3.5 Secțiunea dashboard…………………………………………………………………………. 26 Figura 3.6 Subtab- ul Add pacient – cabinetul histopatologic …………………………………. 27
Figura 3.7 Subtab- ul Vizualizare pacient – cabinetul histopatologic ………………………. 29
Figura 3.8 Subtab- ul Vizualizare pacient, coloana Edit ………………………………………… 33
Figura 3.9 Modificarea pacientului ……………………………………………………………………… 36
Figura 3.10 Pagina printare pacient – Cabinetul de Histopatologie ………………………….. 37
Figura 3.11 Subtab- ul Add pacient – cabinetul citologic …………………………………………. 37
Figura 3.12 Subtab- ul Vizualizare pacient – cabinetul histopatologic ……………………….. 38
Figura 3.13 Coloana Edit – cabinetul citologic ………………………………………………………. 38
Figura 3.14 Subtab- ul Print pe zi/perioada Cito …………………………………………………….. 39
Figura 3.15 Pagina printare pacient – Cabinetul de Citologie ………………………………….. 42
Figura 3.16 Subtab- ul Add – Cabinetul de Citologie ………………………………………………. 43
Figura 3.17 Subtab- ul Vizualizare utilizatori – Cabinetul de Citologie ……………………… 45
Figura 3.18 Subtab- ul Vizualizare Utilizatori, coloana Edit…………………………………….. 47
Figura 3.19 Subtab- ul Backup.db…………………………………………………………………………. 47
4
Capitolul 1 Introducere
1. 1 Prezentare general ă
În această lucrare voi prezenta o aplicație web creată pentru două secții dintr -un spital, secția
de histopatologie și secția de citologie. Am ales ca temă acest subiect deoarece cred cu
stupoare că sănătatea e cel mai de preț dar al omului pentr u care trebuie să luptăm și să î l
ocrotim mereu.
Fiind o aplicație web ce dorește a fi utilizată în cadrul unei instituții spitalicești, proiectul are
scopul de a ușura considerabil munca cadrului medical, de a cre a o con exiune de informație la
distanță de un click între departamentele menționate și de a reduce timpul pierdut cu
procedurile birocratice.
Lucrarea are la bază gestionarea buletinelor medicale în planul celor două departamente și
cuprinde următoarele caracter istici:
– adăugarea pacienților trimiși către departamentele aferente în baza de date MySQL
– introducerea datelor cu caracter personal și medical al pacienților în baza de date MySQL
– vizualizarea pacien ților înscriși în baza de date MySQL
– modificarea datelor cu caracter personal și medical al pacienților în baza de date MySQL
– crearea formularelor pentru printare (buletinele medicale) alături de toate informațiile cu
caracter personal și medical
– căutarea în baza de date MySQL a pacienților după nume , data sau o anumită perioada de
timp
– gestionarea conturilor de acces al cadrelor medicale (adăugare / modificare / ș tergere)
– copie de siguranță a bazei de date cu un singur click direct din aplicația web
– manipularea nivelului de acces al cadrelor medicale în aplicația web
Cu ajutorul acestei aplicații web proiectul este extrem de ușor de gestionat , într-o manieră
simplă și compactă, fiind o aplicație web unică și inovatoare datorită caracteristicilor cuprinse
mai sus.
5
1. 2 Tehnologii folosite
Acest proiect este o aplicație web ce f o l o s e ș t e o b a ză d e d a t e My SQL și este rulată pe un
server APACHE cu următoarea versiune:
• Apache: 2.4.25 (Win32) OpenSSL/1.0.2j
• PHP: 5.6.30
• phpMyAdmin: 4.6.52
• Server version: 10.1.21- MariaDB – mariadb.org binary dis tribution
• MySQL client version: 5.0.11
Aplicația a fost realizată în cea mai mare parte în limbajul de programare PHP, prin scriere
direct în cod surs ă. Programarea din spatele aplicației este realizată cu limbajul de programare
PHP, codul generat de serv erul APACHE fiind HTML alături de limbajele de programare
CSS și JavaScript . Scrierea liniilor de comandă s -au efectuat cu Adobe Dreamweaver CS4 iar
vizualizarea codului se poate face cu orice editor (Notepad, Wordpad, s.a.m.d).
Aplicația a fost realizată cu ajutorul framework -ului CodeIgniter, fiind open source ce a ajutat
considerabil la crearea aplicației pentru o dezvoltare rapidă.
1. 2. 1 HTML (HyperText Markup Language)
HTML -ul respectă standardul XHTML 1.0 Transitional, este la baza aplicațiilor w eb fiind
codul generat de serverul APACHE.
1. 2. 2 PHP (Hypertext Preprocessor)
Se folosesc variabile de tip sesiune [3] pentru crearea conexiunii între paginile web accesând
baza de date MySQL.
Este unul din cel mai răspândit și utilizat limbaj de progr amare de pe internet, fiind totodată
foarte flexibil.
1. 2. 3 CSS (Cascading Style Sheets)
Prin intermediul CSS -ului se dă un as pect aparte aplicației, totodată unic. Practic se
modelează paginile aplicației ș i este des folosit la imagini, meniuri ș i tabele.
1. 2. 4 JS (JavaScript)
Javascript JQuery este un framework folosit la animațiile aplicației web, ca și exemplu putem
lua tranzițiile jonglării de la un meniu la altul, s.a.m.d. Această libră rie [4] este o platformă de
6
dezvoltare fapt pentru care suportă mai multe tipuri de plugin- uri, folosirea aplicaț iei fiind
mai interactivă ce permite modelarea limbajului de programare mult mai ușor.
1. 2. 5 CodeIgniter
Framework -ul Code Igniter este un toolkit ce ajută dezvoltatorul considerabil prin faptul c ă
prevede o mult itudine de librării ce pot fi folosite [1]. Scrierea directă în codul sursă este
simplificată, sintaxele sunt mult mai ușor de parcurs iar conexiunea cu baza de date este
simplificată ș i îmbunătățită.
Framework -ul este de tip MVC ( Model, View , Controller). Acest a este pe departe cel mai
folosit framework pe plan global, pentru dezvoltarea apli cațiilor web. Modelul MVC separă
aplicația î n 3 module: model, view și controller.
Model -ul reprezintă logica aplicației ș i este responsabil cu gestionar ea datelor. Stochează,
șterge, preia, actualizează entitățile aplicației din baza de date și conține logica implementată
de aplicație.
View -ul (prezentarea) este responsabilă cu afișarea datelor furnizate de către model într -un
format unic. Aceasta are o utilizare similară cu modulele platformelor populare ca și Joomla
sau W ordpress ce formatează datele preluate de la model ce pot fi pe mai multe formate:
simple objects (Value Objects), structuri .xml, .jso, ș.a.m.d [5]. View -ul nu trebuie confundat
cu mecanismul temp late-ului, uneori ele lucrează în aceeași manieră .
Controller -ul manipulează model -ul si view -ul pentru a lucra împreună. Controller -ul
primește o solicitare din partea clientului, invocă model -ul pentru a efectua operațiile
solicitate și trimite datele către view. View -ul formatează datele pentru a fi prezentate
utilizatorului, într -o aplicație web în format html. Practic, este legătura între model ș i view
fiind primul ce primește solicitarea, o parcurge, o inițializează ș i invocă model -ul și îl trimite
mai departe view -ului. În diagrama de mai jos putem observa colaborarea celor trei entități.
Figura 1.1 Colaborarea dintre Model, View ș i Controller
7
1. 3 Testarea aplicației
Pentru o bună funcționare a aplicației este necesară o versiune de b rowser care permite
recunoașterea tuturor comenzilor.
Aplicația a fost rulată pe majoritatea browser -elor: Google Chrome 47.0, Mozila Firefox
38.06, Internet Explorer 7.0- 11.0, Safara 6.1.2, Opera 2.9.1. S -a comportat exemplar pe toate
dintre acestea și n u a suferit schimbări de aspect, deficiențe pe partea de CSS fiind inexistente.
Proiectul a fost realizat și totodată testat pe un calculator Intel Core i7 -6700K CPPU 4Ghz,
16GB RAM , cu sistemul de operare Microsoft Windows 7.
1. 4 Structura fișierelor
Administrar ea fișierelor este alc ătuită din următoarele directoare și fișiere :
• Directoare: application, asset, system
• Fișiere: index.php
• Subdirectoare : asset, themes, default, css, img, js, config, controllers, libraries,
models, views , pacient, pacientcit o
• Subfișiere: ie.css, reset.css, style.css, style_print.css config.php, database.php,
backup.php, main.php, pacient.php,pacientcito.php, users.php, date_time.php,
menu.php, model_pacient.php, model_pacient_cito.php, model_users.php,
add_pacient, histol.php , mod_pacient.php, print.php, print_all.php, add_cito,
add_cito_detalii.php, citol.php, mod_pacient_cito.php, print.php, print_all_cito.php
În Directorul “css” sunt fișiere de tip css ce formatează elementele paginilor aplicației web
prin anumite stilur i.
În Directorul “img ” sunt fișierele cu imaginile de formatare a aplicației noastre.
În Directorul “js” sunt fișierele de tip JavaScript și pluginurile aferente acestora, fiind o
platformă de dezvoltare ce îmbunătățește limbajul de programare.
1. 5 Fișierele de stil
Cascading Style Sheets ( CSS) [2] este un standard ce ne ajută la formatarea elementelor
dintr -un document de tip HTML, dar și a documentelor de tip XHTML, SVGL și XML, prin
diferite modele de stiluri. Aceste stiluri se atașează de elementele HTML cu ajutorul fișierelor
externe, ca și de exemplu:
8
<link href="<?php echo base_url('asset/themes/default/css/reset.css'); ?>" rel="stylesheet"
type="text/css" media="screen" />
dar se pot atașa și document, în conținutul său prin atributul "style" s au prin elementul
<style> ”.
Orice fișier “CSS” face referire la “o foaie” de elemente de formatare, putem crea o
multitudine de stiluri asupra paginilor, oferind aplica ției noastre o eleganță aparte, fiind și
foarte ușor de utilizat.
Secțiunea view (prezen tarea) , conține în marea majoritate același cod CSS, fiind dinamică ce
folseș te divers e elemente din fișierele de stil.
Fișierele de stil se găsesc în asset/themes/default/css/ numindu- se “style.ccs”,
"style.print.css", "reset.css","ie.css" , fiind utilizate în secțiunea “view ” al aplicației web
importate în fișier ele ".php".
Fișierele de stil enumerate mai sus se regăsesc în toate paginile , liniile de cod se declară în
felul urmă tor:
<link href="<?php echo base_url('asset/themes/default/css/reset.css'); ?>" rel="stylesheet"
type="text/css" media="screen" />
<link href="<?php echo base_url('asset/themes/default/css/style.css'); ?>" rel="stylesheet"
type="text/css" media="screen" />
<!–[if IE 7]>
<link href="<?php echo base_url('asset/themes/default/css/ie .css'); ?>" rel="stylesheet" type="text/css"
media="screen" />
Toate fișierele de stil au î n compoziție o serie de declarații, în fiecare pagină a aplicației web,
fiind inserate pent ru fiecare element individual, în parte. Î n codul de mai jos este inserată
forma unui stil:
#menu .menu -item h3 {
background: #181c23;
height: 38px;
line-height: 38px;
color: #ffffff;
font-size: 14px;
padding -left: 20px;
cursor: pointer;
border -left: 1px solid #353540;
border -right: 1px solid #353540;
Liniile de cod de mai sus definesc declaraț ia "menu- item" și se află în fișier ul "style.css" din
folderul "css". Aceast ă declarație specifică poziția, centrarea, dimensiunea, culorile ș i
structura meniului din aplicația noastră ce se regăsește pe fiecare pagină a aplicației web.
9
În figura de mai jos este prezentată această declarați e. În pa rtea stângă este folosită iar î n
partea dreaptă nu. Putem observa îmbună tățire a vizuală ce o formează.
Figura 1.2 Stilul cu declarația “.menu -item”
Atunci când dorim să compunem o pagină care să includă formatul acestui stil, o vom pune î n
acest tag.
De fiecare dată când vrem să construim o pagină care să fie afișată sub forma acestui stil, îl
vom include într -un tag, tag -ul de tip div fiind cel mai folosit și este sub forma liniei de cod de
mai jos:
<div id=” menu -item“> .
Din diversitatea de declarații și fișiere de stil, o să descriu o structură a paginii "histol.php"
care este, din punctul meu de vedere mai interesantă și mai complexă. Această structură se
numește "content" și prezintă toate datele pacienților înscriși în baza noastră de d ate, ce sunt
înscriși în unul din cabinetele medicale ale aplicaț iei web. Structura "content" este alcătuită
din urmă toarele declaraț ii de stil: " table" și "form" ce se regăsesc în fișierul "style.css" . Voi
descrie în rândurile de mai jos declarațiile de s til ce le -am folosit, fiind implementate într -o
manieră simplă ș i totodată elegantă.
#content .box -content .table {
padding: 10px 0;
width: 100%;
}
#content .box -content .table table {
width: 100%;
}
10
Declarațiile .box -content .table și box- content . table table mărește structura conținutului cu
valoarea de 100%. Practic, în funcție de monitorul pe care î l folosește utilizatorul, conținutul
din partea body a paginii este ajustat automat ș i va fi mereu scalat la dimensiunea maximă,
direct proporț ional cu restul structurilor.
#content .box -content .table table thead {
border -top: 1px solid #cccccc;
height: 38px;
line-height: 38px;
font-size: 12px;
color: #ffffff;
font-weight: bold;
}
Declarația .box- content .table table thead are scopul de a aju sta bordura, poziționarea,
fontul ș i culoarea fontului folosi t pentru capul tabelului pacienț ilor.
#content .box -content .table table thead td div {
display: block;
margin: 1px 0;
padding: 0 20px;
background: url(../img/th -bg.gif) repeat -x;
border -right: solid 1px #888f9a;
};
Declarația . box content .table table thead td div poziționează capul de tabel î n structura
"content" a paginii noastre, folosind chiar o culoare cu ajutorul unei imagini de background ce
se repet ă pentru ca timpul de încărcare să fie mai rapid .
#content .box -content .table table thead .action {
border -right: 0;
}
#content .box -content .table table .checkbox {
width: 61px;
}
#content .box -content .table table .checkbox div {
padding: 0 20px;
}
#content .box -content .table ta ble tbody td {
border -bottom: 1px solid #dddedf;
}
Declarați ile menționate ma i sus formatează fiecare linie ș i coloană a tabelului în care sunt
inserați pacienții. Fiecare căsuță a tabelului are un spațiu de 61px pe orizontală și 20px pe
verticală, iar între coloane este folosit ă o margine de 1px pentru a fi delimitate.
#content .box -content .table table tbody td div {
margin: 1px 0;
padding: 0px 20px;
border -right: solid 1px #d5d6d7;
line-height: 38px;
11
font-size: 12px;
color: #2b2b2b;
font-weigh t: bold;
}
Declarația .box- content .table table tbody td formate ază textul tabelului, culoarea ș i liniile
acestuia.
#content .box -content .form {
padding: 10px;
}
#content .box -content .form p {
font-size: 14px;
color: #2b2b2b;
margin -bottom: 10px;
}
#content .box -content .form label {
display: block;
font-size: 14px;
color: #2b2b2b;
font-weight: bold;
line-height: 30px;
}
Declarațiile de mai sus formatează căsuța î n care este poziționat tabelul nostru cu pac ienți.
Pleacă de la orientarea î n pagină până la culoarea textului folosit pentru celelal te date ce sunt
în exteriorul tabelului.
#content .box -content .form .submit {
background: #000000 url(../img/s -bg.gif) repeat -x;
border: 1px solid #050505;
font-weight: bold;
font-size: 12px;
color: #ffffff;
text-decoration: none;
text-align: center;
height: 38px;
padding: 0px 20px;
text-transform: uppercase;
cursor: pointer;
}
#content .box -content .form .submit:hover {
background: #4290bf url(../img/sh- bg.gif) repeat -x;
border: 1px sol id #3F8BBC;
}
Declarațiile de mai sus prezin tă butonul de căutare al pacientului ce se află î n exteriorul
tabelului. El prezintă un joc de imagini când săgeata mouse -ului se află pe el sau nu.
12
În figura de mai jos se regăsește pagina noastră "histol.php". În partea de sus se regăsesc toate
declaraț iile de stil, iar în partea de jos ele sunt inexistente.
Figura 1.3 Declaraț ii de stil din structura “ table ” și "form" a paginii “ histol.php”
13
Capitolul 2 Baza de date ș i descriere
2. 1 Schema conceptuală
Proiectul meu folosește o bază de date de tip MySQL ce se numește "histopap_ histo",
reprezentarea ei se află î n figura 2.1 de mai jos:
Figura 2.1 Schema Conceptual ă
Baza de date al acestei apli cații web este una foarte simplă ș i totodată complexă ce are la bază
o situație din zilele noastre fiind așezată pe o gestionare și totodată o administrare eficientă,
datele fiind introduse printr -o manieră aparte datorită framework -ului pe care îl conține
aplicația web.
Această bază de date reflect ă realitatea, d e aceea este creată cu numele "histopap_histo",
având la bază cabinetele de histopatologie și citologie al unui spital. A fost gândită și cu
scopul de a putea fii mutată sau a se efectua o copie de rezervă a ei prin faptul că am creat
fișierul "histopap_hi sto.sql" ce poate fi folosit oriunde și oricâ nd pe un server Apache ce
cuprinde baza de date MySQL.
Baza de date se poate exporta / importa de sau pe un server MySQL din meniul exemplificat
în figura de mai jos:
14
Figura 2.2 Import ul sau exportul bazei de date
2.2 Descrierea tabelelor
Tabelul unitate conține cabinetele medicale pentru care se gestio nează toate informațiile
pacienților din cadrul spitalului înregistrați în paginile aplicației web "add_cito.php" ș i
"add_pacient.php". Este compus din c âmpur ile id, unitate (numele cabinetului), adresa, cui
(firma), tel (telefon), mail. Câmpul id este cheie primară având auto incrementare de tip
int(11), fiind codul cabinetului medical.
Figura 2.3 Tabelul unitate
Prin comanda de mai jos tabelul este creat astfel:
CREATE TABLE `unitate` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`unitate` varchar(200) NOT NULL,
`adresa` varchar(200) NOT NULL,
`cui` varchar(200) NOT NULL,
`tel` varchar(200) NOT NULL,
`mail` varchar(200) NOT NULL,
PRIMARY KEY (`id` )
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
ALTER TABLE `clienti`
ADD UNIQUE KEY `id_client` (`id_client`), ADD KEY `id_client_2` (`id_client`);
Tabelul users gestionează personalul aferent celor două cabinete medicale care gestionează
aplicația web. Este compus din câ mpurile id, email, password (parolă ), name (nume), surname
(prenume), level (nivel ul de acces), created_at (data înregistrării), status (stare), c ode (codul).
Câmpul id este cheie primară avand auto incrementare de tip int(5), fiind codul fiecărei
persoane din personal. Câmpul passw ord reprezintă parola de acces în aplicaț ia web, fiind
15
securizată prin criptare de tip varchar(150). Câmpul level repr ezintă nive lul de acces pe care
angajatul î l are. Câmpurile name ș i surname reprezintă numele angajatului fiind de tip
varchar(50).
Figura 2.4 Tabelul users
Prin comandata de mai jos tabelul este creat astfel:
CREATE TABLE `users` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`email` text NOT NULL,
`password` varchar(150) NOT NULL,
`name` varchar(50) NOT NULL,
`surname` varchar(50) NOT NULL,
`level` varchar(2) NOT NULL,
`created_at` varchar(20) NOT NULL,
`status` varchar(1) NOT NULL,
`code` varchar(50) NOT NULL,
`remember_token` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=77 DEFAULT CHARSET=latin1;
Tabelul pacient_hp reprezintă datele pacientului ce a fost transferat către secția de
histopatologie ce este gestionată de pagina "histol.php" de c ătre personalul aferent nivelului
de acces în cauză. Este alcătuit din câ mpurile id, buletin_nr, data_buletin, nume, prenume,
varsta, adresa, biopsii, operaț ii, altele, internat, fo, trimis, data_trimitere, diag_clin,
material_trimis, blocuri, lame, cod_leziune, rezultat, created_at, unitate. Câmpul id este cheie primară având auto incrementare de tip int(15). Câmpul "buletin_nr" r eprezintă numă rul
buletinului de intrare histopatologic al pacientului în secție iar câ mpul "data_buletin"
reprezintă data int rării fiind de tip varchar(25) ș i varchar(10). Pe lângă câmpurile cu
informații personale (nume, prenume, varsta , adresa) există câteva câmpuri esențiale
cabinetului medical ce sunt necesare pentru a forma rezultatul histopatologic cum ar fi:
biopsii, operatii, internat, fo, trimis (de către care doctor a fost trimis în secție), data_trimitere,
diag_clin, cod leziune, ș .a.m.d). Câ mpul "rezultat" reprezint ă rezultatul tuturor analizelor
pacientului, reprezentând diagnosticul pe secția de histopatologie.
16
Figura 2.5 Tabelul pacient_hp
Prin comanda de mai jos tabelul este creat astfel:
CREATE TABLE `pacient_hp` (
`id` int(15) NOT N ULL AUTO_INCREMENT,
`buletin_nr` varchar(25) NOT NULL,
`data_buletin` varchar(10) DEFAULT NULL,
`nume` varchar(255) NOT NULL,
`prenume` varchar(255) NOT NULL,
`varsta` varchar(14) NOT NULL,
`adresa` varchar(255) NOT NULL,
`biopsii` varchar(20) NOT NULL,
`operatii` varchar(20) NOT NULL,
`altele` varchar(20) NOT NULL,
`internat` varchar(255) NOT NULL,
`fo` varchar(20) NOT NULL,
`trimis` varchar(100) NOT NULL,
`data_trimitere` varchar(10) DEFAULT NULL,
`diag_clin` varchar(200) NOT N ULL,
`material_trimis` varchar(100) NOT NULL,
`blocuri` varchar(100) NOT NULL,
`lame` varchar(10) NOT NULL,
`cod_leziune` varchar(10) NOT NULL,
`rezultat` longtext NOT NULL,
`created_at` varchar(100) NOT NULL,
`unitate` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=304001 DEFAULT CHARSET=latin1;
Tabelul pacient_cito este asemănător cu tabelul "pacient_hp" . El reprezintă datele
pacientului ce a fost transferat către secția de citologie ce este gestionată de pagina "citol.php"
de către personalul aferent nivelului de acces în cauză. Este alcatuit din câmpurile id,
nr_b_c ito, data, nume, prenume, varsta, adresa, trimisde, dial_cl, pap_anterior, f_satisfacator,
17
acelular, hipocelular, fixat_ne, intins_ne, unitate, status rezultat, frotiu_n, nespecific,
specific_tv, specific_g, specific_of, specific_c, specific_a, hpv, hsv, m , am_h, am_p, am_d,
am_c, am_a, am_he, am_diverse, mss, disp_u, disp_m, disp_s, ce, adem, clasif_tip, rfn, rtpap,
cpap, cpapt, ex_c_h, thpv, examinat_de . Câmpul id este cheie primară având auto
incrementare de tip int(10). Câmpul " nr_b_cito " reprezintă numarul buletinului de intrare
citologic ă al pacientului în secție iar câmpul " data" reprezintă data intrării , fiind de tip
varchar( 50). Pe lângă câmpurile cu informații personale (nume, prenume, varsta, adresa)
există câteva câmpuri esențiale cabinetului medical ce sunt necesare pentru a forma rezultatul
citologic precum ar fi: hpv, hsv, am_diverse, mss, specific, unitate, s.a.m.d. Câ mpul
"status_ rezultat" rep rezint ă rezultatul tuturor analizelor pacientului, reprezentând diagnosticul
pe secția de citologie.
Figura 2.6 Tabelul pacient_cito
18
Prin comanda de mai jos tabelul este creat astfel:
CREATE TABLE `pacient_cito` (
`id` int(10) NOT NULL AUTO_INCREMENT ,
`nr_b_cito` varchar(50) NOT NULL,
`data` varchar(50) NOT NULL,
`nume` varchar(50) NOT NULL,
`prenume` varchar(50) NOT NULL,
`varsta` varchar(10) NOT NULL,
`adresa` text NOT NULL,
`trimisde` varchar(50) NOT NULL,
`diag_cl` varchar(50) NOT NULL,
`pap_anterior` varchar(50) NOT NULL,
`f_satisfacator` varchar(50) NOT NULL,
`acelular` varchar(50) NOT NULL,
`hipocelular` varchar(50) NOT NULL,
`fixat_ne` varchar(50) NOT NULL,
`intins_ne` varchar(50) NOT NULL,
`unitate` varchar(200) N OT NULL,
`status_rezultat` varchar(10) NOT NULL,
`frotiu_n` varchar(10) NOT NULL,
`nespecific` varchar(10) NOT NULL,
`specific_tv` varchar(10) NOT NULL,
`specific_g` varchar(10) NOT NULL,
`specific_of` varchar(10) NOT NULL,
`specific_c` varch ar(10) NOT NULL,
`specific_a` varchar(10) NOT NULL,
`hpv` varchar(10) NOT NULL,
`hsv` varchar(10) NOT NULL,
`m` varchar(10) NOT NULL,
`am_h` varchar(10) NOT NULL,
`am_p` varchar(10) NOT NULL,
`am_d` varchar(10) NOT NULL,
`am_c` varchar(10) NOT NULL,
`am_a` varchar(10) NOT NULL,
`am_he` varchar(10) NOT NULL,
`am_diverse` varchar(10) NOT NULL,
`mss` varchar(10) NOT NULL,
`disp_u` varchar(10) NOT NULL,
`disp_m` varchar(10) NOT NULL,
`disp_s` varchar(10) NOT NULL,
`ce` varchar(10 ) NOT NULL,
`adem` varchar(10) NOT NULL,
`clasif_tip` varchar(10) NOT NULL,
`rfn` varchar(10) NOT NULL,
`rtpap` varchar(10) NOT NULL,
`cpap` varchar(10) NOT NULL,
`cpapt` varchar(10) NOT NULL,
`ex_c_h` varchar(10) NOT NULL,
`thpv` varchar(1 0) NOT NULL,
`examinat_de` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=latin1;
19
Capitolul 3 Aplicația Web
3.1 Aspect și descriere generală
Aplicația este realizată cu scopul de a ușura munca personalului medical, fiind creată î ntr-o
manieră cât mai simplă și cât mai elegantă. Funcțiile proiectului sunt următoarele:
– înregistrarea pacienților în baza de date
– crearea ș i gestionarea buletinelor medicale alături de datele personale ș i de cele medicale ale
pacientului pe secția de histopatologie sau citologie
– printarea cu un singur gest a l buletinului me dical după aflarea diagnosticului
– backup- ul periodic al bazei de date pentru arhiva privată al cabinetelor medicale
– gestionarea accesului la aplicație de către cadrul medical î n funcție de nivelul de acces pe
care î l deține
Datorită framework -ului Codeigniter, aplicația noastră este împărtită pe trei ramuri având
fiecare folderul unic:
Folderul Models – gestionează baza de date
Folderul View – afișează datele furnizate de către models
Folderul Controllers – este legătura dintre models ș i view, primeș te solicitarea, o parcurge, o
inițializează , invocă models -ul și o trimite la views
O să revin asupra acestor ramuri, pe parcursul prezentării aplicați ei web.
Înainte de a putea intra î n aplicația w eb, personalul medical este întâmpinat de o fereastră de
logare cu user -ul și parola criptată prin funcț ia MD5 de tip hash, având lungimea de 128 bi t.
Figura 3.1 Secțiunea header
20
Codul sursă al funcției de logare se regăsește mai jos și se află în folderul "models" fiind în
fișierul "model_users.php".
public function user_log_in(){
$this ->db->where('email',$this ->input ->post('email'));
$this ->db->where('password',md5($this ->input ->post('password')));
$query=$this ->db->get('users');
if($query ->num_rows()==1){
return true;
}else{
return false;
}
}
Funcția mai apoi este gestionată cu variabila de tip sesiune "userdata('auth')" de către fișierul
"main.php" din folderul "controllers", aș a cum reiese din codul sursă de mai jos.
public function index()
{ $this ->login();}
public function login()
{ $this ->load ->view('login');}
public function auth()
{
if($this ->session ->userdata('auth')){
$this ->load ->library('menu');
$data['menu'] = $this ->menu ->show_menu();
$this ->load ->view('indexp',$data);
}else{
$this ->login();
}
}
La final, fișierul "login.php" din folderul "views" afi șează datele furnizate.
<?php echo form_open('main/login_validation'); ?>
<div class="notification info">
<div class="messages"> <?php echo validation_errors(); ?><div
class="close"><img src="../asset/themes/default/img/icon/close.png" alt="close" /></div></div>
</div><! – end div .notification info – >
<fieldset>
<label>Email</label><?php
$email = array('class' => 'text','type'=>'text', 'id' => 'email', 'name' => 'email');
echo form_input($email);
?>
<label>Parola <a href="#" class="forget -password" >(Am uitat
parola?)</a></label>
<?php
$password = array('class'=>'text', 'type'=>'password', 'id'=>'password', 'name'=>'password' );
echo form_password($password);
?>
<?php
$submit = array('class'=>'submit', 'type'=>'submit','name'=>'submit', 'value'=>'Autentificare');
echo form_submit($submit);
?>
21
Figura 3.2 Aplicația web – gestionarea ecranului
În secțiunea HEADER se află logo -ul Histopatologie sau Citologie , ce se schimbă, fiind
dinamic în funcție de accesul pe care îl are utilizatorul sau în funcție de unde se află în meniu, pe partea de "Pacient Cito " sau "Pacient Histo ". Tot aici regăsim în partea dreaptă funcția de
logout al utilizatoru lui, prezentată de un mesaj de întâmpinare. Codul s ursă al secțiunii este
inserat î n toate paginile din folderul "views" , mai puțin în cea de "login" al aplicației și se
regăsește mai jos:
<div id="header">
<p class="logo"><a href="#" title="Administrator">Histopatologie</a></p>
<p class="user"><span>Hello, <?php print_r($this ->session ->userdata('email')); ?>
</span> <a href='<?php echo base_url()."main/logo ut" ?>' title="settings">Logout</a></p>
</div>
În secțiunea CONTENT găsim conținutul fiecărei intră ri asupra meniului accesat. Tot aici
găsim in formațiile cu privire la pacienți, conturi și buletinele medicale.
În secțiunea SLIDEBAR regăsim meniul acc esat de personalul medical pe care o să îl
parcurg în amanunt pe parcursul prezentării proiectului.
Fiind o aplica ție online ce este realizată în php, ea folosește variabile de tip sesiune
($_Ses sion) pentru a gestiona informaț iile între pagini.
Pentru a porni o sesiune, se folosește comanda:
<?php
session_start();
?>
22
Totodată , conectarea la baza de date î n MySQL trebuie efectuată. Pentru acest lucru în
folderul "config" este prezent fi șierul "database.php " având urmatoarele linii de comandă:
$active_g roup = 'default';
$active_record = TRUE;
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'histopap_histo';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default'][' swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
Inițializa rea bazei de date se regăsește î n fișierul “db.php” din folderul "database" c u
următoarele linii de cod sursă :
if (is_string($params) AND strpos($params, ' ://') === FALSE)
{
if ( ! defined('ENVIRONMENT') OR ! file_exists($file_path =
APPPATH.'config/'.ENVIRONMENT.'/database.php'))
{
if ( ! file_exists($file_path = APPPATH.'config/database.php'))
{
show_error('The configuration file database.ph p does not exist.');
}
}
include($file_path);
if ( ! isset($db) OR count($db) == 0)
{
show_error('No database connection settings were found in the database
config file.');
}
if ($params != '')
{
$active_group = $params;
}
if ( ! isset($active_group) OR ! isset($db[$active_group]))
{
show_error('You have specified an invalid database connection group.');
}
$params = $db[$active_group];
}
23
Toate fișierele care sunt conectate la baza de date MySQL sunt utilizate de f ișierul
“database.php ”. Este un strict necesar deoarece putem muta aplicația pe alt server iar
parametrii po t fi schimbați o singura data, într -un singur loc, acest lucru fiind mult mai practic
decât să modificăm î n fiecare pagină ce necesită schimbul de info rmații cu baza noastră de
date.
3.2 Descrierea meniului
Secțunea "slidebar " define ște meniul propriu zis, fiind dinamic și împărțit în funcție de
drepturile de acces pe care le are utilizatorul.
Proiectul nostru gestionează baza de date a două cabinete medicale dintr -un spital, ele
numindu- se: secția de histopatologie și secția de citologie.
Meniul este împărțit în trei categorii: doctor, medic și asistent , iar din punct de vedere al
codului sursă : level 2, 5 și 3. Fiecare logare al unuia dintre acești u tilizatori conferă dreptul de
acces doar la anumite tab -uri din meni u.
Doctorul are acces la ambele cabinete medicale și are dreptul să gestioneze tot ansamblul
aplicației noastre care reiese din:
– informații generale
– vizualizarea, adăugarea, ș tergerea și editatea pacienț ilor din departamentul de histopatologie
și citologie
– printarea buletinelor medicale al pacienț ilor din departamentul de histopatologie ș i citologie
– vizualizarea, adăugarea, ștergerea și editar ea cadrului medical ce are acces la apli cația web
– backup- ul bazelor de date
Medicul este catalogat pe o singură unitate medicală, având acces doar în unul din
departamenentele de histopatologie sau citologie și are urmatoarele drepturi:
– informații generale
– vizualizarea, adăugarea, ștergere a și editatea pacienț ilor din departamentul aferent
– printarea buletinelor medicale al pacienților din departamentul aferent
Asistentul ca și medicul , este catalogat pe o singură unitate medicală, dar are acces doar într –
unul din departamentele de histopatol ogie sau citologie și are urmă toarele drepturi:
– informații generale
– vizualizarea pacienților din departamentul aferent
– printarea buletinelor medicale al pacienților din departamentul aferent
24
În figura de mai jos regăsim modalitatea de operare a aplicației noastre ș i interschimbările
dintre paginile sale. Ea a fost realizată pe întregul meniu dezvoltat în aplicație.
Figura 3.3 Tab -urile aplicației web
După cum putem observa , avantajul este că, se poate ajunge dintr -o pagină în alta fără a ț ine
cont de unde am rămas î n pasul initial sau unde am ajuns cu navigarea .
3.3 Gestionarea meniului
În rândurile de mai jos voi descrie întregul meniu dezvoltat al aplicației web. Accesul la acest
meniu il are doar level -ul 2 (doctorul), unele dintre tab -uri (ce le- am menționat în descrierea
meniului) fiind restricționate pentru level -ul 5 și 3 (medic și asistent).
Doctorul are acces la întregul meniu dezvoltat în aplicația web. El gestionează bunul mers al
activității personalului ce îl are în subordine. În figura de mai j os este prezentat. Fiecare tab î l
voi descrie în urmă toarele rânduri.
Figura 3.4 Meniul DASHBOARD
PACIENT
PRINT UTILIZATORI BACKUP
25
Meniul a fost creat î ntr-o manieră simplă și concretă, regăsindu- se în fișierul "menu .php" din
folderul "libraries" ș i se reg ăsește mai jos, având și comentariile aferente pentru fiecare tab î n
parte.
if($CI ->session ->userdata('level')==2){
$menu = '
Funcția de mai sus folosește variabila de tip sesiune pentru a căuta nivelul de acces (level -ul)
utilizatorului logat în aplicația web. D octorul are nivelul de acces 2 cu urmatoarele drepturi:
<li><a href="'.base_url().'pacient/create"><img
src="'.base_url().'asset/themes/default/img/icon/famfamfam/page_add.png" alt="" />Add
pacient</a></li>
<li><a href="'.base_url().'pacient/histolist"><img
src="'.base_url().'asset/themes/default/img/icon/famfamfam/page_add.png" alt="" />Vizualizare
pacient</a></li>
<li><a href="'.base_url().'pacientcito/create"><img
src="'.base_url().'asset/themes/default/img/icon/famfamfam/page_add.png" alt="" />Add pacient
cito</a></li>
<li><a href="'.base_url().'pacientcito/citolist"><img
src="'.base_url().'asset/themes/default/img/icon/famfamfam/page_add.png" alt="" />Vizualizare
pacient</a></li>
</ul>
<li><a href="'.base_url().'pacient/print_sel"><img
src="'.base_url().'asset/themes/default/img/icon/famfamfam/newspaper_add.png" alt="" />Print pe
zi/perioada Histo</a></li>
<li><a href=" '.base_url().'pacientcito/print_sel"><img
src="'.base_url().'asset/themes/default/img/icon/famfamfam/newspaper_add.png" alt="" />Print pe
zi/perioada Cito</a></li>
<h3 class="close"><img src="'.base_url().'asset/themes/default/img/icon/m -close. png" alt=""
/>Utilizatori</h3>
<li><a href="'.base_url().'users/signup"><img
src="../asset/themes/default/img/icon/famfamfam/image_add.png" alt="" />Add Utilizator </a></li>
<li><a href="'.base_url().'users/usersl ist"><img
src="../asset/themes/default/img/icon/famfamfam/image_add.png" alt="" />Vizualizare Utilizatori
</a></li>
<h3 class="close"><img src="'.base_url().'asset/themes/default/img/icon/m -close.png" alt=""
/>Backup</h3>
<li><a h ref="'.base_url().'backup/save"><img
src="'.base_url().'asset/themes/default/img/icon/famfamfam/image_add.png" alt="" />Backup db
</a></li>
După cum reiese din codul sursă de mai sus, am aprobat acces ul tuturor tab- urilor proiectului
nostru. Dacă dorim să limi tăm accesul anumitor level -uri (în momentul de față avem restr icții
asupra level -ului 5 si 3, medic și asistent) trebuie doar să ș tergem liniile de cod pentru care nu
dorim accesul respectiv.
26
3.3.1 Tab -ul Dashboard
Reprezintă conținutul de intrare în aplicația web. De obicei aici sunt inserate datele de natură
adminitrativă de care trebuie să se țină cont atunci când se alterează i nformațiile din aplicația
web.
Figura 3.5 Secțiunea dashboard
Nu am insistat asupra acestei secțiuni, codul sursă regăsindu- se mai jos.
<div class="box -in">
<div class="box -head"><h1>Status </h1></div>
<div class="box -content">
<br>
<br>
<h1>Bine ati venit!</h1>
<br>
<br>
<?php
if(!empty($errors)){
echo '<div class="notification error">
<div class="messages"> ';
echo $errors;
echo' </div> </div>';
}
?>
<?php
if(!empty($succes)){
echo '<div class="notification success" id="succes">
<div class="messages"> ';
echo $succes;
echo' </div> </div>';
}
?>
<?php
print_r($this ->session ->all_userdata());
?>
27
3.3.2 Tab -ul Pacient h isto
Acest tab facilitează adăugarea, vizualizarea, ștergerea, editarea și printarea datelor personale
și medicale ale pacienților din cabinetul medicat histopatologic.
3.3.2.1 Subtab- ul Add pacient are la bază un formular în formă de tabel unde trebuie
introduse datele personale ș i medicale ale pacientului în cauză.
Figura 3.6 Subtab -ul Add pacient – cabinetul histopatologic
Continutul formularului a fost creat cu ajutorul f uncției create_validation() ce se află î n
fișierul "pacient.php" din folderul "controllers " și reiese din codul sursă de mai jos.
public function create_validation(){
$this ->form_validation ->set_rules('buletin_nr','<b>Buletin histopatologic
nr:</b>','required|trim');
$this ->form_validation ->set_rules('data_buletin','<b>din data
de:</b>','required|trim');
$this ->form_validation ->set_rules('nume','<b>Nume</b>','required|trim');
$this ->form_validation ->set_rules('prenume','<b>Prenume</b>','required|trim');
$this ->form_validation ->set_rules('rezultat','<b>Rezultat HP</b>','req uired|trim');
Dupa ce au fost create regulile de validare a funcț iei, iar câmpurile cu variabila "required"
sunt inserate, trebuie încărcate librăriile "date_time " pentru data , timpul când se efectuează
formularul, și model_pacient (datele medicale ale pacientului):
if($this ->form_validation ->run()){
$this ->load ->library('menu');
$data['menu'] = $this ->menu ->show_menu();
$this ->load ->library('date_time');
$data['datab'] = $this ->date_time ->now_date();
$this ->load ->model('model_pacient');
28
if ($this ->model_pacient ->tbl_pacient_nr_rows() ==0 )
{
if($this ->model_pacient ->add_pacient($this ->date_time –
>data_ora()) == true){
$data['succes'] = "Salvat cu Succes !";
}else{
$data['errors'] = "Pacientul nu a fost salvat !";
}
}else{
$data['errors'] = "Pacientul nu a fost salvat !";
}
$this ->load ->view('pacient/add_pacient',$data);
}else{
//daca validarea nu a fost finalizata se intoarce pe ace easi pagina cu meniul incarcat
$data['errors'] = validation_errors();
$this ->load ->library('menu');
$data['menu'] = $th is->menu ->show_menu();
$this ->load ->view('pacient/add_pacient',$data);
}
}
Inserarea tuturor datelor în baza de date MySQL se face cu ajutorul fișierului
"model_pacient.php" din folderul "models" al aplica ției.
public function add_pacient($created_at){
$this ->load ->library('session');
if($this ->session ->userdata('level')){
$id=$this ->session ->userdata('l evel');
$unitate =$this ->unitate($id);
}
$data = array(
'buletin_nr' =>strtoupper($this ->input ->post('buletin_nr')),
'data_buletin'=>$this ->input ->post('data_buletin'),
'nume'=>strtoupper($this ->input ->post('nume')),
'prenume'=>strtou pper($this ->input ->post('prenume')),
'varsta'=>$this ->input ->post('varsta'),
'adresa'=>strtoupper($this ->input ->post('adresa')),
'biopsii'=>$this ->input ->post('biopsii'),
'operatii'=>$this ->input ->post('operatii'),
'altele'=>$this ->input ->post('a ltele'),
'internat'=>strtoupper($this ->input ->post('internat')),
'fo'=>$this ->input ->post('fo'),
'trimis'=>strtoupper($this ->input ->post('trimis')),
'data_trimitere'=>$this ->input ->post('data_trimitere'),
'diag_clin'=>strtoupper($this ->input ->pos t('diag_clin')),
'material_trimis'=>strtoupper($this ->input ->post('material_trimis')),
'blocuri'=>$this ->input ->post('blocuri'),
'lame'=>$this ->input ->post('lame'),
'cod_leziune'=>strtoupper($this ->input ->post('cod_leziune')),
'rezultat'=>strtoup per($this ->input ->post('rezultat')),
'created_at'=>$created_at,
'unitate' => $unitate
Se folosește funcția add_pacient de tip s esiune, iar la final se adaugă î n baza de date MySQL
prin variabila insert(,).
29
$query = $this ->db->insert('pacient_hp',$ data);
if ($query) {
return true;
}else{
return false ; }}
Vizualizarea tabelului în aplicație este implementată cu ajutorul clasei "form" sub formă de
formular. Datele furnizate fiind trimise de către fișierul "model_pacient.php" din folderul
"models" î n fisierul "add_pacient.php" din folderul views.
<div class="form">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="36%" align="left">
<b>Buletin histopato logic nr :</b>
…..
…..
<?php echo form_close(); ?>
</div>
În codul sursă de mai sus este creat tabelul nostru. Nu am trecut î ntregul cod sursă deoarece
este destul de lung din cauza complexității sale.
3.3.2.2 Subtab- ul Vizualizare pacient are la bază un formular cu toate intrările introduse de
către doctor în baza de date Mysql. S -a implementat și un modul de căutare al pacientului
după nume, prenume sau dată.
Figura 3.7 Subtab -ul Vizualizare pacient – cabinetul histopatologic (datele sunt fictive)
Implementarea modulului de cautare s-a realizat în felul următor, fiind prezent în fișierul
"pacient.php" din folderul "controllers":
public function find(){
$this ->load ->model('model_pacient');
$this ->load ->library('table');
$this ->load ->library('menu');
30
$per_page = '300';
$unitate = $this ->model_pac ient->unitate($this ->session ->userdata('level'));
$data['tbl_pacient_histo'] = $this ->model_pacient –
>tbl_pacient_histo_find($this ->input ->post('find'),$this ->input ->post('find2'),$this ->input –
>post('findd'),$per_page,$unitate);
$data['menu'] = $t his->menu ->show_menu();
$data ['pag'] = '';
$data['total'] = $this ->model_pacient ->total_pacient_nr_rows();
$this ->load ->view('pacient/histol',$data);
După cum se poate vedea mai sus, s -a realizat funcția "find() " ce are la bază variabila
"tbl_pacient_histo_find" cu 3 input -uri: post('find'), post('find2'), post('findd') ce reprezint ă
numele, prenumele și data pacientului.
După realizarea funcției, căută rile sunt returnate de către fișierul "model_pacient.php" din
folderul "models " ce comunică cu baza de date Mysql astfel:
public function tbl_pacient_histo_find($find,$find2,$findd,$per_page,$unitate){
$this ->db->order_by('id','desc');
$this ->db->like ('nume', $find);
$this ->db->like('prenume', $find2);
$this ->db->like('data_buletin', $findd);
$this ->db->like('unitate', $unitate);
$query=$this ->db->get('pacient_hp',$per_page);
return $query- >result();}
Observăm că, numele, prenumele ș i data sunt asociate cu imput -urile din funcția "find()" ce
am realizat -o anterior.
La final vizualizarea c ăutării se face cu ajutorul fisierului "histol.php" din folderul views.
<?php echo form_open('pacient/find'); ?>
<div class="form" >
<label>Cauta dupa NUME si/sau PRENUME si/sau DATA </label>
<fieldset>
<?php
$find = array('class' => 'text ','type'=>'text', 'id' => 'find', 'name' => 'f ind', 'maxlength'
=> '20', 'size' => '10');
echo form_input($find);
$find2 = array('class' => 'text ','type'=>'text', 'id' => 'find2', 'name' => 'find2',
'maxlength' => '20', 'size' => '10');
echo form_input($find2);
$findd = array('class' => 'text ','type'=>'text', 'id' => 'findd', 'name' => 'findd',
'maxlength' => '20', 'size' => '10');
echo form_input($fi ndd);
$submit = array('class'=>'submit', 'type'=>'submit','name'=>'submit', 'value'=>'Cauta');
echo form_submit($submit); ?>
Implementarea listei de pacienți adăugaț i în baza noastră de date s -a realizat în felul următor:
public function histolist(){
$this ->load ->library('pagination');
$this ->load ->model('model_pacient');
$this ->load ->library('table');
$this ->load ->library('menu' );
31
S-a creat funcția histolist(), s -au importat librăriile "pagination", "table", "menu" din folderul
"libraries" [6] iar pe lângă acestea s -a importat și fișierul "model_pacient.php" din folderul
models. Mai departe s -a creat paginația listei de pacienți ce se regăsește în fișierul
"pacient.php" din folderul " controllers ".
$per_page = '20';
$offset = $this ->uri->segment(3);
$config['base_url'] = base_url().'pacient/histolist/';
$config['total_rows'] = $this ->model_pacient ->total_pacient_nr_rows();
$config['per_page'] = $per_page;
$this ->pagination ->initialize($config);
$data ['pag'] = $this ->pagination ->create_links();
$data['total'] = $this ->model_pacient ->total_pacient_nr_rows();
$data['tbl_pacient_histo'] = $this ->model_pa cient –
>tbl_pacient_histo($per_page,$offset);
$data['menu'] = $this ->menu ->show_menu();
$this ->load ->view('pacient/histol',$data);
După cum putem vedea în codul sursă de mai sus, s -a creat un numă r maxim de 20 de pacienți
pe fiecare pagină ș i s-au realizat variabilele:
– base_url : adresa url a paginii atunci când se soli cită vizualizarea listei de pacienți
– total_rows : numă rul de coloane
– per_page : câte coloane să apară pe fiecare pagină
– total : numărul total de pacienți din listă
– tbl_pacient_histo : lista propriu zisă cu pacienți
Toate aceste variabile sunt returnate de către fișierul "model_pacient.php" din folderul
"models" care gestionează baza noastră de date MySql și pe care le menționez mai jos:
public function tbl_pacient_nr_rows(){
$this->db->where('buletin_nr',$this ->input ->post('buletin_nr'));
$query=$this ->db->get('pacient_hp');
return $query- >num_rows();
}
Funcția tbl_pacient_nr_rows () returnează ș i verifică daca există număr de buletin
histopatologic. Practic s e verifică daca pacientul este prezent în baza noastră de date prin
câmpul "buletin_nr" aferent acestuia.
public function total_pacient_nr_rows(){
$this ->db->order_by('id','desc');
$query=$this ->db->get('pacient_hp');
return $query- >num_ rows();
Funcția total_pacient_nr_rows() returnează numarul de râ nduri pentru a crea paginația.
32
public function tbl_pacient_histo($per_page,$offset){
$this ->db->like('unitate', $this ->unitate($this ->session ->userdata('level')));
$this ->db->order_by('id','desc');
$query=$this ->db->get('pacient_hp',$per_page,$offset);
return $query- >result();
Funcția tbl_pacient_histo() returnează rezultatele din tabela pacient_histo pentru a crea lista
de pacienți din cabinetul histopatologic.
La final , returnările acestor funcții sunt trimise către fișierul "histol.php" din folderul "views"
pentru afi șarea lor pe pagină, fiind create sub formă de tabel:
<p>Total pacienti : <b><?php echo $total ?></b></p>
<table>
<thead>
<td><div>ID</div></td>
<td><div>Data</div></td>
<td><div>Rezultat HP</div></td>
<td><div>Nume</div></td>
<td><div>Prenume</div></td>
<td><div>Edit</div></td>
</thead >
<tbody>
<?php
foreach($tbl_pacient_histo as $row){
get_instance() ->load ->helper( 'text');
echo "<tr>";
echo "<td><div>". $row ->id ."</div></td>";
echo "<td width = '150px'><div>". $row ->data_buletin ."</div></td>";
echo "<td><div><div class='odd'><a class='tooltip' href='#' original -title='".$row –
>rezultat."'>".word_limiter($row ->rezultat,5)."</a></div></div></td>";
echo "<td><div>". $row ->nume ."</div></td>";
echo "<td><div>". $row ->prenume ."</div></td>";
if($this ->session ->userdata('level')==1){
$l=1;}
if($this ->session ->userdata('level')==2){
$l=2;}
if($this ->session ->userdata('level')==3){
$l=''; }
if($this ->sessio n->userdata('level')==$l)
{
echo "<td><div><a href='".base_url()."pacient/print_pacient/".$row ->id."' target
='_blank'>Print</a> / <a href='".base_url()."pacient/edit_pacienth/".$row –
>id."'>Edit</a> / <a href='".base_url()."pacient/del_pacienth/".$row –
>id."'>Del</a></div></td>";
}else{
echo "<td><div><a href='".base_url()."pacient/pri nt_pacient/".$row ->id."' target
='_blank'>Print</a></div></td>"; }
echo"</tr>";}
?>
</tbody>
</table>
După codul de mai sus ne dăm seamă ca mai există în lista noastră o coloană cu numele:
"edit".
33
Figura 3.8 Subtab -ul Vizualizare pacient, coloana Edit
Print – extragerea datelor pacientului sub forma unui buletin histopatologic cu scopul de a fi
printat
Edit – editatea datelor pacientu lui
Del – stergerea pacientului din baza noastră de date MySql
Procedurile de creare, comunicare cu baza de date și vizualizarea informațiilor în aplicația
web sunt la fel. Mai întâi se implementează (creează) fiecare funcție:
public f unction edit_pacienth(){
if($this ->session ->userdata('auth')){
$this ->load ->library('menu');
$this ->load ->model('model_pacient');
$data['menu'] = $this ->menu ->show_menu();
$data['data_pacient_histo'] = $this ->model_pacient ->tbl_pacient_histo_mo d();
$this ->load ->view('pacient/mod_pacient',$data);
}else{
redirect(base_url());}}
Crearea funcției edit_pacienth() și a variabilei tbl_pacient_histo_mod().
public function update_validation(){
$this ->form_validation ->set_rules('buletin_nr ','<b>Buletin histopatologic
nr:</b>','required|trim');
$this ->form_validation ->set_rules('data_buletin','<b>din data
de:</b>','required|trim');
$this ->form_validation ->set_rules('nume','<b>Nume</b>','required|trim');
$this ->form_validation ->set_rule s('prenume','<b>Prenume</b>','required|trim');
$this ->form_validation ->set_rules('rezultat','<b>Rezultat HP</b>','required|trim');
if($this ->form_validation ->run()){
$this ->load ->library('menu');
$data['menu'] = $this ->menu ->show_menu();
$this ->load ->library('date_time');
$data['datab'] = $this ->date_time ->now_date();
$this ->load ->model('model_pacient');
echo $this ->uri->segment(3);
34
if($this ->model_pacient ->mod_pacient($this ->uri-
>segment(3))==true){
$data['succes'] = "Mo dificat cu Succes !";
$data['data_pacient_histo'] = $this ->model_pacient –
>tbl_pacient_histo_mod();
}else{
$data['errors'] = "Pacientul nu a fost modificat !";
$data['data_pacient_histo'] = $this ->model_pacient –
>tbl_pacient_histo_mod() ; }
$data['data_pacient_histo'] = $this ->model_pacient –
>tbl_pacient_histo_mod();
$this ->load ->view('pacient/mod_pacient',$data);
În acest pas se cr eează funcția update_validation() pentru inițializarea datelor din câmpul edit.
Modific ările aferente se efectu ează doar dacă minim unul dintre câmpurile cu informațiile
pacientului sunt modificate.
public function del_pacienth(){
if($this ->session ->userdata('auth')){
$id = $this ->uri->segment(3);
$this ->load ->model('model_pacient');
$this ->model_pac ient->del_pacient($id);
$this ->session ->set_flashdata('error', 'Pacientul cu id = '.$id.' a fost sters cu
succes !');
Crearea funcției del_pacienth() ce reprezintă ștergerea pacientului din baza de date. Ș tergerea
se efectuează dupa id -ul pacientului.
public function print_pacient(){
$this ->load ->model('model_pacient');
$data['all'] = $this ->model_pacient ->print_pacient_histo_id($this ->uri->segment(3));
$this ->load ->view('pacient/print_all',$data);
Crearea funcției print_pacient() are scopul de a extrage datelor pacientului sub forma unui
buletin histopatologic cu scopul de a fi printat. Tot aici se specifică calea formularului de
printare, fiind "print _all.php" din folderul "views ".
Următoarea etapă este transmiterea acestor funcții și comunica rea cu baza de date ce se
realizeaz ă prin intermediul fișierului " model_pacient.php" din folderul " models ".
public function mod_pacient($id){
$this ->load ->library('session');
if($this ->session ->userdata('level')){
$id2=$this ->session ->userd ata('level');
$unitate =$this ->unitate($id2);
}
$data = array(
'buletin_nr' =>strtoupper($this ->input ->post('buletin_nr')),
'data_buletin'=>$this ->input ->post('data_buletin'),
'nume'=>strtoupper($this ->input ->post('nume')),
'prenume'= >strtoupper($this ->input ->post('prenume')),
'varsta'=>$this ->input ->post('varsta'),
'adresa'=>strtoupper($this ->input ->post('adresa')),
'biopsii'=>$this ->input ->post('biopsii'),
'operatii'=>$this ->input ->post('operatii'),
'altele'=>$this ->input ->post('altele'),
35
'internat'=>strtoupper($this ->input ->post('internat')),
'fo'=>$this ->input ->post('fo'),
'trimis'=>strtoupper($this ->input ->post('trimis')),
'data_trimitere'=>$this ->input ->post('data_trimitere'),
'diag_clin'=>strtoupper($this ->input->post('diag_clin')),
'material_trimis'=>strtoupper($this ->input ->post('material_trimis')),
'blocuri'=>$this ->input ->post('blocuri'),
'lame'=>$this ->input ->post('lame'),
'cod_leziune'=>strtoupper($this ->input ->post('cod_leziune')),
'rezultat'=>strtoupper($this ->input ->post('rezultat')),
'unitate' => $unitate
);
$this ->db->where('id',$id );
$this ->db->update('pacient_hp', $data);
Funcția mod_pacient($id) extrage din baza de date id- ul pacientului selectat de către utilizator
în aplica ția web, alături de informațiile acestuia mai apoi le modifică în funcție de
modificările efectuate și le trimite înapoi.
public function del_pacient($id){
$this ->db->where('id', $id);
$this ->db->delete('pacient_hp');
Func ția del_pacient($id) extrage din baza de date id -ul pacientului și il sterge definitiv.
public function print_pacient(){
$this ->load ->model('model_pacient');
$data['all'] = $this ->model_pacient ->print_pacient_histo_id($this ->uri->segment(3));
$this ->load ->view('pacient /print_all',$data);
Funcția print_pacient() extrage din baza de date id- ul pacientului și afișează în formularul
creat toate datele sale, pentru a fi printate.
Vizualizarea tuturor acestor date în aplicația web se face cu ajutorul fișierelor: "print_all.php",
"histol.php" și "mod_pacient.php", aflate î n folderul "views", codul sursă se găsește mai jos:
<div class="box -head"><h1>Modifica Pacient histopatologie</h1>
</div><div class="box -content">
………………
<div class="form">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="39%"><b>Buletin histopatologic nr : <?php
$buletin_nr = array('class' => 'text ','type'=>'te xt', 'id' => 'buletin_nr', 'name' => 'buletin_nr',
'value' => $data_pacient_histo['buletin_nr'] ,'maxlength' => '10',
'size' => '10');
echo form_input($buletin_nr);
?></b></td>
<td width="2%"> </td>
<td width="59%"><b>din data de:
<?php
$data_buletin = array('class' => 'text ','type'=>'text', 'id' => 'data_buletin', 'name' =>
'data_buletin', 'value' => $data_pacient_histo['data_buletin'] ,'maxlength' => '8',
'size' => '8');
echo form_input($data_buletin);
?>
36
</b></td>
</tr>
</table>
<p> </p>
<div class="notification info">
<div class="messages"> Date personale</div>
</div><br />
………………….
<br>
<br>
<?php
$submit = array('class'=>'submit', 'type'=>'submit','name'=>'submit', 'value'=>'Salveaza');
echo form_submit($submit);
Nu am adăugat tot codul sursă deoarece este destul de complex. In el se creează un formular
sub forma unui tabel cu toate câmpurile și informațiile pacientului, gata pentru a fi modificate
și salvate de catre utilizatorul proiectului nostru.
Figura 3.9 Modificarea pacientului (datele sunt fictive)
echo "<td><div><a href='".base_url()."pacient/print_pacient/".$row ->id."' target
='_blank'>Print</a> / <a href='".base_url()."pacient/edit_pacienth/".$row –
>id."'>Edit</a> /& nbsp; <a href='".base_url()."pacient/del_pacienth/".$row –
>id."'>Del</a></div></td>";
}else{
echo "<td><div><a href='".base_url()."pacient/print_pacient/".$row ->id."' target
='_blank'>Pr int</a></div></td>";
Codul sursă de mai sus execută exportarea către o pagină noua ce include informațiile
pacientului și rezultatul analizelor. P ractic este buletinul histopatologic al pacientului, cu
scopul pentru printare.
37
Figura 3.10 Pagina printare pacient – Cabinetul de Histopatologie (datele sunt fictive)
3.3.3 Tab -ul Pacient ci to
Acest tab este aproximativ identic cu tab -ul Pacient Cito. Facilitează adăugarea, vizualizarea,
ștergerea, editarea și printarea datelor personale și medicale ale p acienților din cabinetul
medical citologic.
3.3.3.1 Subtab- ul Add pacient are la bază un formular în formă de tabel unde treb uie
introduse datele personale ș i medicale ale pacientului în cauză. Nu o sa mai intru î n am ănunte
cu descrierea de coduri sursă, funcții si algoritmi deoarece sunt pe același principiu ca și î n
tab-ul pacient histo. Singurele modificari sunt cele vizuale (alte notiuni medicale, câmpur i cu
alte elemente de natură să exemplifice problemele pacientului, probleme de natura medicala)
și, desigur numele fișierelor din folderele "controllers", "models" și view " și numele
funcțiilor, î n general în loc de prefixul sau afixul "histo" s -a folosit "cito ".
Figura 3.11 Subtab -ul Add pacient – cabinetul citologic
38
3.3.3.2 Subtab- ul Vizualizare pacient are la bază un formular cu toate intrările introduse de
către doctor în baza de date Mysql , fiind din punct de vedere al codului sursă aproape identic
cu cel din subtab- ul vizualizare pacient al tab -ului pacient histo. C âmpurile si noțiunile
medicale au fost schimbare precum și numele funcțiilor și al fișierelor. Ele se află tot în
aceleași foldere, dar au prefixele sau afixele "cito".
Figura 3.12 Subtab -ul Vizualizare pacient – cabinetul histopatologic (datele sunt fictive)
Singura modificare e ste în coloana Edit. După cum putem observa s -a adaugat un link nou:
Adaugare/Modificare rezultat.
Figura 3.13 Coloana Edit – cabinetul citologic
Scopul acestui link este acela de a modifica sau adăuga rezultatul citologic al pacientului.
Accesul la această secțiune o are doar doctorul, ce este asociat level -ului 2, restul utilizatorilor
ce nu au acest level, nu au să vadă acest link. Codul sursă al aces tei funcții este mentionat in
rândurile de mai jos:
39
foreach($tbl_pacient_histo as $row){
…………………
if($this ->session ->userdata('level')==2){
$l=2;}
if($this ->session ->userdata('level')==3){
$l=' '; }
if($this ->session ->userdata('level')==5){
$l=' ';
if($this ->session ->userdata('level')==$l)
{
…………………
.$row ->id."'>Adauga/ Modifica rezultat </a>
După cum putem observa, din funcția if(), dac ă level -ul este egal cu $1 , atunci linia de
Adăugare/ Modificare rezultat este afișată. Level -ul 3 si 5 nu are asociat ă nici o variabilă de tip
sesiune iar link -ul nu o să apară.
Proceduri le de creare, comunicare cu baza de date și vizualizarea informațiilor în aplicația
web sunt la fel cu Subtab- ul Vizualizare pacient din punctul 3.3.5.2 Subtab- ul Vizualizare
utilizatori.
3.3.4 Tab -ul Print
Reprezintă o cale mai usoară a personalului de a gestiona buletinele medicale ale pacienților.
Figura 3.14 Subtab -ul Print pe zi/perioada Cit o
40
Fișele medicale pot fi extrase din baza de date sub forma de formular, gata pentru a fi printate
în două moduri: după data curentă sau o altă dată și pe o durata de zile, luni sau ani. În ambele
cabinete medicale algoritmii si f uncțiile sunt identice, diferenț ele fiind de forma numelor
folderelor, al fișierelor ș i al funcțiilor. În rândurile de mai jos voi descrie cum s -a realizat doar
unul din subtab- uri, ac esta fiind Prin pe zi/perioada Cito .
Primul pas al implementării acesto r două funcții este crearea lor ce se află în fișierul
"pacientcito.php" din folderul "controllers".
public function print2_per_pag(){
$this ->load ->model('model_pacient_cito');
$data['all'] = $this ->model_pacient_cito ->print_pacient_cito($this ->input –
>post('finddata'));
$this ->load ->view('pacientcito/print_all_cito',$data);}
Codul sursă de mai sus reprezintă crearea funcției print2_per_pag(). Ea este folosită pentru a
efectua rez ultatul căutării pacientului d upa data curentă sau o altă dată .
public function print_betwen_per_pag(){
$this ->load ->model('model_pacient_cito');
$data['all'] = $this ->model_pacient_cito ->print_pacient_cito_betwen($this ->input –
>post('v1'),$this ->input ->post('v2'));
var_dump($this ->model_pacient_cito ->print_pacient_cito_betwen($this ->input –
>post('v1'),$this ->input ->post('v2')));
$this ->load ->view('pacientcito/print_all_cito',$data);}
Crearea funcției print_betwen_per_pag() din codul de mai sus repr ezintă rezultatul căutării
pacientului sau pacienților pe o perioada de timp. post('v1 ') specific ă data de inceput al
căutării iar post( 'v2') specific ă data de final al căutarii.
Al doilea pas este returnarea căutărilor pe care le- am efectuat. În fișieru l
"model_pacient_cito.php" din folderul "models" reies urm ătoarele linii de cod sursă:
public function print_pacient_histo($data,$unitate){
$this ->db->order_by('id','desc');
$this ->db->where('data_buletin', $data);
$this ->db->like('unitate', $unit ate);
$query=$this ->db->get('pacient_hp');
return $query- >result();
Prin funcția print_pacient_histo din codul sursă de mai sus s -a realizat returnarea rezultatelor
căutarii după o anumită data.
public function print_pacient_cito_betwen($ v1,$v2){
$this ->db->order_by('id','desc');
$this ->db->where('data BETWEEN "'. $v1. '" and "'. $v2.'"');
$query=$this ->db->get('pacient_cito');
return $query- >result();
41
Returnarea rezultatelor căutării din baza de date Mysql al aplicaț iei web dupa o anumită
perioadă de timp s -a realizat prin funcția print_pacient_cito_betwen de mai sus.
Ultimul pas pe care trebuie să il luam în calcul este cel al afișării acestor funcții în aplicația
web, fapt pentru care s -au creat următoarele linii d e cod ce se află în fi șierul "print.php" , din
folderul "views".
<div class="table">
<?php
$attributes = array('id' => 'myform','target'=>'_blank');
echo form_open('pacientcito/print2_per_pag',$a ttributes);
?>
<div class="form">
<label>Cauta dupa data curenta sau o alta data : </label>
<fieldset>
<?php
$finddata = array('class' => 'text ','type'=>'text', 'id' => 'finddata', 'name' =>
'finddata','value'=>$dataf, 'maxlength' => '20', 'size' => '10');
echo form_input($finddata);
$submit = array('class'=>'su bmit', 'type'=>'submit','name'=>'submit', 'value'=>'Cauta');
echo form_submit($submit);
?>
<?php echo form_close(); ?>
<?php
$attributes = array('i d' => 'myform','target'=>'_blank');
echo form_open('pacientcito/print_betwen_per_pag',$attributes);
?>
<div class="form">
<label>Cauta pacienti intre data START : </label>
<fieldset>
<?php
$v1 = array('class' => 'text ','type'=>'text', 'id' => 'v1', 'name' => 'v1', 'maxlength' =>
'20', 'size' => '10');
echo form_input($v 1);
echo'<br>';
echo'<br>';
echo '<label>Data STOP : </label>';
$v2 = array('class' => 'text ','type'=>'text', 'id' => 'v2', 'name' => 'v2', 'maxlength' =>
'20', 'size' => '10');
echo form_input($v2);
$submit = array('class'=>'submit', 'type'=>'submit','name'=>'submit', 'value'=>'Cauta');
echo form_submi t($submit);
După cum putem să observăm din codul sursă de mai sus s -au realizat cele două funcții ce
sunt afișate în aplicația web.
Rezultatele căutării dupa o anumită dată sau după o anumită perioadă de timp sunt afișate în
figura de mai jos. Nu o sa mai parcurg pașii creării lor deoarece sunt aproximativ identici cu
cei de la punctul 3.3.3.1 Subtab- ul Vizualizare pacient.
42
Figura 3.15 Pagina printare pacient – Cabinetul de Citologie (datele sunt fictive)
3.3.5 Tab -ul Utilizatori
Această secțiune reprezintă utilizatorii (cadrul medical) ce sunt inserați în baza de date MySql a aplicației web. Acest tab este accesibil doar pentru level -ul 2 de acces, care este doctorul.
Pentru restul personalului medical, respectiv restul utilizatorilor accesul este restricționat. Crearea liniilor de cod sursă pentru nivelurile de acces au fost evidențiate la punctul 3.2.1
Gestionarea meniului .
Tab-ul utilizatori este alcătuit din două subtab -uri: Add utilizator (adăugarea de cadre
medicale) și Vizualizare utilizatori ( un formular sub forma de tabel ce este alcătuit din cadrele
medicale inserate î n baza de date MySql a aplicației web).
3.3.5.1 Subtab- ul Add utilizator prezintă aceleași proceduri de creare, comunicare cu baza
de date și vizualizarea informațiilor în aplica ția.
43
Figura 3.16 Subtab -ul Add – Cabinetul de Citologie
Mai întâi se implementează (creează) fiecare funcție în fișierul "users.php" din folderul
"controllers".
public function signup(){
if($this ->session ->userdata('auth')){
$this ->load ->library(' menu');
$data['menu'] = $this ->menu ->show_menu();
$this ->load ->view('add_user',$data);
}else{
redirect('main/login');
}}
public function signup_validation(){
$this ->form_validation –
>set_rules('email','Email','required|trim|valid_email|i s_unique[users.email]');
$this ->form_validation ->set_rules('password','Parola','required|trim');
$this ->form_validation ->set_rules('cpassword','Confirma
parola','required|trim|matches[password]');
$this ->form_validation ->set_rules('level','Nivel Acces','required|trim');
$this ->form_validation ->set_rules('nume','Nume','required');
$this ->form_validation ->set_rules('prenume','Prenume','required');
Cum reiese din codul surs ă de mai sus, s -a creat funcția signup() ce specifică crearea contului
noului utilizator iar cu ajutorul funcției signup_validation() s -au creat variabilele necesare
pentru crearea contului, toate câmpurile fiind necesare pentru a se finaliza validarea noului
cont.
Al doilea pas este de a comunica cu baza de date MySQL a aplicației web și de a insera noile
date în ea. În fișierul "model_users.php" reg ăsim codul sursă ce execută acest lucru și este
exemplificat mai jos:
44
public function add_user($created_at){
$data = array(
'email' =>$this ->input ->post('email'),
'password'=> md5($this ->input ->post('password')),
'level'=>$this ->input ->post('level'),
'name'=>$this ->input ->post('nume'),
'surname'=>$this ->input ->post('prenume'),
'created_at'=>$created_at,
'status'=>'A'
);
$query = $this ->db->insert('users',$data);
if ($query) {
return true;
}else{
return false;
După cum putem vedea, toate datele sunt inserate în baza noastră de date MySQL prin funcția
add_user, fapt pentru care se creează noul utilizator.
La final, pentru a vedea în aplicația noastră formul arul de creare cont, am inserat următoarele
linii de cod sursă în fișierul "add_user.php" din folderul "views".
……………………………..
<div class="form">
<label>Email</label>
<fieldset>
<?php
if(!empty($errors)){
$email_val = $this ->input ->post('email');
}else{
$email_val =''; }
$email = array('class' => 'text small','type'=>' text', 'id' => 'email', 'name' => 'email', 'value'
=> $email_val );
echo form_input($email); ?>
<label>Parola</label>
<?php
$password = array('class' => 'text small','type'=>'password', 'id' => 'password', 'name' =>
'password');
echo form_input($password);
?>
<label>Confirma parola</label>
<?php
$cpassword = array('class' => 'text small','type'=>'password', 'id' => 'cpassword', 'name' =>
'cpassword');
echo form_input($cpassword);
?>
<br>
<br>
<?php
if(!empty($errors)){
$level_val = $this ->input ->post('level');
}else{
$level_val ='0';
}
$option = array(
''=>'',
'5'=>'Level5 ',
'2'=>'Level2',
'3'=>'Level3'
45
);
………………………………..
Nu am inserat întregul cod sursă, deoarece este unul complex. Practic, în codul sursă de mai
sus se crează formularul afișat în aplicația web.
3.3.5.2 Subtab- ul Vizualizare utilizatori a fost creat tot sub același stil de lucru.
Figura 3.17 Subtab -ul Vizualizare u tilizatori – Cabinetul de Citologie (datele sunt fictive)
Procedura de creare a funcțiilor este realizată tot de către fișierul "users.php " și are
următoarele linii de cod sursă:
public function userslist(){
$this ->load ->library('pagination');
if($this ->session ->userdata('auth')){
$this ->load ->model('model_users');
$this ->load ->library('table');
$this ->load ->library('menu');
Funcția userslist() es te creată și inițializează libră ria de paginație, tabel, și fișierul
"model_users.php".
Tot în fișierul "users.php" este creat ă funcția ce se ocupă cu paginația formularului de tabel și
s-a inițializat un număr maxim de 10 useri pe fiecare pagină.
$per_page = '10';
$offset = $this ->uri->segment(3);
$config['base_url'] = base_url().'users/user slist/';
$config['total_rows'] = $this ->model_users ->tbl_users_nr_rows();
$config['per_page'] = $per_page;
$this ->pagination ->initialize($config);
$data ['pag'] = $this ->pagination ->create_links();
Următorul pas este comunicarea funcțiilor cre ate cu baza de date, iar aici intră în legătură
fișierul "model_users.php" ce returneaz ă rândurile de informații din baza de date MySQL al
aplicației web.
46
public function tbl_users($per_page,$offset){
$this ->db->order_by('id','desc');
$query= $this ->db->get('users',$per_page,$offset);
return $query- >result();}
public function tbl_users_nr_rows(){
$this ->db->order_by('id','desc');
$query=$this ->db->get('users');
return $query ->num_rows();
Din codurile de mai sus rezultă returnările funcțiilo r din baza de date, r ândurile și ordonarea
lor în formular dupa id pe plan descrescător.
La final pentru ca toate acestea să fie afișate, fișierul "usersl.php" aplic ă partea vizuală în
aplicația web prin urmatoarele linii de c od sursă:
<div class="box -head"><h1>Utilizatori </h1></div>
……………………………………
<div class="table">
<form action="" method="post">
<table>
<thead>
<td><div>ID</div></td>
<td width='80px'><div>Nivel </div></td>
<td><div>E -mail</div></td>
<td><div>Nume</div></td>
<t d><div>Prenume</div></td>
<td><div>Edit</div></td>
</thead>
<tbody>
<?php
foreach($tbl_usr as $row){
echo "<tr>";
echo "<td><div>". $row ->id ."</div></td>";
echo "<td width='80px'><div>". $row ->level ."</div></td>";
echo "<td><di v>". $row ->email ."</div></td>";
echo "<td><div>". $row ->name ."</div></td>";
echo "<td><div>". $row ->surname ."</div></td>";
echo "<td><div><a href='".base_ url()."users/edit_usr/".$row –
>id."'>Edit</a> / <a href='".base_url()."users/del_usr/".$row –
>id."'>Del</a></div></td>";
echo"</tr>";}
?>
</tbo dy>
</table>
<div class="pagination">
În Subtab- ul Vizualizare Utilizatori, dupa cum s -a observat mai există coloana "Edit" ce este
compusă de câmpurile Edit / Del, pentru fiecare utilizator în parte.
47
Figura 3.18 Subtab -ul Vizualizare Utilizatori, coloana Edit
Algori tmii si funcțiile sunt identice și au fost parcurse și descrise în punctul 3.3.2.2 Subtab -ul
Vizualizare pacient, diferentele fiind de forma nume lor folderelor, al fiși erelor, al funcțiilor
și eliminarea link -ului print.
3.3.6 Tab -ul Backup
Ca orice bază de date MySQL, trebuie întreținută și efectuată o copie de siguranță regulată.
Acest tab reprezintă posibilitatea de a copia întreaga bază de date MySQL a aplicației web.
Scopul copiei este pentru a preveni un dezastru în cazul defectării server -ului sau gestionarea
defectuoasă a informațiilor sau chiar pierderea lor.
3.3.6.1 Subtab- ul Backup.db
Funcționalitatea copiei de siguranță este reprezentată de un simplu gest, acționarea mouse-
ului stânga pe Subtab- ul Backup.db. Când s -a efectuat acest gest, o sa apară o fereastră pentru
efectuarea de salvare a fișierului denumit "histo.gz".
Figura 3.12 Subtab -ul Backup.db
48
Această copie de siguranță este realizată de fișierul "backup.php" din folderul "controllers" și
de o librărie ce o oferă framework -ul CodeIgniter numită "download_helper.php ". Codul
sursă este descris mai jos:
class Backup extends CI_Controller {
public function save(){
if($this ->session->userdata('auth')){
$this ->load ->dbutil();
if ($this ->dbutil ->database_exists('histopap_histo'))
{
if($this ->dbutil ->backup()){
$backup =& $this ->dbutil ->backup();
$this ->load ->helper('download');
force_ download('histo.gz', $backup);
$data['succes'] = "Baza de date exista si a fost
SALVATA cu SUCCES!";
$this ->load ->library('menu');
$data['menu'] = $this ->menu ->show_menu();
$this ->load ->view('indexp',$data);
}
///////////////////////////////
}else{
$this ->load ->library('menu');
$data['menu'] = $this ->menu ->show_menu();
$data['errors'] = "Baza de date NU a fost SALVATA sau
NU EXISTA! Contacteaza dezvoltator !";
$this ->load ->view('indexp',$data) ;
Crearea funcției save() în prima parte verifică dacă baza de date MySQL a aplicației web
există "histopap_histo". Dacă ea există o redenumește "histo.gz" și o descarcă. Dacă nu există
o să fim întâmpinați de un mesaj ce ne atenționează că baza de date n u a fost salvată sau nu
există. Procedura de download s -a realizat cu ajutorul funcției force_download din fișierul
"download_helper.php"
49
Concluzii
Această aplicație web , vrea s ă aducă un real beneficiu cadrului medical și totodată pacientul ui
deoarece, se reduce considerabil timpul pierdut pe plan birocratic și se compensează asupra
celui mai important lucru , sănătatea pacientului . Cred cu nonșalanță că un asemenea sistem ar
trebui implementat în fiecare instituție spitalicească, pentru a sporii dezvoltarea asistenței
medicale.
Proiectul prezintă un aspect ordonat, simplu și compact ce nu pune în dificultate utilizatorul,
fapt pentru care se poate administra de o persoană fară cunoștințe de programare, chiar și
necalificată. Toate caracterist icile menționate pe parcursul acestei lucrări sunt introduse in
baza de date MySQL și nu necesită alte modificări asupra lor.
Posibilitățile de dezvoltare asupra aplicației web pot fi u rmătoarele:
– adăugarea mai multor cabinete medicale din instituția spitalicească pentru o mai bună
comunicare între departamentele aferente
– implementarea unui sistem de gestiune pe o scară mai largă, care să permită transferul de
pacienți de la o instituție spitalicească la alta
– notificarea pacientului prin e -mail cu privire la rezultatele analizelor mai complexe efectuate
50
Bibliografie
1. Traian Anghel – “Programarea în PHP” , Polirom, Bucuresti, 2005
2. Luke Welling, Laura Thomson – ,,Dezvoltarea aplicațiilor WEB cu PHP si MySQL,
Editia a II -a”, Teora, 2005
3. Car men Holotescu, Antoanela Naaji – „Tehnologii Web” , Vasile Goldiș University Press,
Arad, 2007
[1] *** “Stiluri” – http://codeigniter.com
(consultat la data de 15 .04.2017)
[2] *** “ Stiluri” – http://www.w3schools.com/css/default.asp
(consultat la data de 15 .04.2017)
[3] *** “PHP” – http://php.net/manual/ro/langref.php
(consultat la data de 24.04.2015)
[4] *** “Javascript” – http://www.javascript.com
(consultat la data de 03.05.20015)
[5] *** “ Javascript ” – http://www.w3schools.com/ js/default.asp
(consultat la data de 03.05.20015)
[6] *** “ Librărie ” – http://www.w3schools.com/jquery/default.asp
(consultat la data de 08.06.20015)
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: Capitolul 1 Introducere………………………………………….. 4 1.1 Prezentare generală…………………………………………………………. 4 1.2… [625539] (ID: 625539)
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.
