Download as pdf or txt
Download as pdf or txt
You are on page 1of 193

Dezvoltarea aplicațiilor web

Suport de curs: 2009-2010


Autor: Lect. univ. dr. Horea Oros
Universitatea din Oradea
Departamentul de Matematică și Informatică

1
Aplicații web
n Browser Scripting
n JavaScript, HTML DOM, DHTML, VBScript, AJAX

n Server Scripting
n SQL, ASP, PHP, ADO

2
PHP introducere
n PHP este un limbaj de programare
puternic ce rulează pe server cu care se
pot crea pagini web dinamice și
interactive.
n PHP este folosit pe scară largă, este
gratuit, alternativă eficientă ASP de la
Microsoft
n PHP este potrivit pentru dezvoltare web și
poate fi inclus în codul HTML.

3
PHP introducere

n Sintaxa PHP este similară cu cea a


limbajului C.
n PHP este folosit adesea împreună cu
serverul web Apache pe diferite sisteme
de operare.
n Poate fi folosit și cu IIS pe sisteme
Microsoft.

4
Introducere PHP
n Un fișier PHP poate conține text, taguri HTML
și scripturi. Scripturile PHP sunt executate pe
server.
n Trebuie cunoscut HTML, limbaje script
(browser side)

5
Ce este PHP?
n PHP = PHP: Hypertext Preprocessor
n PHP limbaj scripting server side, la fel ca
ASP
n PHP este executat pe server
n PHP suportă multe baze de date (MySQL,
Informix, Oracle, Sybase, Solid, PostgreSQL,
Generic ODBC etc.)
n PHP este open source
n PHP se poate descărca și folosi gratis
6
Ce este un fișier PHP?
n Fișierul PHP conține text, tag-uri HTML și
scripturi
n Fișierele PHP sunt returnate browser-ului ca
fișiere ce conțin doar cod HTML
n Au extensia ".php", ".php3“ “.php4”, “.php4”
sau ".phtml"

7
Ce este MySQL?
n Server pentru baze de date
n Ideal atât pentru aplicații mici cât și pentru
cele foarte mari
n MySQL suportă standardul SQL
n MySQL compilat pe o serie de platforme
n MySQL este gratis

8
Apache+PHP+MySQL
n PHP + MySQL sunt cross-platformă (se poate
dezvolta pe Windows și se poate pune pe
sistem Linux)
n De ce PHP?
n PHP rulează pe diferite platforme (Windows,
Linux, Unix, etc.)
n PHP este compatibil cu aproape toate
serverele folosite (Apache, IIS, etc.)
n PHP este gratis www.php.net

9
Apache+PHP+MySQL
n PHP este simplu de învățat și rulează eficient
pe partea de server
n Cum se poate începe?
n Instalarea serverului web Apache pe o mașină
Windows sau Linux
n Instalarea PHP pe Windows sau Linux
n Instalare MySQL pe Windows sau Linux
machine
n XAMPP - WAMP

10
Sintaxa PHP
n Sintaxa PHP nu se poate vedea prin “View
Source” pentru ca codul PHP este
transformat pe server in HTML
n Codul PHP trebuie delimitat de <?php ... ?>
n Exemplu:
<html>
<body>
<?php echo "Hello World"; ?>
</body>
</html>
11
Sintaxa PHP
n Fiecare linie trebuie să se termine cu ;
n ; este separator de instrucțiuni
n Instrucțiuni pentru afișarea textului: echo,
print
n Comentarii în PHP
<html> <body>
<?php
//comentariu stil C++
/* comentariu
stil C */
# comentariu tip shell
?>
</body> </html>

12
Variabile PHP
n Variabilele se folosesc pentru a stoca
numere, stringuri, valori întoarse din funcții
pentru a fi folosite ulterior
n Toate numele de variabile încep cu $
n Exemplu: $var = valoare;
n PHP este un limbaj de programare slab
tipizat

13
Stringuri PHP
n Rolul string-urilor este de a gestiona textul
<?php
$txt="Hello World";
echo $txt;
?>

n Operatorul de concatenare
<?php
$txt1="Hello World";
$txt2="1234";
echo $txt1 . " " . $txt2;
?>

14
Stringuri PHP
Funcția strlen
<?php
echo strlen("Hello world!"); // 12
?>
Funcția strpos
<?php
echo strpos("Hello world!","world"); // 6
?>

15
Operatori PHP
n Operatori aritmetici: +, -, *, /, ++, --
n Atribuire: =, +=, -=, *=, /=, .=, %=
n Operatori relaționali: ==, !=, <, >, <=, >=
n Operatori logici: &&, ||, !
n

16
Instrucțiunea if...else
if (condiție)
cod ce se executa când condiția e true;
else
cod ce se executa când condiția e fals;
<html> <body>
<?php
$d=date("D");
if ($d=="Fri")
echo "Have a nice weekend!";
else echo "Have a nice day!";
?>
</body> </html>
17
Instrucțiunea elseif
<html> <body>
<?php
$d=date("D");
if ($d=="Fri")
echo "Have a nice weekend!";
elseif ($d=="Sun")
echo "Have a nice Sunday!";
else echo "Have a nice day!";
?>
</body> </html>
18
Instrucțiunea switch
switch (expr) {
case label1:
cod care se execută când expr = label1;
break;
case label2:
cod care se execută când expre = label2;
break;
default:
cod;
} 19
Instrucțiunea switch - exemplu
<html> <body>
<?php
switch ($x) {
case 1:
echo "Number 1"; break;
case 2:
echo "Number 2"; break;
case 3:
echo "Number 3"; break;
default:
echo "No number between 1 and 3";
}
?>
</body> </html>
20
Tablouri
n Fiecare element al unui tablou are un ID
n Tipuri de tablouri
n Numerice (ID numeric)
n Asociative (fiecare ID este asociat cu o
valoare)
n Multidimensionale
n Tablouri numerice:
n $names = array("Peter","Quagmire","Joe");
n ID-ul numeric este generat automat
21
Tablouri
ID-ul numeric generat manual
$names[0] = "Peter";
$names[1] = "Quagmire";
$names[2] = "Joe";

<?php
echo $names[1] . " and " . $names[2] . " are ".
$names[0] . "'s neighbors";
?>
22
Tablouri asociative
n Fiecare element este o pereche (cheie,
valoare)
n Exemplu
$ages = array("Peter"=>32,
"Quagmire"=>30,
"Joe"=>34);
<?php
echo "Peter is " . $ages['Peter'] . " years old.";
?>
23
Tabouri multidimensionale
n Fiecare element al tabloului poate fi un tablou
$families = array (
"Griffin"=>array ( "Peter", "Lois", "Megan”),
"Quagmire"=>array ( "Glenn”),
"Brown"=>array ( "Cleveland", "Loretta”)
);
echo “Este " . $families['Griffin'][2] . " membru al
familiei";
Dacă este afișat...
24
Tablouri asociative
Array
(
[Griffin] => Array
(
[0] => Peter
[1] => Lois
[2] => Megan
)
[Quagmire] => Array
(
[0] => Glenn
)
[Brown] => Array
(
[0] => Cleveland
[1] => Loretta
[2] => Junior
)
) 25
Instrucțiuni repetitive
n while
n do – while
n for
n for – each

26
while
<html> <body>
<?php
$i=1;
while($i<=5) {
echo "The number is " . $i . "<br />";
$i++;
}
?>
</body> </html>
27
do - while
<html> <body>
<?php
$i=0;
do {
$i++;
echo "The number is " . $i . "<br />";
} while ($i<5);
?>
</body> </html>
28
for
<html> <body>
<?php
for ($i=1; $i<=5; $i++) {
echo "Hello World!<br />";
}
?>
</body> </html>

29
foreach
n Folosită pentru a itera peste tablouri
<html> <body>
<?php
$arr=array("one", "two", "three");
foreach ($arr as $value) {
echo "Value: " . $value . "<br />";
}
?>
</body> </html>
30
Funcții PHP
n PHP are foarte multe funcții (>700)
n Se pot crea funcții definite de utilizator
n Funcție = bloc de cod ce poate fi executat
oricând
n Funcția începe cu "function()"
n Numele funcției – trebuie să indice scopul ei
n Blocul funcției delimitat de {, }

31
Funcții PHP - exemplu
<html> <body>
<?php
function writeMyName()
{
echo "Kai Jim Refsnes";
}
echo "My name is <br>";
writeMyName();
?>
</body> </html>
32
Funcții PHP - parametri
<html> <body>
<?php
function writeMyName($fname)
{
echo $fname . " Oros.<br />";
}
echo "My name is ";
writeMyName(“Horea");
?>
</body> </html>
33
Funcții PHP – valori de return
<html> <body>
<?php
function add($x, $y)
{
$total = $x + $y;
return $total;
}
echo "1 + 16 = " . add(1,16);
?>
</body> </html>
34
Formulare PHP și datele de intrare
n Variabilele $_GET și $_POST sunt folosite
pentru a accesa datele din formulare
n Fiecare element dintr-un formular HTML va fi
disponibil în mod automat în scriptul PHP
n Exemplu de formular:
<html> <body>
<form action="welcome.php" method="post">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body> </html> 35
Formulare PHP și datele de intrare
welcome.php
<html> <body>
Welcome
<?php echo $_POST["name"]; ?>.
<br />
You are
<?php echo $_POST["age"]; ?>
years old.
</body> </html>

36
Validarea datelor de intrare
n Validarea se poate face pe client pentru a
reduce încărcarea serverului
n Validarea se poate face și pe server
(recomandat dacă se interacționează cu baze
de date)
n Recomandat ca postarea unui formular să se
face pe aceeași pagină.
n Dacă formularul conține date eronate
utilizatorului îi sunt prezentate erorile pe
aceeași pagină
37
PHP $_GET
n Variabila $_GET este folosită pentru a
“culege” datele de pe formulare care au
method = ”get”
n Variabila $_GET este un tablou de perechi
(nume, valoare) trimise de metoda HTTP
GET
n Informațiile trimise cu GET sunt vizibile în
bara de adresă a browser-ului (max. 100
caractere)

38
PHP $_GET
<form action="welcome.php" method="get">
Name: <input type="text" name="name" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>

În bara de adresă:
.../welcome.php?name=Horea&age=30

39
PHP $_GET
welcome.php
Welcome
<?php echo $_GET["name"]; ?>.
<br />
You are <?php echo $_GET["age"]; ?>
years old!

40
PHP $_GET
n Nu se folosește când se trimit parole

n Adresa cu valorile câmpurilor poate fi


adăugată la Favorites sau Bookmarks

n Nu se folosește când se transmit mai mult de


100 de caractere

41
PHP $_REQUEST
n Conține valorile din:
n $_GET, $_POST și $_COOKIE
n Poate fi folosită pentru a obține valorile din
mai multe formulare (unele folosesc get altele
post)

42
PHP $_POST
n Folosită pentru a obține datele din formulare
trimise cu metoda post
n Este un tablou asociativ – conține perechi
(nume, valoare)
n Exemplu:
<form action="welcome.php" method="post">
Enter your name: <input type="text" name="name" />
Enter your age: <input type="text" name="age" />
<input type="submit" />
</form>
43
PHP $_POST
n În bara de adresă .../welcome.php
n În welcome.php
Welcome <?php echo $_POST["name"]; ?>.
<br />
You are <?php echo $_POST["age"]; ?>
years old!

44
PHP $_POST
n Datele nu sunt afișate în bara de adresă

n Nu există o limită asupra lungimii datelor

n Paginile nu pot fi incluse în Favorites sau


Bookmarks

45
PHP date()
n Funcție folosită pentru a obține data în diferite
moduri
n Sintaxa: date(format,timestamp)
n Timestamp (opțional) = numărul de secunde
de la 1 Ianuarie 1970 la 00:00:00 GMT
n Timestamp (implicit) = data și ora curentă

46
PHP date() – exemplu 1
<?php
echo date("Y/m/d");
echo "<br />";
echo date("Y.m.d");
echo "<br />";
echo date("Y-m-d");
?>

47
PHP date() – exemplu 2
mktime(hour,minute,second,month,day,year,is_dst)

<?php
$tomorrow =
mktime(0,0,0,date("m"),date("d")+1,date("Y"));
echo "Tomorrow is ". date("Y/m/d", $tomorrow);
?>

48
PHP include
n Funcțiile include() sau require() sunt folosite
pentru a include conținutul un fișier într-un
fișier php înainte de a fi procesat pe server
n include() generează un avertisment dar
scriptul continuă
n require() generează eroare fatală și scriptul se
oprește
n Se folosesc pentru a crea funcții, antete,
subsoluri ce pot fi refolosite în mai multe
pagini
49
PHP include – exemplu 1
<html> <body>
<?php include("header.php"); ?>
<h1>Welcome to my home page</h1>
<p>Some text</p>
</body> </html>

50
PHP include – exemplu 2
n menu.php
<html> <body>
<a href=“index.php">Home</a> |
<a href=“about.php">About Us</a> |
<a href="contact.php">Contact Us</a>

51
PHP include – exemplu 2 – cont.
n index.php
<?php include("menu.php"); ?>
<h1>Welcome to my home page</h1>
<p>Some text</p>
</body> </html>

n La fel cu about.php și contact.php

52
PHP include – exemplu 2 – cont.
View source:
<html> <body>
<a href="default.php">Home</a> |
<a href="about.php">About Us</a> |
<a href="contact.php">Contact Us</a> <h1>Welcome to
my home page</h1> <p>Some text</p>
</body> </html>

Pentru a modifica meniul trebuie modificat un


singur fișier
53
PHP require() - exemplu
<html> <body>
<?php include("wrongFile.php");
echo "Hello World!"; ?>
</body> </html>

n Se generează un avertisment dar scriptul


continuă

54
PHP require() - exemplu
<html> <body>
<?php require("wrongFile.php");
echo "Hello World!"; ?>
</body> </html>

n Se generează un mesaj de eroare și scriptul


se oprește
n Este recomandat a se folosi require()

55
PHP lucrul cu fișiere
n fopen() - deschide un fișier
<html> <body>
<?php
$file=fopen("welcome.txt","r");
?>
</body> </html>

56
PHP lucrul cu fișiere
n Moduri de deschidere:
n r read only
n r+ read/write
n w write only (dacă există îl șterge)
n w+ read/write (dacă există îl șterge)
n a append (se păstrează conținutul)
n a+ read/append (se păstrează conținutul)
n x creează fișier nou(dacă există return eroare)
n x+ read/write (dacă există return eroare)
57
PHP lucrul cu fișiere
n Dacă fopen() nu poate deschide fișierul
atunci întoarce valoare 0
<html> <body>
<?php
$file=fopen("welcome.txt","r") or
exit("Unable to open file!");
?>
</body> </html>

58
PHP lucrul cu fișiere
n fclose() închide un fișier deschis
n Exemplu:
<?php
$file = fopen("test.txt","r");
//cod
fclose($file);
?>

59
PHP lucrul cu fișiere
n feof() verifică dacă s-a ajuns la sfârșitul
fișierului
if (feof($file)) echo "End of file";
n Obs. Nu se poate citi din fișier deschis în
modul w, a sau x

60
PHP lucrul cu fișiere
n Citirea unui fișier linie cu linie – fgets()
<?php
$file = fopen("welcome.txt", "r") or
exit("Unable to open file!");
while(!feof($file)) {
echo fgets($file). "<br />";
}
fclose($file);
?>
61
PHP lucrul cu fișiere
n Citirea unui fișier caracter cu caracter
<?php
$file=fopen("welcome.txt","r") or
exit("Unable to open file!");
while (!feof($file)) {
echo fgetc($file);
}
fclose($file);
?>
62
PHP upload fișiere
n PHP permite încărcarea fișierelor pe server
n Formular HTML pentru încărcarea fișierelor:
<html> <body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> <br />
<input type="submit" name="submit" value="Submit" />
</form></body> </html>

63
PHP upload fișiere
n enctype="multipart/form-data” folosit atunci
când se transmit date binare (fișiere)
n Reprezintă un mare risc de securitate
n Doar userii autorizați ar trebui să poată face
acest lucru

64
PHP upload fișiere
n upload_file.php
<?php if ($_FILES["file"]["error"] > 0) {
echo "Error: " . $_FILES["file"]["error"] . "<br />"; }
else {
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . "
Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"]; }
?>
65
PHP upload fișiere – restricții
<?php if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"]
== "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg")) &&
($_FILES["file"]["size"] < 20000)) {
if ($_FILES["file"]["error"] > 0) {
echo "Error: " . $_FILES["file"]["error"] . "<br />"; }
else {
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
}
else { echo "Invalid file"; }?>

66
PHP upload salvarea fișierului
<?php if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") ||
($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 20000)) {
if ($_FILES["file"]["error"] > 0) {
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
} else {
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("upload/" . $_FILES["file"]["name"])) {
echo $_FILES["file"]["name"] . " already exists. ";
} else {
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" .
$_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
} else { echo "Invalid file"; } ?> 67
PHP cookie
n Cookie sunt folosite pentru a identifica un
user
n Este un fișier mic pe care serverul îl salvează
pe calculatorul user-ului
n Când este cerută o pagină va fi trimis și
cookie-ul salvat anterior
n Cu PHP se pot crea și obține valorile cookie

68
PHP cookie
n Creare cu setcookie() – trebuie să apară
înaintea tag-ului <html>
n Sintaxa:
n setcookie(name, value, expire, path, domain);
<?php
setcookie("user", "Alex Porter", time()+3600);
?>
<html> <body>
</body> </html>
69
PHP cookie
n Obținerea unei valori cookie:
n Varibila PHP $_COOKIE
n Exemplu:
<?php
// Tiparirea unui cookie
echo $_COOKIE["user"];
// Vizualizarea tuturor cookie-urilor
print_r($_COOKIE);
?>
70
PHP cookie
n Pentru verifica dacă un cookie a fost setat se
folosește funcția isset()
<html> <body>
<?php
if (isset($_COOKIE["user"]))
echo "Welcome " . $_COOKIE["user"] .“!<br />";
else
echo "Welcome guest!<br />";
?>
</body> </html>
71
PHP cookie
n Stergerea unui cookie – trebuie să ne
asigurăm că data și ora la care expiră este
anterioară datei și orei curente
<?php
// se stabilete data la o ora in urma
setcookie("user", "", time()-3600);
?>

72
PHP - sesiuni
n O variabilă de sesiune PHP este folosită
pentru a stoca informații sau a modifica setări
pentru o sesiune utilizator
n Variabilele sesiune stochează informație
despre un singur utilizator și sunt disponibile
tuturor paginilor aplicației
n După părăsirea website-ului variabilele
sesiune sunt șterse
n Pentru stocarea permanentă a informațiilor e
nevoie de o bază de date.
73
PHP - sesiuni
n Sesiunile funcționează prin crearea unui ID
unic (UID) pentru fiecare vizitator al aplicației
web
n Variabilele sunt stocate pe baza acestui UID
n UID-ul este salvat într-un cookie sau este
propagat prin URL

74
PHP - sesiuni
n Pornirea unei sesiuni PHP
<?php
session_start();
?>
<html> <body>
</body> </html>
n Sesiunea utilizator este înregistrată la server
n Permite începerea salvării informațiilor
n Atribuie UID pentru sesiunea utilizatorului
75
PHP - sesiuni
n Stocarea unei variabile de sesiune
<?php
session_start();
$_SESSION['views']=1; // stocarea datelor de sesiune
?>
<html> <body>
<?php
//obtinerea datelor de sesiune
echo "Page views=". $_SESSION['views']; ?>
</body> </html>
76
PHP - sesiuni
n Contor de vizionări ale paginii
<?php
session_start();
if(isset($_SESSION['views']))
$_SESSION['views']=
$_SESSION['views']+1;
else
$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>
77
PHP - sesiuni
n Distrugerea unei sesiuni: unset() sau
session_destroy()
n Eliberarea unei variabile de sesiune
<?php
unset($_SESSION['views']);
?>
n Distrugerea completă a sesiunii
<?php
session_destroy();
?>
78
PHP - email
n Se pot trimite email-uri direct dintr-un script
cu funcția mail()
n Sintaxa:
n mail(to,subject,message,headers,parameters)
n Pentru ca să funcționeze e nevoie de un
sistem de email instalat

79
PHP - email
<?php
$to = "someone@example.com";
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "someonelse@example.com";
$headers = "From: $from";
mail($to,$subject,$message,$headers);
echo "Mail Sent.";
?>

80
PHP – formular email
<html> <body>
<?php
if (isset($_REQUEST['email'])) //daca "email“ este completat, trimite email
{ //send email
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail( "someone@example.com", "Subject: $subject", $message, "From: $email" );
echo "Thank you for using our mail form";
} else //daca "email" nu este completat afiseaza formularul
{ echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text' /><br />
Subject: <input name='subject' type='text' /><br />
Message:<br />
<textarea name='message' rows='15' cols='40'> </textarea><br />
<input type='submit' /> </form>";
}
?></body> </html>

81
PHP – email securizat
n Injectare de email – în câmpul email
someone@example.com%0A
Cc:person2@example.com %0A
Bcc:person3@example.com,
person3@example.com,
anotherperson4@example.com,
person5@example.com%0AB
To:person6@example.com
n Email-ul va ajunge și la alte adrese

82
PHP – email securizat
n Pentru a stopa email injection trebuie validate
informațiile introduse de user
<html> <body>
<?php
function spamcheck($field)
{ //filter_var() sanitizes the e-mail
//address using FILTER_SANITIZE_EMAIL
$field=filter_var($field, FILTER_SANITIZE_EMAIL);
//filter_var() validates the e-mail
//address using FILTER_VALIDATE_EMAIL
if(filter_var($field, FILTER_VALIDATE_EMAIL)) {
return TRUE;
} else { return FALSE; }
}

83
if (isset($_REQUEST['email']))...............
PHP – tratarea erorilor
n Manipulatorul de erori implicit din PHP este
foarte simplu
n Mesajul de eroare conține:
n Numele fișierului
n Numărul liniei
n Mesaj afișat de browser
n Funcția die()
n Erori particularizate - Triggere de erori
n Raportarea erorilor
84
PHP – tratarea erorilor
<?php $file=fopen("welcome.txt","r"); ?>
n Dacă fișierul nu există:
Warning: fopen(welcome.txt) [function.fopen]:
failed to open stream: No such file or
directory in C:\wamp\www\eroare.php on
line 1

85
PHP – tratarea erorilor
n Varianta mai bună – scriptul se va opri cu un
mesaj mai clar
<?php
if(!file_exists("welcome.txt"))
{
die("File not found");
} else
{
$file=fopen("welcome.txt","r");
}
?> 86
PHP – tratarea erorilor
n Crearea unui manipulator de erori
particularizat
n O funcție care este apelată când are loc o
eroare
n Sintaxa:
error_function(error_level,error_message,
error_file,error_line,error_context)
n Primii 2 parametri obligatorii
n Ultimii 3 opționali

87
PHP – tratarea erorilor- error_level
Valoare Constantă Descriere
2 E_WARNING Eroare runtime ne-fatală,
execuția scriptului nu este oprită
8 E_NOTICE Scriptul a găsit ceva ce ar putea
fi eroare dar poate se poate
întâmpla și la rularea normală a
scripului
256 E_USER_ERROR Eroare fatală generată de user.
512 E_USER_WARNING Avertisment ne-fatal generat de
user
1024 E_USER_NOTICE ...
4096 E_RECOVERABLE_ERROR ...
8191 E_ALL Toate erorile și avertismentele

88
PHP – tratarea erorilor
n Funcție pentru tratarea erorilor:
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno]
$errstr<br />";
echo "Ending Script";
die();
}

89
PHP – tratarea erorilor
n În mod implicit se folosește manipulatorul de
erori inclus în PHP
n Stabilirea manipulatorului de erori definit de
user:
set_error_handler("customError");
n Funcția acceptă și al doilea argument
(error_level) care indică tipul erorilor ce vor fi
tratate
n În cazul acesta vor fi trate toate erorile

90
PHP – tratarea erorilor
n Exemplu:
<?php
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr";
}
set_error_handler("customError");
echo($test); // va fi apleta functia
//Custom error: [8] Undefined variable: test
?>
91
PHP – tratarea erorilor
n Erorile pot fi lansate cu funcția trigger_error()
n Exemplu:
<?php
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below");
}
?>
92
PHP – tratarea erorilor
<?php
function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr<br />";
echo "Ending Script"; die();
set_error_handler("customError",E_USER_WARNING);
$test=2;
if ($test>1) {
trigger_error("Value must be 1 or
below",E_USER_WARNING);
}
?>

93
PHP – tratarea erorilor
n Jurnalizarea erorilor
n Erorile sunt trimise la sistemul de jurnalizare
(log) al serverului sau la un fișier (în funcție
de cum este configurat)
n Funcția error_log() poate fi folosită pentru a
trimite mesajele de eroare într-un fișier sau
pe server
n Erorile pot fi trimise și prin email

94
PHP – tratarea erorilor
<?php
function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr<br />";
echo "Webmaster has been notified";
error_log("Error: [$errno] $errstr",1, "someone@example.com",
"From: webmaster@example.com");
}
set_error_handler("customError",E_USER_WARNING);
$test=2;
if ($test>1) {
trigger_error("Value must be 1 or below", E_USER_WARNING);
}
?>
95
PHP – excepții
n Excepțiile sunt folosite pentru a schimba
controlul execuției scriptului atunci când are
loc o eroare
n PHP 5 introduce mecanismul excepțiilor
pentru gestionarea erorilor
n Mecanismul excepțiilor – modalitate orientată
obiect

96
PHP – excepții
n Ce se întâmplă când are loc o excepție?
n Starea curentă a codului este salvată
n Execuția codului va trece la un funcție
manipulator de excepții predefinită (sau
definită de programator)
n Execuția poate continua la starea salvată,
execuția se poate încheia sau poate continua
dintr-un alt loc

97
PHP – excepții
n Utilizare elementară a excepțiilor
n Când este lansată o excepție codul ce
urmează în bloc nu mai este executat și se
sare la blocul catch corespunzător
n Dacă nu există bloc catch corespunzător va fi
lansată o eroare fatală cu mesajul: "Uncaught
Exception“

98
PHP – excepții
<?php // exceptie lansata si neprinsa
function checkNum($number)
{
if($number>1) {
throw
new Exception(“Valoare trebuie sa fie mai mica");
}
return true;
}
checkNum(2);
?>
99
PHP – excepții
n try, throw și catch
n În blocul try se pune codul care poate lansa
excepții
n throw se folosește pentru a lansa excepția
n Blocul catch este locul unde se interceptează
excepția

100
PHP – excepții
<?php
function checkNum($number) {
if($number>1) {
throw new Exception("Valoare trebuie sa fie mai mica ");
}
return true;
}
try {
checkNum(2);
echo ‘Numarul e OK';
}
catch(Exception $e) {
echo 'Message: ' .$e->getMessage();
}
?> 101
PHP – excepții
n Stabilirea unui manipulator de excepții la
nivelul cel mai de sus
<?php
function myException($exception) {
echo "<b>Exception:</b> " ,
$exception->getMessage();
}
set_exception_handler('myException');
throw
new Exception('Uncaught Exception occurred');
?> 102
PHP - filtrare
n Filtrele PHP sunt folosite pentru a valida
datele care vin din surse nesigure, de ex.
date introduse de user
n Testarea, filtrarea și validarea datelor
utilizator reprezintă o parte importantă a
oricărei aplicații web
n Orice aplicație web se bazează pe date
introduse de user așa că e important să ne
asigurăm că aplicațiile primesc date corecte

103
PHP - filtrare
n Filtrarea datelor de intrare reprezintă una din
cele mai importante probleme de securitate a
aplicațiilor
n Date externe:
n Date introduse în formulare
n Cookie
n Date de la webservice-uri
n Variabile server
n Rezultate ale interogărilor bazelor de date

104
PHP - filtrare
n Funcții pentru filtrare:
n filter_var() – filtrează o singură variabilă cu un
filtru specificat
n filter_var_array() – filtrează mai multe variabile
cu același filtru sau cu filtre diferite
n filter_input – obține o variabilă de intrare și o
filtrează
n filter_input_array – obține mai multe variabile
de intrare și le filtrează cu același filtru sau cu
filtre diferite
105
PHP - filtrare
<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT)) {
echo("Integer is not valid");
}
else {
echo("Integer is valid");
}
?>
106
PHP - filtrare
n Există două tipuri de filtre:
n Filtre de validare
n Folosite pentru a validate datele introduse
n Reguli de formare stricte (URL, email, IP)
n Return tipul sau false (la eșec)
n Filtre de curățare (sanitizing)
n Permit sau interzic anumite caractere în stringuri
n Nu sunt reguli pentru formatul datelor
n Întotdeauna întorc string-uri

107
PHP - filtrare
n Opțiuni și indicatori (flag)
n mai multe opțiuni filtrelor
<?php
$var=300;
$int_options = array( "options"=>array ( "min_range"=>0,
"max_range"=>256 ) );
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)) { echo("Integer
is not valid");
}
else {
echo("Integer is valid");
}
?>
108
PHP - filtrare
n Validare datelor de intrare

<?php
if(!filter_has_var(INPUT_GET, "email")) {
echo("Input type does not exist");
} else {
if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) {
echo "E-Mail is not valid";
}else { echo "E-Mail is valid"; }
}
?>

109
PHP - filtrare
n Curățarea datelor de intrare

<?php
if(!filter_has_var(INPUT_POST, "url")) {
echo("Input type does not exist");
} else {
$url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL);
}
?>

110
Dezvoltarea aplicațiilor web

Curs PHP Quiz

1
PHP Quiz
1. Ce înseamnă PHP?
a. Personal Home Page
b. Private Home Page
c. Personal Hypertext Processor
d. PHP: Hypertext Preprocessor

2
PHP Quiz
2. Care sunt delimitatorii pentru scripturile
PHP?
a. <?php…?>
b. <?php>...</?>
c. <&>...</&>
d. <script>...</script>

3
PHP Quiz
3. Cum scrieți “Hello World” în PHP?
a. echo "Hello World";
b. "Hello World";
c. Document.Write("Hello World");

4
PHP Quiz
4. Care este simbolul cu care încep numele
tuturor variabilelor PHP?
a. &
b. $
c. !

5
PHP Quiz
5. Cum se termină o instrucțiune PHP?
a. </php>
b. Linie nouă
c. ;
d. .

6
PHP Quiz
6. Sintaxa PHP seamănă cel mai mult cu:
a. JavaScript
b. VBScript
c. Perl și C

7
PHP Quiz
7. Cum se obțin informațiile dintr-un formular
transmis cu metoda GET?
a. Request.Form;
b. Request.QueryString;
c. $_GET[];

8
PHP Quiz
8. Când se folosește POST datele sunt afișate
în bara de adrese a browserului?
a. Da
b. Nu

9
PHP Quiz
9. În PHP se pot folosi atât “ cât și ‘ pentru a
delimita string-uri
a. Da
b. Nu

10
PHP Quiz
10. Fișierele incluse trebuie să aibă extensia .inc
a. Da
b. Nu

11
PHP Quiz
11. Cum se include fișierul time.inc?
a. <% include file="time.inc" %>
b. <?php include_file("time.inc"); ?>
c. <!--include file="time.inc"-->
d. <?php require("time.inc"); ?>

12
PHP Quiz
12. Cum se creează o funcție în PHP?
a. create myFunction()
b. new_function myFunction()
c. function myFunction()

13
PHP Quiz
13. Cum se deschid pentru citire fișierul
“time.txt”?
a. fopen("time.txt","r");
b. open("time.txt");
c. fopen("time.txt","r+");
d. open("time.txt","read");

14
PHP Quiz
14. PHP permite trimiterea de email-uri direct
din scripturi?
a. Da
b. Nu

15
PHP Quiz
15. Cum se realizează conexiunea la o bază de
date MySQL?
a. connect_mysql("localhost");
b. dbopen("localhost");
c. mysql_connect("localhost");
d. mysql_open("localhost");

16
PHP Quiz
16. Cum se poate aduna 1 la valoarea variabilei
$count?
a. ++count
b. count++;
c. $count =+1
d. $count++;

17
PHP Quiz
17. Cum se adaugă un comentariu în PHP?
a. *\..\*
b. <!--…-->
c. <comment>…</comment>
d. /*…*/

18
PHP Quiz
18. PHP poate rula pe IIS de la MS?
a. Da
b. Nu

19
PHP Quiz
19. În PHP 5 suportul pentru MySQL este
activat în mod implicit
a. Da
b. Nu

20
PHP Quiz
20. Care nume de variabilă nu este valid?
a. $my-Var
b. $my_Var
c. $myVar

21
Dezvoltarea aplicațiilor web

Curs PHP-MySQL

1
Aplicații web
n Browser Scripting
n JavaScript, HTML DOM, DHTML, VBScript, AJAX

n Server Scripting
n SQL, ASP, PHP, ADO

2
PHP-MySQL
n MySQL este cel mai popular sistem de baze
de date open-source
n Ce conține o bază de date?
nTabele (formate din înregistrări-linii);
Tabela “Persons”
LastName FirstName Address City
Hansen Ola Timoteivn 10 Sandnes
Svendson Tove Borgvn 23 Sandnes
Pettersen Kari Storgt 20 Stavanger

3
PHP-MySQL
n Interogări – întrebări pe care le adresăm
bazei de date
n SELECT LastName FROM Persons
n Interogarea va returna un recordset
n www.mysql.com

4
PHP-MySQL - conectare
n Înainte de a putea folosi baza de date trebuie
să ne conectăm la ea cu funcția
mysql_connect()
n Sintaxa:
n mysql_connect(servername,username,password);
Parametru Descriere
servername Opțional. Serverul la care se conectează
Implicit "localhost:3306"
username Opțional. Username cu care se face logarea. Implicit este
numele userului care deține procesul server (root)
password Opțional. Parola folosită pentru logare. Implicit este ""

5
PHP-MySQL - conectare
n Exemplu:
<?php
$con =
mysql_connect("localhost","peter","abc123");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
?>

6
PHP-MySQL - deconectare
n La terminarea scriptului conexiunea este
închisă. Explicit se face cu mysql_close()
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
// cod
mysql_close($con);
?>
7
PHP-MySQL – creare baze de date
și tabele
n CREATE DATABASE database_name
n Pentru a executa comanda de mai sus
trebuie să folosim funcția mysql_query()
n mysql_query() folosită pentru a trimite o
comandă sau o interogare la o conexiune
MySQL

8
PHP-MySQL – creare baze de date
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
if (mysql_query("CREATE DATABASE my_db",$con)) {
echo "Database created";
} else {
echo "Error creating database: " . mysql_error();
}
mysql_close($con);
?>
9
PHP-MySQL – creare tabele
n CREATE TABLE comanda pentru crearea de
tabele
n Sintaxa:
CREATE TABLE table_name
( column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
....... )

10
PHP-MySQL – creare tabele
<?php

$con = mysql_connect("localhost","peter","abc123");
if (!$con) { die('Could not connect: ' . mysql_error()); }
if (mysql_query("CREATE DATABASE my_db",$con)) { echo "Database created"; }
else { echo "Error creating database: " . mysql_error(); }

mysql_select_db("my_db", $con); //prima data trebuie selectata BD


$sql =
"CREATE TABLE persoana( prenume varchar(15), nume varchar(15), varsta int )";
mysql_query($sql,$con);
mysql_close($con);

?>

11
PHP-MySQL – tipuri de date

Tipuri de date Descriere


numerice
int(size) Stochează întregi.
smallint(size) Numărul maxim de cifre poate fi specificat
tinyint(size) ca parametru
mediumint(size)
bigint(size)
decimal(size,d) Stochează numere reale.
double(size,d) Numărul maxim de cifre de la partea
float(size,d) întreagă și de la partea zecimală pot fi
specificate ca parametri.

12
PHP-MySQL – tipuri de date
Tipuri de date Descriere
textuale
char(size) Păstrează un string de lungime fixă (poate conține litere,
cifre și caractere speciale). Dimensiunea fixă este
specificată în paranteze
varchar(size) Păstrează un string de lungime variabilă (poate conține
litere, cifre și caractere speciale). Dimensiunea maximă
este specificată în paranteze
tinytext Păstrează un string cu lungimea maximă 255 caractere
text Păstrează un string cu lungimea maximă 65535 caractere
blob
mediumtext Păstrează un string cu lungimea maximă 16777215
mediumblob caractere
longtext Păstrează un string cu lungimea maximă 4294967295
longblob caractere 13
PHP-MySQL – tipuri de date
Tipuri de date pentru date Descriere
date(yyyy-mm-dd) Păstrează data și/sau ora
datetime(yyyy-mm-dd hh:mm:ss)
timestamp(yyyymmddhhmmss)
time(hh:mm:ss)

Tipuri de date Descriere


enum(value1,value2 etc) ENUM prescurtare la ENUMERATED list.
Poate stoca 65535 valori enumerate între ( ).
Dacă se introduce o valoare care nu e în listă
atunci se va insera cu un blank
set SET similar cu ENUM. SET poate avea maxim
64 de elemente în listă și poate stoca mai mult
de o variantă

14
PHP-MySQL – chei primare
n Orice tabelă trebuie să aibă o cheie primară –
folosită pentru indexare, identificare unică a
înregistrărilor și pentru stabilirea relațiilor între
tabele
n Valoarile dintr-un câmp care e cheie primară
nu pot fi null
n Întotdeauna cheia primară este câmp indexat
n Indexarea duce la găsirea mai rapidă a
înregistrărilor pe baza valorii chei

15
PHP-MySQL – chei primare
$sql =
"CREATE TABLE persoana (
personID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(personID),
prenume varchar(15),
nume varchar(15),
varsta int )";

mysql_query($sql, $con);

16
PHP-MySQL – INSERT INTO
n INSERT INTO introduce noi înregistrări în
tabele
n Sintaxa:
n INSERT INTO table_name VALUES (value1,
value2,....)
n Nu se face distincție între litere mari și mici
n Pentru a executa comanda se folosește
funcția PHP mysql_query()

17
PHP-MySQL – INSERT INTO
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
mysql_query("INSERT INTO persoana (prenume, nume, varsta)
VALUES ('Peter', 'Griffin', '35')");
mysql_query("INSERT INTO persoana (prenume, nume, varsta)
VALUES ('Glenn', 'Quagmire', '33')");
mysql_close($con);
?>

18
PHP-MySQL – INSERT INTO
n Inserarea datelor dintr-un formular în baza de
date
n Formularul:
<html> <body>
<form action="insert.php" method="post">
Prenume: <input type="text" name=“prenume" />
Nume: <input type="text" name=“nume" />
Vârsta: <input type="text" name=“varsta" />
<input type="submit" />
</form>
</body> </html>

19
PHP-MySQL – INSERT INTO
n insert.php
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$sql="INSERT INTO persoana (prenume, nume, varsta) VALUES
('$_POST[prenume]', '$_POST[nume]‘, '$_POST[varsta]')";
if (!mysql_query($sql,$con)) {
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con)
?>
20
PHP-MySQL – SELECT
n Comanda SELECT se folosește pentru a
interoga bazele de date
n Sintaxa:
n SELECT column_name(s) FROM table_name
n Pentru a executa comanda se folosește
funcția PHP mysql_query()

21
PHP-MySQL – SELECT
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM persoana");
while($row = mysql_fetch_array($result)) {
echo $row[‘prenume'] . " " . $row[‘nume'];
echo "<br />";
}
mysql_close($con);
?>
22
PHP-MySQL – SELECT
<?php $con = mysql_connect("localhost","peter","abc123");
if (!$con) { die('Could not connect: ' . mysql_error()); }
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM persoana");
//afisarea rezultatelor într-un tabel
echo "<table border='1'> <tr> <th>Prenume</th> <th>Nume</th> </tr>";
while($row = mysql_fetch_array($result)) {
echo "<tr>"; echo "<td>" . $row[‘prenume'] . "</td>";
echo "<td>" . $row[‘nume'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($con);
?>
23
PHP-MySQL – clauza WHERE
n Se folosește pentru a filtra datele întoarse de
SELECT după anumite criterii
n Sintaxa:
SELECT column FROM table
WHERE column operator value
n Operatori: =, !=, <, >, <=, >=, BETWEEN,
LIKE

24
PHP-MySQL – clauza WHERE
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con) { die('Could not connect: ' . mysql_error()); }

mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM persoana
WHERE prenume='Peter'");
while($row = mysql_fetch_array($result)) {
echo $row[‘prenume'] . " " . $row[‘nume'];
echo "<br />";
}
?>
25
PHP-MySQL – clauza ORDER BY
n Se folosește pentru a sorta datele întoarse de
SELECT
n Sintaxa:
SELECT column_name(s) FROM table_name
ORDER BY column_name

26
PHP-MySQL – clauza ORDER BY
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con) { die('Could not connect: ' . mysql_error()); }

mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM persoana ORDER BY varsta");
while($row = mysql_fetch_array($result)) {
echo $row[‘prenume'];
echo " " . $row[‘nume'];
echo " " . $row[‘vartsa'];
echo "<br />";
}
mysql_close($con);
?>
27
PHP-MySQL – clauza ORDER BY
n Sortare crescătoare sau descrescătoare
n SELECT column_name(s) FROM table_name
ORDER BY column_name DESC

n Sortare după mai multe criterii


n SELECT column_name(s) FROM table_name
ORDER BY column_name1, column_name2

28
PHP-MySQL – UPDATE
n Folosită pentru a modifica datele din tabele
n Sintaxa:
n UPDATE table_name SET column_name =
new_value WHERE column_name =
some_value

n Pentru a executa comanda se folosește


funcția PHP mysql_query()

29
PHP-MySQL – UPDATE
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con) { die('Could not connect: ' . mysql_error()); }
mysql_select_db("my_db", $con);
mysql_query("UPDATE persoana SET varsta = '36'
WHERE prenume= 'Peter' AND nume = 'Griffin'");
mysql_close($con);
?>

30
PHP-MySQL – DELETE FROM
n Folosită pentru a șterge înregistrări din tabele
n Sintaxa:
n DELETE FROM table_name WHERE
column_name = some_value

n Pentru a executa comanda se folosește


funcția PHP mysql_query()

31
PHP-MySQL – DELETE FROM
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con) { die('Could not connect: ' . mysql_error()); }

mysql_select_db("my_db", $con);
mysql_query("DELETE FROM persoana
WHERE nume='Griffin'");
mysql_close($con);
?>

32
PHP - ODBC
n ODBC este un API care permite conexiunea
la o sursă de date (de ex. MS Access)
n Crearea conexiunii ODBC:
1. Administrative Tools în Control Panel.
2. Double-click Data Sources (ODBC).
3. Se alege System DSN.
4. Click pe Add în System DSN.
5. Select Microsoft Access Driver. Click Finish.
6. Pe ecranul următor, click Select pentru a localiza baza de date.
7. Baza de date primește un Data Source Name (DSN).
8. Click OK.

n Setările trebuie făcute pe calculatorul pe


care este aplicația
33
PHP - ODBC
n Funcția odbc_connect() se folosește pentru
conexiunea la o sursă de date ODBC
n Funcția odbc_exec() se folosește pentru a
executa o comandă SQL

$conn=odbc_connect('northwind','','');
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);

34
PHP - ODBC
n Funcția odbc_fetch_row() folosită pentru a
obține o înregistrare
n odbc_fetch_row($rs)

n Funcția odbc_result() folosită pentru a obține


câmpurile dintr-o întregistrare
$cname=odbc_result($rs,1);
$cname=odbc_result($rs,"CompanyName");

n odbc_close($conn); // Închide conexiunea


35
PHP – ODBC exemplu complet
<html> <body> while (odbc_fetch_row($rs)) {
<?php $conn= $compname=
odbc_connect('northwind','',''); odbc_result($rs,"CompanyName");
if (!$conn) { $conname=
exit("Connection Failed: " . $conn); odbc_result($rs,"ContactName");
} echo "<tr><td>$compname</td>";
$sql="SELECT * FROM echo "<td>$conname</td></tr>";
customers"; }
$rs=odbc_exec($conn,$sql); odbc_close($conn);
if (!$rs) {exit("Error in SQL");} echo "</table>";
echo "<table><tr>"; ?>
echo "<th>Companyname</th>"; </body> </html>
echo "<th>Contactname</th></tr>"; 36
Dezvoltarea aplicațiilor web

Curs AJAX

1
Aplicații web
n Browser Scripting
n JavaScript, HTML DOM, DHTML, VBScript, AJAX

n Server Scripting
n SQL, ASP, PHP, ADO

2
AJAX
n AJAX Asynchronous JavaScript And XML
n AJAX tip de programare popularizat de
Google în 2005 cu Google Suggest
n AJAX nu este un nou limbaj de
programare ci o nouă modalitate de a
folosi standarde existente
n AJAX permite crearea de aplicații web mai
rapide, mai bune și mai prietenoase

3
AJAX
n Cerințe: HTML/XHTML, JavaScript
n JavaScript-ul comunică direct cu serverul,
folosind obiectul XMLHttpRequest. Folosind
acest obiect JavaScript poate schimba date
cu serverul fără a reîncărca pagina
n AJAX folosește transfer asincron de date
între browser și web server permițând
paginilor să ceară secvențe mici de informație
de la server în loc de pagini întregi

4
AJAX
n Aplicațiile web for fi mai mici, mai rapide și
mai prietenoase
n AJAX este o tehnologie browser
independentă de softul de pe webserver
n AJAX este bazat pe:
n JavaScript
n XML
n HTML
n CSS
5
AJAX
n Standardele pe care se bazează sunt bine
definite, suportate de majoritatea browserelor
n Aplicațiile AJAX sunt independente de
browser și platformă
n Avantaje ale aplicațiilor web față de cele
desktop:
n Mai mulți utilizatori
n Mai ușor de instalat și actualizat
n Mai ușor de dezvoltat

6
AJAX
n Dezavantaje ale aplicațiilor web față de cele
desktop:
n Interfața nu e la fel de complexă și
prietenoasă
n Cu AJAX interfața poate fi mai bogată și mai
prietenoasă
n Pentru a folosi AJAX nu trebuie învățat nimic
nou – se bazează pe standarde existente

7
AJAX
n Tradițional în JavaScript dacă vrem să luăm
informații din baze de date sau din fișiere de
pe server avem nevoie de
n formulare HTML
n metodele GET sau POST.
n se apasă butonul Submit,
n se așteaptă să răspundă serverul,
n se încarcă o nouă pagină

8
AJAX
n Datorită interacțiunii cu serverul aplicațiile
web tipice rulează lent
n Cu AJAX JavaScript-ul comunică direct cu
serverul prin intermediul obiectului
XMLHttpRequest
n Cu HTTP Request pagina web poate cere
date de la server în fundal fără a reîncărca
pagina și fără ca userul să observe aceasta

9
AJAX
n XMLHttpRequest permite actualizarea paginii
web cu date de pe server după ce pagina s-a
încărcat
n Google suggest funcționează după acest
principiu – se începe tastarea cuvântului și
Google sugerează o listă de termeni de
căutare
n XMLHttpRequest în Internet Explorer 5.0+,
Safari 1.2, Mozilla 1.0 / Firefox, Opera 8+,
and Netscape 7.
10
AJAX
n username completata de user
n time completat de AJAX

<html> <body>
<form name="myForm">
Name: <input type="text" name="username" />
Time: <input type="text" name="time" />
</form></body>
</html>
11
AJAX
n Crearea obiectului XMLHttpRequest
n IE folosește ActiveXObject
n Alte browsere XMLHttpRequest

12
AJAX – crearea obiectului
HttpRequest
<script type="text/javascript">
function ajaxFunction() {
var xmlHttp;
try {
xmlHttp=new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari
} catch (e) {
try {// Internet Explorer 6.0+
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try { // IE 5.5+
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
alert("Your browser does not support AJAX!");
return false;
}
}
}
}
13
</script>
AJAX – obiectul HttpRequest
n Proprietăți
n onreadystatechange stochează funcția care
va primi și va procesa răspunsul de la server
xmlHttp.onreadystatechange=function()
{
// cod
}
n readyState păstrează starea răspunsului de
la server; de fiecare dată când se schimbă se
execută funcția onreadystatechange
14
AJAX – obiectul HttpRequest
Valorile posibile pentru readyState

Stare Descriere
0 Request neinițializat
1 Request setat
2 Request trimis
3 Request-ul este procesat
4 Request finalizat

15
AJAX
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
// Scoate datele din raspunsul serverului
}
}

16
AJAX
n Proprietăți
n responseText conține datele trimise de server

xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4) {
document.myForm.time.value =
xmlHttp.responseText;
}
}
17
AJAX - Transmiterea request-ului la server
n Se folosesc funcțiile open() și send()
n Exemplu:
xmlHttp.open("GET","time.php",true);
xmlHttp.send(null);
n Arg 1: metoda get sau post
n Arg 2: url-ul scriptului de pe server
n Arg 3: request gestionat asincron

18
AJAX – când se execută funcția
<form name="myForm">
Name:
<input type="text“
onkeyup= "ajaxFunction();"
name="username" />

Time: <input type="text" name="time" />


</form>

testAJAX.htm
19
AJAX – scriptul de pe server
n time.php
<?php
echo(date("G:i:s"));
?>

20
AJAX – exemplu – Suggest
n Vom demonstra cum poate comunica o
pagină web cu un server pe măsură ce user-
ul introduce introduce date într-un formular
n http://localhost/ajax/suggest.htm

21
AJAX – exemplu – Suggest
<form>
First Name: <input type="text" id="txt1"
onkeyup="showHint(this.value)">
</form>
<p>Suggestions:
<span id="txtHint"></span>
</p>

22
AJAX – exemplu – Suggest
function showHint(str) {
if (str.length==0) {
document.getElementById("txtHint").innerHTML=""; return;
}
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null) {
alert ("Your browser does not support AJAX!");
return;
}
var url="gethint.php";
url=url+"?q="+str; url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
} 23
AJAX – exemplu – Suggest
function GetXmlHttpObject() {
var xmlHttp=null;
try { // Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
} catch (e) { // Internet Explorer
try {
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
24
AJAX – exemplu – Suggest
function stateChanged() {
if (xmlHttp.readyState==4) {
document.getElementById("txtHint").innerHTML =
xmlHttp.responseText;
}
}
n Se execută de fiecare dată când starea obiectului
XMLHTTP se schimbă.
n Când starea devine 4 ("complete"), conțintul lui
txtHint este completat cu textul primit ca răspuns.

25
AJAX – exemplu – Suggest
n Pe server rulează gethint.php

n AJAX poate fi folosit pentru:


n A interacționa cu baze de date
n A comunica în mod interactiv cu fișiere XML

26

You might also like