Sunteți pe pagina 1din 193

Dezvoltarea aplicaiilor web

Suport de curs
Autor: Lect. univ. dr. Horea Oros
Universitatea din Oradea
Departamentul de Matematic i Informatic
1

Aplicaii web
n Browser Scripting
n JavaScript, HTML DOM, DHTML, VBScript, AJAX
n Server Scripting
n SQL, ASP, PHP, ADO

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.

Introducere PHP
n Un fiier PHP poate conine text, taguri HTML

i scripturi. Scripturile PHP sunt executate pe


server.
n Trebuie cunoscut HTML, limbaje script
(browser side)

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 descrca i folosi gratis
6

Ce este un fiier PHP?


n Fiierul PHP conine text, tag-uri HTML i

scripturi
n Fiierele PHP sunt returnate browser-ului ca
fiiere ce conin doar cod HTML
n Au extensia ".php", ".php3 .php4, .php4
sau ".phtml"

Ce este MySQL?
n Server pentru baze de date
n Ideal att pentru aplicaii mici ct i pentru

cele foarte mari


n MySQL suport standardul SQL
n MySQL compilat pe o serie de platforme
n MySQL este gratis

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

Apache+PHP+MySQL
n PHP este simplu de nvat i ruleaz eficient

pe partea de server
n Cum se poate ncepe?
n
n
n
n

Instalarea serverului web Apache pe o main


Windows sau Linux
Instalarea PHP pe Windows sau Linux
Instalare MySQL pe Windows sau Linux
machine
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 instruciuni
n Instruciuni pentru afiarea 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 funcii


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
Funcia strlen
<?php
echo strlen("Hello world!"); // 12
?>

Funcia strpos
<?php
echo strpos("Hello world!","world"); // 6
?>
15

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

16

Instruciunea if...else
if (condiie)
cod ce se executa cnd condiia e true;
else
cod ce se executa cnd condiia 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

Instruciunea 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

Instruciunea switch
switch (expr) {
case label1:
cod care se execut cnd expr = label1;
break;
case label2:
cod care se execut cnd expre = label2;
break;
default:
cod;
}

19

Instruciunea 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
n
n

Numerice (ID numeric)


Asociative (fiecare ID este asociat cu o
valoare)
Multidimensionale

n Tablouri numerice:
n
n

$names = array("Peter","Quagmire","Joe");
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 afiat...
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

Instruciuni 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

Funcii PHP
n PHP are foarte multe funcii (>700)
n Se pot crea funcii definite de utilizator
n Funcie = bloc de cod ce poate fi executat

oricnd
n Funcia ncepe cu "function()"
n Numele funciei trebuie s indice scopul ei
n Blocul funciei delimitat de {, }

31

Funcii PHP - exemplu


<html> <body>
<?php
function writeMyName()
{
echo "Kai Jim Refsnes";
}
echo "My name is <br>";
writeMyName();
?>
</body> </html>
32

Funcii PHP - parametri


<html> <body>
<?php
function writeMyName($fname)
{
echo $fname . " Oros.<br />";
}
echo "My name is ";
writeMyName(Horea");
?>
</body> </html>
33

Funcii 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 ncrcarea serverului


n Validarea se poate face i pe server
(recomandat dac se interacioneaz cu baze
de date)
n Recomandat ca postarea unui formular s se
face pe aceeai pagin.
n Dac formularul conine date eronate
utilizatorului i sunt prezentate erorile pe
aceeai 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 Informaiile 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 folosete cnd se trimit parole
n Adresa cu valorile cmpurilor poate fi

adugat la Favorites sau Bookmarks

n Nu se folosete cnd se transmit mai mult de

100 de caractere

41

PHP $_REQUEST
n Conine valorile din:
n

$_GET, $_POST i $_COOKIE

n Poate fi folosit pentru a obine valorile din

mai multe formulare (unele folosesc get altele


post)

42

PHP $_POST
n Folosit pentru a obine datele din formulare

trimise cu metoda post


n Este un tablou asociativ conine 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 afiate 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 Funcie folosit pentru a obine data n diferite

moduri
n Sintaxa: date(format,timestamp)
n Timestamp (opional) = numrul 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 Funciile include() sau require() sunt folosite

pentru a include coninutul un fiier ntr-un


fiier php nainte de a fi procesat pe server
n
n

include() genereaz un avertisment dar


scriptul continu
require() genereaz eroare fatal i scriptul se
oprete

n Se folosesc pentru a crea funcii, 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 fiier
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 oprete
n Este recomandat a se folosi require()

55

PHP lucrul cu fiiere


n fopen() - deschide un fiier

<html> <body>
<?php
$file=fopen("welcome.txt","r");
?>
</body> </html>

56

PHP lucrul cu fiiere


n Moduri de deschidere:
n
n
n
n
n
n
n
n

r read only
r+ read/write
w write only (dac exist l terge)
w+ read/write (dac exist l terge)
a append (se pstreaz coninutul)
a+ read/append (se pstreaz coninutul)
x creeaz fiier nou(dac exist return eroare)
x+ read/write (dac exist return eroare)
57

PHP lucrul cu fiiere


n Dac fopen() nu poate deschide fiierul

atunci ntoarce valoare 0


<html> <body>
<?php
$file=fopen("welcome.txt","r") or
exit("Unable to open file!");
?>
</body> </html>
58

PHP lucrul cu fiiere


n fclose() nchide un fiier deschis
n Exemplu:
<?php
$file = fopen("test.txt","r");
//cod
fclose($file);
?>

59

PHP lucrul cu fiiere


n feof() verific dac s-a ajuns la sfritul

fiierului

if (feof($file)) echo "End of file";


n Obs. Nu se poate citi din fiier deschis n

modul w, a sau x

60

PHP lucrul cu fiiere


n Citirea unui fiier 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 fiiere


n Citirea unui fiier 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 fiiere


n PHP permite ncrcarea fiierelor pe server
n Formular HTML pentru ncrcarea fiierelor:
<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 fiiere


n enctype="multipart/form-data folosit atunci

cnd se transmit date binare (fiiere)


n Reprezint un mare risc de securitate
n Doar userii autorizai ar trebui s poat face
acest lucru

64

PHP upload fiiere


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 fiiere restricii


<?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 fiierului


<?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 fiier mic pe care serverul l salveaz
pe calculatorul user-ului
n Cnd este cerut o pagin va fi trimis i
cookie-ul salvat anterior
n Cu PHP se pot crea i obine 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 Obinerea 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

folosete funcia 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

asigurm 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 informaii sau a modifica setri


pentru o sesiune utilizator
n Variabilele sesiune stocheaz informaie
despre un singur utilizator i sunt disponibile
tuturor paginilor aplicaiei
n Dup prsirea website-ului variabilele
sesiune sunt terse
n Pentru stocarea permanent a informaiilor e
nevoie de o baz de date.
73

PHP - sesiuni
n Sesiunile funcioneaz prin crearea unui ID

unic (UID) pentru fiecare vizitator al aplicaiei


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 salvrii informaiilor
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 vizionri 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 funcia mail()
n Sintaxa:
n

mail(to,subject,message,headers,parameters)

n Pentru ca s funcioneze 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 cmpul 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

informaiile 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; }
}
if (isset($_REQUEST['email']))...............

83

PHP tratarea erorilor


n Manipulatorul de erori implicit din PHP este

foarte simplu
n Mesajul de eroare conine:
n
n
n

Numele fiierului
Numrul liniei
Mesaj afiat de browser

n Funcia die()
n Erori particularizate - Triggere de erori
n Raportarea erorilor
84

PHP tratarea erorilor


<?php $file=fopen("welcome.txt","r"); ?>
n Dac fiierul 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 funcie care este apelat cnd 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 opionali
87

PHP tratarea erorilor- error_level


Valoare Constant

Descriere

E_WARNING

Eroare runtime ne-fatal,


execuia scriptului nu este oprit

E_NOTICE

Scriptul a gsit ceva ce ar putea


fi eroare dar poate se poate
ntmpla 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 Funcie 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 folosete manipulatorul de

erori inclus n PHP


n Stabilirea manipulatorului de erori definit de
user:
set_error_handler("customError");
n Funcia 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 funcia 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 fiier (n funcie


de cum este configurat)
n Funcia error_log() poate fi folosit pentru a
trimite mesajele de eroare ntr-un fiier 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 excepii
n Excepiile sunt folosite pentru a schimba

controlul execuiei scriptului atunci cnd are


loc o eroare
n PHP 5 introduce mecanismul excepiilor
pentru gestionarea erorilor
n Mecanismul excepiilor modalitate orientat
obiect

96

PHP excepii
n Ce se ntmpl cnd are loc o excepie?
n
n

Starea curent a codului este salvat


Execuia codului va trece la un funcie
manipulator de excepii predefinit (sau
definit de programator)
Execuia poate continua la starea salvat,
execuia se poate ncheia sau poate continua
dintr-un alt loc

97

PHP excepii
n Utilizare elementar a excepiilor
n Cnd este lansat o excepie codul ce

urmeaz n bloc nu mai este executat i se


sare la blocul catch corespunztor
n Dac nu exist bloc catch corespunztor va fi
lansat o eroare fatal cu mesajul: "Uncaught
Exception

98

PHP excepii
<?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 excepii
n try, throw i catch
n n blocul try se pune codul care poate lansa

excepii
n throw se folosete pentru a lansa excepia
n Blocul catch este locul unde se intercepteaz
excepia

100

PHP excepii
<?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 excepii
n Stabilirea unui manipulator de excepii 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
oricrei aplicaii web
n Orice aplicaie web se bazeaz pe date
introduse de user aa c e important s ne
asigurm c aplicaiile primesc date corecte
103

PHP - filtrare
n Filtrarea datelor de intrare reprezint una din

cele mai importante probleme de securitate a


aplicaiilor
n Date externe:
n
n
n
n
n

Date introduse n formulare


Cookie
Date de la webservice-uri
Variabile server
Rezultate ale interogrilor bazelor de date
104

PHP - filtrare
n Funcii pentru filtrare:
n
n
n
n

filter_var() filtreaz o singur variabil cu un


filtru specificat
filter_var_array() filtreaz mai multe variabile
cu acelai filtru sau cu filtre diferite
filter_input obine o variabil de intrare i o
filtreaz
filter_input_array obine mai multe variabile
de intrare i le filtreaz cu acelai 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
n
n

Folosite pentru a validate datele introduse


Reguli de formare stricte (URL, email, IP)
Return tipul sau false (la eec)

Filtre de curare (sanitizing)


n
n
n

Permit sau interzic anumite caractere n stringuri


Nu sunt reguli pentru formatul datelor
ntotdeauna ntorc string-uri
107

PHP - filtrare
n Opiuni i indicatori (flag)
n

mai multe opiuni 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 Curarea 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 aplicaiilor web

Curs PHP Quiz

PHP Quiz
1. Ce nseamn PHP?
a.
b.
c.
d.

Personal Home Page


Private Home Page
Personal Hypertext Processor
PHP: Hypertext Preprocessor

PHP Quiz
2. Care sunt delimitatorii pentru scripturile

PHP?

a.
b.
c.
d.

<?php?>
<?php>...</?>
<&>...</&>
<script>...</script>

PHP Quiz
3. Cum scriei Hello World n PHP?
a.
b.
c.

echo "Hello World";


"Hello World";
Document.Write("Hello World");

PHP Quiz
4. Care este simbolul cu care ncep numele

tuturor variabilelor PHP?

a.
b.
c.

&
$
!

PHP Quiz
5. Cum se termin o instruciune PHP?
a.
b.
c.
d.

</php>
Linie nou
;
.

PHP Quiz
6. Sintaxa PHP seamn cel mai mult cu:
a.
b.
c.

JavaScript
VBScript
Perl i C

PHP Quiz
7. Cum se obin informaiile dintr-un formular

transmis cu metoda GET?

a.
b.
c.

Request.Form;
Request.QueryString;
$_GET[];

PHP Quiz
8. Cnd se folosete POST datele sunt afiate

n bara de adrese a browserului?

a.
b.

Da
Nu

PHP Quiz
9. n PHP se pot folosi att ct i pentru a

delimita string-uri

a.
b.

Da
Nu

10

PHP Quiz
10. Fiierele incluse trebuie s aib extensia .inc
a.
b.

Da
Nu

11

PHP Quiz
11. Cum se include fiierul time.inc?
a.
b.
c.
d.

<% include file="time.inc" %>


<?php include_file("time.inc"); ?>
<!--include file="time.inc"-->
<?php require("time.inc"); ?>

12

PHP Quiz
12. Cum se creeaz o funcie n PHP?
a.
b.
c.

create myFunction()
new_function myFunction()
function myFunction()

13

PHP Quiz
13. Cum se deschid pentru citire fiierul

time.txt?

a.
b.
c.
d.

fopen("time.txt","r");
open("time.txt");
fopen("time.txt","r+");
open("time.txt","read");

14

PHP Quiz
14. PHP permite trimiterea de email-uri direct

din scripturi?

a.
b.

Da
Nu

15

PHP Quiz
15. Cum se realizeaz conexiunea la o baz de

date MySQL?

a.
b.
c.
d.

connect_mysql("localhost");
dbopen("localhost");
mysql_connect("localhost");
mysql_open("localhost");

16

PHP Quiz
16. Cum se poate aduna 1 la valoarea variabilei

$count?

a.
b.
c.
d.

++count
count++;
$count =+1
$count++;

17

PHP Quiz
17. Cum se adaug un comentariu n PHP?
a.
b.
c.
d.

*\..\*
<!---->
<comment></comment>
/**/

18

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

Da
Nu

19

PHP Quiz
19. n PHP 5 suportul pentru MySQL este

activat n mod implicit

a.
b.

Da
Nu

20

PHP Quiz
20. Care nume de variabil nu este valid?
a.
b.
c.

$my-Var
$my_Var
$myVar

21

Dezvoltarea aplicaiilor web

Curs PHP-MySQL

Aplicaii web
n Browser Scripting
n JavaScript, HTML DOM, DHTML, VBScript, AJAX
n Server Scripting
n SQL, ASP, PHP, ADO

PHP-MySQL
n MySQL este cel mai popular sistem de baze

de date open-source
n Ce conine o baz de date?

Tabele (formate din nregistrri-linii);


Tabela Persons

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10 Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

PHP-MySQL
n Interogri ntrebri pe care le adresm

bazei de date
n

SELECT LastName FROM Persons

n Interogarea va returna un recordset


n www.mysql.com

PHP-MySQL - conectare
n nainte de a putea folosi baza de date trebuie

s ne conectm la ea cu funcia
mysql_connect()
n Sintaxa:
n

mysql_connect(servername,username,password);

Parametru

Descriere

servername

Opional. Serverul la care se conecteaz


Implicit "localhost:3306"

username

Opional. Username cu care se face logarea. Implicit este


numele userului care deine procesul server (root)

password

Opional. 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 funcia mysql_query()


n mysql_query() folosit pentru a trimite o
comand sau o interogare la o conexiune
MySQL

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
numerice

Descriere

int(size)
smallint(size)
tinyint(size)
mediumint(size)
bigint(size)

Stocheaz ntregi.
Numrul maxim de cifre poate fi specificat
ca parametru

decimal(size,d)
double(size,d)
float(size,d)

Stocheaz numere reale.


Numrul maxim de cifre de la partea
ntreag i de la partea zecimal pot fi
specificate ca parametri.

12

PHP-MySQL tipuri de date


Tipuri de date Descriere
textuale
char(size)

Pstreaz un string de lungime fix (poate conine litere,


cifre i caractere speciale). Dimensiunea fix este
specificat n paranteze

varchar(size)

Pstreaz un string de lungime variabil (poate conine


litere, cifre i caractere speciale). Dimensiunea maxim
este specificat n paranteze

tinytext

Pstreaz un string cu lungimea maxim 255 caractere

text
blob

Pstreaz un string cu lungimea maxim 65535 caractere

mediumtext
mediumblob

Pstreaz un string cu lungimea maxim 16777215


caractere

longtext
longblob

Pstreaz un string cu lungimea maxim 4294967295


caractere

13

PHP-MySQL tipuri de date


Tipuri de date pentru date

Descriere

date(yyyy-mm-dd)
datetime(yyyy-mm-dd hh:mm:ss)
timestamp(yyyymmddhhmmss)
time(hh:mm:ss)

Pstreaz data i/sau ora

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


nregistrrilor i pentru stabilirea relaiilor ntre
tabele
n Valoarile dintr-un cmp care e cheie primar
nu pot fi null
n ntotdeauna cheia primar este cmp indexat
n Indexarea duce la gsirea mai rapid a
nregistrrilor 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 nregistrri n

tabele
n Sintaxa:
n

INSERT INTO table_name VALUES (value1,


value2,....)

n Nu se face distincie ntre litere mari i mici


n Pentru a executa comanda se folosete

funcia 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" />
Vrsta: <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 folosete pentru a

interoga bazele de date


n Sintaxa:
n

SELECT column_name(s) FROM table_name

n Pentru a executa comanda se folosete

funcia 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 folosete 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 folosete 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 cresctoare sau descresctoare
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 folosete

funcia 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 nregistrri din tabele
n Sintaxa:
n

DELETE FROM table_name WHERE


column_name = some_value

n Pentru a executa comanda se folosete

funcia 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.
2.
3.
4.
5.
6.
7.
8.

Administrative Tools n Control Panel.


Double-click Data Sources (ODBC).
Se alege System DSN.
Click pe Add n System DSN.
Select Microsoft Access Driver. Click Finish.
Pe ecranul urmtor, click Select pentru a localiza baza de date.
Baza de date primete un Data Source Name (DSN).
Click OK.

n Setrile trebuie fcute pe calculatorul pe

care este aplicaia

33

PHP - ODBC
n Funcia odbc_connect() se folosete pentru

conexiunea la o surs de date ODBC


n Funcia odbc_exec() se folosete pentru a
executa o comand SQL
$conn=odbc_connect('northwind','','');
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);

34

PHP - ODBC
n Funcia odbc_fetch_row() folosit pentru a

obine o nregistrare
n

odbc_fetch_row($rs)

n Funcia odbc_result() folosit pentru a obine

cmpurile 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>
<?php $conn=
odbc_connect('northwind','','');
if (!$conn) {
exit("Connection Failed: " . $conn);
}
$sql="SELECT * FROM
customers";
$rs=odbc_exec($conn,$sql);
if (!$rs) {exit("Error in SQL");}
echo "<table><tr>";
echo "<th>Companyname</th>";
echo "<th>Contactname</th></tr>";

while (odbc_fetch_row($rs)) {
$compname=
odbc_result($rs,"CompanyName");
$conname=
odbc_result($rs,"ContactName");
echo "<tr><td>$compname</td>";
echo "<td>$conname</td></tr>";
}
odbc_close($conn);
echo "</table>";
?>
</body> </html>
36

Dezvoltarea aplicaiilor web

Curs AJAX

Aplicaii web
n Browser Scripting
n JavaScript, HTML DOM, DHTML, VBScript, AJAX
n Server Scripting
n SQL, ASP, PHP, ADO

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 aplicaii web mai
rapide, mai bune i mai prietenoase

AJAX
n Cerine: HTML/XHTML, JavaScript
n JavaScript-ul comunic direct cu serverul,

folosind obiectul XMLHttpRequest. Folosind


acest obiect JavaScript poate schimba date
cu serverul fr a rencrca pagina
n AJAX folosete transfer asincron de date
ntre browser i web server permind
paginilor s cear secvene mici de informaie
de la server n loc de pagini ntregi
4

AJAX
n Aplicaiile 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
n
n
n

JavaScript
XML
HTML
CSS
5

AJAX
n Standardele pe care se bazeaz sunt bine

definite, suportate de majoritatea browserelor


n Aplicaiile AJAX sunt independente de
browser i platform
n Avantaje ale aplicaiilor web fa de cele
desktop:
n
n
n

Mai muli utilizatori


Mai uor de instalat i actualizat
Mai uor de dezvoltat
6

AJAX
n Dezavantaje ale aplicaiilor web fa de cele

desktop:
n

Interfaa nu e la fel de complex i


prietenoas

n Cu AJAX interfaa poate fi mai bogat i mai

prietenoas
n Pentru a folosi AJAX nu trebuie nvat nimic
nou se bazeaz pe standarde existente

AJAX
n Tradiional n JavaScript dac vrem s lum

informaii din baze de date sau din fiiere de


pe server avem nevoie de
n
n
n
n
n

formulare HTML
metodele GET sau POST.
se apas butonul Submit,
se ateapt s rspund serverul,
se ncarc o nou pagin

AJAX
n Datorit interaciunii cu serverul aplicaiile

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 fr a rencrca
pagina i fr ca userul s observe aceasta

AJAX
n XMLHttpRequest permite actualizarea paginii

web cu date de pe server dup ce pagina s-a


ncrcat
n Google suggest funcioneaz dup acest
principiu se ncepe tastarea cuvntului i
Google sugereaz o list de termeni de
cutare
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 folosete 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;
}
}
}
}
</script>

13

AJAX obiectul HttpRequest


n Proprieti
n

onreadystatechange stocheaz funcia care


va primi i va procesa rspunsul de la server
xmlHttp.onreadystatechange=function()
{
// cod
}

readyState pstreaz starea rspunsului de


la server; de fiecare dat cnd se schimb se
execut funcia onreadystatechange
14

AJAX obiectul HttpRequest


Valorile posibile pentru readyState
Stare

Descriere

Request neiniializat

Request setat

Request trimis

Request-ul este procesat

Request finalizat

15

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

16

AJAX
n Proprieti
n

responseText conine 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 funciile open() i send()
n Exemplu:
xmlHttp.open("GET","time.php",true);
xmlHttp.send(null);
n
n
n

Arg 1: metoda get sau post


Arg 2: url-ul scriptului de pe server
Arg 3: request gestionat asincron

18

AJAX cnd se execut funcia


<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 msur ce userul 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 cnd starea obiectului
XMLHTTP se schimb.
n Cnd starea devine 4 ("complete"), conintul lui
txtHint este completat cu textul primit ca rspuns.
25

AJAX exemplu Suggest


n Pe server ruleaz gethint.php
n AJAX poate fi folosit pentru:
n
n

A interaciona cu baze de date


A comunica n mod interactiv cu fiiere XML

26

S-ar putea să vă placă și