Aplicatie Web Pentru Activitatea de Emitere Avize Tehnice de Racordare la Reteaua Electrica de Distributie
LUCRARE DE DIPLOMĂ
Aplicație web pentru activitatea de emitere avize tehnice de racordare la rețeaua electrică de distribuție
CUPRINS
1. INTRODUCERE
În istoria omenirii, progresul societății a fost generat de cunoștințe, deoarece informația, datele erau restrânse cantitativ: lipseau mijloacele de măsură, culegere și transport de date puse la dispoziție de electronică și informatică. În prezent, în societatea actuală se acumulează cantități imense de date, culese cu ajutorul calculatoarelor sau ale echipamentelor informatizate. Calculatoarele sunt deosebit de utile în procesarea de date, dar, până de curând, ele au avut doar capacitate limitată de a procesa și genera informații. Insă evoluția recentă confirma Legea lui Moore care afirma ca la un interval de 18 luni are loc o dublare a capacitații de procesare (urmare a cresterii numarului de tranzistori inglobati in chip și a imbunatatirii algoritmilor și instructiunilor).Ca urmare a situației produse, în toate domeniilede activitate umana apare, ca mijloc esențial de lucru, calculatorul procesor și descoperitor de cunoștințe.
Un scenariu de dezvoltare a capacității mașinilor de a procesa date și cunoștințe, în contextul creșterii puterii de calcul
De ce un sistem informatic în activitatea de emitere avize tehnice de racordare?
Printre principalele utilizări ale tehnicii de calcul sunt sistemele informatice din domeniul economic care are ca scop eficientizarea activităților, reducerea cheltuielilor dar și creșterea calității servicilor oferite clienților. Un sistem informatic ce imbunătățește activitatea de emitere avize tehnice de racordare este o necesitate pentru un operator de distribuție energie electrică. Factorii care au dus la necesitatea acestor implementari sunt:
Volumul mare de date;
Complexitatea datelor utilizate;
Dinamica modificărilor in continua creștere;
Costurile de operare;
Necesitatea obținerii unor informatii intr-un timp cât mai scurt;
Creșterea standardelor solicitate de societatea civilă dar și de diverse organisme;
Nevoile de arhivare electronică a datelor;
Ținând cont de cele scrise mai sus, încerc să propun în proiectul de față o soluție cât mai utilă pentru a usura și reorganiza activitatea Serviciului Energetic, Acces rețea. Mai jos este prezentat un site dinamic efectuat cu ajutorul HTML, limbajelor de programare PHP, iar datele sunt stocate într-o bază de date MySQL. Pentru a vizualiza aplicația am folosit un Server Apache. Am ales această opțiune din următoarele considerente:
Aceste servere și programe se instalează și configurează relativ ușor;
Nu necesită componente hardware și software deosebite (pot fi instalate și rulate pe aproape orice calculator care are instalat un sistem de operare mai nou de Windows XP și mai toate distribuțiile uzuale de Linux);
Programele conexe ale aplicației sunt disponibile gratuit (realizate și distribuite în sistemul Open Source);
Această aplicație oferă o extraordinară ușurință în exploatare și de aceea poate fi utilizată și de persoane cu pregătire minimă în utilizarea calculatorului;
Poate fi folosită de mai mulți utilizatori în același timp (este multi-server) prin însăși natura sa;
Aplicația poate fi folosită într-o rețea locală sau făcută disponibilă pe un server de Web (pe Internet)care suportă un minim de limbaje de scripting și oferă suport pentru bazele de date (PHP și MySQL);
Limbajul PHP și serverul de baze de date MySQL sunt recunoscute în lumea designerilor Web ca fiind fiabile și funcționând excelent în tandem;
Dimensiunea acestei baze de date nu justifică achiziționarea unui program comercial (licență plătită) din cauza costurilor foarte mari pe care le implică acest lucru. De asemenea, utilizarea limbajului PHP oferă gradul de securitate necesar aplicației.
Se impune o mică explicație în ceea ce priveste notiunea de “Licență”.
Legislația română, respectiv Art. 2 din Ordonanța de Guvern nr. 124/2000, cuprinde și o definiție a licenței:
“Licența programului pentru calculator – acordul scris al titularului dreptului de autor asupra unui program pentru calculator pentru cesiunea unor drepturi către utilizatorul programului și care însoțește programul."
Licența este, așadar, un contract – acord de voință – între titularul dreptului de autor și utilizator. Acesta însoțește programul pentru calculator și se prezintă în diverse forme. În practică, el poate fi întâlnit atât sub forma scrisă binecunoscută (pe hârtie), cît și sub forma unui document digital ce apare la instalarea sau deschiderea programului. Denumirea folosită de cele mai multe ori pentru un astfel de document este "LICENSE AGREEMENT", iar în limba română "ACORD DE LICENȚĂ" sau "LICENȚĂ".
Pentru început voi face o prezentare succintă a acestei lucrări.
Introducerea lucrării mele "Aplicație Web pentru activitatea de emitere avize tehnice de racordare la rețeaua electrică de distribuție" cuprinde câteva noțiuni generale despre importanța aplicării tehnologiilor informaționale.
Capitolul 2 cuprinde noțiuni de bază despre mediile de comunicare, principalele faze ale teleprelucrării, un scurt istoric al Internetului. Tot aici sunt prezentate pe scurt structura pachetului TCP/IP și nivelele pentru proiectarea rețelelor, precum și modelul de legătură client-server.
Capitolul 3 prezintă etapele realizării unei baze de date relaționale și aspecte privind utilizarea acestora. În subcapitolul 3.3. este prezentat serverul de baze de date MySQL – cel mai popular sistem de management pentru baze de date relaționale.
Capitolul 4 este rezervat mediilor dedezvoltare ale aplicației, cu subcapitolele:
4.1. – HTML – noțiuni generale, marcaje de bază, marcaje pentru liste, cadre, tabele, formulare;
4.2. – Limbajul de programare PHP – noțiuni generale, tipuri de date, variabile, constante;
4.3. – Serverul HTTP Apache–Motivație alegere, alternative, facilități;
Capitolul 5 – descrieactivitatea deemitere avize tehnice de racordare și procedura specifica acestei activități.
În capitolul 6se prezintă "Aplicație Web pentru activitatea de emitere avize tehnice de racordare la rețeaua electrică de distribuție ". Subcapitolul 6.1. subliniază necesitatea și utilitatea aplicației de emitere avize tehnice de racordare, informațiile fiind ușor accesate, verificate și prelucrate de către administrator. Subcapitolul 6.2 cuprinde structura bazei de date, subcapitolul 6.3 descrie organizarea și modul de funcționare al aplicației iar la 6.4 am prezentat sistemul informatic din punct de vedere hardware și software.
În capitolul 7 sunt prezentate concluziile ce se desprind din aplicația propriu-zisă dar și propuneri pentru o posibilă dezvoltare ulterioară.
Anexa din capitolul 8 cuprinde codul sursă al paginilor Web din aplicația prezentată, iar lucrarea se încheie cu bibliografia folosită la întocmirea acestei lucrări.
2. NOȚIUNI DE BAZĂ DESPRE MEDIILE DE COMUNICARE
2.1. Rețele de calculatoare
În ultima jumătate de veac, perioadă cu o explozie a descoperirilor tenhice, de o importanță crucialăa devenit capacitatea și resursele de comunicație de care dispun dezvoltatorii și utilizatorii sistemelor informatice, calculatorul electronic devenind elementul de bază al acestui domeniu de dezvoltare umană.
Calculatoarele sunt utilizate din ce în ce mai des în toate domeniile, economic, tehnic, cercetare, educațional, entertaiment. Astăzi,în toate domeniile de activitate, de la cele mai mărunte până la cercetare ștințifică, simulări meteorologice și vulcanologice,culegerea și prelucrarea informațiilor, nu s-ar putea executa intr-un interval de timp rezonabil pentru sistemul căruia i se adresează, fărăaportul calculatorului. În multe cazuri mai multe calculatoare lucrează împreună pentru a asigura informațiile necesare unui anumit sistem, acestea fiind amplasate în locații diverse de unde se culeg/transmit datele supuse prelucrării. Numărul calculatoarelor conectate la rețele de comunicații în scopul deservirii unor beneficiari aflați la distanță este într-o creștere exponențială.
Teleprelucrareadatelor – procedeul de prelucrare automată a informației de către un calculator cu capacitate de prelucrare ridicată, denumit server, de către mai multipli utilizatori care sunt răspândiți geografic,circulația informației făcându-se prin intermediul sistemelormoderne de telecomunicație (routere, switchuri, modemuri).
Concluzionând un sistem de teleprelucrare sedefinește ca fiindansamblul de echipamente hardware și aplicații software care permite prelucrarea automată și la distanță a informației. Orice sistem informatic care comunică cu altele prin cel puțin o linie de telecomunicație reprezinta un mediu de teleprelucrare.
Principalele etapeîn realizarea teleprelucrării:
colectarea și pregătirea (prelucrarea) datelor la utilizatori, în locurile unde sunt generate;
introducerea/extragerea informației în/din sistemul de transmisie a datelor;
transmisia informației printr-o rețea de telecomunicație;
controlul informațiilor transmise/recepționate;
detectarea erorilor, care s-ar putea să apară în procesul de transmisie, și corectarea acestora.
Mediile de teleprelucrare sunt formate dintr-un:
– calculator principal(de regulă un server);
– diverse echipamentede calcul (calculatoare) distribuite geografic ce sunt operate de utilizatori umani;
-adaptoare și controllere necesare asigurării procesului de emisie/recepție și transmisiei informațiilor, transferul de date realizându-se prin diferite medii de telecomunicare (rețele ethernet, fibră optică, linii telefonice sau în mod wireless) la care sunt conectate sistemele.
Prin partajarea (noțiunea de sharing) resurselor și informațiilor între calculatoare se pot realizadiverse procese:
accesareaunei baze de date de pe un sistem dedicat;
transferul fișierelor între două sisteme;
transmitereade mesaje;
partajarea resursele hardware (imprimante, scannere, plottere, etc.) și software ale unui alt sistem de calcul.
Rețeaua de calculatoare este ansamblu de calculatoare interconectate prin intermediul unor medii de comunicație – din punct de vedere hardware – și aplicații informatice numite protocoale de comunicații – din punct de vedere software – , asigurându-se în acest fel utilizarea în comun de către un număr mare de utilizatori a tuturor resurselor fizice (hardware), logice (software și aplicații de bază) și informaționale (baze de date) de care dispune ansamblul de calculatoare conectate.
O altă definiție: prin rețea de calculatoare înțelegem o colecție de calculatoare autonome interconectate între ele. Dăcă există un schimb de informații între doua sisteme de calcul atunci acele sisteme sunt interconectate.
Interconectarea echipamentelor IT a dus la nașterea unoi noi noțiuni, aceea a lucrul în rețea, care reprezintă conceptul de conectare a unor calculatoare care partajează resurse. Se pot identifica mai multe tipuri de resursele:
– periferice (imprimante, scannere, echipamente de stocare tip NAS);
– date (baze de date);
– aplicații (orice aplicație: un program de gestiune a resurselor umane).
Tipuri de rețele de calculatoare
Rețelele de calculatoare sunt de mai multe tipuri funcție de numărul echipamentelor deservitede aria lor de răspândire:
– rețele locale (LAN – Local Area Networks) numite uneori și intranet – lucrează la nivelul unei clădiri sau al unui grup de clădiri având distanța între stațiile de lucru de 10-1000 m, de regulă se constituie la nivelul unei organizații locale;
– rețele metropolitane (MAN – Metropolitan Area Networks) – realizată la nivelul unui oraș având distanța între stațiile de lucru de ordinul kilometrilor;
– rețele regionale/mondiale (WAN – Wide Area Networks) –se mulează pe zone largi, state naționale, confederații de state, continente sau la nivel mondial distanța între utilizatori fiind de ordinul miilor de kilometri;
– rețele publice (PDN – Public Data Networks) – rețea la nivelul unei regiunisau la nivel mondialși au acces la diverse rețele locale, de exemplu
– INTERNET (E-mail -poșta electronică, WWW-World Wide Web)
– USENET și EUNET (poșta electronică și circulația știrilor)
– CSNET și ARPANET (cercetare științifică)
– BITNET (informații în diverse domenii).
Topologii (structuri) de rețele locale
Topologia (structura) unei rețele de calculatoare reprezintă modul de conectare a stațiilor de lucru față de Server. Modul de conectare va determina traseul pe care va circula informația în rețea, prin urmare o structură a comunicațiilor în rețea. În general, există trei tipuri de topologii pentru rețelele LAN:
– topologia Bus (magistrală) – are o fiabilitate sporită, viteză mare de transmisie; însă există riscul ca defectarea unei stații de lucru să ducă la indisponibilitatea înregii rețele.
topologia Star (stea)–are ca și avantaje modularitatea, posibilitatea de extindere/comprimare a rețelei fără afectarea funcționalității o viteză de transfer mare, fiind destinată aplicațiilor în timp real.
În prezent rețeau tip stea este cea mai uzitată conferind independență și viteză fiecărui client în parte.
2.2.Internetul
Dacă se consideră că secolul XX a fost perioada tehnologizării culminând în ultimii ani cu informatizarea și dezvoltarea ciberneticii, secolul al XXI-lea se afirmă că va fi al comunicațiilor. Dacă în secolul XIX omenirea a asistat la descoperirea semnalelor morse, telegraful apoi telefonul care a revoluționat comunicațiile, lucrurile au evoluat puternic la sfârșitul acestui secol culminând în zilele noastre cu un nou și puternic concept numit Internet.
Internetul reprezintă o modalitate facilă și rapidă de acces la informație oriunde de pe aproape orice tip de terminal. Este independent de sistemul de operare utilizat, cu câteva aplicații specializate putînd transfera informatii cu mediul Internet.Este o sursă operativă și amplă de noutăți din orice domeniu. Internet-ul este o rețea mondială ce dispune de echipamente interconectate și informația ce ajunge la utilizator prin intermediul lor denumirea provenind de la abrevierea din limba engleză a expresiei “rețea interconectată”, (interconnected network).Deși nu există un proprietar fizic al rețelei Internet ea este guvernată de organe abilitate după niște reguli bine stabilite, încât să prevină abuzurile și haosul sî transforme într-un mediu contraproductiv. Ca urmare a deyvoltării mediului Internet au apărut tehnologii care să profite de această rețea. Una dintre el este World Wide Web sau www.
În perioada anilor 1960 Departamentul de Apărare al Statelor Unite avea nevoie de o rețea de comunicare fiabilă, care să rămână operațională în cazul unui atac nuclear. RAND, o corporație militarăa propus centralizarea comunicațiilor într-o rețea. Această rețea conținea noduri capabile să transmită și să primească mesaje. Fiecare nod de comuncații își avea propria adresă. Departamentul apărării pentru proiecte avansate (The Defense Department's Advanced Research Projects Agency) cunoscut sub numele de ARPA sau DARPA a decis să extindă această rețea. În 1969 primul "Interface Message Processor",predecesorul router-ului de azi a fost instalat la UCLA (University of California în Los Angeles) încât ARPANET-ul a început să se extindă. ARPANETUL include servicii care sunt foarte importante și în Internetul de azi,cum ar fi și E-mail (electronic mail), FTP-ul (File Transfer Protocol), remote login (TELNET). În timp ce ARPANET-ul începe să se devolte și să se extindă, companii ca Xerox dezvoltă tehnologia rețelelor locale (LAN). Rețeaua cu cel mai mare impact a fost Ethernet-ul, rețea ce permitea conectarea mai multor calculatoare.Prima versiune avea teoretic o rată de transfer de 3 Mbps și mai târziu 10 Mbps. Cercetătorii de la ARPANET au crezut că ar fi util să conecteze LAN-urile la ARPANET.Însă pentru a putea realiza acest lucru a fost necesară dezvoltarea unui protocol pentru conectareadiferitelor tipuri de echipamente.Astfel s-au “născut”TCP-ul (Transmission Control Protocol) și Internet Protocol (IP). În 1983 creșterea Internetului a fost impulsionată de apariția versiunii 4.2 BSD de UNIX care conținea și protocolul TCP/IP.
Pentru a înțelege cum funcționează Internetul,trebuie să știm că acesta nu este o entitate omogenă.
La nivel fizic, sistemul Internet este un ansamblu de componente hardware (dispozitive de procesare și memorare, echipamente I/O, echipamente de interconectare, echipamente de transmisie) pentru memorarea, procesarea, conversia, reprezentarea și comunicarea informațiilor la nivel local, regional sau mondial, iar logic, este un ansamblu de componente software (sisteme de operare (OS) -Unix, Linux, Windows, programe de control și transmisie, programe de securitate informatică, aplicații pentru căutare, procesare și prezentare) pentru a fi în măsură să ofere utilizatorilor conectați la rețea, în orice moment și aflați la orice distanță de resursele accesate, servicii diverse pe principiul client-server.
Din punct de vedere arhitectural, rețeauaInternet este constituită dintr-o mare varietate de sisteme de calcul: PC-uri, notebookuri, tablete, telefoane inteligente dar și mainframe-uri, supercalculatoare, rețele de calculatoare LAN, MAN sau WAN.
Funcționarea rețelei Internet se realizează prin intermediul unor noduri (server-calculator sau routere performante) ce oferă cu ajutorul unor protocoale exploatarea eficientă a resurselor mediului Internet, noduri ce se numesc furnizori de servicii internet.
La serviciile rețelei Internet utilizatorul paote avea acces prin intermediul unuidispozitiv (calculator-stație conectat ethernet dar și echipamente wireless) conectat la rețeaua Internet prin intermediul unui Internet Service Provider(ISP). Terminalul se poate afla acasă la utilizator, la școală, la faculatate, la serviciu, la un café-Internet, sau poate fi un terminal potabil de tip laptop/tabletă/smarphone.
Din punct de vedere al adresării Internetul este compus dinzone de nivel superior, numite domenii, fiecare domeniu cuprinzând subdomenii sau/și sisteme gazdă, rezultând o reprezentare arborescentă a DNS. Domeniile de pe nivelul unu al arborelui sunt de două categorii:
generice:
com -comercial
edu -instituții de educație
int – organizații internaționale
org -organizații nonprofit
de țări : fiecare țară are alocat un domeniu ( ro –Romania; uk – Marea Britanie; de- Germania)
Față de un sistem ierarhic de fișiere structură care descrește de la stănga la dreapta fiind de forma /drive/folder/subfolder1/subfolder2/ astfel că rădăcina este primul element din stănga,o structură ierarhică a domeniului scade de la dreapta spre stânga, elementul cel mai important este în dreapta, elementul cu cea mai mare semnificație fiind „.ro” pentru modelul teoretic propusaprovizionare.electronica.ro. Componentele numelor pot avea maxim 64 de caractere, iar întregul nume nu poate depăși 255 de caractere. Orice subdomeniu trebuie să fie aprobat și anunțat în internet de nivelul ierahic superior pentru ca administratorul domeniului să poată controla procesul. În România Institutul Național de Cercetare-Dezvoltare în Informatică, prin intermediul site-ului RoTLD.ro se ocupă de managementul domeniului „.ro”.
Domanin Name Server constă într-o schemă ierarhică (arborescentă) de nume de domenii și dintr-un sistem de baze de date distribuite pentru implementarea schemei de nume. Spațiul de nume DNS este împărțit în mai multe zone disjuncte, fiecare zonă conținând o parte a arborelul de adrese precum și numele serverelor care păstrează informațiile referitoare la acea zonă. O zonă poate avea un server de nume (server DNS) primar, care preia informațiile dintr-un fișier de pe discul propriu, și mai multe servere de nume secundare, care iau informația de pe discul serverului primar. Pentru mai multa siguranță, unele servere DNS sunt plasate în afara zonei pe care o administrează. Structura arborescentă a DNS permite utilizarea de domenii cu același nume. Pentru a se stabili corespondența între nume și adresa IP se procedează astfel:
programul de aplicație apelează o precedură de bibliotecă (resolver), transferându-i ca parametru numele de domeniu
resolver-ul trimite un pachet UDP la serverul local DNS, care caută numele și returnează adresa IP asociată acestuia
având adresa IP, programul apelant poate stabili o conexiune TCP.
2.3. Protocoale. Protocolul TCP/IP
Protocoalele sunt o suită de protocoale mai mici, aplicații sau servicii care împreună au rolul de a asigura calculatorului un anumit tip de facilități, cum ar fi: interconecatrea a două sau mai multe calculatoare, transferul de date între ele, transmiterea de mail-uri, alocarea unor nume în rețea, etc.
Scheletul pe care s-a construit rețeaua Internet este suita de protocoale TCP/IP, ajunsă la versiunea IPv6 deși încă nedeplin implementată. Dacă un calculator are acces la internet, acest lucru este posibil prin utilizarea familiei de protocoale TCP/IP. Avantajele acestei suite de protocoale sunt:
este independentă de producător (vânzător);
nu este protejată prin legea copyright-ului;
este universal valabilă. se poate utiliza atât pentru rețele locale (LAN), cât și pentru rețele globale (WAN);
se poate utiliza pe orice tip de calculator.
Structura pachetului TCP/IP
De ce este protocolul TCP/IP protocolul standard pentru Internet? Acest lucru se datorează următoarelor caracteristici:
● datorită standardizării acestei suite de protocoale, eapermite comunicarea într-un mediu eterogen, deci se pretează foarte bine pentru conexiunile din Internet (care este o rețea de rețele eterogene atât din punct de vedere hardware, cât și software;
● furnizează un protocol de rețea rutabil, pentru rețele mari, fiind folosit din acest motiv drept protocol de interconectare a acestor rețele.
Coloanele vertebrale sunt construite din linii de mare capacitate (backbone) și routere rapide, la care se conectează rețelele regionale (de nivel mediu). Rețelele regionale conectează LAN-uri din instituții, firme și ale furnizorilor de servicii Internet.
Protocolul de nivel rețea IP, special conceput pentru interconectarea rețelelor are sarcina de a oferi o cale de a transporta pachetele de date de la sursă la destinație, fără a ține seama dacă mașinile expeditor și receptor (SENDER și RECEIVER) sunt de același tip sau dacă se află în aceeași rețea ori mai sunt rețele între ele.
Comunicația în Internet funcționeaza astfel:
nivelul transport preia fluxul de date și îl sparge în pachete cu lungimea teoretică de maxim 64kb (practic 1500 bytes);
fiecare pachet este transmis separat, putând fi fragmentat din nou pe drum;
pachetele ajunse la destinație sunt reasamblate pentru a obține datele originale;
datele reasamblate sunt pasate nivelului transport, care le inserează în șirul de intrare al procesului receptor.
Un pachet IP este compus dintr-un antet cu informații de control și o parte de date, unde sunt stocate datele ce sunt transmise. Antetul pachetului conține, printre altele, informații despre:
versiunea protocolului care a creat pachetul;
lungimea antetului;
lungimea zonei de date;
tipul serviciului dorit (fiabilitate și viteză);
timpul de viață al pachetului: este un contor care numără câte salturi a făcut pachetul (salt=trecerea dintr-un nod în altul), valoarea maximă fiind 255. Când un pachet are valoarea contorului 0 (adică a petrecut cam mult timp pe drum), acesta este distrus, iar hostul sursă este avertizat de pierderea datelor. Protocolul care se ocupă de acest lucru este ICMP (Internet Control Message Protocol), un alt protocol al familiei TCP/IP;
ce protocol de transport trebuie să preia pachetul;
adresa sursei;
adresa destinației;
cât de secretă este informația.
Familia de protocoale TCP/IP are o parte stabilă, dată de nivelul Internet (rețea) și nivelul transport, și o parte mai puțin stabilă, nivelul aplicație, deoarece aplicațiile standard se diversifică mereu.
În ceea ce privește nivelul gazdă la rețea (echivalentul nivelului fizic și legătura de date din modelul OSI), cel mai de jos nivel din cele patru, acesta este mai puțin dependent de TCP/IP și mai mult de driver-ele de rețea și ale plăcilor de rețea. Acest nivel face ca funcționarea nivelului imediat superior, nivelul Internet, să nu depindă de rețeaua fizică utilizată pentru comunicații și de tipul legăturii de date. Protocoalele din familia TCP/IP tratează toate rețelele la fel. De aici rezultă un concept fundamental pentru rețelele TCP/IP și anume acela că, din punct de vedere al unei rețele globale, orice sistem de comunicații capabil să transfere date contează ca o singură rețea, indiferent de caracteristicile sale.
Nivelul Internet are rolul de a transmite pachetele de la sistemul sursă la sistemul destinație, utilizând funcțiile de rutare. La acest nivel se pot utiliza mai multe protocoale, dar cel mai cunoscut este Internet protocol – IP. Nivelul transport are rolul de a asigura comunicația între programele de aplicație. Nivelul aplicație oferă utilizatorilor o gamă largă de servicii prin intermediul programelor de aplicații.
Nivelul acces-la-rețea
La acest nivel evoluția protocoalelor este impulsionată de evoluția extrem de rapidă a tehnologiilor de comunicație care introduc tipuri de legături cu viteze din ce în ce mai mari. Astfel, vom întâlni linii telefonice dar și rețele de CATV cu cablu coaxial, lucrând la viteze de căcătiva zeci sau sute de Mbps, cât și fibre optice de mare capacitate care pot transmite cu viteze de ordinul sutelor de Tbit/sec atingand chiar și 1 Petabit/sec; în momentul de față majoritatea calculatoarelor care utilizează TCP/IP în rețele locale folosesc conexiuni Fast-Ethernet cu viteze de până la 100 Mbs. Apariția rețelelor Gigabit Ethernet a făcut posibil ca vitezele să crească la 1000 Mbs.
La acest nivel sunt utilizate două protocoale pentru conectarea la Internet și Web prin intermediul modem-ului:
● SLIP – Serial Line Internet Protocol – protocol Internet pe linie serială – permite legături seriale asincrone și este cel mai vechi protocol. Dintre caracteristicile mai importante menționăm: nu face nici un fel de detecție sau corecție a erorilor; fiecare calculator trebuie să cunoască dinainte adresa IP a celuilalt calculator; nu este un standard aprobat. Ceea ce trebuie reținut din punctul de vedere al unui utilizator al Internet-ului este faptul că acest tip de legătură necesită o adresă fixă Internet pentru calculator, care este atibuită de provider-ul de servicii Internet.
● PPP – Point to Point Protocol – protocol punct la punct – este un protocol mai robust decât SLIP, care rezolvă toate deficiențele protocolului SLIP și reprezintă un standard Internet. Este utilizat din ce în ce mai mult, datorită faptului că permite legarea atât pe legături seriale asincrone, cât și pe legături seriale sincrone. PPP face detecția erorilor, suportă mai multe protocoale, permite ca adresele IP să fie negociate în momentul conectării, permite autentificarea, etc. În cazul utilizării acestui tip de legătură, acordarea unei adrese se realizează automat, în momentul stabilirii legăturii la Internet.
Nivelul Internet
Acest nivel, în modelul OSI nivelul rețea, asigură transmiterea pachetelor prin intermediul unor adrese unice, specifice fiecărui nod, numite adrese Internet. Protocolul dela acest nivel este IP (Internet Protocol) și caracteristica esențială este că fiecare pachet este tratat ca o entitate independentă (numită pachet sau datagramă), independent tratat de alte pachete. Acest nivel este responsabil cu rutarea pachetelor în rețea. Protocolul IP rutează pachetele prin rețele interconectate îndeplinind și funcții de segmentare(la emițător) și de reasamblare (la destinatar) a pachetelor; totuși acest protocol nu garanteazăcă destinatarul a primit pachetele, dar prin intermediul nivelului imediat superior, cu ajutorul protocolului TCP, se asigură fiabilitatea corespunzătoare. În operația de rutare protocolul IP utilizează adresa IP (numită și adresă de rețea).
Alte protocoale care pot funcționa la acest nivel, în vederea unei bune funcționări a transmisiei, sunt:
ICPM – (Internet Control Message Protocol) – utilizează un mecanism prin care ruterele și sistemele din rețea comunică informații privind starea de funcționare semnalând situațiile de anormalitate (destinație inaccesibilă, suprasolicitarea unuiechipament de comunicație, etc.); el poate fi utilizat de un sistem pentru a testa dacă un alt sistem este accesibil;
ARP – (Address Resolution Protocol) – permite unui calculator să determine adresa fizică unică (MAC) a unui alt calculator din aceeași rețea fizică cunoscând adresa IP (de nivel rețea) a acestuia; aceste tabele de translatare ARP nu sunt direct disponibile utilizatorilor sau aplicațiilor). ARP afișează lista corespondențelor între adresele IP și adresele fizice, determinate corect. De reținut că acest protocol este utilizat atunci când cele două calculatoare (sursă și destinație) fac parte din aceeași rețea fizică, deci nu este necesară utilizarea ruterelor.
RARP – (Reverse Address Resolution Protocol) – permite unui calculator să-și obțină, atunci cândn-o recunoaște, adresa IP proprie, deci face operația inversă (cunoscând adresa fizică se determină adresa IP a stației) protocolului ARP.
Nivelul transport
Orice program de aplicație utilizează unul din cele două protocoale de transport, alegerea unuia sau altuia depinzând de necesitățile impuse de aplicația respectivă. La acest nivel există două protocoale:
UDP – (User Datagram Protocol) – este un protocol care operează în condiții de incertitudine în ceea ce privește transferul de informații, dar cu viteză mare de transmisie, care utilizează datagram-uri pentru livrarea datelor. Comunicația este efectuată prin serviciu fără conexiune bilaterală (nu se stabilește un circuit între cele două calculatoare care vor să comunice) folosind IP pentru transferul mesajelor. Acest protocol nu garantează livrarea mesajului la recepție fără pierderi, fără duplicate, în ordinea în care au fost emise și nici nu oferă informații despre starea pachetelor transmise. UDP permite identificarea sistemelor sursă și destinația, precum și a programelor de aplicație între care are loc transferul de informație. UDP-ul este recomandat a fi folosit ăn rețele de mare viteză ăn care rata de pierderi a pachetelor este mică;
TCP – (Transmission Control Protocol) – este un protocol sigur, care asigură transferul fiabil al informațiilor între aplicațiile de pe cele două calculatoare aflate în comunicație. TCP este mult mai complex decât UDP pentru că furnizează un serviciu de livrarea a datelor sigur, orientat pe conexiune. El asigură livrarea fără erori a datelor între sisteme. Fată de protocolul UDP care se ocupa doar cu transmiterea pachetelor nefiind interesat de controlul starii acestora protocolul IP controlează transferul, în cazul pierderii anumitor pachete acestea sunt retransmise.
Nivelul aplicație
Nivelurile de sub nivelul aplicație servesc la asigurarea unui transfer sigur, dar nu îndeplinesc nicio funcție concretă pentru utilizatori. De-abia la nivelul aplicație pot fi găsite toate aplicațiile interesante pentru utilizatori, dar chiar și la acest nivel apare necesitatea unor protocoale care să permită funcționarea aplicațiilor.
Odată cu renunțarea la vechilor protocoale de comunicație tip IPX, numărul programelor care utilizează suita de protocoale TCP/IP este în continuă creștere și din această cauză lista acestor protocoale este deschisă, ea mărindu-se pe măsură ce apar noi aplicații (programe). Prin intermediul suitei TCP/IP se pot oferi o gamă largă de servicii, dintre care cele mai utilzate sunt:
SMTP – Simple Mail Transfer Protocol – este un protocol scris pentru transferul mesajelor de poștă electronică; prin intermediul lui utilizatorul poate transmite mesaje sau fișiere altui utilizator (se pot schimba mesaje între două calculatoare aflate la distanță) conectat la Internet sau la un alt tip de rețea, dar care prezintă o conexiune cu Internetul.
FTP – File Transfer Protocol – protocol de transfer de fișiere, este, așa cum arată și numele, un program utilizat pentru transferul fișierelor sau al documentelor de pe un calculator pe altul, în ambele sensuri;
TELNET Remote Login – permite accesul unui utilizator la un calculator aflat la distanță și utilizarea acestuia, din momentul în care conectarea s-a efectuat, pentru execuția anumitor comenzi. Aplicația Telnet server permite funcționarea unui sistem local în regim de terminal virtual conectat la un sistem la distanță;
DNS – Domain Name System – este un serviciu care menține corespondența și face translatarea între numele date de utilizatori sistemelor conectate la rețea (adrese Internet) și adresele de rețea (adresele IP) ale acestora;
PING – Pachet Inter Net Groper – este un serviciu care poate fi utilizat pentru testarea convectivității între două sisteme. Este utilizat pentru controlarea configurațiilor și testarea conexiunilor;
SNMP – Simple Network Management Protocol – este un protocol pentru administrarea și monitorizarea rețelei;
2.4. Modelul de legătură client-server
Termenul de Client/Server provine de la metoda de accesare a unui computer central, numit server de către computere aflate la distanță, sau clienți, într-o infrastructură de rețea.
Deși marea majoritate a utilizatorilor de computere și rețele din ziua de astăzi consideră clientul și serverul ca fiind două entități hardware, de fapt acestea sunt entități software. Modelul Client/Server implică o entitate software (clientul) care efectuează cereri, acestea fiind îndeplinite de o altă entitate software (serverul). Clientul este cel ce transmite o cerere serverului, acesta o interpretează și apoi o efectuează; întotdeauna clientul trebuie să efectueze o cerere ca serverul să îi răspundă. Pentru a putea îndeplini cererea serverul poate: referi o sursă de informație (bază de date), să efectueze procesări asupra datelor, să controleze periferice sau să efectueze cereri la multiple servere și un server poate deservi mai mulți clienți.
Relația între client și server este una de comandă/control, clientul inițiază cererea și serverul este cel ce o îndeplinește transmițând rezultatul cererii clientului, transferul de date fiind în acest caz bidirecțional. Un server nu inițializează un dialog cu clientul, ci invers clientul inițializează un dialog cu serverul. Clientul poate funcționa pe un server hardware și efectua cereri de la un server care rulează pe un alt server hardware sau pe un PC, sau clientul și serverul pot funcționa pe același computer, cum este cazul nostru.
Arhitectura afectează toate aspectele software, ea trebuie să ia în considerare complexitatea aplicației, nivelul de intregrare și interfațare cerut, numărul utilizatorilor, răspândirea lor geografică, natura rețelelor și toate tipurile de tranzacții necesare, înainte de a decide tipul arhitecturii.
De asemenea, alegerea arhitecturii afectează timpul de dezvoltare, flexibilitatea, precum și întreținerea aplicației.
Referitor la costurile unor astfel de arhitecturi, serverele sunt cele ce necesită procesoare rapide, memorie, hard disk-uri cu viteze mari, etc. Licențierea, instalarea și întreținerea unor sisteme ca Oracle, Sybase sau Informix necesită sute de mii de dolari, iar dezvoltarea unor aplicații necesită memorie, mașini noi și noi sisteme de operare. În prezentul proiect aceste costuri au fost diminuate substanțial prin utilizarea de licențe gratuite ale unor produse software destul de performante, cum ar fi serverul de Web Apache, serverul de baze de date MySQL și interpretorul de scripturi PHP.
Modelul client/server HTTP
Descrierea modului de funcționare al unei aplicațiii
Mulți dintre noi ne-am dorit de-a lungul timpului să avem un site Web cu pagini care să conțină informație dinamică (informație actualizată în timp sau care să se modifice în funcție de preferințele vizitatorului) fără a face prea multe modificări asupra codului sursă al paginilor. Ei bine, acest lucru se poate realiza destul de ușor folosind produse GPL (GNU Public License), precum Apache, PHP, MySQL și Perl. Principalul răspunzător pentru "dinamica" paginilor este limbajul PHP, un limbaj ce a fost realizat special pentru a fi încorporat în codul sursă al paginilor Web.
Cum funcționează un astfel de site? Să considerăm următorul scenariu. Utilizatorul trimite o cerere către pagina din navigator. Această cerere este trimisă către serverul de Web, care la rândul lui apelează scriptul PHP. Acesta din urmă este executat de către preprocesorul PHP, care extrage datele necesare din baza de date. Rezultatele sunt apoi grupate și formatate de scriptul PHP și transformate în cod HTML. În final, pagina rezultată este trimisă navigatorului, care o afișează.
Să urmărim acest proces pas cu pas: Utilizatorul introduce adresa în fereastra navigatorului, care trimite cererea pentru pagina http://www.adresagenerica.ro/exemplu.php; Serverul primește cererea pentru exemplu.php și știe că fișierele cu această extensie sunt prelucrate de preprocesorul PHP, așa că îi "spune" acestuia să preia execuția; exemplu.php este un script PHP ce conține comenzi; una dintre aceste comenzi este aceea de a realiza o conexiune cu baza de date și de a extrage anumite date; PHP știe cum să facă acest lucru așa că își face "treaba"; datele cerute sunt extrase din baza de date și sunt formatate de către PHP, apoi rezultatul este convertit în cod HTML; pagina HTML rezultată este returnată serverului de Web IIS; IIS transmite pagina de Web navigatorului care a inițiat cererea, acesta din urmă afișând-o într-o fereastră.
Clientul folosit pentru accesarea serverului web este cel mai probabil un browser (sau "navigator") web, dar poate fi și alt program capabil să se conecteze la un port TCP (de exemplu: telnet). Browserul web este programul folosit la afișarea de conținut web. Trebuie deci să știe să interpreteze pagini HTML, să afișeze imagini și alte forme de conținut multimedia, să folosească referințe (linkuri) etc. Cea mai importantă caracteristică a sa este probabil capacitatea de a se conecta prin protocolul TCP la un server web. Metoda de conectare arată astfel:
Schema de principiu a funcționării unui server web
3. BAZE DE DATE
3.1. Etapele realizării unei baze de date
Realizarea unei baze de date presupune parcurgerea următoarelor etape:
Analiza sistemului (domeniului) economic pentru care se realizează baza de date și a cerințelor informaționale asociate;
Proiectarea structurii bazei de date: schema conceptuală, externă și internă;
Încărcarea datelor în baza de date;
Exploatarea și întreținerea bazei de date.
Conținutul acestor etape, respectiv, activitățile implicate și modul lor de desfășurare depind, în general, de tipul bazei de date, precum și de domeniul pentru care se construiește baza de date.
3.2. Baze de date relaționale
Modelul relațional al datelor a fost primit cu entuziasm și acceptat aproape fără rezerve atât de specialiști din domeniul bazelor de date cât și de utilizatori, încă de la apariția primelor articole ale lui E.F. Codd în 1970, prin care erau puse bazele acestui model. Ideea unui model asamblist al datelor a fost lansată în 1968 de către D.F.Ghilds, care a subliniat faptul că orice structură de date poate fi reprezentată printr-una sau mai multe tabele de date, în cadrul cărora este necesar să existe și informații de legătură, pentru asigurarea legăturilor între tabele. Codd are meritul de a fi articulat și dezvoltat ideile cu privire la utilizarea teoriei apartenenței la ansambluri sub forma unui model coerent de structurare a datelor – modelul relațional. Despre acest model s-au scris multe, astfel încât în prezent, lucrările consacrate modelului relațional și sistemelor de gestiune a bazelor de date relaționale sunt cu mult mai numeroase decât cele dedicate altor tipuri de modele și sisteme. Totodată și numărul sistemelor care apar sub eticheta de "relațional" sau care sunt prezentate cu ajutorul conceptelor relaționale este foarte mare.
Aspecte privind utilizarea bazelor de date relaționale
Preocupați de formularea teoriei bazelor de date, specialiștii au primit extrem de favorabil modelul relațional al datelor, care beneficiază de o solidă fundamentare teoretică (teoria matematică a ansamblurilor) și pentru care abordările pur teoretice sunt nu numai posibile, dar și extrem de utile.
S-a constatat că prin utilizarea sistemelor relaționale este posibilă atingerea unor obiective importante ale organizării datelor de baze de date și anume:asigurarea unei mai mari independențe a programelor de aplicație față de organizarea datelor, utilizarea unor puternice limbaje de manipulare a datelor, a unor instrumente eficace de control a coerenței și redundanței datelor, etc. Sistemele clasice (pre-relaționale) ierarhice și rețea nu rezolvaseră aceste cerințe într-un mod convingător, ceea ce determinase apariția unor sentimente de nemulțumire și frustrare, în special în rândul utilizatorilor de baze de date.
La rândul lor utilizatorii cuceriți de simplitatea modelului relațional au manifestat o puternică preferință pentru sistemele relaționale. Trebuie subliniat faptul că folosirea modelului relațional nu reclamă cunoștințe teoretice deosebite. Deși primele articole au fost pur teoretice și cu un grad ridicat de formalizare, modelul relațional poate fi prezentat utilizatorilor cu ajutorul unor concepte extrem de simple și intuitive. De exemplu, relația conceptual central în modelul relațional poate fi prezentată sub forma unui tablou de date. Reprezentarea relației în acest mod este comodă, ușor de înțeles și de utilizat, în special în cadrul operațiilor asupra datelor. În același timp, modelul relațional a permis introducerea unor limbaje neproceduralede manipulare a datelor. Datorită lor, utilizatorul nu mai este obligat să precizeze ce anume îl interesează, ci este suficient să precizeze ce anume îl interesează din cadrul bazei de date, adică să definească proprietățile și semnificația datelor pe care le dorește.
Performanțele primelor SGBD-uri relaționale au fost scăzute, producătorii acestora reușind mai mult să demonstreze posibilitățile de transpunere în practică a conceptelor relaționale și mai puțin realizarea unor sisteme operaționale, care să satisfacă exigențele utilizatorilor. În scopul ameliorării performanțelor sistemelor relaționale au fost întreprinse numeroase cercetări privind optimizarea structurii datelor, optimizarea cererilor de prelucrare, optimizarea accesului la date, etc. Totodată, s-au făcut și o serie de compromisuri în implemntarea modelului relațional, astfel încât formele operaționale ale modelului început să se îndepărteze de modelul teoretic. SGBD-urile relaționale se diversifică tot mai mult și primesc o serie de calificative, precum: SGBD-uri pseudorelaționale, SGBD-uri complet relaționale, SGBD-uri cu interfață relațională, etc.
În fața cererilor mari de sisteme relaționale, unii producători lansează pe piață sisteme sub eticheta de "relaționale" sau își prezintă produsele cu ajutorul conceptelor relaționale, pentru a fi mai bine vândute, fără ca în realitate aceste sisteme să utilizeze modul relațional al datelor.
În ciuda interesului și entuziasmul cu care a fost înconjurat, modelul relațional are în prezent, la peste 25 de ani de la definirea lui o utilizare destul de redusă. Numai 7% dintre aplicațiile care sunt operaționale astăzi funcționează cu ajutorul sistemelor relaționale, restul de 93% utilizând sisteme de gestiune a fișierelor sau SGBD-uri ierarhice/rețea. Acest lucru se poate explica prin dificultățile întâmpinate la implementarea eficientă a modelului relațional, dificultăți care au întârziat, până în anii '80 apariția unor SGBD-uri relaționale performante și au dus la acreditarea ideii că sistemele relaționale sunt potrivite pentru cercetare și nu pentru aplicațiile reale.
Operațiile care se pot efectua asupra datelor sunt considerate prea simple, comparativ cu prelucrările complexe reclamate de numeroase aplicații, precum: proiectarea asistată de calculator, birotica, aplicațiile multimedia, etc.
În fața acestor opinii critice s-a pus problema dacă modelul relațional poate evolua, astfel încât să răspundă noilor cerințe, să se adapteze unui nou context informatic și organizațional. Există numeroase încercări reușite de ameliorare a modelului relațional, așa-numitele modele relaționale extinse, dintre care se pot aminti: modelul relațional cu valori structurate, modelul relațional fuzzy, etc. Modelul relațional este prin urmare un model extensibil, iar SGBD-urile relaționale sunt suficient de flexibile pentru a se putea adapta la noi cerințe de prelucrare.
Cu toate succesele obținute în ameliorarea modelului relațional există și opinii conform cărora modelul relațional este un model depășit, "epuizat" și că un progres real în domeniul bazelor de date nu se poate realiza decât prin schimbarea paradigmei de organizare a datelor, de exemplu prin introducerea modelelor de date orientate obiect.
În ceea ce privește utilizatorii bazelor de date, preferințele acestora evoluează într-un ritm mai lent decât la specialiștii în baze de date. Investițiile realizate pentru aplicațiile în funcțiune, în pregătirea personalului implicat în aceste activități, precum și mediul cultural din organizații încetinesc procesul de înlocuire a metodelor și tehnicilor de lucru, inclusiv a celor informatice. Se poate aprecia, prin urmare, că modelul și SGBD relaționale vor mai prezenta interes pentru utilizatori încă mult timp, utilizarea pe scară largă a bazelor de date post-relaționale fiind de domeniul unui viitor încă îndepărtat.
O bază de date care se bazează pe modelul relațional este gândită ca o colecție de tabele bidimensionale numite relații. Fiecare coloană a tabelului poartă denumirea de atribut sau câmp. Fiecare linie a tabelului este definită prin numele relației și numele atributului, ea purtând denumirea de tuplă, înregistrare sau articol. Atributul poate lua o serie de valori indivizibile, valori ce constituie domeniul atributului. În funcție de domeniu, datele pot avea un anumit tip: logic, numeric, caracter, dată calendaristică, etc. Datele pot avea și o anumită formă de prezentare, adică un format. Rezultă că atributul unei relații se definește prin: domeniu, tip de dată, format. Rangul unei relații este dat de numărul de atribute din cadrul relației. Tupla este o linie, atributul este o coloană și specifică prin numele său rolul valorilor dintr-o coloană. Valoarea NULL reprezintă un atribut a cărui valoare este necunoscută sau nu există pentru anumite tuple. O tuplă mai poate fi definită și ca reuniunea domeniilor unei relații, tupla poate fi considerată ca o mulțime de perechi de valori (atribut, valoare).
În cadrul unei relații, tuplele nu sunt ordonate. Datorită faptului că fiecare tuplă este un element al unei mulțimi, fiecare tuplă este considerată ca o valoare unică (atomică). Deci, în cadrul unei relații avem tuple distincte, altfel spus, setul de atribute corespunzătoare unei tuple trebuie să fie diferit. Valoarea unei tuple este considerată indivizibilă, atributele multinivel sau compuse fiind interzise.
Bazele de date relaționale sunt declarative, adică ele elimină sarcina declarării modului de accesare a datelor, aplicațiile concentrându-se asupra a ceea ce au nevoie din bazele de date. Un model relațional de baze de date are trei componente principale:
structura datelor – prin definirea unor domenii (valori atomice) și a relațiilor (atribute, tupluri, chei primare, etc.);
integritatea datelor –se realizează prin impunerea unor restricții pentru validarea datelor;
prelucrarea datelor – prin operații din algebra relațională sau calculul relațional.
Principalele elemente ale limbajului SQL, folosite în procesul de dezvoltare sunt:
Comanda SELECT este cea mai utilizată comandă a limbajului SQL. Permite interogarea structurilor de date și returnarea unui set de date care îndeplinesc anumite condiții.
Operația fundamentală în SQL este maparea, reprezentată din punct de vedere sintactic printr-o construcție SELECT-FROM-WHERE (construcție select). Construcția aceasta corespunde unei succesiuni de operatori algebrici de forma selecție-proiecție-cuplare. Clauza SELECT realizează operația de proiecție și este urmată de lista atributelor care se rețin în relația rezultat. Eliminarea înregistrărilor duplicat, dacă este necesară, trebuie solicitată în mod explicit de către utilizator prin folosirea operatorului DISTINCT. Operația de cuplare se realizează cu ajutorul clauzei FROM, atunci când ea este urmată de o listă formată din cel puțin două nume de relație, împreună cu condiția de cuplare formulată în cadrul predicatului din clauza WHERE. Selecția este realizată prin cea de-a treia clauză WHERE, care de cele mai multe ori este urmată de un predicat (calificator) referitor la atributele relației/ relațiilor din clauza FROM.
Sinataxa completă a construcției SELECT este următoarea:
SELECT [DISTINCT] nume_atribut01…
FROM nume_relatie…
[ WHERE calificator01]
[GROUP BY nume_atribut02…
[HAVING calificator02]]
[ORDER BY nume_atribut03 [ASC|DESC]…]
Comenzi de ștergere, inserare și actualizare
Fiecare dintre cele trei comenzi care urmează a fi prezentate în continuare acționează la un moment dat asupra unei singure relații.
Comanda SQL pentru efectuarea operațiilor de ștergere este DELETE FROM, a cărei sintaxă completă este:
DELETE FROM nume_relatie01
[WHERE calificator]
Comanada SQL pentru inserare este INSERT INTO și prin intermediul acestei comenzi se poate realiza inserarea unei sau mai multe tuple.
Comanda pentru inserare simplă are sintaxa:
INSERT INTO nume_relatie01 (nume_atribut01…)
VALUES (valoare…)
Între valori și numele de atribute trebuie să existe o corespondență unu la unu. Pentru atributele care acceptă valoarea NULL specificarea unei valori în comanda de inserare este opțională.
Comanda pentru inserare multiplă are sintaxa:
INSERT INTO nume_relatie01 (nume_atribut02…)
constructie_select
și permite adăugarea la relația specificată a unei mulțimi de tuple (relație) care se obține ca
rezultat al unei construcții SELECT.
Comanda SQL pentru actualizarea tuplelor este UPDATE și are sintaxa:
UPDATE nume_relatie01 [variabila_de_tupla]
SET nume_atribut=expresie_de_actualizare…
[WHERE calificator]
Operatorul de actualizare îndeplinește două funcții:
-selectează prin condiția de căutare din clauza WHERE tuplele care urmează a fi actualizate (dacă nu am WHERE se actualizează implicit toate tuplele);
– în tuplele selectate modifică valorile atributelor specificate.
Comanda de creare a tabelelor (relațiilor).Sinataxa comenzii pentru definirea relațiilor este:
CREATE TABLE nume_relatie01 (nume_atribut01 tip_data [NOT NULL], [nume_atribut02 tip_data[NOT NULL]]…)
Comanda specifică este numele relației care se creează precum și una sau mai multe descrieri de atribute. La descrierea fiecărui atribut se specifică numele atributului și tipul de dată corespunzător împreună cu dimensiunea asociată. Opțiunea NOT NULL asociată unui atribut indică faptul că în coloana corespunzătoare acestuia nu pot să apară valori nedefnite (NULL). Această opțiune este utilă în definirea atributelor care compun cheia primară a relației.
Comanda inversă celei de creare a unei relații,care șterge relația respectivă este DROP TABLE. Sinataxa comenzii este următoarea:
DROP TABLE nume_relatie01
3.3. Serverul de baze de date MySQL
MySQL este cel mai popular sistem de management pentru baze de date relaționale deoarece este Open Source , adică poate fi folosit fără a fi necesară achiziția unei licențe contra cost. MySQL Server a fost creat pentru a lucra cu baze de date mai rapid decât soluțiile existente deja și este folosit de ani buni în medii foarte solicitante.
MySQL este un produs matur, scalabil, rapid și gratuit, cu caracteristici foarte potrivite pentru multe dintre aplicațiile care folosesc suportul de baze de date pentru Web.
MySQL oprerează în baza unui model client/server. Orice mașină care dorește să proceseze interogări asupra unei baze de date MySQL trebuie să ruleze MySQL server (mysqld), care este responsabil de tot traficul de tip incoming/outgoing cu baza de date. Ca orice alt server, mysqld "ascultă" pe un port particular (3306) eventualele cereri de conexiune ale unui "client" – orice aplicație care trimite cereri către o bază de date via mysqld. Acest client poate fi un simplu script PHP care – grație modulului DBI – poate trimite o cerere către baza de date prin intermediul serverului MySQL, sau chiar clientul "comand-line" mysql. Clientul mysql este o interfață interactivă pentru trimiterea de comenzi către server.
Într-o bază de date relațională datele sunt stocate în mai multe tabele separate, fiind astfel îmbunătățită viteza și flexibilitatea. Tabelele pot fi legate prin relații definte de noi, fiind posibil să combinăm la cerere datele din mai multe tabele.
Ce înseamnă SQL?
SQL, acronimul pentru "Structured Query Language" este limbajul standard pentru comunicarea cu bazele de date. Comenzile SQL sunt folosite pentru a interacționa cu baza de date. Alte servere de baze de date care folosesc SQL sunt Microsoft SQL Server, Access, Sybase, iar cel mai utilizat pentru solutii enterprise este Oracle.
Modelul de securitate
Modelul folosit de MySQL se bazează pe username/password, hostname și privilegii și este similar celui generic folost de sistemele Unix. Prin privilegii se înțeleg în cazul MySQL operațiunile ce vor fi permise asupra bazei/bazelor de date, tabelelor sau indecșilor, cum sunt de exemplu SELECT, INSERT, UPDATE, DELETE, CREATE, DROP.
MySQL – Sumar :
Este un Sistem de Gestiune al Bazelor de Date Relationale.
Cel mai popular și mai rapid server pentru baze de date pentru baze de date de dimensiuni mici.
In general, poate fi copiat și folosit gratuit de catre oricine.
Functioneaza pe diferite platforme (Windows, Linux, MacOS,UNIX,etc.).
4.MEDIILE DE DEZVOLTARE ALE APLICAȚIEI
4.1 Limbajul HTML
Ce este HTML – ul ?
Unul din primele elemente dinstinctive ale WWW (World Wide Web) este HTML (Hypertext Markup Language), care descrie formatul primar în care documentele sunt distribuite și vizualizate pe Web. Multe din caracteristicile lui, cum ar fi independența față de platforma, structurarea formatării și legăturile hipertext, fac din el un mediu excelent pentru documentele Internet și Web. Primele specificații de bază ale Web-ului au fost HTML, HTTP și URL.
HTML a fost dezvoltat inițial de Tim Berners-Lee la CERN în 1989. HTML a fost identificat ca o unealtă pentru fizicienii care utilizează computere diferite și schimbăîntre ei informație utilizând Internetul. Independența de platformă înseamnă că un document poate fi afișat în mod asemănător de computere diferite (păstrând fonturile, formatarea lor, grafica și culoriledocumentului original), prezervând forma documentului.
HYPERTEXT
Hypertext înseamnă că orice cuvânt, grup de cuvinte, imagine sau alt element al documentului văzut de un utilizator poate face referință la un alt document, sau grup de elemente din cadrul aceluiași document, ceea ce ușurează mult navigarea între multiple documente sau chiar în interiorul aceluiași document.
O pagină de Web de regulă conține referințe către alte pagini. Pentru a avea o pagină care să indice spre altă pagină este necesar un mecanism care să permită numirea și regăsirea paginilor. Se identifică trei întrebări la care trebuie să se răspundă înainte de a se putea afișa o pagină:
1. Care este numele paginii?
2. Cum se localizează pagina?
3. Cum se face accesul la pagină?
Nu ar exista nicio ambiguitate în identificarea paginilordacă fiecare pagină ar avea un nume unic. Reyolvarea constă în atașarea fiecărei pagini a unui URL (Uniform Resource Locater) care funcționează ca substitut al paginii.Într-o variantă simplistă un URL are trei componente: protocolul, numele DNS al mașinii pe care este memorat fișierul și un nume local, care indică în mod unic pagina (de obicei numele fișierului care conține pagina). De exemplu, URL-ul http://www.domeniu.ro/home.html. Acest URL este format din trei componente: protocolul (http), numele DNS al serverului (www.domeniu.ro) și numele fișierului (home.html).
Pentru a transforma o porțiune de text simplu într-o zonă selectabilă, cel care scrie codul paginii trebuie să specifice următoarele: elementul de text prin care se face selecția și URL-ul paginii care este apelatcând textul este selectat. Odată realizată selecția,programul de navigare (browserul interner) caută numele serverului utilizând DNS-ul. Pe baza adresei IP a serverului, browserul stabilește o conexiune TCP spre server. Prin intermediul aceastei conexiuni, se transmite numele fișierului către echipamentul IT al utilizator, cel care a solicitat pagina, utilizând protocolul specificat.
Concluzionând, URL-urile au fost dezvoltate atât pentru a permite utilizatorilor să navigheze prin WWW, dar și pentru a utiliza alte servicii oferite de Internet cum ar fi FTP, e-mail și telnet, SSH, file sharing,transformând browserul internet într-ul utilizator multifunțional.
HTML – noțiuni introductive
TAGURILE
Pentru ca un document să fie interpretat ca fiind HTML trebuie ca să inceapă cu<html> și se termine cu notația </html>. Informațiile HTML cuprinse întreo paranteză unghiulară deschisă "<" și o paranteză unghiulară închisă">" se numesc "TAG-uri" sau marcaje.
Tag-urile între aceste paranteze transmit comenzi către browser pentru a parametriza pagina. Unele blocuri prezintă delimitator de sfârșit de bloc, în timp ce pentru alte blocuri acest delimitator este opțional sau chiar interzis.
Cele două marcaje <html> și </html>reprezintă alfa și omega-ul documentului HTML, ce este ăn afara lor este ignorat de către interpretor. Cam toate paginile HTML contin pe lângă aceste marcaje încă două secțiuni:
antetul documentului<head>…</head>;
corpul documentului <body>…</body>. Blocul <body>…</body> cuprinde conținutul propriu-zis al paginii HTML, partea vizibilă a documentului ce va fi afișat în fereastra browser-ului.
O etichetă poate fi scrisă atât cu litere mici, cât și cu litere mari nefiind case sensitive. Totodată caracterul "space" ce apare între etichete este ignorat de către browser.
Macheta unui document simplu si vid HTML ar fi:
<html>
<head></head>
<body>
</body>
</html>
Numele umele unei pagini se crează inserând în blockul<head>…</head>a unei linii de text. Exemplu: <title>Bine ai venit </title>
Dacă se dorește popularea cu informații a documentului, în secțiunea <body>…</body>se pot introducediverse texte. Dacă nu există nici untag (marcaj) suplimentar< sau > atunci interpretorul HTML la afisează pe ecran ca text simplu. Pagina actualizată are următorul cod:
<html>
<head>
<title> Pagina introductiva</title>
</head>
<body>
Pagina in lucru. Va rog reveniti!
</body>
</html>
TITLUL PAGINII
Dacă se dorește ca în bara de titlu a browserului internet să apară titlul paginii, sau informatii succinte trebuie inserat blocul <title>…</title>.Acest bloc este opțional, neutilizarea acestui bloc neafecând funțiile si imaginea fișierului însă bara de titlu a ferestrei browserului va apărea numele fișierului.
ÎNTRERUPERE DE LINIE
Textul introdus in cadrul blocului <body> … </body>în integralitatea sa va fi afișat într-un singur rând.Acest lucru nu este de dorit în majoritatea cazurilor, informația fiind greu de parcurs.Pentru segmentarea textului prin trecerea pe o linie nouă se face printr-o comandă explicită, care trebuie să apară în pagina html. Această comandă "line break" are sintaxa <br>
<html>
<head>
<title>Pagina introductiva</title>
</head>
<body>
Pagina in lucru. <br>Va rog reveniti!
</body>
</html>
Stabilirea culorii textului
Setările legate de culoarea textului se fac prin intermediul atributului text al etichetei <body> folosind sintaxa <body text=tip_culoare>. Textul este parametrizat sa aibă culoarea olive.
<html>
<head>
<title>Stabilire culoare text folosind culori predefinite</title>
</head>
<body text=olive>
Un text de culoare maslinie.
</body>
</html>
Stabilirea culorii de fundal
Limbajul HTML definește culoarea în două moduri:
Vaianta simplă dar restrictivă, scrrind efectiv numele in engleză a culorii dorite.Totuși numărul de culori disponibile este redus (de ordinul zecilor): aqua, black, fuchsia, gray, green lime, maroon, navy, olive, purple, red, silver, teal, white și yellow.
Varianta complexă, număr extins de culori. Culoarea se realizează printr-o construcție "#rrggbb" unde r (roșu), g (verde), sau b (alabastru) sunt cifre hexazecimale și pot lua valori specifice de la 0 la F; numărul de combinaîii de culori este mult mai mare 216.
Atributul bgcolor al etichetei <body>este responsabil cu stabilirea culorii de fundal a unei pagini HTML.
Prin scrierea secvenței de cod de mai jos realizeaz o pagină cu fondul de culoar FFF5F0
<html>
<head>
<title>Parametrizare fundal</title>
</head>
<body bgcolor=FFF5F0>
O paginăhtml cu fundal FFF5F0!
</body>
</html>
O mare atenție se va da păstrării contrastului dintre culoarea textului și culoarea fundalului.
Poziționarea conținutului paginii Web față de marginile ferestrei browserului se poate face cu ajutorul a două atribute ale etichetei <body>:
topmargin (definește distanța dintre marginea de sus a ferestrei browserului și marginea de sus a conținutului paginii);
leftmargin (defineștedistanța dintre marginea stângă a ferestrei browserului și marginea stângă a conținutului paginii);
<html>
<head>
<title>Parametrizarea textului si definirea marginii paginii</title>
</head>
<body leftmargin="200" topmargin="200">
<font size=2>
<font color="blue">
<font face="Tahoma">
Textul are atribute implicite fost size =2; color = blue ; font = Tahoma.<br>
Textul este pozitionat la 200 puncte fata de partea superioara a paginii si la 200 puncte de stamga ei.
</body>
</html>
STILURILE PENTRU BLOCURILE DE TEXT
Pentru ca un bloc de text să apară în browserul internet înclinat (italic), trebuie inclus între delimitatorii <i>…</i>.
Un bloc de text apare în browser evidențiat (cu caractere aldine) când este inclus între delimitatorii <b>…</b>.
Un bloc de text apare în browsercu caractere mai mari cu o unitate decât cele curente când în bloc este delimitat de etichetele <big>…</big>.
Un bloc de text apare în browsercu caractere mai mici cu o unitate decât cele curente când în bloc este delimitat de etichetele<small>…</small>.
Un bloc de text este afișat în browsercu caractere cursive dacă este inclus într-un bloc delimitat de etichetele <i>…</i>.
Un bloc de text este afișat în browsercu caractere subliniate când se utilizeaza etichetele <u>…</u>.
Pentru a insera secvențe de text aliniate ca indice (sub-script) sau ca exponent (super-script), aceste fragmente trebuie delimitate de etichetele <sub>…</sub>, respectiv <sup>…</sup>.
FONTURI
Un font este caracterizat de următoarele atribute:
culoare (stabilită prin atributul color);
mărimea (definită prin atributul size);
mărimea în puncte tipografice (stabilită prin atributul point-size);
tipul sau stilul (stabilit prin atributul face);
grosime (definită prin atributul weight).
Toate aceste atribute aparțin etichetei, care permite inserarea de blocuri de texte personalizate.
Culori
Definirea culorii poate fi precizată în două moduri:
1. printr-un nume de culoare.
2. printr-o constantă conform standardului de culoare RGB (Red, Green,Blue). O astfel de constantă se formează astfel: #rrggbb, unde r, g și b sunt cifre hexazecimale. (FF00FF)
Mărimea fontului
Pentru a stabili mărimea unui font se utilizează atributul size al etichetei. Valorile acestui atribut pot fi:
între 1 – 7 (1 pentru cel mai mic font și 7 pentru cel mai mare, folosindu-se valori întregi);
+1, +2, etc. pentru a mări dimensiunea fontului cu 1, 2, raportatla valoarea curentă;
-1, -2, etc. pentru a micșora dimensiunea fontului cu 1, 2, raportatla valoarea curentă.
Familia de fonturi
Pentru a scrie un text într-o pagină pot fi folosite mai multe fonturi (stiluri de caractere). Există cinci familii generice de fonturi care sunt de regulă disponibile pe toate calculatoarele utilizatorilor: serif, sans serif, cursive, monospace și fantasy. Tipul de font necesar poate fi stabilit prin atributul face al etichetei. În cazul în care se folosesc fonturi atipice este recomandată introducerea de mai multe fonturi separate prin virgulă. În acest caz browserul va utiliza primul font pe care îl cunoaște.
Grosimea fontului
Grosimea unui caracter poate fi definită prin intermediul atributului weight al etichetei. Valorile posibile pentru acest atribut sunt 100, 200, 300, 400, 500, 600, 700, 800 și 900 (100 pentru fontul cel mai subțire și 900 pentru cel mai gros).
BLOCURI DE TEXT
Aceste etichete nu sunt legate de particularitățile caracterelor ce compun textul, ci sunt specifice funcțiilor pe care le poate avea un bloc de text în cadrul paginii Web.
Toate aceste etichete produc automat trecerea la un rând nou și adăugarea unui spațiu suplimentar.
Inserarea unei adrese
Dacă într-o pagină HTTP este necesarăincludereaunei adrese, atunci se pot utiliza facilitățile oferite de o etichetă dedicată: <address>…</address>.
<html>
<head>
<title>Exemplu Adresa</title>
</head>
<body>
Adresa institutiei noastre este :<address>Facultatea de Științe și Arte<br>
Bd. Unirii , Nr:18/20<br>
Târgoviște</address>
</body>
</html>
Blocul preformatat
Într-un bloc <pre>…</pre>, semnificația marcajelor HTML se păstrează. Blocul <pre>…</pre> este indicat pentru a insera rânduri vide (spațiu între rândurile succesive). Caracterul "space" poate fi luat în considerare de browser dacă este inserat explicit prin .
Pentru un fișier HTML, caracterele "<" și ">" au o semnificație specială când sunt interepretate de browser. Ele încadrează comenzile și atributele de afișare a elementelor într-o pagină. Dacă se dorește ca un fragment de text să conțină astfel de caractere, acest bloc de text trebuie încadrat de una dintre perechile de etichete:
<xmp>…</xmp> (maxim 80 de caractere pe rând);
<listing>…</listing> (maxim 120 de caractere pe rând).
Aceste marcaje interpretează corect caracterele "space", "label". Textul afișat în pagină este monospațiat.
Blocuri paragraf
Cu ajutorul etichetei paragraf <p>se faceposibilă trecerea la o linie nouă și permite:
inserarea unui spațiu suplimentar înainte de blocul paragraf;
inserarea unui spațiu suplimentar după blocul paragraf, dacă se folosește delimitatorul </p> (acesta fiind opțional);
alinierea textului cu ajutorul atributului align, având valorile posibile " left ","center" sau "right ".
<p align="center"> Paragraf aliniat în centru.
Blocuri de titlu
Într-un text titlurile (headers) de capitole pot fi introduse cu ajutorul etichetelor <h1>, <h2>, <h3>,<h4>, <h5>, <h6>.Toate aceste etichete se referă la un bloc de text și trebuie însoțite de o etichetă de încheiere similară.
Aceste etichete acceptă atributul align pentru alinierea titlului blocului de text la stânga (în mod prestabilit), în centru și la dreapta. Tag-ul <h1> permite scrierea unui titlu cu caractere mai mari și aldine, pe când <h6> folosește caracterele cele mai mici.
Linii orizontale
Într-o pagină Web pot fi inserate linii orizontale. Acest lucru se face cu ajutorul etichetei <hr>. Pentru a configura o linie orizontală se utilizează următoarele atribute ale etichetei <hr>:
alignpermite alinierea liniei orizontale. Valorile posibile sunt "left","center" și "right";
width permite alegerea lungimii liniei;
size permite alegerea grosimii liniei;
noshade când este prezent definește o linie fără umbră;
colorpermite definirea culorii liniei.
Blocuri <center>
Blocul introdus de etichetele <center>…</center> aliniază centrat toate elementele pe care le conține.
<html>
<head>
<title> Linii orizontale</title>
</head>
<body>
<center><hr width=10%><hr width=40%><hr width=70%><hr width=100%><hr width=70%><hr width=40%><hr width=10%></center>
</body>
</html>
Blocuri <div>
Modalitatea cea mai eficientă de delimitare și de formatare a unui bloc de text este folosirea delimitatorilor <div>…</div>. Un parametru foarte util pentru stabilirea caracteristicilor unui bloc <div> (diviziune) este align (aliniere).
Valorile posibile ale acestui parametru sunt:
" left " (aliniere la stânga);
" center " (aliniere centrală);
" right " (aliniere la dreapta).
Un bloc <div>…</div> poate include alte subblocuri. În acest caz, alinierea precizată de atributul align al blocului are efect asupra tuturor subblocurilor incluse în blocul <div>;
Un bloc <div>…</div> admite atributul " nowrap " care interzice întreruperea rândurilor de către browser.
<html>
<head>
<title> Blocul <div></title>
</head>
<body>
Această linie este o linie normală.Următorul bloc este aliniat la dreapta.
<div align="right">
O singură linie.<br>
</div>
<div align="center">
Bloc aliniat pe centru.<br>
</div>
</body>
</html>
IMAGINI
Imaginile sunt stocate în fișiere cu diverse formate. Cele mai folosite formatele acceptate de browsere pentru fișierele imagine sunt:
GIF (Graphics Interchange Format) cu extensia .gif;
JPEG (Joint Photographic Experts Group) cu extensia .jpeg sau .jpg;
BMP (BitMap) cu extensia .bmp (numai cu Internet Explorer);
TIFF (Tagged Image File Format) cu extensia .tif sau .tiff;
Dintre acestea optimizate pentru utilizare WEB sunt JPEG (24 biți pentru o culoare, 16777216 de culori posibile). Și GIF (8biți pentru o culoare, 256 culori posibile) fișiere grafice vectoriale.
Adresa URL a unei imagini
Pentru a putea insera o imagine într-o pagină HTTP, se utilizează eticheta <img>.
Pentru a putea fi identificată imaginea care va fi inserată, se utilizează un atribut al etichetei <img> și anume src (de la "source"=sursa).
Dacă imaginea se află în același locație (folder/director) cu fișierul HTML care face referire la imagine, atunci adresa URL a imaginii este formată numai din numele imaginii specificându-se și extensia.
Dimensiuniile unei imagini pot fi modificate prin intermediul atributelor width și height.
Alinierea unei imagini
Alinierea unei imagini se poate face prin intermediul atributului align care poate lua următoarele valori:
"top" – aliniere deasupra;
"bottom" – aliniere la bază; partea de jos a imaginii se aliniază cu linia de bază a textului.
"middle" – aliniere la mijloc; mijlocul imaginii se aliniază cu linia de baza a textului ce precede imaginea.
"left" – aliniere la stânga; celelalte componente sunt dispuse în partea dreaptă;
"right" – aliniere la dreapta; celelalte componente sunt dispuse în partea stângă;
Atributele hspace și vspace precizează distanța în pixeli pe orizontală , respectiv pe verticală, dintre imagine și restul elementelor din pagină. Atributul alt admite ca valoare un text care va fi afișat în locul imaginii.
LEGĂTURI
Legăturile (link-urile) reprezintă elementul de bază, caracteristica cea mai importantă a unei pagini Web.Ele transformă un text obișnuit în hipertext (hiperlegătură), care face trecerea rapidă de la o informație aflată într-un document al serverului curent la informația aflată intr-un document pe un alt server aflat geografic la mii de kilometri.
Legăturile sunt zone active într-o pagină Web, adică zone de pe ecran active la apăsarea butonului stâng al mouse-ului. O legătură către o pagină aflată în același director se formează cu ajutorul etichetei <a> (de la "anchor"=ancora). Pentru a preciza pagina indicată de legătură se utilizează un atribut al etichetei <a> numit href, care ia valoarea numele fișierului HTML aflat în același director. Zona activă care devineactivă la apăsarea butonului stâng al mouse-ului este formată din textul cuprins între etichetele <a>…</a>. Prezența etichtetei de sfârșit </a> este obligatorie.
<html>
<head>
<title>Exemplu de legatura catre un site</title>
</head>
<body>
<h3>Link catre site-ul Agentiei Nationale de Administrare Fiscala</h3>
<a href="http://www.anaf.ro">
ANAF</a>
</body>
</html>
Ancore
O ancoră se definește tot prin eticheta <a>. Pentru a defini ancora se utilizează atributul name care primește ca valoare un nume atribuit ancorei (de exemplu "legatura1"). Pentru a insera o legătură către "legatura1" definită în aceeași pagină se utilizează eticheta <a> având atributul href de valoare "#legatura1". Pentru a introduce o legătură către o ancoră definită în alt document (altă pagină) aflat în același director, atributul href primește o valoare de forma "nume_fișier_1.html#nume_ancora".
Alegerea culorilor pentru legături
Se utilizează trei culori pentru legături: una pentru legăturile nevizitate (nu s-a efectuat nici un clic pe ele), una pentru legăturile vizitate (s-a efectuat cel puțin un clic pe ele) și o culoare pentru legăturile active (devine activă când se află mouse-ul poziționat pe ea). Acestea pot fi stabilite cu ajutorul a trei atribute ale etichetei <body>: link pentru legăturile nevizitate; vlink pentru legăturile vizitate; alink pentru legăturile active. Valorile pe care le pot lua aceste atribute sunt cele standard culori definite prin nume/definite prin standardul RGB.
Atributul title
Atributul title aparține etichetei <a> și comandă apariția unei mici ferestre în pagina Web când mouse-ul se află pe o legătură, fereastră în care este afișată valoarea dată acestui atribut. Rolul acestui atribut este de a furniza informații suplimentare despre semnificația legături.
LISTE
Unul din cele mai obișnuite elemente din documentele cu mai multe pagini este un set de definiții, referințe sau indexuri. Glosarele sunt exemple clasice în acest sens; cuvintele sunt listate în ordine alfabetică, urmate de definiții ale termenilor respectivi. În HTML, întreaga secțiune a unui glosar va fi gestionată printr-o listă de definiții, care este inclusă într-o pereche de marcaje de lista de definiții: <dl>…</dl> (de la "definition list" = lista de definiții).
TABELE
Tabelele ne permit să creăm o matrice dreptunghiulară de domenii, fiecare domeniu fiind parametrizat independent de altul în ceea ce privește culoarea fondului, culoarea textului, alinierea textului etc.
Un tabel este format din rânduri. Pentru a insera un tabel se folosesc etichetele <table>…</table>.Pentru a insera un rând într-un tabel se folosesc etichetele <tr>…</tr>. De reținut că eticheta de sfârșit </tr> este opțională.
Un rând este format din mai multe celule ce conțin date. Pentru a introduce o dată se folosește eticheta <td>…</td>.
<html>
<head><title>Tabel Test</title></head>
<body><h1 align=left>Un tabel simplu format din 3 linii și 2 coloane</h1><hr>
<table>
<tr><td>Celula 11</td><td>Celula12
<tr><td>Celula 21</td><td>Celula22
<tr><td>Celula 31</td><td>Celula 32
</table>
</body>
</html>
În mod prestabilit, un tabel nu are chenar. Pentru a adăuga un chenar unui tabel, se utilizează un atribut al etichetei <tabel> numit border. Acest atribut poate primi ca valoare orice număr întreg (inclusiv 0) și reprezintă grosimea în pixeli a chenarului tabelului. Când atributul border are o valoare nenulă chenarul unui tabel are un aspect tridimensional.Dacă atributul border nu este urmat de o valoare atunci tabelul va avea o grosime prestabilită egală cu 1 pixel, o valoare egală cu 0 a grosimii semnifică absența chenarului.
<html>
<head><title>Tabel Test</title></head>
<body><h1 align=left>Un tabel simplu cu chenar</h1><hr>
<table border="2">
<tr><td>Celula 11</td><td>Celula 12
<tr><td>Celula 21</td><td>Celula 22
<tr><td>Celula 31</td><td>Celula 32
</body>
</html>
Alinierea tabelului
Pentru a alinia un tabel într-o pagină Web se utilizează atributul align al etichetei <table>, cu următoarele valori definite: "left" (valoarea prestabilită), "center" și "right".
Alinierea este foarte importantă pentru textul ce înconjoară tabelul stabilindu-i poziția raportat la tabel:
– dacă tabelul este aliniat pe centru (<table align="center">), atunci textul care urmează după punctul de inserare al tabelului va fi afișat pe toată lățimea paginii, imediat sub tabel.
– dacătabelul este aliniat stânga (<table align="left">), atunci textul care urmează după punctul de inserare al tabelului va fi dispus în partea dreaptă a tabelului.
– dacă tabelul este aliniat dreapta (<table align="right">), atunci textul care urmează după punctul de inserare al tabelului va fi dispus în partea stângă a tabelului.
Distanțadintre tabel și celelalte elemente din pagina Web poate fi stabilită cu ajutorul atributelor hspace și vspace al etichetei <table>. Valoarea atributului hspacetrebuie șă fie număr pozitiv, inclusiv 0, și reprezintă distanța pe orizontală dintre tabel și celelalte elemente ale paginii Web. Ca și hspace valoarea atributului vspacetrebuie să fie un număr pozitiv, inclusiv 0, și reprezintă distanța pe verticală dintre tabel și celelalte elemente ale paginii Web.
Definirea culorilor de fond pentru un tabel
Culoarea de fond se definșteprin intermediul atributului bgcolor, care poate fi comun întregului tabel prin eticheta <table>, unei linii prin eticheta <tr> sau celule de date prin eticheta <td>.Valorile pe care le poate primi bgcolor sunt cele standard pentru o culoare. Dacă în tabel sunt definite mai multe atribute bgcolor, atunci prioritatea este următoarea: <td>, <tr>, <table> (cu prioritatea cea mai mică).
<html>
<head><title>Tabel Test</title></head>
<body><h1 align=left>Un tabel cu celule policromice</h1><hr>
<table border="2" bgcolor="olive">
<tr><td>Masliniu A11</td><td bgcolor="red">Rosu A12
<tr bgcolor="navy"><td>Albastru A21<td bgcolor="yellow">Galben A22
<tr bgcolor="white"><td>Alb A31<td bgcolor=”magenta”>Magenta A32
</table></body>
</html>
Culoarea textului din fiecare celulă se pote stabili cu ajutorul expresiei:<font color="valoare">…</font>.
Dimensionarea celulei unui tabel
Distanța dintre două celule vecine se definește cu ajutorul atributului cellspacing al etichetei <table>. Acest atribut reprezintă distanța în pixeli dintre două celule vecine poate lua numere întregi pozitive, inclusiv 0, și. Valoarea prestabilită a atributului cellspacingeste 2.
<html>
<head><title>TabelTest</title></head>
<body><h1 align=left>Un tabel cu chenar discret</h1><hr>
<table cellspacing="1">
<tr><td bgcolor="yellow">Galben 11<td bgcolor="green">Verde 12
<tr bgcolor="navy"><td>Navy 21<td bgcolor="magenta">Magenta 22
</table>
</body>
</html>
Pentru definierea distanței dintre marginea unei celule și conținutul ei se folosește atributulcellpadding al etichetei <table>.Valorile acestui atribut pot fi numere întregi pozitive și reprezintă distanța în pixeli dintre celule și conținutul ei. Valorea prestabilită a atributului cellpaddingeste 1.
<html>
<head><title>TabelTest</title></head>
<body><h1 align=left>Un tabel test cu celule uriase</h1><hr>
<table border="2" cellpadding="50">
<tr><td bgcolor="yellow">Galben 11<td bgcolor="green">Verde 12
<tr bgcolor="navy"><td>Navy 21<td bgcolor="magenta">Magenta 22
</table>
</body>
</html>
Dimensionarea unui tabel
Dimensiunile unui tabel – lățimea și înălțimea – pot fi stabilite prin intermediul a două atribute, width și height, ale etichetei <table>.
Valorile acestor atribute pot fi: numere întregi pozitive reprezentând lățimea, respectiv înălțimea în pixeli a tabelului; numere întregi între 1 și 100, urmate de semnul %, reprezentând fracțiunea din lățimea și înălțimea totală a paginii.
<html>
<head><title>Tabel Test</title></head>
<body><h1 align=left>Un tabel de de 500 pixeli X 40 %</h1><hr>
<table border="0" width="500" height="40%"bgcolor="yellow”>
<tr><td>Celula 11<td>Celula 12
<tr><td>Celula 21<td>Celula 22
</table>
</body>
</html>
Cap de tabel
Un tabel poate avea celule cu semnificația de cap de tabel. Aceste celule sunt introduse de eticheta <th> (de la " tabel header " = cap de tabel) în loc de <td>. Toate atributele care pot fi atașate etichetei <td> pot fi de asemenea atașate etichetei <th>. Conținutul celulelor definite cu <th>este scris cu caractere aldine și centrat.
Alinierea conținutului unei celule
Alinierea pe orizontală a conținutului unei celule se face cu ajutorul atributului aligncare poate lua valorile:
– " char " (alinierea se face față de un caracter).
– " left " (la stânga);
– " center " (centrat, valoarea prestabilită);
– " right " (la dreapta);
Alinierea pe verticală a conținutului unei celule se face cu ajutorul atributului valign care poate lua valorile:
– " baseline " (la bază);
– " bottom " (jos);
– " middle " (la mijloc, valoarea prestabilită);
– " top " (sus).
Aceste atribute pot fi atașate atât etichetei <tr> pentru a defini toate elementele celulelor unui rând, cât și etichetelor <td> și <th> pentru a stabili alinierea textului într-o singură celulă.
<html>
<head><title>Tabel Test</title></head>
<body><h1 align=left>Tabel cu conținutul celulelor aliniate</h1>
<table border="2" width="40%" height="40%">
<tr align="right"><td>Folosim<td>alinierea</td><td>la <td>dreapta<tr>
<td align="center">centru
<td align="stanga">stanga<td valign="bottom">jos<td valign="bottom">jos
<tr align="left"><td>aici<td>alinierea <td>este centru<td>stânga (implicită) </table>
</body>
</html>
Marcaje de bază
Formatarea textului
Marcaje pentru tabele
Adăugarea imaginilor
4.2. Limbajul de programare PHP
PHP este limbajul ideal pentru construirea paginilor Web dinamice. Este ușor de învățat, open-source, poate fi rulat pe mai toate platformele cunoscuteși poate lucra cu mai multe tipuri de baze de date. Cel mai important aspect al limbajului este însă posibilitatea de a fi imbricat cu cod HTML. Putem astfel crea pagini HTML statice și din loc în loc, acolo unde este nevoie, să introducem elemente dinamice cu ajutorul PHP. Astfel se pot crea pagini web care din loc în loc în codul HTML se poate introduce cod PHP care extrage diferite date din baza de date. În momentul în care se apelează pagina, acest cod este transmis (analizat linie cu linie și executat) la server, acesta generând o pagină HTML fără să se cunoască că pentru crearea ei s-a făcut o conexiune la baza de date, de unde s-au extras informațiile și au fost ordonate pentru afișare.
În 1994, pornind de la nevoia lui Rasmus Lerdorf de a afla câte persoane îi vizualizează CV-ul on line, acesta a dezvoltat prima versiune de PHP, acronimul pentru Personal Home Page. În următorii ani a avut loc o dezvoltate masivă prin implicarea altor dezvoltatori.
Fiind open-source, PHP beneficiază de suport activ din partea comunității online, acesta fiind și motivul creșterii explozive a numărului site-urilor bazate pe PHP. PHP-ul este cel mai folosit limbaje de programare server-side, conform unui studiu efectuat de Netcraft în aprilie2013, PHP este folosit pe 244 milioane de site-uri reprezentand 39%.din totalul SITE-urilor la nivel mondial. De asemenea, există un grafic al creșterii folosirii PHP-ului pe site-ul oficial.
Popularitatea de care se bucură acest limbaj de programare se datorează următoarelor caracteristici :
Gratuitatea: cu siguranță un element cheie în alegerea lui ca mediu de dezvoltare în cazul site-urilor mici și a organizațiilor cu bigete mici. Dezvoltarea PHP-ului sub licența open-source a determinat adaptarea rapidă PHP-ului la nevoile Web-ului, eficientizarea și securizarea codului.
Familiaritatea: sintaxa limbajului este foarte comună combinând sintaxele unora din cele mai populare limbaje Perl sau C, permițând programatorilor să migreze rapid spre această piață;
Simplitatea: Nu este nevoie de includere de biblioteci sau de directive de compilare, codul PHP inclus într-un document executându-se între marcajele speciale;
Flexibilitatea: Nefiind legat de un anumit server web, PHP-ul a fost integrat pentru numeroasele servere web existente: Apache, IIS, etc.;
Eficiența: PHP-ul are implementate mecanisme de alocare a resurselor, foarte necesare unui mediu multiuser, așa cum este Web-ul;
Securitatea: PHP-ul pune la dispoziția programatorului un set flexibil și eficient de măsuri de siguranță în exploatare;
Ce poate face PHP?
Orice. PHP este în principal axat pe partea de scripting ce rulează pe server, deci putem face și un program CGI, cum ar fi colectarea de date de la formulare, generarea de conținut dinamic sau trimitere și primire de cookie-uri. Dar PHP poate face mult mai multe.
Scripturile ce rulează pe server sunt cele mai tradiționale și cele mai importante pentru PHP. Avem nevoie de trei lucruri pentru a face să meargă. Interpretorul OHP (CGI sau modul de server), un server de Web și un navigator de Web. E nevoie ca serverul de Web să fie pornit, cu o conexiune PHP instalată. Putem accesa rezultatul programelor PHP cu un navigator prin intermediul serverului de Web.
Tipuri de date. Variabile. Constante. Operatori. Definire funcții
Tipuri de date
Tipurile de date cele mai folosite în PHP sunt următoarele:
– boolean
– integer
– floating-points
– string
– array
– null.
În continuare le vom discuta pe fiecare pe scurt.
Boolean
Este cel mai simplu tip de date. O variabilă de tipul boolean poate avea doar două valori: TRUE sau FALSE (ADEVARAT sau FALS). De asemenea poate lua valori întregi care să le reprezinte pe cele de mai sus. Astfel, valoarea 0 înseamnă FALSE, iar orice altă valoare întreagă diferită de 0 înseamnă TRUE. În următoarele exemple variabila a primește valoarea TRUE (adevărat):
$a = TRUE;
$a = 1;
$a = -1;
sau valoarea FALSE (fals):
$a = FALSE;
$a = 0;
$a = “”; //sirul vid
Integer
Reprezintă mulțimea numerelor întregi Z = {…, -2, -1, 0, 1, 2, …}
Variabilele de acest tip pot fi inițializate cu numere întregi specificate în format zecimal (în baza 10), hexazecimal (în baza 16) sau octal (în baza 8).
Exemplu:
$a = 1234; //număr întreg zecimal
$a = -123; //număr întreg negativ
$a = 0123; //număr întreg în format octal – numărul trebuie precedat de un 0
$a = 0x1AB; //număr întreg în format hexazecimal – numărul e precedat de 0x
Dimensiunea unui număr de tip Integer este dependentă de platformă, dar valoarea maximă este de aproximativ 2.000.000.000 cu semn (-2.000.000.000 … 0 … +2.000.000.000)
Floating-points
Reprezintă numerele cu virgulă mobilă, care pot fi specificate folosind oricare din sintaxele următoare:
$a = 1.23;
$a = 1.2e3;
$a = 7E-10;
Dimensiunea acestui tip de date este foarte mare și este dată de numere ce pot fi scrise pe 64 de biți (numărul maxim este în jurul valorii de 10^20 = 10 la puterea 20). Dezavantajul este că are o precizie scăzută la ultimele cifre.
String
String reprezintă un șir de caractere. Există 3 moduri de definire a variabilelor de tip String, dar numai 2 sunt folosite în mod uzual.
– definirea cu ghilimele simple:
$a = ‘Acesta este un string’;
– definirea cu ghilimele duble:
$a = “Acesta este un string”;
Pentru afișarea caracterului apostrof ( ‘ ) în cadrul textului, acesta trebuie precedat de caracterul backslash ( \ ). La fel se procedează pentru afișarea caracterului backslash ( \ ). Exemplu:
$a = Baciul se uita catre munte si-mispune "S\'asa-mi vine sa iau poteca catre stana”;
//Va afișa: Baciul se uita catre munte si-mispune "S'asa-mi vine sa iau poteca catre stana”;”
Diferența dintre cele două modalități este că în cazul al doilea pot fi inserate anumite caractere speciale, iar dacă în cadrul textului apare o variabilă, aceasta va fi înlocuită cu valoarea conținută în ea.Exemplu:
$x = 20;
$a = “Au promovat $x candidati la examenul de arhitectură romană.”;
//Va afișa: Au promovat20 candidati la examenulde arhitectură romană.
Caracterele speciale care pot fi folosite sunt următoarele:
\n linie nouă (line feed)
\r întoarcere la începutul liniei (carriage return)
\t tab
\\ backslash
\$ semnul dolar
\” ghilimele
Array
În limba română acest tip de date se numește tipul Tablou și reprezintă o structură ordonată pe mai multe dimensiuni. Datele conținute într-un Array pot fi de tipuri diferite.
Sintaxa pentru definire este următoarea:
$nume_array[cheie] = valoare;
cheie – poate fi de tipul String sau Integer nenegativ
valoare – poate fi orice
Definirea se poate face în mai multe moduri, ilustrate în exemplul următor:
// Acesta
$a = array( 'culoare' => 'verde'
, 'gust' =>'acru'
, 'geometrie' => 'oval'
, 'nume' => 'mar'
, 4 // cheia este 0
);
// este absolut echivalent cu
$a['culoare'] = 'verde';
$a['gust'] = 'acru';
$a['geometrie'] = 'oval';
$a['nume'] = 'măr';
$a[] = 4; // cheia este 0
//sau
$b[] = 'a';
$b[] = 'b';
$b[] = 'c';
// Va rezulta șirul array( 0 => 'a' , 1 => 'b' , 2 => 'c' ),
// sau mai simplu, șirul array('a', 'b', 'c')
Referirea la o variabilă de tip tablou se face cu numele tabloului și cheie:
echo “Elementul $a[‘nume’] are gust $a[‘gust’].”;
//Va afișa: Elementul măr are gust acru.
Null
Valoarea specială NULL reprezintă o variabilă care nu are nici o valoare.Sintaxa de atribuire a acestei valori unei variabile este următoarea:
$a = Null;
Observație! Valoare null trebuie scrisă în forma aceasta Null, cu N mare.
Variabile
Variabila este un container de date care poartă un nume și i se poate atribui o valoare care poate fi modificată de mai multe ori sau salvată într-o bazăde date. Numele dat variabilei începe cu simbolul $ urmat de orice literă mică (a-z) sau mare (A-Z) sau cu caracterul _ dar niciodată cu o cifră și nu poate conține spații goale.
De exemplu: $nume_variabila
$nume_variabila="valoare"
Un exemplu scurt de folosire a unei variabile:
<?php
$program="PHP";
echo $program;
?>
Se va afișa cuvântul PHP.
sau
<?php
$angajare="1995";
echo "Te-ai angajat in ".$luna;
?>
Scriptul va afișa: Te-ai angajat in 1995.
Variabilele formular
În PHP putem recunoaște numele de variabilă deoarece toate încep cu simbolul $(dolar).(omiterea simbolului dolar este o eroare de programare ce se întâlnește foarte des). Există trei metode de a accesa datele formularului prin intermediul varabilelor. Aceste metode nu au nume oficiale, deci le vom intitula noi.
Ex. variabila angajati:
$angajati // stilul scurt
$_POST[‘angajati’] //stil mediu
$HTTP_POST_VARS[‘angajati’] //stil lung
Stilul scurt este convenabil, dar necesită activarea setării de configurare register_globals. Numele variabilelor din script sunt identice cu numele câmpurilor formular. Nu trebuie să declarăm variabilele și nici să efectuăm vreo acțiune pentru a crea acest variabile în scriptul nostru. Nu trebuie să uităm să atribuim o valoare de pornire tuturor variabilelor noastre.Stilul mediu implică regăsirea variabilelor formular din unul din tablourile $_POST, $_GET sau $_REQUEST. Unul din tablourile $_GET sau $_POST va păstra detaliile despre toate variabilele formular. Tabloul utilizat depinde de metoda care a fost folosită pentru a trimite formularul, POST sau GET. În plus, toate datele trimise prin POST sau GET vor fi disponibile prin $_REQUEST.
Tipuri de variabile
Variabilele sunt de mai multe tipuri: numere, șiruri, matrici.
Numere
PHP împarte numerele în două tipuri: întregi și cu virgulă mobilă.
Numerele întregi pot fi: pozitive și negative. Numere corecte în PHP:
3 – întreg
-1 – întreg
2.0 – cu virgulă mobilă
-1.0 – cu virgulă mobilă
18.29 – cu virgulă mobilă
Numere incorecte în PHP:
2 ¼; 4557a; 01.01,01
Șiruri
O variabilă este un șir dacă este alcătuită din caractere (o combinație de litere, numere,simboluri, spații) delimitate între două ghilimele simple (‘) sau duble (“).
Șiruri corecte:
“Bine ai venit!”
“Bună $prenume”
“1 ¼”
“02.07.90”
Șir incorect:
“Colegul de camera a intrebat “Te intorci in noaptea asta?” ”
PHP Superglobals sunt variabile disponibile oriunde în script
În continuare voi prezenta câteva din cele mai des folosite variabile globale.
Atribuirea de valori variabilelor
Pentru a atribui o valoare unei variabile, indiferent de tipul variabilei, folosim semnul (=). Semnul egal poartă numele de operator de atribuire. Exemplu:
$număr=1;
$număr_zecimal=2.3;
$sir=”bună dimineața”
Pentru a afișa valoarea unei variabile, se include numele acesteia într-o instrucțiune print(), folosind ghilimele duble: print “Numărul este $număr”;print “Sirul este $sir”;exemple:
a)
<?php
$adancime=25;
$latime=1.5;
echo "Fantana are $adancimem adancime si $latime m latime.";
?>
Se va afișa: Fantana are 25 m adancime si 1,5 m latime.
b) <?php
$strada="Boerescu Zaharia";
$oras="Targoviste";
$judet="Dambovita";
echo "adresa este strada $strada oras $oras judet $judet";
?>
Afișează:
adresa este strada Boerescu Zaharia oraș Targovistejudet Dambovita
Constante
• au o valoare, dar spre deosebire de variabile nu poate fi schimbată sau ștearsă și nu sunt precedate de simbolul $;
• numele este case sensitiv și va începe obligatoriu cu o literă. Poate conține litere mari sau mici, cifre și caracterul _ dar fără spații;
• este recomandat, dar nu obligatoriu, ca denumirea constantei să fie scrisă cu majuscule pentru a fi mai ușor identificată de programator;
• ca și în cazul variabilelor superglobale constantele au un caracter global.
<?php
define('Culoare', Rosu);
echo Culoare;
?>
Constantele pot conține numai date de tipul: boolean, integer, floating, point și string. Câteva diferențe între constante și variabile sunt:
– constantele pot fi definite și accesate oriunde, fără a ține cont de regulile de la variabile;
– constantele nu pot fi redefinite.
Operatori
Operatorii sunt simbolurile pe care le putem folosi pentru a maneva valori și variabile prin realizarea unei operații asupra lor. Operatorii sunt de mai multe feluri:
1. operatori aritmetici
Pentru fiecare dintre acești operatori putem stoca rezultatul operației. Exemplu:
$result=$a + $b
$a = 10;
$b = 5;
$result = $a + $b;
$result = 15;
Se procedează la fel și pentru scădere, înmulțire și împărțire.
2. operatori pentru șiruri
Operatorul de concatenare a șirurilor îl putem folosi pentru a alătura două șiruri și pentru a genera și stoca un rezultat în același mod în care folosim operatorul de adunare pentru a aduna două numere.
$a = “Disney”;
$b = “land”;
$result= $a . $b
$result =
3. operatori de atribuire (=), adică “I se atribuie valoarea”
$result = 3; I s-a atribuit valoarea 3
Operatori de atribuire combinați
$a = $a + 10;
Operatorii de atribuire combinați
4. operatori de comparare
Operatorii de comparare sunt folosiți pentru compararea a două valori. Expresiile care folosesc acești operatori returnează valoarea logică true sau false, în funcție de rezultatul comparării.
Operatorul egal ==(două semne de egal) ne va permite să testăm dacă două valori sunt egale.
$a = = $b
Operatorii de comparare:
= = egal
= = = identic
! = diferit
<> diferit
< mai mic
> mai mare
< = mai mic sau egal
> = mai mare sau egal
5. de referință& (ampersand)
$a = 5;
$b = $a;
Aceste linii de cod creează o copie avalorii din $a și o stochează în $b. Dacă modificăm ulterior valoarea lui $a, atunci $b nu se va modifica:
$a = 10; //$b va rămâne 5
6. de incrementare/decrementare
Mărirea unui număr cu o unitate se numește incrementare, iar scăderea cu o unitate se numește decrementare. Incrementarea se poate realiza adunând o unitate la acel numar (sau variabila) sau putem folosi varianta prescurtată, și similar pentru decrementare.
post incrementare $a++ returnează $a și incrementează $a cu 1
post decrementare $a– returnează $a și decrementează $a cu 1
pre incrementare ++$a incrementează $a cu 1 și returnează $a
pre decrementare –$a decrementează $a cu 1 și returnează $a
7. operatori logici
$a and $b Si
$a or $b Sau
$a xor $b Sau-Exclusiv
! $a Not (Negare)
$a && $b Si
$a || $b Sau
4.3. Serverul web Apache
Alegerea Serverului Web. De ce Apache?
În principiu, sunt de evitat produsele care sunt prezentate ca fiind cea mai bună soluție pentru nevoile fiecăruia. Apache este o excepție de la această regulă, în mare parte pentru că este conceput pentru a fi ușor personalizabil. Deși Apache rulează foarte bine pe platformele Unix comerciale și sub Microsoft Windows, el se remarcă cel mai bine în variantele Unix cu cod-sursă deschis. Apache este prima opțiune pentru un server de Web atât pentru Linux dar reprezinta o solutie viabila și pentru platformele Windows.
4.3.1. Principalele servere web
Deoarece un server de Web poate fi orice software folosit pentru implementarea protocolului HTTP, există mult prea multe tipuri diferite de servere de Web în uz ca să poată fi prezentate toate. Unele sunt soluții absolut manufacturiere, unice pentru creatorii lor, dar majoritatea sunt recognoscibile și identificabile printr-un nume propriu și o versiune. În ciuda numărului mare de motoare pentru serverele HTTP existente, un domeniu redus de competitori acoperă majoritatea traficului prin HTTP din Internet.
Un număr mare din siturile Apache folosesc versiunea binară a serverului Apache oferit de distribuții Linux comerciale. Majoritatea siturilor de Web din Internetul actual sunt găzduite de sisteme de tip Intel Xeon ce rulează fie Apache pe Linux sau Windows, fie Microsoft IIS 7.5/8.5 pe sistem de operare Windows, iar Apache are cea mai mare pondere.
Alternative la Apache
Deși Apache are cea mai mare pondere, nu este singurul server utilizat la scară largă.
a.1. Microsoft IIS – comercial
Produsul Microsoft Internet Information Server (IIS), deși este oferit gratuit ca parte a sistemelor de operare Windows, pentru a-l putea folosi trebuie cumpărată licența pentru un sistem de operare Windows. Performanțele serverului IIS sunt bune. Totusi IIS nu ruleaza deca pe sisteme de operare Windows.
a.2. Nginx (se pronunță "engine x") este un server web cu o pronunțată focalizare pe o concurentă puternică, performanță ridicată și utilizare redusă a memoriei. Deasemenea poate funcționa ca “reverse server” pentru protocoalele HTTP, HTTPS, SMTP, POP3 și IMAP, ca un „load balancer” sau ca server de cache HTTP.
Creat de Igor Sysoev în 2002, Nginx rulează pe platforme Unix, Linux, diverse variante BSD , Mac OS X, Solaris, AIX, HP-UX și evident pe Microsoft Windows. Nginx este un software open source și gratuit.
a.3. thttpd(tiny/turbo/throttling HTTP server) – gratuit
Unul dintre cele mai interesante servere de HTTP gratuite este un produs numit simplu thttpd. thttpd un server de HTTP care este conceput pentru a fi extrem de rapid, cu cerințe de memorie reduse, ușor de instalat și de administrat, cu înalt grad de securitate și aproape fără nici o facilitate. În majoritatea mediilor, thttpd va lucra comparabil cu orice alt server de Web. În condiții de solicitare extremă însă, thttpd va lucra mult mia bine.
Este puțin probabil ca un server de Internet să aibă o lărgime de bandă suficient de mare pentru a inunda un singur server de Web cu un număr atât de mare de cereri încât să fie necesar un program servere ca thttpd. Dacă este vorba totuși un server intern de firmă, conectat la o rețea cu o legătură Gigabit Ethernet, este posibil să fie nevoie de un server deosebit de rapid; problema este că, într-un server de intranet, aproape sigur este nevoie de facilități care nu sunt oferite de thttpd. Față de versiunea inițială care nu a mai primit actualizari din 2004, considerat ca fiind un proiect finalizat, autorul dezvolta ăn paralel sthttpd ce rulează pe Gentoo și primeste actualizări.
a.4.IBM HTTP Server – comercial
Multe dintre serverele de Web, în afara celor doi mari (Apache, Microsoft), rulează pe echipamente IBM. Majoritatea folosesc de fapt o versiune adaptată de Apache. Cu mai mulți ani în urmă, IBM a uimit lumea informaticii cu anunțul intenției lor de a apela la Apache ca server de Web inclus în soluțiile lor pentru comerțul prin Internet. De atunci au scos pe piață serverul Apache ca IBM HTTP Server, care este inclus în pachetele soluțiilor lor pentru comerțul electronic, cum ar fi IBM WebSphere Application Server. IBM își comercializează serverul sub sigla „powered by Apache". IBM HTTP Server nu poate rula decât pe echipamente IBM.
4.3.2. Facilitățile serverului Apache
Oricare dintre programele server de Web enumerare anterior poate asigura o susținere adecvată a unui server de Web operațional. Atunci, de ce este Apache cel mai folosit server de Web din Internet? Cele mai importante facilități pe care acesta le oferă sunt:
1. Respectarea standardelor. Apache asigură o compatibilitate totală cu standardul HTTP/1. l (RFC 2616). Apache are facilități puternice pentru toate îmbunătățirile aduse protocolului HTTP în versiunea 1.1, cum ar fi cele pentru gazde virtuale, legături permanente, încărcarea de fișiere de către clienți, o mai bună evidență a erorilor și accelerarea furnizării resurselor (prin servere proxy sau portal). Permite și negocierea complexă a conținutului cu browserele HTTP/1.1, permițând furnizarea mai multor formate pentru aceeași resursă în vederea satisfacerii cerințelor diferiților clienți. Un foarte bun exemplu privind modul de utilizare a acestei facilități este recunoașterea mai multor limbaje naturale.
2. Scalabilitatea. Apache permite plasarea unui număr mare de situri de Web pe un singur sistem de calcul. Găzduirea virtuală prezintă un interes deosebit pentru cei care trebuie să găzduiască mai multe situri de Web pe un singur server. Multe servicii comerciale pentru găzduirea siturilor de Web folosesc din plin prețul scăzut al serverului Apache și facilitățile sale puternice pentru găzduirea virtuală.
3. Obiectele partajate dinamic. Apache este compatibil și cu tehnologia Dynamic Shared Objects (DSO). Aceasta permite încărcarea unor module de extensie în timp real. Este posibilă adăugarea sau eliminarea unor facilități fără recompilarea motorului serverului. Există câteva module care nu pot fi legate dinamic de Apache și care trebuie compilate în timpul execuției serverului Apache, dar nu sunt multe. Mecanismul DSO va fi păstrat în versiunile Apache ulterioare, și învățarea modului de compilare și folosire a modulelor DSO este un element esențial pentru administratorii de Apache.
4. Adaptabilitatea. Apache poate fi personalizat în întregime prin scrierea de module cu ajutorul interfeței API pentru module din Apache. Acestea pot fi scrise în C sau în Perl. Codul pentru implementarea unui modul minimal este mult mai mic decât s-ar putea crede. Codul-sursă este absolut liber pentru a fi analizat sau modificat de utilizator. Licența Apache permite utilizarea în aproape orice mod, fie el în scop privat sau comercial.
O altă caracteristică importantă este folosirea jurnalelor personalizabile, inclusiv posibi¬litatea de a scrie jurnale multiple din diferite servere virtuale. Tot personalizabile sunt în Apache anteturile de răspuns HTTP pentru controlul cache-ului și pentru informarea despre erori a browserului client. O discuție despre mod_header găsiți în capitolul 13 despre îmbunătățirea performanțelor serverului Apache.
5. Programabilitatea. Apache asigură facilități pentru programarea serverului cu ajutorul unei multitudini de limbaje și tehnici de integrare, cum ar fi PHP, Perl, servleturi Java, Java Sever Pages, Active Server Pages, CGI, FastCGI și Server-Side Includes.
6. Posibilitatea folosirii ca server proxy de accelerare. Apache nu a fost conceput pentru utilizarea ca proxy, dar, cu ajutorul unui modul numit mod_proxy el poate fi transformat într-un server proxy de accelerare foarte eficient. Cu alte cuvinte, Apache poate plasa în cache fișiere primite de la servere îndepărtate și să le servească apoi direct clienților care solicită resursele respective, fără să le descarce din nou din serverul de origine. Salvarea în cache pentru mai mulți clienți (de exemplu, pentru o rețea locală) poate mări foarte mult viteza de descărcare din Web pentru clienții serverului proxy și permite reducerea traficului pe o legătură la Internet.
7. Securitatea. Facilitățile de securitate ale serverului Apache includ autentificarea utilizatorului și protocolul SSL:
• Facilitățile pentru bazele de date (DBM și alte baze de date ca Oracle și MySQL) pentru autentificarea utilizatorilor permit căutarea în mod eficient în liste foarte mari cu utiliza¬tori autorizați.
• Compatibilitatea cu SSL permite schimbul de certificate digitale și codificarea datelor transferate prin Internet. Secure Sockets Layer este deja o componentă esențială a oricărui server de Web folosit în Internet pentru activități comerciale. În viitorii ani este probabil că serverele să devină mai fiabile și autentificarea utilizatorilor să devină tot mai folosită în Internet. Apache va asigura întotdeauna facilitățile pentru principalele mecanisme de securitate.
4.3.3. Alte avantaje
Nici una din facilitățile importante prezentate anterior nu este specifică numai pentru Apache. Facilitatea propriu-zisă, chiar dacă este impresionantă, nu este suficientă pentru a justifica alegerea serverului Apache în defavoarea altor variante excelente. În prezent Apache echipează circa 39% din siturile de Web accesibile prin Internet. Deși popularitatea sa nu poate să-i evidențieze nemijlocit superioritatea, ea arată că foarte multe situri de succes, cu trafic intens, au fost construite cu Apache. Asta reprezintă un uriaș vot de încredere în acest program. De asemenea, înseamnă că Apache este testat exhaustiv. Securitatea pe care o oferă, fiabilitatea și nivelul general de performanță sunt demonstrate, documentate și indubitabile.
Apache beneficiază de o asistență de neegalat din partea unui grup enorm de persoane. Unii sunt programatori; majoritatea sunt simpli utilizatori și administratori. Pentru un sistem software atât de folosit ca Apache, indiferent de natura problemelor, este foarte probabil să existe o persoană undeva care a întâlnit aceeași problemă și care poate oferi indicații pentru rezolvarea ei. Deși poate părea logic să se presupună ca asistența pentru programele gratuite este în mod necesar inferioară celei oferite de producătorii progra¬melor comerciale, se constatată că nu este deloc așa.
Apache este în permanență în curs de îmbunătățire activă intensă, dar și în aceste condiții există multe situri de Web care continuă să funcționeze foarte bine cu programe Apache din versiuni mult mai vechi decât cea actuală. Probabil că tocmai motivația non-profit a creatorilor săi este cea care asigură acest nivel de fiabilitate a fiecărei versiuni. Pur și simplu nu există nici un motiv pentru creatorii programului Apache să se grăbească pentru a ieși pe piață cu versiuni incomplete, pline de erori. Rezultatul este un avantaj produselor făcute aproape în mod continuu.
Cel mai serios motiv pentru a folosi serverul de Web Apache este că, din proiectare, Apache este foarte configurabil și extensibil grație posibilității sale de a lucra cu module de extensie. Interfața API din Apache le asigură programatorilor accesul la structurile de date din Apache și posibilitatea de a scrie rutine pentru a extinde funcționalitatea de bază a serverului Apache. Este posibilă, desigur, scrierea de modificări pentru orice server pentru care codul-sursă este liber, dar numai Apache facilitează acest lucru printr-o interfață API bine documentată care nu impune programatorului de module să înțeleagă codul-sursă folosit de nucleul Apache. Consecința acestei situații este că există o mare varietate de module de extensie pentru Apache create de numeroși programatori. Majoritatea modulelor standard care sunt furnizate împreună cu serverul de bază distribuit de Apache Software Foundation, sunt opționale și pot fi eliminate din nucleul serverului dacă sunt legate static sau pot să nu fie folosite dacă sunt compilate separat, ca module încărcabile dinamic. Aceasta este o mare deosebire față de programele înțesate cu funcții care nu sunt folosite niciodată.
5. ACTIVITATEA DE EMITERE A.T.R. REGLEMENTARE ȘI PROCEDURĂ.
Emiterea de avize tehnice de racordare este o activitate importantă pentru un operator de distribuție energie electrică asigurând accesul nediscriminatoriu și reglementat al tuturor utilizatorilor la rețelele electrice de distributie din gestiunea SC FDEE EDMN SA, în conformitate cu cerințele legale și de reglementare aplicabile.
Regulamentul privind racordarea utilizatorilor la rețelele electrice deinteres public,(ordin ANRE 59/2013) denumit în continuare Regulament, stabilește etapele și procedurile necesare pentru racordarea instalațiilor utilizatorilor la rețeleleelectrice de interes public pentru transportul și distribuția energiei electrice.
5.1. Domeniu de aplicare
(1) Prezentul Regulament se aplica raporturilor dintre operatorii de reteasi:
a) utilizatorii care solicita racordarea la reteaua electrica a unui loc deconsum si/sau de producere nou;
b) utilizatorii care solicita modificarea instalatiei prin care se racordeazala retea un loc de consum si/sau de producere;
c) utilizatorii la ale caror locuri de consum si/sau de producere se modificaelementele tehnice energetice sau administrative caracteristice acestora.
(2) În aplicarea prevederilor prezentului regulament, un operator de reteaeste considerat utilizator în relatia cu operatorul retelei electrice din amonte,la care sunt racordate instalatiile pe care le detine.
(3) Operatorul de transport și de sistem, operatorii de distributie titularide licenta, precum și orice persoana care detine o retea electrica de distributieproprie amplasata pe domeniul public, au obligatia sa asigure racordareainstalatiilor utilizatorilor, în conditiile prevazute de prezentul regulament.
(4) Avizul tehnic de racordare, emis de operatorul de retea în conditiileprevazute de prezentul regulament, contine conditiile tehnico-economice deracordare la retea a unui loc de consum si/sau de producere.
(5) Certificarea îndeplinirii conditiilor de racordare la retea prevazuteîntr-un aviz tehnic de racordare valabil, se realizeaza prin emitereacertificatului de racordare de catre operatorul de retea.
În vederea respectării condițiilor impuse de prezentul regulament operatorul de distribuție a întocmit procedura de aplicarein relațiile dintre FDEE EDMN S.A., implicit sucursalele sale, în calitate de operator de distribuție titular de licență, și utilizatorii care solicită racordarea la rețeaua electricăde distribuție, din zona de activitate,a unui loc de consum și/sau de producere, precum și în relațiile dintre compartimente din filială/sucursale care sunt implicate în procesul de racordare.
5.2.Descrierea activitatilor
Pentru o simplificare a descrierii acestei activități propun o lista de abrevieri folosită de către Operatorul de Distribuție în documentele sistemului de management integrat:
5.2.1. Documentarea și informarea preliminara a utilizatorului
1. Centrele teritoriale de relatii cu utilizatorii din cadrul FDEE/SDEE sunt sediile administrative ale FDEE/SDEE și ale CE MTJT.
2. In cadrul FDEE, distanta din orice loc pana la cel mai apropiat centru teritorial de relatii cu utilizatorii nu este mai mare de 50 km (Ordin 59/2013, art.66(4)).
3. SEAR intocmeste, actualizeaza, ori de cate ori este cazul, transmite la SEARs și afiseaza, prin grija BRP, pe pagina de web a FDEE, procedurile proprii avizate de ANRE și toate informațiile necesare utilizatorilor in procesul de racordare la RED.
4. SEARs primeste de la SEAR și afiseaza, la sediile centrelor teritoriale de relatii cu utilizatorii,extrase din procedurile proprii avizate de ANRE și toate informațiile necesare utilizatorilor in procesul de racordare la RED.
5. Operatorul publica, ori de cate ori este necesar, pe pagina de web a FDEE, documentele și informatiile puse la dispozitie de SEAR.
6. Cererea utilizatorului prin care se solicita informatii privind conditiile și posibilitatile de realizare a racordarii la RED, poate fi depusa la oricare din centrele teritoriale de relatii cu utilizatorii, dintre cele din lista afisata pe pagina de web a FDEE (sediul FDEE, sediile SDEE și ale CE MTJT). Cererea este inregistrata, in registrul de corespondenta, la registratura FDEE/SDEE/CE MTJT). Numarul de inregistrare se comunica solicitantului.
7. De la centrele teritoriale, la care a fost depusa, cerea este transmisa, in regim controlat, la SEAR/ SEARs.
8. SEAR/SEARs transmite, (cf Ordin 59/2013, art.10), in scris, solicitantului, informatii generale, in termen de cel mult 15 zile calendaristice de la inregistrarea cererii scrise a acestuia (Ordin 59/2013, art.10(3)) in registrul de corespondenta al centrului teritorial la care a fost depusa.
5.2.2. Depunereacererii de racordare sau a cererii de actualizare a ATR ori a CrR și a documentatiei aferente
1. Utilizatorul care solicita racordarea, depune o cerere de racordare (cf. Ordinul ANRE nr 59/2013, art.5(1) și documentația anexata acesteia la SEARs/CE MTJT, conform competentelor, prin una dintre modalitatile prevazute in Ordinul ANRE nr. 59/2013, art.12.
2. Formularele cererilor de racordare, sunt puse la dispozitia utilizatorului lacentrele teritoriale de relatii cu utilizatorii (SEARs sau CEMTJT) sau pot fi preluate de pe pagina web.
3. Cererea de racordareva cuprinde cel puțin informațiile precizate in Ordinul ANRE nr. 59/2013, art.13.
4. Documentația anexata cererii de racordareva cuprinde, functie de categoria utilizatorului, documentele mentionate in Ordinul ANRE nr. 59/2013, art.14, alin. (1).
5. Documentatia anexata cererii de actualizare a ATR/CrR pentru un loc de consum si/sau de producere pentru racordarea caruia exista un ATR/CrR va cuprinde documentele mentionate in Ordinul ANRE nr. 59/2013, art.14, alin (2).
6. Cererea de racordare/actualizare ATR/actualizare CrR se inregistreazain aplicatia MAR, iar numarul de inregistrare este comunicat clientului printr-oinstiintare tiparita utilizand aplicatia MAR.
5.2.3. Verificarea documentației depuse de utilizator, pentru obținerea/actualizarea ATR ori actualizarea CrR
SEARs/CEMTJTverifica documentația depusa de catre utilizator, pentru obținerea ATR, și daca aceasta este :
a) incompletadin punct de vedere al cerintelor prevazute in Ordinul 59/2013, art.14 sau deține informații insuficiente:comunica, in scris solicitantului, in termende 7 zile calendaristice (Ordin 59/2013 art.16(1)),necesitatea completarii documentatiei, indicand, in instiintare de „dosar neconform”, documentele ce trebuie anexate, completate sau refacute, cu furnizarea tuturor informatiilor necesare in acest scop.
Instiintarea de „dosar neconform” se emite utilizand aplicatia MAR, și se transmite prin posta sau prin fax cu confirmare de primire.
b) completa,
Stabileste solutia de racordare, elaborând FS/SS.
5.2.4. Stabilirea soluției de racordare
1. Stabilirea soluției de racordare la RED se face in conformitate cu Ordinul ANRE nr. 129/2008.
SEARs, analizand documentația depusa de solicitant, cerințele rezultate din chestionarul energetic, și situatia RED din zona de amplasament, stabileste elaborarea soluției de racordare la RED, prin:
fișa de soluție (FS) – in cazurile prevazute la art. 14 din Ordinul 129/2008; sau
studiu de soluție (SS) – in cazurile prevazute la art. 17 din Ordinul 129/2008.
FS este intocmita de SEARs, CEMTJT sau de SSSP/BARSP, funcție de competențele aprobate.
2. In vederea indeplinirii cerințelor, soluțiile de racordare, propuse prin FS, trebuie analizate, vizate și aprobate de factorii de decizie corespunzatori :
Fișa de soluție pentru branșamente simple (monofazate și trifazate) se aproba de șeful CE MTJT din zona respectiva (când aceasta este elaborata de centrul respectiv, conform competențelor acordate);
Fisele de solutie elaborate de SEARs se aproba de Seful SEARs;
Fisa de solutie pentru bransamente care necesita mai mult de 2 stâlpi intermediari se avizeazain CTA–SDEE;
Fișa de solutie pentru o instalatie de racordare noua, realizata din instalatii care nu apartin operatorului de retea, se avizeazain CTA–SDEE;
Fișa de soluție pentru lucrari complexe, racorduri de medie tensiune, etc. elaborata de BARSP se aproba de CTA–SDEE și CTEA – FDEE EDMN functie de competente.
3. Modul de organizare și funcționare a CTEA-FDEE și CTA-SDEE și competentele pentru avizarea FS/SS sunt reglementate și documentate.
4. In cazul in care soluția de racordare se stabileste pe baza unui SS, SEAR/SEARs transmite la SSSP/BARSP comanda de proiectare pentru elaborare SS, pe suport hartie, și solicitarea pe suport informatic, utilizand aplicatia MAR, pentru emiterea instiintarii și a proiectului contractului de elaborare SS.
5. In situatia in care SSSP/BARSP din motive bine justificate nu are posibilitatea de a elabora SS, in baza unui referat aprobat de conducerea FDEE/SDEE, solicita la AISE –Atelier Proiectare oferta pentru elaborarea acestuia.
6. SSSP/BARSP intocmeste fisa de tarifare și stabileste pretul contractului de elaborare a SS, completeaza in MAR datele cu privire la pretul contractului și transmite in termen de 7 zile calendaristice la SEARs proiectul de contract pentru elaborarea SS.
7. SEARs listeaza instiintarea cu privire la necesitatea intocmirii SS și transmite, in regim controlat, in termenul stabilit la art. 18, alin. (2) din Ordinul ANRE nr. 59/2013, cu completarile și modificarile ulterioare, direct sau prin posta, solicitantului, instiintarea și proiectul de contract pentru elaborarea SS.
8. In cazul in care utilizatorul refuza semnarea contractului, in termen de 30 zile calendaristice, cererea se claseaza.
9. In cazul in care utilizatorul semneaza contractul, SSSP/BARSP inregistreaza contractul de proiectare in registrul unic de evidenta a contractelor și completeaza in aplicatia MAR, datele referitoare la contractul de elaborare a SS.In situatia in care studiul de solutie se elaboreaza de AISE – Atelier Proiectare, SSSP/BARSP transmite la SCULI documentele necesare in vederea emiterii comenzii de elaborare SS.
10. Studiul de soluție se avizeaza de catre CTA–SDEE, CTEA–FDEE și CTES–SC ELECTRICA SA, conform competențelor.
11. SSSP/BARSP/AISE – Atelier Proiectare elaboreaza SS, in conformitate cu prevederile Ordinul 129/2008, il avizeaza conform competentelor de avizare și transmite SS, in regim controlat, un exemplar la utilizator, in termenul prevazut in Ordinul 59/2013, la art.18, alin (4), și un exemplar la SEAR/SEARs.
12. Utilizatorul in maximum 2 luni de la primirea SS, trebuie sa opteze, in scris, pentru una dintre solutiile din SS.
13. Daca solicitantul, nu transmite, în scris, în termenul legal, optiunea pentru una dintre solutiile propuse in SS, solutiile de racordare isi inceteaza valabilitatea iar cerea de racordare se claseaza.
14. Daca solicitantul, transmite, in scris, in termenul legal, optiunea pentru una dintre solutiile propuse in SS, SEAR/SEARs emite ATR, in termenul prevazut de Ordinul 59/2013 la art.27, alin(3).
15. BARSP va atasa in aplicatia MAR, copia scanata a avizului CTA sau a punctului de vedere CTA pentru FS/SS elaborata/elaborat.
16. SSSP transmite,la Serviciul Facturare, notificareaprivind necesitatea facturarii SS, insotita de copia contractului de proiectare, in vederea intocmirii facturii, dupa finalizarea și avizarea SS.
17. Serviciul Financiar din cadrul FDEE incaseaza valoarea serviciului de intocmire a SS, in baza facturii primite de la SSSP.
18. BARSP transmite SS avizat la SEARs, insotit de o copie a contractului de proiectare, in vederea intocmirii facturii.
19. Serviciul Financiar din cadrul SDEE incaseaza valoarea serviciului de intocmire a SS, in baza facturii primite de la SEARs.
5.2.5. Emiterea/actualizarea ATR
1. Emiterea / actualizarea ATR se face in conformitate cu Ordinul 59/2013, sectiunea a 4-a.
2. Conținutul cadru al ATR este reglementat de Ordinul ANRE nr. 74/2014.
3. SEAR/SEARs stabilește tariful de racordare, in conformitate cu Ordinul ANRE nr. 11/2014 Metodologie de stabilire a tarifelor de racordare a utilizatorilor la retelele electrice de interes public și Ordinul ANRE nr. 141/2014.
In situatiile prevazute in Ordinul ANRE nr. 11/2014, la art.5, alin(4), art.7, alin(1), art. 11, alin (3) și art. 12, componenta TR corespunzatoare elementelor instalatiei de racordare, se stabileste de catre SSSP/BARSP, in cadrul FS/SS, pe baza de deviz general, in conformitate cu HG 28/2008.
4. SEAR/SEARs intocmeste fisa de calcul prin care se stabileste tariful de racordare și componentele acestuia, in conformitate cu prevederile Ordinul ANRE nr. 11/2014 Metodologie de stabilire a tarifelor de racordare a utilizatorilor la retelele electrice de interes public.
5. Pe baza FS/SS elaborate și avizate, SEAR/SEARs sau CEMTJT,in funcție de competențele acordate,intocmește ATR, utilizand aplicatia MAR., in care se precizeaza condițiile tehnico-economice de racordare la RED, cf.Ordinul ANRE nr. 59/2013, art.28.
6. In situatia prevazuta in Ordinul 59/2013, la art. 31, SEAR completeaza valoarea și forma garantiei financiare, in ATR.
7. OD executa garantia financiara constituita de utilizator, in conformitate cu prevederile Ordinului 59/2013, art.31, alin(5) și alin(6) prin grija Serviciului Financiar la solicitarea scrisa a SEAR/SEARs.
Garantia financiara constituita de utilizator inceteaza/se restituie utilizatorului la aparitia uneia din situatiile prevazute in Ordinul 59/2013, art.31, alin(7), prin grija Serviciului Financiar, la solicitarea scrisa a SEAR, urmare instiintarii primite de la responsabilul CnR.
8. Intocmeste, utilizand aplicatia SAP, factura de plata a tarifului pentru emiterea ATR.
9. SEARs sau CEMTJT transmite ATR solicitantului, in termenul legal, prevazut de Ordin ANRE 59/2013 art.26, numai dupa achitarea tarifului de emitere sau de actualizare a avizului tehnic de racordare.
10. SEARs/CEMTJT actualizeaza gratuit și din oficiu ATR sau CrR in cazul unor modificari tehnice in instalatiile OD, in termenele prevazute in Ordinul ANRE nr. 59/2013, art. 5, alin (5).
11.OD comunica in scris solicitantului, in termen de maximum 20 zile calendaristice de la inregistrarea documentatiei conform cerintelor din Ordinul ANRE nr. 59/2013, art. 14, imposibilitatea de a emite ATR și motivele justificate ale refuzului, in situatiile prevazute in Legea nr. 123/2012, cu modificarile și completarile ulterioare,la art. 25 alin (2), inclusiv in situatia nerespectarii normelor tehnice privind delimitarea zonelor de protectie și de siguranta aferente capacitatilor energetice.
Criteriile obiective, justificate din punct de vedere tehnic și economic care stau la baza refuzului emiterii ATR sunt:
– neindeplinirea conditiilor impuse de standardele tehnice in vigoare;
– nerespectarea prevederilor Codului Tehnic al RED și Codului Tehnic al RET.
Logigrama unui ATR cu integrarea procesului cu modulelel SAP este prezentată mai jos
6. DESCRIEREA APLICAȚIEI
6.1. Necesitatea dezvoltării și utilizarea aplicației
Un operator de distribuție energie electrică, în spetă o sucursală a F.D.E.E. E.D.M.N. are în portofoliu circa 200000 clienți, dinamica modificărilor ce implică emiterea de aviz tehnic de racordare fiind, exprimat procentual din total portofoliu clienți, de 3% pe an.
În capitolul anterior am prezentat procedura și logigrama acestei activități. Coroborând complexitatea acestui proces cu numărul relativ ridicat de solicitări de ATR anual se observă ca volumul de muncă și de date este unul semnificativ.
În momentul conceperii acestei aplicatii Web evidența și emiterea avizelor tehnice de racordare erau gestionate prin intermediul unor fișiere excel și a unor machete word folosindu-se funția de mail merge. Era un sistem rudimentar, informația era structurata în fișiere excel anuale, din cauza volumului mare de înregistrări luandu-se decizia segmentări informației în baze de date anuale și nu în unul singur. Enumerez căteva din neajunsurile acestui sistem:
Datorită dimensiunilor relativ mari ale unui fișier excel salariații de la centrele de exploatare nu puteam înregistra direct în aplicație datele din fișa de soluție ci trimiteau la sediul central, Serviciului Energetic, Acces Rețea documentația pe formulare tipizate urmând ca personalul din acest serviciu să introducă în sistemul informatic datele;
Deși fișierele excel erau partajate astfel încăt să permită accesul simultat in mod R/W a mai multor utilizatori nu de puține ori se întâmpla ca informația să fie alterată sau pierdută în mod accidental;
Căutarea in arhiva de ATR-uri era o operațiune complicată în momentul în care informațiile furnizate de solicitant era succinte;
Riscul de alterare a machetelor create în Microsoft Word era destul de mare, cel mai mare risc consta în pierderea legăturii cu fișierul excel;
Imposibilitatea creării unui plan de back-ul eficient pentru salvarea bazelor de date și a machetelor.
Ca urmare a limitărilor acestui sistem s-a luat decizia creării unui sistem informatic care să fie integrat cu aplicația SAP – ERP implentat la nivelul F.D.E.E. E.D.M.N-, aplicație ce urma să fie dezvoltată cu ajutorul unui partener extern.
În urma analizei structurii bazelor de date curente s-a observat lipsa de omogenitate a acestor informații, modul defectuos de structurare și ca urmare s-a luat decizia ca să nu aiba loc un import a informatiilor istorice și plecarea de la nivelul 0 cu înregistrările, pentru consultarea arhivei, listarea ATR-urilor deja emise, raportările către ANRE și alte posibile solicitări, urmând să se dezvolte o altă aplicație.
Această aplicație a am dezvoltat-o la cererea și cu suportul Serviciului Energetic, Acces Rețea pentru a oferi o soluție integrată și accesibilă tuturor participanților la procesul de emitere ATR-uri, o aplicație care să nu fie mare consumatoare de resurse hardware, facil de operat și, foarte important, ținând cont că nu exista posibilitatea de a realiza fiecare înregistrare (circa 30000) pentru uniformizarea modului de înregistrare a informației, flexibilitate a modului de înregistrare în tabele.
6.2. Structura bazei de date
Baza de date, cu numele „energetic” reprezintă suportul informatic al aplicației, Ea conține 12 tabele din care unele sunt pentru stocare date iar altele sunt tehnice cu rol de stocare temporara a datelor.
Tabele cu rol de stocare sunt: avizracmari; avizracmarisabloane; avizracord; avizracordsabloane; utilizatori.
Tabelele avizracord și avizracmari au aceași structură dar din motive tehnice au fost separate. Ele conțin informațile complete despre avizul tehnic de racordare iar structura lor este una destul de complexă având un număr de 75 de câmpuri. Pe viitor se recomandă o restructurare și o reorganizare a informațiilor în mai multe tabele. Singurul impediment al păstrării acestei tabele într-o singură structură l-a reprezentat lipsa unei chei unice la momentul importului datelor.
Tabelele avizracordsabloane și avizracmarisabloane au aceași structură și au rolul de a stoca informați tipizate folosite in pick-up list.
Câmpul „solid” este un câmp tip ID (număr curent). Câmpul „cod” specifică tipul de informație, funcție de acest câmp se construiesc listele din macheta de introducere date. Datele nu sunt unice. Câmpul „solden” reprezintă valoarea afișată in macheta de introducere/modificare a ATR-ului. Câmpul „solsolutie” dezvoltă câmpul „solden” explicînd pe larg datele tehnice(acolo unde este cazul).
Pentru o mai bună înțelegere o sa prezint o captură a browse a acestei tabele.
Tabela utilizatori este o tabelă cu rol de stocare a utilizatorilor abilitați să accesese aplicația.
Singurele lucruri de mențional la această tabelă sunt:
Câmpul „parola”este criptat md5;
Câmpul „tip_acces” specifică drepturile de acces ale utilizatorului, drepturile sunt de tip administrare aplicație (valoarea câmpului este ADM), adăugare/modificare informații în baza de date (valoarea câmpului este W) iar orice altă valoare a acestui câmp atribuie utilizatorului drept de consultare.
6.3. Modul de funcționare a aplicației. Explicații
In subcabitolul precedent am prezentat baza de date construită pentru aplicație. În continuare urmează explicația funționări aplicației propriu-zise. Se vor prezenta pagini dinamice din site și modul de funcționare al aplicației. Nu toate paginile și funțiile aplicației vor fi prezentate, volumul mare de informații fiind principala cauza. De asemenea, se vor analiza și câteva fișiere care deși au extensia php, nu sunt pagini, ci îndeplinesc numai câteva funcții, având însă un rol deosebit în aplicația prezentată.
Prima pagină care se încarcă atunci când pornim aplicația este pagina index.php, pagină prin intermediul căreia se solicită autentificarea prin trimiterea spre pagina autentificare.php, după autentificarea reușită și funcție de drepturile de acces apare o listă de opțiuni intrare în meniul aplicației.
După autentificare, în mod administrare apare o listă cu trei opțiuni:
a) intrare in meniul ATR casnici și mici consumatori,
b) acces în meniul ATR mari consumatori
c) înregistrare utilizator
Pentru utilizatorii cu drepturi de tip R/W a treia opțiune nu este afișată.
În continuare se va prezenta meniul aferent ATR casnici și mici consumatori deoarece cel aferent marilor consumatori este in linii mari asemănător. Pagina aferentă acestui meniu este meniuoriz.php, pentru mari consumatori menuatrmari.php deși am comvenit că motivat de numurul mare de elemente comune ne vom rezuma la prezentarea ramurii “Avize racordare consumatori casnici ;i mici”
Meniul constă în 4 secțiuni:
1. Administrare – acțiuni de adăugare/modificare ATR-uri.
2. Căutări avize – diverse moduri de căutare personalizată dar și rapoartări solicitate de reglementator (ANRE)
3. Listări ATR – aici regăsindu-se mai multe machete de ieșire care după selectare sunt exportate in Microsoft Word.
4. Sabloane – adăugare/modificare șabloane aferente listelor predefinite
Observație: Anumite rapoarte nu sunt pe deplin funcționale ele aflandu-se în stadiu de dezvoltare, beneficiarul aplicației nefurnizînd informațiile necesare finalizării lor.
1.a. “Adaugă aviz racordare” – ce lanseaza pagina incepaviz.php(figura de mai sus) constă într-o machetă de adăugare ATR. Un aviz tehnic de racordare se completeaza în etape, în prima etapă, pentru validare anumite câmpuri sunt obligatorii. Completarea se face în etape și de către utilizatori diferiți. Totuși, datorită multitudinilor de informații nu voi face o prezentare detaliată a tuturor câmpurilor.
1.b. “Modifică un aviz” – lansează pagina cautaviz.php utilizatorul având la dispoziție mai multe criterii de selecție pentru o identificare cât mai corectă a ATR-urilor dorite.
După stabilirea criteriilor de selecție se apasă butonul “Start căutare” aplicația returmând un ecran care informează utilizatorul de numărul de avize care îndeplinesc conditiile permițîndu-i să revină la ecranul inițial, de selectare a criteriilor pentru o modifica criteriile, sau să procedeze la afișarea avizelor tehnice de racordare care îndeplinesc criteriile impuse.
Se poate selecta o singură poziție după care se afișează macheta prin apăsare pe butonul “Selectati pozitie”. Dacă se dorește doar o listă succintă cu aceste atr-uri se poate exporta în Microsoft Excel.
Dacă s-a dorit modificarea unui aviz selectat apare macheta specifică ATR în care se pot modifica câmpurile dorite. Dacă data emiterii unui aviz este mai mică cu mai mult de 1 an față de data curentă butonul de modificare nu mai este prezent și în consecință modificările nu vor putea fi efectuate.
2.a. Cautări diverse – lansează fișierul cautavize.php prin intermediul căruia utilizatorul poate identifica unul sau mai multe avize care îndeplinesc criteriile stabilite.
Ca rezultat a acțiuniii de căutare aplicația returnează o listă de ATR-uri ce îndeplinesc condițiile cu un număr limitat de informații per înregistare. Utilizatorul are posibilitatea să repete căutarea, să exporte rezultatul într-un fișier Microsoft Excel sau să selecteze un ATR pentru vizualizare.
Dacă acțiunea aleasă este de a selecta și vizualiza un ATR atunci se apelează fișierul afisavize.php care are rol de afișare completă a informatiilor din a ATR-ul selectat cu posibilitatea de a lista ATR-ul în macheta tipizată prin intermediul unui export îm Microsoft Word, sau doar exportul datelorintr-o foaie de calcul tabelar din Microsoft Excel.
De reținut că din această pagină nu se pot efectua modificări asupra ATR-ului ci doar vizualizare și listare.
Exportul și listarea ATR-ului se face prin intermediul paginii distrib.php care include alte pagini php care nu sunt apelate direct de către utilizator.
2.b.Tot în această secțiune, “Cautari avize” ar mai fi de menționat funcția de căutare și afișare “Export in Excel coloane selectate” care apelează pagina cautavcampuri.php si care , după afișarea listei cu ATR-urile ce îndeplinesc criteriile de filtrare, dă posibilitatea utilizatorului să selecteze doar anumite câmpuri din baza de date pe care apoi sî le exporte în Microsoft Excel.
Din motivul invocat și la începutul subcapitolului 6.3 voi aborda secțiunea 3 “Listari ATR” foarte rapid menționând faptul că toate utilitarele din aceseastă secțiune folosesc funcții de căutare urmate de listarea infromatiilor pe machete exportate în Microsoft Word sau Microsoft Excel.
Legat de secțiunea 4 “Sabloane” este important de menționat utilitatea deosebită a folosirii acestor șabloane în completarea extrem de complexului aviz tehnic de racordare, șabloane ce cresc productivitatea și scad riscul operării eronate.
Funcția “Adauga sablon” – lansează pagina distrib.php care apeleaza pagina adaugsablon.php.
Șabloanele sunt împărțite pe categorii, numite generic “Tip sabloane” din aceste categorii amintesc: “solutii”, “masurare”, “delimitare”, “tipconsumator”, “cdee”, “intocmitori”. Fiecare categorie de șabloane conține două sau mai multe șabloane, lista putând fi extinsă prin intermediul paginii mai sus amintite. Șablonul are un nume și un conținut, numele fiind o formă succintă de explicare a conținutului.
Totodată, prin intermediul “Afiseaza sablon” se poate modifica si sterge un sablon. De menționat că Tipurile de șabloane nu se pot sterge de către utilizatori.
Ar mai fi de menționat o singura funție importantă a aplicației, funcție care este disponibila doar utilizatorilor cu drept de adminstrare, funcția de adăugare utilizatori care apelează pagina inregistrare.php.
Sunt trei tipuri de acces, ADM cu rol de administrare aplicație, W – acces în aplicație și modificare a informațiilor, R (sau orice altceva în afară de ADM si W) care confera drept de consultare utilizatorului. Parola este criptata md5 și inscrisă in tabela utilizatori.
În acest capitol am încercat sî prezint aplicația atât ca structură cât și ca funcționalitate într-un mod cît mai simplu fără a intra în detalii tehnice cu privire la structura unui ATR
6.4 Considerente hardware și software
Mașina pe care rulează aplicația este un server HP ML350 cu procesor Xeon Dual core și Hyper Threading activat ce rulează la frecvența de 3GHz. Memoria RAM este constituită din 4 module de 512MB DDR2, memorie ECC unbuffered. Memoria externă este constituită dintr-o matrice RAID tip 10 din 4 HDD SCSI de 73GB + 1 HDD de aceași capacitate hot spare.Serverul are doua surse de alimentare redundante de 550W fiecare. Sistemul de operare este Microsoft Windows 2008 R2 Server.
Caracteristicile tehnice sunt mult peste cerințele aplicației dar o mașină cu dotări premium care asigură redundanță și siguranța in exploatare este necesară pentru o aplicație a cărei disponibilitate trebuie sa fie de aproape 100%.
7. CONCLUZII ȘI PROPUNERI
Făcând prezentată într-o măsură satisfaăcătoare cu această aplicație cred că se pot trace următoarele concluzii:
Cu privire la necesitatea acestei aplicații consider că ea este utilă, facilitînd accesul facil la informații a tuturor participanțiilor la procesul de emitere avize de racordare;
Dăcă ar fi să ne comparăm cu modul de accesare a unui fișier Microsoft Excel aplicația este rapidă cu un consum redus de resurse la nivelul stației de lucru a utilizatorului. Paginile se încarcă relativ repede datorită atât faptului că lucrează în mare măsură cu cod PHP și baze de date MySQL, cât și grație utilizării butoanelor sau efectelor vizuale care solicită atât procesorul căt și crește consumul de memorie RAM;
Din cauza lipsei de timp am pus mai mult accentul pe utilitatea sa și nu pe design, pentru unii aspectul fiind considerat prea simplist și neatractiv;
Aplicația nu este facilă, dar nu din cauza prezentării paginilor ci din natura complexă a unui aviz de racordare și nu se adresează unui utilizaor obisnuit ci unora care au cunostinte peste medie in domeniul energetic;
dar și propuneri de înbunătățiri:
Dacă se va dori de către beneficiar se vor dezvolta si modulele care încă nu sunt funcționale, dar această posibilă dezvoltare este condiționată în mare măsură de capacitatea de sintetizare si formulare a problemelor de către beneficiar, această problemă de comunicare a nevoilor beneficiarului către dezvoltator fiind un impediment des întâlnit în domeniul dezvoltării software;
Se pot stabili mai multe metode de validare a datelor pentru reducerea introduceriii unor date eronate;
Se impune o reorganizare a tebelelor și o verificare amănunțită a informațiilor deja introduse, preluate din fisierele tip excel;
Codul sursă trebuie “curățat” de secvențe rămase din fazele înițiale ale dezvoltării aplicației;
Machetele de culegere date sunt un pic cam mari, de aceea o să solicit beneficiarului, care cunoaște mai bine ce formă ar conferi o ergonomitate mai bună aplicației, să regândească interfața, prin separarea unicului ecran de introducere date in 2-4 mai mici;
Aplicația se poate “condimenta” cu elemente grafice prietenoase care să o facă mai user-frendly.
8. ANEXĂ COD SURSĂ
Mai jos este prezentat codul sursă al principalelor paginil Web din această aplicație.
Sistemul de operare fiind Microsoft modul de afișare a locației fișierelor php va fi cel cunoscut.
\www\energetic\index.php
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<title>Aplicatie Emitere Avize</title>
<link href="./main_css.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
require_once('dbuser.php');
if(!isset($_GET['actiune'])) $_GET['actiune'] = '';
if (isset($_GET['logat']) && ( $_SESSION['logat'] == 'da')) {
if ($_SESSION['tip_acces']=="W" || $_SESSION["tip_acces"]=="ADM")
echo 'Utilizatorul <h4>'.$_SESSION['user'].'</h4> are drepturi de adaugare/modificare date<br><br>';
else
echo 'Utilizatorul <h4>'.$_SESSION['user'].'</h4> NU are drepturi de adaugare/modificare date<br><br>';
?>
<li><a class="toplevel" title="Administrare Avize">Administrare </a>
<ul>
<pre>
<li><a class="drop" href="./menuoriz.php" title="Avize casnici si mici">Avize racordare consumatori casnici si mici</a></li>
<pre>
<pre>
<li><a class="drop" href="./menuatrmari.php" title="Avize consumatori MARI">Avize racordare consumatori MARI</a></li>
</ul>
<!–[if lte IE 6]></td></tr></table></a><![endif]–>
</li>
<?php }
else
switch($_GET['actiune'])
{
case '':
echo '<form action="index.php?actiune=validare" method="post">
Utilizator: <input type="text" name="user" value=""><br>
Parola: <input type="password" name="parola" value=""><br>
<input type="submit" name="Login" value="Login">
</form>';
break;
case 'validare':
$_SESSION['user'] = $_POST['user'];
if(($_POST['user'] == '') || ($_POST['parola'] == ''))
{
echo 'Completeaza casutele. <Br> ';
echo ' Apasati <a href="autentificare.php">aici</a> pentru a reveni.';
}
else
{ $numetabela=$_COOKIE['nametabela'];
$cerereSQL = "SELECT * FROM `$numetabela` WHERE utilizator='".htmlentities($_POST['user'])."' AND parola='".md5($_POST['parola'])."'";
$rezultat = mysql_query($cerereSQL);
if(mysql_num_rows($rezultat) == 1)
{
while($rand = mysql_fetch_array($rezultat))
{
$_SESSION['logat'] = 'da';
$_SESSION['tip_acces']=$rand["tip_acces"];
echo 'Bine ai venit, <b><i>'.$_SESSION['user'].'</b></i>!<br><br><br>';
if ($rand['tip_acces']=="W" || $_SESSION["tip_acces"]=="ADM")
echo 'Aveti drepturi de adaugare/modificare date<br><br>';
else
echo 'NU aveti drepturi de adaugare/modificare date<br><br>';
?>
<li><a class="toplevel" title="Administrare Avize">Administrare </a>
<ul>
<pre>
<li><a class="drop" href="./menuoriz.php" title="Avize casnici si mici">Avize racordare consumatori casnici si mici</a></li>
<pre>
<pre>
<li><a class="drop" href="./menuatrmari.php" title="Avize consumatori MARI">Avize racordare consumatori MARI</a></li>
<?php
if ($_SESSION["tip_acces"]=="ADM")
{
?>
<pre>
<pre>
<li><a class="drop" href="./inregistrare.php" title="Inregistrare utilizator nou">Inregistrare utilizator</a></li>
<?php
}
?>
</ul>
<!–[if lte IE 6]></td></tr></table></a><![endif]–>
</li>
<?php
}
}
else
{
echo 'Date incorecte (user sau parola). <Br>
Apasati <a href="autentificare.php">aici</a> pentru a reveni.';
}
}
break;
}
?>
</body></html>
\www\energetic\inregistare.php
<?php
require_once('dbuser.php');
if ($_SESSION['logat'] != 'da' || $_SESSION["tip_acces"]!="ADM") {
echo "Trebuie sa va autentificati ca administrator";
require_once("autentificare.php"); }
else {
if(!isset($_GET['actiune'])) $_GET['actiune'] = '';
if(!isset($_SESSION['user'])) $_SESSION['user'] = '';
if(!isset($_SESSION['parola1'])) $_SESSION['parola1'] = '';
if(!isset($_SESSION['parola2'])) $_SESSION['parola2'] = '';
if(!isset($_SESSION['nume'])) $_SESSION['nume'] = '';
if(!isset($_SESSION['prenume'])) $_SESSION['prenume'] = '';
if(!isset($_SESSION['tip_acces'])) $_SESSION['tip_acces'] = '';
switch($_GET['actiune'])
{
case '':
echo '<table width="309" border="0" cellpadding="0" cellspacing="0">
<form name="formular" action="inregistrare.php?actiune=validare" method="post">
<tr>
<td height="36" colspan="4" valign="top"><h1>Formular inregistrare </h1></td>
</tr>
<tr>
<td width="80" height="19" valign="top"> </td>
<td width="15" rowspan="5" valign="top"></td>
<td width="144" valign="top"> </td>
<td width="70" valign="top"> </td>
</tr>
<tr>
<td height="22" align="right" valign="top">Utilizator:</td>
<td colspan="2" valign="top">
<input type="text" name="user" size=10 maxlength=10 value="'.$_SESSION['user'].'"></td>
</tr>
<tr>
<td height="7"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="22" align="right" valign="top">Parola:</td>
<td colspan="2" valign="top"><input type="password" name="parola1" value="'.$_SESSION['parola1'].'"></td>
</tr>
<tr>
<td height="7"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="38" align="right" valign="top">Reintroduceti<br> Parola:</td>
<td> </td>
<td align="middle" valign="middle"><input type="password" name="parola2" value="'.$_SESSION['parola2'].'"></td>
<td> </td>
</tr>
<tr>
<td height="7"></td>
<td valign="top"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="19" align="right">Nume:</td>
<td> </td>
<td colspan="2" valign="top"><input type="text" name="nume" value="'.$_SESSION['nume'].'"></td>
</tr>
<tr>
<td height="7"></td>
<td valign="top"></td>
<td></td>
</tr>
<tr>
<td height="22" align="right">Prenume:</td>
<td valign="top"></td>
<td colspan="2" valign="top"><input type="text" name="prenume" value="'.$_SESSION['prenume'].'"></td>
</tr>
<tr>
<td height="7"></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="8">Tip acces (W/R)</td>
<td valign="top"></td>
<td colspan="2" valign="top"><input type="text" name="tip_acces" value="'.$_SESSION['tip_acces'].'"></td>
</tr>
<tr>
<td height="19"> </td>
<td valign="top"></td>
<td> </td>
</tr>
<tr>
<td height="24"> </td>
<td valign="top"></td>
<td colspan="2" valign="top"><input name="Trimite" type="submit" id="Trimite" value="Trimite">
<input name="Reseteaza" type="reset" id="Reseteaza" value="Reseteaza"></td>
</tr>
<tr>
<td height="24"> </td>
<td valign="top"></td>
<td> </td>
<td> </td>
</tr>
<tr>
<td height="24"> </td>
<td valign="top"></td>
<td colspan="2" valign="top">
Apasa <a href="index.php">aici</a> pentru a renunta.
</td>
</tr>
<tr>
</form>
</table>';
break;
case 'validare':
$_SESSION['user'] = $_POST['user'];
$_SESSION['parola1'] = $_POST['parola1'];
$_SESSION['parola2'] = $_POST['parola2'];
$_SESSION['nume'] = $_POST['nume'];
$_SESSION['prenume'] = $_POST['prenume'];
$_SESSION['tip_acces'] = $_POST['tip_acces'];
if(($_SESSION['user'] == '') || ($_SESSION['parola1'] == '') || ($_SESSION['parola2'] != $_SESSION['parola1']) || ($_SESSION['nume'] == '') || ($_SESSION['prenume'] == '') )
{
echo 'Nu ai introdus date in formular sau cele introduse nu sunt corecte. <br>
Apasa <a href="inregistrare.php">aici</a> pentru a te intoarce la pagina anterioara.';
}
else
{
$cerere = 'SELECT * FROM `utilizatori` WHERE `utilizator` = "'.$_SESSION['user'].'" ' ;
$rezult=mysql_query($cerere) or die("QUERY error:".mysql_error());
if (mysql_affected_rows() != 0) { echo 'Utilizatorul exista deja <br><br>';
echo 'Apasa <a href="inregistrare.php">aici</a> pentru a te intoarce la pagina anterioara.';}
else
{ echo 'Va multumim. <br><br>
Datele au fost introduse cu succes in baza de date. <br><br>
Pentru a va autentifica apasati <a href="autentificare.php">aici</a>.';
$cerereSQL = "INSERT INTO `utilizatori` (`utilizator`, `parola`, `nume`, `prenume`, `tip_acces` )
VALUES ('".addentities($_SESSION['user'])."', '".md5($_SESSION['parola1'])."', '".addentities($_SESSION['nume'])."', '".addentities($_SESSION['prenume'])."', '".addentities($_SESSION['tip_acces'])."' )";
mysql_query($cerereSQL);
$_SESSION['user'] = '';
$_SESSION['parola1'] = '';
$_SESSION['parola2'] = '';
$_SESSION['nume'] = '';
$_SESSION['prenume'] = '';
$_SESSION['tip_acces'] = ''; }
}
break;
}
}
?>
\www\energetic\menuoriz.php
<!DOCTYPE>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<title>Meniu Aplicatie ATR</title>
<LINK REL=STYLESHEET HREF="bodystyles.css">
</head>
<?php
require_once('dbuser.php');
if(!isset($_GET['actiune'])) $_GET['actiune'] = '';
if(!isset($_SESSION['logat'])) $_SESSION['logat'] = 'Nu';
if($_SESSION['logat'] != 'da')
{ echo '<table align=center ><tr><td>  </td></tr><tr><td>
Pentru a accesa aceasta pagina, trebuie sa va autentificati. </td></tr><tr><td>  </td></tr>
<tr><td>Clic <a href="index.php">aici</a> pentru autentificare</td></tr></table>';
// Pentru a va inregistra, apasati <a href="inregistrare.php">aici</a>';
}
else { unset($_SESSION['actiune']);
$_SESSION['dbbaza'] = 'dbatr.php';
$_SESSION['menu'] = 'menuoriz.php';
$_SESSION['foot']="mici";
?>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<title>Meniu Aplicatie ATR</title>
</head>
<body>
<div align="center">
<form >
<table class="mainmenu" border="0" cellspacing="0" cellpadding="0">
<tr><td align="center"><h3>Avize racordare consumatori mici si casnici</h3></td></tr>
<!– <tr><td bgcolor=blue align="center"><h3>Încercați cu diacritice</h3></td></tr> –>
<tr><td align="center">  </td></tr>
<tr>
<td align=center>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td nowrap="nowrap" align="center">
<div class="menu">
<ul>
<?php
if ($_SESSION["tip_acces"]=="W" || $_SESSION["tip_acces"]=="ADM") {
?>
<!– Administrare –>
<li><a href="./incepaviz.php" title="Administrare Avize">Administrare <span class="nabla">∇</span><!–[if IE 7]><!–></a><!–<![endif]–>
<!–[if lte IE 6]><table><tr><td><![endif]–>
<ul>
<li><a class="drop" href="./incepaviz.php" title="adauga">Adauga aviz racordare</a></li>
<li><a class="drop" href="./cautaviz.php?actiune=modifica" title="modifica">Modifica un aviz</a></li>
</ul>
<!–[if lte IE 6]></td></tr></table></a><![endif]–>
</li>
<?php
}
?>
<!– Cautari –>
<li><a class="toplevel" href="./cautavize.php" title="Cautari dupa multiple criterii">Cautari avize <span class="nabla">∇</span><!–[if IE 7]><!–></a><!–<![endif]–>
<!–[if lte IE 6]><table><tr><td><![endif]–>
<ul>
<li><a class="drop" href="./cautavize.php" title="cautari">Cautari diverse</a></li>
<li><a class="drop" href="./cautavd62.php?actiune=d62" title="exportaatr">Anexa D6.2 ATR emise in luna CUMULAT</a></li>
<li><a class="drop" href="./cautavd63.php?actiune=d63" title="exportaatr">Anexa D6.3 ATR emise in luna CUMULAT</a></li>
<li><a class="drop" href="./cautavd63act.php?actiune=d63act" title="exportaatr">Anexa D6.3 ATR actualizare</a></li>
<li><a class="drop" href="./cautavcampuri.php?actiune=selectexcel" title="selectexcel">Export in Excel coloane selectate</a></li>
<li><a class="drop" href="./cautavsint.php?actiune=ssint" title="exportaatr">Situatie statistica-excel</a></li>
<li><a class="drop" href="./cautavcumul.php?actiune=atrcumul" title="exportacumul">Situatie statistica CUMULATA – excel</a></li>
</ul>
<!–[if lte IE 6]></td></tr></table></a><![endif]–>
</li>
<!– Liste –>
<li><a class="toplevel" href="./cautaviz.php?actiune=lista1" title="Diverse liste">   Listari  ATR <span class="nabla">∇</span><!–[if IE 7]><!–></a><!–<![endif]–>
<!–[if lte IE 6]><table><tr><td><![endif]–>
<ul>
<li><a class="drop" href="./cautaviz.php?actiune=lista1" title="lista1">Aviz tehnic racordare consumator casnic</a></li>
<li><a class="drop" href="./cautaviz.php?actiune=lista2" title="lista2">Aviz tehnic racordare consumatori mici</a></li>
<li><a class="drop" href="./cautaviz.php?actiune=lista3" title="lista3">Contract de racordare 1 transa</a></li>
<li><a class="drop" href="./cautaviz.php?actiune=lista4" title="lista4">Contract de racordare transe</a></li>
<li><a class="drop" href="./cautaviz.php?actiune=lista5" title="lista5">Memoriu tehnic</a></li>
</ul>
<!–[if lte IE 6]></td></tr></table></a><![endif]–>
</li>
<?php
if ($_SESSION["tip_acces"]=="W" || $_SESSION["tip_acces"]=="ADM") {
?>
<!– Administrare Sabloane –>
<li><a class="toplevel" href="./adaugsablon.php" title="Administrare Sabloane">Sabloane <span class="nabla">∇</span><!–[if IE 7]><!–></a><!–<![endif]–>
<!–[if lte IE 6]><table><tr><td><![endif]–>
<ul>
<li><a class="drop" href="./distrib.php?actione=adaugsablon" title="adauga">Adauga sablon</a></li>
<li><a class="drop" href="./distrib.php?actione=afisablon" title="afisez">Afiseaza si modifica</a></li>
</ul>
<!–[if lte IE 6]></td></tr></table></a><![endif]–>
</li>
<?php
}
?>
<!– Iesire –>
<li><a class="toplevel" href="./index.php" title="Revenire la pagina principala">Revenire <span class="nabla">∇</span><!–[if IE 7]><!–></a><!–<![endif]–>
<!–[if lte IE 6]><table><tr><td><![endif]–>
<ul>
<li><a class="drop" href="./index.php" title="Revenire">Revenire</a></li>
<?php
if ($_SESSION["tip_acces"]=="ADM") {
?>
<li><a class="drop" href="./salvare.php" title="salveaza">Salveaza date din baza</a></li>
<li><a class="drop" href="./restaurare.php" title="restaurez">Restaureaza(Incarca) date salvate</a></li>
<li><a class="drop" href="./crefisier.php" title="creare">Creare fisier dintr-o baza de date</a></li>
<li><a class="drop" href="./incarca.php" title="restaurez">Incarcare date din fisier</a></li>
<li><a class="drop" href="./stergdate.php" title="restaurez">Sterge date din baza pe un criteriu</a></li>
<?php
}
?>
</ul>
<!–[if lte IE 6]></td></tr></table></a><![endif]–>
</li>
</ul>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</div>
</body>
<?php }
// <li><a class="drop" href="./cautaviz.php?actiune=sterge" title="sterge">Sterge un aviz</a></li>
?>
</html>
\www\energetic\incepaviz.php
<!DOCTYPE>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<title> Adaugare</title>
<link href="./main_css.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
session_start();
$xx=$_SESSION['dbbaza'];
include_once ("$xx");
$errors=array();
if ($_SESSION["tip_acces"] != "W" && $_SESSION["tip_acces"] != "ADM")
{ echo "Nu aveti acces la adaugari";
$mm=$_SESSION['menu']; echo '<a href="'.$mm.'"> Apasati.</a><br><br> ';
}
else {
if(isset($_REQUEST["seen_already"])) {
validate_nr();
if (count($errors) != 0) {
display_errori();
display_forma();
}
else {
processez_data();
}
}
else {
display_forma();
}
}
function validate_nr()
{ global $errors;
if (trim($_REQUEST["nr"])=="") {
$errors[]="<font color='red'> Numarul registratura lipsa </font>";
}
}
function display_errori()
{ global $errors;
foreach ($errors as $err) {
echo $err, "<br>";
} }
function processez_data()
{ //$cerereSQL = 'SELECT * FROM `utilizatori` WHERE utilizator="'.$_SESSION['user'].'"';
//$ceSQL = 'SELECT * FROM `intrari` WHERE `titlu` LIKE "%'.addentities($_POST['cauta']).'%"';
$dbtable=$_COOKIE['dbtabla'];
$queri = "SELECT * FROM `$dbtable` WHERE (`nr` = '".htmlentities(trim($_REQUEST['nr']))."'
AND `anul`= '".trim($_REQUEST['anii']['0'])."') ";
// $rezult=mysql_query($queri) or die("QUERY failed:".mysql_error());
// if(mysql_num_rows($rezult) == 0) {
setcookie("nr_init",trim($_REQUEST['nr'])); $_SESSION['nr_init']=trim($_REQUEST['nr']);
setcookie("anul",trim($_REQUEST['anii']['0'])); $_SESSION['anul']=trim($_REQUEST['anii']['0']);
$_SESSION['nteh']=trim($_REQUEST['nteh']);
unset($_SESSION['nsol']); unset($_SESSION['nmasura']); unset($_SESSION['ncond']);
unset($_SESSION['ndelim']);
unset($_REQUEST['data_cererii']); // resetare data_cererii
require_once('formaviz.php');
/* }
else {
echo '<a href="menuoriz.php">Numarul exista. Apasati pentru Revenire.</a><br><br> ';
} */
}
function display_forma()
{ $xx=getdate();
if (!isset($_REQUEST["nr"])) $nr=''; else {$nr=trim($_REQUEST["nr"]);
$nteh=''; }
/* if (!isset($_REQUEST["xanul"])) {$anul = $xx['year'] ; }
else { $anul=trim($_REQUEST["xanul"]); } */
echo "<form method='post' action='incepaviz.php'>";
echo " <table align=center><tr><td> Anul</td><td>Numar Registr. </td><td>Numar ATR de copiat</td><td>din anul</td></tr>";
// echo '<tr><td><input type="text" name="xanul" size=4 maxlength=4 value="'.$anul.'"></td>
$startYr = date("Y", time()); // get the year from $today
echo '<tr><td><select name="anii[]" >';
//echo "<select name=’dateYr’>\n";
for ($n=$startYr-1;$n<=$startYr+1;$n++) { echo " <option value=$n";
if ($startYr == $n ) { echo " selected"; }
echo "> $n\n"; }
echo '</select></td>';
echo ' <td><input type="text" name="nr" size=20 maxlength=20 value="'.$nr.'"></td>
<td><input type="text" name="nteh" size=7 maxlength=7 value="'.$nteh.'"></td>
<td><select name="aniiv[]" >';
for ($n=$startYr-2;$n<=$startYr;$n++) { echo " <option value=$n";
if ($startYr == $n ) { echo " selected"; }
echo "> $n\n"; }
echo '</select></td>';
echo '</tr></table>';
echo "<input type=submit value=OK>"; $mm=$_SESSION['menu'];
echo '<a href="'.$mm.'"> Renunt.</a><br><br> ';
echo "<input type=hidden name='seen_already' value='hidden_data'>";
echo "</form>";
}
mysql_close($con);
?>
</body></html>
\www\energetic\cautaviz.php
<!DOCTYPE>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<title> Cautare</title>
<link href="./main_css.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
session_start();
$xx=$_SESSION['dbbaza'];
include_once ("$xx");
$errors=array();
setcookie("id_ini","");
if (!isset($_SESSION['actiune'])) {
$_SESSION['actiune']= $_REQUEST['actiune']; }
if(isset($_REQUEST["seen_already"])) {
validate_nr();
if (count($errors) != 0) {
display_errors();
display_welcome();
} else { process_data(); }
}
else { display_welcome(); }
function veri_data($data) { // ********************************************************
$data=trim($data);
if ($data=='') {return true;}
else {
$lu=(integer)(substr($data,4,2)); $an=(integer)(substr($data,0,4));
if ( $an>1990) return true; else return false; }
}
function validate_nr() // *****************************************************
{ global $errors;
if (!isset($_REQUEST["anii"]["0"])) {
$errors[]="<font color='red'> Va rog selectati anul</font>";}
/*if(trim($_REQUEST["nr"])=="" && trim($_REQUEST["data_cererii"])=="") {
$errors[]="<font color='red'> Va rog scrieti Numarul de aviz si/sau Data cererii</font>";
} */
if (!veri_data($_REQUEST["data"])) {
$errors[]="<font color='red'> Data este incorecta</font>"; }
if (!veri_data($_REQUEST["data_cererii"])) {
$errors[]="<font color='red'> Data cererii este incorecta</font>"; }
}
function display_errors() // ****************************************************
{ global $errors;
foreach ($errors as $err) {
echo $err, "<br>";
}
}
function format($sir,$chr) {
$ret=substr($sir,0,$chr);
for ($i = strlen($ret); $i <= $chr; $i++) { $ret.="  ";}
return $ret; }
function format1($sir,$chr) {
$ret=substr($sir,0,$chr);
if (strlen($ret)<$chr) { $ret="<pre>".$ret;
$nrb=$chr + 5;
$ret= str_pad( $ret,$nrb," ")."</pre>";
// for ($i = strlen($ret); $i <= $chr; $i++) { $ret.=" "; }
// $ret.="</pre>";
}
return $ret; }
function process_data() { // procesare date ***********************************
$z_nr=trim($_REQUEST['nr']);
$anul=trim($_REQUEST["anii"]["0"]); $_SESSION['anul']=$anul;
$data=trim($_REQUEST['data']);
$nteh=trim($_REQUEST['nteh']);
$nrconv=trim($_REQUEST['nrconv']);
$zan=(integer)(substr($data,0,4));
$zlu=(integer)(substr($data,4,2));
$data_cererii=trim($_REQUEST['data_cererii']);
$zanc=(integer)(substr($data_cererii,0,4));
$zluc=(integer)(substr($data_cererii,4,2));
$nume_pers=trim($_REQUEST['nume_pers']);
$nume_firma=trim($_REQUEST['nume_firma']);
// $numeprop=trim($_REQUEST['numeprop']);
$locbiecti=trim($_REQUEST['locbiecti']);
$pt=trim($_REQUEST['pt']);
$cdee=trim($_REQUEST['cdee']);
/*
$azi=date("y-m-d");
if (isset($_REQUEST["operator"]["0"])) {
$op=$_REQUEST["operator"]["0"];
if ($op=="Si") {$op=" AND ";} else {$op=" OR ";} }
else { $op=" OR "; } // daca nu a selectat pun SAU
*/
$dbtablesabl=$_COOKIE['dbtabla']."sabloane";
$queris="SELECT * FROM `$dbtablesabl` WHERE (`cod` = 'cale' AND `solden` = 'sigla')";
$rezults=mysql_query($queris) or die("QUERY failed:".mysql_error());
$row=mysql_fetch_array($rezults); $_SESSION['caleimg']=$row["solsolutie"];
$queris="SELECT * FROM `$dbtablesabl` WHERE (`cod` = 'cale' AND `solden` = 'header')";
$rezults=mysql_query($queris) or die("QUERY failed:".mysql_error());
$row=mysql_fetch_array($rezults); $_SESSION['calef']=$row["solsolutie"];
$dbtable=$_COOKIE['dbtabla'];
if ($nteh!=0 ){ $queri = ' FROM '.$dbtable.' WHERE (`anul`='.$anul.' AND `nteh` ='.$nteh.' ';
$order='';}
else
{ /*
if (strlen($z_nr) == 0) {$z_nr='ko';}
if ($zanc!=0 || $z_nr!='ko') {
if ($zanc==0) { // numai nr
$queri = 'SELECT * FROM '.$dbtable.' WHERE (`anul`='.$anul.' AND `nr` LIKE "%'.$z_nr.'%"'; // ultima ) se pune mai jos
}
elseif ($z_nr=='ko') // numai data cererii
{ $queri = 'SELECT * FROM '.$dbtable.' WHERE (`anul`= '.$anul.' AND year(`data_cererii`) = '.$zanc.' ';
if ($zluc>0) $queri.= 'AND month(`data_cererii`) = '.$zluc.' ';
}
else // nr si data cererii
{ $queri = 'SELECT * FROM '.$dbtable.' WHERE (`anul`='.$anul.' AND (`nr` LIKE "%'.$z_nr.'%" '.$op.' year(`data_cererii`) = '.$zanc.' )';
if ($zluc>0) $queri.= 'AND month(`data_cererii`) = '.$zluc.' ';
} }
else { $queri='SELECT * FROM '.$dbtable.' WHERE (`anul`='.$anul.' ';}
if ($zan!=0)
{ $queri.='AND year(`data`) = '.$zan.' ' ;
if ($zlu!=0) $queri.= 'AND month(`data`) = '.$zlu.' ';
} */
$order='';
$queri = ' FROM '.$dbtable.' WHERE (`anul`='.$anul.' ';
if ($z_nr!='') {$queri.=' AND `nr` LIKE "%'.$z_nr.'%" ';
}
if ($zanc!=0) {$queri.=' AND year(`data_cererii`) = '.$zanc.' ' ;
if ($zluc!=0) $queri.= ' AND month(`data_cererii`) = '.$zluc.' ';
}
if ($zan!=0) {$queri.=' AND year(`data`) = '.$zan.' ' ;
if ($zlu!=0 )$queri.= ' AND month(`data`) = '.$zlu.' ';}
if ($nrconv != '') $queri.=' AND `nrconv` = '.$nrconv.' ';
if ($nume_pers != '') $queri.=' AND `nume_pers` LIKE "%'.$nume_pers.'%" ';
if ($nume_firma != '') $queri.=' AND `nume_firma` LIKE "%'.$nume_firma.'%" ';
if ($locbiecti != '') $queri.=' AND `locbiecti` LIKE "%'.$locbiecti.'%" ';
if ($pt != '') $queri.=' AND `pt` ='.$pt.' ';
if ($cdee != '') $queri.=' AND `cdee` LIKE "%'.$cdee.'%" ';
}
$querii = 'SELECT COUNT(*) '.$queri.')';
$queriy = 'SELECT `id`,`nr`, `nrconv`, `nteh`, `anul`, `data`, `data_cererii`, `nume_pers`, `nume_firma`, `locbiecti`, `pt`, `cdee` '.$queri;
$queriy.=")"; // incheie clauza WHERE cu )
if ($_REQUEST['sortnp']) { $order.=", `nume_pers` ";}
if ($_REQUEST['sortnf']) { $order.=", `nume_firma` ";}
if ($_REQUEST['sortcdee']) { $order.=", `cdee` ";}
if ($_REQUEST['sortlob']) { $order.=", `locbiecti` ";}
if ($_REQUEST['sortdc']) { $order.=", `data_cererii` ";}
if ($_REQUEST['sortd']) { $order.=", `data` ";}
if ($_REQUEST['sortpt']) { $order.=", `pt` ";}
if ($_REQUEST['sortnr']) { $order.=", `nr` ";}
if ($order=='') { $queriy.=" ORDER BY `nteh`";
$queriexc = 'SELECT * '.$queri.') ORDER BY `nteh` '; }
else { $queriy.= "ORDER BY ".substr($order,1,strlen($order));
$queriexc = 'SELECT * '.$queri.')ORDER BY '.substr($order,1,strlen($order)) ; }
// echo $querii;
// echo $querii."<br>"; echo $queriy;
$totale = mysql_result(mysql_query($querii),0);
// $queriexc = 'SELECT * '.$queri.')';
setcookie('querexcel',$queriexc);
setcookie('querpagin',$queriy);
setcookie('totale',$totale);
// echo $queri;
// $rezult=mysql_query($queri) or die("QUERY failed:".mysql_error());
if($totale == 0) {
echo '<a href="cautaviz.php">Nu aveti nimic in lista. Apasati pentru Revenire. </a>';
}
else { //–––––––––––––––––––-
if ($totale > 100) { setcookie('rezultate_maxime_in_jos',100);
echo '<a href=paginare.php> Aveti selectate '.$totale.'linii. Apasati pentru vizualizare</a>';
echo '<br> ';
echo ' Puneti restrictii mai mari de selectie pentru a micsora numarul de randuri selectate.';
echo '<br> ';
echo '<a href=cautaviz.php> Apasati aici pentru revenire.';
}
else {
global $rownteh ;
global $rowselect ;
$rezult=mysql_query($queriy) or die("QUERY failed:".mysql_error());
if ($totale == 1) {
$xx=$_SESSION['actiune']; $row=mysql_fetch_array($rezult);
// $rownteh[]=$row['id']; $_SESSION['rownteh']=$rownteh;
$_REQUEST['actione']=$xx;
$_REQUEST["rowselect"]["0"]= $row['id'];
include_once("distrib.php") ;
}
else {
// echo "<table><tr><input type=text value= '" ,$_SESSION['actiune'],"'</tr></table>";
switch ($_SESSION['actiune']) {
case 'modifica':
$yy="modificare" ;
break;
case 'lista1':
$yy="lista aviz racordare consumator casnic";
break;
case 'lista2':
$yy="lista aviz racordare consumator mic";
break;
case 'lista3':
$yy="lista contract una transa";
break;
case 'lista4':
$yy="lista contract mai multe transe";
break;
case 'lista5':
$yy="lista memoriu tehnic";
break;
case 'lista6':
$yy="lista aviz consumator mare";
break;
default:
$yy="actiune necunoscuta";
}
echo "<table><tr><td> Aveti in lista</td><td><input size=5 value='",$totale,"'></td><td>pozitii .<font color='red'> Selectati o singura pozitie pt. <font color='blue'>".$yy."</td></tr></table> ";
echo "<table><tr><td>Nr.ATR</td></td><td> Data cererii</td><td>Data aviz ";
echo " </td><td> Nr.contract </td><td> Nume pers </td><td> Nume firma </td><td> Loc obiectiv </td><td> PT</td><td> CDEE</td><td>Sel</td></tr>";
// echo "<table width 150% >";
$xx=$_SESSION['actiune'];
// $rownteh[]=$row['id'];
echo '<tr><form method="post" action="distrib.php?actione='.$xx.'"></tr> ';
// echo '<tr><select name="avize[]" MULTIPLE size=25 ><FONT SIZE=4 COLOR="blue"> ';
while($row=mysql_fetch_array($rezult)) {
// echo "<option>", $row['nteh']." | ".$row['nr']." | ".$row['data_cererii']." | ".$row['data']." |  ".$row['nume_pers']. " | ".$row['nume_firma']." | ".$row['locbiecti']." | ".$row['pt']." | ".$row['cdee'],"</option> ";
$rind=format($row['nteh'],5)." | " ;
$rind.=format($row['nr'],10)." | " ;
$rind.= $row['data_cererii']." | " ;
$rind.= $row['data']." | "; $rind.= $row['nrconv']." | ";
$rind.= format($row['nume_pers'],20)." | " ;
$rind.= format($row['nume_firma'],20)." | " ;
$rind.= format($row['locbiecti'],20)." | " ;
$rind.= format($row['pt'],5)." | " ;
$rind.= format($row['cdee'],20) ;
$rind= ' <option> '.$rind.' ';
// $rind= "<option>".$row['nteh']." | ".$row['nr']." | ".$row['data_cererii']." | ".$row['data']." |  ".$row['nume_pers']. " | ".$row['nume_firma']." | ".$row['locbiecti']." | ".$row['pt']." | ".$row['cdee']."</option> ";
//echo $rind ;
$rownteh[]=$row['id']; $rowid= trim($row['id']);
echo '<tr><td><input type="text" name="nteh" size=4 value="'.$row['nteh'].'"></td>
<td><input type="text" name="data_cererii" size=8 maxlength=10 value="'.$row['data_cererii'].'"></td>
<td><input type="text" name="data" size=8 maxlength=10 value="'.$row['data'].'"></td>
<td><input type="text" name="nrconv" size=8 maxlength=10 value="'.$row['nrconv'].'"></td>
<td><input type="text" name="nume_pers" size=20 maxlength=60 value="'.$row['nume_pers'].'"></td>
<td><input type="text" name="nume_firma" size=20 maxlength=70 value="'.$row['nume_firma'].'"></td>
<td><input type="text" name="locbiecti" size=20 maxlength=70 value="'.$row['locbiecti'].'"></td>
<td><input type="text" name="pt" size=5 maxlength=70 value="'.$row['pt'].'"></td>
<td><input type="text" name="cdee" size=10 maxlength=70 value="'.$row['cdee'].'"></td>';
// echo "<td><a href='afisaviz.php?art=".$row['id']."'>aici</a></td>"; // OK merge
echo '<td><input type="checkbox" name="rowselect[]" value=" '.$rowid.'"></td></tr>';
// echo '<td>'.$rowid.'</td>';
// echo '</tr>';
}
$_SESSION['rownteh']=$rownteh;
$mm=$_SESSION['menu'];
// echo '</select></tr></table> ';
echo '</table><table align=center>';
echo '<tr><td><input type="submit" name=afisare value="Selectati pozitie "></td> ';
echo '<td><input type="submit" name=excel value="Export in Excel / Vizualizare Toata lista "></td>';
echo '<td><a href="'.$mm.'"> Renuntare. </a></td></tr></form></table>';
}
} } }
function display_welcome() // **********************************************************
{
if(isset($_REQUEST["seen_already"])) {
$nr=$_REQUEST["nr"];
$nrconv=$_REQUEST["nrconv"];
$data=$_REQUEST["data"];
$nteh=$_REQUEST["nteh"];
$locbiecti=$_REQUEST["locbiecti"];
$data_cererii=$_REQUEST["data_cererii"];
$intocmit=$_REQUEST["intocmit"];
$nume_pers=$_REQUEST["nume_pers"];
$nume_firma=$_REQUEST["nume_firma"];
$pt=$_REQUEST["pt"];
$cdee=$_REQUEST["cdee"];
}
else { $nr=''; $data=''; $nteh=''; $locbiecti=''; $data_cererii='';
$intocmit=''; $nume_pers=''; $nume_firma=''; $pt=''; $cdee=''; $nrconv='' ;
/* $_REQUEST['sortnr']=''; $_REQUEST['sortdc']='';
$_REQUEST['sortd']=false; $_REQUEST['sortnp']=false;
$_REQUEST['sortnf']=false; $_REQUEST['sortlob']=false;
$_REQUEST['sortpt']=false; $_REQUEST['sortcdee']=false; */
}
switch ($_SESSION['actiune']) {
case 'modifica':
$yy="modificare" ;
break;
case 'lista1':
$yy="lista aviz racordare consumator casnic";
break;
case 'lista2':
$yy="lista aviz racordare consumator mic";
break;
case 'lista3':
$yy="lista contract una transa";
break;
case 'lista4':
$yy="lista contract mai multe transe";
break;
case 'lista5':
$yy="lista memoriu tehnic";
break;
case 'lista6':
$yy="lista aviz consumator mare";
break;
default:
$yy="actiune necunoscuta";
}
echo '<table align=center>';
echo "<form method='post' action='cautaviz.php'> ";
echo "<tr>In Word selectati View si Print Layout.</tr>";
echo '<tr>Puneti criterii de selectie pentru <font color="blue">'.$yy.'</tr>' ;
echo "<tr>Campurile de data sunt de forma AAAALL. Casutele mici sunt optiuni de sortare</tr>";
echo "<tr><td>Anul</td><td>Numar ATR</td><td> Numar inregistr.</td><td>Data Cerere</td><td>Data aviz</td><td>Nr. contract</td></tr> ";
$startYr = date("Y", time()); #get the year from $today
echo '<tr><td><select name="anii[]" >';
//echo "<select name=’dateYr’>\n";
for ($n=$startYr-20;$n<=$startYr+1;$n++) { echo " <option ";
if ($startYr == $n ) { echo " selected"; }
echo "> $n\n"; }
echo '</select></td>';
echo "<td><input type='text' name='nteh' size=8 maxlength=8 value='",$nteh ,"'></td> ";
echo "<td><input type='text' name='nr' size=10 maxlength=20 value='",$nr ,"'> ";
echo ' <input type="checkbox" name="sortnr" value="Sort"> ';
/* echo '<td><select name="operator[]" MULTIPLE row=1 columns=2>
<option> Si </option>
<option> Sau </option></select></td>'; */
echo "<td><input type='text' name='data_cererii' size=10 maxlength=6 value='",$data_cererii ,"'> ";
echo ' <input type="checkbox" name="sortdc" value="Sort"> ';
echo " <td><input type='text' name='data' size=10 maxlength=6 value='",$data ,"'> ";
echo ' <input type="checkbox" name="sortd" value="Sort"> '; echo "</td> " ;
echo " <td><input type='text' name='nrconv' size=10 maxlength=6 value='",$nrconv ,"'></tr> ";
echo ' </table><table align=center>';
echo "<tr><td> Nume pers.</td><td> Nume firma</td><td> Loc obiectiv</td><td>P.T.</td><td>CDEE</td></tr>";
echo " <tr><td><input type='text' name='nume_pers' size=15 maxlength=40 value='",$nume_pers ,"'> ";
echo ' <input type="checkbox" name="sortnp" value=false> ';
echo " <td><input type='text' name='nume_firma' size=15 maxlength=60 value='",$nume_firma ,"'> ";
echo ' <input type="checkbox" name="sortnf" value=false> ';
echo " <td><input type='text' name='locbiecti' size=15 maxlength=50 value='",$locbiecti ,"'> ";
echo ' <input type="checkbox" name="sortlob" value="Sort"> ';
echo " <td><input type='text' name='pt' size=10 maxlength=16 value='",$pt ,"'> ";
echo ' <input type="checkbox" name="sortpt" value="Sort"> ';
echo " <td><input type='text' name='cdee' size=10 maxlength=10 value='",$cdee ,"'> ";
echo ' <input type="checkbox" name="sortcdee" value="Sort"> '; echo "</td></tr>";
echo "</table><table align=center>";
echo "<tr><td><center><input type=submit value='Start Cautare' ></td>";
$mm=$_SESSION['menu'];
echo '<td><a href="'.$mm.'"> Renuntare. </a></td></tr>';
echo "<input type=hidden name='seen_already' value='hidden_data'>";
echo "</form></table>";
}
?>
</html>
\www\wnwegwtic\distrib.php
<?php
if (!isset($_REQUEST["excel"])) $_REQUEST["excel"]='';
if (!isset($_REQUEST["listare"])) $_REQUEST["listare"]='';
if ($_REQUEST["excel"]==true){ // transfera in excel toata lista selectata anterior (cautaviz)
include_once("exporta.php");
} else if ($_REQUEST["listare"]==true) {
if (trim($_REQUEST["nume_firma"])=='')
{ include_once("lista1.php");}
else { include_once("lista2.php"); }
}
else
{
switch($_REQUEST['actione']) {
case 'modifica':
include_once("afisaviz.php");
break;
case 'lista1':
include_once("lista1.php");
break;
case 'lista2':
include_once("lista2.php");
break;
case 'lista3':
include_once("lista3.php");
break;
case 'lista4':
include_once("lista4.php");
break;
case 'lista5':
include_once("lista5.php");
break;
case 'ssint':
include_once("exporta.php");
break;
case 'd62':
include_once("exporta.php");
// include_once("exportaatr.php");
break;
case 'lista6':
include_once("lista6.php");
break;
case 'lista7':
include_once("lista7.php");
break;
case 'adaugsablon':
include_once("adaugsablon.php");
break;
case 'afisablon':
include_once("afisablon.php");
break;
}
}
?>
\www\energetic\exportaatr.php
<?php
session_start();
$xx=$_SESSION['dbbaza'];
include_once ("$xx");
$db=$dbbaza;
$table=$dbtable;
$url_params['db'] = $db; // din TBL_common.php
$url_params['table'] = $table;
include_once "./libraries/table.class.php";
$asfile=true;
define('PMA_DBI_QUERY_STORE', 1); // Force STORE_RESULT method, ignored by classic MySQL.
define('PMA_DBI_QUERY_UNBUFFERED', 2); // Do not read whole query
define('PMA_DBI_GETVAR_SESSION', 1);
define('PMA_DBI_GETVAR_GLOBAL', 2);
$crlf = PMA_whichCrlf();
$what = 'xls'; $type="xls";
function decod_data($data) {
$data=substr($data,8,2).".".substr($data,5,2).".".substr($data,0,4);
return $data; }
function decod_datab($data) { // ***********************************************
$data=substr($data,8,2).".".substr($data,5,2).".".substr($data,0,4);
if (substr($data,0,2)=="00") {$data="";}
return $data; }
function decod_datac($data) { // ***********************************************
$zi=(integer)(substr($data,8,2)); $lu=(integer)(substr($data,5,2)); $an=(integer)(substr($data,0,4));
$datac=substr($data,8,2).".".substr($data,5,2).".".substr($data,0,4);
// if (is_numeric(substr($datac,0,2)) && is_numeric(substr($datac,3,2)) && is_numeric(substr($datac,6,4))){$data=$datac;}
if ( $zi > 0 && $lu > 0 && $an > 2000 ) {$data=$datac;}
return $data; }
function PMA_whichCrlf() { // am adaugat-o din common.lib.php trebuie mai jos
$the_crlf = "\n"; // if (PMA_USR_OS == 'Win') {
$the_crlf = "\r\n";
return $the_crlf;
}
function PMA_exportOutputHandler($line)
{ echo $line; return true;} // export. necesara in export/htmlexcel.php
function PMA_exportFooter() { // htmlexcel
if (!PMA_exportOutputHandler('</table></div></body></html>')) { return FALSE; }
return TRUE;
}
function PMA_exportHeader() { // face sa puna numele campurilor pe coloane
global $charset, $charset_of_file;
if (!PMA_exportOutputHandler('
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=' . (isset($charset_of_file) ? $charset_of_file : $charset) .'" />
<style id="Classeur1_16681_Styles"></style>
</head>
<body>
<div id="Classeur1_16681" align=center x:publishsource="Excel">
<table x:str border=0 cellpadding=0 cellspacing=0 width=100% style="border-collapse: collapse">'))
{ return FALSE; }
return TRUE;
}
function PMA_exportData($db, $table, $crlf, $error_url, $sql_query) { // htmlexcel
global $what;
// Gets the data from the database
$result = mysql_query($sql_query) or die("QUERY failed:".mysql_error());
$fields_cnt = mysql_num_fields($result) ; // echo $fields_cnt;
// 20 campuri
$campuri='nume_pers nume_firma obiect1 nr data_cererii nteh data dataexp uutilizare suma tr_ron locbiecti locsediu obiect1 s_cer_spor p_cer_spor s_cer_i p_cer_i s_cer p_cer '; //20 campuri
$schema_insert = '<tr>';
for ($i = 0; $i < 20; $i++) { $poz= $i * 15 ; $camp=trim(substr($campuri,$poz,15));
$schema_insert .= '<td class=xl2216681 nowrap><b>' . $camp . '</b></td>';
} // end for
$schema_insert .= '</tr>';
if (!PMA_exportOutputHandler($schema_insert)) { return FALSE; }
// Format the data
$fields_cnt = 20;
while ($row = mysql_fetch_array($result)) {
$schema_insert = '<tr>';
for ($j = 0; $j < $fields_cnt; $j++) { $poz = $j * 15;
$camp= trim(substr($campuri,$poz,15));
$value=$row[$camp]; // echo $camp."->".$value."<br>";
if ($camp == "data" || $camp == "data_cererii" )
{$value=decod_data($value);}
if ($camp == "dataact" || $camp == "dataexp" || $camp == "dataconv" )
{$value=decod_datab($value);}
if ($camp == "dataexpc" || $camp == "termenconv" )
{$value=decod_datac($value);}
$schema_insert .= '<td class=xl2216681 nowrap>' . htmlspecialchars($value) . '</td>';
} // end for campuri
$schema_insert .= '</tr>';
if (!PMA_exportOutputHandler($schema_insert)) {
return FALSE;
}
}
mysql_free_result($result);
return TRUE;
}
//*********************************************************** start
require_once ("./libraries/plugin_interface.lib.php"); // necesar aici
$export_type = 'table';
$export_list = PMA_getPlugins('./libraries/export/', array('export_type' => $export_type, 'single_table' => isset($single_table)));
$type="htmlexcel";
if (!isset($export_list[$type])) { die('Bad type!') ;}
?>
<fieldset id="fieldsetexport"><table><tr><td><div id="div_container_exportoptions">
<fieldset id="exportoptions"><legend><?php echo "Export"; ?></legend>
<?php echo PMA_pluginGetChoice('Export', 'what', $export_list, 'format'); ?>
</fieldset></div></td><td><div id="div_container_sub_exportoptions">
<?php echo PMA_pluginGetOptions('Export', $export_list); // importanta pt preluarea buton radio
?></div></td></tr></table>
<!– acest java script anuleaza afisarea tuturor optiunilor la toate tipurile de esport –>
<script type="text/javascript"> init_options(); </script>
</fieldset><fieldset><legend>
<input type="checkbox" name="asfile" value="sendit"
id="checkbox_dump_asfile" <?php echo ' '; //PMA_exportCheckboxCheck('asfile');
// aici este cu tipul de fisier excel si pune numele campului in primul rand
?> />
<label for="checkbox_dump_asfile"><?php echo $strSend; ?></label>
</legend><label for="filename_template"><?php echo $strFileNameTemplate; ?><sup>(1)</sup></label>:
<input type="text" name="filename_template" id="filename_template"
<?php echo ' value="'; $nume="marin"; echo $nume; echo '" />';
?>
</fieldset><!– Encoding setting form appended by Y.Kawada aici butonul de executare –>
<fieldset class="tblFooters"><input type="submit" value="<?php echo $strGo; ?>" id="buttonGo" /></fieldset>
</form> */ ?>
<?php
$filename_template="atrd62";
if ($asfile) {
$pma_uri_parts = parse_url($cfg['PmaAbsoluteUri']);
$pma_uri_parts = array("http", "localhost", "/avize/myadmin/");
$filename = str_replace('__TABLE__', $table, str_replace('__DB__', $db, str_replace('__SERVER__', $GLOBALS['cfg']['Server']['host'], strftime($filename_template))));
$filename="atr.xls";
$mime_type="application/vnd.ms-excel";
$content_encoding = '';
}
$err_url=''; // eu
$content_encoding = '';
if ($asfile) { // importanta pt. optiunile Open / Save
// Download
if (!empty($content_encoding)) {
header('Content-Encoding: ' . $content_encoding);
}
header('Content-Type: ' . $mime_type);
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Content-Disposition: attachment; filename="' . $filename . '"');
if (PMA_USR_BROWSER_AGENT == 'IE') {
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
} else {
header('Pragma: no-cache');
}
}
do {
if (!PMA_exportHeader()) { break; } // este in excel/htmlexcel.php Daca o elimin nu e bine
$do_relation = isset($GLOBALS[$what . '_relation']);
$do_comments = isset($GLOBALS[$what . '_comments']);
$do_mime = isset($GLOBALS[$what . '_mime']);
if ($do_relation || $do_comments || $do_mime) {
require_once './libraries/relation.lib.php';
$cfgRelation = PMA_getRelationsParam();
}
if ($do_mime) {
require_once './libraries/transformations.lib.php';
}
// Include dates in export?
$do_dates = isset($GLOBALS[$what . '_dates']);
$is_view = PMA_Table::isView($db, $table);
if (isset($GLOBALS[$what . '_structure'])) {
if (!PMA_exportStructure($db, $table, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, $is_view ? 'create_view' : 'create_table', $export_type)) {
break;
}
}
// if (isset($GLOBALS[$what . '_data'])) {
if (isset($_COOKIE['querexcel'])) {$local_query=$_COOKIE['querexcel'];}
else {$local_query = 'SELECT * FROM '.$dbtable; } // ** pusa de mine
if (!PMA_exportData($db, $table, $crlf, $err_url, $local_query)) { break; }
// }
if (!PMA_exportFooter()) { break; }
} while (false);
?>
9. BIBLIOGRAFIE
[1] Dorin Cârstoiu, “Baze de date relaționale”, Editura Printech, București, 1999;
[2]David Sawyer McFarland CSS: The Missing Manual, Second Edition; ISBN:978-0-596-80244-8; O'Reilly Media / Pogue Press; August 2009
[3] Andrew Curioso, Ronald Bradford, Patrick GalbraithExpert PHP and MySQL; ISBN: 978-0-470-56312-0; WROX WileyCDA; March 2010
[4] Matt DoyleBeginning PHP 5.3; ISBN: 978-0-470-41396-8; WROX WileyCDA; October 2009
[5] Timothy Boronczykwith Martin E. Psinas PHP and MySQL: Create – Modify – Reuse; ISBN: 978-0-470-19242-9; Wiley; May 2008
[6] Cristian Darie, Jaimie SirovichProfessional Search Engine Optimization with PHP: A Developer's Guide to SEO; ISBN: 978-0-470-10092-9; WROX WileyCDA; April 2007
[7] Rick F. van der Lans SQL for MySQL Developers: A Comprehensive Tutorial and Reference; ISBN: 978-0131497351; Addison-Wesley Professional; April 2007
[8] Julie C. Meloni: Invata singur Php, Mysql și Apache; ISBN: 973-653-657-2; Ed. Corint; 2005
[9] Manual online de PHP: http://php.net/manual/ro/index.php
[10] Manual online de HTML: http://www.w3.org/TR/html401/
[11] Manual Online Apache: http://httpd.apache.org/docs/2.4/
[12] Statisitici online oferite de Wikipedia:https://en.wikipedia.org/wiki/Web_server
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Aplicatie Web Pentru Activitatea de Emitere Avize Tehnice de Racordare la Reteaua Electrica de Distributie (ID: 149487)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
