Aplicatii Client Server Pentru Gestionarea Activitatii Policlinicii

Introducere………………………………………………………………………………5

baze de date relaționale……………………………………………………..6

Noțiuni generale ……………………………………………………………………6

Aspecte privind evaluarea performanțelor bazelor de date ………………..7

Măsurări ale performanței………………………………………………………..8

Fișierele ………………………………………………………………………………9

Descrierea modelelor de fișiere ………………………………………………10

Motorul Bazei de Date ……………………………………………………………11

Gruparea Datelor …………………………………………………………………12

Întreținerea Bazelor de date ……………………………………………………13

Crearea copiilor de siguranță …………………………………………………13

Corectarea unei copii de siguranță greșite …………………………………….14

Refacerea în starea curentă a unei baze de date de pe o copie de siguranță….14

Logarea……………………………………………………………………………..15

Crearea punctelor de control …………………………………………………16

Schimbarea locației bazei de date ……………………………………………16

Folosirea uneltelor Bazei de Date ……………………………………………..16

1.9.1. Sfaturi pentru mărirea vitezei de încărcare ……………………………………18

1.10. Optimizarea alocării memoriei …………………………………………………18

1.10.1. Optimizări la nivelul sistemului de operare ………………………………………18

1.10.2. Cache pentru baza de date …………………………………………………….19

ARHITECTURA CLIENT – SERVER ………………………………………………..20

Arhitectura Client – server (date generale) …………………………………20

Modelul „host – computer + terminale” și SGBD multiuser…………………20

Computere personale și SGBD desktop………………………………………21

Particularitățile și avantajele arhitecturii „client – server”……………………21

Arhitectura calculelor în rețea………………………………………………..23

Nivelul clientului ……………………………………………………………..24

Nivelul serverului de aplicații ………………………………………………..25

Web- acces la baze de date ……………………………………………………….25

Generalități……………………………………………………………………25

Schema de lucru………………………………………………………………26

Adresă de rețea………………………………………………………………..27

Mediul de lucru al unui server………………………………………………..27

Scenarii de acces la BD……………………………………………………………28

Conversia conținutului BD în documentele statice……………………………29

Crearea dinamică a documentelor hypertext în baza conținutului BD ………29

Crearea DI pe baza unor SGBD-uri înalt productive prin limbajul SQL……..30

MIJLOACELE DE ELABORARE A BAZEI DE DATE…………………………….32

Web- programare: limbajul PHP…………………………………………………32

Noțiuni de PHP……………………………………………………………….32

Posibilitățile PHP……………………………………………………………………………32

Structura limbajului……………………………………………………………33

Variabile ………………………………………………………………………35

Constante………………………………………………………………………36

Expresii……………………………………………………………………….37

Funcții…………………………………………………………………………41

Referințe……………………………………………………………………….44

Avantajele PHP……………………………………………………………….45

Neajunsurile PHP……………………………………………………………..46

Descrierea limbajului structurat de interpelare SQL……………………….46

Noțiuni generale………………………………………………………………46

Posibilitățile MySQL…………………………………………………………47

MySQL ca soluție a serverului bazei de date…………………………………47

Componența limbajului MySQL………………………………………………49

Operații relaționale. Comenzile de manipulare cu datele…………………….50

Avantajele MySQL……………………………………………………………54

Neajunsurile MySQL…………………………………………………………54

4. DESCRIEREA PROGRAMULUI……………………………………………………..59

4.1. Structura bazei de date………………………………………………………….59

4.2. Schema bloc a programului………………………………………………………60

4.3. Crearea și descrierea tabelelor………………………………………………..61

5. PARTEA ECONOMICĂ A PROIECTULUI………………………………………….69

5.1. Planificarea rețea………………………………………………………………..69

5.2. Evaluarea economică a proiectului……………………………………………79

5.3. Calculul eficienței economice…………………………………………………..82

5.4. Evaluarea eficacității ……………………………………………………………84

6. PROTECȚIA MUNCII………………………………………………………………….85

6.1. Controlul protecției muncii……………………………………………………..86

6.2. Analiza condițiilor de muncă……………………………………………………87

6.3. Cerințele ergonomice la locul de muncă………………………………………89

6.4. Semnalizarea antiincediară……………………………………………………..90

6.5. Calcularea ventilării……………………………………………………………92

ÎNCHEIERE………………………………………………………………………………….93

BIBLIOGRAFIE ……………………………………………………………………………..94

ANEXA 1. Listingul…………………………………………………………………………95

ANEXA 2. Interacțiunea între utilizator și baza de date……………………………124 ANEXA 3. Structura bazei de date………………………………………………………125

ANEXA 4. Schema bloc……………………………………………………………………126

ANEXA 5. Interfețe………………………………………………………………………..127

=== ANEXA_2 ===

Interacțiunea între utilizator și baza de date

=== ANEXA_5 ===

Anexa 5

Interfața de vizită (intrare).

Interfața informațiilor despre secția n.

Interfața cu informații despre personal la secția n.

Referitor la medic

Introducerea codului personal de către medic.

Operațiile pe care le poate efectuate un medic

Orarul de lucru a medicului

Interfața cu informații despre pacienți

Interfața cu adăugarea pacientului la consultație

Modificarea graficului de serviciu a medicului

Adăugarea în baza de date a unui pacient nou

Referitor la administrator

Adăugarea unei secții noi

Modificarea datelor în secții

Administratorul poate face aceleași schimbări și la personal și la pacienți numai prin introducerea codului de administrare.

Referitor la pacient

Introducerea codului fișei personale a pacientului

Vizualizare fișă

=== APROAPE_GATA ===

Introducere………………………………………………………………………………5

baze de date relaționale……………………………………………………..6

Noțiuni generale ……………………………………………………………………6

Aspecte privind evaluarea performanțelor bazelor de date ………………..7

Măsurări ale performanței………………………………………………………..8

Fișierele ………………………………………………………………………………9

Descrierea modelelor de fișiere ………………………………………………10

Motorul Bazei de Date ……………………………………………………………11

Gruparea Datelor …………………………………………………………………12

Întreținerea Bazelor de date ……………………………………………………13

Crearea copiilor de siguranță …………………………………………………13

Corectarea unei copii de siguranță greșite …………………………………….14

Refacerea în starea curentă a unei baze de date de pe o copie de siguranță….14

Logarea……………………………………………………………………………..15

Crearea punctelor de control …………………………………………………16

Schimbarea locației bazei de date ……………………………………………16

Folosirea uneltelor Bazei de Date ……………………………………………..16

1.9.1. Sfaturi pentru mărirea vitezei de încărcare ……………………………………18

1.10. Optimizarea alocării memoriei …………………………………………………18

1.10.1. Optimizări la nivelul sistemului de operare ………………………………………18

1.10.2. Cache pentru baza de date …………………………………………………….19

ARHITECTURA CLIENT – SERVER ………………………………………………..20

Arhitectura Client – server (date generale) …………………………………20

Modelul „host – computer + terminale” și SGBD multiuser…………………20

Computere personale și SGBD desktop………………………………………21

Particularitățile și avantajele arhitecturii „client – server”……………………21

Arhitectura calculelor în rețea………………………………………………..23

Nivelul clientului ……………………………………………………………..24

Nivelul serverului de aplicații ………………………………………………..25

Web- acces la baze de date ……………………………………………………….25

Generalități……………………………………………………………………25

Schema de lucru………………………………………………………………26

Adresă de rețea………………………………………………………………..27

Mediul de lucru al unui server………………………………………………..27

Scenarii de acces la BD……………………………………………………………28

Conversia conținutului BD în documentele statice……………………………29

Crearea dinamică a documentelor hypertext în baza conținutului BD ………29

Crearea DI pe baza unor SGBD-uri înalt productive prin limbajul SQL……..30

MIJLOACELE DE ELABORARE A BAZEI DE DATE…………………………….32

Web- programare: limbajul PHP…………………………………………………32

Noțiuni de PHP……………………………………………………………….32

Posibilitățile PHP……………………………………………………………………………32

Structura limbajului……………………………………………………………33

Variabile ………………………………………………………………………35

Constante………………………………………………………………………36

Expresii……………………………………………………………………….37

Funcții…………………………………………………………………………41

Referințe……………………………………………………………………….44

Avantajele PHP……………………………………………………………….45

Neajunsurile PHP……………………………………………………………..46

Descrierea limbajului structurat de interpelare SQL……………………….46

Noțiuni generale………………………………………………………………46

Posibilitățile MySQL…………………………………………………………47

MySQL ca soluție a serverului bazei de date…………………………………47

Componența limbajului MySQL………………………………………………49

Operații relaționale. Comenzile de manipulare cu datele…………………….50

Avantajele MySQL……………………………………………………………54

Neajunsurile MySQL…………………………………………………………54

4. DESCRIEREA PROGRAMULUI……………………………………………………..59

4.1. Structura bazei de date………………………………………………………….59

4.2. Schema bloc a programului………………………………………………………60

4.3. Crearea și descrierea tabelelor………………………………………………..61

5. PARTEA ECONOMICĂ A PROIECTULUI………………………………………….69

5.1. Planificarea rețea………………………………………………………………..69

5.2. Evaluarea economică a proiectului……………………………………………79

5.3. Calculul eficienței economice…………………………………………………..82

5.4. Evaluarea eficacității ……………………………………………………………84

6. PROTECȚIA MUNCII………………………………………………………………….85

6.1. Controlul protecției muncii……………………………………………………..86

6.2. Analiza condițiilor de muncă……………………………………………………87

6.3. Cerințele ergonomice la locul de muncă………………………………………89

6.4. Semnalizarea antiincediară……………………………………………………..90

6.5. Calcularea ventilării……………………………………………………………92

ÎNCHEIERE………………………………………………………………………………….93

BIBLIOGRAFIE ……………………………………………………………………………..94

ANEXA 1. Listingul…………………………………………………………………………95

ANEXA 2. Interacțiunea între utilizator și baza de date……………………………124 ANEXA 3. Structura bazei de date………………………………………………………125

ANEXA 4. Schema bloc……………………………………………………………………126

ANEXA 5. Interfețe………………………………………………………………………..127

Introducere

Multe întreprinderi utilizează baze de date electronice (BD) pentru menținerea proceselor de lucru. Deseori sistemul informațional estre destinat pentru unul sau doi utilizatori, executat cu utilizarea mijloacelor de elaborare dbf-orientate: Clipper, dBase, FoxPro, Paradox, Acces. Și, de obicei, se utilizează un șir de baze independente una de alta. Și dacă informația, ce se păstrează în aceste baze, prezintă interes nu numai pentru utilizatorii nemijlociți, ci și pentru difuzarea ei ulterioară se recurge la raporturi generate de bază.

Cu apariția rețelelor locale, cu conectarea lor la rețeaua Internet, cu crearea rețelelor corporative (Intranet), apare posibilitatea ca de la orice loc de muncă al organizației să obții acces la resursa informațională a rețelei. Totuși la încercarea utilizării Bazelor de Date existente apar probleme legate de omogenitatea locurilor de muncă (pentru lansarea interfețelor proprii), de un trafic de rețea mare (deoarece accesul se face direct la fișierele BD), de încărcarea file-serverului și de imposibilitatea lucrului la distanță (de exemplu, lucrătorilor din deplasare). Soluția problemei ar putea fi utilizarea interfeței unice WWW pentru accesul la resursele organizației. Acest lucru și simplele interfețe de utilizator au contribuit la răspîndirea tehnologiilor World Wide Web.

Trebuie de menționat, că sistemul informațional la baza construcției căruia stau web-tehnologiile, în unele cazuri nu numai păstrează posibilitățile aplicației, elaborate conform arhitecturii clasice client-server, dar și le extinde. Mai ales că, utilizarea web-tehnologiilor în clasa dată de sarcini prezintă avantajul său. Cel mai important fiind lipsa necesității de existență și, respectiv, de instalare a aplicațiilor client și lipsa necesității de procurare a licenței pentru aplicațiile front-end, care obligator există în tehnologiile clasice client-server.

Din aceste considerente se pune scopul asigurării www-accesului la Bazele de Date.

1. Baze de date relaționale

1.1. Noțiuni generale

Majoritatea bazelor de date relaționale erau încadrate în sisteme încă din 1980 sau chiar din 1970. Ele au fost concepute pentru o varietate de aplicații care sunt dezvoltate astăzi. Mai târziu, tehnologia RDBMS a fost folosită de mari corporații pentru a produce sisteme unice, centralizate. Softul proprietarilor mergea doar pe puține și scumpe calculatoare.

Producătorii bazelor de date au creat un monopol pentru a stoarce tot ce este posibil din hardware-ul scump și pentru a bloca clienții în soluțiile lor non-standard. Era nevoie de administratori speciali de baze de date pentru a menține aceste sisteme centralizate complexe.

Între timp ritmul rapid de dezvoltare al industriei IT a impus complet noi cerințe. Produsele existente pe piață erau complexe, masive și scump de administrat. Dar vremurile s-au schimbat.

Noile cerințe:

"Trebuie să fie ușor de instalat și ușor de distribuit în cantități mari.
Trebuie sa aibă o administrare fără griji, invizibilă pentru utilizatorul obișnuit."

Mai întâi, s-a creat o imensă piață a computerelor și a software-ului. Apoi au apărut LAN, WAN, și Internet, care au conectat între ele noile și ieftinele calculatoare. Astăzi, piața cere volum și calitate ridicată a soluțiilor.

Pentru firmele de soft, creșterea competiției înseamnă adaptarea la noile cerințe ale pieței volum mare de distribuție cu un cost scăzut. Aceasta cere canale eficiente de distribuție, instalare ușoară a softului și aplicații ușoare. Toate barierele către o producție de masă a aplicațiilor trebuie date jos.

Industria soft este acum concentrată pe pachetele de aplicație standard și producția în volum.

"Trebuie să ne adaptăm standardelor și să rulăm pe toate platformele.
Trebuie să se scaleze și să crească dinamic cu organizația."

Firmele de soft vorbesc despre Internet și tehnologia client/server și își vând tehnologia în concordanță cu paradigmele. Noua arhitectură orientată rețea permite dimensionarea inteligentă dinamic și descentralizată:

libertatea de a alege cea mai convenabilă și ieftină platformă pentru fiecare aplicație;

abilitatea de a dezvolta gradat infrastructura prin înlocuirea vechilor componente cu tehnologie nouă;

abilitatea de a se adapta rapid la schimbări;

Pentru departamentele IT, totuși administrarea acestei arhitecturi este setată pe cereri de nivel înalt. Noile aplicații sunt distribuite peste tot în organizație și desfășurate pe multiple site-uri, multe dintre ele având resurse limitate de administrare. În această eră nouă, desfășurarea eficientă și costurile operaționale scăzute sunt mult mai importante decât cele anterioare.

"Trebuie să înfruntăm provocarea calculelor mobile pentru a oferi
independența organizației în timp și spațiu."

Creșterea puterii computerelor și îmbunătățirea telecomunicațiilor au permis folosirea de dispozitive mobile puternice. Notebooks, PC-urile portabile, și comunicatorii au deschis o nouă lume a libertății și productivității.

Provocarea calculelor mobile, totuși, este făcută pentru a-ți oferi destulă funcționalitate pentru a-l face să meargă în afara biroului. Aceasta nu este numai o chestiune a valabilității aplicațiilor.

Pentru a fi viabile, soluțiile mobile ar trebui să îndeplinească 2 cerințe. Prima, el trebuie să opereze off-line. A doua, ele trebuie să-și sincronizeze datele cu sistemul principal chiar dacă timpul on-line și calitatea conexiunilor sunt limitate.

Pentru o soluție completă, un compact dar robust DBMS are nevoie de: trebuie să asigure integritatea datelor chiar dacă sunt procesate în misiuni critice cu resurse mobile limitate. Adevărata provocare în calculele mobile este furnizarea unei soluții viabile pentru împărțirea datelor.

Accelerarea competiției a întins tehnologia convențională RDBMS către limite prin crearea unui strat compus software. Ca rezultat, producția predominantă pe piață era mare, și scump de gestionat. Cerințele de hardware erau mari și costurile administrării importante. Aceste soluții erau mai apropiate de vechile soluții centralizate din întreprinderi rulând în centrele de calcul, unde era nevoie de administratori specializați de baze de date.

Dar acum industria soft dezvoltă pachete de aplicații pentru a fi distribuite în nenumărate copii. În plus, organizațiile dezvoltă nu numai soluții centralizate dar și un volum mare de aplicații mobile și distribuite.

În această eră nouă, aplicațiile sunt din belșug, iar distribuția eficienta și costurile operaționale scăzute sunt mult mai importante decât precedentele. Viitorul stă în flexibilitatea și deschiderea componentelor bazelor de date ce combină puterea robustă cu dezvoltarea și întreținerea simplă. Această varietate a caracteristicilor trebuie să fie proiectate în sistem încă de la început — ele nu pot fi implementate prin aducerea unor straturi software.

Vremurile s-au schimbat. Ai nevoie de soluții noi.

Evoluția nu înseamnă supraviețuirea celui mai mare. Viitorul stă în fiabilitatea și deschiderea componentelor ce combină puterea robustă cu dezvoltarea și întreținerea simplă.

1.2. Aspecte privind evaluarea performanțelor bazelor de date

Pe măsură ce tehnologia evoluează, volumul de informații de gestionat devine tot mai mare. Informația este deja privită altfel decât acum 10 ani. Ea trebuie să devină disponibilă cât mai complet și mai rapid cu putință. Acum orice utilizator de Internet poate asculta melodii din Japonia și în același timp sa-și evalueze acțiunile la bursa din New York fără sa-și întrerupă cumpărăturile dintr-un magazin on-line din Austria. Pentru el este ceva firesc. Mai mult, pentru el este supărător dacă magazinul on-line are nevoie de 5 minute pentru a găsi sortimentul cerut. Iar un client nemulțumit este un client în minus.

În spatele acestor programe stau ascunse bazele de date. Mai precis sistemele de gestiune a bazelor de date. Ele trebuie sa fie fiabile. Ele trebuie sa fie puternice. Ele trebuie sa fie rapide.

Aproape orice programator poate construi un sistem de gestiune a bazelor de date. Dar pentru ca acest sistem să reziste concurenței celorlalte el trebuie să aibă niște performanțe deosebite. Iar acest nivel de performanță nu poate fi atins decât în urma unei analize și proiectări serioase.

1.3. Măsurări ale performanței

Unul din aspectele foarte importante ale performanței unei baze de date este viteza de răspuns la o cerere din partea unui utilizator. Această cerere pentru a putea fi satisfăcută va parcurge mai multe etape de interpretare și execuție.

Fiecare din aceste etape poate suporta una sau mai multe operații de optimizare, cum ar fi:

optimizarea frazelor de interogare;

optimizarea tranzacțiilor;

optimizarea fișierelor și a operațiilor de intrare/ieșire în general, etc.

În cele ce urmează vom analiza câteva aspecte privind sistemele de organizare a fișierelor. Orice baza de date are ca ultim nivel de organizare, nivelul sistemului de fișiere. Acesta se află de regulă pe un suport fizic mult mai lent decât memoria RAM și prin urmare timpul de răspuns al bazei de date este influențat substanțial de timpul în care se efectuează operațiile pe fișiere.

Putem considera că există patru tipuri de operații efectuate asupra bazelor de date:

construcția colecției de date;

întreținerea colecției de date;

cererea de date din colecție;

reducerea unor mari cantități de date la o formă ușor de folosit;

Legat de aceste categorii de operații putem evidenția 7 parametrii ce caracterizează un sistem de gestiune a bazelor de date din punctul de vedere al sistemului de fișiere:

memoria necesară unei înregistrări;

timpul necesar aducerii unei înregistrări oarecare din fișier în memorie;

timpul obținerii următoarei înregistrări;

timpul de modificare prin înserare a unei înregistrări;

timpul asociat modificării prin schimbarea unei înregistrări;

timpul necesar examinării întregii baze de date;

timpul necesar reorganizării bazei de date;

1.4. Fișierele

Sistemul de fișiere constituie locul unde se memorează pe suport fizic fișierele sistem și cele utilizator. Sistemul de fișiere este caracterizat prin trei aspecte:

structura ierarhică;

independența ridicată față de hardware;

mare flexibilitate.

Structura ierarhică este organizată sub forma unui arbore cu un director rădăcină (/). Directorul rădăcină poate conține fișiere, legături sau alte directoare, numite subdirectoare. Subdirectoarele sunt noduri în arbore, iar fișierele sunt frunze. Independența față de hardware rezultă din faptul că fișierele sunt privite ca o succesiune de octeți. Flexibilitatea se bazează pe posibilitatea de a monta sau demonta, la orice nivel în ierarhia de fișiere, noi structuri arborescente de directoare și fișiere.

Structura arborescenta a sistemului de fișiere oferă utilizatorului posibilitatea de a crea și gestiona un număr mare de fișiere.

Principalele particularități ale sistemului de fișiere sunt:

un fișier frunză poate fi legat la mai multe directoare chiar dacă acesta nu se află la același nivel în arbore;

fiecare director conține cel puțin două intrări: '.', care referă directorul curent si '..', care referă directorul superior (numit și părinte);

orice director este legat la nivelul superior printr-o singură legătură aceasta fiind '..'. Numele unui fișier poate fi de orice lungime (versiunile vechi au limitat numele unui fișier la maxim 14 caractere) și poate conține orice caractere, mai puțin caracterele slash (/) și caracterul NULL (marcajul de sfârșit de șir).

Caracterul '/' e folosit pe post de separator de nume de fișiere, iar dacă se află pe prima poziție indică directorul rădăcină.

Accesul la un fișier se face prin indicarea poziției lui în arbore. Pentru aceasta se indică calea spre acel fișier. O secvență de zero sau mai multe nume separate prin '/', opțional prefixată de caracterul '/', formează un nume de cale. Calea precizată din directorul rădăcină se numește cale completă, iar calea precizată din directorul curent se numește cale relativă.

Există două tipuri de dispozitive pentru fișiere speciale: în mod bloc și în mod caracter. Cele în mod bloc conțin un vector de blocuri de dimensiune fixă, iar tampoanele nucleu sunt folosite ca și cache pentru creșterea vitezei operațiilor de I/E. Cele în mod caracter realizează operațiile de I/E la nivel de caracter sau la nivel de pistă.

Același dispozitiv fizic poate deține fișiere speciale atât în mod caracter cât și în mod bloc. Fișierele ordinare și directoarele sunt accesate de sistemul de fișiere printr-un fișier special în mod bloc, pentru a beneficia de avantajele tampoanelor cache. Pe de altă parte, unele aplicații (baze de date) necesită un acces direct.

Din punct de vedere utilizator nu există nici o diferență între lucrul cu fișiere ordinare și cele speciale.

Fiecare fișier conține:

1. Tipul fișierului.

Drepturile de acces la nivel de utilizator, grup si alții.

Timpul ultimului acces și ultimei modificări, data și ora ultimei modificări efectuate asupra

lui.

Numărul de legături sau contorul de legături.

Adresele disk ale sectoarelor ce conțin datele fișierului.

6. Lungimea fișierului în octeți.

Vom prezenta comparativ câteva tipuri de fișiere arătând performanțele fiecăruia:

1. fișierul de tip stivă

2. fișierul secvențial

3. fișierul secvențial indexat

4. fișierul indexat

5. fișierul multi-inel

Bineînțeles că acestea nu sunt toate modurile posibile de organizare a datelor în fișiere dar analiza lor ne furnizează informații importante despre problemele care apar în cadrul bazelor de date.

1.4.1. Descrierea modelelor de fișiere

Fișierul de tip Stivă

În cazul acestei organizări datele sunt colectate în ordinea sosirii; nu sunt analizate, categorisite sau normalizate. În cel mai bun caz se poate considera că sunt în ordine cronologică. Înregistrările sunt de lungime variabilă și este posibil să nu aibă același set de valori.

Fișierul de tip Secvențial

Această organizare aduce două schimbări structurale fată de fișierul stivă. Prima îmbunătățire este faptul că înregistrările sunt ordonate intr-o secvență specifică. A doua îmbunătățire este aceea că fiecare înregistrare conține aceleași câmpuri și în aceeași ordine, de regula pe aceleași poziții. Acest fapt elimină necesitatea de a reține numele atributelor împreună cu valorile lor pentru fiecare înregistrare.

De multe ori, se mai introduce un câmp suplimentar cu rol de identificator unic pentru fiecare înregistrare. Deși acest lucru mărește eficacitatea multor prelucrări tabelare, el scade drastic flexibilitatea structurii.

Fișierul de tip Secvențial Indexat

Arhitectura fișierului secvențial indexat încearcă să preîntâmpine problemele accesului la înregistrări moștenite de la fișierul secvențial, fără a pierde cîștigurile și simplicitatea adusă de el. Un lucru în plus îl constituie un index asociat fișierului pentru a asigura un acces aleator mai rapid. O altă facilitate constă în existența unui mijloc rapid de a adăuga o nouă înregistrare în fișier.

Fișierul de tip Indexat

Atunci când nu este necesară secvențialitatea fizica a înregistrărilor, pentru a asigura un acces serial eficient se recurge la fișiere indexate. Într-un fișier indexat înregistrările sunt accesate numai prin unul sau mai multe indexe. Nu există nici o restricție cu privire la locul unde se află o înregistrare atâta timp cât există într-un index un pointer către ea. Prin aceasta se câștigă foarte mult din flexibilitatea pierdută de structurile secvențiale.

Fișierul de tip Multi-Inel

Modelele anterioare se preocupau în special de problema găsirii unei anumite înregistrări. Modelul Multi-Inel a fost special conceput pentru a asigura procesarea eficientă a seturilor de înregistrări. O anume înregistrare poate face parte din mai multe inele în același timp. Acest model, deși este destul de complex este folosit în multe sisteme de baze de date. .

Bineînțeles, inelele se pot îmbrăca pe oricâte nivele. Acest model este net superior celorlalte în momentul în care se dorește accesarea înregistrărilor după o categorie corespunzătoare unui inel.

1.5. Motorul Bazei de Date

Motorul Bazei de Date a fost conceput și implementat pentru a da cea mai bună performanță posibilă utilizând eficient serviciile și resursele sistemului de operare. Motorul Bazei de Date stochează datele și le recuperează din fișierele Bazei de Date.

Motorul Bazei de Date furnizează:

o adevărată arhitectură SMP multi-thread și procesare paralelă;

o gestiune inteligentă a tranzacțiilor la nivel de linie;

o multiversiune ce oferă vizualizarea datelor fără opreliști;

o permanentă identitate pentru referințe obiect post-relaționale eficiente;

lungimi variabile de coloane;

tranzacții inteligente pentru sincronizarea mobilă a datelor;

recuperare automată din rulare;

replicare în așteptare opțională;

un mic spațiu pornind de la 300 kB RAM și spațiul pe disk.

Motorul Bazei de Date oferă scalabilitate de la mici dispozitive mobile până la medii de multiprocesare extinse.

1.6. Gruparea Datelor

Sistemul de indexare al Bazei de Date este folosit pentru a stoca atât cheile secundare cât și cele primare care conțin, deasemenea, valorile datelor inițiale. Baza de Date trebuie să fie capabilă să grupeze datele ușor, automat și eficient. Gruparea este determinată de definirea cheii primare pentru o tabelă. Cheia primară mai poate fi numită cheie de grupare pentru că ea grupează fizic șirurile de date în ordinea dată de index.

Aranjarea coloanelor folosite pentru grupare se numește șir de referință. Șirul de referință identifică doar șirul de date. Dacă coloanele, definite de utilizator pentru cheia de grupare, nu sunt unice, sistemul garantează că referința este unică adăugând un număr de șir unic coloanelor de referință. Șirul de referință mai poate fi numit șir identificator.

Șirul de referință poate fi orice combinație de una sau mai multe coloane. Fiecare tabela are o aranjare diferită a coloanelor care sunt folosite pentru o referință unică a șirurilor.

Valorile cheilor secundare fac referire la șirul de date folosind șirul de referință. Acesta mai este numit referință a cheii primare. Șirul de date este căutat de cheia de grupare folosind șirul de referință ca un argument de căutare. Oricum, dacă toate datele cerute sunt găsite de către cheia secundară, nu este făcută nici o căutare după cheia de grupare. Gruparea este determinată prin definirea unei chei primare a tabelei.

Tehnici de Compresie a Indecșilor

Pentru a salva spațiu în arborele de indecși, sunt folosite două metode când se încarcă valoarea cheilor. Mai întâi, doar informația care diferențiază valoarea cheii de anterioara valoare a cheii este salvată. Valorile cheilor sunt presupuse a fi prefix-compresate. Apoi, în nivelele superioare ale arborilor de indecși, marginile valorii cheie sunt trunchiate de la sfârșit, adică sunt sufix-compresate.

Controlul Concurent

Modelul concurent primar al Bazei de Date este o metodă de control concurent optimală și care oferă multiversiune. Într-un scenariu cu mai multe versiuni, fiecare tranzacție are o imagine consistentă și neschimbată a bazei de date care rămâne la fel ca atunci când începea tranzacția. Dacă vreo dată în această imagine este modificată de altă tranzacție, o nouă versiune a șirului este generată în timp ca vechea versiune a datei este vizibila vechii tranzacții. Metoda controlului concurent optimal oferă următoarele avantaje:

Datele sunt întotdeauna disponibile utilizatorilor deoarece nu se folosesc blocaje.

Utilizatorii pot naviga printre datele afișate în diferite liste și meniuri și pot alege să modifice orice șir după voință.

Accesul la baza de date este îmbunătățit de când nu mai este posibil deadlock-ul.

1.7. Întreținerea Bazelor de Date

Privind securitatea datelor și întreținerea bazelor de date putem enumera câteva sfaturi:

crearea copiilor de siguranță;

refacerea de pe copiile de siguranță;

recuperarea din situații de ieșiri forțate;

logarea;

crearea punctelor de control;

închiderea si deschiderea bazelor de date;

schimbarea locației bazelor de date;

rularea mai multor Baze de Date pe același calculator;

întroducerea unor comenzi cu cronometru.

1.7.1. Crearea copiilor de siguranță

Copiile de siguranță se fac pentru a fi siguri de informațiile din fișierele bazei de date. Dacă ați pierdut fișierele din baza dvs. de date datorită unei căderi a sistemului, puteți să vă continuați lucrul cu baza de date de pe copiile de siguranță.

Puteți să faceți copii de siguranță manual, sau puteți automatiza aceste operații astfel încât să fie făcute conform unui orar stabilit. Veți avea nevoie de spațiu pentru baza de date si fișierele de logare.

Crearea manuala a unei copii de siguranța:

În orice bază de date trebuie să conțină în meniu sau să fie butonul cu specificația:

Save as…

Întroduceți directorul în care doriți sa fie create copiile de siguranță sau folosiți directorul sugerat, apăsați butonul OK.

După creare, copiați fișierele continuând copiile de siguranță pe banda magnetică folosind programe de protecție împotriva căderilor discului. Înainte de a începe procesul de creare a copiilor de siguranță, se creează automat un punct de control. Acesta garantează faptul ca baza de date de pe copiile de siguranță va corespunde cu originalul începând din momentul în care a pornit procesul de copiere. În directorul corespunzător copiilor de siguranță se vor copia următoarele fișiere:

fișierele bazei de date;

fișierul de configurare;

fișierele de logare modificate sau create după crearea precedentelor copii de siguranță (parametrul Backup (*.log, sau alte extensii depinde de baza de date) este setat yes implicit ).

Fișierele de logare care nu sînt necesare se șterg din directorul original după realizarea copiilor de siguranță.

1.7.2. Corectarea unei copii de siguranță greșite

În cazul în care crearea copiilor de siguranță a eșuat, un mesaj de eroare apare în listă. Corectați cauza erorii și încercați din nou. Cele mai probabile cauze de eroare sunt:

mediul pe care se face salvarea copiilor nu dispune de suficient spațiu;

directorul în care se realizează salvarea nu există;

un director dedicat bazei de date este ales și ca director de salvare a copiilor de siguranța.

Refacerea de pe copiile de siguranță

Există doua alternative de refacere de pe o copie de siguranță. Puteți, fie să: a) vă întoarceți la starea în care a fost creată copia, sau b) să refaceți în starea curentă o copie a bazei de date de pe o copie de siguranță, folosind fișierele de logare și adăugând datele înserate, sau modificate după momentul realizării copiei de siguranță

Întoarcerea la starea în care a fost creată copia de siguranță

Închideți Baza de date, fără sa salvați lucrul d-stră și copia de siguranță va rămâne aceeași.

Ștergeți toate fișierele de logare din directorul de logare. Numele implicite ale fișierelor de logare sînt cu extensia *1.log, *2.log, etc.

Copiați fișierele bazei de date din directorul destinat copiilor de siguranță în directorul destinat bazei de date.

Această metodă nu permite nici o recuperare, deoarece nu exista nici un fișier de logare.

1.7.3. Refacerea in starea curenta a unei baze de date de pe o copie de siguranța

Închideți Baza de date, în cazul în care rulează.

Copiați fișierele bazei de date din directorul destinat copiilor de siguranța în directorul destinat bazei de date.

Copiați fișierele de logare din directorul destinat copiilor de siguranță în directorul destinat fișierelor de logare. Dacă există deja fișiere de logare cu același nume, nu le înlocuiți.

Porniți din nou Baza de Date Baza de date va folosi automat fișierele de logare pentru a porni recuperarea.

Recuperarea din situații de ieșiri forțate

Dacă Baza de Date a fost închisă anormal ( dacă nu a fost închisă folosind procedurile descrise mai sus), atunci Baza de Date va folosi automat fișierele de logare pentru a realiza recuperarea, chiar de la următoarea pornire a Bazei de Date. Nu este nevoie de nici o procedură de administrare pentru a porni această recuperare.

1.8. Logarea

Logarea garantează că nici o operație validată nu se pierde în cazul unei căderi a sistemului. Când o operație se execută în Baza de Date, aceasta operație se salvează automat, sau face-ti singuri salvarea într-un fișier de logare. Acest fișier se folosește pentru recuperare în cazul în care serverul este închis anormal. O operație de creare a copiilor de siguranță va copia fișierele bazei de date și cele de logare în directorul destinat copiilor de siguranță și va șterge fișierele de logare din directorul destinat bazei de date. Fișierul de logare poate fi scris folosind diverse metode. Aceste metode diferă din punctul de vedere al vitezei și siguranței pe care le oferă. Metoda implicită ping-pong este recomandată în cele mai multe cazuri.

Alegerea unuia dintre aceste cazuri depinde de mediul pe care se stochează fișierul de logare și de nivelul de securitate dorit. Metodele de logare disponibile sunt:

• Metoda Ping-pong. Această metodă folosește ultimele două blocuri alocate de pe disk din fișierul de logare pentru a scrie ultima și penultima versiune a aceluiași bloc logic incomplet de pe disk. Metoda ping-pong permută între aceste două blocuri până când unul dintre ele devine plin.

• Metoda Write-once. Dacă o înregistrare incompleta este completată automat cu spații, și apoi este scrisa pe disc. Această metodă se recomandă atunci când mediul de stocare este, de exemplu, o banda magnetică sau un disk WORM, și când rata de modificare este mică sau când există un singur client care face modificări la un moment dat. Dacă Baza de Date rulează în mod mono-threading, această metodă nu se recomandă. Când blocul a fost completat, este scris pe disk. Dacă expiră timpul de așteptare, blocul este completat cu înregistrări goale. Acest algoritm este cel mai eficient în situația în care rata de modificare este foarte mare și exista multi-threading.

• Metoda Overwriting. Această metodă rescrie blocurile incomplete la fiecare validare până când blocul devine plin. Se poate folosi atunci când ne putem permite să pierdem date din ultimul bloc de pe disk al fișierului de logare.

Pentru motive de securitate și de eficiență, este o idee buna să păstrați fișierele bazei de date și cele de logare pe discuri fizice diferite. Dacă unul dintre discuri se defectează, veți pierde fie fișierele bazei de date, fie pe cele de logare, dar nu pe amândouă.

1.8.1. Crearea punctelor de control

Punctele de control se folosesc pentru a memora o anumită stare a bazei de date în fișierul bazei de date. Se folosesc pentru a mări viteza recuperărilor după căderi ale sistemului. În procesul de recuperare, baza de date va începe recuperarea tranzacțiilor de la ultimul punct de control. Cu cât a trecut mai mult timp de la crearea ultimului punct de control, cu atât mai multe operații de recuperare din fișierele de logare se vor efectua. Pentru a mari viteza cu care se fac recuperările, punctele de control trebuie să fie create frecvent. De asemenea, viteza cu care se creează un punct de control depinde de cantitatea de cache pe care o folosește baza de date; cu cât se folosește mai mult cache, cu atât mai mult va dura crearea punctului de control. Aceste aspecte trebuie luate în considerare atunci când se decide frecvența punctelor de control.

Înainte și după o operație de amploare cu baza de date, puteți dori crearea unui punct de control în mod manual.

Închiderea bazei de date

După închiderea bazei de date, sînt acceptate numai după ce sa salvat tot, apoi ieșim din Baza de Date.

1.8.2. Schimbarea locației bazei de date

Schimbarea locației bazei de date constă în copierea unui fișier dintr-un director în altul. Pentru a copia un fișier baza de date, trebuie să închideți Baza de Date pentru a permite sistemului de operare să deblocheze fișierele bazei de date.

• Verificați dacă Baza de Date nu rulează.

• Copiați fișierele bazei de date și pe cele de logare în directorul destinație. Copiați fișierul(ele) ales(e) în directorul destinație. Verificați dacă directoarele corespunzătoare fișierelor bazei de date, fișierelor de logare și copiilor de siguranță sînt definite corect.

• Porniți Baza de Date folosind directorul destinație ca director curent de lucru.

1.9. Folosirea uneltelor Bazei de Date

Nu toate uneltele Baze de Date sînt în mod obligatoriu incluse în distribuția standard a produsului, iar disponibilitatea lor pentru diverse platforme este limitată. Pentru includerea unor unelte a bazei de date în meniu sau ca ferestre aparte, trebuie sau indicate la instalarea bazei de date, sau întri în meniu în: Options și le activezi pe care-ti trebuie.

Fișier de control

Fișierul de control conține informații despre structura fișierului de importat. El conține următoarele informații:

numele fișierului;

formatul fișierului;

mărimea fișierului;

data creării fișierului s.a.

Formatul fișierului de control este oarecum similar cu structurile de control pe care le găsim în alte sisteme de administrare a bazelor de date, precum Oracle, DB/2, SQL, e.t.c.

Fișierul de importat

Fișierul de importat trebuie să fie de tip ASCII. El trebuie să conțină date fie în format fix, fie în format delimitat.

În format fix, înregistrările de date au un format fix, și câmpurile de date din cadrul înregistrărilor au o poziție și o lungime fixă.

În format delimitat, înregistrările de date au o lungime variabilă. Fiecare câmp și înregistrare de date este separat de următorul printr-un caracter delimitator, precum o virgulă.

Câmpurile de date din cadrul înregistrărilor pot fi intr-o ordine oarecare, specificată prin fișierul de control. Datele din fișierul de importat trebuie sa fie de același tip.

Fișierul de logare a mesajelor

În timpul încărcării, Baza de Date creează sau trebuie sa creeze un fișier de logare conținând următoarele informații:

data și timpul încărcării;

statistici privind încărcarea, precum numărul de rânduri încărcate cu succes, numărul de rânduri greșit încărcate și timpul de încărcare, dacă a fost specificat printr-o opțiune;

eventualele mesaje de eroare care pot apărea;

Fișierul de configurare

Baza de Date nu are nevoie de un fișier de configurare.

Sintaxa fișierului de control

Sintaxa fișierului de control are următoarele caracteristici:

cuvintele cheie trebuie întroduse cu litere mari;

comentariile trebuie incluse folosind notația standard SQL dublu-slash ( – ) pentru comentarii;

declarațiile pot continua în alt rând, rândurile noi pot începe cu orice cuvânt.

Cuvintele rezervate Bazei de Date trebuie incluse între ghilimele dacă sînt folosite pe post de obiecte ale dicționarului de date, precum nume de tabele și coloane. Următorul tabel descrie sintaxa completa a fișierului de control:

element de sintaxa;

control-file options;

load-data-part ;

into-table-part (Into-table-part se folosește pentru a defini numele tabelei și coloanelor în care se inserează datele);

hex_literal;

column_list;

column;

datatype_spec;

1.9.1. Sfaturi pentru mărirea vitezei de încărcare

Următoarele sfaturi pot fi folosite pentru a vă asigura de faptul că încărcarea se realizează cu maxim de performanta:

• Mai rapid datele sînt încărcate direct în baza de date, decât din alt directoriu.

• Dacă se folosește varianta pentru rețea, este mai rapid să ne conectăm local, și să nu încărcăm datele direct de pe rețea.

• Mărirea numărului de înregistrări validate într-un singur batch mărește viteza.

Implicit, validarea se face pentru fiecare înregistrare.

1.10. Optimizarea alocării memoriei

1.10.1. Optimizări la nivelul sistemului de operare.

Sistemul dvs. de operare poate memora informații în:

memorie reală;

memorie virtuală;

mediu de stocare extern;

disk;

Sistemul dvs. de operare poate muta informații dintr-o locație în alta. În funcție de sistemul de operare, această mutare se numește paginare sau swapping. Multe sisteme de operare fac paginare sau swap pentru a putea utiliza cantități mari de informații care nu ar intra în memoria reală. Această operație cere timp. Paginarea excesivă sau swapping-ul excesiv pot reduce semnificativ performanțele sistemului dvs. de operare și indică faptul că memoria totală a sistemului ar putea să nu fie atât de mare pentru a cuprinde tot ce trebuie să se aloce. Ar trebui ca fie să măriți memoria totală fie să micșorați memoria cache alocată pentru baza de date .

1.10.2. Cache pentru baza de date

Informațiile folosite de Baza de Date sunt stocate în memorie sau pe disk. Deoarece timpul de acces la memorie e mai mic decât timpul de acces la disk, ar fi de preferat ca cererile de date să fie satisfăcute prin accesarea memoriei prin accesarea disk-ului.

Elementul de baza al sistemului de gestiune a memoriei pentru serverul de baze de date e o colecție de buffere de mărime egală. Mărimea bufferelor de memorie și numărul lor pot fi configurate pentru satisfacerea nevoilor diferitelor medii de aplicații.

Cache-ul bazei de date utilizează memorie liberă pentru a păstra informația citită de pe hard disk. Când o aplicație cere din nou aceste informații, datele sunt citite din memorie în loc sa fie citite de pe hard disk. Valoarea predefinită a cache-ului depinde de platforma utilizată și poate fi modificată prin intermediul parametrului CacheSize. E recomandată mărirea acestei valori dacă are loc un acces concurent la baza de date.

Următoarele valori pot fi folosite ca punct de plecare:

un server dedicat cu 16 MB RAM: CacheSize 4 MB;

un server dedicat cu 32 MB RAM: CacheSize 10 MB;

un server dedicat cu 64 MB RAM: CacheSize 30 MB.

2. Arhitectura client-server

2.1. Arhitectura client-server (date generale)

Mijloacele moderne de elaborare a sistemelor informaționale sunt orientate spre susținerea largă a diferitor SGBD-uri (sisteme de gestiune a bazelor de date), atît desktop, cît și de server. Dar un sistem informațional eficient și sigur multinivel, de regulă este elaborat în arhitectura client/server.

2.1.1. Modelul “host-computer + terminale” și SGBD multiuser

Pe timpuri, la proiectarea sistemelor informaționale cel mai des era utilizat modelul “host-computer + terminal” realizat în bază de mainframe (de exemplu, IBM-360/370) sau în bază de mini-MEC (mașini electronice de calcul, de exemplu PDP-11). Un specific al unui astfel de sistem era o “neintelectualitate” deplină a terminalelor, funcționarea cărora era dirijată de un host-computer (fig. 1).

Fig. 1. Modelul “host-computer + terminale”

Această metodă, destul de progresistă pe atunci, avea și avantajele ei. În primul rând, utilizatorii acestor sisteme aveau posibilitatea de a partaja diferite resurse ale host-computerului (memoria operativă, procesorul) și dispozitivele periferice (printere, dispozitive de introducere de pe banda magnetică și de pe discurile flexibile, discuri de stocare ș.a.) care erau destul de scumpe. Desigur, sistemele operative utilizate mențineau un regim multitasking și multiuser.

În al doilea rând, centralizarea resurselor și ale dispozitivelor facilita exploatarea și micșora costul sumar al unui astfel de sistem.

Neajunsurile unei astfel de arhitecturi constau în mare parte în faptul că utilizatorul era în dependență totală de administratorul host-computerului. Practic nu exista posibilitatea de a modifica mediul de lucru după necesitate – de a se asigura individual cu programe necesare , inclusiv redactori de text, compilatori și SGBD.

2.1.2. Computere personale și SGBD desktop

Neajunsul acestor sisteme, a adus la dezvoltarea rapidă (care continuă și în prezent) a industriei calculatoarelor personale. Odată cu prețul redus și simplitatea exploatării, o particularitate atrăgătoare a sistemelor informaționale desktop a devenit așa-numita personalizare a mediului de lucru, când utilizatorul putea alege pentru sine instrumentele de lucru necesare lui care nu s-au lăsat așteptate pe piața produselor software. Anume în această perioadă au apărut tabelele electronice și SGBD-urile desktop (dBase, FoxBase, Clipper, Paradox și altele).

Următoarea etapă de dezvoltare a arhitecturii sistemelor informaționale a fost apariția versiunilor de rețea a SGBD-urilor, care permiteau de a realiza lucrul multiuser cu date comune în rețeaua locală. Această metodă a îmbinat în sine atît comoditatea personalizării mediului utilizator și simplitatea exploatării, cît și avantajele legate de noile posibilități de partajare a periferiei (în mod esențial a printerilor și discurilor de rețea, care păstrează date colective). E remarcabil, că majoritatea sistemelor informaționale, real exploatate astăzi, au o astfel de arhitectură și în cazul când numărul utilizatorilor sistemului este mic, volumul datelor și a numărului de tabele nu este mare, nivelul cerințelor de securitate a datelor este jos utilizarea metodei se justifică (fig. 2).

Neajunsul utilizării versiunilor de rețea a SGBD desktop, se evidențiază în procesul exploatării a sistemului informațional, când se mărește volumul datelor și numărul utilizatorilor. De obicei, în primul rând se observă micșorarea productivității aplicațiilor, deși apar și alte perturbări în lucru (de exemplu, pierderea indecșilor, încălcarea integrității). Cauzele se ascund în concepția păstrării datelor colective în fișierele de pe server și concentrării prelucrării datelor la aplicația utilizatorului, care se transmit prin rețea de la serverul de fișiere către calculatorul utilizatorului. Deaceea, în cazul unui mare număr de date și de utilizatori, și prin existența cererilor multitabelare, capacitatea rețelei de transfer a datelor poate să nu satisfacă cerințele formulate legate cu exploatarea unui astfel de sistem informațional.

Traficul crescut a rețelei –nu este unica neplăcere care deranjează administratorul și utilizatorul al unui astfel de sistem informațional. Un caz destul de des întîlnit este încălcarea integrității datelor.

Cum putem evita astfel de neplăceri? Răspunsul vine de la sine: de reconceput arhitectura sistemului informațional și de a o schimba dacă în viitor se așteaptă astfel de precedente. Cea mai buna hotărîre în acest caz va fi folosirea unui server SGBD.

2.1.3. Particularitățile și avantajele arhitecturii “client/server”

Arhitectura client/server poate fi privită ca o reîntoarcere la modelul “host-computer + terminal”, așa cum nucleul acestui sistem este serverul bazelor de date, prezentînd prin sine o aplicație care efectuează un set de acțiuni de administrare a datelor – îndeplinirea interpelărilor, păstrarea și asigurarea copiei de rezervă a datelor, urmărirea integrității, controlul drepturilor și privilegiilor utilizatorilor (fig. 3).

Unul din principalele avantaje este micșorarea traficului de rețea la îndeplinirea cererilor, deoarece interpelările sunt compilate, optimizate și executate la server, clientului fiind transmise doar rezultatele.

Al doilea avantaj al arhitecturii client-server – posibilitatea de păstrare a bussines- regulelor pe server, ce permite de a evita dublarea codurilor, în diferite aplicații, dar care folosesc aceleași baze de date. Pentru descrierea bussines-regulelor de server în cazuri tipice există instrumente comode, așa numitele CASE–mijloace (CASE – Computer Aided System Enginireering), care permit de a descrie asemenea drepturi(reguli) și a crea obiectele bazelor de date (indici, triggeri), practic desenînd cu mouse-ul legăturile între tabele fără nici un fel de programare. În acest caz, va fi înlăturată o parte însemnată din codul aplicației clientului. Se remarcă, că o parte a codului, legată de prelucrarea datelor, la fel poate fi realizată în formă de proceduri păstrate (stored proc) a serverului, ce permite și mai mult “de a ușura” aplicația client, ceea ce însemnă că cerințele către stații pot să fie mai puțin mari. Aceasta în final scade din costul sistemului informațional chiar și la folosirea SGBD de server scump și a serverului bazelor de date performant.

În afară de posibilitățile enumerate, SGBD-serverele contemporane dispun de multe mijloace de gestionare cu privilegiile de utilizator și cu drepturile de acces către diferite obiecte ale bazelor de date. De regulă, în baze de date se stochează informația despre utilizatorii ei, parolele și privilegiile lor, și fiecare obiect al bazei de date se referă la un anumit utilizator. Proprietarul obiectului poate oferi la alți utilizatori dreptul, printr-o metodă sau alta, de a folosi obiectul

Unele SGBD-servere, mențin așa numitele roluri care se prezintă ca o înbinare a drepturilor la accesul către obiectele bazei de date. În sensul că unii useri ai sistemului au accesul de introducere a datelor, pe cînd alții doar de citire, deși spre alte tabele s-ar putea să aibă acces direct cu un privilegiu mai înalt.

Un SGBD de server modern dispune de largi posibilități de asigurare a copiei de rezervă a datelor și arhivării lor și de optimizare a interpelărilor efectuate. De asemenea, poate prezenta posibilitatea prelucrării paralele a datelor, mai ales în cazul folosirii calculatoarelor multiprocesorale, în calitate de server al bazelor de date.

Așadar, sistemul informațional client/server constă, în cel mai simplu caz, din trei componente de bază:

serverul bazelor de date, care administrează accesul, protecția și copierea rezervei, care asigură integritatea datelor în corespundere bussines-regulilor și, cel mai important care îndeplinește interpelările clientului.

clientul, care se prezintă ca interfață cu utilizatorul, și care îndeplinește logica aplicației, controlează accesibilitatea spre date și care transmit interpelările către server și primesc răspunsurile de la el.

rețea și pachetul de programe de comunicare ce mențin interacțiunea între client și server prin protocoalele de rețea.

2.2. Arhitectura calculelor în rețea

Corporația Apache ajută organizațiilor de a dirija cu arhiva sa informațională în ultimii douăzeci de ani și are posibilități unicale în domeniul calculelor în rețea. Apache propune in cea mai mare măsură o platformă de rețea sigură, de orice dimensiune, dar suportă o tot mai mare nesatisfacere de computere personale. Complexitatea și prețul ridicat al computerelor personale limitează domeniile de desfacere produselor program al clientului, ce permite de a se adresa la servere sale.

Corporația Apache a propus conceptul său de calcule în rețea în anul 1996, pentru a îndestula necesitățile partenerilor săi, ce privește micșorarea cheltuielilor administrative, ridicarea siguranței și integrării sistemelor, asigurarea accesului ieftin la date.

Arhitectura calculelor în rețea (NCA) Apache – este o filozofie, eticheta de firmă și programul pentru elaborarea produselor în scopul realizării calculelor în rețea. Ea nu depinde de careva tip concret de calculator sau unui echipament client. Ea este bazată pe așa tehnologii Internet, cum este Java, CORBA și Enterprise JavaBeans.

Trecerea de la calcule cu două trepte la calcule cu trei trepte. În modelul tradițional a calculelor în rețea cu două nivele cum este client – server, clientul poartă răspunderea atît de interfața utilizatorului cît și de logica programabilă. Aplicarea modelului cu două nivele este legat de necesitatea realizării algoritmilor complicați și calculelor în calculatorul de pe masa utilizatorului.

NCA – este de fapt o arhitectură de trei nivele cu prelucrare separată, care este bazată pe standarde deschise și este construită pe programe server a produsului Apache. Interfața utilizatorului logic și fizic este separat de la logica adițională, ce funcționează pe serverul de aplicații “nivelului mijlociu”.

În funcție de client poate servi orice echipament, și nu doar un computer personal. Clientul a calculelor de rețea poate servi orice, ce este în stare să execute cel puțin operatorii HTML. Ca client poate servi și un echipament mobil.

Logica adițională se transferă pe nivelul din mijloc. La nivelul din mijloc se află sau Web – serverul, sau serverul aplicațiilor. Nivelul din mijloc servește un nivel de abstractizare pentru serviciului de date și serviciului de sistem.

2.2.1. Nivelul clientului

Nivelul clientului trebuie să prezintă o interfață comodă a utilizatorului ( UI – user interface) și să nu fie complicată pentru a o utiliza. UI ideal trebuie să ofere texte de ajutor, corect să reacționeze la acțiunile utilizatorului, automat să se actualizeze, să păstreze toate schimbările în caz dacă se trece în regim autonom, de a salva lucru îndeplinit pînă cînd el nu se va afla într-un loc nepericulos, și de a garanta un acces pretutindeni. Există unele posibilități care pot fi realizate cu orice echipament concret al clientului.

Pentru clienții mobili Apache, este prezentată versiunea Apache Lite 3.0 – cu o bază de bate orientată pe obiecte cu utilizarea Java, care poate fi aplicată pentru cheșingul datelor a utilizatorilor. Pentru lucru cu Apache Lite 3.0 este de ajuns 350 Ko de memorie RAM. Dacă pentru ea se mai putea aloca încă 300 Ko, Apache Lite va prezenta un interpretator SQL deplin și va permite tirajarea în ambele direcții a Apache Enterprise Server.

Fig. 2. Multiplexarea conexiunilor applet-elor Java cu Apache.

Apache permite realizarea în ambele direcții pentru apleții Java, care au nevoie de a fi conectați la baza de date Apache. Driverul ThinNet8 reprezintă realizarea API- interfeței de legătură a bazei de date Java (JDBC – java database Connectivity), care emulează unele părți ai protocolului Apache (scris deplin în Java). El va permite rularea apleților încărcați ai Apache, fără instalarea acestor programe la client.

Pentru o mai bună utilizare a timpului și micșorării timpului de răspuns ai serverului, apleții ThinNet8 pot să se unească la Apache Connection Manager, dar du direct la baza de date. Cum este arătat în fig.5, Apache Connection Manager poate multiplexa conexiunile a clienților la serverul Apache.

2.2.2. Nivelul serverului de aplicații

Menirea nivelului Web/Application Server constă în exploatarea codului adițional și serviciilor generale abstracte. Un server ideal al aplicațiilor trebuie rapid să execute componentele adiționale și de a garanta siguranța, securitatea și gestionarea la un număr mare de utilizatori.

Apache Appliation Server (OAS) de fapt combină în el două servere.În calitate de Web-server el oferă toate funcțiile obișnuite, incluzînd gestiunea cu căile virtuale, CGI și securitatea pe baza definirii ariei de acces. Dar el este mai presus de servere obișnuite, oferind arhitectura ORB-broker pentru executarea programelor Web. Orice URL-locator, care nu solicită o pagină statică sau programul CGI, se redresează către brokerul de solicitări Web (WRB). WRB-broker gestionează cu lansarea și stoparea cartridjelor, care execută programele Web, scrise în Java, PL/SQL, C sau Perl. Cartridjul PL/SQL mai bine este realizat pentru crearea dinamică a Web – paginilor pe baza datelor din baza de date și foarte efectiv la crearea aplicațiilor simple pe baza Web.

În calitate de serverul aplicațiilor (partea de jos a fig. 6.) OAS reprezintă containerul standard pentru Enterprise JavaBeans și garantează acces la realizări de o mare calitate a unor astfel de servicii cum sunt: tranzacțiile, denumire, securitatea ș.a.

Deoarece mulți producători încă nu pe deplin sau familiarizat cu tehnologia CORBA și așa modele de componente cum sunt Enterprise JavaBeans, corporația Apache a extins noțiunea de cartridj, incluzînd în el susținerea componentelor server Java-CORBA. Orcale oferă echipamente, care permit de a lua o clasă obișnuită Java, de al împacheta într-un cartridj, pentru a da posibilitatea de a gestiona cu el (moștenirea exemplarelor, echilibrarea efortului ș.a.) și al instala în serverul aplicațiilor. Acest lucru într-adevăr ușurează crearea noilor componente ai serverului. Aplicațiile client se adresează la componente de pe server, așa după cum ele ar fi situate pe calculatorul local.

2.3. Web-acces la Baze de Date

2.3.1. Generalități

Principiul “apasă pe ce-i interesant”, care stă la baza hypertextului, intuitiv este clar. În WWW tehnologii toate noțiunile cheie ale documentului vizionat: cuvinte, imagini – au posibilitatea să se “deschidă” într-un nou document care poate descrie mai detaliat această noțiune. Această modalitate de prezentare a informației se numește “hypertext”, dar documentele de tipul dat – “documente hypertext”. Pentru descrierea acestor documente se utilizează limbajul special – HTML (HyperText Markup Language).

Documentele fie se păstrează într-o formă statică (îmbinare de fișiere pe disk), fie se creează dinamic de un soft special în dependență de parametrii interpelării. Softul dat, care este elaborat într-un anumită modalitate, se numește CGI-programă (Common Gateway Interface). Despre mijlocele de creare a acestor programe se va scrie mai jos.

Utilizarea tehnologiilor WWW pentru asigurarea accesului la careva resurse informaționale subînțelege existența următoarelor componente:

Browser – programă specială de vizionare, de care trebuie să se utilizeze un user al rețelei pentru asigurarea interacțiunii cu un WWW-server;

WWW-server – o parte a rețelei globale și corporative care asigură prezentarea documentelor hypertext, ce sunt plasate pe el, ca răspuns la interpelările WWW-clientului;

IP-rețea cu susținerea setului de servicii de bază de transmitere a datelor, cu o politică unică de numerotare și rutare și serviciu DNS.

2.3.2. Schema de lucru

Să analizăm puțin mai detaliat schema de lucru al unui Web-server. În caz general ea se prezintă astfel:

Utilizatorul rețelei lansează programul de vizionare, numit browser, funcțiile căruia sunt:

conectarea cu serverul;

primirea documentului cerut;

afișarea documentului primit;

reacționarea la acțiunile utilizatorului – accesul la un nou document;

Astfel după lansare browser-ul la comanda utilizatorului sau automat se conectează cu serverul reclamat și transmite lui interpelarea pentru a primi documentul cerut (fig. 5).

Fig. 3. Transmiterea interpelării la server

Web-serverul caută documentul necesar și întoarce rezultatul browser-ului (fig. 6).

Browser-ul, primind documentul, îl afișează utilizatorului și așteaptă reacția lui. Variantele posibile sunt:

introducerea adresei noului document;

tipărire, căutare, alte operații asupra textului curent;

activarea (apăsarea) zonelor speciale ale documentului primit, numite link-uri, ce sunt asociate cu adrese ale unor noi documente.

Fig. 4. Transmiterea răspunsului spre client

În cazul 1 și 3 are loc adresarea la un nou document. Din schema generală se observă că funcțiile Web-serverului sunt:

stabilirea conectării cu softul clientului prin protocolul TCP;

primirea interpelării prin protocolul HTTP;

căutarea documentului în resursele locale;

întoarcerea rezultatului căutării prin protocolul HTTP.

Astfel un WWW-server vom numi un complex soft și hard, care îndeplinește funcțiile enumărate mai sus.

2.3.3. Adresă de rețea

Adresa unui document se indică printr-un șir special, numit URL. Pentru protocolul HTTP, care se utilizează pentru interacțiunea www-clientului cu www-serverul, URL se conține din următoarele:

denumirea protocolului conform căruia funcționează serverul (http);

numele mașinii – serverului pe Internet sau IP-numărul;

portul TCP;

calea documentului pe server.

2.3.4. Mediul de lucru al unui server

La momentul de față toate web-serverele cunoscute prezintă prin sine un computer cu un sistem de operare multitascking. Un proces sau mai multe al unei astfel de sisteme sunt responsabile de menținerea funcțiilor specifice pentru Web-server. Celelalte procese ale sistemului de operare gestionează funcții neobligător legate de susținerea web-tehnologiei (fig. 7).

Fig. 5. Structura conceptuală

Tab. 2.1.

Platforme serverale

O astfel de structură duce la aceea că în prezent printr-un Web-server se subînțelege deja, doar partea softului, funcțiile căruia sunt cele ale Web-serverului, cealaltă parte – cumputerul, sistema de operare, alte procese, structura de rețea se numește mediul de lucru al unui server sau platformă. Mai jos este prezentat tabelul 1 ce conține lista unor platforme pentru WWW-server.

2.4. Scenarii de acces la BD

În componența specificului unei BD concrete intră atît bazele tehnologice, așa ca tipul SGBD-ului, tipul interfeței, legăturile dintre tabele, constrîngerile de integritate, cît și soluțiile organizaționale legate de menținerea BD și asigurării accesului la ea.

Pentru asigurarea www-accesului la BD existente sunt posibile mai multe căi complexe – tehnologice și organizaționale. Practica web-tehnologiilor de acces la BD oferă un spectru larg de soluții, diferit legate între ele – suprapuse, interacționate ș.a. Alegerea soluțiilor concrete de asigurare a accesului depinde de specificul SGBD-ului și de un șir de factori, așa ca: disponibilitatea specialiștilor, ce sunt apți cu rețineri minime să însușească o ramură determinată de soluțiile tehnologice, existența altor BD, WWW-accesul ce trebuie realizat cu cheltuieli adăugătoare minime ș.a.

WWW-accesul către BD poate fi realizat prin unul din trei scenarii. Mai jos sunt date descrierea lor succintă.

2.4.1. Conversia conținutului BD în documente statice

În această variantă conținutul BD este examinat de o programă specială, ce creează o multitudine de fișiere – HTML-documente (fig. 8). Fișierele primite pot fi transferate la unul sau mai multe www-servere. Accesul la ele se va face ca la documentele hypertext ale serverului.

Această variantă se caracterizează prin cheltuieli inițiale minime. Ea este efectivă în cazul fișierelor de date mici și mijlocii, unei scheme simple și în cazul reînoirii rare, deasemenea în cazul cerințelor mici către actualitatea datelor, oferite prin intermediul WWW. În afară de aceasta, este exclus orice mecanism de căutare.

În calitate de convertor se poate prezenta un complex de programe, care ar genera automat sau semiautomat documentele statice. Programul convertor poate fi un program independent elaborat sau un mijloc integrat din clasa generatoarelor de rapoarte.

2.4.2. Crearea dinamică a documentelor hypertext în baza conținutului BD

În această variantă accesul către BD este asigurat de o programă specială (CGI), ce se lansează de WWW-server în urma interpelării de către un WWW-client. Această programă, prelucrînd interpelarea, examinează conținutul BD și crează documentul HTML de ieșire, ce se întoarce clientului (fig. 9).

Această soluție este efectivă pentru BD mari cu structură complexă și cu necesitatea susținerii operațiilor de căutare. În cazul dat este posibilă realizarea modificărilor BD prin WWW-interfețe.

Fig. 6. Crearea dinamică a documentelor hypertext în baza conținutului BD

Printre neajunsurile acestei metode se enumără:

timpul mare de prelucrare a interpelărilor;

necesitatea permanentă de acces la BD principală;

încărcarea auxiliară a mijloacelor de susținere a BD, legată de prelucrarea interpelărilor de la WWW-server.

Pentru realizarea unei astfel de tehnologii este necesară realizarea interacțiunii a WWW-serverului cu programele CGI (și nu numai) lansate.

2.4.3. Crearea DI pe baza unor SGBD-uri înalt productive prin limbajul SQL

În acest caz se propune utilizarea tehnologiei, care a primit denumirea de “depozite informaționale” (DI). Pentru prelucrarea diferitor interpelări, inclusiv celor de la WWW-server, se utilizează o BD intermediară înalt productivă (Fig 11). Încărcarea informațională BD intermediare este asigurată de o produse soft specializate în baza conținutelor bazelor de date principale (fig. 10).

Astfel varianta dată este determinată de două etape:

etapa translării datelor din Bazele de Date în DI (fig. 10);

etapa prelucrării interpelărilor (fig. 11).

Fig. 7. Încărcarea DI din Baze de Date

Acest caz nu este afectat de neajunsurile schemei precedente. Mai mult ca atît, după asigurarea sincronizării datelor depozitului informațional cu Bazele principale de Date va crește siguranța și productivitatea, dar oferindu-se și posibilitatea creării locurilor de muncă distribuite. Schema precedentă nu permitea acest lucru, fiindcă era necesară o astfel de structură pentru toate BD, or aici existînd o interfață unică.

Fig. 8. Utilizarea DI

Deși schema generală pare mare și complexă, pentru sarcina de a asigura WWW-accesul la conținutul cîtorva Baze de Date costurile invocate se micșorează esențial.

Cauza creșterii productivității de prelucrare a interpelărilor WWW și măririi vitezei de elaborare este utilizarea limbajelor interne ale SGBD-urilor depozitelor informaționale pentru crearea documentelor hypertext.

Pentru translarea conținutelor din BD în depozitelor informaționale pot fi utilizate limbajele de programare, mediile integrate sau mijloacele speciale de translare, oferite de un SQL-server și produsele de menținere a depozitelor informaționale.

3. Mijloacele de elaborare a bazei de date

3.1. Web-programare: limbajul PHP

3.1.1. Noțiuni de PHP

PHP este un limbaj de scenarii de server ( server scripting language), îmbinat în HTML, care se interpretează și se execută pe server.

PHP este un preprocesor HTML. Astfel lucrul limbajului este construită pe baza schemei de mai jos.

Fig. 9. Principiile de lucru al limbajului PHP

Până a se transmite fișierul browser-ului, el este analizat de un preprocesor-interpretator. Acesta la rândul său prelucrează doar acele fișiere care au o extensie anumită (de obicei, acestea sunt .phtml sau .php3, dar ele pot fi modificate) și conțin (deși nu este o cerință obligatorie) un cod pentru preprocesor. Astfel PHP-codul se rulează la server și browser-ului se transmite rezultatul în formă de HTML-pagină, care se poate deosebi radical de pagina care se păstrează pe server. Paginile obișnuite cu extensiile .HTML/.HTM Web-serverul le va transmite browser-ului fără nici o prelucrare.

Deosebirea de bază de CGI-scripturi, scrise în alte limbaje, de tipul Perl sau C – este aceea că în CGI-programe se scrie codul HTML care este rezultant, dar utilizând PHP în pagina HTML se introduce programa-scipt prin indicarea tag-urilor de deschidere și închidere respective (<?PHP ?>).

PHP se numește limbajul scenariilor de server spre deosebire de JavaScript/JScript/VBScript, care se numesc limbaje de scenarii client. Aceasta însemnă că scenariul PHP se execută la server și clientului se transmite rezultatul execuției, dar codurile JavaScript se transmit complet la mașina client executarea având loc numai la browser.

3.1.2. Posibilitățile PHP

În câteva cuvinte se poate spune că cu PHP se poate face tot ce se poate face cu CGI-programele. De exemplu de prelucrat datele din forme, de generat pagini dinamice, de primit și de transmis valorile cookies.

În afară de aceasta PHP are suport de lucru cu multe Sisteme de Gestiune de Bazde de Date (SGBD), ceea ce face elaborarea web-aplicațiilor cu utilizarea BD foarte simplă.

Mai jos este prezentată lista incompletă a BD-urilor cu care poate interacționa limbajul:

Adabas Inte

Solid MSQL

dBase Empress

Sybase Velocis

MySQL Oracle

FilePro Unix dbm

Informix PostgreSQL

ODBC

3.1.3. Structura limbajului

Șiruri de caractere

Șirurile de caractere pot fi delimitate de ghilimele sau apostrofuri, în ultimul caz inhibându-se evaluarea variabilelor din interiorul șirului respectiv (exact ca la bash).

Dacă șirul de caractere este delimitat de ghilimele atunci variabilele din interiorul șirului vor fi evaluate și înlocuite prin valoarea lor. Ca și în C sau Perl, caracterul backslash (\) este utilizat pentru a proteja un carcater special.

Orice caracter se poate transforma, teoretic, în secveță escape, dar se produce un avertisment la cel mai înalt nivel. A doua metodă încadrează șirurile între apostrofuri; în acest caz singurele secvențe escape înțelese sunt '\\' și '\'. Variabilele nu vor fi expandate într-un șir încadrat între apostrofuri. O altă metodă de a delimita șirurile este folosirea sintaxei doc '<<<'. După acest delimitator trebuie specificat un identificator, apoi șirul de caractere propriu-zis și, în încheiere, același identificator care a precedat șirul.

Conversia șirurilor

Când un șir este evaluat ca valoare numerică, valoarea și tipul rezultat sunt decise după cum urmează: șirul va fi evaluat ca un double dacă conține unul din caracterele '.', 'e' sau 'E'. Altfel va fi evaluat ca un întreg.

Valoarea este dată de începutul șirului. Dacă șirul începe cu o dată numerică validă, aceasta va fi valoarea utilizată. Altfel valoara va fi 0. O dată numerică validă este formată din semn (opțional), una sau mai multe cifre (opțional un puct zecimal), încheiate eventual cu un exponent. Acest exponent ('e' sau 'E') este urmat de una sau mai multe cifre. Când prima expresie este un șir tipul varibilei va depinde de a doua expresie.

Tablouri

În PHP tablourile se comportă și ca tablouri asociative (hash tables) și ca tablouri indexate (vectori).

Tablouri unidimensionale

PHP acceptă atât tablouri scalare cât și asociative. De fapt nu există nici o diferență între cele două. În PHP tabolurile se pot crea utilizând funcțiile list() și array() sau se poate seta explicit fiecare element din tablou.

Puteți număra elementele tabloului utilizând funcția count(). Puteți parcurge un tablou utilizând funcțiile next(), prev() și each().

Tablouri multidimensionale

Tablourile multidimensionale sunt în realitate tablouri simple. Pentru fiecare dimensiune a tabloului trebuie adăugată o altă dimensiune [dim] la final.

$a[1] = $f; // Tablou unidimensional

$a["aaa"] = $f; // Tablou unidimensional

$a[1][0] = $f; // Tablou bidimensional

$a["aaa"][2] = $f; // Indicii asociativi si numerici se pot combina

$3[3]["bar"] = $f; // Indicii numerici si asociativi se pot combina

$a["aaa"][4]["bar"][0] = $f; // Tablou cu patru dimensiuni

În PHP nu este posibilă referirea tablourilor multidimensionale direct într-un șir.

Puteți completa o matrice în multe moduri, dar important este să ințelegeți cum puteți să utilizați funcția array() pentru tablouri asociative.

Conversia automată a tipurilor

PHP nu acceptă definirea explicită a tipului în definirea variabilelor, tipul unei variabile fiind determinat de contextul în care acea variabilă este utilizată. Acesta înseamnă că dacă atribuiți variabilei var un șir de caractere, var va deveni șir. Dacă îi atribuiți o valoare întregă, var va deveni un întreg.

Un exemplu de conversie automată a tipului apare la utilizarea operatorului '+'. Dacă vre-un operand este double, atunci toți operanzii sunt evaluați la double, și rezultatul va fi un double. Altfel, operanzii vor fi interpretați ca întregi și rezultatul va fi tot un întreg. Rețineți că acest mod de evaluare nu modifică tipul operanzilor care intervin în expresie, ci numai modul în care ei sunt evaluați.

Conversia explicită a tipurilor

Conversia explicită a tipurilor (cast) se face în același mod ca în C: numele tipului dorit este scris în paranteze înaite de numele variabilei.

Conversiile permise sunt:

(int), (integer) – conversia la întreg

(real), (double), (float) – conversie la double

(string) – conversie la șir

(array) – conversie la tablou

(object) – conversie la obiect

Este posibil ca rezultatul conversiei explicite între două tipuri să nu fie evident. Când convertiți un scalar sau o variabilă de tip șir de caractere la un obiect, respectiva variabilă va deveni un atribut al obiectului, atribut numit scalar.

3.1.4. Variabile

Reprezentarea varibilelor

Variabilele în PHP sunt reprezentate de semnul dolar, '$', în fața numelui variabilei. Numele variabilelor sunt formate după aceleași reguli ca alte etichete din PHP. Un nume de variabilă valid trebuie să înceapă printr-o literă sau liniuță de subliniere, '_', urmată de un șir de litere, cifre sau liniuțe de subliniere.

În PHP 3, variabilele sunt asignate întotdeauna prin valoare. Astfel, când atribuim unei variabile o expresie, întreaga valoare a expresiei este copiată în variabila destinație. Aceasta înseamnă, de exemplu, că atribuind unei variabile valoarea altei variabile, modificarea unei variabile nu va avea efect asupra celeilalte.

PHP 4 aferă și un alt mod pentru atribuirea de valori variabilelor: prin referință. Aceasta înseamnă că noua variabilă nu face decât să refere variabila originală (cu alte cuvinte, "devine un alias pentru" sau "pointeză la" variabila originală). În acest caz, cele două variabile sunt interdependente, modificarea uneia determinând modificarea celeilalte. Deoarece nu are loc copierea și actualizarea valorilor, asignarea prin referință este mai rapidă. Diferența devine notabilă în cazul execuțiilor repetate sau la asignarea tablourilor mari, respectiv a abiectelor.

PHP furnizează un mare număr de variabile predefinite pentru fiecare script pe care îl rulează. Cele mai multe variabile predefinite depind de serverul pe care se lucrează, de versiunea și configurarea serverului sau de alți factori. Unele dintre aceste variabile nu vor fi disponibile când PHP rulează într-o linie de comandă.

Domeniul variabilelor

Domeniul variabilelor este contextul în care variabila este definită. Pentru marea parte a variabilelor, domeniul lor este unic. Acest domeniu se referă și la fișierele incluse într-un script.

Scriptul nu afișează nimic pe ecran deoarece instrucțiunea echo utilizează variabila locală $a care nu a fost asignată în acest domeniu. Este o diferență între modul de stabilire a domeniului variabilelor globale în C și PHP: în absența unei referiri locale, variabilele globale din C sunt valabile în orice funcție a programului.

Declarând variabilele $a și $b globale în interiorul funcției Sum(), orice referire la acestea în domeniul funcției se va face la declarațiile globale. Numărul variabilelor globale care pot fi manipulate de către o funcție este nelimitat.

A doua modalitate de a accesa variabilele din domeniul global este prin utilizarea variabilei tablou din PHP, numită $GLOBALS. Variabila $GLOBALS este un tablou asociativ care are drept indice numele variabilelor globale și conținutul respectivelor variabile drept elemente.

Un alt aspect important legat de domeniul variabilelor se referă la variabilele statice. O variabilă statică există numai în domeniul unei funcții dar nu își pierde valoarea când execuția programului părăsește acest domeniu.

Această funcție este inutilă de vreme ce la fiecare apel variabila $a este setată la valoarea 0 care va fi tipărită. Deși în funcție există instrucțiunea $a++ care incrementeză valoarea variabilei, la încheierea execuției funcției această valoare se pierde, variabila $a având domeniu local. Pentru a păstra valoarea incrementată a variabilei $a între două execuții ale funcției, ea va fi declarată ca variabilă statică.

3.1.5. Constante

PHP definește o serie de constante și oferă un mecanism pentru definirea altora în timpul execuției. Constantele seamănă mult cu variabilele; sunt definite cu jutorul funcției define() și valoarea lor nu poate fi modificată ulterior. Constantele predefinite (disponibile întotdeauna) sunt :

__FILE__

Se utilizează cu un fișier care a fost inclus sau solicitat, când numele fișierului inclus este dat;

__LINE__

Numărul liniei din scriptul curent care este analizat. Se utilizează împreună cu un fișier care a fost inclus sau solicitat, când poziția în fișierul inclus este dată;

PHP_VERSION

Un șir de caractere reprezentând versiunea PHP utilizată;

PHP_OS

Numele sistemului de operare în care rulează PHP;

TRUE

O valoare adevărată;

FALSE

O valoare falsă;

E_ERROR

Indică o eroare, alta decât o eroare de analizare, pentru care corectarea nu este posibilă;

E_WARNING

Indică o situație în care PHP știe că ceva este greșit, dar continuă oricum;

E_PARSE

Semnalează o sintaxă invalidă în fișierul script; corectarea nu este posibilă;

E_NOTICE

S-a întâmplat ceva care poate fi sau nu o eroare; execuția continuă. Spre exemplu am accesat o variabilă care nu a fost inițializată sau am folosit un șir neîncadrat între ghilimele ca index asociativ.

Puteți defini constante suplimentare utilizând funcția define(). Rețineți că aceste constante nu se comportă ca macro-urile C; numai datele scalare valide pot fi reprezentate printr-o constantă.

3.1.6. Expresii

Expresiile sunt cele mai importante construcții ale PHP; în PHP aproape orice scrieți este o expresie. Cea mai simplă și corectă modalitate de a defini o expresie este orice are o valoare. Cele mai simple expresii sunt constantele și variabilele.

PHP este un limbaj orientat pe expresii în sensul că aproape orice este o expresie. Operatorii de pre și postincrementare funcționează analog cu cei din C. Un tip uzual de expresii îl reprezintă expresiile de comparare. Aceste expresii sunt evaluate la 0 sau 1 reprezentând FALSE, respectiv TRUE.

PHP acceptă operatorii de comparație >, >=, ==, != (diferit), <, <=. Aceste expresii sunt utilizate uzual în construirea condițiilor. Ca și în C se pot folosi operatorii de atribuire compuși. În afară de faptul că utilizarea acestor operatori compuși duce la scurtarea codului, și execuția este mai rapidă. De asemeni, PHP acceptă operatorul ternar condițional '?', cu aceeași semnificație ca și în C.

Limbajul PHP nu dispune de un tip logic predefinit. Evaluarea valorii de adevăr a expresiilor PHP se face la fel ca în C și Perl: orice valoare numerică nenulă este TRUE, zero este FALSE. Un șir vid este FALSE, orice alt șir este TRUE. În cazul tablourilor și obiectelor orice valoare care nu conține elemente este considerată FALSE, altfel este considerată TRUE.

Sintaxa alternativă

PHP propune o sintaxa alternativă pentru instrucțiunile de control if, while, for și switch. În fiecare caz principiul este de a înlocui acolada deschisă cu două puncte (':') și acolada închisă prin, respectiv endif;, endwhile;, endfor;, sau endswitch;.

if( $a == 5):

echo $a;

endif;

Această sintaxă funcționează de asemenea cu else și elseif.

Bucla while este cea mai simplă implementare a unei bucle în PHP. Această buclă se comportă la fel ca în C. Sintaxa instrucțiunii while este:

while( expresie)

{

listă de instrucțiuni

Execuția unei bucle while este foarte simplă. PHP execută instrucțiunile din lista de instrucțiuni atât timp cât expresia buclei while, expresie, este evaluată la TRUE. Valoarea expresiei este verificată la fiecare început al buclei și, dacă valoarea se schimbă pe durata execuției instrucțiunilor, execuția nu se va sfârși decât la următoarea iterație (de fiecare dată când PHP execută instrucțiunile are loc o iterație). Dacă expresia buclei while este FALSE înaintea primei interații, instrucțiunea nu va fi niciodată executată.

Mai multe instrucțiuni pot fi executate într-o buclă while grupându-le între acolade pentru a forma un bloc sau utilizând sintaxa alternativă după modelul de mai jos:

while( expresie):

listă de instrucțiuni

endwhile;

Buclele do..while seamănă mult cu buclele while, dar expresia condițională este testată la sfârșitul fiecarei iterații și nu la început. Principala diferență față de bucla while este că prima iterație a buclei do..while este întotdeauna executată (expresia nu este testată decât la sfârșitul iterației). Nu există decât o sintaxă posibilă pentru buclele do..while:

do

{

listă de instrucțiuni

}while( expresie);

Bucla de mai sus va fi executată doar o singură dată, pentru că la prima evaluare a expresiei obținem FALSE (deoarece variabila $i nu este mai mare decât 0) și execuția buclei se oprește.

Utilizatorii familiari cu C sunt obișnuiți să utilizeze în mod diferit buclele do..while, care permite oprirea execuției buclei, prin introducerea instrucțiunii break într-o buclă do..while. Codul următor demonstrează acest lucru:

do

{

if( $i < 5)

{

print "$i nu este suficient de mare";

break;

}

$i *= $factor;

if( $i < $minimum_limit)

{

break;

}

print "$i este bun";

}while( 0);

for

Buclele for sunt cele mai complexe bucle în PHP. Ele funcționează la fel ca buclele for din limbajul C.

Instrucțiunea are următoarea sintaxă:

for( expr1; expr2; expr3)

{

listă de instrucțiuni

}

Prima expresie (expr1) este evaluată (executată) o singură dată, necondiționat, la începutul buclei.

La începutul fiecărei iterații, expresia expr2 este evaluată. Dacă evaluarea devine TRUE, bucla continuă și instrucțiunile din lista de intrucțiuni sunt executate. Dacă evaluarea devine FALSE, execuția buclei se oprește.

La sfârșitul fiecărei iterații, expresia expr3 este evaluată (executată).

Expresiile pot fi eventual vide. Dacă expresia expr2 este vidă, înseamnă că bucla este infinită (PHP consideră implicit că expresia expr2 este TRUE, ca în C). Acest lucru poate fi util, mai ales când dorim să terminăm bucla cu instrucțiunea break.

foreach

PHP4 (nu și PHP3) dispune de comanda foreach, ca Perl sau alte limbaje. Instrucțiunea oferă un mod simplu de a trece în revistă un tablou. Există două sintaxe posibile, a doua este o mică, dar utilă, extensie a celei dintâi :

Prima formă trece în revistă tabloul array_expression. La fiecare iterație, valoarea elementului curent este atribuită lui $value și pointerul intern al tabloului este avansat cu un element (astfel, la următoarea iterație aveți acces la următorul element).

A doua formă face același lucru, dar cheia (indicele) elementului curent va fi atribuită variabilei $key la ficare iterație.

Notă: când foreach începe să fie executat, pointerul intern al fișierului este automat repoziționat la primul element al tabloului. Acest lucru înseamnă că nu veți avea nevoie să faceți apel la reset() înainte de foreach. De asemeni, foreach lucrează cu o copie a tabloului astfel încât pointer-ul intern al tabloului nu este modificat ca în cazul utilizării constructorului each.

break

Instrucțiunea break permite ieșirea dintr-o instrucțiune if, for, while sau switch. Instrucțiunea break acceptă un argument numeric opțional care va indica numărul de instrucțiuni imbricate care trebuiesc întrerupte.

continue

Instrucțiunea continue este utilizată într-o buclă pentru a sări peste instrucțiunile de după continue și până la sfârșitul blocului; execuția iterației curente este întrerupă și se trece la execuția iterației următoare. Instrucțiunea continue acceptă un argument numeric opțional care va indica câte bucle imbricate vor fi ignorate.

switch

Instrucțiunea switch este echivalentă cu o serie de instrucțiuni if. Cu numeroase ocazii, veți avea nevoie să comparați aceeași variabilă (sau expresie) cu mai multe valori diferite și să executați diferite parți din cod în funcție de valoarea obținută. Acesta este modul de execuție al instrucțiunii switch.

Este important să înțelegem modul de execuție al instrucțiunii switch pentru a evita apariția erorilor. Instrucțiunea switch se execută secvențial, linie după linie. La început nu este executat nici un cod. Numai când se gasește o valoare a selectorului identică cu o constantă case, PHP execută instrucțiunile corespunzătoare respectivei constante case. PHP continuă să execute instrucțiunile pâna la sfârșitul blocului de instrucțiuni switch sau până când întâlnește instrucțiunea break. Dacă nu utilizați instrucțiunea break la sfârșitul unui bloc case, PHP va continua să execute instrucțiunile din următorul bloc case.

În comanda switch, condiția este evaluată o singură dată și rezultatul este comparat cu fiecare constantă case. Într-o instrucțiune elseif, condiția este reevaluată. Dacă condiția voastră este mai complicată decât o simplă comparație sau apare într-o buclă, instrucțiunea switch se poate dovedi mai rapidă.

Expresiile case pot fi orice expresie scalară de tip întreg, virgulă mobilă sau șir de caractere. Tablourile și obiectele pot fi folosite numai dacă sunt dereferențiate la un tip simplu.

include()

Funcția include() introduce și evaluează fișierul specificat în argument. Dacă URL fopen wrappers nu sunt disponibile în PHP (așa cum sunt în configurația implicită), puteți specifica fișierul care trebuie inclus utilizând un URL în locul unui pathname local. Pentru a evita utilizarea eronată a fișierului inclus, orice cod din fișierul destinație care trebuie executat ca un cod PHP trebuie încadrat de tag-uri de început și sfârșit valide în PHP. De asemeni, se poate folosi o instrucțiune include() într-o buclă pentru a include mai multe fișiere diferite, așa cum reiese din exemplul următor:

$files = array( 'unu.inc', 'doi.inc', 'trei.inc');

for( $i = 0; $i < count( $files); $i++)

{

include( $files[ $i]);

}

Instrucțiunea include() este reevaluată de fiecare dată când este întâlnită într-un cod PHP. Deoarece include() este o construcție specială a limbajului, trebuie să o includeți într-un bloc de instrucțiuni dacă ea apare într-un bloc condițional.

În PHP4, cât și în PHP3, se poate executa o instrucțiune return în interiorul unui fișier inclus cu include(), execuția determinând încheierea procesului în respectivul fișier și revenirea în scriptul care l-a solicitat. De asemeni, PHP4 permite să returnați valori din fișierele incluse cu include(). Puteți folosi aceste valori ca și cum ar fi returnate de o funcție normală.

Este important de notat că atunci când un fișier este inclus cu include() codul pe care îl conține moștenește domeniul variabilelor corespunzator liniei pe care apare instrucțiunea include() în cod. Orice variabilă disponibilă pe respectiva linie va fi disponibilă și în fișierul inclus.

include_once

Instrucțiunea include_once include și evaluează fișierul specificat în timpul execuției scriptului. Comportamentul este similar cu cel al instrucțiunii include(), deosebirea majoră fiind aceea că dacă codul din fișier a fost deja inclus în script operația nu va fi repetată. Vom folosi această instrucțiune când un fișier ar putea fi inclus și evaluat de mai multe ori în execuția unui anumit script și dorim să ne asigurăm că includerea sa se va efectua numai odată pentru a evita problemele care pot să apară la redefinirea funcțiilor, reinițializarea variabilelor etc.

3.1.7. Funcții

Funcțiile definite de utilizator

O funcție poate fi definită de utilizator conform sintaxei următoare:

function nume_functie( $arg1, $arg2, …, $argN)

{

echo "Exemplu de functie.\n";

return $retval;

}

Într-o funcție poate să apară orice cod PHP valid, chiar alte funcții și definiții de clase. În PHP3, funcțiile trebuie să fie definite înainte de a fi referențiate; în PHP4 nu există o asemenea restricție. PHP nu susține funcții de supraîncarcare, nu se poate anula definirea sau redefini o funcție declarată anterior.

PHP3 nu acceptă număr variabil de argumente în antetul funcțiilor, dar acceptă argumente implicite.

Argumentul funcțiilor

Informațiile pot fi transmise funcțiilor print-o listă de argumente. În această listă variabilele și/sau constantele sunt delimitate prin virgulă.

PHP acceptă transmiterea argumentelor prin valoare (implicit), prin referință și argumente cu valori implicite. Listele cu număr variabil de argumente sunt acceptate doar în versiunea PHP4. Un efect similar poate fi obținut în PHP3 transmițând funcției un tablou de argumente.

Transmiterea argumentelor prin referință

Implicit, argumentele funcțiilor sunt transmise prin valoare (în sensul că schimbarea valorii argumentului în interiorul funcției nu se reflectă și în afara funcției). Dacă doriți să permiteți unei funcții să modifice argumentele sale, acestea trebuie transmise prin referință.

Dacă vreți să transmiteți o variabilă prin referință unei funcții care nu face acest lucru în mod implicit, trebuie să precedați cu un '&' numele argumentului în apelul funcției

Valorile argumentelor implicite

Liste cu număr variabil de argumente

PHP4 acceptă liste cu număr variabil de argumente în funcțiile definite de utilizator. Acest lucru se obține ușor, utilizând funcțiile funct_num_args, funct_get_arg și funct_get_args.

Valorile returnate de funcții

Valorile sunt returnate folosind opțional instrucțiunea return. Poate fi returnat orice tip de rezultat, inclusiv tablouri și obiecte:

function square( $num)

{

return $num * $num;

}

echo square( 4); // Se afișează 16

Nu puteți returna valori multiple dintr-o funcție, dar rezultate asemănătoare pot fi obținute prin returnarea unui tablou:

function small_numbers()

{

return array( 0, 1, 2);

}

list( $zero, $one, $two) = small_numbers();

Pentru a returna o referință dintr-o funcție, trebuie folosit operatorul '&' atât în declarația funcției dar și când atribuiți valoarea returnată unei variabile, ca în exemplul de mai jos:

function &returns_reference()

{

return &$someref;

}

$newref = &returns_reference();

Funcții variabile

PHP susține conceptul de funcții variabile. Aceasta înseamnă că dacă numele unei variabile este urmat de paranteze, PHP va caută o funcție cu același nume și va încerca să o execute.

Notă: în PHP4 sunt permiși doar inițializatori constanți pentru variabile var. Pentru inițializatorii neconstanți trebuie folosiți constructori.

/* Acest exemplu nu va functiona PHP4 */

Clasele pot fi extensii ale altor clase. Această noțiune se numește moștenire. Clasa extinsă sau derivată posedă toate variabilele și funcțiile clasei de bază alături de variabilele și funcțiile definite în extensie. Acest lucrul se realizează utilizând cuvântul cheie extends. Moștenirea multiplă nu este acceptată.

class Named_Cart extends Cart

{

var $owner;

function set_owner( $an_owner)

{

$this->owner = $an_owner;

}

}

Codul de mai sus definește o clasă Named_Cart care are toate variabilele și funcțiile din Cart plus o variabilă suplimentară $owner și o funcție suplimentară set_owner(). Puteți crea un obiect $ncart cu operatorul new și apoi puteți seta proprietățile obiectului.

În funcțiile unei clase variabila $this înseamnă obiectul curent. Pentru a accesa o variabilă sau funcție a obiectului curent, numită $proba, trebuie să utilizăm construcția $this->proba. Atât în interiorul cât și în afara obiectului, nu este necesar semnul '$' ( în fața unei "proprietăți") când accesați o proprietate a acestuia.

Constructorii sunt funcțiile dintr-o clasă care au același nume cu clasa. Ei sunt automat apelați când creați o nouă instanță a clasei.

class Auto_Cart extends Cart

{

function Auto_Cart()

{

$this->add_item( "10", 1);

}

}

Acest cod definește o clasă Auto_Cart care extinde clasa Cart plus un constructor care inițializează obiectul cu un articol, având numărul 10 de fiecare dată când un nou obiect de tipul Auto_Cart este creat cu operatorul new.

Constructorii pot avea argumente (pot fi opționale), caracteristică care îi face foarte utili.

class Constructor_Cart extends Cart

{

function Constructor_Cart( $item = "10", $num = 1)

{

$this->add_item( $item, $num);

}

}

$default_cart = new Constructor_Cart;

$different_cart = new Constructor_Cart( "20", 17);

3.1.8. Referințe

Ce sunt referințele?

În PHP referințele reprezintă posibilitatea de a referi conținutul unei variabile prin nume diferite. În PHP numele unei variabile diferă de conținutul variabilei, deci un anumit conținut poate fi identificat prin nume diferite.

Ce fac referințele?

Referințele PHP permit referirea aceluiași conținut prin două variabile diferite. Când scrieți:

$a = &$b;

înseamnă că $a și $b indică aceeași variabilă.

Al doilea lucru pe care îl realizează referințele este să transmită variabile prin referință. Acest lucru se realizează folosind variabila locală a funcției și variabila cu care se face apelul drept referințe către același conținut.

Al treilea lucru pe care îl pot face referințele este întoarcerea unei valori prin referință.

Întoarcerea referințelor

Întoarcerea prin referință este utilă când doriți să utilizați funcții pentru a găsi variabile care ar trebui legate cu acestea. Când returnați referințe folosiți sintaxa:

function &find_var( $param)

{

//… code…

return &$found_var;

}

$fnc = &find_var( $bar);

În acest exemplu proprietatea obiectului returnat de funcția find_var() trebuie setată, nu copia acesteia cum s-ar întâmpla dacă nu am utiliza sintaxa prin referință.

Observație: spre deosebire de transmiterea parametrilor, trebuie să utilizați '&' în ambele locuri pentru a indica ce întoarceți prin referințăa (și nu prin valoare cum este uzual) și pentru a spune cui i se atribuie respectiva referință.

Resetarea referințelor

Când resetați o referință rupeți practic legatura dintre numele și conținutul variabilei. Aceasta nu înseamnă ca acel conținut al variabilei va fi distrus.

Multe construcții sintactice în PHP sunt implementate prin mecanismul referințelor, deci modul lor de funcționare se poate aplica acestor construcții. Unele construcții, cum ar fi transmiterea și întoarcerea prin referință, au fost deja menționate. Alte construcții care folosesc referințele sunt referințele globale. Când declarați variabila $var ca variabilă globală creați defapt o referință la o variabilă globală.

3.1.9. Avantajele PHP

Proiectanții de web-aplicații cunosc că o web-pagină nu este o simplă îmbinare de text și imagini. Un site ce merită atenție este acel care susține un nivel oarecare de interactivitate cu utilizatorii: căutare de informații, vînzare de produse, conferințe. Până nu demult toate acestea se realiza tradițional cu CGI-scripturi, scrise în Perl. Dar s-a dovedit că CGI-scripturile sunt foarte rău scalabile. Fiecare apel de CGI-script cere de la nucleu crearea unui nou proces, ceea ce duce la pierderea timpului procesoral și ocuparea memoriei operative. PHP propune o nouă variantă – el funcționează ca o parte a web-serverului, astfel asemănîndu-se cu ASP de la Microsoft și Cold Fusion de la Allaire.

Sintaxa PHP se aseamănă cu sintaxa C și Perl. Programatorii, cunoscuți cu programarea, rapid vor deprinde scrierea programelor în PHP. În acest limbaj nu există o tipizare strictă de date și nu sunt necesare operații de alocare/eliberare ale memoriei.

Spre deosebire de Perl-programe PHP-codul vizual se citește și se înțelege ușor.

Adăugător la faptul că PHP se răspândește fără plată (deși MySQL cere cumpărarea licenței în cazul utilizării ei în scopuri comerciale) tandemul PHP-MySQL are caracteristica cross-platformei. Aceasta însemnă că se poate elabora aplicații lucrînd în mediul Windows, destinate pentru funcționarea lor sub Unix. În afară de aceasta, PHP poate funcționa fie ca un CGI-proces extern, fie ca un interpretator simplu de scripturi sau ca un modul al web-serverului Apache sau IIS.

Și în sfîrșit, acest produs se elaborează cu eforturi comune, de aceea există multă documentație și liste întregi de adrese la care se poate adresa în caz de necesitate.

3.1.10 Neajunsurile PHP

Neajunsul de bază al PHP 3 este aceea că după ideologie PHP inițial a fost orientat pentru scrierea unor scripturi mici. Deși motorul a fost de câteva ori rescris, PHP 3 nu este util pentru utilizarea unor proiecte complexe.

PHP este un limbaj interpretativ, rezultînd de aici și fatul că nu poate concura la viteză cu C-ul compilativ. Deși în cazul scrierii unor programe mici, ce de fapt este caracteristic proiectelor PHP, cînd tot proiectul este conținut doar din cîteva pagini cu cod, apar cheltuieli de ocupare a memoriei la încărcare și la apelul CGI-programei, scrise în C.

Nu există o bază de module gata, ca de exemplu CPAN la Perl.

Nu există susținerea sesiunilor (session), ca de exemplu la ASP.

3.2. Descrierea limbajului structurat de interpelare SQL

3.2.1. Noțiuni generale

SQL prezintă din sine un limbaj structurat de interpelări. Acesta este un limbaj care dă posibilitate de a crea baze de date relaționale și a lucra cu ele. Baza de date este un set de informație legată, care se păstrează în tabel.

Spațiul informațional devine tot mai unificat. Asta a adus la necesitatea creării unui limbaj standard, care s-ar putea folosi în diferite tipuri a mediilor de calculatoare. Limbajul standard va da posibilitatea utilizatorilor, care cunosc un set de comenzi, să le folosească pentru crearea, găsirea, modificarea și transferarea informației – independent de faptul, că ei lucrează la calculator personal, la o stație lucrătoare de rețea, sau la calculator universal.

În lumea calculatoarelor, utilizatorul care are limbajul dat, are un mare avantaj în utilizarea și generalizarea informației dintr-un șir de surse cu ajutorul unui mare număr de metode.

Eleganța și independența de la specificul tehnologiilor informaționale, și susținerea lui de către liderii industriei în sfera tehnologiei bazelor de date relaționale, a făcut limbajul SQL limbaj standard de bază. Din această cauză oricine care dorește să lucreze cu bazele de date a anilor 90, trebuie să cunoască SQL.

Standardul SQL este determinat de ANSI (American National Standart Institute) și în momentul de față el este acceptat și de ISO (Organizația Internațională a Standardelor). Însă majoritatea programelor comerciale a bazelor de date îl lărgesc fără a pune la cunoștință ANSI, adăugând diverse particularități în acest limbaj, care, cum ei cred că ele vor fi forte folositoare. Câteodată ele ceva schimbă standardul limbajului, dar ideile bune au tendința de a se dezvolta și curând devin standarde a "pieței" de la sine ele în puterea folositoare a calităților sale.

Aplicațiile Delphi se adresează la date prin intermediul BDE (Borland Database Engine). Tipul de acces la bazele de date variază în funcție de tipul bazei de date. Bazele de date locale Paradox, dBASE, MS Access și FoxPro sunt apelate de BDE prin intermediul driver-ilor standarde. Datele din serverele SQL sânt primite datorită utilizării sistemului special de driver-e SQL Links. Un rol important în prelucrarea și trimiterea interpelării îl joacă sistemul de prelucrare ainterpelărilor – componentă a procesorului BD. Toate sistemele de gestionare a bazelor de date nu utilizează limbajul SQL ca mijloc principal în lucru cu datele. Cu toate acestea, BDE cu ajutorul driver-ului standard respectiv translează cererile ce vin de la aplicații într-o formă înțeleasă de sistemul de gestiune al bazei de date și primește răspuns. Deoarece cererea către orice BD locală se execută de un singur mecanism, există o sintaxă unică SQL pentru lucru a astfel de date. Această variantă poartă denumirea de SQL local și este o parte componentă din standardul SQL92.

Toate serverele BD care lucrează cu BDE prin SQL Links sunt niște sisteme industriale complicate și lucrează pe baza extensiilor proprii ale limbajului. În acest caz BDE pur și simplu transmite cererea la server, fără a o transla sau modifica. Este evident că, în acest caz elaboratorul aplicației trebuie să cunoască această variantă SQL.

3.2.2. Posibilitățile MySQL

MySQL susține limbajul de interpelări SQL în standardul ANSI 92 și în afară de aceasta are un șir de extensii la acest standard, care nu există la nici o altă SGBD.

Posibilitățile MySQL (din cele mai importante) sunt:

Menține un număr nelimitat de utilizatori, ce lucrează concomitent cu baza de date;

Numărul de rânduri din tabele poate atinge cifra de 50 mln.;

Execuția rapidă a comenzilor. Este, posibil, cel mai rapid server din cele existente;

Sistemă simplă și efectivă de securitate.

3.2.3. MySQL ca soluție a serverului bazei de date

Ca soluție din cele mai reușite pentru a crea o bază de date pentru SSIDPI și asigurînd la ea acces in toate sectoarele a departamentului de deservire este folosirea ca server a bazei de date: MySQL Server. Serverul dat este un server universal sau mai precis Serverul Universal MySQL ® (însemnarea MySQL ® nu este întâmplătoare. Nu demult judecata SUA a insistat ca toate denumirile de server universal să fie însoțite de denumirea logotipul firmei producătoare.).

Serverul Universal MySQL ® include:

orice dimensiune a SGBD (Workgroup server, Personal MySQL);

orice tip de aplicație (OLTP aplicații, DSS aplicații);

orice tip de date.

Printre cele mai semnificative avantaje de utilizare MySQL sunt:

echipament de analiză operativă a datelor – OLAP;

echipament de creare a aplicațiilor ( Developer 2000/ Power Object ).

Ambele grupe se prezintă nu doar ca echipament pentru elaborarea aplicațiilor de două nivele Client – Server, dar pentru cea de trei nivele care include și serverul de aplicații ce este prezentat prin MySQL Web Aplications Server.

MySQL susține o altă variantă de arhitectură de trei nivele prezintată prin posibilitatea de a folosi “agenți mobile”. MySQL Mobile Agents, permite aplicațiilor de a efectua acces la serverul BD pe canale de comunicație ne siguri și de bandă îngustă.

În MySQL sunt prezentate un șir de funcții noi:

blocarea – se blochează doar acea parte a BD (la nivel de înregistrare) care se supune modificării;

confirmarea în timp a citirii – se arată doar datele tranzacțiilor care au fost terminate la începutul operației și nu va returna date pentru tranzacții ne terminate;

este permis de a citi și a scrie pe părți cîmpul de tip Long (la nivel de MySQL Call Intrerface). Are o mare importanță, deoarece mărimea acestui cîmp poate ajunge la dimensiuni de 2 Gbyte extinderi în PL/SQL, tabele se pot afla în memoria serverulu. De exemplu dacă în BD este un tabel cu nume “emp”, atunci se poate de descris un nou tip de date ce corespunde structurii acestui tabel.

Să dăm un exemplu de descriere a tipului nou de date:

TYPE emp_table_type IS TABLE OF emp%ROWTYPE;

INDEX BY BINARY_INTEGER;

Pe urmă se pote defini un tabel în memorie de tipul dat și de al folosi ca o stivă pentru lucru cu tabelul emp.

Algoritmi noi de prelucrare a solicitărilor implementate în MySQL:

solicitări de tip stea. (La început se folosește produsul cartezian a tabelelor de asistență și pe urmă se face contopirea cu tabelul faptelor.);

contopirea prin hăș;

folosirea stringurilor de biți pentru indexare. Pînă în versiunea 7.2 pentru indexare se foloseau doar B-arbori și hăși funcții ( dacă tapeblul putea fi plasat în hăși claster). Bit-map-indexes, dacă un cîmp din tabel are un număr restrîns de valori, atunci pentru o valoare se formează o consecutivitate de biți unde fiecare bit înseamnă poziția acestuia în rîndul respectiv.

Pentru administrarea sistemică, MySQL a creat Server Manager, cu o interfață

grafică, dar este orientat la administrarea doar a unei singure BD. Dacă dorim administrarea a mai multor BD e necesar de a lansa mai multe sesiuni a Sarver Manager.

La fel în MySQL sunt create instrumente pentru susținerea sistemelor de lucru paralel, sistemul SME (procesele folosesc la același nivel toate resursele de sistem).

În MySQL sunt implementate următoarele extinderi ce privește:

partajarea tabelelor și a indecșilor;

posibilități extinse a serverului paralel și a paralelismului în efectuarea operațiilor;

extinderi de orientare spre obiecte;

păstrarea centralizată a parolelor.

Posibilități noi ai MySQL în interacțiunea cu serverul:

susținerea stivelor de operații prioritare ce impun descrierea tranzacției sau a unei părți din ea;

multiplexarea sesiunilor, atît pe canale de legătură fizică cît și pe cele logice extinderea posibilităților funcționale de tirajare a datelor, introducerea interfeței programabile pentru tirajare, care permite de a folosi replicarea datelor cu cele mai diverse sisteme de păstrare a informației;

plasarea totală a tabelelor în indecși.

Așa dar, funcționarea calitativă a unui subsistem informatic de deservire a produselor informatice se poate totalmente de elaborat utilizînd sistemul produselor program MySQL.

Elaborînd și punînd în funcțiune sistemul proiectat în mediul MySQL, la o singură unitate distribuitorului oficial se poate de folosi ca model tip pentru celelalte unități în departamentul de deservire a produselor program. Fiecare din acestea avînd unificarea păstrării și prelucrării datelor, permite de a le stoca și de a le prelucra în ansamblu.

La fel utilizînd toate facilitățile oferite de mediul MySQL ce privește lucru în rețea,toate datele despre starea curentă a unității distribuitor, se poate accesa aceste date de centrul firmei producător pentru a duce o evidență în ansamblu pe toate regiunile și subunități aflate la momentul dat.

3.2.4. Componența limbajului SQL

Limbajul SQL este destinat pentru manipularea datelor în baze de date relaționale , determinarea structurii bazei de date și dirijarea cu drepturile de acces la date într-un mediu cu mulți utilizatori.

Și de atâta, în limbajul SQL în calitate de părți componente întră:

limbaj de manipulare a datelor (Data Manipulation Language, DML)

limbaj de determinare a datelor (Data Definition Language, DDL)

limbaj de dirijare a datelor (Data Control Language, DCL).

O să subliniem, că acestea nu sânt limbaje aparte, ci sânt diverse comenzi a unui limbaj. Astfel de divizare sa făcut numai din punctul de vedere a diverselor valori funcționale a comenzilor date.

Limbajul de manipulare a datelor se utilizează, cum se vede din denumire, pentru manipularea datelor în tabelele bazei de date. El este format din 4 comenzi de bază.

Tab.3.1.

Comenzile de bază a limbajului SQL

Din punctul de vedere a interfeței aplicate există două tipuri de comenzi SQL:

SQL interactiv

SQL incorporat.

SQL interactiv se utilizează în utilize speciale (de tipul WISQL sau DBD), care dau posibilitatea în regim interactiv introducerea interpelărilor cu utilizarea comenzilor SQL, trimiterea lor pentru execuție la server și pentru a primi rezultate în ferreastra care este destinată pentru aceasta. SQL incorporat se folosește în programele aplicate, și le permite să trimită interpelări la server și să prelucreze rezultatele primite, și cu tot mai mult combinând orientare – set și orientarea – record.

3.2.5. Operații relaționale. Comenzile limbajului de manipulare cu datele

Sarcina principală de pregătire a interpelării – crearea legăturii dintre sistemul de gestiune al BD care va executa interpelarea, și setul de date al componentei TQuery respective. Dacă acest lucru a fost realizat, atunci se determină modalitatea de executare a interpelării – accesul local prin intermediul driver-ului standard sau transmiterea textului cererii la server. După aceasta se setează valorile pentru variabilele parametrilor interpelării.

Dacă interpelarea se execută local, atunci ea se transmite prin intermediul driver-ului standard la sistemului de gestiune al BD respectiv pentru a fi executată de acesta. Prin legătura creată la pregătirea interpelării rezultatul se transmite în setul de date al aplicației.

Dacă interpelarea a fost adresată serverului SQL, atunci se presupune că ea are o sintaxă specifică, corespunzătoare serverului dat. În acest caz toată pregătirea specială a parametrilor interpelării se execută de partea serverului. BDE asigură numai transmiterea interpelării și întoarcerea rezultatului de execuție la setul de date al aplicației.

Încă o modalitate de executare a interpelărilor pentru serverul SQL – adresarea directă la funcțiile API a serverului respectiv. Aceasta însă, este metoda cea mai rapidă, dar și cea mai complicată pentru elaboratori.

Cea mai importantă comandă a limbajului de manipulare cu datele este comanda SELECT. După simplitatea sintaxei ei se ascunde o mare bogăție de posibilități.

Forma cea mai simplă a instrucțiunii SELECT este:

SELECT * FROM table_name;

Unde table_name este numele tabelului din care vom obține datele, iar asteriscul (*) înseamnă selectarea a tuturor câmpurilor din tabel.

Sintaxa instrucțiunii SELECT este următoarea:

SELECT [DISTINCT] columns

FROM tables

WHERE <search_conditions>

[GROUP BY column HAVING <search_condition>]

ORDER BY <sort_order>;

Descrierea clauzelor:

SELECT columns Lista câmpurilor ce vor fi selectate

DISTINCT Cuvânt-cheie opțional care elimină înscrierile duble

FROM tables Identifică tabelele care vor fi utilizate

WHERE <search_conditions> Specifică condiția de căutare care va fi utilizată pentru a limita numărul înscrierilor obținute la subset al numărului total de înscrieri valabile.

GROUP BY column Grupează înscrierile obținute în acord cu valoarea coloanei specificate.

HAVING <search_conditions> Specifică condiția de căutare care va fi utilizată împreună cu clauza GROUP BY.

ORDER BY <sort_order> Specifică ordinea de sortare a înscrierilor care vor fi întoarse de SELECT.

Ordinea clauzelor în instrucțiunea SELECT este importantă, însă numai SELECT și FROM sunt clauzele strict necesare.

SELECT poate, de asemenea, întoarce date din multiple tabele, setând lista numelor tabelelor în clauza FROM, separate prin virgulă.

WHERE

Clauza WHERE a instrucțiunii SELECT urmează după clauzele SELECT și FROM.

Dacă utilizăm clauza ORDER BY, atunci clauza WHERE trebuie folosită înaintea ei. Clauza WHERE testează datele după condiția dată, iar clauza SELECT întoarce numai înscrierile ce satisfac condiției respective. De exemplu, instrucțiunea:

SELECT NAME_S, NAME_L, KD_Jud

FROM S_NAM_PR

WHERE KD_Jud = "08";

întoarce numai înscrierile pentru care KD_jud este “08”.

WHERE condition;

column –câmp din tabel

operator – operator de comparare (descris în tabelul de mai jos)

value – este o valoare sau un set de valori cu care se compară câmpul respectiv. Value poate fi compusă din două sau mai multe valori ca operanzi ai operatorilor aritmetici.Condiția de căutare folosește următoarele tipuri de operatori:

Operator Descrierea

Operatori de comparare Se folosește pentru a compara data din câmpul respectiv cu valoarea din condiția de căutare. Exemple <, >, <=, >=, =, and <>. Alți operatori includ BETWEEN, CONTAINING, IN, IS NULL, LIKE, și STARTING WITH.

Operatori aritmetici Se folosesc pentru a calcula și evalua valorile condițiilor de căutare. Operatorii sunt +, -, *, și /.

Operatorii logici Se folosesc pentru a combina condițiile de căutare sau nega condiția. Operatorii logici: NOT, AND, și OR.

Când înscrierea respectivă se compară la condiția de căutare, una din cele trei valori este întoarsă:

True: Înscrierea a satisfăcut condiției specificate în clauza WHERE.

False: Înscrierea nu a satisfăcut condiției specificate în clauza WHERE.

Unknown: Câmpul din clauza WHERE conține o valoare necunoscută care nu poate fi evaluată din cauza valorii NULL.

Operatorul LIKE

Operatorul LIKE ne dă posibilitatea de a folosi caractere speciale în text. Caracterele speciale sînt acele caractere care au o semnificație specială când sînt folosite în condiția de căutare. Caracterul (%) va semnifica – unul sau mai multe caractere, (_) – un singur caracter.

Operatorii Logici

Toate exemplele de până acum au inclus numai câte o condiție de căutare. Însă, în SQL avem posibilitatea de a include orice număr de condiții de căutare în clauza WHERE combinându-le cu ajutorul operatorilor AND sau OR.

Când AND apare între condițiile de căutare, ambele condiții trebuie să fie adevărate pentru ca înscrierea să fie întoarsă.

Când OR apare între condițiile de căutare, numai una din condiții trebuie să fie adevărată pentru ca înscrierea respectivă să fie întoarsă.

Când introducem condiții de căutare compuse, trebuie să ținem cont de ordinea de evaluare a condițiilor.

Funcțiile agregate

SQL pune la dispoziție funcții agregate care calculează o singură valoare dintr-un grup de valori. Grupul de valori sunt toate datele dintr-un câmp particular pentru setul dat de înscrieri. Funcțiile agregate pot fi folosite în cadrul clauzei SELECT, sau oriunde în cadrul instrucțiunii SELECT unde se folosește valoarea.

Clauza HAVING

La fel ca și clauza WHERE care reduce numărul înscrierilor întoarse de clauza SELECT, clauza HAVING poate fi folosită pentru a reduce numărul de înscrieri întoarse de clauza GROUP BY. La fel ca și clauza WHERE, clauza HAVING are condiție de căutare. În clauza HAVING condiția de căutare corespunde tipic unei funcții agregate folosite în clauza SELECT.

De obicei, cererea întoarce înscrieri în “ordinea naturală”, ordine în care înscrierile sînt găsite în tabel. Deoarece păstrarea datelor în tabele este de obicei neordonată (nesortată), rezultatul cererii va fi de asemenea nesortat. Clauza ORDER BY sortează rezultatul în acord cu câmpul specificat. Fiecare coloană din clauza ORDER BY trebuie de asemenea să apară și în clauza SELECT a instrucțiunii.

INSERT

Insert înscrie unul sau mai multe tuple de date într-un tabel sau view existent. Insert este una din privilegiile bazei de date controlate de către comenzile GRANT și REVOKE.

Valorile sunt înscrise în tuplu în ordinea coloanelor din tabelă, doar dacă nu este indicată o listă de coloane vizate. Dacă lista de coloane vizate prezintă un subset al coloanelor disponibile, valorile nule sau implicite automat sunt înscrise în toate coloanele nevizate.

Dacă lista opțională a coloanelor vizate este omisă, clauza VALUES trebuie să asigure valori pentru introducerea în toate coloanele tabelei.

Pentru a introduce un singur tuplu de date, clauza VALUES trebuie să asigure o listă specifică de valori pentru insertare.

Pentru a introduce mai multe tuple de date, trebuie să fie specificată o select expresie care extrage datele dintr-o tabelă pentru a le introduce în tabela aceasta. Coloanele selectate trebuie să corespundă cu coloanele vizate pentru introducere.

Este permis de a alege câmpuri de date din același tabel în care dorim să efectuăm introducerea, dar așa practică nu se recomandă deoarece poate cauza in introducerea infinită de tuple.

UPDATE

Modifică parțial sau în întregime tuplul existent de date dintr-un tabel sau view. Disponibil în SQL, DSQL și isql.

UPDATE modifică unul sau mai multe tuple dintr-un tabel sau view existent. UPDATE este una din privilegiile SGBD controlate de către GRANT și REVOKE

DELETE

Modifică parțial sau în întregime tuplul existent de date dintr-un tabel sau view. Disponibil în SQL, DSQL și isql.

DELETE specifică unul sau mai multe tuple pentru ștergere din tabel sau view care poate fi modificat. DELETE este una din privilegiile SGBD controlate de către GRANT și REVOKE.

3.2.6. Avantajele MySQL

MySQL susține limbajul de interpelări SQL în standardul ANSI 92 și în afară de aceasta are un șir de extensii la acest standard, care nu există la nici o altă SGBD.

Posibilitățile MySQL (din cele mai importante) sunt:

Menține un număr nelimitat de utilizatori, ce lucrează concomitent cu baza de date;

Numărul de rânduri din tabele poate atinge cifra de 50 mln.;

Execuția rapidă a comenzilor. Este, posibil, cel mai rapid server din cele existente;

Sistemă simplă și efectivă de securitate.

3.2.7. Neajunsurile MySQL

MySQL este într-adevăr un server foarte rapid, dar pentru atingerea acestora elaboratorii au trebuit să jertfească cu unele cerințe către SGBD-urile relaționale. În MySQL sunt lipsă:

Susținerea interpelărilor interioare, de tipul SELECT * FROM table1 WHERE id IN (SELECT * FROM table2). Se spune că aceasta va fi posibil în versiunea 3.23;

Nu este realizată susținerea tranzacțiilor. În schimb se propune utilizarea LOCK/UNLOCK TABLE;

Nu există menținerea cheilor externe (foreign);

Nu există susținerea procedurilor și trigger-ilor;

După cum susțin creatorii anume punctele 2-4 dau posibilitatea atingerii vitezei mari. Realizarea lor ar duce la micșorarea productivității serverului. Acestea, de fapt, nu sunt critice la crearea web-aplicațiilor, care împreună cu rapiditatea mare și prețurile mici, au permis serverului să devină popular.

3.3. Crearea rapoartelor pe baza datelor din baza de date

3.3.1. Nuțiuni de bază

Pentru crearea rapoartelor în Delphi este inclus sistemul QuickReport. Componentele acestui sistem sunt plasate pe pagina Qreport a paletei de componente.

QuickReport utilizează generatorul de rapoarte, care este alcătuit dintr-o mulțime de secții. Secția (band) – o parte a raportului sau un capitol, în care se conține un text oarecare, imagine, informație în formă grafică etc. Secția se află ca container pentru alte componente, care introduc în raport informație textuală sau grafică.

Dacă secția și componentele plasate în ea sânt legate cu baza de date, atunci conținutul acestei secții se va tipări de atâtea ori, câte înscrieri conține sursa de date. În așa fel, este de ajuns de a plasa componentele, care sânt legate cu datele, în secție, iar valorile care se tipăresc și volumul lor vor fi dirijate automat de baza de date.

Cum la componentele, legate cu datele, se poate de specificat tabelele de bază și tabelele de ajutor, așa și între secții se pot specifica aceste relații. În așa fel, toate posibilitățile utilizate în aplicații, cu același succes se realizează și la rapoarte.

3.3.2. Componentele utilizate la crearea rapoartelor.

Pe pagina paletei componentelor Qreport sânt situate mai mult de douăzeci de componente, folosite la crearea rapoartelor.

Componentul de bază este TquickRep, care determină comportarea raportului în întregime. Cu ajutorul altor componente se creează părțile componente ale raportului.

TQRBand – pregătirea pentru plasarea datelor, titlu etc. Raportul, în general se alcătuiește din componente TQRBand, care realizează:

secția pentru titlul raportului;

secția pentru titlul paginii;

secția pentru titlul unui grup;

secția pentru denumirile coloanelor raportului;

secția pentru datele detaliate, presupus pentru redarea datelor a celui de mai de jos nivel de detaliere;

secția părții de jos a grupului;

secția părții de jos a paginii;

secția părții de jos a raportului.

TQRStringBand – are aceeași specificare, ca ți TQRBand. Se deosebește prin aceea că are incorporat lista de rânduri Items, conținutul căreia stă vizibil în regim de tipar ți în timpul regimului înainte de tipar, dacă pe componentul TQRStringsBand este plasat componentul TQRExpr.

TQRSubDetail – determină secția, în care se plasează datele tabelului detaliat în cazul legăturii principal – detaliat în raport pe baza legăturii relaționale deja existente între tabelele bazei de date.

TQRChildBand – bandă subordonată. Se leagă de banda principală și servește pentru lărgirea ei.

TQRGroup – se folosește pentru gruparea datelor în raport.

TQRLabel – face posibil de plasat în raport un rând textual arbitrar.

TQRDBText – servește pentru redare în raport conținutul unui câmp de tip text dintr-un set de date.

TQRExpr – servește pentru redarea valorilor, care sânt rezultatul calculului unei expresii. Algoritmul calculării expresiilor se construiește cu ajutorul editorului de formule a componentului dat.

TQRSysData – servește pentru redarea în raport a mărimii de sistem: data, timpul, numărul paginii etc.

TQRMemo – introduce în raport un text cu mai multe rânduri.

TQRExprMemo – se folosește pentru crearea câmpurilor calculabile cu multe rânduri.

TQRRichText – introduce în raport un text cu multe rânduri de format RTF.

TQRDBRichText – servește pentru redarea în raport a câmpurilor bazei de date, care conțin text cu multe rânduri de format RTF.

TQRShape – servește pentru redarea în raport a figurilor grafice.

TQRImage – servește pentru redarea în raport a informației grafice, sursă a căror este câmp a setului de date.

Tab.3.2.

Proprietățile componentului TquickRep.

continuarea Tab.3.2.

4. Descrierea programului

4.1. Structura bazei de date

Ses

Fig. 10 Structura bazei de date “Policlinica nr: 1”.

4.2 Schema bloc a programului

4.3. Crearea și descrierea tabelelor.

Acest listing este folosit pentru a crea tabele în baza de date sub numele policlinica. Hostul la serverul bazei de date MySQL este localhost.

# MySQL-Front Dump 2.1

#

# Host: localhost Database: policlinica

#–––––––––––––––––––

# Server version 3.23.44-nt

#

# Table structure for table 'fishemed'

#

CREATE TABLE fishemed (

FisaID tinyint(11) unsigned NOT NULL auto_increment,

PacientID int(11) NOT NULL default '0',

ID int(11) NOT NULL default '0',

PersonalID int(11) NOT NULL default '0',

CodFisa int(15) NOT NULL default '0',

PRIMARY KEY (`FisaID`)

) TYPE=MyISAM;

CREATE TABLE – este utilizat pentru a crea o tabelă în această bază de date. FisaID, PacientID, ID, PersonalID, CodFisa – sunt câmpurile tabelei fishemed. Fiecare câmp este definit cu diferite tipuri:

TINYNT [(M)]

Descrierea: un număr foarte mic.

Atributele admisibile: AUTO_INCREMENT, UNSIGNED,ZEROFILL.

Intervalul: de la -128 până la 127 (de la -27 până la 27-1) sau de la 0 până la 255 (de la 0 până la 28-1), dacă e UNSIGNED.

Setări de bază: NULL, dacă coloana dată poate avea valoarea NULL, 0, dacă NOT NULL.

Dimensiunea: 1 bayt

INT [(M)]

Descrierea: un număr întreg normal.

Atributele admisibile: AUTO_INCREMENT, UNSIGNED,ZEROFILL.

Intervalul: de la -2147483648 până la 2147483647 (de la -231 până la 231-1) sau de la 0 până la 4294967295 (de la 0 până la 232-1), dacă e UNSIGNED.

Setări de bază: NULL, dacă coloana dată poate avea valoarea NULL, 0, dacă NOT NULL.

Dimensiunea: 4 bayt.

Sinonim: INTEGER [(M)].

#

# Dumping data for table 'fishemed'

#

INSERT INTO `fishemed` VALUES("1","2","1","3","22");

INSERT INTO `fishemed` VALUES("2","3","5","6","33");

INSERT INTO `fishemed` VALUES("3","1","6","4","44");

INSERT INTO `fishemed` VALUES("4","4","3","5","11");

INSERT INTO `fishemed` VALUES("5","5","4","6","55");

INSERT INTO `fishemed` VALUES("6","6","2","7","66");

INSERT INTO `fishemed` VALUES("7","7","6","8","77");

INSERT INTO `fishemed` VALUES("8","8","7","9","88");

INSERT INTO `fishemed` VALUES("9","9","8","10","99");

INSERT INTO `fishemed` VALUES("10","10","9","11","12");

INSERT INTO `fishemed` VALUES("11","11","2","12","13");

INSERT INTO `fishemed` VALUES("12","12","10","13","14");

INSERT INTO `fishemed` VALUES("13","13","3","14","15");

INSERT INTO `fishemed` VALUES("14","14","10","15","16");

INSERT INTO `fishemed` VALUES("15","15","4","16","17");

INSERT INTO `fishemed` VALUES("16","16","5","17","18");

INSERT INTO `fishemed` VALUES("17","17","0","18","19");

INSERT INTO `fishemed` VALUES("18","18","0","19","20");

INSERT INTO `fishemed` VALUES("19","19","0","20","21");

INSERT INTO `fishemed` VALUES("20","20","0","21","22");

INSERT INTO `fishemed` VALUES("21","21","0","22","23");

INSERT INTO `fishemed` VALUES("22","22","0","23","24");

INSERT INTO `fishemed` VALUES("23","23","0","24","25");

INSERT INTO `fishemed` VALUES("24","24","0","25","26");

INSERT INTO `fishemed` VALUES("25","25","0","26","27");

INSERT INTO `fishemed` VALUES("26","26","0","27","28");

INSERT INTO `fishemed` VALUES("27","27","0","1","0");

Comanda INSERT de o dată adaugă o înscriere în tabelă. Sintacsa comenzii INSERT este următoarea:

INSERT INTO numele_tabelei (numele_cîmpului1, numele_cîmpului2,…) VALUES (‘[valoarea_câmpului_1]’, ‘[valoarea_câmpului_2]’,…);

Din listingul de mai sus am introdus date în tabelul fishemed.

#

# Table structure for table 'guestbook'

#

CREATE TABLE `guestbook` (

`guestbook_id` int(10) unsigned NOT NULL auto_increment,

`content` text,

`reply` text,

`href` varchar(200) default NULL,

`user_name` varchar(50) default NULL,

`email` varchar(50) default NULL,

`remote_addr` varchar(50) default NULL,

`user_agent` varchar(200) default NULL,

`issuedate` datetime default NULL,

PRIMARY KEY (`guestbook_id`)

) TYPE=MyISAM;

#

# Dumping data for table 'guestbook'

#

#

# Table structure for table 'istorie'

#

CREATE TABLE `istorie` (

`Nr` tinyint(11) unsigned NOT NULL auto_increment,

`ID` int(11) unsigned NOT NULL default '0',

`PacientID` int(11) unsigned NOT NULL default '0',

PRIMARY KEY (`Nr`)

) TYPE=MyISAM;

În listingul de mai sus creăm tabelă sub numele istorie care are câmpurile: Nr, ID, PacientID.

#

# Dumping data for table 'istorie'

#

#

# Table structure for table 'orar'

#

CREATE TABLE `orar` (

`ID` tinyint(11) unsigned NOT NULL auto_increment,

`Ziua` varchar(15) NOT NULL default '0',

`DataOra` datetime NOT NULL default '0000-00-00 00:00:00',

`PacientID` int(11) NOT NULL default '0',

`TipConsultatie` varchar(100) NOT NULL default '0',

`PlataConsult` varchar(25) NOT NULL default '0',

`Diagnosul` varchar(255) NOT NULL default '0',

`PersonalID` int(11) unsigned NOT NULL default '0',

PRIMARY KEY (`ID`)

) TYPE=MyISAM;

După listingul de creare a tabelului orar am diefinit unele cimpuri cu tipuri noi.

VARCHAR [(M)]

Descrierea: rindurile variabile de lungimea de la 0 până la M simboluri. Argumentul M trebuie să fie caractere cu valorile de la 1 până la 255 (în versiunile până la MySQL 3.23) și de la 0 până la 255 (în versiunile MySQL 3.23 și mai sus). Dacă lungimea șirului depășește M simboluri, simbolurile în surplus la înscriere sunt înlăturate.

Atributele admisibile: BINARY.

Setări de bază: NULL, dacă coloana dată poate avea valoarea NULL, „”, dacă NOT NULL.

Dimensiunea: dimensiunea simbolului plus 1 bayt pentru înscrierea dimensiunii.

Comparare: registrul simbolurilor nu se consideră (se consideră dacă este BINARY).

#

# Dumping data for table 'orar'

#

INSERT INTO `orar` VALUES("1","VINERI","2002-07-11 12:30:00","1","sas","150","sanatos","8");

INSERT INTO `orar` VALUES("2","JOI","2002-05-12 08:45:00","2","Test in actiune","150","bolnav","7");

INSERT INTO `orar` VALUES("3","MIERCURI","2002-05-13 09:10:00","2","Cu privirea","58","Sanatos","6");

INSERT INTO `orar` VALUES("4","LUNI","2002-10-10 09:00:00","7","simpla","100","sanatos","5");

INSERT INTO `orar` VALUES("5","LUNI","2002-10-10 09:30:00","1","jkhkj","35","Bolnav grav","4");

INSERT INTO `orar` VALUES("6","MIERCURI","2002-05-16 08:30:00","2","vorbala","21","bolnav","2");

INSERT INTO `orar` VALUES("7","MARTI","2002-07-18 11:00:00","3","hdfghfgh","55","Sanatos","9");

INSERT INTO `orar` VALUES("8","MARTI","2001-03-04 10:00:00","4","hdfghfgh","80","Sanatos","1");

INSERT INTO `orar` VALUES("9","VINERI","2002-12-12 12:15:00","10","simpla","25","Sanatos","2");

INSERT INTO `orar` VALUES("10","JOI","0000-00-00 00:00:00","13","gdsfg","12","Bolnav. Nevoie de internare imediata","3");

În listingul de mai sus este utilizat pentru a introduce date în tabela orar.

#

# Table structure for table 'pacienti'

#

CREATE TABLE `pacienti` (

`PacientID` tinyint(11) unsigned NOT NULL auto_increment,

`Nume` varchar(25) NOT NULL default '0',

`Prenume` varchar(25) NOT NULL default '0',

`CodPersonal` int(10) unsigned NOT NULL default '0',

`NrFisa` int(10) unsigned NOT NULL default '0',

`Boli` varchar(255) NOT NULL default '0',

`PersonalID` int(11) unsigned NOT NULL default '0',

PRIMARY KEY (`PacientID`)

) TYPE=MyISAM;

Din listingul de mai sus am creat o alta tabelă sub numele pacienți care este compus din câmpurile: PacientID, Nume, Prenume, CodPersonal, NrFisa, Boli, PersonalID.

#

# Dumping data for table 'pacienti'

#

INSERT INTO `pacienti` VALUES("1","Andrei","Petrovici","22","22","Boala1","2");

INSERT INTO `pacienti` VALUES("2","Victor","Martinovici","11","11","Boala2","1");

INSERT INTO `pacienti` VALUES("3","Maria","Petrovna","33","33","Boala1111","3");

INSERT INTO `pacienti` VALUES("4","Eugen","Atamanenco","44","44","Boala1222","4");

INSERT INTO `pacienti` VALUES("5","Sasa","Leu","55","55","Boala1","5");

INSERT INTO `pacienti` VALUES("6","Victor","Besliu","66","66","Boala1","1");

INSERT INTO `pacienti` VALUES("7","Andrei","Stefaniuc","77","77","Boala1","5");

INSERT INTO `pacienti` VALUES("8","Alexandru","Putere","88","88","Boala1","5");

INSERT INTO `pacienti` VALUES("9","Viorel","Rusu","99","99","Boala1","4");

INSERT INTO `pacienti` VALUES("10","Serghei","Ivanovici","12","12","Boala1","4");

INSERT INTO `pacienti` VALUES("11","Vitalie","Popa","13","13","Boala1","1");

INSERT INTO `pacienti` VALUES("12","Igor","Istrati","14","14","Boala1","3");

INSERT INTO `pacienti` VALUES("13","Arcadie","Popovici","15","15","Boala1","2");

INSERT INTO `pacienti` VALUES("14","Ruslan","Pislaru","16","16","Boala1","1");

INSERT INTO `pacienti` VALUES("15","Sergiu","Victorovici","17","17","Boala1","1");

INSERT INTO `pacienti` VALUES("16","Sandu","Cretu","18","18","Boala1","3");

Din listingul de mai sus am introdus date în tabela pacienti.

#

# Table structure for table 'personal'

#

CREATE TABLE `personal` (

`PersonalID` tinyint(11) unsigned NOT NULL auto_increment,

`Nume` varchar(25) NOT NULL default '0',

`Prenume` varchar(25) NOT NULL default '0',

`Functie` varchar(100) NOT NULL default '0',

`NrCabinet` int(15) NOT NULL default '0',

`CodPersonal` int(10) NOT NULL default '0',

`SectieID` int(11) unsigned NOT NULL default '0',

PRIMARY KEY (`PersonalID`)

) TYPE=MyISAM;

Din listingul de mai sus am creat tabela sub numele personal cu câmpurile: PersonalID, Nume, Prenume, Functie, NrCabinet, CodPersonal, SectieID.

#

# Dumping data for table 'personal'

#

INSERT INTO `personal` VALUES("1","Vasea","Petrea","Reumatolog","211","1111","1");

INSERT INTO `personal` VALUES("2","Vasea","Ion","Reumatolog, Dr. st. Medic","215","2222","1");

INSERT INTO `personal` VALUES("3","Fedea","Vasile","Reumatolog","218","3333","1");

INSERT INTO `personal` VALUES("4","Ion","Ion","Reumatolog","220","4444","1");

INSERT INTO `personal` VALUES("5","Dumitru","Pavel","Reumatolog","222","5555","1");

INSERT INTO `personal` VALUES("6","Elena","Maria","Sora medicala","212","6666","1");

INSERT INTO `personal` VALUES("7","Ion","Alexei","Traumatolog","315","8888","2");

INSERT INTO `personal` VALUES("8","Petrea","Petrovici","Ortoped","321","9999","2");

INSERT INTO `personal` VALUES("9","Andrei","Roscov","Traumatolog","322","1112","2");

INSERT INTO `personal` VALUES("10","Victor","Victor","Traumatolog","325","1113","2");

INSERT INTO `personal` VALUES("11","Elena","Negruzi","Ortoped","318","2225","2");

INSERT INTO `personal` VALUES("12","Anna","Alegrovna","Traumatolog","319","2227","2");

INSERT INTO `personal` VALUES("13","Vika","Petrovna","Sora medicala","320","3322","2");

INSERT INTO `personal` VALUES("14","Valea","Lena","Stomatolog","312","4456","3");

INSERT INTO `personal` VALUES("15","Serghei","Vitkov","Stomatolog","313","3123","3");

INSERT INTO `personal` VALUES("16","Ion","Morari","Chirurg","510","6546","5");

INSERT INTO `personal` VALUES("17","Valera","Madan","Stomatolog","317","5454","3");

INSERT INTO `personal` VALUES("18","Andrei","PLamadeala","Chirurg","513","5543","5");

INSERT INTO `personal` VALUES("19","Elena","Victorovna","Reabilitolog","421","8814","4");

INSERT INTO `personal` VALUES("20","Anna","Rotari","Reabilitolog","422","1245","4");

INSERT INTO `personal` VALUES("21","Marina","Fedorova","Reabilitolog","420","2541","4");

INSERT INTO `personal` VALUES("22","Anastasia","Victorovna","Reabilitolog","418","6521","4");

INSERT INTO `personal` VALUES("23","Viorica","Pavlovna","Reabilitolog","411","2543","4");

INSERT INTO `personal` VALUES("24","Jenea","Atamanenco","Stomatolog","316","1597","3");

INSERT INTO `personal` VALUES("25","Alexandra","Sipitilova","Chirurg","515","2547","5");

INSERT INTO `personal` VALUES("26","Victoria","Morozova","Chirurg","520","6958","5");

INSERT INTO `personal` VALUES("27","Natalia","Fedorova","Ortoped","217","4589","2");

În listingul de mai sus am introdus datele in tabela personal.

#

# Table structure for table 'sectii'

#

CREATE TABLE `sectii` (

`SectieID` tinyint(11) unsigned NOT NULL auto_increment,

`NumeSec` varchar(50) NOT NULL default 'Secret',

`Etaj` int(5) NOT NULL default '1',

`Telefon` int(15) NOT NULL default '1',

`SefSec` varchar(50) NOT NULL default '0',

`CodSec` int(15) NOT NULL default '0',

`Boli` varchar(255) NOT NULL default '0',

PRIMARY KEY (`SectieID`)

) TYPE=MyISAM;

În listingul de mai sus am creat tabela secții, care este compus din următoarele câmpuri: SectieID, NumeSec, Etaj, Telefon, SefSec, CodSec, Boli.

#

# Dumping data for table 'sectii'

#

INSERT INTO `sectii` VALUES("1","Cardiologie","1","124578","Olga Samoilov","20101","Boala1, Boala2, Boala3, Boala4.");

INSERT INTO `sectii` VALUES("2","Traumatologie si Ortopedie","3","326598","Razbovski Vadim Alexei","20202","Boala1, Boala2, Boala3, Boala4.");

INSERT INTO `sectii` VALUES("3","Stomatologie","4","589647","Elena Tintiuc","20303","Boala1, Boala2, Boala3, Boala4.");

INSERT INTO `sectii` VALUES("4","Reabilitare","5","123265","R. Crudu","20404","Boala1, Boala2, Boala3, Boala4.");

INSERT INTO `sectii` VALUES("5","Chirurgie","2","258963","I. Rosca","20505","Boala1, Boala2, Boala3, Boala4.");

În listingul de mai sus am introdus date în tabelul sectie.

5. PARTEA ECONOMICĂ A PROIECTULUI

5.1. Planificarea rețea pentru “Proiectarea bazei de date pentru policlinica nr.1”

Proiectele tehnologice contemporane sunt caracterizate de următoarele particularități:

tehnica nouă utilizată este foarte complexă și este construită utilizând ultimele elaborări științifice.

accelerării vitezei de elaborare a proiectelor.

proiectele referitoare la complexele tehnicii de calcul și softului sunt supuse uzurii morale foarte rapide.

necesitatea proiectării de sistemă la elaborarea softului și sistemelor tehnice.

Toate acestea au dus la necesitatea de creare a noi metode de planificare. Una din aceste metode prezintă modelarea procesului de elaborare, adică prezentarea legăturilor și caracteristicilor lucrărilor în procesul elaborării proiectului.

Metodele tradiționale de planificare presupun utilizarea celor mai simple modele de construirea a diagramelor de tip consecutive și ciclice.

Dar în asemenea diagrame nu este posibil de a prezenta legăturile dintre niște lucrări, de unde rezultă imposibilitatea de a afla cât de importantă este lucrarea dată pentru executarea scopului final. Pot apărea diferite întârzieri în timp, ce apar pe porțiuni de interconectare a lucrărilor, care sunt complicat de prezentat în diagrame. De obicei, în procesul dirijării se culege informația despre lucrările efectuate și aproape nu se culege și nu se prezintă informația referitor la prognoza finisării lucrărilor viitoare, de aceia este imposibil de a prognoza rezultatele diferitor variante de soluționare la modificările planului inițial de lucru. Este de asemenea complicat de a reflecta și dinamica lucrărilor, de a corecta toată diagrama în legătură cu schimbarea termenilor de efectuare a unei lucrări, ce este necesar de a efectua ca să nu schimbăm termenul de efectuare a întregului complex de lucrări.

Aceasta este doar o parte mică din neajunsurile metodelor utilizate în prezent pentru planificarea și prezentarea grafică a planurilor de pregătire a producerii. Aceste neajunsuri în mare pare sunt excluse de către sistemele de planificare și dirijare în rețea utilizate în prezent.

Sistemele de planificare și gestiune în rețea prezintă un complex de metode grafice și de calcul, metode de control și de organizare, care asigură modelarea, analiza și reconstruirea dinamică a planului de executare a proiectelor complexe.

Sistemele de planificare și gestiune în rețea este o metodă cibernetică creată pentru gestiunea cu sisteme dinamice complexe cu scopul asigurării condiției de optim pentru careva indicatori. Așa indicatori, în dependență de condițiile concrete, pot fi:

timpul minim pentru elaborarea întregului complex de lucrări;

costul minim al elaborării proiectului;

economia maximală a resurselor.

Particularitățile sistemului de planificare și gestiune în rețea în general sunt următoarele:

se realizează metoda proiectării de sistem la rezolvarea problemelor de organizare a gestiunii proceselor;

se utilizează modelul informațional-dinamic special (graful-rețea) pentru descrierea matematico-logică a procesului și calculul automat (conform algoritmului) a parametrilor acestui proces (durata, costul, forțele de muncă, etc.);

se utilizează sisteme de calcul pentru prelucrarea datelor operative pentru calculul indicatorilor și primirea rapoartelor analitice și statistice necesare.

Documentul de bază în sistemul de planificare și gestiune în rețea este graful-rețea (modelul rețea), care prezintă modelul informațional-dinamic, în care sunt prezentate legăturile și rezultatele tuturor lucrărilor, necesare pentru atingerea scopului final.

Tab. 5.1.

Graful-rețea.

Fig. 12 Graful-rețea pentru implementarea “Proiectarea bazei de date pentru policlinica nr.1”.

Fig. 12 Graful-rețea pentru implementarea “Proiectarea bazei de date pentru policlinica nr.1”. (continuare).

Tab. 5.2.

Durata efectuării lucrărilor.

Tab. 5.3.

Calculele parametrilor grafului-rețea.

Tab. 5.4.

Componența grupului de lucru.

5.2. Evaluarea economică a proiectului.

Tab. 5.5.

Executarea lucrărilor de către lucrători.

Pentru salariu remunerat de bază sau cheltuit

Sb = 3440,00 + 2490,00 + 1475,00 = 7405,00lei.

Salariu auxiliar (21%)

Sa = 7405,00 0,21 = 1555,05 lei.

Defalcări în Fondul Social (28%)

Cfs = (7405,00 + 1555,05) 0,29 = 2598,41 lei.

Cheltuielile totale pentru achitarea salariului

Ct = 7405,00 + 1555,05 + 2598,41 = 11558,46 lei

Programul va fi scris la calculatoare arendate cu 8 lei pe oră.

Proiectarea protocolului a necesitat de 332 de ore de lucru la calculator. De aici rezultă ca suma cheltuielilor pentru ore-mașină va constitui:

Smas = 332,00 * 8 = 2656,00 lei.

Tab. 5.6.

Cheltuielile pentru procurarea softului necesar.

De asemenea s-a procurat literatură tehnică în valoare de 360,00 lei și rechizite de birou în valoare de 52 lei.

În timpul elaborării proiectului au fost implicate următoarele mijloace tehnice:

calculator personal

imprimantă

Amortizarea se calculează confo4rm formulei de uzură directă:

unde Ci – costul utilajului;

Na – norma de uzură;

Tu – timpul de utilizare.

Tab. 5.7.

Calculul amortizării

Pentru elaborarea programului s-a utilizat calculatorul de tip Pentium II Celeron 466 MHz. Un astfel de calculator consumă 300 W/h. Imprimantă laser H.P. ce consumă până la 60 W/h. Calculul cheltuielilor de energie electrică se ia în conformitate cu timpul de utilizare a utilajului ținând cont că ziua de muncă are durata de 8 ore.

Pentru calculul energiei consumate utilizăm formula:

Wunit = Pcons • tfuncț ,

unde Pcons – este puterea de consum a unității timp de o oră;

tfuncț – este timpul de funcționare a unității.

Wcalc = (3 *300) • 42 • 8 = 302400 W/h = 302,4 kW/h.

Wimprim = 60 • 4 • 8 = 1920 W/h =1,92 kW/h.

La momentul elaborării proiectului tariful pentru energia electrică este de 0,68 lei pentru un kW/h. În total obținem suma necesară pentru a acoperi cheltuielile de energie electrică.

Σ Wunit =300.2 + 1,92 = 302,12 kW/h.

Cheltuielile de energie electrică constituie:

Chen.electr. = 302,12 * 0,68 = 205,45 lei.

Tab. 5.8.

Cheltuielile prețului de cost și prețului de livrare al “Bazei de date pentru policlinica Nr:1”

5.3. Calculul eficienței economice

Cheltuielile de producere pentru proiectul dat se evaluează din adunarea cheltuielilor sus enumerate. În total această sumă prezintă valoarea – 24016.23 lei.

Tot mai sus este calculat și beneficul planificat la realizarea proiectului: 5542,20 lei

Să presupunem că cheltuielile de proiectare se vor recupera după vânzarea a 5 copii: B = 5542,20 * 5 = 27711 lei.

Având datele despre cost, eficiența economică se determină după următoarea formulă:

Eecp = B – En Ipr

unde Eecp – efectul economic anual;

B – beneficiul;

En – coeficientul de eficiență a investițiilor capitale de normă (0,2);

Cpr – costul proiectului.

Eecp = 27711 – 0,2 24016,21 = 22907,76

Un alt coeficient important în aprecierea eficienței economice reprezintă coeficientul eficienței investițiilor capitale, și timpul de recuperare a investițiilor, calculat după următoarele formule:

= 24016,21 / 22907,76 = 1,05 (ani)

Să calculăm coeficientul eficienței investițiilor capitale prin calculul real – Ec

Ec = 1/ Trec. = 1/ 1,05 = 0,95

Estimarea eficienței economice presupune compararea rezultatelor calculate cu cele normative. Investirea mijloacelor în proiectul dat se recunosc efective în cazul când avem dependența:

Ec ≥ En

Comparând rezultatele obținute cu cele normative obținem:

( Ec = 0,95 ) > ( En = 0,2 ) ( proieczul dat este rentabil)

De unde rezultă, că investițiile pentru proiectarea SOFT-ului de validare client/server sînt economic eficiente.

5.4. Evaluarea eficacității de la implementarea Proiectului “ Proiectarea bazei de date pentru policlinica nr.1”

Tabelul 5.9.

Evaluarea eficacității sociale de la implementarea proiectului “ Proiectarea bazei de date pentru policlinica nr.1”.

Acest program este destinat pentru utilizarea în domeniul medicinii, adică pentru simplificarea lucrului cu documentația din policlinică și totodată pentru comfortul pacienților. Cu ajutorul acestu-i program se micșorează și timpul pierdut la ducerea evidenței, ceea ce aduce un plus destul de mare în activitatea policlinicii.

6. PROTECȚIA MUNCII

Munca reprezintă activitatea rațională a omului, orientată spre satisfacerea necesităților materiale și spirituale ale societății. În procesul muncii omul interacționează cu mijloacele de producție, cu mediul de producție și cu obiectele muncii. În acelaș timp el, de regulă, se expune influenței unui mare număr de factori, diverși după natura sa, formele de manifestare și a unui șir de alți indicatori, care influențează asupra sănătății și capacității de muncă a omului.

Factorii de producție în dependență de consecințele lor se împart în periculoși și dăunători. Factorul, influența căruia asupra medicului în anumite condiții duce la traumă sau la altă înrăutățire rapidă a sănătății, se numește factor periculos de producție. Factorul, influența căruia asupra medicului în anumite condiții duce la îmbolnăvire sau scăderea capacității de muncă, se numește factor dăunător de producție. În dependență de nivelul și durata acțiunii, factorul dăunător poate deveni periculos.

După natura acțiunii asupra organismului uman factorii de producție periculoși și dăunători se împart în 4 grupe: fizici, chimici, biologici, psihofiziologici.

Securitatea muncii – starea condițiilor de muncă, din care este exclusă influența factorilor de producție periculoși și dăunători asupra medicilor. Această problemă este examinată și soluționată de către disciplina protecția muncii.

Protecția muncii este un sistem de acte legislative, social-economice, organizatorice, tehnice, acțiuni și mijloace igienice și curativ-profilactice, ce asigură munca securitatea, păstrarea sănătății și capacității de muncă a omului în procesul muncii. Protecția muncii reprezintă o disciplină științifică care enunță problemele securității muncii, prevenirii traumatismului și bolilor profesionale, incendiilor și exploziilor in producție, organizarea muncii. În legislația RM, în documentele normative și literatură de rând cu termenul «protecția muncii» uneori se utilizează termenul «tehnica securității și sănitariei de producție».

Tehnica securității – sistem de acțiuni organizatorice și mijloace tehnice ce preîntâmpină sau reduc influența asupra medicilor a factorilor de producție periculoși.

Sanitaria de producție – un sistem de mijloace tehnice și acțiuni organizatorice, ce preîntâmpină sau reduc influența asupra lucrătorilor a factorilor de producție dăunători.

Securitatea de incendiu – stare a obiectelor, pentru care cu o probabilitate fixată se exclude posibilitatea apariției și evoluției incendiului și influența lui asupra oamenilor, de asemenea și asigurarea protecției bunurilor materiale.

Condițiile de lucru neprimejdioase asigură productivitatea muncii, contribuie la susținerea stării normale psihofiziologice a medicilor. De condițiile de muncă depinde productivitatea și calitatea muncii, eficacitatea folosirii resurselor de muncă. În procesul de soluționare a problemelor tehnice este necesar de accentuat problema interacțiunii mediului de producție cu mediul ambiant. Urmările activității omului se reflectă pe scara nu numai locală sau regională dar și globală. Protecția mediului ambiant devine cea mai principală problemă socială și economică.

6.1. Controlul protecției muncii

Protecției muncii i se acordă o importanță mare, care este asigurată legislativ, material, organizatoric și științific. Asigurarea legislativă este bazată pe existența a multor legi, regulamente, articole în domeniul protecției muncii.

Asigurarea organizatorică constă în aceia, că conform legii la întreprinderi, unde sînt mai mult de 50 de medici trebuie să fie un inginer al tehnicii securității, iar la întreprinderi unde sînt 1000 și mai mulți medici, trebuie să existe un serviciu întreg și un punct medical.

Conform legii la fiecare întreprindere se formează conturi speciale pentru îndeplinirea măsurilor de ameliorare a condițiilor de muncă – aceasta este asigurarea materială. Este interzis de a folosi aceste fonduri în alte scopuri.

Înnoirea tehnicii duce la apariția factorilor noi necunoscuți. Pentru cercetarea acțiunii lor asupra omului există diferite instituții și catedre – asigurarea științifică.

Sindicatele reprezintă fonduri speciale, pe lângă contractul colectiv, elaborează o convenție de măsuri de ameliorare a condițiilor de muncă.

Controlul stării protecției muncii se efectuează în 3 etape:

Inginerul cu instructorul obștesc de la sindicate controlează starea protecției muncii în cabinetul dat în fiecare zi vizual.

Șeful secției cu președintele comisiei protecției muncii controlează o dată în săptămână cabinetele medicilor.

Șeful secției și președintele comisiei protecției muncii a comitetului sindical cu inginerul tehnicii securității controlează o dată în lună.

La fiecare secție se efectuează instructajul medicilor pe protecția muncii. Există următoarele tipuri de instructaj:

Introductiv – se efectuează de inginerul tehnicii securității.

Primar la locul de lucru – se efectuează de inginer.

Periodic – se efectuează de inginer nu mai rar de o dată în 6 luni:

Neplanificat – se efectuează când s-a produs accidentul, medicul s-a transferat la un alt loc de lucru, sau s-a schimbat procesul de studiu.

Curent – se efectuează înainte de lucrările de autorizare.

Starea nivelului de protecție a muncii în policlinică se poate de calculat cu ajutorul coeficientului nivelului de respectare a regulilor de protecție a muncii de către medici:

( 5.1 )

6.2. Analiza condițiilor de muncă

Totalitatea de factori ai mediului de producție, care influențează condițiile de muncă a omului în procesul de lucru formează condițiile de muncă. Condițiile de muncă se formează în rezultatul interacțiunii dintre mai mulți factori naturali, social-economici, tehnici și organizatorici. Problema îmbunătățirii condițiilor de muncă se formează și trebuie rezolvată la toate etajele de proiectare și exploatare a utilajelor și proceselor tehnologice. Necesitatea de a îmbunătăți condițiile de muncă și de a ridica în acelaș timp nivelul tehnic de producere este una din problemele de bază ale societății. Este necesar de a proiecta, construi și introduce în producție numai acele utilaje și tehnologii care asigură formarea condițiilor de muncă favorabile. Prin aceasta e posibil de a crea condiții necesare pentru protejarea sănătății medicilor, evitarea accidentelor, ridicarea eficienței economice și nivelului de viață a oamenilor.

Etapa inițială a analizei condițiilor de muncă constă în determinarea factorilor dăunători și periculoși și acțiunii lor asupra organismului uman. După origine factorii dăunători și periculoși se împart în 4 clase: factorii fizici, chimici, biologici și psihofiziologici.

Factorii fizici caracterizează procesul tehnologic sau utilajul industrial, la care se referă temperatura majorată a aerului, părți mobile a utilajului, părțile acute a utilajului, lucrul la înălțime, diferite radiații.

Factorii chimici caracterizează mediul înconjurător. La care se referă prăfuirea mediului, existența substanțelor periculoase în aer, umeditatea ș.a.

La factorii biologici se referă microorganismele (plantele și animalele).

La factorii psihofiziologici se referă supraîncărcările fizice (statice și dinamice) și supraîncărcările mintale și emoționale.

Tab. 6.1.

Factorii ce acționează la locul de muncă asupra individului

6.3. Cerințele ergonomice a locului de muncă

Locul de lucru este zona înzestrată cu mijloace de prezentare a informației, organe de comandă și alt utilaj necesar, în care se desfășoară activitatea de muncă a omului. Organizarea locului de muncă constă în îndeplinirea unui sistem de măsuri pentru înzestrarea locului de muncă cu mijloace de muncă și amplasarea lor într-o anumită ordine. Scopul organizării locului de muncă este optimizarea condițiilor de activare a omului, asigurarea securității și eficienței maximale a muncii.

Cu studierea complexă și organizarea locului de muncă se ocupă o ramură a științei numită ergonomie. Principalul obiect de studiu al ergonomiei este sistemul «om-mașină-mediul de producere». Ergonomia studiază posibilitatea de acordare a construcției utilajului și posibilitățile psihologice și fiziologice ale omului cu scopul creării unor condiții în care munca să fie mai productivă și în acelaș timp să aducă muncitorilor satisfacție fizică și morală, să asigure securitatea și comfortul în procesul de muncă, păstrând sănătatea și capacitatea de muncă a oamenilor. Printre sarcinile ergonomiei este elaborarea metodelor de evidență a factorului uman la crearea și tehnicii și tehnologiei.

Există următorii indici ergonomici a locului de muncă, care asigură eficiența maximală, securitatea și comfortul muncii:

Indicii igienici, care caracterizează factorii mediului înconjurător – temperatura, componența fizico-chimică a aerului, zgomotul, etc.

Indicii antropometrici și biomecanici, care caracterizează corespunderea dintre mijloacele de muncă, dimensiunile, forma și masa corpului uman, forța și direcția mișcărilor.

Indicii fiziologici și psihofiziologici, care determină corespondența dintre procesul de muncă și posibilitățile energetice, vizuale, rapiditatea și alte posibilități fiziologice ale omului.

Indicii psihologici, care caracterizează posibilitatea de gândire, memorizare și reacționare a omului.

Indicii estetici, care se folosesc pentru determinarea necesităților estetice ale omului și oformarea estetică a locului de muncă și mediului de producere.

Locul de muncă trebuie adaptat pentru tipul concret de muncă în dependență de calificarea și posibilitățile psihofiziologice a medicilor. Locurile de muncă se împart în locuri de muncă automatizate și mecanizate, locuri unde se îndeplinesc lucrări manuale. La organizarea locului de muncă se respectă următoarele cerințe ergonomice generale:

Se asigură un spațiu de lucru suficient, care permite muncitorului să îndeplinească mișcările necesare la exploatarea și deservirea tehnică a utilajului.

Se organizează legăturile fizici, vizuale și auditive suficiente dintre om și utilaj.

Repartizarea locurilor de muncă în încăperile de producere în corespundere cu recomandațiile științifice.

Iluminarea naturală și artificială, nivelul admisibil al zgomotului, ventilarea aerului se efectuează în corespundere cu normele prevăzute de standardul corespunzător.

Se asigură protecția lucrului împotriva factorilor dăunători și periculoși.

Planificarea locului de muncă se efectuează în corespundere cu particularitățile psihofiziologice ale omului și situația igienică generală. Organizarea locului de muncă satisface cerințelor de comoditate, economisirea de energie și timp, să utilizeze rațional suprafețele de producere, să asigure deservirea comodă a calculatorului cu respectarea tehnicii securității. Locul de lucru a medicului sau a pacientului, care lucrează cu monitorul calculatorului trebuie situat la o anumită distanță de la fereastră, având în vedere ca lumina să cadă dintr-o parte. Monitorul, tastiera se plasează în așa mod ca să se afle în zona de acces a mâinilor și să se excludă mișcările neproductive. Scaunul trebuie să aibă înălțimea de aproximativ 0,4 m, lungimea spetezei scaunului de 0,3 m, lățimea spetezei de 0,11m, raza de curbare 0,3 – 0,35m. Se recomandă ca scaunul să repete forma corpului uman și să fie puțin înclinat înapoi. O însemnătate mare are repartizarea pe panourile de comandă a mijloacelor de semnalizare și displeiului de control. Întrerupătoarele, comutatoarele și manivelele asigură consumul minimal de energie musculară și nervoasă.

În timpul lucrului pot apărea situații, care cer decizii rapide. Pentru îndeplinirea cu succes a lucrului în aceste condiții este necesară organizarea rațională a mediului înconjurător, care protejează de influența factorilor iritativi cum sînt culoarea necorespunzătoare a dispozitivelor și calculatorului, repartizarea incomodă a semnalizării și tastelor de comandă etc. Prin toate metodele se micșorează încordarea fizică și psihică și factorii ce aduc la oboseală.

Culoarea încăperilor de producție influențează mult asupra stării sistemului nervos, dispoziției și capacității de muncă. Încăperile policlinicii sînt vopsite în corespundere cu dispozitivele tehnice. Alegerea culorii se argumentează științific, considerând așa factori cum sînt construcția clădirii, caracterul muncii îndeplinite, nivelul de iluminare, numărul de medici în încăpere etc. Culorile aprinse înviorează încăperea și acționează pozitiv asupra stării psihologice a medicilor. Culorile roșii trebuie folosite pentru semnalizare, iar utilajul trebuie să aibă culori deschise. Pereții încăperii se vopsesc în culori albe, galbene, albastre deschise.

Climatul psihologic în colectivul de muncă este de asemenea un factor important al mediului de producție, de care depinde starea emoțională a medicilor și deci productivitatea și calitatea muncii. Problemele social-psihologice trebuie analizate și soluționate permanent de către conducere.

6.4. Semnalizarea antiincendiară

Una din sarcinile protecției muncii la policlinici este asigurarea securității de incendiu. Prin securitatea de incendiu se înțelege elaborarea unui șir de măsuri tehnice și organizatorice, care permit excluderea posibilității de izbucnire și răspândire a incendiului, precum și apărarea oamenilor și bunurilor materiale de factorii periculoși ce apar în urma lui.

Una din măsurile de prevenire a incendiilor este semnalizarea antiincendiară. Semnalizarea la timp a apariției și locului incendiului determină in mare măsură lichidarea lui rapidă.

Sistemul automat de semnalizare incendiară se folosește pentru înștiințarea serviciilor de pază antiincendiară despre izbucnirea incendiului în careva încăpere a policlinicii.

Sistemul de semnalizare antiincendiară se include în sistemul de stingere automată a incendiului sau se instalează ca sistem independent în încăperile cu pericol de incendiu, care nu sînt prevăzute cu sistem de stingere. În caz de necesitate semnalizarea antiincendiară se include în sistemul de pază. Sarcina sistemului automat de semnalizare antiincendiară este detectarea izbucnirii incendiului, conectarea instalațiilor de stingere automată și înștiințarea echipei de pompieri despre locul incendiului. Sistemul constă din traductoare, instalate în încăperile ce trebuie apărate de incendiu, stația de primire instalată în încăperea echipei de pompieri, sursa de alimentare cu energie electrică și rețeaua electrică care leagă traductoarele cu stația de primire.

Se folosesc semnalizatoare antiincendiare manuale și automate. Semnalizatoarele manuale cu acționarea prin taste se instalează la locuri ușor vizibile, de exemplu pe scările clădirilor cu multe etaje, în coridoare, la ușile de intrare etc. Pentru anunțarea echipei de pompieri trebuie spartă sticla de pe semnalizator și apăsată tasta.

Sistemul automat de semnalizare antiincendiară funcționează pe baza transmiterii semnalelor apărute la scurtcircuirea rețelei electrice. La semnalizatoarele de tipul PB-231 scurtcircuirea contactelor are loc în rezultatul deformării termice a unei plăci bimetalice. Ele lucrează la temperatura 60, 80, 100 C pentru încăperile cu o suprafață de până la 15 metri.

Semnalizatoarele termice cu acțiunea diferențială de tipul ATIM-I funcționează pe principiul diferenței dintre forțele termoelectrice de pe partea neagră și argintie a termocuplului. Ele se declanșează la creșterea bruscă a temperaturii (cu viteza de 30 C/sec). Aceste semnalizatoare se instalează în încăperi cu pericolul de explozie cu suprafața de până la 30 metri.

Semnalizatoarele combinate de tipul SI-I cu elemente sensibile în formă de cameră de ionizare pentru reacționarea la fum și termorezistențe pentru reacționarea la temperatură se declanșează la temperaturi de 50-80 C. La nimerirea fumului în camera de ionizare se schimbă curentul de ionizare în rezultatul absorbției de către fum a radiației gama, provenită de la un izotop radioactiv. Acest tip de semnalizatoare se folosește în încăperi cu o suprafață de până la 100 metri.

Dispozitivul de semnalizare de tipul DI-1 se folosesc pentru detectarea fumului cu semnalizarea prin semnale sonore și lumină și pentru declanșarea sistemului automat de stingere a incendiului. Împreună cu semnalizatoarele manuale și termice se folosesc stațiile de primire pentru rețele electrice cu 30 de raze cu conectarea traductoarelor după schema radială.

Traductoarele sistemului de semnalizare antiincendiară pot fi conectate la stația de primire după schema radială sau circulară. În schemele radiale stația de primire este conectată cu fiecare traductor printr-un cablu aparte, numit rază. Raza constă din 2 conductoare separate – conductor direct și invers. În schema circulară toate traductoarele se conectează în serie cu un conductor comun, unit la stația de primire. La întreprinderi mari la stația de primire se conectează câteva rețele circulare care includ până la 50 de traductoare.

Alegerea sistemului de semnalizare antiincendiară se efectuează după sensibilitate și zona de acțiune.

6.5. Calcularea ventilării

Pentru a menține condițiile optimale ale microclimei în zona de lucru des se folosește ventilarea. Ventilarea poate fi naturală și artificială (mecanică). Ventilarea mecanică se împarte, la rândul său, în generală și locală. Calcularea ventilării constă în determinare volumului necesar de schimb de aer pentru asigurarea parametrilor optimali ai microclimei.

Pentru asigurarea temperaturii optimale a aerului în zona de lucru (eliminarea surplusurilor de căldură) e necesar de un schimb de aer în m3/h.

,

unde Qs – surplusul de căldură degajată :

Q1 – de utilaj;

Q2 – de oameni;

Q3 – de instalație de iluminat;

Q4 – de iradiere;

Qs = Q1 + Q2 + Q3 + Q4 ;

c –capacitatea termică specifică a aerului, 0.24 kcal / kg*C;

– densitatea aerului , 1.206 kg / m3;

ta-temperatura aerului absorbit, ta = 8 C;

tN – temperatura optimală a gerului după STAS 12.1.005-88, tN=18C.

Surplusul de căldură degajată de utilaj se găsește din relația :

,

unde 860 – echivalentul termic;

Pt – puterea utilajului , Pt = 0.15kW ;

– coeficientul de randament , =0.75.

,

unde k – cantitatea de căldură degajată de un om, k = 150 kcal / h.

n – numărul oamenilor, n = 15.

,

unde Pil – puterea iluminatului în încăpere , Pil = 4kW ;

– 0.70.8 , =0.7;

– 0.10.2 , = 0.1;

,

unde m – numărul de ferestre, m = 4 ;

F – aria unei ferestre , F = 2 m2;

q – cantitatea căldurii pătrunzătoare peste 1 m2 de fereastră într-o oră , q = 125 kcal / m2 * h.

Calculăm ventilarea pentru încăperea cu volumul V = 75 m3.

Q1 = 860 * 0.15 * 0.75 = 96.75 kcal / h ,

Q2 = 150 * 15 = 2.25 kcal /h ,

Q3 = 860 * 4 * 0.1 * 0.7 = 240.8 kcal / h ,

Q4 = 8 * 125 = 1000 kcal / h ,

Qs = 96.75 + 2.25 + 240.8 + 1000 = 1339.8 kcal / h.

,

Calculăm coeficientul de proporționalitate kv :

Bibliografie

Грабер М. SQL: справочное руководство -:ЛОРИ.

Грабер М. Введение в SQL. -:ЛОРИ.

Стивенс Р. SQL за 24 часа. Освой самостоятельно.

Д. Мелони, "РНР 4. В действии0, издательство " Лучшие книги", Москва 2001.

П. Дюбуа, "МySQL", издательство "Вильямс", Москва – Киев 2001.

А. Матрсов, А. Сергеев, "HTML 4.0", издательство "БХВ", Санкт – Петерсбург 2000 .

Р. Вагнер, А. Войк, "JavaScript", издательство "Dia Soft", Киев 2001.

T. Luers, "Bazele Ohacle 7.", editura "Teora",București 1998.

www. mysql . com

www. PHP. Net

www. mysql. Ru

http: // students. infoiași .ro

ANEXA 1.

Listingul

Administrația

Pacienți

<?php

include( "./inc/nocache.inc" );

include( "dbopen.php" );

$USER_NAME = addslashes(htmlspecialchars($USER_NAME));

$EMAIL = addslashes(htmlspecialchars($EMAIL));

$HREF = addslashes(htmlspecialchars($HREF));

$CONTENT = addslashes(htmlspecialchars(trim($CONTENT)));

$REMOTE = getenv('REMOTE_ADDR');

$USER_AGENT = getenv('HTTP_USER_AGENT');

if ($HREF == "")

$HREF = "http://";

if (!eregi("^http://", $HREF))

$HREF = "http://" . $HREF;

$sSQL = "INSERT INTO guestbook (issuedate, content, user_name, email, href, remote_addr, user_agent) VALUES

(now(), '$CONTENT', '$USER_NAME', '$EMAIL', '$HREF', '$REMOTE', '$USER_AGENT')";

mysql_query($sSQL,$link);

mysql_close($link);

?>

<html>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<script language="javascript">

alert("Mesajul dumneavoastra a fost inscris !");

document.location.href = "guest.php";

</script>

</html>

<?

include("../connect.php");

//Autorization();

ConnectDB("policlinica");

if ($REQUEST_METHOD=="POST")

{

$cols="Nume,Prenume,NrFisa,CodPersonal,Boli,PersonalID";

$vals="\"$Nume\",\"$Prenume\",\"$NrFisa\",\"$CodPersonal\",\"$Boli\",\"$PersonalID\" ";

$query = "INSERT INTO Pacienti ($cols) VALUES ($vals)";

mysql_query ($query) or die (mysql_error());

ShowMessage("Datele au fost introduse in tabela Pacienti");

}

?>

<html>

<head>

<title>Informatii despre Pacienti</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body bgcolor="#CCCCCC">

<form name="action" method="post" action="add_pacient.php">

<table width="60%" border="1" align="center" cellpadding="2" cellspacing="1" bordercolor="#000000">

<tr>

<td colspan="3" height="35">

<div align="center"><i><b><font size="5">Adaugarea datelor in tabela &quot;</font></b><font size="5">Pacienti<b>&quot;</b></font></i></div></td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>1</b></i></div></td>

<td width="50%" height="35"><em><strong>Nume</strong></em></td>

<td width="42%" height="35">

<input name="Nume" type="text" id="Nume" size="12"> </td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>2</b></i></div></td>

<td width="50%" height="35"><em><b>Prenume<br>

</b></em></td>

<td width="42%" height="35">

<input name="Prenume" type="text" id="Prenume" size="12">

</td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>2</b></i></div></td>

<td width="50%" height="35"><em><b>NrFisa</b></em></td>

<td width="42%" height="35">

<input name="NrFisa" type="text" id="NrFisa" size="12">

</td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>3</b></i></div></td>

<td width="50%" height="35"><em><b>CodPersonal</b></em></td>

<td width="42%" height="35">

<input name="CodPersonal" type="text" id="CodPersonal" size="12">

</td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>4</b></i></div></td>

<td width="50%" height="35"><em><b>Boli<br>

</b></em></td>

<td width="42%" height="35">

<textarea name="Boli" cols="12" rows="4" id="Boli"></textarea>

</td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>4</b></i></div></td>

<td width="50%" height="35"><em><b>PersonalID<br>

</b></em></td>

<td width="42%" height="35">

<input name="PersonalID" type="text" id="PersonalID" size="12">

</td>

</tr>

<tr>

<td width="8%" height="35">&nbsp;</td>

<td width="50%" height="35">&nbsp;</td>

<td width="42%" height="35">

<div align="right">

<input type="submit" name="action" value="Insert">

</div></td>

</tr>

</table>

</form>

</body>

</html>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>Mesaje de alert</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body>

<div align="center"><br>

<?=$message?>

<br>

<a href="javascript:history.back()"> Back</a></div>

</body>

</html>

<?

include("../connect.php");

//Autorization();

ConnectDB("policlinica");

if ($action=='change')

{

$query = "SELECT * FROM Pacienti WHERE PacientID=$PacientID";

$res=mysql_query ($query) or die (mysql_error());

$row = mysql_fetch_array ($res);

}

elseif ($action=='update')

{

$query =" UPDATE Pacienti SET Nume=\"$Nume\" , Prenume=\"$Prenume\" , NrFisa=\"$NrFisa\" , CodPersonal=\"$CodPersonal\" , Boli=\"$Boli\" , PersonalID=\"$PersonalID\" WHERE PacientID=\"$PacientID\" ";

mysql_query ($query) or die (mysql_error());

ShowMessage("Datele au fost modificate in tabela Personal");

}

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>Untitled Document</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body bgcolor="#CCCCCC">

<form action=edit_pacient.php method=post name=add enctype="multipart/form-data" >

<div align="center"><b class="admheader">

<input name="PacientID" type="hidden" id="PacientID" value="<?=$PacientID?>" >

<input type="hidden" name="action" value="update" >

</b></div>

<table width="60%" border="1" align="center" cellpadding="1" cellspacing="1" bordercolor="#000000">

<tr>

<td colspan="3" height="35">

<div align="center" class="headtab"><b><font size="5">Modificarea

datelor in tabela &quot;</font></b><font size="5"><em>Personal</em><b>&quot;</b></font></div></td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>1</b></i></div></td>

<td width="53%" height="35" class="list"><b>Nume</b></td>

<td width="35%" height="35">

<input name="Nume" type="text" id="Nume" value="<?=$row['Nume']?>" size="12">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>2</b></i></div></td>

<td width="53%" height="35" class="list"><b>Prenume </b></td>

<td width="35%" height="35">

<input name="Prenume" type="text" id="Prenume" value="<?=$row['Prenume']?>" size="12">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>3</b></i></div></td>

<td width="53%" height="35" class="list"><b>NrFisa</b></td>

<td width="35%" height="35">

<input name="NrFisa" type="text" id="NrFisa" value="<?=$row['NrFisa']?>" size="12">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>4</b></i></div></td>

<td width="53%" height="35" class="list"><b>CodPersonal</b></td>

<td width="35%" height="35">

<input type="text" name="CodPersonal" size="12" value="<?=$row['CodPersonal']?>">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>5</b></i></div></td>

<td width="53%" height="35" class="list"><b>Boli</b></td>

<td width="35%" height="35">

<textarea name="Boli" cols="12" rows="4" id="Boli"><?=$row['Boli']?></textarea>

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>5</b></i></div></td>

<td width="53%" height="35" class="list"><b>PersonalID</b></td>

<td width="35%" height="35">

<input name="PersonalID" type="text" id="PersonalID" value="<?=$row['PersonalID']?>" size="12" >

</td>

</tr>

<tr>

<td height="35" colspan="3">

<div align="right">

<input type="submit" name="submit" value="Update">

</div></td>

</tr>

</table>

</form>

</body>

</html>

Personal

<?

include("../../connect.php");

//Autorization();

ConnectDB("policlinica");

$query = "SELECT PacientID, Nume, Prenume, NrFisa, CodPersonal, Boli, PersonalID FROM Pacienti";

$res=mysql_query ($query) or die (mysql_error());

$row = mysql_fetch_array ($res);

$numrec = mysql_num_rows($res);

$reconpage=15;

$pageinfo=DivideInPages($reconpage,$numrec);

if($numrec) mysql_data_seek ($res,$pageinfo[min]-1);

?>

<html>

<head>

<title>Informatii despre Pacienti</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link href="../../styles.css" rel="stylesheet" type="text/css">

</head>

<body bgcolor="#CCCCCC">

<table width="100%" border="1" align="center" cellpadding="1" cellspacing="1" bordercolor="#000000">

<tr>

<td height="35">

<div align="center"><strong><a href="../Sectii/info_sec.php" target="_parent" class="link1">Sectii</a></strong></div></td>

<td height="35">

<div align="center"><strong><a href="../Personal/info_pers.php" target="_parent" class="link1">Personal</a></strong></div></td>

<td height="35">

<div align="center"><strong><a href="info_pacient.php" target="_parent" class="link1">Pacienti</a></strong></div></td>

</tr>

</table>

<br>

<table width="60%" border="0" align="center">

<tr>

<td> <div align="center"><i><b class="text"><font size="6">Informatii despre

pacient</font></b></i></div></td>

</tr>

</table>

<br>

<table width="98%" border="1" cellspacing="1" cellpadding="1" bordercolor="#000000" align="center">

<tr align="center" bgcolor="#99CCFF" class="text">

<td width="3%" height="35">

<div align="center"><em><strong>PacientlID </strong></em></div></td>

<td width="8%" height="35">

<div align="center"><em><strong>Nume</strong></em></div></td>

<td width="5%" height="35">

<div align="center"><em><strong>Prenume</strong></em></div></td>

<td width="8%" height="35">

<div align="center"><em><strong>NrFisa</strong></em></div></td>

<td width="8%" height="35">

<div align="center"><em><strong>CodPersonal</strong></em></div></td>

<td width="8%" height="35"><em><strong>Boli</strong></em></td>

<td width="6%" height="35"><em><strong>PersonalID</strong></em></td>

<td width="6%" height="35"><em><strong>Info</strong></em></td>

</tr>

<?

for($i=$pageinfo[min];$i<=$pageinfo[max];$i++)

{

$row = mysql_fetch_array ($res);

?>

<?

$text = "<a href='edit_pacient.php?action=change&PacientID=$row[PacientID]' class='link1'>Change</a>";

?>

<tr>

<td width="3%" height="35" class="text">

<div align="center"> <em>

<?=$row['PacientID']?>

</em></div></td>

<td width="8%" height="35" class="text">

<div align="center"><em>&nbsp;

<?=$row['Nume']?>

</em></div></td>

<td width="5%" height="35" class="text">

<div align="center"> <em>

<?=$row['Prenume']?>

&nbsp; </em></div></td>

<td width="8%" height="35" class="text">

<div align="center"> <em>

<?=$row['NrFisa']?>

&nbsp; </em></div></td>

<td width="8%" height="35" class="text">

<div align="center"> <em>

<?=$row['CodPersonal']?>

</em></div></td>

<td width="8%" height="35" class="text">

<div align="center"> <em>

<?=$row['Boli']?>

</em></div></td>

<td width="6%" height="35" class="text">

<div align="center"> <em>

<?=$row['PersonalID']?>

</em></div></td>

<td width="6%" height="35" class="text">

<div align="center"><em>

<?=$text?>

</em></div></td>

</tr>

<?

}

mysql_free_result ($res);

?>

</table>

<br>

<table width="30%" border="0" align="center">

<tr>

<td> <div align="center"><a href="add_pacient.php" target="_parent" class="link1">Add

new</a></div></td>

</tr>

</table>

<div align="center"><br>

<?=$pageinfo[showpages]?>

</div>

</body>

</html>

<?

include("../connect.php");

//Autorization();

ConnectDB("policlinica");

$query = "SELECT PersonalID, Nume, Prenume, Functie, NrCabinet, CodPersonal, SectieID FROM Personal";

$res=mysql_query ($query) or die (mysql_error());

$row = mysql_fetch_array ($res);

$numrec = mysql_num_rows($res);

$reconpage=15;

$pageinfo=DivideInPages($reconpage,$numrec);

if($numrec) mysql_data_seek ($res,$pageinfo[min]-1);

?>

<html>

<head>

<title>Informatii despre sectie</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link href="../styles.css" rel="stylesheet" type="text/css">

</head>

<body bgcolor="#CCCCCC">

<table width="100%" border="1" align="center" cellpadding="1" cellspacing="1" bordercolor="#000000">

<tr>

<td height="35">

<div align="center"><strong><a href="../Sectii/info_sec.php" target="_parent" class="link1">Sectii</a></strong></div></td>

<td height="35">

<div align="center"><strong><a href="info_pers.php" target="_parent" class="link1">Personal</a></strong></div></td>

<td height="35">

<div align="center"><strong><a href="../Pacienti/info_pacient.php" target="_parent" class="link1">Pacienti</a></strong></div></td>

</tr>

</table>

<br>

<table width="60%" border="0" align="center">

<tr>

<td> <div align="center"><i><b class="text"><font size="6">Informatii despre

personal</font></b></i></div></td>

</tr>

</table>

<br>

<table width="98%" border="1" cellspacing="1" cellpadding="1" bordercolor="#000000" align="center">

<tr align="center" bgcolor="#99CCFF" class="text">

<td width="3%" height="35">

<div align="center"><em><strong>PersonalID </strong></em></div></td>

<td width="8%" height="35">

<div align="center"><em><strong>Nume</strong></em></div></td>

<td width="5%" height="35">

<div align="center"><em><strong>Prenume</strong></em></div></td>

<td width="8%" height="35">

<div align="center"><em><strong>Functie</strong></em></div></td>

<td width="8%" height="35">

<div align="center"><strong><em>NrCabinet</em></strong></div></td>

<td width="8%" height="35"><em><strong>CodPersonal</strong></em></td>

<td width="6%" height="35"><em><strong>SectieID</strong></em></td>

<td width="6%" height="35"><em><strong>Info</strong></em></td>

</tr>

<?

for($i=$pageinfo[min];$i<=$pageinfo[max];$i++)

{

$row = mysql_fetch_array ($res);

?>

<?

$text = "<a href='edit_pers.php?action=change&PersonalID=$row[PersonalID]' class='link1'>Change</a>";

?>

<tr>

<td width="3%" height="35" class="text">

<div align="center"> <em>

<?=$row['PersonalID']?>

</em></div></td>

<td width="8%" height="35" class="text">

<div align="center"><em>&nbsp;

<?=$row['Nume']?>

</em></div></td>

<td width="5%" height="35" class="text">

<div align="center"> <em>

<?=$row['Prenume']?>

&nbsp; </em></div></td>

<td width="8%" height="35" class="text">

<div align="center"> <em>

<?=$row['Functie']?>

&nbsp; </em></div></td>

<td width="8%" height="35" class="text">

<div align="center"> <strong><em>

<?=$row['NrCabinet']?>

</em></strong></div></td>

<td width="8%" height="35" class="text">

<div align="center"> <em>

<?=$row['CodPersonal']?>

</em></div></td>

<td width="6%" height="35" class="text">

<div align="center"> <em>

<?=$row['SectieID']?>

</em></div></td>

<td width="6%" height="35" class="text">

<div align="center"><em>

<?=$text?>

</em></div></td>

</tr>

<?

}

mysql_free_result ($res);

?>

</table>

<br>

<table width="30%" border="0" align="center">

<tr>

<td> <div align="center"><a href="add_pers.php" target="_parent" class="link1">Add

new</a></div></td>

</tr>

</table>

<div align="center"><br>

<?=$pageinfo[showpages]?>

</div>

</body>

</html>

<?

include("../connect.php");

//Autorization();

ConnectDB("policlinica");

if ($REQUEST_METHOD=="POST")

{

$cols="Nume,Prenume,Functie,NrCabinet,CodPersonal,SectieID";

$vals="\"$Nume\",\"$Prenume\",\"$Functie\",\"$NrCabinet\",\"$CodPersonal\",\"$SectieID\" ";

$query = "INSERT INTO Personal ($cols) VALUES ($vals)";

echo "$query";

mysql_query ($query) or die (mysql_error());

ShowMessage("Datele au fost introduse in tabela Personal");

}

?>

<html>

<head>

<title>Informatii despre Personal</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body bgcolor="#CCCCCC">

<form name="action" method="post" action="add_pers.php">

<table width="60%" border="1" align="center" cellpadding="2" cellspacing="1" bordercolor="#000000">

<tr>

<td colspan="3" height="35">

<div align="center"><i><b><font size="5">Add data into Custom products table</font></b></i></div></td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>1</b></i></div></td>

<td width="50%" height="35"><em><strong>Nume</strong></em></td>

<td width="42%" height="35">

<input name="Nume" type="text" id="Nume" size="12"> </td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>2</b></i></div></td>

<td width="50%" height="35"><em><b>Prenume<br>

</b></em></td>

<td width="42%" height="35">

<input name="Prenume" type="text" id="Prenume" size="12">

</td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>3</b></i></div></td>

<td width="50%" height="35"><em><b>Functie</b></em></td>

<td width="42%" height="35">

<input name="Functie" type="text" id="Functie" size="12">

</td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>4</b></i></div></td>

<td width="50%" height="35"><em><b>NrCabinet</b></em></td>

<td width="42%" height="35">

<input name="NrCabinet" type="text" id="NrCabinet" size="12">

</td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>5</b></i></div></td>

<td width="50%" height="35"><em><b>CodPersonal</b></em></td>

<td width="42%" height="35">

<input name="CodPersonal" type="text" id="CodPersonal" size="12">

</td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>6</b></i></div></td>

<td width="50%" height="35"><em><b>SectieID<br>

</b></em></td>

<td width="42%" height="35">

<input name="SectieID" type="text" id="SectieID" size="12">

</td>

</tr>

<tr>

<td width="8%" height="35">&nbsp;</td>

<td width="50%" height="35">&nbsp;</td>

<td width="42%" height="35">

<div align="right">

<input type="submit" name="action" value="Insert">

</div></td>

</tr>

</table>

</form>

</body>

</html>

Secții

<?

include("../connect.php");

//Autorization();

ConnectDB("policlinica");

if ($action=='change')

{

$query = "SELECT * FROM Personal WHERE PersonalID=$PersonalID";

$res=mysql_query ($query) or die (mysql_error());

$row = mysql_fetch_array ($res);

}

elseif ($action=='update')

{

$query =" UPDATE Personal SET Nume=\"$Nume\" , Prenume=\"$Prenume\" , Functie=\"$Functie\" , NrCabinet=\"$NrCabinet\" , CodPersonal=\"$CodPersonal\" , SectieID=\"$SectieID\" WHERE PersonalID=\"$PersonalID\" ";

mysql_query ($query) or die (mysql_error());

ShowMessage("Datele au fost modificate in tabela Personal");

}

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>Untitled Document</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body bgcolor="#CCCCCC">

<form action=edit_pers.php method=post name=add enctype="multipart/form-data" >

<div align="center"><b class="admheader">

<input name="PersonalID" type="hidden" id="PersonalID" value="<?=$PersonalID?>" >

<input type="hidden" name="action" value="update" >

</b></div>

<table width="60%" border="1" align="center" cellpadding="1" cellspacing="1" bordercolor="#000000">

<tr>

<td colspan="3" height="35">

<div align="center" class="headtab"><b><font size="5">Modificarea datelor in tabela

&quot;</font></b><font size="5"><em>Personal</em><b>&quot;</b></font></div></td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>1</b></i></div></td>

<td width="53%" height="35" class="list"><b>Nume</b></td>

<td width="35%" height="35">

<input name="Nume" type="text" id="Nume" value="<?=$row['Nume']?>" size="12">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>2</b></i></div></td>

<td width="53%" height="35" class="list"><b>Prenume </b></td>

<td width="35%" height="35">

<input name="Prenume" type="text" id="Prenume" value="<?=$row['Prenume']?>" size="12">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>3</b></i></div></td>

<td width="53%" height="35" class="list"><b>Functie </b></td>

<td width="35%" height="35">

<input name="Functie" type="text" id="Functie" value="<?=$row['Functie']?>" size="12">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>4</b></i></div></td>

<td width="53%" height="35" class="list"><b>NrCabinet</b></td>

<td width="35%" height="35">

<input name="NrCabinet" type="text" id="NrCabinet" value="<?=$row['NrCabinet']?>" size="12">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>5</b></i></div></td>

<td width="53%" height="35" class="list"><b>CodPersonal</b></td>

<td width="35%" height="35">

<input type="text" name="CodPersonal" size="12" value="<?=$row['CodPersonal']?>">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>6</b></i></div></td>

<td width="53%" height="35" class="list"><b>SectieID </b></td>

<td width="35%" height="35">

<input name="SectieID" type="text" id="SectieID" value="<?=$row['SectieID']?>" size="12" >

</td>

</tr>

<tr>

<td height="35" colspan="3">

<div align="right">

<input type="submit" name="submit" value="Update">

</div></td>

</tr>

</table>

</form>

</body>

</html>

<?

include($DOCUMENT_ROOT."/phplib/admlib.php");

//Autorization();

ConnectDB("policlinica");

if ($REQUEST_METHOD=="POST")

{

$cols="NumeSec,Etaj,Telefon,SefSec,CodSec,Boli";

$vals="\"$NumeSec\",\"$Etaj\",\"$Telefon\",\"$SefSec\",\"$CodSec\",\"$Boli\" ";

$query = "INSERT INTO Sectii ($cols) VALUES ($vals)";

mysql_query ($query) or die (mysql_error());

ShowMessage("Datele au fost introduse in tabela Sectii");

}

?>

<html>

<head>

<title>Informatii despre sectie</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body bgcolor="#CCCCCC">

<form name="action" method="post" action="add_sec.php">

<table width="60%" border="1" align="center" cellpadding="2" cellspacing="1" bordercolor="#000000">

<tr>

<td colspan="3" height="35">

<div align="center"><i><b><font size="5">Add data into Custom products table</font></b></i></div></td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>1</b></i></div></td>

<td width="50%" height="35"><em><strong>NumeSec</strong></em></td>

<td width="42%" height="35">

<input name="NumeSec" type="text" id="NumeSec" size="12">

</td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>2</b></i></div></td>

<td width="50%" height="35"><em><b>Etaj<br>

</b></em></td>

<td width="42%" height="35">

<input name="Etaj" type="text" id="Etaj" size="12"> </td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>2</b></i></div></td>

<td width="50%" height="35"><em><b>Telefon </b></em></td>

<td width="42%" height="35">

<input name="Telefon" type="text" id="Telefon" size="12">

</td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>3</b></i></div></td>

<td width="50%" height="35"><em><b>SefSec</b></em></td>

<td width="42%" height="35">

<input name="SefSec" type="text" id="SefSec" size="12">

</td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>4</b></i></div></td>

<td width="50%" height="35"><em><b>CodSec<br>

</b></em></td>

<td width="42%" height="35">

<input name="CodSec" type="text" id="CodSec" size="12">

</td>

</tr>

<tr>

<td width="8%" height="35">

<div align="center"><i><b>5</b></i></div></td>

<td width="50%" height="35"><em><b>Boli<br>

</b></em></td>

<td width="42%" height="35">

<textarea name="Boli" cols="20" rows="4" id="Boli"></textarea>

</td>

</tr>

<tr>

<td width="8%" height="35">&nbsp;</td>

<td width="50%" height="35">&nbsp;</td>

<td width="42%" height="35">

<div align="right">

<input type="submit" name="action" value="Insert">

</div></td>

</tr>

</table>

</form>

</body>

</html>

<?

include("../../connect.php");

//Autorization();

ConnectDB("policlinica");

if ($action=='change')

{

$query = "SELECT * FROM Sectii WHERE SectieID=$SectieID";

$res=mysql_query ($query) or die (mysql_error());

$row = mysql_fetch_array ($res);

}

elseif ($action=='update')

{

$query =" UPDATE Sectii SET NumeSec=\"$NumeSec\" , Etaj=\"$Etaj\" , Telefon=\"$Telefon\" , SefSec=\"$SefSec\" , CodSec=\"$CodSec\" , Boli=\"$Boli\" WHERE SectieID=\"$SectieID\" ";

mysql_query ($query) or die (mysql_error());

ShowMessage("Datele au fost modificate in tabela Sectii");

}

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>Modificarea datelor</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body bgcolor="#CCCCCC">

<form action=../../Sectii/edit_sec.php method=post name=add enctype="multipart/form-data" >

<div align="center"><b class="admheader">

<input name="SectieID" type="hidden" id="SectieID" value="<?=$SectieID?>" >

<input type="hidden" name="action" value="update" >

</b></div>

<table width="60%" border="1" align="center" cellpadding="1" cellspacing="1" bordercolor="#000000">

<tr>

<td colspan="3" height="35">

<div align="center" class="headtab"><b><font size="5">Modificarea datelor in tabela

&quot;</font></b><font size="5"><em>Sectii</em><b>&quot;</b></font></div></td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>1</b></i></div></td>

<td width="53%" height="35" class="list"><b>NumeSec</b></td>

<td width="35%" height="35">

<input name="NumeSec" type="text" id="NumeSec" value="<?=$row['NumeSec']?>" size="12">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>2</b></i></div></td>

<td width="53%" height="35" class="list"><b>Etaj<br>

</b></td>

<td width="35%" height="35">

<input name="Etaj" type="text" id="Etaj" value="<?=$row['Etaj']?>" size="12">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>3</b></i></div></td>

<td width="53%" height="35" class="list"><b>Telefon<br>

</b></td>

<td width="35%" height="35">

<input name="Telefon" type="text" id="Telefon" value="<?=$row['Telefon']?>" size="12">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>4</b></i></div></td>

<td width="53%" height="35" class="list"><b>SefSec</b></td>

<td width="35%" height="35">

<input type="text" name="SefSec" size="12" value="<?=$row['SefSec']?>">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>5</b></i></div></td>

<td width="53%" height="35" class="list"><b>CodSec<br>

</b></td>

<td width="35%" height="35">

<input type="text" name="CodSec" size="12" value="<?=$row['CodSec']?>" >

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>6</b></i></div></td>

<td width="53%" height="35" class="list"><b>Boli<br>

</b></td>

<td width="35%" height="35">

<textarea name="Boli" cols="12" rows="4"><?=$row['Boli']?></textarea>

</td>

</tr>

<tr>

<td height="35" colspan="3">

<div align="right">

<input type="submit" name="submit" value="Update">

</div></td>

</tr>

</table>

</form>

</body>

</html>

<?

include("../connect.php");

//Autorization();

ConnectDB("policlinica");

$query = "SELECT SectieID, NumeSec, Etaj, Telefon, SefSec, CodSec, Boli FROM Sectii";

$res=mysql_query ($query) or die (mysql_error());

$row = mysql_fetch_array ($res);

$numrec = mysql_num_rows($res);

$reconpage=15;

$pageinfo=DivideInPages($reconpage,$numrec);

if($numrec) mysql_data_seek ($res,$pageinfo[min]-1);

?>

<html>

<head>

<title>Informatii despre sectie</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link href="../styles.css" rel="stylesheet" type="text/css">

</head>

<body bgcolor="#CCCCCC">

<table width="100%" border="1" align="center" cellpadding="1" cellspacing="1" bordercolor="#000000">

<tr>

<td height="35">

<div align="center"><strong><a href="info_sec.php" target="_parent" class="link1">Sectii</a></strong></div></td>

<td height="35">

<div align="center"><strong><a href="../Personal/info_pers.php" target="_parent" class="link1">Personal</a></strong></div></td>

<td height="35">

<div align="center"><strong><a href="../Pacienti/info_pacient.php" target="_parent" class="link1">Pacienti</a></strong></div></td>

</tr>

</table>

<br>

<table width="60%" border="0" align="center">

<tr>

<td> <div align="center"><i><b class="text"><font size="6">Informatii despre

sectii</font></b></i></div></td>

</tr>

</table>

<br>

<table width="98%" border="1" cellspacing="1" cellpadding="1" bordercolor="#000000" align="center">

<tr align="center" bgcolor="#99CCFF" class="text">

<td width="3%" height="35">

<div align="center"><em><strong>SectieID </strong></em></div></td>

<td width="8%" height="35">

<div align="center"><em><strong>NumeSec</strong></em></div></td>

<td width="5%" height="35">

<div align="center"><em><strong>Etaj</strong></em></div></td>

<td width="8%" height="35">

<div align="center"><em><strong>Telefon</strong></em></div></td>

<td width="8%" height="35">

<div align="center"><em><strong>SefSec</strong></em></div></td>

<td width="8%" height="35"><em><strong>CodSec</strong></em></td>

<td width="8%" height="35"><em><strong>Boli</strong></em></td>

<td width="6%" height="35"><em><strong>Info</strong></em></td>

</tr>

<?

for($i=$pageinfo[min];$i<=$pageinfo[max];$i++)

{

$row = mysql_fetch_array ($res);

?>

<?

$text = "<a href='edit_sec.php?action=change&SectieID=$row[SectieID]' class='link1'>Change</a>";

?>

<tr>

<td width="3%" height="35" class="text">

<div align="center"> <em>

<?=$row['SectieID']?>

</em></div></td>

<td width="8%" height="35" class="text">

<div align="center"><em>&nbsp;

<?=$row['NumeSec']?>

</em></div></td>

<td width="5%" height="35" class="text">

<div align="center"> <em>

<?=$row['Etaj']?>

&nbsp; </em></div></td>

<td width="8%" height="35" class="text">

<div align="center"> <em>

<?=$row['Telefon']?>

&nbsp; </em></div></td>

<td width="8%" height="35" class="text">

<div align="center"> <em>

<?=$row['SefSec']?>

</em></div></td>

<td width="8%" height="35" class="text">

<div align="center"> <em>

<?=$row['CodSec']?>

</em></div></td>

<td width="8%" height="35" class="text">

<div align="center"> <em>

<?=$row['Boli']?>

</em></div></td>

<td width="6%" height="35" class="text">

<div align="center"> <em>

<?=$text?>

</em></div></td>

</tr>

<?

}

mysql_free_result ($res);

?>

</table>

<br>

<table width="30%" border="0" align="center">

<tr>

<td> <div align="center"><a href="add_sec.php" target="_parent" class="link1">Add

new</a></div></td>

</tr>

</table>

<div align="center"><br>

<?=$pageinfo[showpages]?>

</div>

</body>

</html>

<?

//commmon library for all scripts

//–––––––––––––––––––––––––––––––––––

// Global variables

//Login & password for admin

$admlogin="Admin";

$admpas="test";

//–––––––––––––––––––––––––––––––––––

// Global functions

//–––––––––––––––––––––––––––––––––––

function Autorization()

{

//control autorisation for admin pages

global $Access,$admlogin,$admpas,$SCRIPT_NAME;

session_start();

if( !session_is_registered("Access") || $Access!="admin")

{

// write in log file that was unauthorised access

LogInformation("Unauthorized acces: $SCRIPT_NAME");

header("Location: /adm/connect.php");

exit;

}

}

//–––––––––––––––––––––––––––––––––––

function ConnectDB($dtbase)

{

// connects to database

mysql_connect ("", "root","test") or die ("Could not connect");

mysql_select_db ($dtbase);

}

//–––––––––––––––––––––––––––––––––––

function Nocache()

{

//don't permit to cache page

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

header("Cache-Control: no-cache, must-revalidate");

header("Pragma: no-cache");

}

//–––––––––––––––––––––––––––––––––––

function LogInformation($str)

{

global $REMOTE_ADDR;

//insert in log file some information

global $logfile;

$f=fopen($logfile,"a+t");

// write date, time and remote IP address

fputs($f,"DateTime: ".date("Y-m-d H:i")." IP: $REMOTE_ADDR \n");

fputs($f,"".$str."\n\n");

fclose($f);

}

//–––––––––––––––––––––––––––––––––––

function ShowMessage($message)

{

// show message for administrator

$message=urlencode($message);

header("Location: admmsg.php?message=".$message);

exit;

}

//–––––––––––––––––––––––––––––––––––

function DivideInPages($reconpage,$numrec)

{

//divide in page output information

global $page,$HTTP_GET_VARS,$HTTP_POST_VARS,$REQUEST_METHOD;

//select request method in wich is indecated page var.

if($REQUEST_METHOD=="POST") $source=$HTTP_POST_VARS;

else $source=$HTTP_GET_VARS;

//find address string (without page variable)

$bufferInit="";

foreach($source as $key=>$val ){ if($key!="page") $bufferInit.="&$key=".urlencode($val); }

// if don't exist page variable put default value

if(!$page) $page=1;

//calculate min and max values of dataset

if($numrec>$reconpage) $numpages=(int)ceil($numrec/$reconpage);

if(($numrec-$numpages*$reconpage)>0) $numpages++;

$min=($page-1)*$reconpage+1;

$max=$page*$reconpage;

if($max>$numrec) $max=$numrec;

//generate navigation pannel for pages

if($numpages!=1)

{

for($i=1;$i<=$numpages;$i++)

{

$k.="";

//find address string for every page link

$buffer=$bufferInit."&page=$i";

//find represintation look of every page link

if($i==$numpages) $shownn=(($i-1)*$reconpage+1)." – $numrec";

else $shownn=(($i-1)*$reconpage+1)." – ".($i*$reconpage);

//print page link if not curent page else without link

if($i==$page) $k.="<span class=\"link\">$shownn</span>";

elseif($i==$numpages) $k.="<a class=\"link1\" href=\"$SCRIPT_NAME?$buffer\">$shownn</a>";

else $k.="<a class=\"link1\" href=\"$SCRIPT_NAME?$buffer\">$shownn</a>";

//put vertical symbol if not last link

if($i!=$numpages) $k.=" |";

$k.=" ";

}

$k.=" ";

}

return array("min"=>$min,"max"=>$max,"numpages"=>$numpages,"showpages"=>$k);

}

//–––––––––––––––––––––––––––––––––––

function SendFormToMail($tomail,$subject)

{

//send all posted vars to email

global $HTTP_POST_VARS;

foreach( $HTTP_POST_VARS as $key=>$value) $msg.="$key: $value \n";

mail($tomail,$subject,$msg);

}

//–––––––––––––––––––––––––––––––––––

?>

Fișa medicală

<?

include("../connect.php");

//Autorization();

ConnectDB("policlinica");

if($PacientID)

{

$query = "SELECT FisaID, PacientID, ID, PersonalID, CodFisa FROM Fishemed WHERE PacientID=$PacientID";

$res=mysql_query ($query) or die (mysql_error());

$row = mysql_fetch_array ($res);

$numrec = mysql_num_rows($res);

$reconpage=15;

$pageinfo=DivideInPages($reconpage,$numrec);

if($numrec) mysql_data_seek ($res,$pageinfo[min]-1);

}

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>Verificare cod</title>

<script language="JavaScript">

<!–hide

function isFieldEmpty(field){

//control if field is not empty

if(field.value=="")

{

// alert("ClientID or Email is required");

field.focus();

return false;

}

else

{

// alert("2");

return true;

}

}

//–––––––––––––––––––––––––-

function ControlForm()

{

if(isFieldEmpty(document.fid.CodFisa)) return true;

else {alert("CodFisa este necesar");return false;}

}

//–>

</script>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body bgcolor="#CCCCCC">

<form name="fid" method="get" action="info_fisa.php" onSubmit="return ControlForm();" >

<table width="90%" height="200" border="0" align="center">

<tr>

<td> <table width="100%" height="50" border="0" align="left" cellpadding="0" cellspacing="0">

<tr>

<td colspan="2" align="center" height="15"> <div align="left"><b><font size="6" class="capit">Introdu

numarul fishei personale a pacientului</font></b></div></td>

</tr>

</table>

<br>

<br>

<br>

<br>

<br>

<table width="43%" border="1" cellspacing="0" cellpadding="2" align="left" bordercolor="#FFFFFF" bgcolor="#006699">

<tr>

<td width="23%"> <div align="center"><b><i><font color="#FFFFFF">CodFisa</font></i></b></div></td>

<td width="55%"> <div align="center">

<input name="CodFisa" type="text" class="inp150" id="CodFisa">

</div></td>

<td width="22%"> <div align="center">

<input type="submit" value="Arata fisha" name="Submit" class="inptext">

</div></td>

</tr>

</table>

<br>

<br>

</td>

</tr>

</table>

</form>

</body>

</html>

<?

include("../connect.php");

//Autorization();

ConnectDB("policlinica");

if($CodFisa)

{

$query = "SELECT Fishemed.FisaID, Fishemed.PacientID as Fispacid, Fishemed.ID, Fishemed.PersonalID as fispersid, CodFisa, Pacienti.PacientID as pacid, Pacienti.Nume as pacnume, Pacienti.Prenume as pacprenume, Personal.Nume as persnume, Personal.Prenume as persprenume, Personal.Functie as persfunctie, Orar.Ziua as zi, Orar.DataOra as data, Orar.TipConsultatie as tipcons, Orar.PlataConsult as platacons, Orar.Diagnosul as diag FROM Fishemed,Pacienti,Personal,Orar WHERE Fishemed.CodFisa=$CodFisa and Fishemed.PacientID=Pacienti.PacientID and Fishemed.PersonalID=Personal.PersonalID and Fishemed.ID=Orar.ID";

$res=mysql_query ($query) or die (mysql_error());

$row = mysql_fetch_array ($res);

$numrec = mysql_num_rows($res);

$reconpage=15;

$pageinfo=DivideInPages($reconpage,$numrec);

if($numrec) mysql_data_seek ($res,$pageinfo[min]-1);

}

?>

<html>

<head>

<title>Informatii despre sectie</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link href="../styles.css" rel="stylesheet" type="text/css">

</head>

<body bgcolor="#CCCCCC">

<table width="90%" border="0" align="center">

<tr>

<td> <div align="center"><i><b class="text"><font size="6">Informatii despre

Fisa medicala a pacientului <em> <font color="#990000"> <br>

<?=$row['pacnume']?>

<?=$row['pacprenume']?>

</font> </em></font></b></i></div></td>

</tr>

</table>

<table width="98%" border="1" align="center" cellpadding="1" cellspacing="2" bordercolor="#990000">

<tr bgcolor="#99CCFF">

<td height="32" colspan="5">

<div align="center"><em><strong>Tabel Fisamed</strong></em></div></td>

</tr>

<tr>

<td height="32">

<div align="center"><em><strong>ID fisha</strong></em></div></td>

<td height="32">

<div align="center"><em><strong>Cod fisha</strong></em></div></td>

<td height="32" colspan="3" rowspan="2">

<div align="center"></div>

<div align="center"></div>

<div align="center"></div>

<div align="center"></div>

<div align="center"></div>

<div align="center">Aici sunt datele privitor la fisa medicala <br>

cu identificatorul <em>

<?=$row['FisaID']?>

</em>si codul <em>

<?=$row['CodFisa']?>

</em></div></td>

</tr>

<tr>

<td height="32">

<div align="center"><em>

<?=$row['FisaID']?>

</em></div></td>

<td height="32">

<div align="center"><em>

<?=$row['CodFisa']?>

</em></div></td>

</tr>

<tr bgcolor="#99CCFF">

<td height="32" colspan="5">

<div align="center"><em><strong>Tabel Pacienti</strong></em></div></td>

</tr>

<tr>

<td height="32">

<div align="center"><em><strong>Nume</strong></em></div></td>

<td height="32">

<div align="center"><em><strong>Prenume</strong></em></div></td>

<td height="32" colspan="3" rowspan="2">

<div align="center">Aici sunt datele privitor

la pacientul <em> </em> cu numele<em>

<?=$row['pacnume']?>

</em>si <br>

prenumele<em>

<?=$row['pacprenume']?>

, care a fost tratat de medicul <em>

<?=$row['persnume']?>

</em> </em></div>

<div align="center"></div>

<div align="center"></div>

<div align="center"></div>

<div align="center"></div>

<div align="center"></div></td>

</tr>

<tr>

<td height="32">

<div align="center"><em>

<?=$row['pacnume']?>

</em></div></td>

<td height="32">

<div align="center"><em>

<?=$row['pacprenume']?>

</em></div></td>

</tr>

<tr bgcolor="#99CCFF">

<td height="32" colspan="5">

<div align="center"><em><strong>Tabel Personal</strong></em></div></td>

</tr>

<tr>

<td height="32">

<div align="center"><em><strong>Nume</strong></em></div></td>

<td height="32">

<div align="center"><em><strong>Prenume</strong></em></div></td>

<td height="32">

<div align="center"><em><strong>Functie</strong></em></div></td>

<td height="32" colspan="2" rowspan="2">

<div align="center"></div>

<div align="center"></div>

<div align="center"></div>

<div align="center">Aceasta fisa a fost completata de medicul <em>

<?=$row['persnume']?>

<?=$row['persprenume']?>

,<br>

medic in domeniul

<?=$row['persfunctie']?>

</em></div></td>

</tr>

<tr>

<td height="32">

<div align="center"><em>

<?=$row['persnume']?>

</em></div></td>

<td height="32">

<div align="center"><em>

<?=$row['persprenume']?>

</em></div></td>

<td height="32">

<div align="center"><em>

<?=$row['persfunctie']?>

</em></div></td>

</tr>

<tr bgcolor="#99CCFF">

<td height="32" colspan="5">

<div align="center"><em><strong>Tabel Orar</strong></em></div></td>

</tr>

<tr>

<td height="32">

<div align="center"><em><strong>Ziua</strong></em></div></td>

<td height="32">

<div align="center"><em><strong>DataOra</strong></em></div></td>

<td height="32">

<div align="center"><em><strong>TipConsultatie</strong></em></div></td>

<td height="32">

<div align="center"><em><strong>PlataConsult</strong></em></div></td>

<td height="32">

<div align="center"><em><strong>Diagnosul</strong></em></div></td>

</tr>

<tr>

<td height="32">

<div align="center"><em>

<?=$row['zi']?>

</em></div></td>

<td height="32">

<div align="center"><em>

<?=$row['data']?>

</em></div></td>

<td height="32">

<div align="center"><em>

<?=$row['tipcons']?>

</em></div></td>

<td height="32">

<div align="center"><em>

<?=$row['platacons']?>

</em></div></td>

<td height="32">

<div align="center"><em>

<?=$row['diag']?>

</em></div></td>

</tr>

</table>

</body>

</html>

<?php

include( "./dbopen.php" );

$pageSize = 10;

if ($page == "") {

$page = 1;

}

$sSQL_cnt = "SELECT count(*) As Total FROM guestbook";

$result_cnt = mysql_query($sSQL_cnt, $link);

$row = mysql_fetch_object($result_cnt);

$nrows = $row -> Total;

$nu = $nrows % $pageSize;

$pp = $nrows / $pageSize;

$m = $nu / $pageSize;

$cel = $pp – $m;

if ($nu != 0)

$kolvo_pages = $cel + 1;

else

$kolvo_pages = $cel;

if ($page > $kolvo_pages)

$page = $kolvo_pages;

if ($page == 1) {

$sSQL = "SELECT guestbook_id, DATE_FORMAT(issuedate,\"%d-%m-%Y %H:%i\") As fissuedate, content, user_name, email, href, reply FROM guestbook ORDER BY issuedate DESC, guestbook_id DESC LIMIT $pageSize";

}

else {

$offset = ($page – 1)*$pageSize;

$sSQL = "SELECT guestbook_id, DATE_FORMAT(issuedate,\"%d-%m-%Y %H:%i\") As fissuedate, content, user_name, email, href, reply FROM guestbook ORDER BY issuedate DESC, guestbook_id DESC LIMIT $offset,$pageSize";

}

$result = mysql_query($sSQL, $link);

?>

<script Language="JavaScript"><!–

function Validator(theForm)

{

if (theForm.USER_NAME.value == "")

{

alert("Numele este necesar!");

theForm.USER_NAME.focus();

return (false);

}

if (theForm.CONTENT.value == "")

{

alert("Scrieti un mesaj !");

theForm.CONTENT.focus();

return (false);

}

return (true);

}

//–></script>

<table border=1 cellspacing=2 cellpadding=1 width=100% bordercolor="#000000">

<tr><td>

<table border=1 cellspacing=0 cellpadding=0 width=100% bordercolor="#000000">

<tr>

<td valign="top"><font face="Verdana, Arial" size="2"><b>Adauga mesaj in cartea de mesage</b></font></td>

</tr>

<tr>

<td valign="top">

<form action="post.php" method="POST" onsubmit="return Validator(this)">

<table border="0" width="400">

<tr>

<td valign="top" width="45%"><b>Numele:<SUP>*</SUP></b></td>

<td valign="top" width="55%"><input style="width: 250px" size=25 type="text" size="30" name="USER_NAME" maxlength=50></td>

</tr>

<tr>

<td valign="top" width="45%"><b>E-Mail:</b></td>

<td valign="top" width="55%"><input style="width: 250px" size=25 type="text" size="30" name="EMAIL" maxlength=50></td>

</tr>

<tr>

<td valign="top" width="45%"><b>URL:</b></td>

<td valign="top" width="55%"><input style="width: 250px" size=25 type="text" size="30" name="HREF" value="http://"></td>

</tr>

<tr>

<td valign="middle" width="45%"><b>Mesajul:<SUP>*</SUP></b></td>

<td valign="top" width="55%"><textarea style="width: 250px" name="CONTENT" rows="5" cols="25" wrap="Virtual"></textarea></td>

</tr>

<tr>

<td colspan="2"></td>

</tr>

<tr>

<td align="center" colspan="2"><input type="submit" value="Adauga mesaj" STYLE="cursor: hand; "></td>

</tr>

</table>

</form>

<?php

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

$USER_NAME = stripslashes($row["user_name"]);

$HREF = stripslashes($row["href"]);

$EMAIL = stripslashes($row["email"]);

$ISSUEDATE = $row["fissuedate"];

$CONTENT = stripslashes(nl2br($row["content"]));

$REPLY = stripslashes(nl2br($row["reply"]));

?>

<hr>

<?php

if ($EMAIL != "") {

?>

<a HREF="mailto:<?php echo($EMAIL); ?>" class="uname">

<?php

}

echo("<font class='uname'>".$USER_NAME."</font>");

if ($EMAIL != "") {

?>

</a>

<?php

}

?>

&nbsp;&nbsp;

<?php if ($HREF != "http://") { ?>

<a HREF="<?php echo($HREF); ?>" class="next" target="_blank"><?php echo($HREF); ?></a>

<?php } ?>

&nbsp;

<i><?php echo($ISSUEDATE); ?></i>&nbsp;&nbsp;

<br>

<table BORDER="0" width="100%" cellspacing=2>

<tr>

<td bgcolor="#FFFFFF">

<?php echo($CONTENT); ?>

</td>

</tr>

<?php

if ($REPLY != "") {

?>

<tr>

<td bgcolor="#FFFFFF"><font class="reply">

<b><?php echo($REPLY); ?></b></font>

</td>

</tr>

<?php

}

?>

</table>

<?php

}

?>

<p align=center>

<?php

$nPages = $kolvo_pages;

if ($nPages > 1) {

if ($page != 1) {

echo("<a class='next' href=\"guest.php?page=" . ($page – 1) . "\">&lt;</a>");

} else {

echo("&lt;");

}

for($i = 1;$i <= $nPages; $i++) {

if ($i == 1) {

echo(" | ");

}

if ($i == $page) {

echo("$i | ");

} else {

echo("<a class='next' href=\"guest.php?page=" . $i . "\">" . $i . "</a> | ");

}

}

if ($page != $nPages) {

echo("<a class='next' href=\"guest.php?page=" . ($page + 1) . "\">&gt;</a>");

} else {

echo("&gt;");

}

}

?>

</td>

</tr>

</table>

</td>

</tr>

</table>

<?php

mysql_close($link);

?>

Istorie

<?

include("../connect.php");

//Autorization();

ConnectDB("policlinica");

if($PersonalID)

{

$query = "SELECT Ziua, DataOra, PacientID, TipConsultatie, PlataConsult, PersonalID FROM Orar WHERE PersonalID=$PersonalID ORDER BY DataOra Desc LIMIT 30";

$res=mysql_query ($query) or die (mysql_error());

$row = mysql_fetch_array ($res);

$numrec = mysql_num_rows($res);

$reconpage=15;

$pageinfo=DivideInPages($reconpage,$numrec);

if($numrec) mysql_data_seek ($res,$pageinfo[min]-1);

}

?>

<html>

<head>

<title>Informatii despre sectie</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link href="../styles.css" rel="stylesheet" type="text/css">

</head>

<body bgcolor="#CCCCCC">

<table width="90%" border="0" align="center">

<tr>

<td> <div align="center"><i><b class="text"><font size="6">Istoria de lucru

a medicului <em>

<?=$row['PersonalID']?>

pe ultimele 30 zile</em></font></b></i></div></td>

</tr>

</table>

<br>

<table width="98%" border="1" cellspacing="1" cellpadding="1" bordercolor="#000000" align="center">

<tr align="center" bgcolor="#99CCFF" class="text">

<td height="35">

<div align="center"><em><strong>Ziua</strong></em></div></td>

<td height="35">

<div align="center"><em><strong>DataOra</strong></em></div></td>

<td height="35">

<div align="center"><em><strong>PacientID</strong></em></div></td>

<td height="35">

<div align="center"><strong><em>Tip consultati</em></strong></div></td>

<td height="35"><em><strong>Plata consultatie</strong></em></td>

</tr>

<?

for($i=$pageinfo[min];$i<=$pageinfo[max];$i++)

{

$row = mysql_fetch_array ($res);

?>

<?

$text1 = "<a href='../Pacienti/info_pacient.php?PacientID=$row[PacientID]'>View</a>";

?>

<tr>

<td height="45" class="text">

<div align="center"><em>

<?=$row['Ziua']?>

</em></div></td>

<td height="45" class="text">

<div align="center"> <em>

<?=$row['DataOra']?>

&nbsp; </em></div></td>

<td height="45" class="text">

<div align="center"> <em>

<?=$row['PacientID']?>

<strong><em>- <strong><em>

<?=$text1?>

</em></strong><strong><em></em></strong><br>

</em></strong></em></div></td>

<td height="45" class="text">

<div align="center"><em>

<?=$row['TipConsultatie']?>

</em> </div></td>

<td height="45" class="text">

<div align="center"> <em>

<?=$row['PlataConsult']?>

lei </em></div></td>

</tr>

<?

}

mysql_free_result ($res);

?>

</table>

</body>

</html>

Scripturi

//–––––––––––––––––––––––––-

function isFieldEmpty(field)

{

//control if field is not empty

if(field=="")

{

alert("1");

field.focus();

return true;

}

else

{

alert("2");

return false;

}

}

//–––––––––––––––––––––––––-

function ControlForm()

{

if((isFieldEmpty(document.fid.ClientID.value))||(isFieldEmpty(document.fem.Email.value))) alert("ok");

else alert("bad");

// (isFieldEmpty(document.fem.Email,"Email is required")) return false;

//if (!isEmail(document.fem.Email)) return false;

}

//–––––––––––––––––––––––––-

function isEmail(field)

{

//is field is valid email adress

var email=field.value;

var atPresent=false;

var dotPresent=false;

for(var i=1; i<email.length;i++)

{

var c=email.substring(i,i+1);

if (c=="@") atPresent=true;

if (c==".") dotPresent=true;

}

if(!(dotPresent && atPresent))

{

alert("Incorect format of email");

field.focus();

return false;

}

else return true;

}

//–––––––––––––––––––––––––-

function isNumeric(field,message)

{

//control if field is corect integer value

var Chars = "0123456789";

for (var i = 0; i < field.value.length; i++)

{

if (Chars.indexOf(field.value.charAt(i)) == -1)

{

alert(message);

field.focus();

return false;

}

}

return true;

}

//–––––––––––––––––––––––––-

//–––––––––––––––––––––––––-

function isNumeric(field,message)

{

//control if field is corect integer value

var Chars = "0123456789";

for (var i = 0; i < field.value.length; i++)

{

if (Chars.indexOf(field.value.charAt(i)) == -1)

{

alert(message);

field.focus();

return false;

}

}

return true;

}

//–––––––––––––––––––––––––-

function isEmail(field)

{

//is field is valid email adress

var email=field.value;

if (email.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)

return true;

else

{

alert("Incorect format of email");

field.focus();

return false;

}

}

//–––––––––––––––––––––––––-

function isFieldEmpty(field,message)

{

//control if field is not empty

if(field.value.length==0)

{

alert(message);

field.focus();

return true;

}

else return false;

}

//–––––––––––––––––––––––––-

//–––––––––––––––––––––––––-

function Increase(item)

{

eval ("document.basket.It" + item + ".value++");

}

//–––––––––––––––––––––––––-

function Decrease(item)

{

var curent=eval ("document.basket.It" + item + ".value");

if(curent>0) eval ("document.basket.It" + item + ".value–");

}

//–––––––––––––––––––––––––-

function PutZero(item)

{

eval ("document.basket.It" + item + ".value=0");

}

//–––––––––––––––––––––––––-

function Login(par)

{

var width=350;

var height=300;

if (screen)

{

y = (screen.availHeight – height)/2;

x = (screen.availWidth – width)/2;

}

//alert("/users/userlog.php?p="+par+"&rnd="+Math.random()+"&From=main&Email="+escape(email),0,"height=250px; width=400px;");

nw= window.open("/users/login.php",0,'width='+width+',height='+height+',screenX='+x+',screenY='+y+',top='+y+',left='+x+',status=1');

//event.cancelBubble=true;

}

//–––––––––––––––––––––––––-

function ShowThanksWindow()

{

var width=350;

var height=200;

if (screen)

{

y = (screen.availHeight – height)/2;

x = (screen.availWidth – width)/2;

}

//window.open('nextpage.htm','newWin','width='+width+',height='+height+',screenX='+x+',screenY='+y+',top='+y+',left='+x);

//nw= window.showModalDialog("/basket/thanks_popup.html",0,"center:yes; status=no; resizable=no; dialogHeight=250px; dialogWidth=400px;");

nw= window.open("/basket/thanks_popup.html",0,'width='+width+',height='+height+',screenX='+x+',screenY='+y+',top='+y+',left='+x);

location.href="/home_main.php";

}

//–––––––––––––––––––––––––-

function CloseWin(rez)

{

if(rez==1)

{

opener.top.topFrame.location.href=opener.top.topFrame.location.href;

if(opener.top.mainFrame.location.pathname=="/basket/checkout.php")

{

opener.top.mainFrame.location.href=opener.top.mainFrame.location.href;

}

}

window.close();

}

//–––––––––––––––––––––––––-

function ControlBasket()

{

dom = (document.getElementById)? true : false;

if(dom)

{

fm=document.getElementById("bs");

nodnum=fm.childNodes.length;

}

else

{

nodnum=document.basket.elements.length;

}

for(i=0; i< nodnum;i++)

{

if(dom)

{

if(fm.childNodes[i].type=="text")

{ if(!isNumeric(fm.childNodes[i],"Amount value must be a positive number")) return false; }

}

else

{

if(document.basket.elements(i).type=="text")

{ if(!isNumeric(document.basket.elements(i),"Amount value must be a positive number")) return false; }

}

}

return true;

}

//–––––––––––––––––––––––––-

function BrowserCheck()

{

var man='kuh';

}

//–––––––––––––––––––––––––-

function ControlCheckout(cl)

{

if(cl==0)

{

if (isFieldEmpty(document.checkout.Surname,"Surname is reqied")) return false;

if (isFieldEmpty(document.checkout.Forename,"Forename is reqied")) return false;

if (isFieldEmpty(document.checkout.House,"House number is reqied")) return false;

if (isFieldEmpty(document.checkout.Street,"Street is reqied")) return false;

if (isFieldEmpty(document.checkout.City,"City is reqied")) return false;

if (isFieldEmpty(document.checkout.Postcode,"Postcode is reqied")) return false;

if (isFieldEmpty(document.checkout.Email,"Email is reqied")) return false;

if(!isEmail(document.checkout.Email)) return false;

if((document.checkout.Pas.value.length!=0 || document.checkout.Pas2.value.length!=0) && document.checkout.Pas.value!=document.checkout.Pas2.value)

{

alert("Password in both fields must be the same");

document.checkout.Pas2.focus();

return false;

}

}

if (isFieldEmpty(document.checkout.CreditCardNumber,"Credit card date is reqied")) return false;

if(!isNumeric(document.checkout.CreditCardNumber,"Credit card value must be a number")) return false;

return true;

}

//–––––––––––––––––––––––––-

function ShowMesAboutCookies()

{

var width=350;

var height=200;

if (screen)

{

y = (screen.availHeight – height)/2;

x = (screen.availWidth – width)/2;

}

nw= window.open("/basket/cookies.html",0,'width='+width+',height='+height+',screenX='+x+',screenY='+y+',top='+y+',left='+x);

}

//–––––––––––––––––––––––––-

function PrintOrder()

{

var width=800;

if (screen)

{

var height=screen.availHeight-100;

x = (screen.availWidth – width)/2;

}

window.open("/basket/print.php",0,'width='+width+',height='+height+',screenX='+x+',screenY=0,top=,left='+x+',menubar=yes, status=yes');

}

//–––––––––––––––––––––––––-

function tghjype()

{

}

//–––––––––––––––––––––––––-

Orar

<?

include("../connect.php");

//Autorization();

ConnectDB("policlinica");

if ($action=='change')

{

$query = "SELECT * FROM Orar WHERE ID=$ID";

$res=mysql_query ($query) or die (mysql_error());

$row = mysql_fetch_array ($res);

}

elseif ($action=='update')

{

$query =" UPDATE Orar SET Ziua=\"$Ziua\" , DataOra=\"$DataOra\" , PacientID=\"$PacientID\" , TipConsultatie=\"$TipConsultatie\" , PlataConsult=\"$PlataConsult\" , Diagnosul=\"$Diagnosul\" WHERE ID=\"$ID\" ";

mysql_query ($query) or die (mysql_error());

ShowMessage("Graficul de lucru a fost modificat");

}

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>Shimba Orar</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body bgcolor="#CCCCCC">

<form action=modifica_orar.php method=post name=add enctype="multipart/form-data" >

<div align="center"><b class="admheader">

<input name="ID" type="hidden" id="ID" value="<?=$ID?>" >

<input type="hidden" name="action" value="update" >

</b></div>

<br>

<table width="65%" border="1" align="center" cellpadding="1" cellspacing="1" bordercolor="#000000">

<tr>

<td colspan="3" height="35">

<div align="center" class="headtab"><b><font size="6">Modificarea graficului de

serviciu</font></b></div></td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>1</b></i></div></td>

<td width="53%" height="35" class="list"><b>Ziua</b></td>

<td width="35%" height="35">

<input name="Ziua" type="text" id="Ziua" value="<?=$row['Ziua']?>" size="12">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>2</b></i></div></td>

<td width="53%" height="35" class="list"><b>DataOra</b></td>

<td width="35%" height="35">

<input name="DataOra" type="text" id="DataOra" value="<?=$row['DataOra']?>" size="12">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>3</b></i></div></td>

<td width="53%" height="35" class="list"><b>PacientID</b></td>

<td width="35%" height="35">

<input name="PacientID" type="text" id="PacientID" value="<?=$row['PacientID']?>" size="12">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>4</b></i></div></td>

<td width="53%" height="35" class="list"><b>TipConsultatie</b></td>

<td width="35%" height="35">

<input name="TipConsultatie" type="text" id="TipConsultatie" value="<?=$row['TipConsultatie']?>" size="12">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>5</b></i></div></td>

<td width="53%" height="35" class="list"><b>PlataConsult</b></td>

<td width="35%" height="35">

<input name="PlataConsult" type="text" id="PlataConsult" value="<?=$row['PlataConsult']?>" size="12">

</td>

</tr>

<tr>

<td width="7%" height="35" class="list">

<div align="center"><i><b>6</b></i></div></td>

<td width="53%" height="35" class="list"><b>Diagnosul</b></td>

<td width="35%" height="35">

<input name="Diagnosul" type="text" id="Diagnosul" value="<?=$row['Diagnosul']?>" size="12" >

</td>

</tr>

<tr>

<td height="35" colspan="3">

<div align="right">

<input type="submit" name="submit" value="Update">

</div></td>

</tr>

</table>

</form>

</body>

</html>

<?

include("../connect.php");

//Autorization();

ConnectDB("policlinica");

if ($REQUEST_METHOD=="POST")

{

$cols="Ziua,DataOra,PacientID,TipConsultatie,PlataConsult,Diagnosul,PersonalID";

$vals="\"$Ziua\",\"$DataOra\",\"$PacientID\",\"$TipConsultatie\",\"$PlataConsult\",\"$Diagnosul\",\"$PersonalID\" ";

$query = "INSERT INTO Orar ($cols) VALUES ($vals)";

mysql_query ($query) or die (mysql_error());

ShowMessage("Datele au fost introduse in tabela Orar");

}

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>Shimba Orar</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body bgcolor="#CCCCCC">

<form action=add_pacient_orar.php method=post name=add enctype="multipart/form-data" >

<div align="center"><b class="admheader"> </b></div>

<table width="65%" border="1" align="center" cellpadding="1" cellspacing="1" bordercolor="#000000">

<tr>

<td colspan="3" height="30">

<div align="center" class="headtab"><b><font size="6">Adaugare pacient la consultatie</font></b></div></td>

</tr>

<tr>

<td width="7%" height="30" class="list">

<div align="center"><i><b>1</b></i></div></td>

<td width="53%" height="30" class="list"><b>Ziua</b></td>

<td width="35%" height="30">

<input name="Ziua" type="text" id="Ziua" size="12">

</td>

</tr>

<tr>

<td width="7%" height="30" class="list">

<div align="center"><i><b>2</b></i></div></td>

<td width="53%" height="30" class="list"><b>DataOra</b></td>

<td width="35%" height="30">

<input name="DataOra" type="text" id="DataOra" size="12">

</td>

</tr>

<tr>

<td width="7%" height="30" class="list">

<div align="center"><i><b>3</b></i></div></td>

<td width="53%" height="30" class="list"><b>PacientID</b></td>

<td width="35%" height="30">

<input name="PacientID" type="text" id="PacientID" size="12">

</td>

</tr>

<tr>

<td width="7%" height="30" class="list">

<div align="center"><i><b>4</b></i></div></td>

<td width="53%" height="30" class="list"><b>TipConsultatie</b></td>

<td width="35%" height="30">

<input name="TipConsultatie" type="text" id="TipConsultatie" size="12">

</td>

</tr>

<tr>

<td width="7%" height="30" class="list">

<div align="center"><i><b>5</b></i></div></td>

<td width="53%" height="30" class="list"><b>PlataConsult</b></td>

<td width="35%" height="30">

<input name="PlataConsult" type="text" id="PlataConsult" size="12">

</td>

</tr>

<tr>

<td width="7%" height="30" class="list">

<div align="center"><i><b>6</b></i></div></td>

<td width="53%" height="30" class="list"><b>Diagnosul</b></td>

<td width="35%" height="30">

<input name="Diagnosul" type="text" id="Diagnosul" size="12" >

</td>

</tr>

<tr>

<td width="7%" height="30" class="list">

<div align="center"><i><b>6</b></i></div></td>

<td width="53%" height="30" class="list"><b>PersonalID</b></td>

<td width="35%" height="30">

<input name="PersonalID" type="text" id="PersonalID" size="12" >

</td>

</tr>

<tr>

<td height="30" colspan="3">

<div align="right">

<input type="submit" name="submit" value="Adauga">

</div></td>

</tr>

</table>

</form>

</body>

</html>

<?

include("../connect.php");

//Autorization();

ConnectDB("policlinica");

if($PersonalID)

{

$query = "SELECT ID, Ziua, DataOra, PacientID, TipConsultatie, PlataConsult, Diagnosul, PersonalID FROM Orar WHERE PersonalID=$PersonalID";

$res=mysql_query ($query) or die (mysql_error());

$row = mysql_fetch_array ($res);

$numrec = mysql_num_rows($res);

$reconpage=15;

$pageinfo=DivideInPages($reconpage,$numrec);

if($numrec) mysql_data_seek ($res,$pageinfo[min]-1);

}

elseif($action='view')

{

$query = "SELECT ID, Ziua, DataOra, PacientID, TipConsultatie, PlataConsult, Diagnosul, PersonalID FROM Orar WHERE Ziua='$Ziua'";

// echo $query;

$res=mysql_query ($query) or die (mysql_error());

$row = mysql_fetch_array ($res);

$numrec = mysql_num_rows($res);

$reconpage=15;

$pageinfo=DivideInPages($reconpage,$numrec);

if($numrec) mysql_data_seek ($res,$pageinfo[min]-1);

}

?>

<html>

<head>

<title>Informatii despre sectie</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link href="../styles.css" rel="stylesheet" type="text/css">

</head>

<body bgcolor="#CCCCCC">

<table width="90%" border="0" align="center">

<tr>

<td> <div align="center"><i><b class="text"><font size="6">Informatii despre

orarul de lucra a medicului <em>

<?=$row['PersonalID']?>

</em></font><em> </em></b></i></div></td>

</tr>

</table>

<br>

<table width="98%" border="1" cellspacing="1" cellpadding="1" bordercolor="#000000" align="center">

<tr align="center" bgcolor="#99CCFF" class="text">

<td height="35">

<div align="center"><em><strong>Ziua</strong></em></div></td>

<td height="35">

<div align="center"><em><strong>DataOra</strong></em></div></td>

<td height="35">

<div align="center"><em><strong>PacientID</strong></em></div></td>

<td height="35">

<div align="center"><strong><em>TipConsultatie</em></strong></div></td>

<td height="35"><em><strong>PlataConsult</strong></em></td>

<td height="35"><em><strong>Diagnosul</strong></em></td>

<td height="35"><strong>Orar</strong></td>

</tr>

<?

for($i=$pageinfo[min];$i<=$pageinfo[max];$i++)

{

$row = mysql_fetch_array ($res);

?>

<?

$text = "<a href='modifica_orar.php?action=change&ID=$row[ID]' class='link1'>Modifica orar de serviciu</a>";

?>

<?

$text1 = "<a href='../Pacienti/info_pacient.php?PacientID=$row[PacientID]'>View</a>";

?>

<?

$text2 = "<a href='../Admin/Pacienti/add_pacient.php'>Add pacient date</a>";

?>

<tr>

<td height="35" class="text">

<div align="center"><em><a href="info_orar.php?action=view&Ziua=<?=$row['Ziua']?>">

<?=$row['Ziua']?>

</a></em></div></td>

<td height="35" class="text">

<div align="center"> <em>

<?=$row['DataOra']?>

&nbsp; </em></div></td>

<td height="35" class="text">

<div align="center"> <em>

<?=$row['PacientID']?>

– <strong><em>

<?=$text1?>

</em></strong><strong><em><br>

</em></strong></em></div></td>

<td height="35" class="text">

<div align="center"><em>

<?=$row['TipConsultatie']?>

</em> </div></td>

<td height="35" class="text">

<div align="center"> <em>

<?=$row['PlataConsult']?>

</em></div></td>

<td height="35" class="text">

<div align="center"> <em>

<?=$row['Diagnosul']?>

</em></div></td>

<td height="35" class="text">

<div align="center"><strong><em>

<?=$text?>

</em></strong></div></td>

</tr>

<?

}

mysql_free_result ($res);

?>

</table>

<br>

<table width="50%" border="1" align="center" cellpadding="1" cellspacing="1" bordercolor="#000000">

<tr>

<td><div align="center"><em><a href="add_pacient_orar.php" target="_parent" class="link1"><strong>Adauga

pacient in lista pentru vizita</strong></a></em></div></td>

</tr>

<tr>

<td><div align="center"><em><strong><em> <a href="../Admin/Pacienti/add_pacient.php" class="link1">Add

pacient date</a></em></strong></em></div></td>

</tr>

<tr>

<td><div align="center"><em><strong><em> <a href="../Pacienti/info_pacient.php" class="link1">Vizualizare

pacienti</a></em></strong></em></div></td>

</tr>

</table>

</body>

</html>

Similar Posts

  • Arhitectura Microprocesoarelor

    Cuprins Tema proiectului Circuite de cale – bloc de linie automat. Prezentare generala Principii de urmarire in linie curenta Structuri cu microprocesoare introducere principii de proiectare Microprocesorul INTEL 8086 genaralitati caracteristici de baza terminalele si semnificatiile lor arhitectura interna setul de registre configuratii sistem pentru INTEL 8086 Circuite aditionale INTEL tampoane unidirectionale I8282 tampoane bidirectionale…

  • Interfata de Comenzi Vocale

    Introducere Reþele Neurale Noþiuni generale Unitãþile de procesare (neuronii) Conexiunile dintre unitãþi Activãri ºi reguli de calcul al ieºirilor Terminologie Topologii de reþea Antrenarea reþelelor neurale Clasificarea metodelor de antrenare Modificarea caracteristicilor conexiunilor Adaline ºi Perceptron. Scurtã istorie Adaline (ADAptive LINear Element=element liniar adaptiv) Perceptronul Back–Propagation (propagarea înapoi) Reþele feed-forward cu mai multe straturi Regula…

  • Proiectarea, Realizarea Si Administrarea Unei Retele Locale

    LUCRARE DE LICENȚĂ Proiectarea realizarea și administrarea unei rețele locale Cuprins Introducere Capitolul I I. STUDIUL SI ANALIZA SISTEMULUI EXISTENT 1.1. Prezentarea succinta a unitatii economico-sociale 1.2. Activitatile desfasurate in unitatea economica (caracteristicile generale ale sistemului economic din unitate) 1.3. Studiul sistemului de conducere 1.4. Studiul sistemului condus 1.5. Studiul sistemului informational 1.5.1. Schema fluxului…

  • Tehnologii Utilizate

    INTRODUCERE Dezvoltarea rapidă din ultima perioadă a resurselor software și hardware din domeniul tehnologiei informației are meritul de a oferi o mai bună comunicare și un acces mult mai rapid la toate categoriile de date. Motivația alegerii lucrării constă in contribuția la crearea unei baze de date moderne cu interfata accesibila pentru o intreprindere imobiliara…

  • Sistemul de Operare Android

    Capitolul I Introducere Ce este Android? Androidul un sistem de operare mobil creat de compania Google. Transforma dispozitivul mobil intr-un calculator mobil. Sistemul android vine echipat cu un browser Web complet si capacitate de navigare pe Internet, are acces la peste 1.000.000 de aplicații prin Google Play Store, inclusive Gmail, Facebook si numeroase alte servicii,…