Sunteți pe pagina 1din 193

Dezvoltarea aplicaiilor web

Suport de curs: 2009-2010 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 $names = array("Peter","Quagmire","Joe"); ID-ul numeric este generat automat
21

n Tablouri numerice:
n n

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
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); ?>
n Stergerea unui cookie trebuie s ne

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 2 8 E_WARNING E_NOTICE Descriere Eroare runtime ne-fatal, execuia scriptului nu este oprit Scriptul a gsit ceva ce ar putea fi eroare dar poate se poate ntmpla i la rularea normal a scripului Eroare fatal generat de user. Avertisment ne-fatal generat de user ... ... Toate erorile i avertismentele
88

256 512 1024 4096 8191

E_USER_ERROR E_USER_WARNING E_USER_NOTICE E_RECOVERABLE_ERROR E_ALL

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) Permit sau interzic anumite caractere n stringuri Nu sunt reguli pentru formatul datelor ntotdeauna ntorc string-uri

Filtre de curare (sanitizing)


n n n

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?


n

Tabele (formate din nregistrri-linii); Tabela Persons


LastName Hansen Svendson Pettersen FirstName Ola Tove Kari Address Borgvn 23 Storgt 20 City Sandnes Stavanger Timoteivn 10 Sandnes

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 Parametru servername username password Descriere

mysql_connect(servername,username,password);
Opional. Serverul la care se conecteaz Implicit "localhost:3306" Opional. Username cu care se face logarea. Implicit este numele userului care deine procesul server (root) 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 int(size) smallint(size) tinyint(size) mediumint(size) bigint(size) decimal(size,d) double(size,d) float(size,d) Descriere Stocheaz ntregi. Numrul maxim de cifre poate fi specificat ca parametru

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 Pstreaz un string de lungime variabil (poate conine litere, cifre i caractere speciale). Dimensiunea maxim este specificat n paranteze Pstreaz un string cu lungimea maxim 255 caractere Pstreaz un string cu lungimea maxim 65535 caractere Pstreaz un string cu lungimea maxim 16777215 caractere Pstreaz un string cu lungimea maxim 4294967295 caractere

varchar(size)

tinytext text blob mediumtext mediumblob longtext longblob

13

PHP-MySQL tipuri de date


Tipuri de date pentru date date(yyyy-mm-dd) datetime(yyyy-mm-dd hh:mm:ss) timestamp(yyyymmddhhmmss) time(hh:mm:ss) Tipuri de date enum(value1,value2 etc) Descriere Pstreaz data i/sau ora

Descriere 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 similar cu ENUM. SET poate avea maxim 64 de elemente n list i poate stoca mai mult de o variant
14

set

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 0 1 2 3 4 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