Matematica si Informatica Aplicate In Inginerie [632266]
Universitatea POLITEHNICA din Bucuresti
Facultatea de Stiinte Aplicate
Matematica si Informatica Aplicate In Inginerie
Aprobat Decan:
Prof. Univ. Dr. Vasile Iftode
Utilizarea bazelor de date si a programarii
procedurale, orientate pe obiecte si pe
evenimente in dezvoltarea unui site dedicat
comercializarii online de produse si servicii
Coordonator proiect:
Lect. Dr. Tiberiu Vasilache
Absolvent: [anonimizat], Iulie 2013
2
Cuprins
1. Limbajul PHP …………………………….. …………………………………………… …………….. 4
1.1. Despre PHP …………………………….. …………………………………………… ………………………………. 4
1.2. Sintaxa de baza ………………………… …………………………………………… ……………………………… 5
1.3. Variabile si constante ………………….. …………………………………………… ……………………………. 6
1.4. Operatori ……………………………… …………………………………………… …………………………………. 8
1.5. Structuri de control ……………………. …………………………………………… …………………………… 11
1.6. Operatii cu vectori……………………… …………………………………………… …………………………… 15
1.7. Data si timp …………………………… …………………………………………… ………………………………. 16
1.8. Functii uzuale …………………………. …………………………………………… ……………………………… 19
1.9. Variabile superglobale ………………….. …………………………………………… ………………………… 22
1.10. Fisiere ………………………………. …………………………………………… …………………………………. 24
2. Baze de date MySQL………………………… …………………………………………… ……… 27
2.1. Despre MySQL …………………………… …………………………………………… …………………………. 27
2.2. Structura unei baze de date relationale …… …………………………………………… …………………. 27
2.3. Proiectarea unei baze de date ……………. …………………………………………… ……………………… 29
2.4. Crearea unei baze de date si a unui tabel …. …………………………………………… ………………… 30
2.5. Stergerea si modificarea unui tabel ………. …………………………………………… …………………… 31
2.6. Interogarea unei baze de date ……………. …………………………………………… ……………………… 32
2.7. Modificarea datelor dintr3o baza de date ….. …………………………………………… ……………….. 34
2.8. Sortarea si gruparea…………………….. …………………………………………… ………………………….. 35
2.9. Expresii si functii …………………….. …………………………………………… …………………………….. 37
2.10. Uniri ………………………………… …………………………………………… …………………………………. 39
2.11. Conectarea la serverul MySQL ……………. …………………………………………… …………………. 40
2.12. Incheierea conexiunii la serverul MySQL ….. …………………………………………… ……………. 42
2.13. Detectarea si eliminarea de erori si avertism ente ………………………………………. …………… 42
3. jQuery si Ajax …………………………… …………………………………………… …………….. 44
3.1. Despre jQuery ………………………….. …………………………………………… ……………………………. 44
3.2. Despre AJAX ……………………………. …………………………………………… …………………………… 45
4. Aplicatia WEB ……………………………. …………………………………………… …………… 46
4.1. Depre aplicatie ………………………… …………………………………………… …………………………….. 46
3
4.2. Structura bazei de date …………………. …………………………………………… …………………………. 47
4.3. Conectare la baza de date ……………….. …………………………………………… ……………………….. 56
4.4. Structura fisierelor ……………………. …………………………………………… ……………………………. 56
4.5. Fisierul .htaccess ……………………… …………………………………………… …………………………….. 57
4.6. Popularea meniului principal …………….. …………………………………………… …………………….. 58
4.7. Validarea formularelor (clasa Validate )………………………………………….. ………………………. 64
4.8. Abonarea la Newsletter ………………….. …………………………………………… ……………………….. 76
5. Concluzii ……………………………….. …………………………………………… ………………… 78
Bibliografie ……………………………….. …………………………………………… ………………… 80
4
1. Limbajul PHP
1.1. Despre PHP
PHP, ce inseamna "PHP: Hypertext Preprocessor" este un limbaj de scripting de uz general, cu
cod3sursa deschis (Open Source), utilizat pe scara larga, si care este potrivit in special pentru
dezvoltarea aplicatiilor Web si poate fi integrat i n HTML. Sintaxa sa provine din C, Java si Perl
si este usor de invatat. Scopul principal al limbaj ului este acela de a permite programatorilor web
sa creeze rapid pagini web generate dinamic, insa c u PHP se pot realiza mult mai multe.
PHP este axat in principal pe scripting de partea s erver3ului, deci se poate realiza cu el orice
poate realiza un alt program CGI, cum ar fi colecta rea datelor din forme, generarea continutului
dinamic al paginilor sau trimiterea si primirea coo kies.
Sunt trei domenii principale, unde scripturile PHP sunt utilizate.
• Scripting de partea serverului. Acesta este cel mai traditional si de baza domeniu al PHP.
Aveti nevoie de trei lucruri pentru ca aceasta sa f unctioneze. Analizatorul PHP (in calitate
de CGI, sau modul pentru server), un server web si un navigator web.
• Scripting in linia de comanda. Un script PHP poate sa ruleze fara un server si navigator
web. E nevoie doar de analizatorul PHP pentru a3l u tiliza in acest mod. Acest mod de
utilizare este ideal pentru script3uri executate in mod regulat cu cron (pe *nix sau Linux)
sau cu Task Scheduler (pe Windows). Aceste script3u ri pot fi utilizate de asemenea pentru
lucrari simple de procesare a textelor.
• Scrierea aplicatiilor de birou. PHP probabil ca nu este cel mai potrivit limbaj pentru a crea
o aplicatie de birou cu o interfata grafica a utili zatorului, dar daca se cunoaste PHP foarte
bine si se doreste utilizarea unor facilitati avans ate ale PHP in aplicatii de partea
clientului, se pot utiliza PHP3GTK pentru a scrie a semenea aplicatii. De asemenea exista
posibilitatea de a scrie in acest mod aplicatii ce vor rula pe mai multe platforme. PHP3
GTK este o extensie a PHP, care nu este disponibila in distributivul de baza. PHP poate fi
utilizat pe toate sistemele de operare majore, incl usiv Linux, multe variante Unix (inclusiv
HP3UX, Solaris si OpenBSD), Microsoft Windows, Mac OS X, RISC OS si probabil
altele. PHP de asemenea sustine majoritatea server3 elor web existente in prezent. Acestea
includ Apache, IIS, si multe altele. De asemenea se includ si serverele ce pot utiliza
binarul PHP FastCGI, cum ar fi lighttpd si nginx. P HP functioneaza ca modul sau ca
procesor CGI.
Deci cu PHP exista libertatea alegerii sistemului d e operare si a serverului web. Ba chiar mai
mult, e posibil sa utilizati programarea procedural a sau programarea orientata pe obiecte (POO),
sau o combinatie a acestora.
PHP nu limiteaza doar la afisarea HTML. Posibilitat ile permit afisarea de imagini, fisiere PDF si
chiar filme Flash. Se poate afisa de asemenea cu us urinta orice text, cum ar fi XHTML sau alt
fisier XML. PHP poate genera automat aceste fisiere si le poate salva in sistemul de fisiere, in loc
sa le afiseze, formand astfel un sistem de cache al continutului dinamic de partea server3ului.
5
Una dintre cele mai puternice si semnificative faci litati ale PHP este sustinerea unui larg domeniu
de baze de date. Scrierea unei pagini web ce accese aza o baza de date este incredibl de simpla
utilizand una din extensiile de lucru cu baze de da te (de ex. pentru MySQL), sau utilizand un
nivel de abstractizare precum PDO, sau conectarea l a orice baza de date ce sustine standardul
"Open Database Connection" cu ajutorul extensiei OD BC. Alte baze de date pot utiliza cURL sau
socket3uri, cum ar fi CouchDB.
PHP poseda facilitati de procesare a textului foart e utile, care includ expresii regulare compatibile
cu Perl (PCRE) si multe extensii si instrumente pen tru accesarea si interpretarea documentelor
XML. PHP standardizeaza toate extensiile XML pe baz a solida a bibliotecii libxml2 si extinde
setul de facilitati adaugand sustinerea SimpleXML, XMLReader si XMLWriter.
1.2. Sintaxa de baza
Cand PHP parcurge un fisier, de fapt "citeste" text ul pana cand intalneste una din etichetele
speciale care3i spun sa inceapa sa interpreteze tex tul ca pe cod PHP. Se executata codul pana
cand este intalnita eticheta de inchidere. Apoi se "citeste" din nou textul mai departe. Acesta este
motivul pentru care se poate adauga cod PHP in inte riorul HTML3ului.
Important:
• in cazul functiilor nu se face diferenta intre util izarea literelor mari sau mici
• pentru variabile se face diferenta intre utilizarea literelor mari sau mici
• inchiderea unui rand se face obligatoriu cu caracte rul ;
• ghilimelele se folosesc pereche "…" sau '…', fo losirea lor "…' sau '…" constituie o eroare.
Codul PHP este delimitat de unul din urmatoarele se turi de etichete de deschidere si inchidere:
• <?php ?> etichete recomandate
• <script language="php"?> </script>
• <? ?> folosirea lor necesita anumite setari pe serv er
• <% %> etichete tip ASP, folosirea lor necesita anu mite setari pe server.
Codul PHP este format din instructiuni 3 comenzi da te catre interpretor, in urma carora se executa
ceva. Asa cum s3a mai spus, PHP este folosit in pri ncipal pentru a genera cod HTML, asa ca de
cele mai multe ori instructiunile folosite sunt cel e de afisare. In aplicatii mai complexe se pot insa
folosi si instructiuni de conectare la bazele de da te, de citire/scriere/manipulare fisiere, intructiu ni
de trimitere email3uri si altele. Instructiunile se pot grupa in blocuri delimitate de acolade { }.
Aceste blocuri, numite si "instructiuni complexe" s e comporta ca si cum ar fi o singura
instructiune.
Toate instructiunile (in afara de blocuri) trebuie sa fie terminate cu punct si virgula ( ; ). Lipsa
acestuia genereaza o eroare.
De obicei, continutul rezultat in urma executiei es te un text (de obicei in format HTML). Pentru a
obtine acest text, secventele de cod trebuie sa con tina instructiuni explicite care sa "spuna"
intrepretorului ce anume trebuie afisat.
6
Instructiunile de afisare sunt print , echo si printf . Primele doua sunt echivalente si fac acelasi
lucru (exista unele diferente de forma); printf este folosita mai rar datorita sintaxei greoaie.
<?
# cele 2 instructiuni de mai jos sunt echivalente
print "Text";
echo "Text";
# o singura instructiune echo poate primi mai multi parametri, separati
prin virgula
echo "<br />", "Afisez", " un text din ", 4, " buca ti";
# o singura intstructiune print poate primi doar un ul
print "<br />";
print "Afisez";
print " un text din ";
print 4;
print " bucati";
# printf este folosita pentru a formata continutul, la fel ca in C/C++
printf( "<br />Am %4.2f lei", 102.123456 ); // afis eaza Am 102.12 lei
?>
In PHP sunt trei metode prin care se poate adauga u n comentariu care evident nu va fi afisat in
browser, ci are ca scop doar adaugarea de informati i necesare programatorului:
• Tot ce urmeaza dupa caracterele // sau # pe un rand este considerat comentariu:
// Urmeaza un comentariu in PHP
#/ Urmeaza un alt comentariu in PHP
• Un comentariu format din mai multe linii este incad rat de /* si */
/* Comentariul in PHP
scris pe doua linii */
1.3. Variabile si constante
In PHP declararea variabilelor se realizeaza in ace lasi timp cu initializarea lor (cu atribuirea unei
valori de inceput). Atribuirea unei valori se reali zeaza cu ajutorul instructiunii de atribuire ce are
forma <nume variabila> = <valoare>;
<?
// variabile numerice
7
$variabila = 1;
$numar = 0;
// variabile text (string6uri)
$text = "Salut";
$text2 = 'Ce faci?';
// variabile logice (boolean)
$invatPHP = true;
$uitRepede = false;
// vector
$vectorGol = array();
$vectorS = array( 10,11,12,13 ); // vector simplu
// vector asociativ
$vector = array(
'luni' => 'Monday',
'marti' => 'Tuesday',
'miercuri' => 'Wednesday'
);
// definirea unei noi componente a unui vector asoc iativ
$vector[ 'joi' ] = 'Thursday';
// vector simplu definit ca asociativ, echivalentul lui $vectorS
$vectorS2 = array(
0 => 10,
1 => 11,
2 => 12,
3 => 13
);
?>
Un vector asociativ se diferentiaza de unul normal prin faptul ca are chei alfa3numerice (cuvinte).
Constantele de definesc folosind define :
8
<?
define( 'NUME', "Dan" );
define( 'VARSTA', 23 );
define( "ADEVARAT", true );
?>
1.4. Operatori
Operatori de comparare
Operatorii de comparare sunt folositi de cele mai m ulte ori in cadrul instructiunii if pentru a
exprima conditia ce trebuie verificata.
<?
$a == $b // egal
$a === $b // identic (aceeasi valoare si acelasi ti p)
$a != $b // diferit
$a <> $b // diferit
$a !== $b // ne6identic
$a < $b // strict mai mic
$a <= $b // mai mic sau egal
$a > $b // strict mai mare
$a >= $b // mai mare sau egal
?>
Operatorul ternar
PHP ofera un operator care are 3 termeni si a carui evaluare returneaza o valoare. Sintaxa lui este
urmatoarea:
(conditie ? adevarat : fals)
De remarcat ca adevarat, fals si conditie nu sunt i nstructiuni ci expresii (variabile, constante,
stringuri, etc) iar operatorul returneaza o valoare si nu o variabila.
<?
print ( 1 == 2 ? 'egal' : 'ne6egal' ); // afiseaza ne6egal
9
$a = ( 1 == 2 ? 'egal' : 'ne6egal' ); // $a va avea valoarea ne6egal
?>
Operatori de incrementare / decrementare
Incrementare inseamna cresterea valorii, de obicei cu o unitate, iar decrementarea este operatia
inversa. PHP ofera (ca si C/C++) posibilitatea ca i ncrementarea/decrementarea sa se faca printr3
un operator, fara sa fie nevoie de o instructiune s eparata. Spre exemplu:
<?
$a = 1; // initializare
// pentru a6l creste pe $a cu o unitate, normal am scrie:
$a = $a + 1;
// folosind operatorul de incrementare scriem:
$a++; // afiseaza 1 6 mai intai se afiseaza valoare a curenta, dupa care
$a devine 2;
// sau
++$a; // afiseaza 2 6 mai intai $a creste cu o unit ate, apoi este
afisata noua valoare
// pentru a afisa noua valoare, putem aplica operat orul direct din
instructiunea print:
print ++$a;
?>
Aceleasi observatii (legate de pozitie) se aplica s i pentru operatorul de decrementare.
Operatori de atribuire
<?
$a = 1; // atribuire simpla
$a += 4; // echivalent cu $a = $a + 4; $a are valoa rea 5 acum
$a 6= 1; // echivalent cu $a = $a 6 1;
$a *= 2; // echivalent cu $a = $a * 2;
$a /= 3; // echivalent cu $a = $a / 3;
$a %= 2; // echivalent cu $a = $a % 2; restul impar tirii lui $a la 2
10
$a = &$b; /* $a este o referinta la $b, adica ambel e variabile fac
referire
la aceeasi entitate; daca $a se schimba, se va s chimba si $b.
Altfel spus, $a este un alias pentru $b */
$s = "Salut"; // atribuire simpla
$s .= " straine!"; // echivalent $s = $s . " strain e!";
?>
Operatori pentru siruri de caractere
In aceasta categorie sunt inclusi 2 operatori ".=" (operator de atribuire prin concatenare) si "."
Punctul (.) este operatorul de concatenare (legare) string3uri.
<?
print "Text1" . " legat de " . "Text2"; //afiseaza Text1 legat de Text2
$a = "Ana are";
print $a . " mere"; // afiseaza Ana are mere
?>
Alti operatori
PHP mai dispune de urmatoarele tipuri de operatori:
• Operatori de control al erorilor: @ este folosit pe ntru a suprima erorile sau avertismentele
produse de PHP.
• Operatorul de executie: ` ` permite rularea unor ap licatii sau comenzi ale sistemului de
operare direct din PHP. Rezultatul executiei este capturat de script si poate fi prelucrat
sau afisat. Este echivalent cu functia shell_exec.
• Operatori aritmetici: +, 3, *, etc
• Operatori pe biti: &, |, ^, ~, <<, >>
• Operatori logici: and, or, xor, &&, ||
• Operatori de tip: instanceof
• Operatori pentru vectori: asemanatori celor de comp arare, doar ca se aplica vectorilor,
operatorul de uniune (+) leaga doi sau mai multi ve ctori.
11
1.5. Structuri de control
Structuri de selectie
Structura if
Este folosita pentru a executa o secventa de cod in functie de valoarea de adevar a unei conditii.
Sintaxa este prezentata mai jos:
if( conditie ) instructiune 1;
Structura if – else
De multe ori este nevoie sa se specifice si o opera tie ce trebuie efectuata daca nu este indeplinita
o conditie. In acest caz se foloseste if – else .
if( conditie ) instructiune 1;
else instructiune 2;
Structura if – elseif
Tinde spre structura switch .
if( conditie ) instructiune 1;
elseif( conditie ) instructiune 2;
elseif ( conditie ) instructiune 3;
…
else instructiune n;
Structura switch
O instructiune ce se aseamana cu if este, o structu ra ce permite executarea uneia sau mai multor
linii de cod in functie de valoarea unei expresii. Instructiunea switch este utila in cazurile in care
este nevoie sa se verifice mai multe valori posibil e ale unei expresii.
<?
$var = 3;
// se vor executa instructiunile de pe ramura care
// corespunde valorii variabilei $var
12
switch( $var ) {
case 0:
print 'zero';
break;
case 1:
print 'unu';
break;
case 2:
print 'doi';
break;
case 3:
print 'trei'; // afisez trei
break; // intrerup fluxul executiei switc h
case 4:
print 'patru';
break;
case 5:
print 'cinci';
break;
}
echo "\n", 'Gata!';
?>
Structuri repetitive
Structura for
Se foloseste atunci cand se cunoaste dinainte numar ul de repetitii (numarul de pasi ce se vor
executa). Are urmatoarea sintaxa:
for( [instructiune1] , [conditie], [instructiune2] ) { [instructiune3] }
Unde:
• instructiune1 este o instructiune de executat la in ceput
13
• conditie este o expresie care daca este evaluata ca adevarata va determina repetarea
ciclului 3 este denumita generic conditia de repeta re
• instructiune2 se va executa la fiecare pas al repet arii
• instructiune3 reprezinta operatia efectiva care se repeta in cadrul for 3ului
In general, [instructiune1] este o expresie de init ializare de forma $i = 1, conditia de repetare este
de forma $i <= numarul de pasi si [instructiune2] e ste o expresie de incrementare $i++.
<?
for( $i = 1; $i <= $n; $i++) { /* operatii */ }
?>
Structura while
Este folosita atunci cand nu se cunoaste dinainte n umarul de executii. Diferenta dintre while si for
este aceea ca prima este mai generala si mai flexibila. Se poate chiar afirma ca for este o situatie
particulara a unei structuri while. Sintaxa este ur matoarea:
while( [conditie] ) { [instructiune] }
Structura do – while
Diferenta fata de while este ca verificarea de face la final, dupa ce se executa cel putin o data
secventa de cod.
do { [instructiune] } while( [conditie] )
Structura foreach
Aceasta permite iterarea prin toate elementele unui vector. Pot fi folositi si vectori simpli si
asociativi.
foreach( [vector] as [cheie] => [valoare] ) { [in structiune3] }
Spre deosebire de celelalte instructiuni, pentru foreach nu trebuie specificata explicit o conditie
de oprire, fiind de datoria interpretorului PHP sa opreasca iterarea atunci cand s3a ajuns la finalul
vectorului.
<? // vector asociativ (definit explicit cu chei)
$zile = array(
'luni' => 'Mo',
'marti' => 'Tu',
'miercuri' => 'We',
14
'joi' => 'Th',
'vineri' => 'Fr',
'sambata' => 'Sa',
'duminica' => 'Su'
);
// afiseaza si cheia si valoarea intr6un text
foreach( $zile as $rom => $eng) {
print "$eng inseamna $rom <br />";
}
/* afiseaza
Mo inseamna luni
Tu inseamna marti
We inseamna miercuri
Th inseamna joi
Fr inseamna vineri
Sa inseamna sambata
Su inseamna duminica
*/
?>
Intreruperea fluxului de executie
Instructiunea continue permite oprirea iteratiei curente a unei structuri repetitive si trecerea
imediata la iteratia urmatoare. Folosind continue t oate instructiunile din blocul structurii sunt
sarite pentru iteratia curenta, iar executia contin ua cu iteratia urmatoare.
Instructiunea break permite intreruperea totala a executiei structurii curente si trecerea la
urmatoarea linie de cod. Folosind break toate instr uctiunile din blocul structurii sunt sarite pentru
toate iteratiile (curenta si cele urmatoare). Pract ic se "iese" fortat din blocul structurii repetitiv e,
iar fluxul de executie continua cu instructiunea de dupa structura repetitiva.
15
1.6. Operatii cu vectori
Operatiile clasice de cautare, sortare, inserare, e tc se pot realiza foarte usor cu ajutorul functiilo r
specializate, fara sa fie necesara parcurgerea manu ala a vectorilor. Iata cateva exemple:
<?
$vector = array( 1, 2, 3, 4, 5, 6 );
$vectAs = array(
'unu' => 'one',
'doi' => 'two',
'trei' => 3
);
// lungimea unui vector (numarul de elemente)
print count( $vector ); // 6
// se gaseste o valoare in vector?
print in_array( 3, $vector ); // true
// exista o anumita cheie in vector?
print array_key_exists( 'trei', $vectAs ); // true
// returneaza toate cheile din vector:
print_r( array_keys( $vectAs ) ); // Array ( [0] => unu [1] => doi [2]
=> trei )
// returneaza toate valorile din vector:
print_r( array_values( $vectAs ) ); // Array ( [0] => one [1] => two
[2] => 3 )
// returneaza o parte din vector
print_r( array_slice( $vector, 3 ) ); // de la poz itia 3 pana la
final: 4, 5, 6
print_r( array_slice( $vector, 3, 2 ) ); // de la pozitia 3, doua
elemente: 4, 5
print_r( array_slice( $vector, 65, 3 ) ); // de la final inapoi 5
pozitii: 2, 3, 4
// foloseste cheile unui vector ca variabile:
extract( $vectAs );
print $unu; // one
16
print $doi; // two
print $trei; // 3
// sorteaza un vector
sort( $vector ); // 1, 2, 3, 4, 5, 6
rsort( $vector ); // 6, 5, 4, 3, 2, 1
asort( $vectAs ); // sorteaza valorile si mentine a socierea cheilor
// preluare elemente unice din vector
print_r( array_unique( $vector ) );
// adauga o valoare la sfarsitul unui vector
$vector[] = 7;
array_push( $vector, 8 );
# nota: cele 2 instructiuni de mai sus sunt echival ente
// modifica un anumit element din vector
$vectAs[ 'trei' ] = 'three';
?>
1.7. Data si timp
Functia date()
string date ( string $format [, int $timestamp = ti me() ] )
Intoarce un string formatat in conformitate cu stri ng3ul de formatare dat, utilizand timestamp3ul
intreg dat, sau data si ora curenta daca nu este fu rnizat nici un timestamp. Cu alte cuvinte,
timestamp este optional si implicit are valoarea in toarsa de time().
Urm atoarele caractere sunt recunoscute in parametrul format
Caracterul
de format Descriere Exemple de valori intoarse
Ziua – –
d Ziua lunii, 2 cifre cu zero la inceput De la 01 pana la 31
D Reprezentarea textual a a zilei in limba englez a,
trei litere De la Mon pana la Sun
j Ziua lunii f ara zero la inceput De la 1 pana la 31
17
Urm atoarele caractere sunt recunoscute in parametrul format
Caracterul
de format Descriere Exemple de valori intoarse
l (litera
minuscula
'L') Reprezentarea textuala deplina a zilei
saptamanii in limba engleza De la Sunday pana la Saturday
N Reprezentarea numeric a a zilei s apt amanii
conform standardului ISO-8601 (adaugat in PHP
5.1.0) De la 1 (pentru Luni) pana
la 7 (pentru Duminica)
S Sufixul ordinal al zilei din lun a in limba englez a, 2
caractere st , nd , rd sau th . Func tioneaz a bine
cu j
w Reprezentarea numerica a zilei saptamanii De la 0 (pentru Duminic a) p ana
la 6(pentru Sambata)
z Ziua anului ( incep and de la 0) De la 0 pana la 365
Sapt amana – –
W Num arul s apt amanii in an conform standardului
ISO-8601, saptamanile incep Luni (adaugat in
PHP 4.1.0) Exemplu: 42 (a 42-a saptamana a
anului)
Luna – –
F Reprezentarea textual a deplin a a lunii in limba
engleza De la January pana la December
m Reprezentarea numeric a a lunii, cu zero la
inceput De la 01 pana la 12
M Reprezentarea textual a prescurtat a a lunii in
limba engleza, trei litere De la Jan pana la Dec
n Reprezentarea numeric a a lunii, f ara zero la
inceput De la 1 pana la 12
t Num arul de zile in luna dat a De la 28 pana la 31
Anul – –
L Indica daca anul este bisect 1 dac a anul este bisect, 0 in caz
contrar.
o Reprezentarea numeric a a anului conform
standardului ISO-8601. Aceasta are aceeasi
valoare ca si Y, cu exceptia ca daca numarul
saptamanii dupa ISO ( W) apartine anului
precedent sau urmator, acel an este considerat in
loc. (adaugat in PHP 5.1.0) Exemple: 1999 sau 2003
18
Urm atoarele caractere sunt recunoscute in parametrul format
Caracterul
de format Descriere Exemple de valori intoarse
Y Reprezentarea numeric a deplin a a anului, 4 cifre Exemple: 1999 sau 2003
y Reprezentarea din dou a cifre a anului Exemple: 99 sau 03
Ora – –
a Ante meridiem sau Post meridiem cu litere
minuscule am sau pm
A Ante meridiem sau Post meridiem cu litere
majuscule AM sau PM
B Ora Swatch Internet De la 000 pana la 999
g Reprezentarea orei in format de 12 ore, f ara
zero la inceput De la 1 pana la 12
G Reprezentarea orei in format de 24 ore, f ara
zero la inceput De la 0 pana la 23
h Reprezentarea orei in format de 12 ore, cu zero
la inceput De la 01 pana la 12
H Reprezentarea orei in format de 24 ore, cu zero
la inceput De la 00 pana la 23
i Minutele cu zero la inceput De la 00 pana la 59
s Secundele cu zero la inceput De la 00 pana la 59
u Microsecundele (ad augat in PHP 5.2.2) Exemplu: 654321
Fusul orar – –
e Identificatorul fusului orar (ad augat in PHP
5.1.0) Exemple: UTC ,GMT ,Atlantic/Azores
I (litera
majuscula i) Determina daca este activ timpul de vara 1 dac a este activ timpul de var a, 0 in
caz contrar.
O Diferen ta fa ta de ora Greenwich (GMT) in ore Exemplu: +0200
P Diferen ta fa ta de ora Greenwich (GMT) cu dou a
puncte intre ore si minute (adaugat in PHP 5.1.3) Exemplu: +02:00
T Abreviatura fusului orar Exemple: EST , MDT …
Z Deplasamentul in secunde a fusului orar.
Deplasamentul fuselor orare dinspre Vest de UTC
este intotdeauna negativ, iar a celor dinspre Est
de UTC este intotdeauna pozitiv. De la -43200 pana la 50400
19
Urm atoarele caractere sunt recunoscute in parametrul format
Caracterul
de format Descriere Exemple de valori intoarse
Data/Ora
deplina – –
c Data in reprezentare ISO 8601 (ad augat a in PHP
5) 2004-02-12T15:19:21+00:00
r Data formatata conform » RFC 2822 Exemplu: Thu, 21 Dec 2000 16:01:07
+0200
U Secunde de la Epoca Unix (1 Ianuarie 1970
00:00:00 GMT) Vezi de asemenea time()
Functia time()
int time ( void )
Intoarce timpul curent masurat in numarul de secund e de la Epoca Unix (January 1 1970
00:00:00 GMT).
Functia strtotime()
int strtotime ( string $time [, int $now = time() ] )
Functia asteapta un sir de caractere continand un f ormat de data engleza si incearca sa transforme
acest format intr3un timestamp Unix (numarul de sec unde de la 1 Ianuarie 1970 00:00:00 UTC),
in raport cu timestamp3ul dat in parametrul now, sa u cu ora curenta daca parametrul now nu este
furnizat.
1.8. Functii uzuale
Functia mail()
PHP poate trimite emailuri daca pe serverul curent este instalata si o aplicatie de email (un server
de email). Nu este nevoie de configurari suplimenta re atat timp cat serverul de email nu are
restrictii si poate fi accesat de aplicatiile local e. Intr3o instalare pe calculatorul personal, nu es te
posibila trimiterea de mesage email, iar functia ma il va returna o eroare. Pe un web3server
configurat complet si corect, cum sunt serverele ce ofera gazduirea site3urilor, functia mail
functioneaza corect.
<?
// trimitere mesaj simplu
20
mail('adresa@exemple.com', 'Subiect mesaj', 'Mesaj simplu');
// trimiterea unui mesaj in care se specifica date aditionale
$to = 'adresa@example.com';
$subject = 'Subiect mesaj';
$message = 'Mesaj simplu cu date aditionale';
$headers = 'From: punctsivirgula@example.com' . "\r \n" .
'Reply6To: punctsivirgula@example.com' . "\r\n" .
'X6Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
?>
Functii matematice uzuale:
<?
echo abs(67); // functia "valoare absoluta", afis eaza 7
echo sin(60); // functia "sinus", afiseaza 60.304 810621 …
echo decbin(12); /* returneaza reprezentarea bina ra a numarului,
afiseaza 1100 */
echo base_convert('7DB', 16, 10); /* returneaza c onvesia dintr6o baza
in alta, afiseaza 2011 */
echo round(12.3); /* returneaza o rotunjire la cel mai apropiat intreg,
afiseaza 12 */
echo rand(); // afiseaza un numar aleator
echo rand(10, 70); /* afiseaza un numar aleator din intervalul
specificat */
?>
Functia set_time_limit()
Se foloseste pentru a configura timpul maxim cat sc riptul curent are voie sa se execute. Este utila
atunci cand codul PHP trebuie sa execute un volum m are de operatii care ar putea dura cateva
zeci de secunde (spre exemplu la un upload de fisie re). Daca dupa expirarea timpului scriptul
inca se afla in executie, serverul va intrerupe exe cutia fi va returna o eroare.
<?
set_time_limit(50); // seteaza limita la 50 secunde
21
set_time_limit(0); //dezactiveaza limita, scriptul poate rula oricat
?>
Functia flush()
Trimite catre browser tot ceea ce a fost afisat dej a de script. In mod normal, rezultatul unui script
PHP este trimis catre browser pentru afisare doar l a finalul executiei intregului script. Aceasta
functie ofera posibilitatea trimiterii catre browse r a rezultatului pe parcurs ce acesta este printat in
PHP. Asta inseamna ca pagina poate fi afisata parti ala in timp ce inca se incarca.
<?
echo 'Text 1<br />';
echo 'Text 2<br />';
flush();
?>
Terminarea executiei – functiile die si exit
Sunt situatii in care se doreste oprirea executiei unui script PHP. Acest lucru este posibil folosind
una din cele doua functii de mai jos.
<?
exit( "Script terminat" );
die( "Script terminat" );
print "Acesta linie nu se afiseaza niciodata";
?>
Instructiunile die si exit sunt echivalente.
Functia phpinfo()
Ofera informatii despre instalarea PHP curenta si d espre serverul pe care aceasta este executata.
Rolul acestei functii este pur informativ; functia nu poate fi folosita intr3un script care are un alt
scop bine definit. De aceea, este recomandata apela rea acestei functii intr3un script PHP separat,
intrucat aceasta creaza o pagina HTML completa.
<?
phpinfo(); //returneaza o pagina HTML cu info despr e instalarea PHP
?>
22
O alta functie, ce poate fi utila in scripturile vo astre, este phpversion() 3 aceasta returneaza doar
versiunea curenta a interpretorului PHP. Un exemplu al folosirii acestei functii este mai sus la
functia mail() .
1.9. Variabile superglobale
PHP dispune de cateva variabile implicite. Acestea sunt pre3populate de PHP in momentul
executiei, deci nu trebuie definite sau initializat e. Sunt disponibile in orice portiune a codului si
in orice script PHP si pot fi folosite fara sa fie nevoie de alte pregatiri. Anumite variabile (ca de
exemplu $_POST) au valori doar in anumite situatii (spre exemplu, doar atunci cand sunt folosite
formulare).
Variabila $_GET
Este cea mai uzuala metoda, folosita implicit de br owsere pentru a trimite cereri catre servere.
Majoritatea paginilor pe care le vizualizam pe inte rnet sunt obtinute in urma unei cereri GET. De
exemplu, scrierea unui URL in bara de adrese a brow serului sau accesarea unui link, sau a unei
imagini, toate sunt request3uri de tip GET.
Aceasta metoda este utilizata, asadar, pentru a "ce re" o pagina de la server (in engleza "get data").
Totusi, odata cu cererea se pot transmite si mici b ucati de informatii catre server. Aceste
informatii transmise la momentul cererii pot fi dat e introduse de utilizatori (intr3un form) si sunt
adaugate la finalul URL3ului sub forma "pagina.php? parametru=valoare".
Vector asociativ ce contine parametrii transmisi pr in URL sau printr3un formular. De exemplu,
daca pagina noastra PHP se numeste test.php, un URL de genul
http://localhost/test.php?nume=Dan&varsta=23&ocupat ie=student
ar popula variabila $_GET cu urmatoarele valori:
<?
print_r( $_GET );
/* afiseaza:
Array
(
[nume] => Dan
[varsta] => 23
[ocupatie] => student
) */
?>
23
Numele parametrilor au rol de cheie in vectorul $_G ET.
Datele transmise catre server prin GET apar la fina lul URL3ului, asa cum au fost introduse; acest
lucru ar putea fi un dezavantaj cand este vorba de date senzitive, dar ajuta la modificarea usoara a
datelor pentru retrimitere.
Cantitatea de date GET depinde de lungumea maxima p ermisa a URL3ului (ex. in Internet
Explorer este de 2083 caractere). Asadar prin GET n u se pot transmite prea multe date.
Rezultatul unui request GET poate fi preluat din ca che3ul browser3ului sau al proxy3ului web.
Trebuie ca URL3ul sa fie diferit la fiecare request nou pentru a fi siguri ca datele reale sunt
preluate.
Caracterele speciale pot fi codificate folosind atr ibutul enc3type al formularului; dezavantajul este
ca aceasta codificare va reduce cantitatea de date ce pot fi transmise (ex. 3 caractere japoneze
sunt reprezentate cu ajutorul a 42 caractere normal e:
%26%2312454%3B%26%2312455%3B%26%2312502%3B).
Variabila $_POST
Opus metodei GET, POST este folosita pentru a trans mite informatii catre server (in engleza
"post data"). Spre deosebire de GET care permite do ar o cantitate limitata de date sa fie transmisa
de la client (browser) la serverul web, POST dispun e de limite mai generoase, fiind standardul de
transmitere a datelor. Astfel, upload3ul unui fisie r pe server, salvarea unui post pe blog, etc 3 toat e
sunt requesturi de tip POST.
Cantitatea de date ce poate fi transmisa prin POST poate fi restrictionata doar de catre serverul
web, desi nu exista o limitare reala.
Datele transmise prin POST nu apar in URL si nu pot fi alterate usor, ceea ce ofera un oarecare
grad de securitate.
In mod implicit, datele preluate prin POST nu sunt puse in cache3ul de la browser sau proxy3
server; astfel folosind aceasta metoda vor fi afisa te intotdeauna datele reale.
Codificarea caracterelor speciale se poate realiza ca si la GET folosind atributul enc3type al
formularului; avantajul este ca nu exista limitari de cantitate a datelor.
Alte variabile superglobale :
• $_REQUEST
Inglobeaza atat $_GET cat si $_POST.
• $_SESSION
Sesiunile reprezinta o functionalitate prin care an umite informatii sunt mentinute de la o
pagina la alta. O sesiune dureaza atat timp cat uti lizatorul acceseaza un site si se incheie
odata cu inchiderea browserului.
24
In PHP o sesiune reprezinta perioada de timp in car e mai multe scripturi PHP, accesate la
momente diferite de timp, pot stoca si folosi infor matii comune. O sesiune incepe atunci
cand un script apeleaza functia session_start() si se termina atunci cand utilizatorul
inchide browserul.
Salvarea datelor pe sesiune se face prin intermediu l vectorului super3global $_SESSION.
• $_SERVER
Furnizeaza informatii despre server, pagina ceruta si utilizatorul care acceseaza pagina.
• $_ENV
Afiseaza informatii despre mediul curent in care es te instalat si ruleaza interpretorul PHP,
despre scriptul curent, etc.
• $_COOKIE
Folosita pentru a vedea elementele de tip Cookies d e la site3ul/pagina curenta, disponibile
pe calculatorul utilizatorilor.
• $_FILES
Folosita la incarcarea fisierelor pe server (file u ploads).
1.10. Fisiere
In orice limbaj de programare, si deci si in PHP, c and se lucreaza cu fisiere trebuie efectuate
urmatoarele operatiuni:
• deschiderea fisierului
• citirea din fisier/scrierea in fisier
• inchiderea fisierului
Instructiunile PHP corespunzatoare operatiilor de m ai sus sunt prezentate mai jos:
<? # deschiderea unui fisier si citirea din el
$id_fisier = fopen("c:\\folder\\fisier.txt", 'r'); // deschidere
fread( $id_fisier, 10 ); // citire 10 octeti din fisier
fclose($id_fisier); // inchidere
# deschiderea unui fisier, stergerea continutului s i scrierea in el
$id_fisier = fopen("c:\\folder\\fisier.txt", 'w'); // deschidere
fwrite( $id_fisier, 'Text nou in fisier' );
fclose($id_fisier); // inchidere
# deschiderea unui fisier si scrierea la sfarsitul lui
25
$id_fisier = fopen("c:\\folder\\fisier.txt", 'a'); // deschidere
fwrite( $id_fisier, 'Text adaugat in fisier' );
fclose($id_fisier); // inchidere
?>
Pentru simplificarea codului de citire/scriere a un ui fisier in situatii generale, PHP ofera cateva
functii foarte convenabile: file_get_contents , file_put_contents si file . Primele doua, dupa cum si
numele spune, permit preluarea intregului continut al unui fisier si punerea lui intr3o variabila
string, printr3un singur apel, respectiv crearea un ui fisier care sa contina valoarea unei variabile
(exemple mai jos). Cea de3a treia functie permite c rearea unui vector ce are ca elemente liniile
fisierului specificat. De exemplu, un fisier cu 3 l inii va genera un vector cu 3 elemente, fiecare
element reprezentant o linie din fisier.
<? // pun tot continutul fisierului intr6o variabil a
$continut = file_get_contents( 'fisier.txt' );
// in acest moment tot continutul este stocat in va riabila $continut
// pot procesa continutul sau il pot modifica
// adaug ceva la final
// modificarea se face doar in variabila $continut, nu si in fisier
$continut = $continut . ' 66 Text adaugat de PHP';
// la final salvez variabila $continut intr6un al d oilea fisier
file_put_contents( 'fisier2.txt', $continut );
// creez un alt fisier care contine 2 cifre doar
file_put_contents( 'fisier3.txt', '11' );
// din continutul unui fisier creez un vector forma t din liniile
fisierului
$linii = file( 'fisier4.txt' );
echo 'Linia a 3a din fisier este: ', $linii[ 2 ];
?>
Pe langa functiile pentru preluarea/modificarea con tinutului fisierelor, PHP ofera si facilitati de
gestionare a fisierelor: creare, mutare, copiere, m odificare atribute, etc.
<? // verificare daca un fisier exista
echo file_exists( 'fisier.txt' );
// copiere fisier
copy( 'sursa.txt', 'destinatie.txt' );
26
// stergere fisier
unlink( 'fisier.txt' );
// redenumire sau mutare
rename( 'vechi.txt', 'nou.txt' );
// afisarea numelui unui fisier
echo basename( "c:\\cale\\catre\\fisier.txt" ); // afiseaza fisier.txt
// afisarea folderului unui fisier
echo dirname( "c:\\cale\\catre\\fisier.txt" ); //af iseaza c:\cale\catre
// afisarea dimensiunii unui fisier in octeti
echo filesize( 'fisier.txt' );
// verificare daca numele specificat este un fisier
echo is_file( "c:\\cale\\catre\\fisier.txt" ); // a fiseaza true
// verificare daca un fisier poate fi citit
echo is_readable( 'fisier.txt' );
// verificare daca un fisier poate fi scris/modific at
echo is_writable( 'fisier.txt' );
?>
Manipularea directoarelor (folderelor) folosind PHP se face la fel de usor ca in cazul fisierelor.
Majoritatea functiilor folosite pentru fisiere se p ot aplica si la foldere (de exemplu copy, rename,
is_file, etc), dar exista o serie de alte instructi uni specifice dosarelor.
<? // afiseaza directorul curent (current working d irectory)
// de obicei este folderul in care se afla scriptul ce se executa
echo getcwd(); // ex. c:\scripturi
// schimba directorul curent
chdir( 'exemple' ); // ex. c:\scripturi\exemple
//returneaza un vector cu numele fisierelor si dire ctoarelor din folder
$vector = scandir( getcwd() );
print_r( $vector );
// verifica daca un element este director (folder)
echo is_dir( "c:\\cale\\fisier.txt" ); // afisea za false
?>
27
2. Baze de date MySQL
2.1. Despre MySQL
MySQL este un sistem de gestiune a bazelor de date relational, produs de compania suedeza
MySQL AB si distribuit sub Licenta Publica Generala GNU. Este cel mai popular SGBD open3
source la ora actuala, fiind o componenta cheie a s tivei LAMP (Linux, Apache, MySQL, PHP).
Desi este folosit foarte des impreuna cu limbajul d e programare PHP, cu MySQL se pot construi
aplicatii in orice limbaj major. Exista multe schem e API disponibile pentru MySQL ce permit
scrierea aplicatiilor in numeroase limbaje de progr amare pentru accesarea bazelor de date
MySQL, cum are fi: C, C++, C#, Java, Perl, PHP, Pyt hon, FreeBasic, etc., fiecare dintre acestea
folosind un tip spefic API. O interfata de tip ODBC denumita MyODBC permite altor limbaje de
programare ce folosesc aceasta interfata, sa intera ctioneze cu bazele de date MySQL cum ar fi
ASP sau Visual Basic. In sprijinul acestor limbaje de programare, unele companii produc
componente de tip COM/COM+ sau .NET (pentru Windows ) prin intermediul carora respetivele
limbaje sa poata folosi acest SGBD mult mai usor de cat prin intermediul sistemului ODBC.
MySQL este componenta integrata a platformelor LAMP sau WAMP (Linux/Windows3Apache3
MySQL3PHP/Perl/Python). Popularitatea sa ca aplicat ie web este strans legata de cea a PHP3ului
care este adesea combinat cu MySQL si denumit Duo3u l Dinamic.
Pentru a administra bazele de date MySQL se poate f olosi modul linie de comanda sau, prin
descarcare de pe internet, o interfata grafica: MyS QL Administrator si MySQL Query Browser.
Un alt instrument de management al acestor baze de date este aplicatia gratuita, scrisa in PHP,
phpMyAdmin.
MySQL poate fi rulat pe multe dintre platformele so ftware existente: AIX, FreeBSD,
GNU/Linux, Mac OS X, NetBSD, Solaris, SunOS, Window s 9x/NT/2000/XP/Vista.
2.2. Structura unei baze de date relationale
O baza de date relationale stocheaza datele in tabe le, iar fiecare tabel stocheaza in coloane
informatii despre un anumit tip de element.
In continuare puteti vedea un tabel caracteristic d intr3o baza de date relationala care prezinta
personalitati istorice ale Americii.
PersoanaID Nume AnNastere
001 George Washington 1732
002 John Adams 1735
003 Thomas Jefferson 1743
Primul rand al tabelului atribuie nume pentru fieca re coloana.
Fiecare rand al tabelului, altul decat primul rand, descrie o singura personalitate. De exemplu, al
doilea rand descrie o personalitati pe nume George Washington.
28
Fiecare coloana, descrie un anumit atribut al perso nalitatii De exemplu, a doua coloana contine
numele personalitatilor, iar a treia coloana contin e anii in care s3au nascut acestia.
Pentru a se putea face referire, mai usor, la un an umit rand al tabelului, se obisnuieste ca fiecare
tabel sa contina o coloana care identifica in mod u nic fiecare rand. Aceasta coloana se numeste
"cheia primara" a tabelului. In exemplul prezentat, coloana numita "PersoanaID" serveste drept
cheie primara.
Daca nici o coloana nu contine o valoare unica pent ru fiecare rand, se pot combina valorile mai
multor coloane pentru a crea o "cheie primara compu sa".
O baza de date relationala se numeste astfel datori ta capacitatii sale de a stabili relatii intre date
din mai multe tabele.
Urmatorul exemplu prezinta doua tabele si o relatie intre acestea.
PersoanaID Nume AnNastere
001 George Washington 1732
002 John Adams 1735
003 Thomas Jefferson 1743
Meserie PersoanaID
Arhitect 003
General 001
Filozof 002
Al doilea tabel contine informatii despre meseriile caracteristice ale persoanelor prezentate in
exemplul anterior. Mai precis, tabelul identifica p ersoana cu o anumita meserie. Numele meseriei
serveste drept cheie primara a tabelului, care mai contine, in afara de aceasta, o singura coloana.
Coloana respectiva stocheaza atributul "PersoanaID" din primul tabel, al persoanei care cunoaste
meseria descrisa de un anumit rand. De exemplu, ang ajatul cu numarul 003 este arhitect.
Retineti ca "PersoanaID" este atat cheia primara a tabelului original, dar si o coloana din noul
tabel. Coloana "PersoanaID" a noului tabel se numes te "cheie externa"; desi nu este cheia primara
a noului tabel, este cheia primara a unui alt tabel .
Aplicatia software care gazduieste o baza de date s e numeste "sistem de gestiune a bazelor de
date" (SGBD). Exista multe sisteme de gestiune a ba zelor de date, printre cele mai populare
asemenea sisteme se numara: DB2 , Interbase , MySQL , Oracle , Postgresql , SQL Server ,
Sybase .
MySQL este cel mai popular sistem de gestiune a baz elor de date destinat utilizarii cu PHP, in
mare masura deoarece este gratuit. Totusi, prin int ermediul PHP este posibil accesul la aproape
orice SGBD modern.
Bazele de date relationale inteleg SQL (Structured Query Language), un limbaj relativ simplu,
folosit pentru solicitarea datelor. In ciuda simpli tatii sale, SQL este un limbaj foarte puternic, car e
poate obtine accesul la date stocate in mai multe t abele, poate filtra datele dorite si poate sorta,
rezuma si afisa rezultatele.
29
In general, bazele de date relationale isi stocheaz a datele intr3un singur fisier sau catalog. Aceasta
caracteristica de organizare faciliteaza administra rea datelor, deoarece executarea copiei de
siguranta, respectiv restaurarea unui singur fisier sau catalog se realizeaza mai usor.
Sistemele de gestiune a bazelor de date relationale necesita mai multe cicluri de procesor pentru a
satisface o cerere de date decat cele necesare pent ru accesul la un fisier normal, dar ofera
protectie sporita a datelor, iar pentru accesul la distanta usureaza traficul deoarece majoritatea
operatiilor sunt efectuate de programul SQL, astfel singurele date transmise in retea ar fi
rezultatul cerut.
2.3. Proiectarea unei baze de date
Cand se creeaza un tabel intr3o baza de date, este important sa se tina cont de "cheia primara".
Coloanele dintr3un tabel trebuie sa se bazeze pe ch eia primara in totalitatea sa.
O alta operatie importanta este specificarea unui t ip de date pentru fiecare coloana. Majoritatea
bazelor de date relationale accepta urmatoarele tip uri de date generale:
• Caracter
• Intreg
• Zecimal
• Data si ora
• Binar
Tabelul urmator rezuma tipurile de date cele mai fr ecvent utilizate, acceptate de MySQL si de
majoritatea bazelor de date relationale. MySQL acce pta multe alte tipuri de date, dar acestea sunt
cele mai folosite.
Principalele tipuri de date din MySQL
Tip de date Descriere
BLOB – Date bin are arbitrare, cu o lungime maxima de 65535 octeti
CHAR(m) – Un sir de caractere de lungime fixa, cu un maxim de m caractere, unde m
este mai mic decat 256. Pentru obtinerea lungimii d orite, se insereaza spatii
finale
DATE – O data in format an -luna -zi; de exemplu 2008 -10 -15
DECIMAL
DECIMAL(m,d) – Un numar zecimal, reprezentat sub forma de sir cu " m" cifre, din care "d" se
afla la dreapta punctului zecimal. Daca "m" si "d" sunt omise, in mod
prestabilit se vor utiliza valorile 10 si 0
DOUBLE
DOUBLE (m, d) – Un numar cu virgula mobila, cu dubla precizie, av and o latime de afisare
egala cu "m" si un numar de "d" cifre dupa virgula.
FLOAT(m,d) – Un numar cu virgula mobila, cu simpla precizie, av and o latime de afisare
egala cu "m" si un numar de "d" cifre dupa virgula
INTEGER
INTEGER UNSIGNED – Un intreg pe 32 de biti. Daca se specifica atributul UN SIGNED, domen iul de
valori este cuprins intre 0 si 4294967295; i n caz contrar, domeniul este cuprins
intre valorile -2147483648 si 2147483647
30
NUMERIC
NUMERIC (m, d) – Similar cu DECIMAL
REAL
REAL(m, d) – Similar cu DOUBLE
SMALLINT
SMALLINT UNSIGNED – Un intreg pe 16 biti. Daca se specifica atributul UNSIG NED, domeniul de
valori este cuprins intre 0 si 65535; in caz contra r, domeniul este cuprins intre
valorile –32768 si 32767
TIME
TIMESTAMP
TIMESTAMP(m) – Ora in format ora -minut -secunda; de exemplu, 08 -20 -00. O valoare de tip
data si ora, in format an-luna-zi ora-minut-secunda ; de exemplu, 1976-01-05
00:00:00. Aceasta reprezentare este similara celei returnate de functiile UNIX.
Pt. stocare valoarea este transformata din timpul c urent in UTC si
transformata invers la solicitarea datei.
VARCHAR(m) – Un sir caracter de lungime variabila, cu un maximum de "m" caractere, unde
m este mai mic decat 256 pentru versiuni MySQL ante rioare 5.0.3, iar pt. cele
mai noi limita este 65 535 bytes. Spatiile finale a u fost eliminate
2.4. Crearea unei baze de date si a unui tabel
La inceput, o baza de date nu contine tabele. Pentr u a crea o baza de date si apoi un tabel intr3o
baza de date, se foloseste un sub3limbaj SQL specia l, cunoscut sub numele de Data Definition
Language (DDL).
Se pot emite comenzi DDL si alte comenzi SQL prin i ntermediul unui interpretor SQL sau prin
intermediul PHP. In general, SQL nu este sensibil l a diferenta intre majuscule si minuscule.
Ca regula, dupa scrierea comenzilor, la sfarsit tre bue sa fie caracterul "punct si virgula" (;)
Pentru a crea o baza de date, se foloseste urmatoar ea comanda:
CREATE DATABASE nume_db;
Unde "nume_db" este numele bazei de date care va fi creata.
Inainte de a crea un tabel sau a lucra cu alte come nzi intr3o baza de date, trebuie accesata baza de
date existent; acest lucru se face folosind comanda :
USE nume_db;
Unde "nume_db" este numele bazei de date. Cu aceeas i comanda "USE nume_db" se schimba si
baza de date in care se lucreaza.
Pentru a crea un tabel intr3o baza de date, se emit e comanda "CREATE TABLE", care are
urmatoarea forma:
CREATE TABLE tabel (coloana tip, coloana tip, …);
Unde "tabel" este numele tabelului, "coloana" este numele unei coloane, "tip" este tipul datelor
incluse in coloana, se poate specifica un numar ned efinit de coloane.
31
De exemplu, comanda urmatoare creeaza un tabel numi t "carte", care contine coloanele "carteid",
"titlu" si "pret":
CREATE TABLE carte (carteid CHAR(10), titlu VARCHAR (255), pret
decimal(5,2));
In afara tipului de date, intre paranteze, se pot s pecifica si alte atribute optionale ale unei coloan e:
• NOT NULL 3 Fiecare rand trebuie sa contina o valoar e a coloanei asociate; valorile nule
nu sunt permise.
• DEFAULT valoare 3 Daca nu este data o valoare a col oanei asociate, se va presupune
valoarea specificata.
• AUTO INCREMENT 3 MySQL va repartiza in mod automat un numar de serie ca valoare
a coloanei asociate.
• PRIMARY KEY 3 Coloana asociata este cheia primara a tabelului care o contine.
Iata un exemplu ceva mai complicat de creare a unui tabel, care foloseste unele din aceste atribute
optionale:
CREATE TABLE carte (carteid CHAR(10) PRIMARY KEY,
titlu VARCHAR(255) NOT NULL,
pret DECIMAL(5,2) DEFAULT 50.00);
2.5. Stergerea si modificarea unui tabel
Stergerea unui tabel sau a unei coloane este un act irevocabil, datele fiind definitiv sterse.
Pentru a sterge un tabel, scrieti urmatoarea comand a:
DROP TABLE tabel;
Unde "tabel" este numele tabelului care va fi sters .
Dupa crearea unui tabel, poate fi modificat prin em iterea unei comenzi "ALTER TABLE", care
are mai multe forme.
Urmatoarea forma a comenzii va permite sa fie stear sa o coloana din tabel:
ALTER TABLE tabel DROP coloana;
Unde "tabel" este numele tabelului care va fi modif icat, iar "coloana" este numele coloanei care
va fi stearsa.
O alta forma a comenzii va permite adaugarea de o n oua coloana in tabel:
ALTER TABLE tabel ADD coloana tip [optiuni];
Unde "tabel" este numele tabelului care va fi modif icat, "coloana" este numele coloanei care va fi
adaugata, "tip" este tipul noii coloane, iar "[opti uni]" constituie toate optiunile dorite, precum
PRIMARY KEY.
32
De exemplu, pentru a adauga coloana "pretnou" la ta belul "carte", se scrie comanda:
ALTER TABLE carte ADD pretnou DECIMAL(5,2) DEFAULT 50.00;
Pentru a vedea toate bazele de date create in MySQL , se foloseste comanda:
SHOW DATABASES;
Pentru a vedea toate tabelele dintr3o baza de date din MySQL, se foloseste comanda:
SHOW TABLES;
Pentru a vedea toate coloanele dintr3un tabel, si a tributele acestora, se foloseste comanda:
SHOW COLUMNS FROM tabel;
2.6. Interogarea unei baze de date
In afara de Data Definition Language, SQL include D ata Manipulation Language (DML). DML
va permite sa formati interogari, care obtin accesu l la datele aflate intr3o baza de date relationala
si raporteaza aceste date. De asemenea, puteti folo si DML pentru a insera, actualiza si sterge
randurile dintr3un tabel.
Cea mai elementara forma de interogare este comanda "SELECT" simpla.
Cea mai simpla interogare raporteaza toate coloanel e din toate randurile unui tabel. Interogarea
are urmatoarea forma:
SELECT * FROM tabel;
Unde "tabel" este numele tabelului la care se va ob tine accesul.
Aceasta comanda va afisa un tabel cu fiecare rand p e o linie separata. Datele de iesire includ
numele coloanelor si linii care separa coloanele.
Daca doriti sa selectati numai anumite coloane sau sa raportati coloanele intr3o anumita ordine,
puteti folosi urmatoarea forma a comenzii "SELECT":
SELECT coloana1, coloana2 FROM tabel;
Unde "tabel" este numele tabelului, iar "coloana1" si "coloana2" sunt coloanele la care se va
obtine accesul si al caror continut va fi afisat.
Se pot specifica mai multe coloane, separate prin v irgula. Daca se doreste sa fie selectate numai
acele randuri care satisfac un anumit criteriu, cla uza "WHERE" permite specificarea unei
conditii; randurile care nu satisfac conditia nu su nt raportate.
De exemplu, o interogare care raporteaza un singur rand:
SELECT titlu, pret FROM carte WHERE carteid=1;
Forma conditiilor folosite in sub3limbajul DML al l imbajului SQL este similara cu aceea a
conditiilor PHP. Se pot folosi oricare dintre urmat orii operatori relationali:
33
= Egalitate
<> Inegalitate
!= Inegalitate, diferit de
< Mai mic decat
> Mai mare decat
<= Mai mic sau egal cu
=> Mai mare sau egal cu
Se pot compara valoarea unei coloane cu aceea a alt ei coloane, respectiv valoarea unei coloane cu
o valoare string. Valorile string SQL (sirurile) tr ebuie sa fie incluse intre ghilimele simple, nu
intre ghilimelele duble.
Cand unei coloane nu i3a fost repartizata nici o va loare, SQL ii atribuie valoarea speciala NULL.
De asemenea, programatorii pot atribui in mod expli cit valoarea NULL unei coloane.
Comparatiile obisnuite cu valori NULL, care foloses c operatorii de (in)egalitate, vor returna un
rezultat fals. Totusi, se pot folosi operatorul spe cial "<=>". care compara valorile tinand cont de
valoarea NULL. Daca e folosit acest operator pentru a compara doua valori NULL, se obtine un
rezultat adevarat.
SQL include si numerosi operatori de comparatie non 3algebrici:
Operator Descriere
x BETWEEN y AND z Adevarat, daca valoarea lui x este cuprinsa intre valorile lui y si z
x LIKE y Adevarat daca valoarea lui x este echivalenta cu modelul y
x NOT LIKE y Adevarat daca valoarea lui x nu este echivalenta cu modelul y
x IN (y1, y2) Adevarat daca valoarea lui x este un membru al list ei y1, y2. Lista poate
contine unul, doi sau mai multi membri
x NOT IN (y1, y2) Adevarat daca valoarea lui x nu este un membru al listei y1, y2. Lista
poate contine unul, doi sau mai multi membri
x IS NULL Adevarat daca x are valoarea NULL
x IS NOT NULL Adevarat daca x nu are valoarea NULL
Sub3limbajul folosit pentru specificarea modelelor asociate operatorului "LIKE" este diferit de
cel folosit de PHP. Meta3caracterul "%" corespunde unui numar de zero sau mai multe caractere,
iar meta3caracterul "_" corespunde unui singur cara cter.
Modelele, precum sirurile, sunt incluse intre ghili mele simple. De exemplu, modelul '%ar%'
corespunde oricarui sir care contine sub3sirul 'ar' , inclusiv siruri precum 'ar', 'arc' si 'un zar'.
Pentru a plasa un caracter "%" sau "_" intr3un sir test, se foloseste secventa "\%" sau "\_".
Ca si PHP, sub3limbajul DML din SQL permite formare a de expresii logice care combina
expresiile relationale, cu oricare dintre urmatorii operatori logici:
• AND , && 3 SI, adevarat daca ambii operanzi sunt ad evarati
• OR , || 3 SAU, adevarat daca un operand este adevar at
• NOT , ! 3 NU, adevarat daca operandul este fals
34
De exemplu, urmatoarea interogare raporteaza randur ile care au pretul de carte mai mare decat 11
sau al caror titlu include sub3sirul 'Curs':
SELECT titlu, pret FROM carte
WHERE pret>11 OR titlu LIKE ’%Curs%’;
Pentru a compara o valoare cu o expresie regulata i n MySQL, se foloseste urmatoarea forma:
x REGEXP y
Unde "x" este valoarea care va fi testata, iar "y" este o expresie regulata, delimitata prin ghilimele
simple.
2.7. Modificarea datelor dintr-o baza de date
Sub3limbajul SQL, Data Manipulation Language, inclu de comenzi care permit inserarea de
randuri noi intr3un tabel, actualizarea uneia sau m ai multor coloane ale randurilor existente,
respectiv stergerea de randuri dintr3un tabel.
Pentru a insera un nou rand intr3un tabel, se folos este comanda "INSERT", care are forma:
INSERT INTO tabel VALUES (valoare1, valoare2);
Unde:
• "tabel" este numele tabelului la care se va adauga randul.
• "valoare1" este valoarea pentru prima coloana din t abel, iar "valoare2" este valoarea celei
de3a doua coloane din tabel. Se pot da mai mult sau mai putin de doua valori; numarul
valorilor date ar trebui sa fie egal cu acela al co loanelor din tabel.
O coloana poate primi si valoarea "NULL", cu except ia situatiilor cand definitia coloanei nu
permite.
O forma mai buna (si recomandata) a comenzii INSERT specifica numele coloanelor carora le
sunt atribuite valorile:
INSERT INTO tabel (coloana1, coloana2) VALUES (valo are1, valoare2);
Unde coloana denumita "coloana1" primeste valoarea "valoare1", iar coloana denumita
"coloana2" primeste valoarea "valoare2".
Pot fi specificate mai mult sau mai putin de doua c oloane si valori. Numarul coloanelor
specificate trebuie sa fie egal cu numarul valorilo r specificate.
Coloanele care nu sunt denumite in comanda "INSERT" si care nu au o valoare prestabilita
(DEFAULT) primesc valoarea NULL, cu exceptia situat iilor cand valoarea respectiva nu este
permisa (in acest caz, comanda INSERT esueaza).
Daca se doreste sa adaugati mai multe randuri intr3 un tabel, intr3o singura inserare, se poate
folosi urmatoarea forma a comenzii INSERT:
35
INSERT INTO tabel (coloana1, coloana2)
VALUES (valoare1, valoare2),
(valoare3, valoare4),
(valoare5, valoare6);
Pentru a modifica valoarea unui rand sau mai multor randuri existente intr3un tabel, se foloseste o
comanda "UPDATE", care are forma:
UPDATE tabel SET coloana1=valoare1, coloana2=valoar e2
WHERE conditie;
Unde "tabel" este numele tabelului ale carui randur i urmeaza sa fie modificate, "coloana1" este
numele primei coloane care urmeaza a fi modificata, "valoare1" este valoarea care va fi
repartizata in "coloana1", "coloana2" este numele c elei de3a doua coloane care urmeaza a fi
modificata, "valoare2" este valoarea care va fi rep artizata in "coloana2", iar "conditie" identifica
randul sau randurile care urmeaza a fi actualizate, dupa o anumita conditie.
Poate fi actualizat un numar mai mare sau mai mic d e coloane. Daca se doreste ca toate randurile
coloanei sa fie actualizate, clauza "WHERE" poate f i omisa.
De exemplu, comanda urmatoare modifica din coloana "titlu" numele asociat cartii in "Curs2", in
randul unde coloana "pret" are valoarea 5.
UPDATE carte SET titlu=’Curs2’
WHERE pret=5;
Pentru a sterge un rand dintr3un tabel, folositi co manda "DELETE", care are urmatoarea forma:
DELETE FROM tabel WHERE conditie;
Daca se vrea a fi sterse toate randurile tabelului, clauza WHERE poate fi omisa.
De exemplu, comanda urmatoare sterge randul din tab elul "carte" asociat titlului "Curs2":
DELETE FROM carte WHERE titlu='Curs2';
2.8. Sortarea si gruparea
Deseori, este important ca datele sa fie raportate intr3o anumita secventa. Se poate specifica
ordinea de raportare a rezultatelor interogarii fol osind clauza " ORDER BY ", care are urmatoarea
forma:
ORDER BY valoare
Daca se vor folosi mai multe campuri de sortare, ac estea vor fi separate prin virgula.
Daca se doreste o sortare descendenta, in locul une ia ascendente, se specifica "DESC" dupa
valoare.
36
De exemplu, pentru a ordona toate cartile in functi e de pret, de la cel mai mare la cel mai mic,
respectiv dupa titlu pentru un pret egal, se poate folosi urmatoarea interogare:
SELECT pret, titlu FROM carte
ORDER BY pret DESC, titlu;
Pentru a include numai titlurile care au un pret ma i mare de 50, adaugati o clauza WHERE la
comanda SELECT:
SELECT pret, titlu FROM carte
WHERE pret>50
ORDER BY pret DESC, titlu;
SQL include functii care va permit sa raportati val ori diferite, valori utile, precum un numar al
randurilor tabelului. Iata cele mai importante func tii in acest sens:
Functie Descriere
count(*) – Numarul r andurilor din tabel
count(coloana) – Numarul r andurilor din tabel care contin o valoare
diferita de NULL in coloana specificata
count(distinct coloana) – Numarul valorilor distincte diferite de NULL care a par in
coloana specificata
avg(coloana) – Valoarea mijlocie (medie) a coloanei numerice speci ficate
min(coloana) – Valoarea minima din coloana specificata
max(coloana) – Valoarea maxima din coloana specificata
sum(coloana) – Suma valorilor din coloana specificata
De exemplu, interogarea urmatoare raporteaza numaru l cartilor si pretul mediu al acestora:
SELECT count(*), avg(pret) FROM carte;
Datele de iesire vor fi afisate pe o singura linie.
Clauza SQL "AS" specifica un nume nou pentru o colo ana sau expresie. Numele specificat este
folosit ca titlu in rapoartele SQL. Clauza "AS" est e utila in lucrul cu functiile din tabelul anterior ,
va ajuta sa identificati mai usor datele de iesire.
De exemplu, interogarea precedenta poate fi rescris a pentru a include o clauza "AS", astfel:
SELECT count(*) AS Carte_Numar,
AVG(pret) AS Pret_Mediu
FROM carte;
O alta clauza utila este " GROUP BY ", aceasta are urmatoarea forma:
37
GROUP BY coloana6sortare
Unde "coloana3sortare" este numele sau valoarea une i coloane, specificata intr3o clauza "ORDER
BY", care trebuie sa urmeze dupa clauza "GROUP BY".
De exemplu, pentru un tabel "carte" cu 4 coloane (c arteid, titlu, anul si pret), interogarea
urmatoare raporteaza numarul cartilor si pretul med iu pentru fiecare an (anul) in parte:
SELECT count(*), avg(pret) FROM carte
GROUP BY anul
ORDER BY anul;
Pentru a include in datele de iesire numai grupuril e selectate, se specifica clauza "HAVING"
imediat dupa clauza "GROUP BY". Clauza "HAVING" are urmatoarea forma:
HAVING conditie
De exemplu, pentru a include numai cartile al caror atribut "anul" are valoare mai mare decat
1980, se scrie urmatoarea interogare:
SELECT count(*), AVG(pret) FROM carte
GROUP BY anul
HAVING anul>1980
ORDER BY anul;
Mai jos sunt afisati operatorii matematici folositi in SQL:
• + Adunare
• 3 Scadere
• * Inmultire
• / Impartire
• | SAU, la nivel de bit
• & SI la nivel de bit
• >> Deplasare la dreapta
• << Deplasare la stanga
• _ Complement la nivel de bit
2.9. Expresii si functii
SQL permite formarea de expresii folosind valori di n coloane, valori literale si functii. Ca si in
PHP, se poate controla ordinea de evaluare a expres iilor SQL folosind paranteze pentru a
delimita sub3expresiile care trebuie evaluate mai i ntai.
Tabelele urmatoare rezuma functiile MySQL frecvent folosite:
38
Functii matematice frecvent folosite in MySQL
Functie Descriere
abs(x) – Valoarea absoluta a lui x
atan(x) – Arc tangenta lui x, unde x este dat in radiani
atan2(y,x) – Arc tangenta lui y/x, unde semnele ambelor argument e sunt folosite
pentru a determina cadranul cercului trigonometric
ceiling(x) – Cel mai mic intreg care nu este mai mic dec at x
cos(x) – Cosinusul lui x, unde x este exprimat in radiani
exp(x) – Baza logaritmilor naturali (e) ridicata la puterea x
floor(x) – Cel mai mare intreg care nu este mai mare dec at x
log (x) – Logaritmul natural al lui x
mod(x,y) – Restul impartirii x/y
power(x,y) – x la puterea y
rand(x) – Valoare aleatoare cu virgula, mai mare sau egala cu zero si mai mica
decat unu
sign(x) – Valoarea -1, 0 sau 1, dupa cum valoarea lui x este negativa, zero sau
pozitiva
sin(x) – Sinusul lui x, unde x este dat in radiani
sqrt(x) – Radacina patrata a lui x
tan(x) – Tangenta lui x, unde x este dat in radiani
Functii sir frecvent folosite in MySQL
Functie Descriere
ascii(s) – Codul ASCII al octetului celui mai din st anga al sirului s
char(n) – Caracter al carui cod ASCII este n
concat(s1, s2) – Concatenarea sirurilor s1 si s2; cu alte cuvinte, s 2 atasat la s1
lcase(s) – Sirul s, unde toate majusculele au fost transformat e in minuscule
left(s,n) – Primii n octeti ai sirului s, de la st anga la dreapta
length(s) – Numarul octetilor din sirul s
locate(s1, s2) – Pozitia primei aparitii a lui s1 in s2, respectiv zero daca s1 nu se
gaseste in s2
ltrim(s) – Sirul s, cu eliminarea spatiilor de inceput
right(s,n) – Primii n octeti din sirul s, de la dreapta la st anga
rpad(s1,n,s2) – Sirul s1, completat la dreapta cu sirul s2 p ana c and rezultatul are
lungimea n
rtrim(s) – Sirul s, cu spatiile finale eliminate
space(n) – Un sir alcatuit din n spatii
substring(s,m,n) – Sub -sir al lui s, care incepe de la pozitia m si care are lungimea n
trim(s) – Sub -sir al lui s, cu spatiile initiale si finale elimin ate
ucase(s) – Sirul s, cu toate minusculele convertite in majuscule
39
Functii MySQL de data si ora frecvent utilizate
Functie Descriere
dayofmonth(d) – Ziua din luna a datei specificate (1 -31)
dayofweek(d) – Ziua din saptam ana a datei specificate (1 =duminica, 2=luni,…,
7=sambata)
dayofyear(d) – Ziua din an a datei specificate (1 -366)
hour(t) – Partea orelor din momentul de timp mentionat (0 -23)
minute(t) – Partea minutelor din momentul de timp mentionat (0 -59)
month(d) – Luna datei specificate (1 -12)
now() – Data si ora curenta
second(t) – Partea secundelor din momentul de timp mentionat (0 -59)
week(d) – Saptam ana din an a datei specificate (0 -53)
year(d) – Partea anilor din momentul de timp mentionat (1000 -9999)
Functii specifice MySQL
Functie Descriere
database() – Returneaza numele bazei de date deschise
get_lock(s,n) – Obtine o blocare a bazei de date
md5(s) – Returneaza o suma de control a sirului s, calculata dupa algoritmul
MD5
password(s) – Returneaza sirul s, criptat folosind algoritmul apl icat de MySQL
parolei
release_lock(s) – Anuleaza blocarea unei baze de date
user() – Returneaza numele utilizatorului curent
version() – Returneaza numarul versiunii MySQL
2.10. Uniri
SQL permite accesul la mai multe tabele intr3o sing ura interogare, in general, aceasta operatie se
executa pentru ca datele dintr3un tabel sa poata fi folosite cu date din alt tabel.
De exemplu, sa presupunem ca baza de date este asem anatoare celei prezentate mai jos, unde sunt
doua tabele, primul numit "persoane" iar cel de3al oilea numit "meserii", si o relatie cheie externa
3 cheie primara (persoanaid) asociaza cele doua tab elele.
persoanaid nume AnNastere
001 George Washington 1732
002 John Adams 1735
003 Thomas Jefferson 1743
meserie persoanaid
Arhitect 003
General 001
Filozof 002
40
Sa examinam urmatoarea interogare:
SELECT nume, meserie FROM persoane, meserii
WHERE persoane.persoanaid=meserii.persoanaid;
Constructiile "persoane.persoanaid" si "meserii.per soanaid" se numesc "nume definite", prima se
refera la coloana "persoanaid" din tabelul "persoan e", iar a doua se refera la coloana "persoanaid"
a tabelului "meserii".
Clauza WHERE asigura o echivalenta intre valoarea c heii externe din tabelul "meserii" cu aceea
a cheii primare din tabelul "persoane", (in absenta clauzei WHERE, se va stabili o corespondenta
intre fiecare rand din tabelul cu meserii si fiecar e rand din tabelul cu persoane; un asemenea
rezultat, numit "produs cartezian", contine in gene ral multe randuri 3 majoritatea nedorite 3 si ca
atare trebuie evitat).
Rezultatul interogarii de mai sus este un raport ca re indica numele si meseria asociata fiecarui
angajat prezentat in tabelul "meserii".
O interogare ca aceasta, care combina date din mai multe tabele, se numeste "unire". Sunt
posibile si uniri mai complexe, care implica trei s au mai multe tabele.
Daca un rand dat din tabelul principal (aici "perso ane") nu are nici un rand asociat in tabelul cu
detalii (aici "meserii"), randul respectiv din tabe lul principal nu va aparea in datele de iesire ale
unei uniri. In cazul acesta, pentru a determina apa ritia acestei inregistrari din tabelul principal, s e
poate folosi o categorie speciala de unire, cunoscu ta sub numele de "unire la stanga" sau "unire
exterioara la stanga". Iata un exemplu:
SELECT nume, meserie FROM persoane
LEFT JOIN meserii
ON persoane.persoanaid = meserii.persoanaid;
Aceasta interogare va afisa toate persoanele, indif erent daca acestea au sau nu asociata o meserie.
Persoanele fara o meserie au specificatia NULL in c oloana corespunzatoare meseriei.
2.11. Conectarea la serverul MySQL
Pentru a utiliza o baza de date MySQL, avem nevoie de o conexiune la serverul de baze de date.
Aceasta conexiune va fi utilizata ca punct de acces s pentru comenzi mysql.
Pentru a va conecta la un server MySQL, utilizati f unctia mysql_connect() , a carei sintaxa este
urmatoarea:
mysql_connect(nume_gazda, nume_utilizator, parola)
Unde "nume_gazda" este numele gazdei, serverul pe c are ruleaza serviciul MySQL,
"nume_utilizator" este numele utilizatorului care s e conecteaza la serverul MySQL, iar "parola"
este parola MySQL asociata utilizatorului.
41
In cazul in care serverul MySQL ruleaza pe calculat orul dv. personal, parametrul "nume gazda"
este in general "localhost". In alte cazuri, daca s erverul MySQL ruleaza pe un alt computer, va
trebui specificata adresa computerului pe care rule aza serverul MySQL.
Functia returneaza FALSE in caz de esec; in caz con trar, returneaza o valoare denumita
identificator de legatura, care serveste ca instrum ent de manipulare pentru accesul la serverul
MySQL.
Iata un exemplu de utilizare a functiei mysql_connect() :
<?
$conn = mysql_connect( "localhost", "Dan", "mypass" )
or die("Unable to connect to MySQL");
print "Connected to MySQL <br />";
?>
In acest exemplu, serverul MySQL ruleaza pe "localh ost" ca si modulul PHP, utilizatorul este
"Dan" iar parola "mypass".
Dupa executia acestui script, daca nu se reuseste c onectarea la MySQL, va aparea mesajul
"Unable to connect to MySQL", in caz de reusita, ap are mesajul "Connected to MySQL"
In mod prestabilit, functia mysql_connect() se conecteaza la serviciul MySQL prin intermediul
portului 3306, portul MySQL standard. Daca doriti s a obtineti accesul la un server MySQL care
ruleaza pe un port non3standard, puteti atasa un ca racter doua puncte si numarul portului dorit la
argumentul care contine numele gazdei; de exemplu, "localhost:3308".
Dupa ce programul a obtinut o conexiune cu serverul MySQL, inainte de a lucra cu tabelele
dintr3o baza de date MySQL, programul trebuie sa se lecteze baza de date respectiva. Pentru
aceasta, se foloseste functia mysql_select_db() , care are urmatoarea forma:
mysql_select_db(baza_de_date)
Unde "baza_de_date" este numele bazei de date la ca re urmeaza a se obtine acces.
Functia returneaza TRUE daca poate obtine accesul l a baza de date, respectiv FALSE in caz
contrar.
Iata un exemplu de selectare a bazei de date "lucru db":
<?
$conn = mysql_connect( "localhost", "Dan", "mypass" )
or die("Unable to connect to MySQL");
$selectdb = mysql_select_db('lucrudb');
if ($selectdb)
echo "Baza de date lucrudb a fost selectata <br />";
42
else
echo "<br />". mysql_errno(). " : ". mysql_erro r();
mysql_close();
?>
2.12. Incheierea conexiunii la serverul MySQL
Pentru terminara unei conexiuni la serverul MySQL s e foloseste instructiunea: mysql_close().
Aceasta functie inchide conexiunea curenta. Functia returneaza TRUE in caz de reusita; in caz
contrar, returneaza FALSE.
In general, nu este necesara invocarea functiei mys ql_close(), deoarece PHP inchide automat
conexiunile deschise cu bazele de date atunci cand un script isi incheie executia.
Iata un exemplu de conectare la serverul MySQL si i nchidere a conexiunii folosind functia
mysql_close() :
<?
$conn = mysql_connect( "localhost", "Dan", "mypass" )
or die("Unable to connect to MySQL");
// Aici se adauga datele necesare lucrului cu serve rul MySQL
mysql_close();
?>
2.13. Detectarea si eliminarea de erori si avertism ente
Biblioteca MySQL din PHP furnizeaza doua functii de verificare a erorilor, si anume
mysql_errno() si mysql_error() .
Fiecare functie returneaza un rezultat care reflect a eroarea, daca aceasts exista.
Nici una din cele doua functii nu necesita argument e. Functia mysql_errno() returneaza un cod
numeric de eroare, in timp ce functia mysql_error() returneaza un sir care descrie eroarea. Daca
nu s3a produs nici o eroare, codul numeric al erori i este zero si descrierea are ca valoare un sir
vid.
Informatiile de eroare sunt disponibile numai daca este activa o conexiune cu serverul MySQL.
Prin urmare, intai trebuie sa se reuseasca conectar ea la MySQL.
Iata cum se pot folosi functiile respective pentru a verifica modul de operare a functiei
mysql_select_db() (aceasta selecteaza baza de date pentru lucru):
<?
43
$conn = mysql_connect( "localhost", "Dan", "mypass" )
or die("Unable to connect to MySQL");
print "Connected to MySQL<br />";
mysql_select_db("lucrudb");
if (mysql_error()) {
echo "<br />". mysql_errno(). " : ". mysql_erro r();
}
?>
Daca se reuseste conexiunea la serverul MySQL si ba za de date cu numele "lucrudb" este
inexistenta, rezultatul afisat de exemplul de mai s us va fi urmatorul:
Connected to MySQL
1049 : Unknown database 'lucrudb'
Numeroase functii PHP pot produce erori sau mesaje de avertizare care ii pot deruta pe
utilizatorii siturilor Web sau le pot cauza neplace ri.
PHP furnizeaza functia error_reporting(), care va p ermite sa eliminari mesajele nedorite. Functia
are urmatoarea forma:
error_reporting(mask)
unde "mask" specifica tipul mesajelor care vor fi r aportate. Daca e specificat zero ca valoare a
atributului "mask" (error_reporting(0)), nu va fi r aportat nici un mesaj. Daca e specificat
"E_ALL" in loc de "mask" (error_reporting(E_ALL)), vor fi raportate toate mesajele.
Sau, o alta metoda pentru oprirea mesajelor de eroa re, este adaugand @ inaintea functiei.
44
3. jQuery si Ajax
3.1. Despre jQuery
jQuery este o platforma de dezvoltare JavaScript, c onceputa pentru a usura si imbunatati procese
precum traversarea arborelui DOM in HTML, managemen tul inter3browser al evenimentelor,
animatii si cereri tip AJAX. jQuery a fost gandit s a fie cat mai mic posibil, disponibil in toate
versiunile de browsere importante existente, si sa respecte filosofia "Unobtrusive JavaScript".
jQuery se poate folosi pentru a rezolva urmatoarele probleme specifice programarii web:
• selectii de elemente in arborele DOM folosind propr iul motor de selectii open source
Sizzle, un proiect nascut din jQuery
• parcurgere si modificarea arborelui DOM (incluzand suport pentru selectori CSS 3 si
XPath simpli)
• inregistrarea si modificarea evenimentelor din brow ser
• manipularea elementelor CSS
• efecte si animatii
• cereri tip AJAX
• extensii
• utilitati 3 versiunea browser3ului, functia each .
Plugin3urile sau extensiile sunt unele dintre cele mai interesante aspecte ale jQuery. Arhitectura
sa permite programatorilor sa dezvolte subaplicatii bazate in biblioteca principala care extind
functiile de baza jQuery cu functii specifice plugi n3ului. In acest fel biblioteca principala poate
ocupa foarte putin spatiu, iar extensiile necesare in anumite pagini web pot fi incarcate la cerere,
doar cand este nevoie de ele. Exista un set de exte nsii principal numit jQuery UI ( jQuery User
Interface). jQuery UI ofera un set de extensii pent ru interactivitate de baza, efecte mai complexe
decat cele din biblioteca de baza si teme de culori . Avantajul jQuery UI fata de alte extensii este
ca dezvoltarea si testarea acestor componente se fa ce in paralel cu dezvoltarea bibliotecii
principale, minimizand riscul de incomptibilitate.
Orice programator poate crea o extensie si jQuery o fera publicare in catalogul de pe pagina
proiectului in diversele categorii disponibile.
45
3.2. Despre AJAX
Ajax (sau AJAX), prescurtare pentru Asynchronous Ja vaScript and XML, este o tehnica de
programare pentru crearea de aplicatii web interact ive. Intentia este sa faca paginile web sa
devina mai rapide si deci mai acceptate, prin schim bul in fundal al unor cantitati mici de date cu
serverul, astfel incat sa nu fie nevoie ca pagina s a fie reincarcata la fiecare actiune a utilizatorul ui.
Aceasta are ca scop cresterea interactivitatii, vit ezei si usurintei in utilizare a aplicatiilor web.
Ajax nu este o tehnologie in sine. Termenul este fo losit pentru definirea aplicatiilor web ce
folosesc un ansamblu de tehnologii:
• HTML sau XHTML pentru structura semantica a informa tiilor;
• CSS pentru prezentarea informatiilor;
• Javascript pentru interactivitate, pentru procesare a informatiilor prezentate;
• Obiectul XMLHttpRequest pentru schimbul si manipula rea informatiilor intr3o maniera
asincrona cu server3ul web;
• XML este folosit de obicei pentru transferarea date lor intre server si client, desi orice
format functioneaza, inclusiv HTML preformatat, tex t simplu etc.
46
4. Aplicatia WEB
4.1. Depre aplicatie
Link pentru aplicatia online: http://licenta.tekster.ro/
Aplicatia web consta intr3un unui site dedicat come rcializarii online de produse si servicii,
caracterizat printr3o structura versatila, ce permi te atat administrarea facila a continutului de catr e
posesor, cat si adaugarea, modificarea, customizare a feature3urilor de catre programator.
Site3ul dispune de urmatoarele sectiuni:
• Prima pagina (Home) – este pagina de „primire” a vi zitatorului, ce contine link3uri catre
toate sectiunile importante ale site3ului. In plus, dispune de zone de promovare a
produselor si serviciilor (prin intermediul slider3 elor, banner3elor, box3uri cu diverse
informatii).
• Contact – pagina in care sunt mentionate datele de contact (email, telefon, adresa, orar
etc) si care contine un formular prin intermediul c aruia user3ul poate contacta
administratorul.
• Pagini de tip „text” – in care sunt oferite informa tii utile, date si intructiuni exacte,
detaliate referitoare la modul de operare al magazi nului virtual. Exemple: Despre noi,
Termeni si conditii, Politica de confidentialitate, etc.
• Intrebari frecvente – reprezinta o listare de itemi de forma intrebare3raspuns, cu rolul de a
informa clientii in problemele cele mai des intalni te.
• Articole – prezinta rol multiplu: atat ca sursa de informatii (stiri recente, articole din
domeniu, noutati), cat si un plus de SEO (Search En gine Optimization) sporind
vizibilitatea site3ului la cautari in diferite moto are. Articolele sunt listate, pe pagini, cu
preview, dar dispun si de o pagina interioara, cu i nformatii complete.
• Produse – reprezinta obiectul central al site3ului, intrucat scopul primar consta in vanzarea
a cat mai multor itemi, in vederea maximizarii prof itului.
Itemii sunt caracterizati printr3o serie de proprie tati (titlu, descriere, cod, culori, imagini,
rating, brand etc) si sunt organizati ierarhic: pe categorii, subcategorii si subsubcategorii.
Fiecarui produs ii este asociat un producator (bran d) si un set de stocuri (organizate pe
marimi).
Promotiile reprezinta o listare de produse care sun t setate ca fiind „promo”.
• Cosul meu – sumar al produselor ce urmeaza a fi cum parate. Prezinta posibilitati de
editare (modificare cantitate, stergere).
De aici se poate inainta catre formular de comanda, dupa care catre finalizarea acesteia.
• Zona de useri – in cazul in care user3ul nu este lo gat: Login, Inregistrare, Recuperare
parola. Pentru useri logati: Contul meu (informatii cont, cu posibilitate de editare),
Schimbare parola, Istoric comenzi.
47
4.2. Structura bazei de date
48
Tabelele:
• admin_lang
• admin_leftmenu
• admin_leftsubmenu
• admin_menu
• admin_type
• admin_type_action
• admin_users
• admin_users_activity
• admin_users_login
contin informatii legate de structura modulului de administrare si sunt folosite pentru a stoca
informatii despre structura CMS3ului (Content Manag ement System), statistici, conturi ale
administratorilor, permisii, istoric de activitati.
Tabelele:
• newsletter
• newsletter_articles
• newsletter_articles_image
• newsletter_config
• newsletter_groups
• newsletter_log
• newsletter_to_send
• newsletter_users
contin informatiile rezultate in urma construirii u nui newsletter, ce poate fi ulterior trimis
abonatilor din site.
Accentul se va pune insa pe interfata cu user3ul a aplicatiei.
• article – contine elementele de tip articole, caracterizat e prin id unic, id parinte (daca este
cazul), titlu, descriere, descriere meta, cuvinte c heie meta, indice de ordine, status
(activ/inactiv).
• article_image – contine itemii de tip imagine asociati articolel or 3 id unic, id parinte,
nume fisier, indice de ordine.
49
• brand – contine itemii de tip brand/producator asociati elementelor de tip produs – id
unic, descriere, imagine, descriere meta, cuvinte c heie meta, indice de ordine, status.
• color – contine culorile disponibile pentru produse – id unic, titlu, indice de ordine, status.
• color_prod – tabel de legatura intre culori si produse 3 id c uloare, id produs.
• config – contine variabile ce sporesc configurabilitatea elementelor din site (numere de
telefon, adrese de email, texte pentru SEO) – id un ic, titlu variabila, valoare, ordine.
• faq – tabel cu elemente de tip FAQ (Frequently Asked Q uestions) – id unic, id parinte
(daca e cazul), titlu (intrebare), descriere (raspu ns), indice de ordine, status.
• feed – contine informatii despre diferite feed3uri din care se pot importa produse.
• feed_prod_category – contine categoriile produselor rezultate din fee d3uri.
• furnizor – contine furnizorii de feed3uri.
• media – contine intrari pentru fisiere uploadate (imagin i, documente, audio), ce pot fi
plasate in descrierea altor pagini (articole, produ se, texte) – id unic, titlu, indice de ordine,
status, denumire fisier.
50
• orders – contine comenzile plasate in cadrul site3ului – id unic, id user inregistrat, data
(format simplu si fomat complet 3 data + ora), stat us comanda (platita, in procesare,
anulata etc.), flag pentru trimiterea mail3ului cu proforma, pretul total al produselor, pretul
transportului, tipul transportului, valoare discoun t, id voucher aplicat pentru discount, titlu
voucher, detalii discount, informatii cumparator (n ume, judet, oras, adresa, judet de
livrare, oras de livrare, adresa de livrare, numar de telefon, email, flag pentru
achizitionare produse pe firma, informatiii firma ( nume, nr. Reg. Com., cod fiscal, banca,
cont), observatii ale cumparatorului atasate comenz ii.
• orders_obs – observatii atasate comenzilor de catre administr ator – id unic, id comanda
parinte, date + ora, descriere, status, indice de o rdine.
51
• orders_what – contine produsele din cadrul unei comenzi plasat e – id unic, id comanda
parinte, id produs, titlu, marime, cantitate, pret.
• prod – contine produsele comercializate – id unic, id3u ri parinti (categorie, subcategorie,
subsubcategorie), id tip asociat, id brand asociat, titlu, cod, descriere, preturi (defaut,
preluat din feed, promotional), discount, rating ge neral, timp de livrare, id produse
relationate (4), descriere meta, cuvinte cheie meta , data aparitiei, flag3uri (pentru aparitie
pe home, produs recomandat, produs romanesc, promo tional, super sale, 2+1 gratis,
importat, cu zoom pe imagini HQ), data ultimei modi ficari, feed3ul si furnizorul de
provenienta, indice de ordine, status.
52
• prod_category – contine parintii de tip categorie (primul nivel) ai produselor – id unic,
titlu, descriere, imagine, descriere meta, cuvinte cheie meta, indice de ordine, status.
• prod_subcategory – contine parintii de tip subcategorie (al doilea nivel) ai produselor –
id unic, id parinte (categorie), titlu, descriere, imagine, descriere meta, cuvinte cheie meta,
indice de ordine, status.
• prod_subsubcategory – contine parintii de tip subcategorie (al doilea nivel) ai
produselor – id unic, id3uri parinti (categorie, su bcategorie), titlu, descriere, imagine,
descriere meta, cuvinte cheie meta, indice de ordin e, status.
53
• prod_comment – contine comentariile asociate produselor – id un ic, id produs parinte, id
comentariu parinte (daca e cazul de reply, comentar ii „nested”), informatii user (nume,
email, opinie, ip), data publicarii, indice de ordi ne, status.
• prod_image – contine imaginile asociate produselor – id unic, id produs parinte,
denumire fisier, folder3ul in care se afla, indice de ordine.
• prod_stock – contine stocurile disponibile pentru un produs – id produs, marime, numar
disponibil, indice de ordine.
• prod_type – contine tipurile disponibile pentru produse – id unic, titlu, indice de ordine,
status.
• prod_votes – contine voturile fiecarui produs, din care se ca lculeaza rating3ul prin medie
aritmetica – id produs, lista de ip3uri, suma votur ilor.
54
• promo – contine elemente de tip promotional afisate cu s cop publicitar – id unic, titlu,
descriere, link, tip (in functie de locul unde este afisat 3 home, footer, header), imagine,
indice de ordine, status.
• slider – contine elemente folosite pentru popularea slide r3ului din home – id unic, titlu,
descriere, link, tip (in functie de locul unde este afisat 3 home, footer, header), imagine,
indice de ordine, status.
• text – contine paginile de tip text (Date de contact, D espre noi, Termeni si conditii,
Confidentialitate, Concurs, Livrare, Reduceri, Info generale etc.) – id unic, titlu, descriere,
descriere meta, cuvinte cheie meta, indice de ordin e, status.
• text_image – contine imaginile asociate paginilor de tip text – id unic, id pagina parinte,
denumire fisier, indice de ordine.
• users_buy – contine conturile user3ilor inregistrati – id uni c, nume, parola (encriptata
md5), date generale (judet, oras, livrare), informa tii de livrare (judet, oras, adresa), numar
de telefon, adresa de email, flag pentru plata pe f irma, informatii de facturare pe firma
(nume, nr. Reg. Com., cod fiscal, banca, cont), sta tus.
55
• voucher – contine reduceri bazate pe cod, aplicabile comen zilor – id unic, titlu, tip
(valorice, procentuale), utilizabilitate (unice, pe rmanente), valoare, flag pentru transport
gratuit, numar minim de produse obligatoriu, valoar e minima a comenzii obligatorie,
indice de ordin, status.
56
4.3. Conectare la baza de date
Se realizeaza in fisierul config.php inclus in toate paginile:
<?
define("DB_HOSTNAME", "localhost");
define("DB_DATABASE", "prologue_licenta");
define("DB_USER", "prologue_licenta");
define("DB_PASS", "licenta");
define("SITE_PATH","http://licenta.tekster.ro/");
$conn = mysql_connect(DB_HOSTNAME, DB_USER, DB_PASS ) or
trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db(DB_DATABASE, $conn);
?>
4.4. Structura fisierelor
Fisierele sunt structurate in modul urmator:
• Backend – contine fisierele ce contin partea de int erogare MySQL + programarea PHP
pentru fiecare tip de pagina in parte.
• Frontend – contine fisierele ce contin structura HT ML populata de array3urile si
variabilele PHP cu informatie ceruta pentru fiecare tip de pagina in parte.
• Scripts – contine colectii de functii si clase PHP si librarii, plugin3uri si functii Javascript
(predominant jQuery).
• CSS – contine partea statica folosita la stilizarea site3ului (fisiere de tip .css, imagini,
icon3uri).
La fiecare request, in functie de setul de parametr i asociat link3ului de catre regula din .htaccess
este accesat fisierul principal din folder3ul root care include:
• fisierul „config.php” in care se realizeaza conexiu nea la baza de date si in care se definesc
informatii generale, valabile pentru tot continutul site3ului.
• script3uri.
• fisierul din backend asociat.
• structura html – formata din elementele comune (hea der, footer) + fisierul din frontend
asociat.
Mai jos este un exemplu, pentru pagina de articol ( continutul fisierului principal article.php ):
<?
include 'include/config.php';
57
include 'scripts/php/functions.php';
$_page = 'article';
include 'include/backend/article.php';
include 'include/meta.php';
?>
<body>
<div id="wrapper" class="ui6margin6h6auto">
<? include 'include/header.php'; ?>
<? include 'include/content/article.php'; ?>
<? include 'include/footer.php'; ?>
</div>
</body>
</html>
4.5. Fisierul .htaccess
.htaccess este un fisier de configurare care actioneaza la n ivelul sistemului de configurare al
serverului Apache, modul de actiune al acestuia est e foarte puternic, chiar si o mica eroare de
sintaxa (cum ar fi lipsa unui spatiu) poate duce la o functionare gresita a serverului.
Comenzile din .htaccess actioneaza la nivel de dire ctor, influentand toate fisierele din directorul
curent (in care acesta se afla) cat si subdirectoar ele acestuia. Puteti pune un fisier .htaccess in
fiecare director, daca doriti setari diferite, un s ubdirector va fi afectat de cel mai aproape
.htaccess.
Pentru a minimiza numar de reguli scrise, se pot fo losi expresii regulate. O expresie regulata, pe
scurt denumita și RegEx sau RegExp, este un șir de caractere care descrie un model de cautare in
alt șir de caractere. Astfel, link3ul este analizat si in functie de regula in care se incadreaza, est e
accesata pagina dorita.
Printr3o singura regula de .htaccess scrisa cu RegE x poate fi parsat un numar nelimitat de link3
uri, acest lucru permitand site3ului sa dispuna de un set oricat de mare de link3uri SEO3friendly,
oferind totodata si un prim filtru de validare al i nformatiilor trimise spre prelucrare.
58
4.6. Popularea meniului principal
Sunt folosite structuri repetitive foreach (imbricate pe 3 nivele, pentru a interoga categorii , cu
subcategorii, cu subsubcategorii).
Apar functiile definite de user:
• db_array_results() – simplifica codul pentru interogarea bazei de date .
<?
function db_array_results($query, $debug = false) {
$rows = mysql_query($query);
$err = mysql_error();
if($debug) echo $query.' ';
echo $err;
if(empty($err)) {
$results = array();
while($row = mysql_fetch_assoc($rows)) $results[] = $row;
mysql_free_result($rows);
}
return $results;
59
}
?>
• generate_name() – transforma orice sir de caractere intr3un string integrabil in link, prin
inlocuirea spatiilor cu caracterul underscore _ , i nlocuirea diacriticelor cu simbolurile
corespunzatoare din alfabetul englezesc, etc.
<?
function generate_name($string) {
$to_be_replaced = array('&' => ' and ', '&micr o;' =>
'u', 'À' => 'A', 'Á' => 'A', 'Â ;' => 'A',
'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A ', 'Æ'
=> 'AE', 'Ç' => 'C', 'È' => 'E', '&Ea cute;' => 'E',
'Ê' => 'E', 'Ë' => 'E', 'Ì' => ' I', 'Í'
=> 'I', 'Î' => 'I', 'Ï' => 'I', 'Ñ ;' => 'N',
'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O',
'Õ' => 'O', 'Ö' => 'O', 'Ø' => ' O', 'Ù'
=> 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü ;' => 'U',
'Ý' => 'Y', 'ß' => 'ss', 'à' => 'a',
'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä'
=> 'a', 'å' => 'a', 'æ' => 'ae', '&cced il;' => 'c',
'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë'
=> 'e', 'ì' => 'i', 'í' => 'i', '&ici rc;' => 'i',
'ï' => 'i', 'ñ' => 'n', 'ò' => ' o', 'ó'
=> 'o', 'ô' => 'o', 'õ' => 'o', 'ö ;' => 'o',
'ø' => 'o', 'ù' => 'u', 'ú' => 'u',
'û' => 'u', 'ü' => 'u', 'ý' => 'y ', 'ÿ' =>
'y', 'Œ' => 'OE', 'œ' => 'oe', '&Scaron ;' => 'S',
'š' => 's', 'Ÿ' => 'Y', '–' => '6 ', 'ă' =>
'a', 'Ă' => 'A', 'â' => 'a', 'Â' => 'A', 'î'
=> 'i', 'Î' => 'I', 'ş' => 's', 'Ş' => 'S',
'ţ' => 't', 'Ţ' => 'T', '%C5%A2' => 'T', '%C5%A3' =>
't', '%C8%9A' => 'T', '%C8%9B' => 't', '%C4%83' => 'a', '%C4%82'
=> 'A', '%C3%A2' => 'a', '%C3%82' => 'A', '%C3%AE' => 'i',
'%C3%8E' => 'I', '%C8%99' => 's', '%C8%98' => 'S', '%C5%9F' =>
's', '%C5%9E' => 'S');
$string = strip_tags($string);
$string = decode_utf8($string);
$string = htmlentities($string, ENT_QUOTES, 'utf68 ');
$string = str_replace( array_keys($to_be_replaced) ,
array_values($to_be_replaced), $string );
$string = preg_replace("@[^A6Za6z069\6]+@i","6",$s tring);
$string = preg_replace("@[\6]+@i","6",$string);
$string = str_replace(array("6quot6","6amp6","6nda sh6"),"6
",$string);
60
return strtolower(trim($string, '6'));
}
?>
In functia generate_name() este folosita si functia decode_utf8()
<?
function decode_utf8($string) {
$accented = array( 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ',
'Ă', 'Ą', 'Ç', 'Ć', 'Č', 'Œ', 'Ď', 'ð', 'à', 'á', ' a', 'ã', 'ä',
'å', 'æ', 'a', 'ą','ç', 'ć', 'č', 'œ', 'ď', 'ñ', ' È', 'É', 'Ê',
'Ë', 'Ę', 'Ě', 'Ğ', 'Ì', 'Í', 'I', 'Ï', 'Đ', 'Ĺ', ' Ľ', 'Ł', 'è',
'é', 'ê', 'ë', 'ę', 'ě', 'ğ', 'ì', 'í', 'i', 'ï', ' ı', 'ĺ', 'ľ',
'ł', 'Ñ', 'Ń', 'Ň', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', ' İ', 'Ŕ', 'Ř',
'Ś', 'Ș', 'Š', 'ñ', 'ń', 'ň', 'ò', 'ó', 'ô', 'ö', ' ø', 'ı', 'ŕ',
'ř', 'ś', 'ș', 'š', 'ł', 'Ť', 'Ù', 'Ú', 'Û', 'Ų', ' Ü', 'Ů', 'Ő',
'Ý', 'ß', 'Ź', 'ś', 'Ž', 'Ń', 'ť','ù', 'ú', 'û', 'ų ', 'ü', 'ů',
'ő', 'ý', 'ÿ', 'ź', 'Ŝ', 'ž', 'А', 'Б', 'В', 'Г', ' Д', 'Е', 'Ё',
'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', ' Р', 'а', 'б',
'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', ' л', 'м', 'н',
'о', 'р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', ' Щ', 'Ъ', 'Ы',
'Ь', ' Э ', ' Ю ', ' Я ', ' с ', ' т ', ' у ', ' ф ', ' х ', ' ц ', ' ч ', ' ш ', ' щ ',
' ъ ', ' ы ', ' ь ', ' э ', ' ю ', ' я ');
$replace = array('A', 'A', 'A', 'A', 'A', ' A', 'AE', 'A',
'A', 'C', 'C', 'C', 'CE', 'D', 'D', 'a', 'a', 'a', 'a', 'a', 'a',
'ae', 'a', 'a', 'c', 'c', 'c', 'ce', 'd', 'd', 'E', 'E', 'E',
'E', 'E', 'E', 'G', 'I', 'I', 'I', 'I', 'I', 'L', ' L', 'L', 'e',
'e', 'e', 'e', 'e', 'e', 'g', 'i', 'i', 'i', 'i', ' i', 'l', 'l',
'l', 'N', 'N', 'N', 'O', 'O', 'O', 'O', 'O', 'O', ' O', 'R', 'R',
'S', 'S', 'S', 'n', 'n', 'n', 'o', 'o', 'o', 'o', ' o', 'o', 'r',
'r', 's', 's', 's', 'T', 'T','U', 'U', 'U', 'U', 'U ', 'U', 'U',
'Y', 'Y', 'Z', 'Z', 'Z', 't', 't', 'u', 'u', 'u', ' u', 'u', 'u',
'u', 'y', 'y', 'z', 'z', 'z', 'A', 'B', 'B', 'r', ' A', 'E', 'E',
'X', '3', 'N', 'N', 'K', 'N', 'M', 'H', 'O', 'N', ' P', 'a', 'b',
'b', 'r', 'a', 'e', 'e', 'x', '3', 'n', 'n', 'k', ' n', 'm', 'h',
'o', 'p', 'C', 'T', 'Y', 'O', 'X', 'U', 'u', 'W', ' W', 'b', 'b',
'b', 'E', 'O', 'R', 'c', 't', 'y', 'o', 'x', 'u', ' u', 'w', 'w',
'b', 'b', 'b', 'e', 'o', 'r');
return str_replace($accented, $replace, $str ing);
}
?>
61
Codul pentru constructia meniului principal, cu exp licatiile pasilor sub forma de comentarii:
<?
/* query pentru selectarea categoriile active cu de scendenti activi,
ordonate dupa indice */
$_nav_categories = db_array_results('
SELECT prod_category.* FROM prod
JOIN prod_category USING(id_prod_category)
JOIN prod_subcategory USING(id_prod_subcategory)
JOIN prod_subsubcategory USING(id_prod_subsubcate gory)
WHERE prod.active = 1 AND prod_subsubcategory.acti ve = 1
AND prod_subcategory.active = 1 AND prod_category.a ctive = 1
GROUP BY id_prod_category
ORDER BY prod_category.order
');
foreach($_nav_categories as &$category) {
// generare link pentru categorie
$category['url'] = $_base.generate_name($category[ 'title']).'/';
/* query pentru selectarea subcategoriile active i n care exista
produse recent adaugate – in functie de o variabila $_news_days ce
contine numarul ultimelor zile din care un produs e considerat recent
*/
$category['new_sub'] = db_array_results('
SELECT prod_subcategory.id_prod_subcategory,
prod_subcategory.title FROM prod
JOIN prod_subcategory USING(id_prod_subcategory)
JOIN prod_subsubcategory USING(id_prod_subsubcat egory)
WHERE DATE_SUB(NOW(), INTERVAL '.$_news_days.' DAY) <=
prod.created
AND prod.id_prod_subcategory =
prod_subcategory.id_prod_subcategory
AND prod_subcategory.id_prod_category =
"'.$category['id_prod_category'].'"
AND prod.active = 1 AND prod_subcategory.active = 1
62
AND prod_subsubcategory.active = 1
GROUP BY prod.id_prod_subcategory
ORDER BY prod_subcategory.order
');
foreach($category['new_sub'] as &$subcategory) {
/* generare link pentru fiecare subcategorie, cu f iltrare spre
afisare de produse noi */
$subcategory['url'] =
$category['url'].generate_name($subcategory['title' ]).'/produse6noi/';
unset($subcategory);
}
/* query pentru selectarea tuturor subcategoriile a ctive in care
exista subsubcategorii active cu produse active, or donate */
$category['sub'] = db_array_results('
SELECT prod_subcategory.* FROM prod
JOIN prod_subcategory USING(id_prod_subcategory)
JOIN prod_subsubcategory USING(id_prod_subsubcat egory)
WHERE prod.active = 1 AND prod_subsubcategory.act ive = 1
AND prod_subcategory.active = 1
AND prod_subcategory.id_prod_category =
"'.$category['id_prod_category'].'"
GROUP BY id_prod_subcategory
ORDER BY prod_subcategory.order
');
foreach($category['sub'] as &$subcategory) {
// generare link pentru subcategorie
$subcategory['url'] =
$category['url'].generate_name($subcategory['title' ]).'/';
/* query pentru selectarea subsubcategoriilor act ive in care
exista produse active */
$subcategory['sub'] = db_array_results('
SELECT prod_subsubcategory.* FROM prod
63
JOIN prod_subsubcategory
USING(id_prod_subsubcategory)
WHERE prod.active = 1 AND prod_subsubcategory.ac tive=1
AND prod_subsubcategory.id_prod_subcategory =
"'.$subcategory['id_prod_subcategory'].'"
GROUP BY id_prod_subsubcategory
ORDER BY prod_subsubcategory.order
');
foreach($subcategory['sub'] as &$item) {
// generare link pentru subcategorie
$item['url'] =
$subcategory['url'].generate_name($item['title']).' /';
unset($item);
}
unset($subcategory);
}
/* query pentru selectarea aleatorie a 15 branduri ce au produse
in categoria curenta */
$category['brands'] = db_array_results('
SELECT brand.* FROM brand
JOIN prod USING(id_brand)
JOIN prod_subcategory USING(id_prod_subcategory)
JOIN prod_subsubcategory USING(id_prod_subsubcat egory)
WHERE brand.active and prod.active = 1
AND prod_subcategory.active = 1
AND prod_subsubcategory.active = 1
AND prod.id_prod_category =
"'.$category['id_prod_category'].'"
GROUP BY id_brand
ORDER BY RAND()
LIMIT 15
');
64
foreach($category['brands'] as &$brand) {
// generare link brand, cu filtru de categorie ac tiv
$brand['url'] =
$_base.$_urls['brand'].generate_name($brand['title' ]).'/'.
generate_name($category['title']).'/';
unset($brand);
}
unset($category);
}
?>
4.7. Validarea formularelor (clasa Validate )
Validarea datelor inseamna obligarea utilizatorului sa trimita doar date intr3un format permis. De
exemplu: numele sa nu contina decat litere mari, mi ci spatiu si cratima, numarul de telefon sa
contina doar cifre (eventual si punct), numele de u tilizator sa fie intre 5 si 10 caractere, parola sa
fie minim 7 caractere, etc.
Intr3o aplicati, validarea datelor este obligatorie din urmatoarele motive:
• Securitate
• Consistenta bazei de date
Clasa de validare a formularelor in PHP
<?
class Validate extends ArrayObject {
// Sursa valorilor($_GET sau $_POST).
private $src = array();
// Valorile (dupa ce au fost aplicate functiile de callback).
private $values = array();
// Vector care contine seturile de reguli de valid are.
private $rules = array();
// Vector de erori pentru fiecare camp.
private $errors = array();
// Posibile mesaje de eroare (in functie de limba) .
65
private $error_messages = array();
// Numele campurilor.
private $names = array();
// Vector care contine true/false pentru fiecare c amp.
private $valid = array();
// Validitatea intregului formular.
private $is_valid = null;
// Valoare temporara. Inlocuieste wildcard6ul %va lue% in
mesajele de eroare. E rescrisa dupa fiecare folosir e de check_value().
public static $error_value = '';
// Valoare statica temporara. Folosita de check_va lue() pentru a
stoca valorile procesate.
public static $value = '';
// Lista de reguli acceptate
private static $allowed_rules = array( 'required', 'numeric',
'alphanumeric', 'min', 'max', 'in', 'not', 'match', 'regexp',
'minlength', 'maxlength', 'email', 'array', 'mincou nt', 'maxcount');
//List of allowed callback functions to transform the values.
private static $allowed_callbacks = array('trim', 'escape',
'replace', 'md5', 'uppercase', 'lowercase', 'titlec ase', 'round');
/* Split – functie care cauta separatoare intruse.
* @param $token 6 separatorul.
* @param $string – string6ul.
* @return 6 vectorul. */
static function split($token, $string) {
$parts = explode($token, $string);
$return = array();
foreach($parts as $i => $part) {
if($part[strlen($part) 6 1] == '\\') {
$parts[$i] = substr($parts[$i], 0, 61).$token;
$parts[$i] .= $parts[$i + 1];
unset($parts[$i + 1]);
66
}
}
foreach($parts as $part) $return[] = $part;
return $return;
}
/* Class constructor.
* @param $rules – vectore de reguli pe camp.
* @param $error – vector de erori pe camp.
* @param $src 6 accepta GET sau POST. Default est e POST. */
function __construct($rules, $src = 'post') {
global $_error_messages;
if($src == 'post') $this6>src = $_POST;
elseif($src == 'get') $this6>src = $_GET;
if(!is_array($this6>src)) {
$this6>src = array();
}
if(!count($this6>src)) {
foreach($rules as $field => $rule) {
$this6>valid[$field] = true;
$this6>names[$field] = $field;
}
}
$this6>rules = $rules;
$this6>error_messages = $_error_messages;
// extrage valorile initiale
foreach($this6>src as $field => $value) {
$this6>values[$field] = $value;
$this6>valid[$field] = true;
$this6>names[$field] = $field;
}
67
// adauga callback la reguli
Validate::$allowed_rules =
array_merge(Validate::$allowed_rules, Validate::$al lowed_callbacks);
}
static function check_value($value, $rule_string, $ field =
'', $src = array()) {
if(!$this) {
Validate::$allowed_rules =
array_merge(Validate::$allowed_rules, Validate::$al lowed_callbacks);
}
if(empty($rule_string)) return true;
foreach(Validate::split(' | ', $rule_string) as $rule) {
$params = Validate::split('6', $rule);
// daca primul parametru nu e o cheie valida
if(!in_array($params[0], Validate::$allowed_rules)) {
return false
}
// valoarea de inlocuit in mesajele in care este cazul
Validate::$error_value = '';
Validate::$value = $value;
$keyword = $params[0];
unset($params[0]);
switch($keyword) {
// regulile de validare
case 'required':
if(!is_numeric($value) && empty($value)) {
return false;
}
break;
68
case 'numeric':
if(!is_numeric($value) && $value !== '') {
return false;
}
break;
case 'alphanumeric':
if(!ctype_alnum($value) && $value !== '') {
// $this6>valid[$field] = false;
return false;
}
break;
case 'min':
if($value < $params[1] && $value !== '') {
Validate::$error_value = $params[1];
return false;
}
break;
case 'max':
if($value > $params[1] && $value !== '') {
Validate::$error_value = $params[1];
return false;
}
break;
case 'minlength':
if(strlen($value) < $params[1] && $value !== '' ){
Validate::$error_value = $params[1];
return false;
}
break;
case 'maxlength':
69
if(strlen($value) > $params[1] && $value !== '' ){
Validate::$error_value = $params[1];
return false;
}
break;
case 'email':
if(preg_match('/^([\w\6\.]+)@((\[([06
9]{1,3}\.){3}[069]{1,3}\]) | (([\w\6]+\.)+)([a6zA6Z]{2,4}))$/', $value)
== 0 && $value !== '') {
return false;
}
break;
case 'in':
foreach($params as $param) {
if($value == $param) {
return true;
}
}
// ajungandu6se aici implica eroare
Validate::$error_value = implode(', ', $params) ;
return false;
break;
case 'not':
foreach($params as $param) {
if($value == $param) {
Validate::$error_value = $param;
return false;
break;
}
}
break;
70
case 'match':
if($value != $src[$params[1]]) {
return false;
}
break;
case 'array':
if(!is_array($value) && $value !== '') {
return false;
}
break;
case 'mincount':
if(count($value) < $params[1]) {
return false;
}
break;
case 'maxcount':
if(count($value) > $params[1]) {
return false;
}
break;
// transformare callback
case 'trim':
$value = Validate::$value = trim($value);
break;
case 'escape':
$value = Validate::$value = addslashes($value);
break;
case 'md5':
$value = Validate::$value = md5($value);
break;
71
case 'lowercase':
$value = Validate::$value = strtolower($value);
break;
}
}
return true;
}
function check() {
$valid_form = true;
foreach($this6>rules as $field => $rule_string) {
Validate::$value = false;
$this6>valid[$field] = $this6>check_value($this6
>values[$field], $rule_string, '', $this6>src);
$this6>values[$field] = Validate::$value !== false ?
Validate::$value : $this6>values[$field];
if(!$this6>valid($field)) $valid_form = false;
if(!$this6>valid($field) && empty($this6
>values[$field])) {
$this6>errors[$field] = str_replace('%value%', $thi s6
>error_value, $this6>error_messages[$keyword]);
}
}
$this6>is_valid = $valid_form;
return $valid_form;
}
function value($field) {
return $this6>values[$field];
}
/* Obtinere valori in stil de vector */
function offsetGet($field) {
return $this6>value($field);
72
}
/* Seteaza o valoare anume unui camp, folosita pen tru a popula
formularele. */
function set_value($field, $value, $valid = true) {
$this6>values[$field] = $value;
if($valid) $this6>valid[$field] = true;
}
/* Set de valori sub forma de vector. */
function offsetSet($field, $value) {
$this6>set_value($field, $value);
}
function errors() {
return $this6>valid;
}
function valid($field = '') {
if(empty($field)) return $this6>is_valid;
else return $this6>valid[$field];
}
function name($field) {
return $this6>names[$field];
}
function error($field) {
if(!$this6>valid($field)) {
if(empty($this6>errors[$field])) {
return $this6>error_messages['default'];
} else return $this6>errors[$field];
} else return '';
}
function fields() {
return array_keys($this
}
}
?>
Exemplu de utilizare: Formular de comanda
<?
$_command_fields = array(
'name' => 'trim | required',
'email' => 'trim |
'telephone' = > 'trim
'county' => 'trim
'address' => 'trim
'city' => 'trim | required',
'voucher' => 'trim',
'transport' => 'trim
$_delivery_types)
return array_keys($this 6>rules);
Formular de comanda produse online
$_command_fields = array(
required',
| required | email' ,
> 'trim | required |numeric | minlength610 ’,
'county' => 'trim | required | in 6'.implode('6 ', $_judete),
'address' => 'trim | required',
required',
'voucher' => 'trim',
'transport' => 'trim | numeric | required | in 6'.implode('
$_delivery_types) ,
73
’,
', $_judete),
'.implode(' 6',
74
'observation' => 'trim',
'terms' => 'required',
);
if($_POST['ftype']) { // validare DATE FACTURARE
$_command_fields = array_merge(
$_command_fields,
array(
'fname' => 'trim | required',
'fcui' => 'trim | required',
'freg' => 'trim | required',
'fcont' => 'trim | required',
'fbank' => 'trim | required',
)
);
}
if($_POST['sdelivery']) { // validare ADRESA DE LI VRARE
$_command_fields = array_merge(
$_command_fields,
array(
'scounty' => 'trim | required | in6'.implode('6',
$_judete),
'saddress' => 'trim | required',
'scity' => 'trim | required',
)
);
}
$_forms['command'] = new Validate($_command_fields) ;
$_form =& $_forms['command'];
$_valid = $_form6>check();
foreach($_form6>fields() as $field) {
75
$_values[$field] = $_form6>value($field);
}
if(!$_valid) foreach($_form6>fields() as $field) {
if(!$_form6>valid($field)) $error[$field] = true;
}
?>
Unde:
• $_comand_fields este vectorul care contine regulile de validare pe ntru fiecare camp sub
forma:
array(
’camp1’ => ’regula1|regula2|regula3’,
’camp2’ => ’regula1|regula2’,
’camp3’ => ’regula1’,
);
• $error este vectorul care contine fiecare camp completat incorect sub forma:
array(
’camp1’ => ’true’,
’camp3’ => ’true’,
);
• $_values este vectorul care contine valoarea prelucrata pen tru fiecare camp sub forma:
array(
’camp1’ => ’valoare1’,
’camp2’ => ’valoare2’,
’camp3’ => ’valoare3’,
);
• $_valid este variabila care contine valoarea de adevar pent ru validitatea completa a
formularului.
4.8. Abonarea la Newsletter
Abonarea la Newsletter se realizeaza prin introduce rea corecta a adresei de e
specificat . La click pe butonul de submit, se apeleaza un AJA X din JavaScript, care valideaza
adresa si, in functie de validitatea acesteia, inse reaza
informatia (adresa, ip, data) si returneaza un mesa j corespunzator
Mesaj returnat pentru dnc.dima@gmail
Codul fisierului newsletter.js inclus in
<script type="text/javascript">
// declararea ajax6 ului ca obiect
_ajax = new Object();
$(document).ready(function(){
$('input#nl6submit'). click(
// extragerea adresei de e
var email = $('#nl
// extragerea tipului de submit (abonare sau dezabonar e)
var submit = $(this).attr('name');
// verificare daca AJAX
if(_ajax.newsletter) { _ajax.newsletter.abort(); }
_ajax.newsletter = $.ajax({
// metoda prin care se transmit parametrii
type:'POST',
// calea fisierului apelat
url:url_base + 'ajax/newsletter.php',
// parametrii transmisi
data:{submit:submit, email:email},
/* in cazul in care este returnat un rezultat valid (de tip JSON
prin functie json_encode
intermediul unor clase de CSS pentru a afisa mesaju l corespunzator */
Newsletter
Abonarea la Newsletter se realizeaza prin introduce rea corecta a adresei de e 3mail in input
. La click pe butonul de submit, se apeleaza un AJA X din JavaScript, care valideaza
adresa si, in functie de validitatea acesteia, inse reaza in baza de date (in tabelul
informatia (adresa, ip, data) si returneaza un mesa j corespunzator . Exemplu:
dnc.dima@gmail , urmat de mesajul pentru dnc.dima@gmail.co
inclus in header.
<script type="text/javascript">
ului ca obiect
$(document).ready(function(){
click( function() {
// extragerea adresei de e 6mail din input
var email = $('#nl 6email').val();
extragerea tipului de submit (abonare sau dezabonar e)
submit = $(this).attr('name');
// verificare daca AJAX 6ul ruleaza deja
if(_ajax.newsletter) { _ajax.newsletter.abort(); }
_ajax.newsletter = $.ajax({
// metoda prin care se transmit parametrii
// calea fisierului apelat
url:url_base + 'ajax/newsletter.php',
// parametrii transmisi
data:{submit:submit, email:email},
/* in cazul in care este returnat un rezultat valid (de tip JSON
json_encode () ) se manipuleaza elementele din sursa prin
intermediul unor clase de CSS pentru a afisa mesaju l corespunzator */
76 mail in input 3ul
. La click pe butonul de submit, se apeleaza un AJA X din JavaScript, care valideaza
(in tabelul newsletter_users )
dnc.dima@gmail.co m.
extragerea tipului de submit (abonare sau dezabonar e)
/* in cazul in care este returnat un rezultat valid (de tip JSON ,
elementele din sursa prin
intermediul unor clase de CSS pentru a afisa mesaju l corespunzator */
77
success:function(data) {
$('.newsletter_message').each(function() {
$(this).html('');
$(this).removeClass('active');
});
var json = jQuery.parseJSON(data);
if(json) {
if(json.error == '1') {
$('.newsletter_message.error').addClass('active');
} else {
$('#nl6email').val("");
$('.newsletter_message.success').addClass('active') ;
}
$('.newsletter_message.active').html(json.messag e);
} else {
$('div.newsletter_message.error').html("A aparut o eroare de sistem!");
$('.newsletter_message.error').addClass('active');
}
}});
});
});
</script>
78
5. Concluzii
In aceasta sectiune finala a lucrarii voi trage con cluziile lucrarii, referitoare la utilizarea
tehnologiilor PHP MySQL in realizarea unei aplicati i web.
Inainte de lansarea PHP, siteurile erau statice, ia r operatorul site3ului nu avea oportunitatea de a
comunica cu utilizatorii. Acest lucru a fost schimb at prin introducerea PHP si a siteurilor
dinamice: pe langa crearea paginilor web, acum este posibila si conectarea utilizatorilor siteului
cu alti utilizatori si, de asemenea, cu operatorul siteului. Multe intreprinderi de diferite
dimensiuni au intrat in zona de web business deoare ce azi se pot conecta usor cu publicul lor si
pot primi sugestii de la acesta.
Unele dintre principalele motive pentru care PHP es te folosit in business sunt simplitatea si
usurinta cu care poate fi folosit. PHP concureaza c u un numar de alte solutii de web scripting
precum Active Server Pages and PERL, insa niciunul dintre acestea nu este atat de usor de
asimiliat de catre utilizatori precum PHP. Mai mult decat atat, anumite limbaje solicita o anumita
cunoastere pe care utilizatorul sa o detina deja de spre programare inainte de a putea ajunge la
eficienta in dezvoltare. Cu PHP insa, chiar si pers oanele care nu au un background de
programator sunt capabile sa dezvolte solutii web i ntr3o perioada scurta de timp, dupa
parcurgerea unor tutoriale de baza, cu informatii p rimare despre PHP. Comenzile PHP sunt
incorporate pur si simplu in aceeasi pagina web cu comenzile HTML si se executa pe server
pentru a livra pagini web pentru utilizator.
Cel mai evident beneficiu al mixului de PHP si MySQ L este acela ca el reprezinta o solutie web
foarte accesibila din punct de vedere financiar pen tru afaceri, PHP si MySQL fiind disponibile in
mod gratuit pentru web. Dezvoltatorii afacerii treb uie sa investeasca pe partea de customizare.
In al doilea rand, prin utilizarea PHP MySql, dezvo ltatorii pot crea o varietate de aplicatii web
precum aplicatii sociale, siteuri de comert electro nic, cataloage online de produse, sisteme de
management al continutului etc.
In al treilea rand, aspect important il reprezinta faptul ca aceste doua tehnologii folositea in
dezvoltarea aplicatiilor sunt complet securizate si nu prezinta erori (buguri). Realizatorii de
aplicatii pot testa cu usurinta PHP MySQL Web Appli cations pentru a se asigura ca acestea sunt
in conformitate cu diferite standarde de calitate. De asemenea, aplicatiile sunt usor de intretinut si
upgradat.
PHP MySQL ajuta la consturirea de siteuri web dinam ice cu baze de date care ajuta vizitatorii sa
scrie pagini web. Baza de date poate fi actualizata cu usurinta si restul este gestionat automat.
Paginile dinamice pot fi cu usurinta create cu aces te tehnologii. Deci, aceste tehnologii vin in
sprijinul construirii de pagini interesante si inov ative.
Astazi, siteurile de comert electronic sunt foarte des intalnite. Cele mai multe siteuri de comert
electronic ruleaza astazi prin PHP si MqSQL. Acest fenomen are loc doarece tehnologiile PHP
MySQL permit comerciantilor online sa aiba control complet asupra afacerii lor. Mai mult, parti
terte precum API pot fi foarte usor integrate in ap licatiile de comert electronic deja existente
pentru a le creste eficienta.
Ambele tehnologii ajuta realizatorii de siteuri sa creeze aplicatii care furnizeaza performanta si
incredere, siguranta. Iar cel mai important aspect este ca tehnologia PHP MySQL suporta o gama
79
larga de baze de date precum Oracle, Informix si Sy base. Aceste platforme pot fi compatibile cu
servere web precum Apache si IIS.
Mai mult decat atat, PHP MySQL suporta sistemele de operare Linux, Windows sau UNIX.
Acest lucru reprezinta un avantaj deoarece portabil itatea a devenit un interes major pentru
afacerile care folosesc unul sau mai multe sisteme de operare in activitatea lor.
In concluzie, PHP si MySQL este solutia perfecta pe ntru cei care vor sa se bucure la maximum
de beneficiile web, iar prezenta lor in mediul de b usiness online sa dureze.
80
Bibliografie
1. Anghel, T. (2005). Dezvoltarea aplicatiilor WEB folosind XHTML, PHP si MySQL. Polirom.
2. Anghel, T. (2005). Programarea in PHP. Ghid practic. Polirom.
3. Anghel, T. (2006). Programarea in PHP II. Generarea de continut multim edia. Polirom.
4. Buraga, S. (2003). Aplicatii Web la cheie. Studii de caz implementate in PHP. Polirom.
5. Forta, B. (2002). SQL pentru incepatori. Bucuresti: Teora.
6. McLaughlin, B. (2011). PHP &MySQL: The Missing Manual. O'Reilly Media.
7. Powers, D. (2010). PHP Solutions: Dynamic Web Design Made Easy. Berkeley: Apress.
8. Rosebrock, E. (2003). Creating Interactive Websites With Php And Web Serv ices. John Wiley
And Sons Ltd.
9. Valade, J. (2006). Php And Mysql. John Wiley And Sons Ltd.
10. Welling, L., & Thomson, L. (2003). Dezvoltarea aplicatiilor web cu PHP si MySQL. Teora.
Surse online
1. http://en.wikipedia.org/wiki/Mysql
2. http://en.wikipedia.org/wiki/Php
3. http://en.wikipedia.org/wiki/Ajax_(programming)
4. http://en.wikipedia.org/wiki/Jquery
5. http://www.php.net/manual/
6. https://dev.mysql.com/doc/
7. http://api.jquery.com/
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: Matematica si Informatica Aplicate In Inginerie [632266] (ID: 632266)
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.
