28.04.2013 Views

De ce PHP? - Universitatea din Oradea

De ce PHP? - Universitatea din Oradea

De ce PHP? - Universitatea din Oradea

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!