De ce PHP? - Universitatea din Oradea
De ce PHP? - Universitatea din Oradea De ce PHP? - Universitatea din Oradea
Dezvoltarea aplicațiilor web Suport de curs: 2009-2010 Autor: Lect. univ. dr. Horea Oros Universitatea din Oradea Departamentul de Matematică și Informatică 1
- Page 2 and 3: Aplicații web n Browser Scripting
- Page 4 and 5: PHP introducere n Sintaxa PHP este
- Page 6 and 7: Ce este PHP? n PHP = PHP: Hypertext
- Page 8 and 9: Ce este MySQL? n Server pentru baze
- Page 10 and 11: Apache+PHP+MySQL n PHP este simplu
- Page 12 and 13: Sintaxa PHP n Fiecare linie trebuie
- Page 14 and 15: Stringuri PHP n Rolul string-urilor
- Page 16 and 17: Operatori PHP n Operatori aritmetic
- Page 18 and 19: Instrucțiunea elseif 18
- Page 20 and 21: Instrucțiunea switch - exemplu
- Page 22 and 23: Tablouri ID-ul numeric generat manu
- Page 24 and 25: Tabouri multidimensionale n Fiecare
- Page 26 and 27: Instrucțiuni repetitive n while n
- Page 28 and 29: do - while 28
- Page 30 and 31: foreach n Folosită pentru a itera
- Page 32 and 33: Funcții PHP - exemplu 32
- Page 34 and 35: Funcții PHP - valori de return
- Page 36 and 37: Formulare PHP și datele de intrare
- Page 38 and 39: PHP $_GET n Variabila $_GET este fo
- Page 40 and 41: PHP $_GET welcome.php Welcome . Yo
- Page 42 and 43: PHP $_REQUEST n Conține valorile d
- Page 44 and 45: PHP $_POST n În bara de adresă ..
- Page 46 and 47: PHP date() n Funcție folosită pen
- Page 48 and 49: PHP date() - exemplu 2 mktime(hour,
- Page 50 and 51: PHP include - exemplu 1 Welcome
<strong>De</strong>zvoltarea aplicațiilor web<br />
Suport de curs: 2009-2010<br />
Autor: Lect. univ. dr. Horea Oros<br />
<strong>Universitatea</strong> <strong>din</strong> <strong>Oradea</strong><br />
<strong>De</strong>partamentul de Matematică și Informatică<br />
1
Aplicații web<br />
n Browser Scripting<br />
n JavaScript, HTML DOM, DHTML, VBScript, AJAX<br />
n Server Scripting<br />
n SQL, ASP, <strong>PHP</strong>, ADO<br />
2
<strong>PHP</strong> introdu<strong>ce</strong>re<br />
n <strong>PHP</strong> este un limbaj de programare<br />
puternic <strong>ce</strong> rulează pe server cu care se<br />
pot crea pagini web <strong>din</strong>ami<strong>ce</strong> și<br />
interactive.<br />
n <strong>PHP</strong> este folosit pe scară largă, este<br />
gratuit, alternativă eficientă ASP de la<br />
Microsoft<br />
n <strong>PHP</strong> este potrivit pentru dezvoltare web și<br />
poate fi inclus în codul HTML.<br />
3
<strong>PHP</strong> introdu<strong>ce</strong>re<br />
n Sintaxa <strong>PHP</strong> este similară cu <strong>ce</strong>a a<br />
limbajului C.<br />
n <strong>PHP</strong> este folosit adesea împreună cu<br />
serverul web Apache pe diferite sisteme<br />
de operare.<br />
n Poate fi folosit și cu IIS pe sisteme<br />
Microsoft.<br />
4
Introdu<strong>ce</strong>re <strong>PHP</strong><br />
n Un fișier <strong>PHP</strong> poate conține text, taguri HTML<br />
și scripturi. Scripturile <strong>PHP</strong> sunt executate pe<br />
server.<br />
n Trebuie cunoscut HTML, limbaje script<br />
(browser side)<br />
5
Ce este <strong>PHP</strong>?<br />
n <strong>PHP</strong> = <strong>PHP</strong>: Hypertext Prepro<strong>ce</strong>ssor<br />
n <strong>PHP</strong> limbaj scripting server side, la fel ca<br />
ASP<br />
n <strong>PHP</strong> este executat pe server<br />
n <strong>PHP</strong> suportă multe baze de date (MySQL,<br />
Informix, Oracle, Sybase, Solid, PostgreSQL,<br />
Generic ODBC etc.)<br />
n <strong>PHP</strong> este open sour<strong>ce</strong><br />
n <strong>PHP</strong> se poate descărca și folosi gratis<br />
6
Ce este un fișier <strong>PHP</strong>?<br />
n Fișierul <strong>PHP</strong> conține text, tag-uri HTML și<br />
scripturi<br />
n Fișierele <strong>PHP</strong> sunt returnate browser-ului ca<br />
fișiere <strong>ce</strong> conțin doar cod HTML<br />
n Au extensia ".php", ".php3“ “.php4”, “.php4”<br />
sau ".phtml"<br />
7
Ce este MySQL?<br />
n Server pentru baze de date<br />
n Ideal atât pentru aplicații mici cât și pentru<br />
<strong>ce</strong>le foarte mari<br />
n MySQL suportă standardul SQL<br />
n MySQL compilat pe o serie de platforme<br />
n MySQL este gratis<br />
8
Apache+<strong>PHP</strong>+MySQL<br />
n <strong>PHP</strong> + MySQL sunt cross-platformă (se poate<br />
dezvolta pe Windows și se poate pune pe<br />
sistem Linux)<br />
n <strong>De</strong> <strong>ce</strong> <strong>PHP</strong>?<br />
n <strong>PHP</strong> rulează pe diferite platforme (Windows,<br />
Linux, Unix, etc.)<br />
n <strong>PHP</strong> este compatibil cu aproape toate<br />
serverele folosite (Apache, IIS, etc.)<br />
n <strong>PHP</strong> este gratis www.php.net<br />
9
Apache+<strong>PHP</strong>+MySQL<br />
n <strong>PHP</strong> este simplu de învățat și rulează eficient<br />
pe partea de server<br />
n Cum se poate în<strong>ce</strong>pe?<br />
n Instalarea serverului web Apache pe o mașină<br />
Windows sau Linux<br />
n Instalarea <strong>PHP</strong> pe Windows sau Linux<br />
n Instalare MySQL pe Windows sau Linux<br />
machine<br />
n XAMPP - WAMP<br />
10
Sintaxa <strong>PHP</strong><br />
n Sintaxa <strong>PHP</strong> nu se poate vedea prin “View<br />
Sour<strong>ce</strong>” pentru ca codul <strong>PHP</strong> este<br />
transformat pe server in HTML<br />
n Codul <strong>PHP</strong> trebuie delimitat de <br />
n Exemplu:<br />
<br />
<br />
<br />
<br />
<br />
11
Sintaxa <strong>PHP</strong><br />
n Fiecare linie trebuie să se termine cu ;<br />
n ; este separator de instrucțiuni<br />
n Instrucțiuni pentru afișarea textului: echo,<br />
print<br />
n Comentarii în <strong>PHP</strong><br />
<br />
<br />
<br />
12
Variabile <strong>PHP</strong><br />
n Variabilele se folosesc pentru a stoca<br />
numere, stringuri, valori întoarse <strong>din</strong> funcții<br />
pentru a fi folosite ulterior<br />
n Toate numele de variabile în<strong>ce</strong>p cu $<br />
n Exemplu: $var = valoare;<br />
n <strong>PHP</strong> este un limbaj de programare slab<br />
tipizat<br />
13
Stringuri <strong>PHP</strong><br />
n Rolul string-urilor este de a gestiona textul<br />
<br />
n Operatorul de concatenare<br />
<br />
14
Stringuri <strong>PHP</strong><br />
Funcția strlen<br />
<br />
echo strlen("Hello world!"); // 12<br />
Funcția strpos<br />
<br />
15
Operatori <strong>PHP</strong><br />
n Operatori aritmetici: +, -, *, /, ++, --<br />
n Atribuire: =, +=, -=, *=, /=, .=, %=<br />
n Operatori relaționali: ==, !=, , =<br />
n Operatori logici: &&, ||, !<br />
n<br />
16
Instrucțiunea if...else<br />
if (condiție)<br />
else<br />
cod <strong>ce</strong> se executa când condiția e true;<br />
cod <strong>ce</strong> se executa când condiția e fals;<br />
<br />
<br />
<br />
17
Instrucțiunea elseif<br />
<br />
<br />
<br />
18
Instrucțiunea switch<br />
switch (expr) {<br />
}<br />
case label1:<br />
cod care se execută când expr = label1;<br />
break;<br />
case label2:<br />
cod care se execută când expre = label2;<br />
break;<br />
default:<br />
cod;<br />
19
Instrucțiunea switch - exemplu<br />
<br />
<br />
<br />
echo "Number 1"; break;<br />
echo "Number 2"; break;<br />
echo "Number 3"; break;<br />
echo "No number between 1 and 3";<br />
20
Tablouri<br />
n Fiecare element al unui tablou are un ID<br />
n Tipuri de tablouri<br />
n Numeri<strong>ce</strong> (ID numeric)<br />
n Asociative (fiecare ID este asociat cu o<br />
valoare)<br />
n Multidimensionale<br />
n Tablouri numeri<strong>ce</strong>:<br />
n $names = array("Peter","Quagmire","Joe");<br />
n ID-ul numeric este generat automat<br />
21
Tablouri<br />
ID-ul numeric generat manual<br />
$names[0] = "Peter";<br />
$names[1] = "Quagmire";<br />
$names[2] = "Joe";<br />
Tablouri asociative<br />
n Fiecare element este o pereche (cheie,<br />
valoare)<br />
n Exemplu<br />
$ages = array("Peter"=>32,<br />
"Quagmire"=>30,<br />
"Joe"=>34);<br />
<br />
23
Tabouri multidimensionale<br />
n Fiecare element al tabloului poate fi un tablou<br />
$families = array (<br />
"Griffin"=>array ( "Peter", "Lois", "Megan”),<br />
"Quagmire"=>array ( "Glenn”),<br />
"Brown"=>array ( "Cleveland", "Loretta”)<br />
);<br />
echo “Este " . $families['Griffin'][2] . " membru al<br />
familiei";<br />
Dacă este afișat...<br />
24
Tablouri asociative<br />
Array<br />
(<br />
[Griffin] => Array<br />
(<br />
[0] => Peter<br />
[1] => Lois<br />
[2] => Megan<br />
)<br />
[Quagmire] => Array<br />
(<br />
[0] => Glenn<br />
)<br />
[Brown] => Array<br />
(<br />
[0] => Cleveland<br />
[1] => Loretta<br />
[2] => Junior<br />
)<br />
) 25
Instrucțiuni repetitive<br />
n while<br />
n do – while<br />
n for<br />
n for – each<br />
26
while<br />
<br />
<br />
<br />
27
do - while<br />
<br />
<br />
<br />
28
for<br />
<br />
<br />
<br />
29
foreach<br />
n Folosită pentru a itera peste tablouri<br />
<br />
<br />
<br />
30
Funcții <strong>PHP</strong><br />
n <strong>PHP</strong> are foarte multe funcții (>700)<br />
n Se pot crea funcții definite de utilizator<br />
n Funcție = bloc de cod <strong>ce</strong> poate fi executat<br />
oricând<br />
n Funcția în<strong>ce</strong>pe cu "function()"<br />
n Numele funcției – trebuie să indi<strong>ce</strong> scopul ei<br />
n Blocul funcției delimitat de {, }<br />
31
Funcții <strong>PHP</strong> - exemplu<br />
<br />
<br />
<br />
32
Funcții <strong>PHP</strong> - parametri<br />
<br />
Funcții <strong>PHP</strong> – valori de return<br />
<br />
<br />
<br />
34
Formulare <strong>PHP</strong> și datele de intrare<br />
n Variabilele $_GET și $_POST sunt folosite<br />
pentru a ac<strong>ce</strong>sa datele <strong>din</strong> formulare<br />
n Fiecare element <strong>din</strong>tr-un formular HTML va fi<br />
disponibil în mod automat în scriptul <strong>PHP</strong><br />
n Exemplu de formular:<br />
<br />
<br />
Name: <br />
Age: <br />
<br />
<br />
<br />
35
Formulare <strong>PHP</strong> și datele de intrare<br />
welcome.php<br />
<br />
Welcome<br />
.<br />
<br />
You are<br />
<br />
years old.<br />
<br />
36
Validarea datelor de intrare<br />
n Validarea se poate fa<strong>ce</strong> pe client pentru a<br />
redu<strong>ce</strong> încărcarea serverului<br />
n Validarea se poate fa<strong>ce</strong> și pe server<br />
(recomandat dacă se interacționează cu baze<br />
de date)<br />
n Recomandat ca postarea unui formular să se<br />
fa<strong>ce</strong> pe a<strong>ce</strong>eași pagină.<br />
n Dacă formularul conține date eronate<br />
utilizatorului îi sunt prezentate erorile pe<br />
a<strong>ce</strong>eași pagină<br />
37
<strong>PHP</strong> $_GET<br />
n Variabila $_GET este folosită pentru a<br />
“culege” datele de pe formulare care au<br />
method = ”get”<br />
n Variabila $_GET este un tablou de perechi<br />
(nume, valoare) trimise de metoda HTTP<br />
GET<br />
n Informațiile trimise cu GET sunt vizibile în<br />
bara de adresă a browser-ului (max. 100<br />
caractere)<br />
38
<strong>PHP</strong> $_GET<br />
<br />
Name: <br />
Age: <br />
<br />
<br />
În bara de adresă:<br />
.../welcome.php?name=Horea&age=30<br />
39
<strong>PHP</strong> $_GET<br />
welcome.php<br />
Welcome<br />
.<br />
<br />
You are <br />
years old!<br />
40
<strong>PHP</strong> $_GET<br />
n Nu se folosește când se trimit parole<br />
n Adresa cu valorile câmpurilor poate fi<br />
adăugată la Favorites sau Bookmarks<br />
n Nu se folosește când se transmit mai mult de<br />
100 de caractere<br />
41
<strong>PHP</strong> $_REQUEST<br />
n Conține valorile <strong>din</strong>:<br />
n $_GET, $_POST și $_COOKIE<br />
n Poate fi folosită pentru a obține valorile <strong>din</strong><br />
mai multe formulare (unele folosesc get altele<br />
post)<br />
42
<strong>PHP</strong> $_POST<br />
n Folosită pentru a obține datele <strong>din</strong> formulare<br />
trimise cu metoda post<br />
n Este un tablou asociativ – conține perechi<br />
(nume, valoare)<br />
n Exemplu:<br />
<br />
Enter your name: <br />
Enter your age: <br />
<br />
<br />
43
<strong>PHP</strong> $_POST<br />
n În bara de adresă .../welcome.php<br />
n În welcome.php<br />
Welcome .<br />
<br />
You are <br />
years old!<br />
44
<strong>PHP</strong> $_POST<br />
n Datele nu sunt afișate în bara de adresă<br />
n Nu există o limită asupra lungimii datelor<br />
n Paginile nu pot fi incluse în Favorites sau<br />
Bookmarks<br />
45
<strong>PHP</strong> date()<br />
n Funcție folosită pentru a obține data în diferite<br />
moduri<br />
n Sintaxa: date(format,timestamp)<br />
n Timestamp (opțional) = numărul de secunde<br />
de la 1 Ianuarie 1970 la 00:00:00 GMT<br />
n Timestamp (implicit) = data și ora curentă<br />
46
<strong>PHP</strong> date() – exemplu 1<br />
<br />
47
<strong>PHP</strong> date() – exemplu 2<br />
mktime(hour,minute,second,month,day,year,is_dst)<br />
<br />
48
<strong>PHP</strong> include<br />
n Funcțiile include() sau require() sunt folosite<br />
pentru a include conținutul un fișier într-un<br />
fișier php înainte de a fi pro<strong>ce</strong>sat pe server<br />
n include() generează un avertisment dar<br />
scriptul continuă<br />
n require() generează eroare fatală și scriptul se<br />
oprește<br />
n Se folosesc pentru a crea funcții, antete,<br />
subsoluri <strong>ce</strong> pot fi refolosite în mai multe<br />
pagini<br />
49
<strong>PHP</strong> include – exemplu 1<br />
<br />
<br />
Welcome to my home page<br />
Some text<br />
<br />
50
<strong>PHP</strong> include – exemplu 2<br />
n menu.php<br />
<br />
About Us |<br />
Contact Us<br />
51
<strong>PHP</strong> include – exemplu 2 – cont.<br />
n index.php<br />
<br />
Welcome to my home page<br />
Some text<br />
<br />
n La fel cu about.php și contact.php<br />
52
<strong>PHP</strong> include – exemplu 2 – cont.<br />
View sour<strong>ce</strong>:<br />
<br />
Home |<br />
About Us |<br />
Contact Us Welcome to<br />
my home page Some text<br />
<br />
Pentru a modifica meniul trebuie modificat un<br />
singur fișier<br />
53
<strong>PHP</strong> require() - exemplu<br />
<br />
<br />
<br />
n Se generează un avertisment dar scriptul<br />
continuă<br />
54
<strong>PHP</strong> require() - exemplu<br />
<br />
<br />
<br />
n Se generează un mesaj de eroare și scriptul<br />
se oprește<br />
n Este recomandat a se folosi require()<br />
55
<strong>PHP</strong> lucrul cu fișiere<br />
n fopen() - deschide un fișier<br />
<br />
<br />
<br />
56
<strong>PHP</strong> lucrul cu fișiere<br />
n Moduri de deschidere:<br />
n r read only<br />
n r+ read/write<br />
n w write only (dacă există îl șterge)<br />
n w+ read/write (dacă există îl șterge)<br />
n a append (se păstrează conținutul)<br />
n a+ read/append (se păstrează conținutul)<br />
n x creează fișier nou(dacă există return eroare)<br />
n x+ read/write (dacă există return eroare)<br />
57
<strong>PHP</strong> lucrul cu fișiere<br />
n Dacă fopen() nu poate deschide fișierul<br />
atunci întoar<strong>ce</strong> valoare 0<br />
<br />
<br />
<br />
58
<strong>PHP</strong> lucrul cu fișiere<br />
n fclose() închide un fișier deschis<br />
n Exemplu:<br />
<br />
$file = fopen("test.txt","r");<br />
//cod<br />
fclose($file);<br />
59
<strong>PHP</strong> lucrul cu fișiere<br />
n feof() verifică dacă s-a ajuns la sfârșitul<br />
fișierului<br />
if (feof($file)) echo "End of file";<br />
n Obs. Nu se poate citi <strong>din</strong> fișier deschis în<br />
modul w, a sau x<br />
60
<strong>PHP</strong> lucrul cu fișiere<br />
n Citirea unui fișier linie cu linie – fgets()<br />
<br />
61
<strong>PHP</strong> lucrul cu fișiere<br />
n Citirea unui fișier caracter cu caracter<br />
<br />
62
<strong>PHP</strong> upload fișiere<br />
n <strong>PHP</strong> permite încărcarea fișierelor pe server<br />
n Formular HTML pentru încărcarea fișierelor:<br />
<br />
<br />
Filename:<br />
<br />
<br />
<br />
63
<strong>PHP</strong> upload fișiere<br />
n enctype="multipart/form-data” folosit atunci<br />
când se transmit date binare (fișiere)<br />
n Reprezintă un mare risc de securitate<br />
n Doar userii autorizați ar trebui să poată fa<strong>ce</strong><br />
a<strong>ce</strong>st lucru<br />
64
<strong>PHP</strong> upload fișiere<br />
n upload_file.php<br />
<br />
65
<strong>PHP</strong> upload fișiere – restricții<br />
<br />
66
<strong>PHP</strong> upload salvarea fișierului<br />
67
<strong>PHP</strong> cookie<br />
n Cookie sunt folosite pentru a identifica un<br />
user<br />
n Este un fișier mic pe care serverul îl salvează<br />
pe calculatorul user-ului<br />
n Când este <strong>ce</strong>rută o pagină va fi trimis și<br />
cookie-ul salvat anterior<br />
n Cu <strong>PHP</strong> se pot crea și obține valorile cookie<br />
68
<strong>PHP</strong> cookie<br />
n Creare cu setcookie() – trebuie să apară<br />
înaintea tag-ului <br />
n Sintaxa:<br />
n setcookie(name, value, expire, path, domain);<br />
<br />
<br />
<br />
69
<strong>PHP</strong> cookie<br />
n Obținerea unei valori cookie:<br />
n Varibila <strong>PHP</strong> $_COOKIE<br />
n Exemplu:<br />
<br />
70
<strong>PHP</strong> cookie<br />
n Pentru verifica dacă un cookie a fost setat se<br />
folosește funcția isset()<br />
<br />
<strong>PHP</strong> cookie<br />
n Stergerea unui cookie – trebuie să ne<br />
asigurăm că data și ora la care expiră este<br />
anterioară datei și orei curente<br />
<br />
72
<strong>PHP</strong> - sesiuni<br />
n O variabilă de sesiune <strong>PHP</strong> este folosită<br />
pentru a stoca informații sau a modifica setări<br />
pentru o sesiune utilizator<br />
n Variabilele sesiune stochează informație<br />
despre un singur utilizator și sunt disponibile<br />
tuturor paginilor aplicației<br />
n După părăsirea website-ului variabilele<br />
sesiune sunt șterse<br />
n Pentru stocarea permanentă a informațiilor e<br />
nevoie de o bază de date.<br />
73
<strong>PHP</strong> - sesiuni<br />
n Sesiunile funcționează prin crearea unui ID<br />
unic (UID) pentru fiecare vizitator al aplicației<br />
web<br />
n Variabilele sunt stocate pe baza a<strong>ce</strong>stui UID<br />
n UID-ul este salvat într-un cookie sau este<br />
propagat prin URL<br />
74
<strong>PHP</strong> - sesiuni<br />
n Pornirea unei sesiuni <strong>PHP</strong><br />
<br />
<br />
<br />
n Sesiunea utilizator este înregistrată la server<br />
n Permite în<strong>ce</strong>perea salvării informațiilor<br />
n Atribuie UID pentru sesiunea utilizatorului<br />
75
<strong>PHP</strong> - sesiuni<br />
n Stocarea unei variabile de sesiune<br />
<br />
<br />
<br />
<br />
76
<strong>PHP</strong> - sesiuni<br />
n Contor de vizionări ale paginii<br />
<br />
77
<strong>PHP</strong> - sesiuni<br />
n Distrugerea unei sesiuni: unset() sau<br />
session_destroy()<br />
n Eliberarea unei variabile de sesiune<br />
<br />
n Distrugerea completă a sesiunii<br />
<br />
78
<strong>PHP</strong> - email<br />
n Se pot trimite email-uri direct <strong>din</strong>tr-un script<br />
cu funcția mail()<br />
n Sintaxa:<br />
n mail(to,subject,message,headers,parameters)<br />
n Pentru ca să funcționeze e nevoie de un<br />
sistem de email instalat<br />
79
<strong>PHP</strong> - email<br />
<br />
80
<strong>PHP</strong> – formular email<br />
<br />
<strong>PHP</strong> – email securizat<br />
n Injectare de email – în câmpul email<br />
someone@example.com%0A<br />
Cc:person2@example.com %0A<br />
Bcc:person3@example.com,<br />
person3@example.com,<br />
anotherperson4@example.com,<br />
person5@example.com%0AB<br />
To:person6@example.com<br />
n Email-ul va ajunge și la alte adrese<br />
82
<strong>PHP</strong> – email securizat<br />
n Pentru a stopa email injection trebuie validate<br />
informațiile introduse de user<br />
<br />
<strong>PHP</strong> – tratarea erorilor<br />
n Manipulatorul de erori implicit <strong>din</strong> <strong>PHP</strong> este<br />
foarte simplu<br />
n Mesajul de eroare conține:<br />
n Numele fișierului<br />
n Numărul liniei<br />
n Mesaj afișat de browser<br />
n Funcția die()<br />
n Erori particularizate - Triggere de erori<br />
n Raportarea erorilor<br />
84
<strong>PHP</strong> – tratarea erorilor<br />
<br />
n Dacă fișierul nu există:<br />
Warning: fopen(welcome.txt) [function.fopen]:<br />
failed to open stream: No such file or<br />
directory in C:\wamp\www\eroare.php on<br />
line 1<br />
85
<strong>PHP</strong> – tratarea erorilor<br />
n Varianta mai bună – scriptul se va opri cu un<br />
mesaj mai clar<br />
86
<strong>PHP</strong> – tratarea erorilor<br />
n Crearea unui manipulator de erori<br />
particularizat<br />
n O funcție care este apelată când are loc o<br />
eroare<br />
n Sintaxa:<br />
error_function(error_level,error_message,<br />
error_file,error_line,error_context)<br />
n Primii 2 parametri obligatorii<br />
n Ultimii 3 opționali<br />
87
<strong>PHP</strong> – tratarea erorilor- error_level<br />
Valoare Constantă <strong>De</strong>scriere<br />
2 E_WARNING Eroare runtime ne-fatală,<br />
execuția scriptului nu este oprită<br />
8 E_NOTICE Scriptul a găsit <strong>ce</strong>va <strong>ce</strong> ar putea<br />
fi eroare dar poate se poate<br />
întâmpla și la rularea normală a<br />
scripului<br />
256 E_USER_ERROR Eroare fatală generată de user.<br />
512 E_USER_WARNING Avertisment ne-fatal generat de<br />
user<br />
1024 E_USER_NOTICE ...<br />
4096 E_RECOVERABLE_ERROR ...<br />
8191 E_ALL Toate erorile și avertismentele<br />
88
<strong>PHP</strong> – tratarea erorilor<br />
n Funcție pentru tratarea erorilor:<br />
function customError($errno, $errstr)<br />
{<br />
echo "Error: [$errno]<br />
$errstr";<br />
echo "En<strong>din</strong>g Script";<br />
die();<br />
}<br />
89
<strong>PHP</strong> – tratarea erorilor<br />
n În mod implicit se folosește manipulatorul de<br />
erori inclus în <strong>PHP</strong><br />
n Stabilirea manipulatorului de erori definit de<br />
user:<br />
set_error_handler("customError");<br />
n Funcția ac<strong>ce</strong>ptă și al doilea argument<br />
(error_level) care indică tipul erorilor <strong>ce</strong> vor fi<br />
tratate<br />
n În cazul a<strong>ce</strong>sta vor fi trate toate erorile<br />
90
<strong>PHP</strong> – tratarea erorilor<br />
n Exemplu:<br />
<br />
91
<strong>PHP</strong> – tratarea erorilor<br />
n Erorile pot fi lansate cu funcția trigger_error()<br />
n Exemplu:<br />
<br />
92
<strong>PHP</strong> – tratarea erorilor<br />
<br />
93
<strong>PHP</strong> – tratarea erorilor<br />
n Jurnalizarea erorilor<br />
n Erorile sunt trimise la sistemul de jurnalizare<br />
(log) al serverului sau la un fișier (în funcție<br />
de cum este configurat)<br />
n Funcția error_log() poate fi folosită pentru a<br />
trimite mesajele de eroare într-un fișier sau<br />
pe server<br />
n Erorile pot fi trimise și prin email<br />
94
<strong>PHP</strong> – tratarea erorilor<br />
<br />
95
<strong>PHP</strong> – ex<strong>ce</strong>pții<br />
n Ex<strong>ce</strong>pțiile sunt folosite pentru a schimba<br />
controlul execuției scriptului atunci când are<br />
loc o eroare<br />
n <strong>PHP</strong> 5 introdu<strong>ce</strong> mecanismul ex<strong>ce</strong>pțiilor<br />
pentru gestionarea erorilor<br />
n Mecanismul ex<strong>ce</strong>pțiilor – modalitate orientată<br />
obiect<br />
96
<strong>PHP</strong> – ex<strong>ce</strong>pții<br />
n Ce se întâmplă când are loc o ex<strong>ce</strong>pție?<br />
n Starea curentă a codului este salvată<br />
n Execuția codului va tre<strong>ce</strong> la un funcție<br />
manipulator de ex<strong>ce</strong>pții predefinită (sau<br />
definită de programator)<br />
n Execuția poate continua la starea salvată,<br />
execuția se poate încheia sau poate continua<br />
<strong>din</strong>tr-un alt loc<br />
97
<strong>PHP</strong> – ex<strong>ce</strong>pții<br />
n Utilizare elementară a ex<strong>ce</strong>pțiilor<br />
n Când este lansată o ex<strong>ce</strong>pție codul <strong>ce</strong><br />
urmează în bloc nu mai este executat și se<br />
sare la blocul catch corespunzător<br />
n Dacă nu există bloc catch corespunzător va fi<br />
lansată o eroare fatală cu mesajul: "Uncaught<br />
Ex<strong>ce</strong>ption“<br />
98
<strong>PHP</strong> – ex<strong>ce</strong>pții<br />
<strong>PHP</strong> – ex<strong>ce</strong>pții<br />
n try, throw și catch<br />
n În blocul try se pune codul care poate lansa<br />
ex<strong>ce</strong>pții<br />
n throw se folosește pentru a lansa ex<strong>ce</strong>pția<br />
n Blocul catch este locul unde se inter<strong>ce</strong>ptează<br />
ex<strong>ce</strong>pția<br />
100
<strong>PHP</strong> – ex<strong>ce</strong>pții<br />
<strong>PHP</strong> – ex<strong>ce</strong>pții<br />
n Stabilirea unui manipulator de ex<strong>ce</strong>pții la<br />
nivelul <strong>ce</strong>l mai de sus<br />
102
<strong>PHP</strong> - filtrare<br />
n Filtrele <strong>PHP</strong> sunt folosite pentru a valida<br />
datele care vin <strong>din</strong> surse nesigure, de ex.<br />
date introduse de user<br />
n Testarea, filtrarea și validarea datelor<br />
utilizator reprezintă o parte importantă a<br />
oricărei aplicații web<br />
n Ori<strong>ce</strong> aplicație web se bazează pe date<br />
introduse de user așa că e important să ne<br />
asigurăm că aplicațiile primesc date corecte<br />
103
<strong>PHP</strong> - filtrare<br />
n Filtrarea datelor de intrare reprezintă una <strong>din</strong><br />
<strong>ce</strong>le mai importante probleme de securitate a<br />
aplicațiilor<br />
n Date externe:<br />
n Date introduse în formulare<br />
n Cookie<br />
n Date de la webservi<strong>ce</strong>-uri<br />
n Variabile server<br />
n Rezultate ale interogărilor bazelor de date<br />
104
<strong>PHP</strong> - filtrare<br />
n Funcții pentru filtrare:<br />
n filter_var() – filtrează o singură variabilă cu un<br />
filtru specificat<br />
n filter_var_array() – filtrează mai multe variabile<br />
cu a<strong>ce</strong>lași filtru sau cu filtre diferite<br />
n filter_input – obține o variabilă de intrare și o<br />
filtrează<br />
n filter_input_array – obține mai multe variabile<br />
de intrare și le filtrează cu a<strong>ce</strong>lași filtru sau cu<br />
filtre diferite<br />
105
<strong>PHP</strong> - filtrare<br />
<br />
106
<strong>PHP</strong> - filtrare<br />
n Există două tipuri de filtre:<br />
n Filtre de validare<br />
n Folosite pentru a validate datele introduse<br />
n Reguli de formare stricte (URL, email, IP)<br />
n Return tipul sau false (la eșec)<br />
n Filtre de curățare (sanitizing)<br />
n Permit sau interzic anumite caractere în stringuri<br />
n Nu sunt reguli pentru formatul datelor<br />
n Întotdeauna întorc string-uri<br />
107
<strong>PHP</strong> - filtrare<br />
n Opțiuni și indicatori (flag)<br />
n mai multe opțiuni filtrelor<br />
<br />
108
<strong>PHP</strong> - filtrare<br />
n Validare datelor de intrare<br />
<br />
109
<strong>PHP</strong> - filtrare<br />
n Curățarea datelor de intrare<br />
<br />
110
<strong>De</strong>zvoltarea aplicațiilor web<br />
Curs <strong>PHP</strong> Quiz<br />
1
<strong>PHP</strong> Quiz<br />
1. Ce înseamnă <strong>PHP</strong>?<br />
a. Personal Home Page<br />
b. Private Home Page<br />
c. Personal Hypertext Pro<strong>ce</strong>ssor<br />
d. <strong>PHP</strong>: Hypertext Prepro<strong>ce</strong>ssor<br />
2
<strong>PHP</strong> Quiz<br />
2. Care sunt delimitatorii pentru scripturile<br />
<strong>PHP</strong>?<br />
a. <br />
b. <br />
c. ...<br />
d. ...<br />
3
<strong>PHP</strong> Quiz<br />
3. Cum scrieți “Hello World” în <strong>PHP</strong>?<br />
a. echo "Hello World";<br />
b. "Hello World";<br />
c. Document.Write("Hello World");<br />
4
<strong>PHP</strong> Quiz<br />
4. Care este simbolul cu care în<strong>ce</strong>p numele<br />
tuturor variabilelor <strong>PHP</strong>?<br />
a. &<br />
b. $<br />
c. !<br />
5
<strong>PHP</strong> Quiz<br />
5. Cum se termină o instrucțiune <strong>PHP</strong>?<br />
a. <br />
b. Linie nouă<br />
c. ;<br />
d. .<br />
6
<strong>PHP</strong> Quiz<br />
6. Sintaxa <strong>PHP</strong> seamănă <strong>ce</strong>l mai mult cu:<br />
a. JavaScript<br />
b. VBScript<br />
c. Perl și C<br />
7
<strong>PHP</strong> Quiz<br />
7. Cum se obțin informațiile <strong>din</strong>tr-un formular<br />
transmis cu metoda GET?<br />
a. Request.Form;<br />
b. Request.QueryString;<br />
c. $_GET[];<br />
8
<strong>PHP</strong> Quiz<br />
8. Când se folosește POST datele sunt afișate<br />
în bara de adrese a browserului?<br />
a. Da<br />
b. Nu<br />
9
<strong>PHP</strong> Quiz<br />
9. În <strong>PHP</strong> se pot folosi atât “ cât și ‘ pentru a<br />
delimita string-uri<br />
a. Da<br />
b. Nu<br />
10
<strong>PHP</strong> Quiz<br />
10. Fișierele incluse trebuie să aibă extensia .inc<br />
a. Da<br />
b. Nu<br />
11
<strong>PHP</strong> Quiz<br />
11. Cum se include fișierul time.inc?<br />
a. <br />
b. <br />
c. <br />
d. <br />
12
<strong>PHP</strong> Quiz<br />
12. Cum se creează o funcție în <strong>PHP</strong>?<br />
a. create myFunction()<br />
b. new_function myFunction()<br />
c. function myFunction()<br />
13
<strong>PHP</strong> Quiz<br />
13. Cum se deschid pentru citire fișierul<br />
“time.txt”?<br />
a. fopen("time.txt","r");<br />
b. open("time.txt");<br />
c. fopen("time.txt","r+");<br />
d. open("time.txt","read");<br />
14
<strong>PHP</strong> Quiz<br />
14. <strong>PHP</strong> permite trimiterea de email-uri direct<br />
<strong>din</strong> scripturi?<br />
a. Da<br />
b. Nu<br />
15
<strong>PHP</strong> Quiz<br />
15. Cum se realizează conexiunea la o bază de<br />
date MySQL?<br />
a. connect_mysql("localhost");<br />
b. dbopen("localhost");<br />
c. mysql_connect("localhost");<br />
d. mysql_open("localhost");<br />
16
<strong>PHP</strong> Quiz<br />
16. Cum se poate aduna 1 la valoarea variabilei<br />
$count?<br />
a. ++count<br />
b. count++;<br />
c. $count =+1<br />
d. $count++;<br />
17
<strong>PHP</strong> Quiz<br />
17. Cum se adaugă un comentariu în <strong>PHP</strong>?<br />
a. *\..\*<br />
b. <br />
c. …<br />
d. /*…*/<br />
18
<strong>PHP</strong> Quiz<br />
18. <strong>PHP</strong> poate rula pe IIS de la MS?<br />
a. Da<br />
b. Nu<br />
19
<strong>PHP</strong> Quiz<br />
19. În <strong>PHP</strong> 5 suportul pentru MySQL este<br />
activat în mod implicit<br />
a. Da<br />
b. Nu<br />
20
<strong>PHP</strong> Quiz<br />
20. Care nume de variabilă nu este valid?<br />
a. $my-Var<br />
b. $my_Var<br />
c. $myVar<br />
21
<strong>De</strong>zvoltarea aplicațiilor web<br />
Curs <strong>PHP</strong>-MySQL<br />
1
Aplicații web<br />
n Browser Scripting<br />
n JavaScript, HTML DOM, DHTML, VBScript, AJAX<br />
n Server Scripting<br />
n SQL, ASP, <strong>PHP</strong>, ADO<br />
2
<strong>PHP</strong>-MySQL<br />
n MySQL este <strong>ce</strong>l mai popular sistem de baze<br />
de date open-sour<strong>ce</strong><br />
n Ce conține o bază de date?<br />
n Tabele (formate <strong>din</strong> înregistrări-linii);<br />
Tabela “Persons”<br />
LastName FirstName Address City<br />
Hansen Ola Timoteivn 10 Sandnes<br />
Svendson Tove Borgvn 23 Sandnes<br />
Pettersen Kari Storgt 20 Stavanger<br />
3
<strong>PHP</strong>-MySQL<br />
n Interogări – întrebări pe care le adresăm<br />
bazei de date<br />
n SELECT LastName FROM Persons<br />
n Interogarea va returna un recordset<br />
n www.mysql.com<br />
4
<strong>PHP</strong>-MySQL - conectare<br />
n Înainte de a putea folosi baza de date trebuie<br />
să ne conectăm la ea cu funcția<br />
mysql_connect()<br />
n Sintaxa:<br />
n mysql_connect(servername,username,password);<br />
Parametru <strong>De</strong>scriere<br />
servername Opțional. Serverul la care se conectează<br />
Implicit "localhost:3306"<br />
username Opțional. Username cu care se fa<strong>ce</strong> logarea. Implicit este<br />
numele userului care deține pro<strong>ce</strong>sul server (root)<br />
password Opțional. Parola folosită pentru logare. Implicit este ""<br />
5
<strong>PHP</strong>-MySQL - conectare<br />
n Exemplu:<br />
<br />
6
<strong>PHP</strong>-MySQL - deconectare<br />
n La terminarea scriptului conexiunea este<br />
închisă. Explicit se fa<strong>ce</strong> cu mysql_close()<br />
<br />
7
<strong>PHP</strong>-MySQL – creare baze de date<br />
și tabele<br />
n CREATE DATABASE database_name<br />
n Pentru a executa comanda de mai sus<br />
trebuie să folosim funcția mysql_query()<br />
n mysql_query() folosită pentru a trimite o<br />
comandă sau o interogare la o conexiune<br />
MySQL<br />
8
<strong>PHP</strong>-MySQL – creare baze de date<br />
<br />
9
<strong>PHP</strong>-MySQL – creare tabele<br />
n CREATE TABLE comanda pentru crearea de<br />
tabele<br />
n Sintaxa:<br />
CREATE TABLE table_name<br />
( column_name1 data_type,<br />
column_name2 data_type,<br />
column_name3 data_type,<br />
....... )<br />
10
<strong>PHP</strong>-MySQL – creare tabele<br />
<br />
11
<strong>PHP</strong>-MySQL – tipuri de date<br />
Tipuri de date<br />
numeri<strong>ce</strong><br />
int(size)<br />
smallint(size)<br />
tinyint(size)<br />
mediumint(size)<br />
bigint(size)<br />
decimal(size,d)<br />
double(size,d)<br />
float(size,d)<br />
<strong>De</strong>scriere<br />
Stochează întregi.<br />
Numărul maxim de cifre poate fi specificat<br />
ca parametru<br />
Stochează numere reale.<br />
Numărul maxim de cifre de la partea<br />
întreagă și de la partea zecimală pot fi<br />
specificate ca parametri.<br />
12
<strong>PHP</strong>-MySQL – tipuri de date<br />
Tipuri de date<br />
textuale<br />
<strong>De</strong>scriere<br />
char(size) Păstrează un string de lungime fixă (poate conține litere,<br />
cifre și caractere speciale). Dimensiunea fixă este<br />
specificată în paranteze<br />
varchar(size) Păstrează un string de lungime variabilă (poate conține<br />
litere, cifre și caractere speciale). Dimensiunea maximă<br />
este specificată în paranteze<br />
tinytext Păstrează un string cu lungimea maximă 255 caractere<br />
text<br />
blob<br />
mediumtext<br />
mediumblob<br />
longtext<br />
longblob<br />
Păstrează un string cu lungimea maximă 65535 caractere<br />
Păstrează un string cu lungimea maximă 16777215<br />
caractere<br />
Păstrează un string cu lungimea maximă 4294967295<br />
caractere<br />
13
<strong>PHP</strong>-MySQL – tipuri de date<br />
Tipuri de date pentru date <strong>De</strong>scriere<br />
date(yyyy-mm-dd)<br />
datetime(yyyy-mm-dd hh:mm:ss)<br />
timestamp(yyyymmddhhmmss)<br />
time(hh:mm:ss)<br />
Tipuri de date <strong>De</strong>scriere<br />
Păstrează data și/sau ora<br />
enum(value1,value2 etc) ENUM prescurtare la ENUMERATED list.<br />
Poate stoca 65535 valori enumerate între ( ).<br />
Dacă se introdu<strong>ce</strong> o valoare care nu e în listă<br />
atunci se va insera cu un blank<br />
set SET similar cu ENUM. SET poate avea maxim<br />
64 de elemente în listă și poate stoca mai mult<br />
de o variantă<br />
14
<strong>PHP</strong>-MySQL – chei primare<br />
n Ori<strong>ce</strong> tabelă trebuie să aibă o cheie primară –<br />
folosită pentru indexare, identificare unică a<br />
înregistrărilor și pentru stabilirea relațiilor între<br />
tabele<br />
n Valoarile <strong>din</strong>tr-un câmp care e cheie primară<br />
nu pot fi null<br />
n Întotdeauna cheia primară este câmp indexat<br />
n Indexarea du<strong>ce</strong> la găsirea mai rapidă a<br />
înregistrărilor pe baza valorii chei<br />
15
<strong>PHP</strong>-MySQL – chei primare<br />
$sql =<br />
"CREATE TABLE persoana (<br />
personID int NOT NULL AUTO_INCREMENT,<br />
PRIMARY KEY(personID),<br />
prenume varchar(15),<br />
nume varchar(15),<br />
varsta int )";<br />
mysql_query($sql, $con);<br />
16
<strong>PHP</strong>-MySQL – INSERT INTO<br />
n INSERT INTO introdu<strong>ce</strong> noi înregistrări în<br />
tabele<br />
n Sintaxa:<br />
n INSERT INTO table_name VALUES (value1,<br />
value2,....)<br />
n Nu se fa<strong>ce</strong> distincție între litere mari și mici<br />
n Pentru a executa comanda se folosește<br />
funcția <strong>PHP</strong> mysql_query()<br />
17
<strong>PHP</strong>-MySQL – INSERT INTO<br />
<strong>PHP</strong>-MySQL – INSERT INTO<br />
n Inserarea datelor <strong>din</strong>tr-un formular în baza de<br />
date<br />
n Formularul:<br />
<br />
<br />
Prenume: <br />
Vârsta:
<strong>PHP</strong>-MySQL – INSERT INTO<br />
n insert.php<br />
<strong>PHP</strong>-MySQL – SELECT<br />
n Comanda SELECT se folosește pentru a<br />
interoga bazele de date<br />
n Sintaxa:<br />
n SELECT column_name(s) FROM table_name<br />
n Pentru a executa comanda se folosește<br />
funcția <strong>PHP</strong> mysql_query()<br />
21
<strong>PHP</strong>-MySQL – SELECT<br />
<br />
22
<strong>PHP</strong>-MySQL – SELECT<br />
<br />
23
<strong>PHP</strong>-MySQL – clauza WHERE<br />
n Se folosește pentru a filtra datele întoarse de<br />
SELECT după anumite criterii<br />
n Sintaxa:<br />
SELECT column FROM table<br />
WHERE column operator value<br />
n Operatori: =, !=, , =, BETWEEN,<br />
LIKE<br />
24
<strong>PHP</strong>-MySQL – clauza WHERE<br />
<strong>PHP</strong>-MySQL – clauza ORDER BY<br />
n Se folosește pentru a sorta datele întoarse de<br />
SELECT<br />
n Sintaxa:<br />
SELECT column_name(s) FROM table_name<br />
ORDER BY column_name<br />
26
<strong>PHP</strong>-MySQL – clauza ORDER BY<br />
<strong>PHP</strong>-MySQL – clauza ORDER BY<br />
n Sortare crescătoare sau descrescătoare<br />
n SELECT column_name(s) FROM table_name<br />
ORDER BY column_name DESC<br />
n Sortare după mai multe criterii<br />
n SELECT column_name(s) FROM table_name<br />
ORDER BY column_name1, column_name2<br />
28
<strong>PHP</strong>-MySQL – UPDATE<br />
n Folosită pentru a modifica datele <strong>din</strong> tabele<br />
n Sintaxa:<br />
n UPDATE table_name SET column_name =<br />
new_value WHERE column_name =<br />
some_value<br />
n Pentru a executa comanda se folosește<br />
funcția <strong>PHP</strong> mysql_query()<br />
29
<strong>PHP</strong>-MySQL – UPDATE<br />
<strong>PHP</strong>-MySQL – DELETE FROM<br />
n Folosită pentru a șterge înregistrări <strong>din</strong> tabele<br />
n Sintaxa:<br />
n DELETE FROM table_name WHERE<br />
column_name = some_value<br />
n Pentru a executa comanda se folosește<br />
funcția <strong>PHP</strong> mysql_query()<br />
31
<strong>PHP</strong>-MySQL – DELETE FROM<br />
<strong>PHP</strong> - ODBC<br />
n ODBC este un API care permite conexiunea<br />
la o sursă de date (de ex. MS Ac<strong>ce</strong>ss)<br />
n Crearea conexiunii ODBC:<br />
1. Administrative Tools în Control Panel.<br />
2. Double-click Data Sour<strong>ce</strong>s (ODBC).<br />
3. Se alege System DSN.<br />
4. Click pe Add în System DSN.<br />
5. Select Microsoft Ac<strong>ce</strong>ss Driver. Click Finish.<br />
6. Pe ecranul următor, click Select pentru a localiza baza de date.<br />
7. Baza de date primește un Data Sour<strong>ce</strong> Name (DSN).<br />
8. Click OK.<br />
n Setările trebuie făcute pe calculatorul pe<br />
care este aplicația<br />
33
<strong>PHP</strong> - ODBC<br />
n Funcția odbc_connect() se folosește pentru<br />
conexiunea la o sursă de date ODBC<br />
n Funcția odbc_exec() se folosește pentru a<br />
executa o comandă SQL<br />
$conn=odbc_connect('northwind','','');<br />
$sql="SELECT * FROM customers";<br />
$rs=odbc_exec($conn,$sql);<br />
34
<strong>PHP</strong> - ODBC<br />
n Funcția odbc_fetch_row() folosită pentru a<br />
obține o înregistrare<br />
n odbc_fetch_row($rs)<br />
n Funcția odbc_result() folosită pentru a obține<br />
câmpurile <strong>din</strong>tr-o întregistrare<br />
$cname=odbc_result($rs,1);<br />
$cname=odbc_result($rs,"CompanyName");<br />
n odbc_close($conn); // Închide conexiunea<br />
35
<strong>PHP</strong> – ODBC exemplu complet<br />
<br />
<br />
<br />
36
<strong>De</strong>zvoltarea aplicațiilor web<br />
Curs AJAX<br />
1
Aplicații web<br />
n Browser Scripting<br />
n JavaScript, HTML DOM, DHTML, VBScript, AJAX<br />
n Server Scripting<br />
n SQL, ASP, <strong>PHP</strong>, ADO<br />
2
AJAX<br />
n AJAX Asynchronous JavaScript And XML<br />
n AJAX tip de programare popularizat de<br />
Google în 2005 cu Google Suggest<br />
n AJAX nu este un nou limbaj de<br />
programare ci o nouă modalitate de a<br />
folosi standarde existente<br />
n AJAX permite crearea de aplicații web mai<br />
rapide, mai bune și mai prietenoase<br />
3
AJAX<br />
n Cerințe: HTML/XHTML, JavaScript<br />
n JavaScript-ul comunică direct cu serverul,<br />
folosind obiectul XMLHttpRequest. Folosind<br />
a<strong>ce</strong>st obiect JavaScript poate schimba date<br />
cu serverul fără a reîncărca pagina<br />
n AJAX folosește transfer asincron de date<br />
între browser și web server permițând<br />
paginilor să <strong>ce</strong>ară secvențe mici de informație<br />
de la server în loc de pagini întregi<br />
4
AJAX<br />
n Aplicațiile web for fi mai mici, mai rapide și<br />
mai prietenoase<br />
n AJAX este o tehnologie browser<br />
independentă de softul de pe webserver<br />
n AJAX este bazat pe:<br />
n JavaScript<br />
n XML<br />
n HTML<br />
n CSS<br />
5
AJAX<br />
n Standardele pe care se bazează sunt bine<br />
definite, suportate de majoritatea browserelor<br />
n Aplicațiile AJAX sunt independente de<br />
browser și platformă<br />
n Avantaje ale aplicațiilor web față de <strong>ce</strong>le<br />
desktop:<br />
n Mai mulți utilizatori<br />
n Mai ușor de instalat și actualizat<br />
n Mai ușor de dezvoltat<br />
6
AJAX<br />
n <strong>De</strong>zavantaje ale aplicațiilor web față de <strong>ce</strong>le<br />
desktop:<br />
n Interfața nu e la fel de complexă și<br />
prietenoasă<br />
n Cu AJAX interfața poate fi mai bogată și mai<br />
prietenoasă<br />
n Pentru a folosi AJAX nu trebuie învățat nimic<br />
nou – se bazează pe standarde existente<br />
7
AJAX<br />
n Tradițional în JavaScript dacă vrem să luăm<br />
informații <strong>din</strong> baze de date sau <strong>din</strong> fișiere de<br />
pe server avem nevoie de<br />
n formulare HTML<br />
n metodele GET sau POST.<br />
n se apasă butonul Submit,<br />
n se așteaptă să răspundă serverul,<br />
n se încarcă o nouă pagină<br />
8
AJAX<br />
n Datorită interacțiunii cu serverul aplicațiile<br />
web tipi<strong>ce</strong> rulează lent<br />
n Cu AJAX JavaScript-ul comunică direct cu<br />
serverul prin intermediul obiectului<br />
XMLHttpRequest<br />
n Cu HTTP Request pagina web poate <strong>ce</strong>re<br />
date de la server în fundal fără a reîncărca<br />
pagina și fără ca userul să observe a<strong>ce</strong>asta<br />
9
AJAX<br />
n XMLHttpRequest permite actualizarea paginii<br />
web cu date de pe server după <strong>ce</strong> pagina s-a<br />
încărcat<br />
n Google suggest funcționează după a<strong>ce</strong>st<br />
principiu – se în<strong>ce</strong>pe tastarea cuvântului și<br />
Google sugerează o listă de termeni de<br />
căutare<br />
n XMLHttpRequest în Internet Explorer 5.0+,<br />
Safari 1.2, Mozilla 1.0 / Firefox, Opera 8+,<br />
and Netscape 7.<br />
10
AJAX<br />
n username completata de user<br />
n time completat de AJAX<br />
<br />
<br />
Name: <br />
Time: <br />
<br />
<br />
11
AJAX<br />
n Crearea obiectului XMLHttpRequest<br />
n IE folosește ActiveXObject<br />
n Alte browsere XMLHttpRequest<br />
12
AJAX – crearea obiectului<br />
HttpRequest<br />
<br />
function ajaxFunction() {<br />
var xmlHttp;<br />
try {<br />
xmlHttp=new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari<br />
} catch (e) {<br />
try {// Internet Explorer 6.0+<br />
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");<br />
} catch (e) {<br />
try { // IE 5.5+<br />
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");<br />
} catch (e) {<br />
alert("Your browser does not support AJAX!");<br />
return false;<br />
}<br />
}<br />
}<br />
}<br />
<br />
13
AJAX – obiectul HttpRequest<br />
n Proprietăți<br />
n onreadystatechange stochează funcția care<br />
va primi și va pro<strong>ce</strong>sa răspunsul de la server<br />
xmlHttp.onreadystatechange=function()<br />
{<br />
// cod<br />
}<br />
n readyState păstrează starea răspunsului de<br />
la server; de fiecare dată când se schimbă se<br />
execută funcția onreadystatechange<br />
14
AJAX – obiectul HttpRequest<br />
Valorile posibile pentru readyState<br />
Stare <strong>De</strong>scriere<br />
0 Request neinițializat<br />
1 Request setat<br />
2 Request trimis<br />
3 Request-ul este pro<strong>ce</strong>sat<br />
4 Request finalizat<br />
15
AJAX<br />
xmlHttp.onreadystatechange=function()<br />
{<br />
if(xmlHttp.readyState==4)<br />
{<br />
// Scoate datele <strong>din</strong> raspunsul serverului<br />
}<br />
}<br />
16
AJAX<br />
n Proprietăți<br />
n responseText conține datele trimise de server<br />
xmlHttp.onreadystatechange=function()<br />
{<br />
if(xmlHttp.readyState==4) {<br />
document.myForm.time.value =<br />
xmlHttp.responseText;<br />
}<br />
}<br />
17
AJAX - Transmiterea request-ului la server<br />
n Se folosesc funcțiile open() și send()<br />
n Exemplu:<br />
xmlHttp.open("GET","time.php",true);<br />
xmlHttp.send(null);<br />
n Arg 1: metoda get sau post<br />
n Arg 2: url-ul scriptului de pe server<br />
n Arg 3: request gestionat asincron<br />
18
AJAX – când se execută funcția<br />
<br />
Name:<br />
AJAX – scriptul de pe server<br />
n time.php<br />
<br />
echo(date("G:i:s"));<br />
20
AJAX – exemplu – Suggest<br />
n Vom demonstra cum poate comunica o<br />
pagină web cu un server pe măsură <strong>ce</strong> userul<br />
introdu<strong>ce</strong> introdu<strong>ce</strong> date într-un formular<br />
n http://localhost/ajax/suggest.htm<br />
21
AJAX – exemplu – Suggest<br />
<br />
First Name: <br />
<br />
Suggestions:<br />
<br />
<br />
22
AJAX – exemplu – Suggest<br />
function showHint(str) {<br />
if (str.length==0) {<br />
document.getElementById("txtHint").innerHTML=""; return;<br />
}<br />
xmlHttp=GetXmlHttpObject();<br />
if (xmlHttp==null) {<br />
alert ("Your browser does not support AJAX!");<br />
return;<br />
}<br />
var url="gethint.php";<br />
url=url+"?q="+str; url=url+"&sid="+Math.random();<br />
xmlHttp.onreadystatechange=stateChanged;<br />
xmlHttp.open("GET",url,true);<br />
xmlHttp.send(null);<br />
}<br />
23
AJAX – exemplu – Suggest<br />
function GetXmlHttpObject() {<br />
var xmlHttp=null;<br />
try { // Firefox, Opera 8.0+, Safari<br />
xmlHttp=new XMLHttpRequest();<br />
} catch (e) { // Internet Explorer<br />
try {<br />
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");<br />
} catch (e) {<br />
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");<br />
}<br />
}<br />
return xmlHttp;<br />
}<br />
24
AJAX – exemplu – Suggest<br />
function stateChanged() {<br />
if (xmlHttp.readyState==4) {<br />
document.getElementById("txtHint").innerHTML =<br />
xmlHttp.responseText;<br />
}<br />
}<br />
n Se execută de fiecare dată când starea obiectului<br />
XMLHTTP se schimbă.<br />
n Când starea devine 4 ("complete"), conțintul lui<br />
txtHint este completat cu textul primit ca răspuns.<br />
25
AJAX – exemplu – Suggest<br />
n Pe server rulează gethint.php<br />
n AJAX poate fi folosit pentru:<br />
n A interacționa cu baze de date<br />
n A comunica în mod interactiv cu fișiere XML<br />
26