Documente Academic
Documente Profesional
Documente Cultură
Introducere
1.1 Generaliti
Intranet-ul este o reea informatic privat a unei companii, similar ca
funcionalitate cu mediul Internet. Intranet-ul pune la dispoziia angajailor resursele
companiei, nepermind drepturi la informaiile confideniale utilizatorilor cu acces la
Internet.
Un intranet este construit din aceleai concepte i tehnologii utilizate pentru
Internet, cum ar fi un server-client i suita de protocoale de Internet TCP/IP. Oricare
din bine cunoscutele protocoale de Internet pot fi gsite ntr-un intranet, cum ar fi
HTTP (servicii web), SMTP (e-mail) i FTP (transfer de fiiere). Tehnologiile
Internetului sunt adesea utilizate pentru oferi interfee moderne la sistemele de
informaii vechi care gzduiesc date corporative.
Un intranet poate fi neles ca o analogie privat a Internetului sau ca o extensie
privat a Internetului limitat la o organizaie. Primele site-uri de intranet i primele
pagini de start au nceput s apar n organizaii n 1990-1991. Dei nu a fost oficial
notat, termenul intranet a devenit mai nti comun printre primii susintori, cum ar fi
universitile i corporaiile tehnologice n 1992.
n contrast cu Internetul exist extranetul. n timp ce intranet-urile sunt n
general limitate la angajai ai organizaiei, extranet-urile pot fi accesate de ctre clieni,
furnizori sau alte pri aprobate. Extranet-urile extind o reea privat pe Internet cu
dispoziii speciale pentru acces, autorizare i autentificare (protocolul AAA).
Intranet-urile pot oferi o poart de acces (gateway) la Internet prin intermediul
unei pori de acces de reea cu un firewall, protejnd intranetul de un posibil acces
exterior neautorizat. De multe ori gateway-ul implementeaz autentificarea
utilizatorului, criptarea mesajelor i, adesea, conectivitatea la o reea privat virtual
(VPN Virtual Private Network) pentru angajaii off-site, pentru a accesa informaiile
companiei, resursele de calcul i comunicaiile interne.
Capitolul 1. Introducere
Cuprinde trei pri care fac referire la limbajele de programare folosite pentru
realizarea acestui proiect.
Prima parte se refer la folosirea limbajului HTML n cadrul aplicaiilor
pentru intranet. Sunt descrise pri importante ale acestui limbaj.
Partea a doua arat utilitatea folosirii bazelor de date MySQL i exemple
de folosire a acestora.
Partea a treia cuprinde elementele specifice ale programrii n cadrul
limbajului PHP. Aceast parte demonstreaz posibilitile oferite de limbajul PHP
pentru realizarea aplicaiilor pentru aplicaii n intranet.
Cuprinde dou pri n care sunt prezentate scopul pentru care a fost conceput
aceast aplicaie, respectiv o descriere amnunit a modului de realizare i utilizare a
acesteia.
Bibliografie
Se observ c atributele sunt separate prin spaii, iar specificarea lor presupune
precizarea numelui atributului i a valorii acestuia sub forma : atribut=valoare
Unele atribute admit orice valoare concordant cu semnificaia atributului (de
exemplu, atributul SRC asociat etichetei <IMG> admite ca valoare orice ir de caractere
care reprezint adresa sau URL-ul unui fiier ce conine o imagine), alte atribute admit
doar valori predefinite (de exemplu, atributul ALIGN asocial etichetei <1MG> admite
doar trei valori predefinite - TOP, MIDDLE, BOTTOM).
2.1.2. Structura unui document HTML
Un document HTML este de fapt un fiier text pe care l putem vizualiza cu un
editor de texte. Documentul este delimitat de perechea de etichete <HTML> i
</HTML> i este constituit din:
a) Antetul documentului, delimitat de etichetele <HEAD> i
</HEAD>, care conine
informaii generate referitoare la document, cum ar fi titlul documentului, autorul
acestuia, etc.
a) Corpul documentului, care conine textul propriu-zis al documentului,
precum i
elementele specifice de descriere a formatului acestuia.
n antet este recomandat s precizai titlul documenrului, care va fi afiat n bara
titlu a ferestrei browser-ului. Pentru a preciza titlul documentului, care nu poate depi
64 de caractere, se utilizeaz n seciunea antet etichetele pereche <TITLE> i
</TlTLE>, ntre care se scrie titlul documentului[2].
De exemplu:
<HTML>
<HEAD>
<TITLE> Introducere n limbajul HTML </TITLE>
</HEAD>
Comentarii HTML
n cadrul unui document este bine s inserai comentarii, pe care browser-ul nu
le va afia, dar care pot fi utile celor care citesc sau editeaz documentul. Comentariile
HTML ncep cu <! i se termin cu ->. De exemplu,
<! Acesta e un comentariu. Browser-ul nu l "vede" ! ->
Comentariile pot fi inserate oriunde in document!
2.1.3. Formatarea textului
Formatarea textului care apare n corpul unui document HTML se poate face la
nivel de bloc (block-level) sau la nivel de caracter (text-level sau inline). Diferenele
principal dintre cele dou tipuri de formatare sunt[1]:
elementele de formatare la nivel de bloc pot conine alte elemente de
formatare (la nivel de bloc sau la nivel de caracter), in timp ce elementele de formatare
la nivel de caracter conin doar text sau alte elemente de formatare la nivel de caracter;
elementele de formatare la nivel de bloc ncep de obicei de la linie nou.
Observatii:
- blocurile <form> nu pot fi imbricate;
- intr-o pagina Web pot fi create oricate formulare.
Atribute esentiale ale elementului <form> :
atributul action precizeaza ce se va intampla cu datele formularului o
data ce acestea ajung la destinatie. De regula, valoarea atributului action este adresa
URL a unui script aflat pe un server WWW care primeste datele formularului,
efectueaza o prelucrare a lor si expediaza catre utilizator un raspuns.
Observatie:
Valoarea atributului action poate fi, de asemenea, o adresa valida de mail, caz in
care datele formularului sunt expediate prin posta electronica pe adresa specificata. In
acest caz nu are loc o prelucrare automata a datelor din formular, citirea si
interpretatrea corecta a datelor primite fiind responsabilitatea destinatarului.
Blocul button :
Un buton pentru lansarea in executie a unei actiuni poate fi introdus intr-
un formular prin elementul <input> avand atributul type configurat la valoarea
button.
Exista o a doua modalitate de a introduce intr-o pagina Web un buton de
apasat, si anume prin intermediul blocului <button> </button>.
Atributele posibile ale elementului button sunt:
- name acorda elementului un nume;
- value precizeaza textul care va fi afisat pe buton;
- type precizeaza actiunea ce se va executa la apasarea butonului daca
acesta este inclus intr-un formular. Valorile posibile pentru acest atribut sunt:
- button
- submit
- reset .
c:\mysql\bin\mysql.exe -p -u root
iar cnd ni se cere parola apsm ENTER.
Dac serverul nu este pornit vom primi mesajul de eroare Can't connect to
MySQL server on "localhost".
Serverul de MySQL, ca orice server care se respecta, ofera posibilitatea de a avea
mai multi posesori de date pe acelai sistem, fiecare cu drepturile lui. Astfel, serverul
unui ISP de exemplu va putea fi folosit de mai muli oameni, fiecare avnd mai multe
baze de date i neputnd s vad ce au ceilali utilizatori ai aceluiai server [3][6].
Utilizatorul implicit (i cu drepturi depline, de altfel) este root, iar parola iniiala
este goal. Vom lucra cu aceste date pentru nceput.
SHOW DATABASES;
Rezultatul primit de la server va arta ca n imaginea de mai sus.
Am ncheiat interogarea cu punct i virgul deoarece toate comenzile SQL (cu
excepia QUIT i USE) trebuie ncheiate astfel pentru a semnala serverului c am
terminal de scris propoziia i c poate trece la procesarea cererii. Exist cazuri n care o
interogare poate fi foarte lung i atunci ar trebui s o ,,rupem" n cteva bucai mai
mici, pe mai multe rnduri. MySQL ar da eroare dac ar observa ca propoziia este
neterminat aa c nu uitai s ncheiai interogrile cu punct i virgul.
S inspectm una din bazele de date de pe acest server. Pentru a face acest lucru,
spunem serverului cu ce baz de date dorim s interacionm n continuare: USE fih
Vom primi mesajul ,,Database changed" i baza de date 'fih' va rmne cea n care
ne vom face interogrile pn la deconectarea de la server sau dac decidem s folosim o
alt baz de date, cu aceeasi comand:
USE alta_baza_de_date
Setarea unei baze de date ca fiind cea curent nu ne mpiedic totui s accesm
tabele din alte baze de date n forma nume_baza_de _date.nume_tabel. Comanda USE
este pstrat pentru compatibilitate cu Sybase[6].
Tot comanda SHOW o vom folosi pentru a vedea ce tabele exist n baza de date
fih, n care ne aflm[3][6]:
SHOW TABLES;
O alt utilizare a lui SHOW este SHOW COLUMNS care afieaz informaii
despre coloanele unui tabel.
2.2.2 Comenzile CREATE i DROP
Vom creea o baz de date special pentru testare. Vom scrie n linia de comand:
CREATE DATABASE test;
Serverul ne afieaz ,,Query OK" deci baza de date a fost creat. Va trebui s mai
spunem serverului c aceasta este baza de date cu care urmeaz s interacionm n
continuare[3][6]:
USE test
Am putea s folosim interogarea SHOW TABLES i aici, ns ea nu ne-ar
arat mai mull dect stim deja: ca noua baza de date nu are inca nici un tabel, S facem,
deci, unul:
CREATE TABLE test (camp_test TEXT);
S lum cuvnt cu cuvnt propoziia: CREATE TABLE test(cmp_test TEXT)
nseamn ,,creeaz tabelul test cu un cmp numit cmp_text al crui tip este TEXT.
Pentru a afla ce este tipul de date i la ce folosete consultai oglinda ,,Tipuri de date".
S facem nc un tabel, cu trei coloane:
CREATE TABLE test2(camp1 TEXT, camp2 INT, camp3 TINYINT);
n imaginea anterioar putem vedea mai multe informaii despre fiecare cmp.
S le analizm:
- prima coloan, Field, este numele cmpului;
- a doua, Type, este tipul de date coninut de timp. TEXT nseamn c datele de
pe coloana respectiv vor fi texte, INT ca vor fi numere ntregi i TINYINT c n coloana
respectiv vor fi introduse doar numere ntre -128 i 127;
- n a treia dac este NULL sau nu, a patra, Key arat dac este index, n a cincea,
Default Value, este specificat valoarea implicit i ultima coloan arat ce alte
proprieti mai are cmpul.
S lum ca exemplu un magazin de cri. Fiecare carte are un autor, un titlu i o
scurt descriere. Toate sunt de tip text, deci aa vor fi i tipurile de cmpuri aferente lor:
CREATE TABLE carti(autor TEXT, titlu TEXT, descriere TEXT);
n cazul n care nu a fost semnalat nici o eroare, tabelul nostru a fost creat. S
verificm, de dragul exerciiului, acest lucru, cu comenzile SHOW TABLES i SHOW
COLUMNS.
Pentru a terge un tabel, o baz de date, un index sau o coloan dntr-un tabel
folosim comanda DROP astfel[3][6]:
DROP TABLE tabel_test;
DROP DATABASE librarie;
Dei MySQL are suport pentru diacritice i setul de caractere 8859-2, este
preferabil s nu folositi diacritice n numele bazelor de date, tabelelor sau cmpurilor.
De asemenea, nu putei folosi ca nume de tabel sau de cmp cuvintele rezervate (nume
de funcii, tipuri de caractere din MySQL precum create, drop sau column).
Ar mai trebui s tii c putei folosi nume de tabele care conin spaii dar n
practic trebuie s ncadrai numele ntre back-ticks `` (semnul back-tick l gsii pe
tasta aflat imediat sub Escape):
CREATE TABLE 'tabel al carui nume are spatii`('cmp 1', TEXT);
SHOW COLUMNS FROM 'tabel al carui nume are spatii';
SELECT 'cmp 1' FROM 'tabel al carui nume are spatii';
2.2.3 Comanda INSERT
Haidei s introducem cteva date n tabelul cri. Comanda pe care o vom folosi
este INSERT i sintaxa este[3][6]:
INSERT INTO tabel(cmpl, cmp2, cmp3) values(valoarel, valoare2,
valoare3)
n romnete aceast comand s-ar traduce ,,introdu n cmpul1 valoarea1, n
cmpul2 valoarea2 i n cmpul3 valoarea3", iar n format tabelar ar arata n felul
urmtor:
Cmpul1 cmpul2 cmpul3
valoareal valoarea2 valoarea3
INSERT INTO carti (autor, titlu, descriere) VALUES('William Shakespeare',
'Romeo si Julieta', 'Cea mai frumoasa poveste de dragoste a tuturor timpurilor');
Am pus ghilimele n jurul fiecrei valori ce urmeaz a fi introduse pentru a stabili
c acela este un text unitar, un string de introdus n cmpul respectiv. Imaginaiv cam
cum ar interpreta serverul comanda noastr dac am scrie numele autorului n forma
Shakespeare, William. Atunci textul interogrii ar fi: INSERT INTO carti(autor, titlu)
VALUES(Shakespeare, William, Hamlet) i serverul MySQL ne-ar returna urmatoarea
eroare: "Column count doesn't match value count at row 1" deoarece se ateapt ca
pentru dou coloane s aib de introdus tot dou valori separate prin virgul, nu trei.
Dac am fi specificat c vrem s introducem valori n toate cele trei coloane am fi primit
alt mesaj de eroare deoarece MySQL nu ar fi recunoscut textul 'Shakespeare' ca fiind
string i s-ar fi oprit din execuie.
Dac dorim, putem s omitem una din coloane ca n exemplul urmtor unde nu
adaugm nimic n cmpul descriere:
INSERT INTO carti(autor, titlu) VALUES('William Shakespeare', 'Hamlet');
Sintaxa lui INSERT poate fi simplificat dac lum n calcul toate cmpurile
tabelului deoarece le putem omite, menionnd doar valorile ce urmeaz a fi adugate ca
n exemplul urmtor:
DELETE
DELETE se foloseste pentru tergerea nregistrri lor dintr-un tabel (ne
reamintim c pentru tergerea tabelelor i a bazelor de date se foloete DROP). Sintaxa
lui DELETE este[3][6]:
DELETE FROM table WHERE condiii;.
Aa cum putem afia doar nregistrrile ce corespund condiiilor noastre, la fel
putem condiiona i tergerea lor n funcie de criteriile specificate.
SELECT * FROM carti WHERE autor='Mihai Eminescu';
afieaz toate crile de Mihai Eminescu, n timp ce:
DELETE FROM carti WHERE autor='Mihai Eminescu' ;
va terge din tabel toate nregistrrile pentru care cmpul autor este Mihai Emi-
nescu, lsndu-le pe celelalte neatinse.
Observm dou lucruri: asteriscul a disprut, el fiind inutil. MySQL va terge un
rnd ntreg la solicitarea dumneavoastr, el nu va putea s tearg (logic) o coloan sau
mai multe aparinnd unei nregistrri.
n al doilea rnd, cu aceast excepie sintaxa pentru tergere seamn ca dou
picturi de ap cu sintaxa pentru selecie. La fel ca n SELECT putem folosi mai multe
condiii i am putea terge toate nregistrrile unde autorul este Mihai Eminescu i titlul
crii conine cuvntul poezii".
DELETE FROM carti ' WHERE autor='Mihai Eminescu' AND titlu LIKE '$poezii
%';
DELETE FROM carti este echivalentul de tergere al lui SELECT * FROM carti,
adic va terge toate nregistrrile din tabel. Nu l vom pune n aplicare dar este bine de
tiut.
UPDATE
Atunci cnd vrem s modificm coninutul unei nregistrri nu este nevoie s o
tergem i s o adaugm n varianta nou, putem folosi UPDATE care are urmtoarea
sintax[3][6]:
UPDATE tabel SET coloanal='noua valoare a coloanei 1', coloana2= ' noua
valoare a coloanei 2' WHERE condiii
UPDATE modific coninutul unuia sau mai multor cmpuri n funcie de
condiiilc specificate. S modificm, de exemplu, n coloana autor toate nregistrrile
Mihai Eminescu i s le nlocuim cu M. Eminescu:
UPDATE carti SET autor='M. Eminescu' WHERE autor='Mihai Eminescu;
Executai SELECT * FROM carti pentru a observa modificarea.
Condiiile pot fi extinse la fet ca n sintaxa SELEC'T. n urmtoarea interogare
vom modifica cmpul de scriere al tuturor nregistrrilor al cror titlu conine
cuvntul ,,poezii" i cmpul descriere este gol:
UPDATE carti SET descriere='Carte de poezii' WHERE titlu like %poezii%' and
descriere='';
Astfel, toate crile fr descriere al cror titlu coninea cuvntul poezii au acum
descrierea Carte de poezii.
ALTER TABLE
ALTER TABLE ne permite s schimbm structura unui tabel existent. Putem
adauga sau terge coloane i indeci. putem redenumi coloane sau chiar tabelul n sine i
putem schimba tipul de date coninut de o coloan. S adaugm o coloan, data, n care
s stocm data adaugrii crii n baza de date. Cmpul data al tabelului carti ne va fi
util atunci cnd vom afia vizitatorilor noutile din magazin pe prima pagin. El nu
corespunde datei la care a fost editat cartea ci datei n care aceasta a ajuns pe rafturile
virtuale ale magazinului nostru. Cele mai noi 10 titluri din librrie le-am afla astfel
foarte uor folosind urmtoarea interogare [3][6]:
SELECT titlu FROM carti ORDER BY data DESC LIMIT 0,10;
S adugm noua coloan, la sfritul tabelului:
ALTER TABLE carti ADD dat TEXT;
Am scris greit numele coloanei, s o redenumim din ,,dat" n ,,data":
ALTER TABLE carti CHANGE dat data TEXT;
Ne aducem aminte c exist tipul DATE i c o dat cum e 12-12-2003 ne-ar
putea fi mai util dac s-ar afla ntr-o coloan de tip DATE dect ntr-una de tip TEXT
aa c vom modifica tipul de date al noii coloane:
ALTER TABLE carti CHANGE data data DATE;
Ca s adugm o coloan altundeva dect la sfrit, ntre descriere i dat spre
exemplu, folosim ALTER TABLE n felul urmtor:
ALTER TABLE carti ADD pret MEDIUMINT UNSIGNED AFTER descriere;
INDECI
Cel mai folosit tip de index este id-ul. Id-ul este un numr unic de identificare
pentru un element distinct (un rnd) al unui tabel. Avnd structura tabelului carti n
forma actual, pentru a alege ,,Romeo i Julieta" de William Shakespeare, interogarea ar
arata n felul urmtor[6]:
SELECT * FROM carti WHERE autor='William Shakespeare' AND titlu='Romeo
i Julieta';
Ce ne facem ns dac implementm interogarea n aceast form n aplicaie i
ntr-o bun zi primim spre vnzare aceeai carte dar cu un pre diferit? Ar trebui s
rescriem interogarea pentru a ne adapta situaiei i atunci cutarca unei cri ar fi fcut
cu interogarea:
SELECT * FROM carti WHERE autor='William Shakespeare' AND titlu='William
Shakespeare' AND pret =100000;
Daca am folosi un cmp care s conin un numr unic de identificare pentru
fiecare carte cutarea ar fi mult simplificat:
SELECT * FROM carti WHERE id_carte=15;
S modificm tabelul cri astfel nct fiecare carte s aiba un id unic:
SET INSERT_ID=#;
ALTER TABLE carti ADD id_carte INT UNSIGNED NOT NULL
AUTO_INCREMENT FIRST, ADD INDEX (id_carte);
SET INSERT_ID=# este folosit ca pentru fiecare carte deja adugat s fie pus un
id unic. De asemenea. pentru toate crile ce le vei aduga de acum nainte va exista un
id unic, incrementat automat.
S ne folosim de index pentru a executa operaii n tabel:
INSERT INTO carti(titlu) values ('un text oarecare');
SELECT id__carte, titlu FROM carti;
Valoarea id_carte a acestei ultime nregistrari este 9. O folosim pentru a efectua
modificri:
UPDATE carti SET titlu='un text modificat' WHERE id_carte=9; SELECT
id_carte, titlu FROM carti WHERE id_carte=9
2.2.6 Normalizarea
Normalizarea nseamn structurarea tabelelor bazei de date n aa fel nct datele
din acestea s ocupe ct mai puin spaiu pe hard disc, fiind astfel deosebit de util.
Chiar dac spaiul nu poate prea o problem, trebuie s luai n con$iderare
posibilitatea de a fi nevoit s v extindei ntr-o zi peste numrul de megabii oferit de
contractul ncheiat cu ISP-ul, din lipsa de spaiu [3][6].
MySQL stocheaz fizic datele unui tabel ntr-un fiier pe hard disc i cu ct
tabelul este mai mare, cu att mrimea acestui fiier crete, Versiunea 3.22 a MySQL are
o limit de 4GB pentru mrimea unui tabel. n versiunile superioare aceast limit este
extins pn la 8 milioane TB pentru tipul de tabel My-ISAM. Cu toate acestea,
sistemele de operare pot avea propriile limitri ale mrimii fiierelor. Mrimea implicit
a tabelelor MySQL este de aproximativ 408, Putei verifica mrimea maxim pentru un
tabel cu ajutorul comenzilor SHOW TABLE STATUS sau myisamchk -dv table_name.
Pe platforma Windows va trebui s folosii sistemul de fiiere NTFS dac dorii s
aveti tabele mai mari de 4GB.
2.3.1 Introducere
Ca limbaj de programare, PHP este foarte uor de nvat dac elementele
programrii sunt explicate pe nelesul tuturor. PHP este limbajul ideal pentru
construirea de pagini web dinamice [1]. Este uor de nvat, open-source, poate fi rulat
pe mai multe platforme i se poate conecta la 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 dinamism cu ajutorul PHP. S lum prima pagin a site-ului www.chip.ro
de exemplu. Mare parte din struclura sa este compus din cod HTML static (meniurile,
tabelele, aranjamentul n pagin). Din loc n loc codul HTML este intercalat cu cod PHP
care extrage din baza de date cele mai noi tiri. n momentul n care apelai pagina,
acest cod este parsat (analizat linie cu linie i executat) pe server i este afiat o pagina
HTML fr s stii c pentru crearea ei s-a fcut o conexiune la baza de date, s-au extras
informaiile de acolo i au fost ordonate pentru afiare.
Istoric.
Limbajul PHP s-a ,,nscut" n 1994 din nevoia lui Rasmus Lerdorf de a afla cte
persoane i vizualizeaz CV-ul online. El a denumit setul de scripturi create PHP,
acronimul pentru Personal Home Page. Pe parcursul urmtorilor trei ani limbajul a
evoluat dar adevaratul succes a nceput s l cunoasc de cnd Zeev Suraski i Andi
Gutmans au rescris motorul PHP de la cap la coad, motor care poart din versiunea 4 a
PHP numele Zend, o combinaie de litere din prenumele creatorilor si: Zeev i Andi.
Fiind open-source, PHP beneficiaz de suport activ din partea comunitii online,
acesta fiind i motivul creterii explozive a numrului site-urilor bazate pe PHP. ntre
2000 i 2002 numrul lor a crescut cu peste 13130% n timp ce numrul site-urilor
bazate pe tehnologia ASP doar cu 278%, Java Server Pages cu 1594% i ColdFusion cu
429%.
Pe lng manipularea coninutului paginilor de web, PHP poate trimite head-ere
HTTP pentru autentificare, seta cookie-uri sau redireciona utilizatorii. Mai mult, cu
ajutorul bibliotecilor externe de funcii poate parsa fiiere XML, crea i manipula
imagini, animaii Shockwave Flash, PDF-uri sau se poate conecta la un server de mail
iar acestea sunt doar cteva din funciile pe care le poate ndeplini [4][5].
2.3.2 Elemente de baz ale limbajului PHP
Pentru a testa exemplele de fiiere PHP, putei folosi orice editor de text. Notepad
este bun pentru nceput dar putei alege s folositi unul din editoarele PHP existente pe
piat. Salvai fiierele cu extensia .php, n document root (c:\Program Files\Apache
Group\Apache\htdocs\) i le vei accesa n browser la adresa http:/
/localhost/numefiier.php.
Programarea de orice fel, nu doar PHP, are dou elemenle de baz: datele i
instruciunile. Pentru a lucra cu datele trebuie s nelegem ce sunt variabilele i tipurile
iar pentru a lucra cu instruciuni trebuie s aflm ce sunt structurile de control i
funciile[4][5].
Variabile
O variabil este o zon de memorie cruia i se da un nume pentru a putea fi
recunoscut ulterior i pentru a ne putea referi mai trziu la ea[4][5].
Iat un exemplu:
<html>
<head>
<title> Exemplu</title>
</head>
<body>
<?php
echo Acesta este un script PHP;
?>
</body>
</html>
Sa disecm codul:
- toate instruciunile PHP se termin cu punct i virgul. Omiterea semnului
,,punct i virgul" este cea mai frecvent greeal pe care o fac programatorii nceptori.
- codul PHP ncepe ntotdeauna cu <? i se termin cu ?>. El poate fi imbricat cu
cod HTML dup cum putei vedea n exemplul alturat. Putei chiar crea pagini HTML
fr pic de cod PHP n ele i s le dai extensia php. Atta vreme ct parser-ul PHP nu
,,vede" tagurile <?...?>, el va trimite pagina HTML neschimbat ctre server.
- putem pune diacritice n cadrul unui string ns pentru ca browserul s le
afieze corect va trebui s specificm n <head> setul de caractcre folosit, la fel ca ntr-
un document HTML.
- valoarea unei variabile poate fi schimbat dup necesiti (aa cum am
schimbat valoarea lui $x) sau ea va fi schimbat automat n funcie de celelalte variabile
de care depinde (aa cum valoarea lui $rezultat s-a schimbat n funcie de valoarea lui
$x).
- pentru a afia rezultatul folosim print, altfel valorile variabilelor ar fi fost
schimbate dar nu ar fi fost afiate pe ecran. Pentru mai multe detali privind folosirea lui
print v recomand s consultai oglinda alaturat.
- linia de text care ncepe cu // nu este afiat, la fel ca textul demarcat de /*... */
i nu apar nici mcar dac dm View Source n browser pentru fiierul algebra.php
accesat. Acestea sunt comentarii care nu sunt procesate de ctre server ca fiind cod
executabil i nici nu sunt trimise mai departe ctre browser. n aplicaiile mai mari de
cteva linii este util s comentm codul pentru a ne orienta mai bine sau a explica
aciunile ntreprinse. Diferena ntre cele dou notaii este c // este folosit pentru a
comenta o singur linie de tex n timp ce /*...*/ poate fi folosit pentru a delimita un
comentariu ce se extinde pe mai multe linii. Marcatorii de comentariu se pot folosi i
atunci cnd dorim ca o bucat de cod s nu ruleze. Putei s testai acest lucru
comentnd una din liniile care conin instruciunea print i ruland din nou pagina.
Numele variabilelor trebuie s conin doar litere (a-z, A-Z i caracterele ASCII
de la 127 la 255), cifre i liniue de subliniere (underscores) i pot ncepe doar cu litere
sau liniue de subliniere.
Afiarea datelor
Cu ajutorul lui print putem afia un string, o variabil, un string ce conine
variabile sau rezultatul unei funcii. Textul ce urmeaz a fi afiat trebuie inclus ntre
ghilimele simple sau duble, rezultatul fiind uor diferit. Folosind ghilimelele duble orice
variabil din cadrul stringului este parsat. Putem afia variabilele i dac folosim
ghilimele simple, "rupnd" stringul i interclasndu-l cu variabile, n forma urmtoare.
folosind operatorul "." de concatenare a stringurilor (irurilor) [4][5]:
Print rezultatul inmultirii lui $x cu 1 este $rezultat.'<br>";
Pentru a afia caracterele speciale folosite de PHP (ghilimelele duble ",
ghilimelele simple '.backslash-ul \, semnul $) trebuie s le precedei cu semnul \ astfel:
print "Semnul dolar \$, back-slash \\";
Ghilimelele trebuie precedate de semnul \ doar dac sunt de acelai tip cu cele
care ncadreaz string-ul. n plus, ntr-un string putei folosi celelalte ghilimele normal.
Print "Ghilimelele duble \ ntr-un string ncadrat tot de ghilimele duble trebuie
precedate cu semnul \\. Ghilimelele simple ca acestea' nu au nevoie s fie precedate
deoarece se afl ntr-un string ncadrat de ghilimele duble"; Alternativ:
Print 'Ghilimelele simple trebuie \'precedate\ ntr-un string ncadrat de
ghilimele simple n timp ce "ghilimelele duble" nu,
Dac dorii s afiati doar valoarea unei variabile, putei s nu o ncadrai ntre
ghilimele.
<?
$o_variabila = 1;
print $o_variabila;
$alta_variabila = "Un text oarecave";
print $alta_variabila;
?>
$x = 1;
$y = 7;
Este $x egal cu $y? Nu este. Valoarea lui $x este 1 n timp ce valoarea lui $y este
7. Folosind operatorul = de atribuire i putem acorda lui $x valoarea lui Sy:
$x = 1;
$y = 7;
$x = $y;
Abia acum $x este 7 i este egal cu $y care are i el valoarea 7. Nu v lsai nelai
de asemnarea cu semnul = din matematic nici mcar atunci cnd facei operaii
complexe. Dac scriem $rezultat = $x + $y nu nseamn c $rezultat este egal cu suma
celor dou, ci c i-am atribuit (acordat) valoarea sumei celor dou.
Operatorul de egalitate este == i se foloseste cel mai des n propoziii
condiionale, pentru a testa egalitatea. Opusul su, !=, este operatorul de inegalilate i se
folosete n acelai scop.
Operatorul de egalitate se folosete pentru a compara egalitatea a dou valori.
Ali operatori folosii pentru compararea valorilor variabilelor sunt:
> mai mare
>= mai mare sau egal
< mai mic
<= mai mic sau egal
Operatorii logici v vor veni la ndemn n execuia scriptului atunci cnd avei
nevoie s lucrai cu valori de adevr. Vom face un exerciiu de imaginaie pentru a
explica funcia i utilitatea operatorilor logici. S presupunem c la intrarea n seciunea
de administrare avem un formular care cere numele i parola de acces n seciune.
Scriptul PHP ar putea verifica aceste informaii pentru a autoriza accesul n seciune
folosind operatorii logici astfel:
- operatorul ! (NOT)
if ( !parola_e_buna) ... parola nu este bun, accesul este interzis
if(!parola_nu_e_bun) ... parola e bun, accesul este permis
Operatorul ! returneaz TRUE dac valoarea iniial de adevr e FALSE i FALSE
dac valoarea iniial este TRUE.
- operatorul || (OR)
if (numele_este_valid | | parola este bun) ... verific dac numele sau parola
sunt valide i dac oricare din ele este, returnaz valoarea de adevar TRUE. n acest
exemplu de pseudocod dac numele ar fi valid dar parola nu, i-am acorda utilizatorului
acces mai departe ceea ce nu e de dorit. Trebuie s fim siguri c i numele i parola sunt
valide.
Operatorul || returneaz TRUE dac oricare din valorile verificate e TRUE.
Returneaz FALSE doar dac amndou sunt FALSE.
- operatorul && (AND)
if (numele_este_valid && parola este bun) ... dac att numele ct i parola
sunt valide putem acorda utilizatorului acces n seciunea de administrare.
Operatorul && returneaz TRUE doar dac ambele valori verificate sunt TRUE.
El returneaz FALSE dac oricare din ele este FALSE (sau dac amndou sunt FALSE).
2.3.6 Structuri de control
Structurile de control sunt instruciunile care aduc flexibilitatea n programare i
uureaz munca programatorului.
Am vzut cum putem defini o variabil $x i cum putem obine ca rezultat o alt
variabil $total = $x+1 . Putem, cu ajutorul structurilor de control s manipulm
variabilele i rezultatele cu minim de cod. Vom vedea cum, cu ajutorul lui while i for
putem folosi aceeai bucat de cod pentru mai multe variabile care s trebuiasc s
rescriem codul pentru fiecare valoare a variabilei[4][5].
While
Structura de control while este folosit pentru a rula acelai cod pentru mai multe
valori ale unei variabile oarecare $x, fr s trebuiasc s rescriem codul pentru $x = 1 ,
$x = 2 i aa mai departe pentru fiecare valoare a variabilei.
S presupunem c ar trebui ca pentru toate numerele de la 0 la 99 ar trebui s
calculm variabila $rezultat i s afim textul ,,Rezultatul nmulirii lui $x cu 5 este
$rezultat". Dac ar fi s scriem codul de nmulire i afiare pentru fiecare valoare a lui
$x de la 0 la 99 ne-ar apuca dimineaa. Pentru aceasta vom folosi while, cel mai simplu
tip de loop i vom scrie o singur bucat de cod care va prelua automat toate valorile lui
$x de la 0 la 99 i pentru fiecare va nmuli cu 5 i va afia rezultatul automat.
<?
$x = 0;
while ($x < 100)
{
$rezultat = $x*5;
print " Rezultatul nmulirii lui $x cu 5 este $rezultat<br>";
$X++;
}
print "sfrit! ";
?>
For
for este echivalentul lui while i funcioneaz n mare msur la fel, cu cteva
mici diferene. S rescriem cu ajutorul lui for codul din fiierul incrementare.php pentru
a obine aceleai rezultate:
<?
for ($x = 0; $x < 100; $x++)
{
$rezultat = $x * 5;
print " Rezultatul nmulirii lui $X cu 5 este $rezultat <br>";
$x++;
}
print "sfrit!
?>
Structura for este preferat de programatori deoarece ntre cele dou paranteze
ce o preced sunt coninute toate instruciunile i condiiile necesare rulrii loop-ului.
If
Dac dorim s rulm o bucat de cod doar cnd este ndeplinit o condiie
anume, folosim if. Iat cum, n urmtorul cod afim un text doar dac numrul de
caractere dintr-un string este mai mare decit 5.
<?
$text = "Ana are mere";
$nr_caractere = strlen($text) ;
if ($nr_caractere > 5)
{
print "Textul \"$text\" are mai mult de 5 caractere";
}
?>
Am folosit n acest exemplu funcia strlen care calculeaz numrul de caractere
ntr-un string. Pentru $text = "Ana are mere", valoarea variabilei $nr_caractere =
strlen($text) va fi 12 (spaiile conteaz). Pentru $text = "mere", $nr_caractere va fi 4.
If... else
Se folosete atunci cnd dorim s afim un text, dac o condiie este ndeplinit
i alt text dac aceeai condiie nu este ndeplinit.
<?
$text = "mere";
$nr_caractere = strlen ($text) ;
if ($nr_caractere > 5)
{
print "Textul are mai mult de 5 caractere";
}
else
{
print "Textul are mai puin de 5 caractere";
}
?>
Pentru stringul ,,mere" rezultatul afiat pe ecran va fi ,,Textul are mai puin de 5
caractere" i pentru stringul ,,Ana are mere" rezultatul va fi ,,Textul are mai mult de 5
caractere".
Switch
Switch este alternativa pentru blocurile condiionale if ... else if ... else. Este
preferabil n cazul n care codul dintre acolade este mai mare i ne-am putea pierde n
propoziii condiionale i paranteze.
<?
$text = "Ana are mere";
$nr_caractere = strlen($text);
switch ($nr_catactere)
{
case 4:
print Textul are 4 caractere";
break;
case 5:
print "Textul are 5 caractere",
break;
case 12 :
print "Textul are 12 caractere";
break ;
default;
print "Textul nu are nici 4 nici 5 nici 12 caractere";
break;
}
?>
Cazul special default de la sfrit este folosit pentru situaia n care dorim s
executm cod i dac nici una din condiiile anterioare nu este ndeplinit (fiind astfel
similar lui else din structura if... else if... else). El poate fi omis i astfel s executm cod
doar dac una din condiii este ndeplinit. Instruciunea break; trebuie folosit la
ncheierea fiecrui caz deoarece altfel codul din urmtorul caz va fi executat.
2.3.7 Funcii
Dei programarea PHP nu este matematic, modul n care trateaz funciile este
similar. Spre exemplu, la algebr, funcia f(x)=0+1 executa o operaie cu x i ddea un
rezultat n funcie de valoarea lui x. Acelai lucru l face i o funcie PHP [4][5].
<?
// funciile trebuie definite nainte de a le apela
function recalculare ($x)
{
$total = $x+ 1;
print $total;
}
$x = 1;
recalculare ($x);
// va afia pe ecran 2
?>
d_p_f - de tip date, adic dat calendaristic. Acest cmp conine data
punerii n funciune a mijlocului fix la care se refer nregistrarea.
d_ex - tip date, adic dat calendaristic. Acest cmp conine data
expirrii perioadei normale de funcionare a mijlocului fix la care se refer
nregistrarea
locatie - de tip text. Acest cmp conine date despre localizarea (de
exemplu cldirea, etajul, sala, etc.) mijlocului fix la care se refer nregistrarea.
prop_cas - de tip set, care poate lua valorile Da, Nu sau Casat.
Acest cmp conine nformaii referitoare la starea casrii mijlocului fix la care se
refer nregistrarea.
Formatarea grafic a paginii este foarte simpl i se face prin cteva linii de cod
inline , nefiind necesar un fisier .css. n esen este un tabel n celulele cruia sunt
afiate datele generate de diverse scripturi .php ala aplicaiei.
<table style="width:1024px;" cellpadding="0" cellspacing="0" align="center">
<tr>
<td id="header" colspan="2" style="background-color:#FFA500;">
<h1 style="margin:0;padding:0;" align="center">Inventarul mijloacelor
fixe</h1>
</td>
</tr>
<tr>
<td id="meniu" style="background-color:#FFD700;width:100px;vertical-
align:top;">
include('frm_afisare_mf_cont.php');
</td>
</tr>
<tr>
<td id="footer" colspan="2" style="background-color:#FFA500;text-
align:center;">
Copyright Marius Irinei</td>
</tr>
</table>
</body>
</html>
$nume = trim(structurare_date_mysql($_POST['nume']));
$parola = trim(structurare_date_mysql($_POST['parola']));
$parola_criptata = sha1($parola);
} else {
// nu s-a gasit perechea nume - parola in baza de
date.
$mesaj = "Combinaia nume / parol, este incorect.";
}
} else {
if ((count($erori) == 1)&&(!logged_in())) {
$mesaj = "Este o eroare n formular.";
} else {
if(!logged_in())
$mesaj = "Sunt " . count($erori) . " erori n
formular.";
}
}
<table>
<tr>
<td>Nume:</td>
<td><input type="text" name="nume"
maxlength="30" value="<?php echo htmlentities($nume); ?>"/></td>
</tr>
<tr>
<td>Parola:</td>
<td><input type="password" name="parola"
maxlength="30" value="<?php echo htmlentities($parola); ?>"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit"
name="trimite" value="Autentificare"/></td>
</tr>
</table>
</form>
<?php
if ($_SESSION['drepturi']==1)
{
echo"
<b>Meniu</b><br>
<ul>
<li><a href='index.php?optiune=1'>Mijloace Fixe
n gestiune</a></li>
<li><a href='index.php?optiune=2'>Situaia
casrilor</a></li>
<li><a href='logout.php'>Ieire</a></li>
</ul>";
}
?>
Fig. 3.4.2.3. Meniul afiat pentru un utilizator cu drepturi de administrator.
<?php
require_once("include/session.php");
require_once("include/db_connection.php");
$marca=$_SESSION['marca'];
Datele referitoare la mijloacele fixe aflate n gestiunea utilizatorului sunt afiate
ntr-un table generat de script pe baza datelor extrase din baza de date MySQL.
$tabel_html = '';
$col_1='Nr. INV.';
$col_2='Denumire';
$col_3='Val. Intrare';
$col_4='Data PF ';
$col_5='Data Exp.';
$col_6='Locaie';
$col_7='Prop. casare';
$query = "SELECT nr_inv, denumire, val_int, d_p_f, d_ex, locatie, prop_cas ";
$query .= "FROM mij_fix ";
$query .= "WHERE (prop_cas='Nu' OR prop_cas='Da') AND marca = '{$marca}' ";
$query .= "ORDER BY nr_inv ASC";
$result_set = mysql_query($query);
if(!$result_set) die ('Unable to run query:'.mysql_error());
// Daca sunt returnate randuri de tabel
if(mysql_num_rows($result_set) > 0) {
// Se creaza codul pt. inceputul tabelului HTML
$tabel_html = '<table align = "center" border="1">';
$tabel_html .= '<tr><td>' .$col_1. '</td><td>' .$col_2. '</td><td>' .
$col_3. '</td><td>' .$col_4. '</td><td>' .$col_5. '</td><td>' .$col_6.
'</td><td>' .$col_7. '</td></tr>';
// Se scrie in bucla WHILE codul HTML pt. adaugarea DOAR a randurilor ce
vor fi in tabel
while($rand = mysql_fetch_array($result_set)) {
$tabel_html .= '<tr><td>' .$rand['nr_inv']. '</td><td>' .
$rand['denumire']. '</td><td>' .$rand['val_int']. '</td><td>' .date('d-m-
Y',strtotime($rand['d_p_f'])). '</td><td>' .date('d-m-
Y',strtotime($rand['d_ex'])). '</td><td>' .$rand['locatie']. '</td><td>' .
$rand['prop_cas']. '</td></tr>';
}
Aceast seciune de cod afieaz un formular prin care utilizatorul poate propune
pentru casare un mijloc fix, selectndu-l dintr-o list derulant. Aceast list derulant
conine numerele de inventar ale mijloacelor fixe aflate n gestiunea utilizatorului i
extrase din baza de date pe baza mrcii utilizatorului i n funcie de valoarea cmpului
prop_cas care specific dac mijlocul fix a fost casat sau nu. Mijloacele fixe deja casate
nu mai apar n aceast list.
<table id="propunecasare">
<tr>
<td id="formularpropcas">
<h2>Propunere pentru casare</h2>
<?php
require_once("include/session.php");
require_once("include/db_connection.php");
$marca=$_SESSION['marca'];
$tabel_html = '';
$col_1='Nr. INV.';
$col_2='Denumire';
$col_3='Val. Intrare';
$col_4='Data PF ';
$col_5='Data Exp.';
$col_6='Locaie';
$col_7='Prop. casare';
$query = "SELECT nr_inv, denumire, val_int, d_p_f, d_ex, locatie, prop_cas ";
$query .= "FROM mij_fix ";
$query .= "WHERE (prop_cas='Da' OR prop_cas='Casat') AND marca = '{$marca}'
";
$query .= "ORDER BY nr_inv ASC";
$result_set = mysql_query($query);
if(!$result_set) die ('Unable to run query:'.mysql_error());
// Daca sunt returnate randuri de tabel
if(mysql_num_rows($result_set) > 0) {
// Se creaza codul pt. inceputul tabelului HTML
$tabel_html = '<table align = "center" border="1">';
$tabel_html .= '<tr><td>' .$col_1. '</td><td>' .$col_2. '</td><td>' .
$col_3. '</td><td>' .$col_4. '</td><td>' .$col_5. '</td><td>' .$col_6.
'</td><td>' .$col_7. '</td></tr>';
// Se scrie in bucla WHILE codul HTML pt. adaugarea DOAR a randurilor ce
vor fi in tabel
while($rand = mysql_fetch_array($result_set)) {
$tabel_html .= '<tr><td>' .$rand['nr_inv']. '</td><td>' .
$rand['denumire']. '</td><td>' .$rand['val_int']. '</td><td>' .date('d-m-
Y',strtotime($rand['d_p_f'])). '</td><td>' .date('d-m-
Y',strtotime($rand['d_ex'])). '</td><td>' .$rand['locatie']. '</td><td>' .
$rand['prop_cas']. '</td></tr>';
}
}else{
echo 'Nu exist mijloace fixe casate sau propuse la casare.';
}
Mrcile gestionarilor sunt extrase din baza de date i sunt afiate ntr-o list
derulant din care pot fi selectate. De asemenea tipurile de mijloace fixe se selecteaz
dintr-o list derulant. Rezultatul cutrii n funcie de criteriul de cutare selectat sunt
afiate direct sub form de tabel n fiiere .pdf care se vor deschide n ferestre separate
ale browserului.
<table>
<tr>
<td>Marca</td>
<td><select name="marca">
<?php
$query2 = "SELECT marca FROM utilizatori ORDER BY marca ASC";
$rezultat = mysql_query($query2);
while ($lista_marci=mysql_fetch_array($rezultat)) {
$marca=$lista_marci["marca"];
echo "<option>".$marca."</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="trimite1"
value="Afisare" onclick="this.form.target='_blank';return true;"/></td>
</tr>
</table>
</form>
<table>
<tr>
<td>Tip</td>
<td><select name="tip">
<option value="Calculator">Calculator</option>
<option value="Imprimant">Imprimant</option>
<option value="Laptop">Laptop</option>
<option value="Periferice">Periferice</option>
<option value="Reelistic">Reelistic</option>
<option value="Tablet">Tablet</option>
<option value="Videoproiector">Videoproiector</option>
</select>
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="trimite2"
value="Afisare" onclick="this.form.target='_blank';return true;"/></td>
</tr>
</table>
</form>
<table>
<tr>
<td>Nr. inventar:</td>
<td><input type="text" name="nr_inv" maxlength="11" value="<?php
echo htmlentities($nr_inv); ?>"/></td>
</tr>
<tr>
<td>Tip</td>
<td><select name="tip">
<option value="Calculator">Calculator</option>
<option value="Imprimant">Imprimant</option>
<option value="Laptop">Laptop</option>
<option value="Periferice">Periferice</option>
<option value="Reelistic">Reelistic</option>
<option value="Tablet">Tablet</option>
<option value="Videoproiector">Videoproiector</option>
</select>
</td>
</tr>
<tr>
<td>Denumire:</td>
<td><input type="text" name="denumire" size="100" maxlength="255"
value="<?php echo htmlentities($denumire); ?>"/></td>
</tr>
<tr>
<td>Marca</td>
<td><select name="marca">
<?php
$query2 = "SELECT marca FROM utilizatori ORDER BY marca ASC";
$rezultat = mysql_query($query2);
while ($lista_marci=mysql_fetch_array($rezultat)) {
$marca=$lista_marci["marca"];
echo "<option>".$marca."</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td>Valoare de intrare</td>
<td><input type="text" name="val_int" maxlength="11" value="<?php
echo htmlentities($val_int);?>"/></td>
</tr>
<tr>
<td>Data punerii n funciune</td>
<td><input type="text" name="d_p_f" maxlength="10" value="<?php
echo htmlentities($d_p_f);?>"/></td>
</tr>
<tr>
<td>Data expirrii</td>
<td><input type="text" name="d_ex" maxlength="10" value="<?php
echo htmlentities($d_ex);?>"/></td>
</tr>
<tr>
<td>Locaie</td>
<td><input type="text" name="locatie" size="100" maxlength="255"
value="<?php echo htmlentities($locatie);?>"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="trimite"
value="Introducere"/></td>
</tr>
</table>
</form>
Se extrag datele din baza de date i dac exist date de afiat, se genereaz tabelul
HTML.
$query = "SELECT nr_inv, denumire, val_int, d_p_f, d_ex, marca, prop_cas ";
$query .= "FROM mij_fix ";
$query .= "WHERE prop_cas='Da' ";
$query .= "ORDER BY nr_inv ASC";
$result_set = mysql_query($query);
if(!$result_set) die ('Unable to run query:'.mysql_error());
// Daca sunt returnate randuri de tabel
if(mysql_num_rows($result_set) > 0) {
// Se creaza codul pt. inceputul tabelului HTML
$tabel_html = '<table align = "center" border="1">';
$tabel_html .= '<tr><td>' .$col_1. '</td><td>' .$col_2. '</td><td>' .
$col_3. '</td><td>' .$col_4. '</td><td>' .$col_5. '</td><td>' .$col_6.
'</td><td>' .$col_7. '</td></tr>';
// Se scrie in bucla WHILE codul HTML pt. adaugarea DOAR a randurilor ce
vor fi in tabel
while($rand = mysql_fetch_array($result_set)) {
$tabel_html .= '<tr><td>' .$rand['nr_inv']. '</td><td>' .
$rand['denumire']. '</td><td>' .$rand['val_int']. '</td><td>' .date('d-m-
Y',strtotime($rand['d_p_f'])). '</td><td>' .date('d-m-
Y',strtotime($rand['d_ex'])). '</td><td>' .$rand['marca']. '</td><td>' .
$rand['prop_cas']. '</td></tr>';
}
<td id="conf_cas">
<h2>Confirmare casare</h2>
$tabel_html = '';
$col_1='Nr. INV.';
$col_2='Denumire';
$col_3='Val. Intrare';
$col_4='Data PF ';
$col_5='Data Exp.';
$col_6='Marca';
$col_7='Prop. casare';
$query = "SELECT nr_inv, denumire, val_int, d_p_f, d_ex, marca, prop_cas ";
$query .= "FROM mij_fix ";
$query .= "WHERE prop_cas='Casat' ";
$query .= "ORDER BY nr_inv ASC";
$result_set = mysql_query($query);
if(!$result_set) die ('Unable to run query:'.mysql_error());
// Daca sunt returnate randuri de tabel
if(mysql_num_rows($result_set) > 0) {
// Se creaza codul pt. inceputul tabelului HTML
$tabel_html = '<table align = "center" border="1">';
$tabel_html .= '<tr><td>' .$col_1. '</td><td>' .$col_2. '</td><td>' .
$col_3. '</td><td>' .$col_4. '</td><td>' .$col_5. '</td><td>' .$col_6.
'</td><td>' .$col_7. '</td></tr>';
// Se scrie in bucla WHILE codul HTML pt. adaugarea DOAR a randurilor ce
vor fi in tabel
while($rand = mysql_fetch_array($result_set)) {
$tabel_html .= '<tr><td>' .$rand['nr_inv']. '</td><td>' .
$rand['denumire']. '</td><td>' .$rand['val_int']. '</td><td>' .date('d-m-
Y',strtotime($rand['d_p_f'])). '</td><td>' .date('d-m-
Y',strtotime($rand['d_ex'])). '</td><td>' .$rand['marca']. '</td><td>' .
$rand['prop_cas']. '</td></tr>';
}
}else{
echo 'Nu exist mijloace fixe casate.';
}
?>
<table id="conf_casare">
<tr>
<td id="conf_cas">
<h2>tergere mijloace fixe casate</h2>
<td id="formularadaugare">
<h2>Creaz utilizator nou</h2>
<td id="formularschimbare">
<h2>Schimbare parol</h2>
session_start();
$_SESSION = array();
if(isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
se distruge sesiunea
session_destroy();
redirecteaza_la("index.php?logout=1");
?>
// Procesarea formularului
if (isset($_POST['trimite'])) // Dac formularul a fost trimis.
{
$nr_inv = trim(structurare_date_mysql($_POST['nr_inv']));
?>
</td>
</tr>
<tr>
<td id="meniu" style="background-color:#FFD700;width:100px;vertical-
align:top;">
<ul>
<li><a href="index.php?optiune=4">napoi</a></li>
</ul>
</td>
se includ scripturile necesare pentru tratarea datelor primite de la formular
<?php
require_once("include/db_connection.php");
require_once("include/functions.php");
include_once("include/functions_form.php");
if ( empty($erori) ) {
?>
</td>
</tr>
$nr_inv = trim(structurare_date_mysql($_POST['nr_inv']));
?>
$marca = trim(structurare_date_mysql($_POST['marca']));
$marca_int = intval($marca);
$nume = trim(structurare_date_mysql($_POST['nume']));
$parola = trim(structurare_date_mysql($_POST['parola']));
$parola_criptata = sha1($parola);
$drepturi=intval($_POST['drepturi']);
<?php
require_once("include/db_connection.php");
require_once("include/functions.php");
include_once("include/functions_form.php");
// Procesarea formularului
if (isset($_POST['trimite'])) // Dac formularul a fost trimis.
{
$erori = array();
$nume = trim(structurare_date_mysql($_POST['nume']));
$parola = trim(structurare_date_mysql($_POST['parola']));
$parola_criptata = sha1($parola);
if ( empty($erori) ) {
}else{
if (count($erori) == 1) {
$mesaj = "A fost detectat o eroare n formular.";
} else {
$mesaj = "Au fost detectate " . count($erori) . " erori n
formular.";
}
}
echo $mesaj;
}
?>
Aceste scripturi de generare ale fiierelor .pdf sunt n mare parte identice,
majoritatea liniilor de cod din care sunt compuse fiind funcii predefinite ale clasei PHP
tcpdf. n afar de acestea, fiecare script de generare a fiierelor .pdf mai conine o serie
de linii de cod prin care se extrag datele necesare din baza de date i se genereaz tabelul
HTML n care acestea sunt afiate. Aceste poriuni de cod sunt n general identice cu
cele din scripturile care afieaz datele respective n browser.
De exemplu scriptul afisarepdf.php care genereaz fiierul .pdf care conine
tabelul cu mijloacele fixe aflate n gestiunea unui utilizator cu drepturi de gestionar care
este afiat de scriptul af_mij_fix.php, conine o copie a acestui script integrat n
seciunea special destinat acestui lucru.
Difer totui scripturile afisarepdf_cont.php i afisarepdf_cont_tip.php
deoarece sunt activate dintr-o pagin care afieaz tabelele cu date direct n fiiere .pdf,
fr a mai fi afiate i n pagina respectiv. Mai jos se pot vedea poriunile de cod care
genereaz tabelele din cele dou scripturi.
3.4.17.1. Scriptul afisarepdf_cont.php
***
se includ scripturile necesare pentru tratarea datelor primite de la formular
require_once("include/functions.php");
include_once("include/functions_form.php");
se extrag datele din baza de date i dac exist date de afiat, se genereaz
tabelul HTML
$query = "SELECT nr_inv, denumire, val_int, d_p_f, d_ex, locatie, prop_cas ";
$query .= "FROM mij_fix ";
$query .= "WHERE marca = '{$marca}' ";
$result_set = mysql_query($query);
if(!$result_set) die ('Unable to run query:'.mysql_error());
// Daca sunt returnate randuri de tabel
if(mysql_num_rows($result_set) > 0) {
// Se creaza codul pt. inceputul tabelului HTML
$tabel_html = '<table align = "center" border="1">';
$tabel_html .= '<tr><td>' .$col_1. '</td><td>' .$col_2. '</td><td>' .
$col_3. '</td><td>' .$col_4. '</td><td>' .$col_5. '</td><td>' .$col_6.
'</td><td>' .$col_7. '</td></tr>';
// Se scrie in bucla WHILE codul HTML pt. adaugarea DOAR a randurilor ce
vor fi in tabel
while($rand = mysql_fetch_array($result_set)) {
$tabel_html .= '<tr><td>' .$rand['nr_inv']. '</td><td>' .
$rand['denumire']. '</td><td>' .$rand['val_int']. '</td><td>' .date('d-m-
Y',strtotime($rand['d_p_f'])). '</td><td>' .date('d-m-
Y',strtotime($rand['d_ex'])). '</td><td>' .$rand['locatie']. '</td><td>' .
$rand['prop_cas']. '</td></tr>';
}
***
3.4.17.2. Scriptul afisarepdf_cont_tip.php
***
se includ scripturile necesare pentru tratarea datelor primite de la formular
require_once("include/functions.php");
include_once("include/functions_form.php");
se extrag datele din baza de date i dac exist date de afiat, se genereaz
tabelul HTML
$query = "SELECT nr_inv, denumire, val_int, d_p_f, d_ex, marca, prop_cas ";
$query .= "FROM mij_fix ";
$query .= "WHERE tip = '{$tip}' ";
$query .= "ORDER BY nr_inv ASC";
$result_set = mysql_query($query);
if(!$result_set) die ('Unable to run query:'.mysql_error());
// Daca sunt returnate randuri de tabel
if(mysql_num_rows($result_set) > 0) {
// Se creaza codul pt. inceputul tabelului HTML
$tabel_html = '<table align = "center" border="1">';
$tabel_html .= '<tr><td>' .$col_1. '</td><td>' .$col_2. '</td><td>' .
$col_3. '</td><td>' .$col_4. '</td><td>' .$col_5. '</td><td>' .$col_6.
'</td><td>' .$col_7. '</td></tr>';
// Se scrie in bucla WHILE codul HTML pt. adaugarea DOAR a randurilor ce
vor fi in tabel
while($rand = mysql_fetch_array($result_set)) {
$tabel_html .= '<tr><td>' .$rand['nr_inv']. '</td><td>' .
$rand['denumire']. '</td><td>' .$rand['val_int']. '</td><td>' .date('d-m-
Y',strtotime($rand['d_p_f'])). '</td><td>' .date('d-m-
Y',strtotime($rand['d_ex'])). '</td><td>' .$rand['marca']. '</td><td>' .
$rand['prop_cas']. '</td></tr>';
}
***
Bibliografie