Sunteți pe pagina 1din 195

1

NOTE DE CURS
- PROGRAMARE WEB -

2010 Lect. drd. Cristina ZAMFIR


2

Reading this material will enable you to build dynamic


websites. If you’ve build websites using plain HTML,
you realiye the limitations of this approach. Statistic
content from a pure HTML website is just that – static.
It stays the same unless you physically update it. Your
users can’t interact with the site in any meaningful
fashion.
Using a language such PHP and database such as
MySQL allows you to make your sites dynamic: to have
them be customizable and contain real-time information.
3

Tehnologia client/server.
Evoluţia arhitecturii client/sever
4

 Sistemele de prelucrare pe loturi


 Sistemele de prelucare în timp real

 Sistemele de prelucare cu acces multiplu

 Sistemele de prelucrare client/server


Sistemele de prelucrare pe loturi
5

 foloseau calculatoare de tip


mainframe care executau lucrări,
numite job.
 Componenta care controla
lucrările se numea monitor
(supervizor).
 Supervizorul se ocupa de
înlănţuirea şi supravegherea
lucrărilor, fără a interveni
operatorul.
 Lucrările erau executate
secvenţial, pe măsură ce soseau.
 Informaţia nu era procesată până
când aceasta nu este completă
Sistemele de prelucrare în timp real
6

 au apărut odată cu extiderea capacităţii de


memorie.
 executau complet lucrările într-o cuantă de
timp.
 între terminale şi calculatorul central existau
comunicaţii directe în ambele sensuri.
 au fost create cu scopul de a permite
controlarea unor activităţi din afara SC
(operaţiile de I/O).
Sistemele de prelucrare cu acces multiplu
7

 au apărut o dată cu apariţia


minicalculatoarelor
 oferă posibilitatea utilizării simultane
de către mai mulţi utilizatori a
resurselor de calcul, prin procesul de
împărţire a timpului de utilizare a
procesorului (time-sharing).
 se asigură distribuirea resurselor unui
sistem de prelucrare a informaţiei
între mai mulţi utilizatori
independenţi, alocându-se pentru
fiecare dintre ei o cuantă de timp.
Sistemele de prelucrare client/server
8

 au apărut ca o necesitate a conectării


microcalculatoarelor (PC) pentru partajarea
resurselor (fizice, logice sau informaţionale-
BD).
Concepte în domeniul reţelelor de calculatoare
9
 Reţea de calculatoare – ansamblul de calculatoare interconectate între ele prin
medii de comunicaţie, asigurând utilizarea în comun a resurselor fizice, logice şi
informaţionale.
 Medii de comunicaţie - mediu fizic prin intermediul căruia se pot transmite
date.
 Arhitectura – schema generală a unui sistem pentru a realiza un anumit mod de
funcţionare.
 Tehnologie – modalitatea de implementare a unei arhitecturi.
 Tehnologia client-server - o modalitate de a separa o aplicaţie în două părţi
distincte.
 Client (front-end) – reprezintă consumatorul de servicii.
 Server (back-end) – reprezintă furnizorul de servicii şi acţionează ca un
mainframe
 Middleware (produse program de intermediere) – componentă proiectată pentru
a ascunde părţii de front-end (client) nivelurile inferioare ale reţelei
Caracteristicile arhitecturii client/server
10

 serviciu-relaţie între procese ce se execută pe calculatoare separate.


 resurse partajate-server-ul poate servi mai mulţi clienţi în acelaşi timp
 protocoale asimetrice-existenţa relaţiei de tipul „unul la mulţi” între
server şi client.
 transparenţa locaţiei–ascunderea unor informaţii clienţilor referitoare
la poziţia serverului în cadrul unei reţele
 comunicaţie bazată pe mesaje-interacţiunea între calculatoare se face
prin mecanismul de transmisie de mesaje.
 încapsularea serviciilor-un mesaj specifică server-ului serviciul cerut.
 scalabilitate-pot fi scalate pe orizontală sau verticală.
 integritate-datele şi codul server-ului sunt reţinute centralizat, ceea ce
implică o actualizare şi securizare eficiente a datelor partajate.
Tipuri de soluţii client/server
11

 Server de fişiere
 Server de baze de date

 Server de aplicaţii

 Server Web

 Server de aplicaţii web


Server de fişiere
12

 utilizate pentru stocarea


programelor şi fişierelor de date;
 reprezintă o formă primitivă de
acces la date, care necesită
multiple schimburi de mesaje
între server şi clienţi,
 sunt dublate de servere de
tipărire.
Server de baze de date
13

 sunt calculatoarele pe care rulează


un SGBD, folosind un limbaj SQL
 permit iniţializarea, accesarea şi

întreţinerea bazelor de date


 clientul trimite cereri SQL

 server-ul de baze de dateexecută

accesul la baza de date


 rezultatul comenzilor SQL este

returnat clientului prin intermediul


reţelei.
Server de aplicaţii
14

 sunt utilizate în controlul unor


dispozitive periferice de la
distanţă
 utilizarea unui server de aplicaţii

presupune (re)programarea atât a


server-ului cât şi a clienţilor
Server Web
15

 sunt utilizate pentru stocarea


paginilor web
 are ca scop primirea fişierele
de pe server într-un format
specific browser-ului de web
şi de a le transmite prin
intermediul reţelei.
 sunt create pentru a transmite
conţinut static unui număr
mare de utilizatori.
Server de aplicaţii web
16

 sunt proiectate pentru a


extinde server-ele de web
pentru conţinutul dinamic.
 „se agaţă ” de server-ul de web
 interceptează automat
utilizatorii care doresc un
conţinut dinamic.
17

Caracteristici şi soluţii de arhitecturi


Componentele arhitecturii client/sever
18

 Arhitectura client/server-arhitectură de reţea în


care fiecare calculator din reţea este un client sau
un server.
 Calculatorul client-interacţionează cu un
utilizator. Are două sarcini: logica prezentării şi
logica aplicaţiei.
 Calculatorul server-orice calculator de birou
puternic, al cărui rol este de a furniza servicii şi
resurse utilizatorilor.
Sarcinile calculatorului client
19

 logica prezentării – reprezintă interfaţa cu utilizatorul:


 asigură coordonarea interacţiunii dintre utilizator şi
aplicaţie
 include detalii privitoare la afişarea tuturor
informaţiilor pe ecranul calculatorului.
 include şi partea de preluare a datelor de la utilizator

 logica aplicaţiei - acea parte a programului care decide


ce acţiuni trebuie să se execute în diferite situaţii şi
implementează regulile afacerii.
Sarcinile calculatorului server
20

 responsabil cu administrarea accesului la baza de


date: sortarea datelor, selectarea acelora de care are
nevoie clientul,
 asigurarea că alţi clienţi nu încearcă modificarea

unor înregistrări pe care alţi clienţi le vizualizează


Avantajele şi dezavantajele
21
arhitecturii client/server
 Avantaje
 au o securitate mai bună;

 performanţele pot fi îmbunătăţite uşor;

 raportul calitate / preţ este mai bun.

 Dezavantaje
 complexitatea, nefiind simplu de configurat şi de administrat;

 necesităţi - pentru a putea deservi un număr mare de clienţi,


server-ul trebuie să fie un calculator foarte performant;
 preţ - performanţele server-ului scad o dată cu creşterea
numărului de utilizatori.
Tipuri de arhitecturi client/server
22

 Arhitectura client/server pe două niveluri


 Arhitectura client/server pe trei niveluri

 Arhitectura client/server pe mai multe


niveluri
Arhitectura client/server pe două niveluri
23

 a avut drept sursă arhitectura file server


 a îmbunătăţit: utilizabilitatea; scalabilitatea şi
flexibilitatea
 are trei componente repartizate pe două niveluri:
interfaţa cu utilizatorul, logica aplicaţiei şi gestiunea
bazei de date
Arhitectura client/server pe trei niveluri
24

 este adăugat un nivel suplimentar (nivel de mijloc sau server


de aplicaţii), între client şi server-ul bazei de date
 clientul (primul nivel) este reprezentat de interfaţa
sistemului cu utilizatorul
 server-ul de baze de date (nivelul trei) furnizează
funcţionalitatea gestiunii bazei de date
 server-ul de aplicaţii (nivelul de mijloc) furnizează servicii
de administrare a regulilor afacerii şi a prelucrării datelor
Arhitectura client/server pe mai multe niveluri
25

 nivelul de mijloc este împărţit în două sau mai multe


niveluri cu funcţiuni diferite
 cele mai cunoscute aplicaţii cu o astfel de arhitectură
sunt aplicaţiile Internet.
26

Introducere în limbajul PHP


Caracteristici ale PHP
27

Tipuri de limbaje de scriptare:


 client side –interpretează scripturile doar după ce

paginile care conţin script-urile au fost descărcate;


 server side - scripturile sunt rulate pe partea de

server înainte ca pagina care conţine scriptul să fie


trimisă browser-ului.
Pentru a putea rula un script PHP
28

 parser (analizorul, interpretorul) PHP –


interpretează scripturile PHP
 server de web (Apache) – care acceptă cererile

HTTP formulate de clienţi şi le oferă


răspunsurile la cererile formulate, adăugând şi
datele cerute.
 browser (client de web) – cu ajutorul său se

vizualizează rezultatele.
Sintaxa şi semantica limbajului
29

Sintaxa limbajului reprezintă totalitatea regulilor de


scriere a programelor, astfel încât să fie acceptate de
către interpretorul PHP.
Semantica limbajului se referă la semnificaţia
construcţiilor sintactice corecte.
Vocabularul limbajului PHP
30

 caractere utilizate-setul de caractere al limbajului:


litere mari şi mici, cifre, şi o serie de caractere
speciale
 identificatorii-modalităţi de definire a datelor,
funcţiilor, cuvintelor cheie. Identificatorii încep
întotdeauna cu o literă.
 separatorii-elemente care separă identificatorii:
spaţiu, punct şi virgulă şi virgula
 comentarii
Scrierea şi executarea script-urilor
31

<?php
phpinfo();
?>
• http://localhost/director/pagina
• calculatorul hazdă (localhost)
• adresa IP 127.0.0.1 poate înlocui numele calculatorului
gazdă
• phpinfo() - oferă o serie de informaţii despre PHP
• liniile de cod în limbajul PHP sunt finalizate cu ;
Funcţionarea script-urilor PHP
32
Tipuri de date în PHP
33

 Tipuri scalare
 Boolean
 Întreg –stocate pe 32 de biţi.
 Număr real –reprezentate pe 64 biţi
 Şir de caractere –trebuiesc incluse între ghilimele.

 Tipuri compuse

 Tablouri –este asocierea dintre elementele


tabloului şi cheile sale.
Exemple de tipuri de date
34

 2 – număr întreg
 -3 – număr întreg
 - 4 – este eroare deoarece are spaţiu
 5.0 – nu este număr întreg
 2.3e4 – este număr real
 2 – nu este număr real
 “4” – nu este număr întreg
 ‘şir de caractere’
 $clasa[1] = „ limbaj”
Caractere speciale
35

 \n – trecere la linie nouă


 \” – ghilimele
 \$ - simbolul $
 \\ - caracterul backslash
Variabile şi constante PHP
36

 Variabile – încep cu $ urmate de o literă sau _.


În limbajul PHP nu se precizează tipul de variabilă.
Atribuirea valorilor se face prin atribuire:
 atribuire prin valoare

 atribuire prin referinţă – folosind simbolul &.

 Constante – se definesc prin funcţia define(). Odată

definite, valorile lor nu se modifică şi pot fi utilizate


oriunde.
define($nume_constanta,valoare[,case sensitive])
Variabile dinamice
37

Variabila dinamică este denumită folosind o pereche de


simboluri ale dolarului ($$) şi este asociată cu o variabilă
obişnuită care are un nume similar şi include un singur
simbol al dolarului.

$nume=”Popa”;
$nume_persoana=”nume”;
echo $$nume_persoana;
Conversia automată de tip a variabilelor
38

Reguli:
 Dacă şirul începe cu o valoare numerică, valoarea şirului

este dată de valoarea numerică respectivă; în caz contrar,


valoarea şirului este zero.
 Dacă un punct zecimal sau un exponent (e sau E), este

asociat cu valoarea numerică, tipul variabilei rezultante


este dublu; în caz contrar, tipul valorii rezultante este un
întreg.
Conversia manuală de tip a variabilelor
39

 (int), (integer) - conversie forţată la întreg


 (real), (double), (float) - conversie forţată la dublu
 (string) - conversie forţată la şir
 (array) - conversie forţată la tablou
 (object) - conversie forţată la obiect
Exemple de conversie de tip
40

$x = 1; $x = 1;
$y = $x+ „1 se aduna”; $y = 2.5;
echo $y $z = $x + (integer) $y;
echo $z
Conversie automată

Conversie manuală
Exemple de variabile şi constante
41

 $a
 $1a – nu este variabilă
 $_1a – nu este variabilă
 $A
 $a+b – nu este variabilă
 define(“constanta”,”Programare web”)
 define(“constanta”,”Programare web”, true)
Operatori aritmetici
42

 / - împărţire zecimală
 % - modulo returnând restul
 . – concatenare
Operatori de concatenare
43

 === - identic
 == - egal
 !== - nu este identic
 <> sau != - diferit
Operatori logici
44

 AND sau && - ŞI logic


 OR sau || - SAU logic
 ! – negaţia logică
Operatori de incrementare şi decrementare
45

 $x=$y--
 $x=++$y
Funcţii
46

 rand() – generează aleator o valoare


 rand($a,$b)–generează aleator o valoare între a şi b
 max($a,$b,...) – valoarea maximă dintr-un şir
 sqrt($a) – scoate radicalul din variabila a
 pow($baza,$exponent) – ridică baza la putere
 constant(“nume_constanta”) – întroarce valoarea
constantei
 settype($variabila,”tip”) – converteşte variabila la tipul de
dată dorit
 gettype($variabila) – afişează tipul variabilei
47

Structuri de control în PHP


Structura altenativă (condiţională) 1
48

if...else – expresia este evaluată la valoarea sa booleană

if(expresie)
{secventa de instructiuni1}
[else{secventa de instructiuni2}]
Structura altenativă (condiţională) 2
49

Elseif – evaluează expresia la valoarea sa de TRUE.


if(expresie1)
{secventa de instructiuni}
elseif(expresie2)
{secventa de instructiuni2}
else
{secventa de instructiuni3}
Structura alternativă (condiţională) 3
50

Switch–este folosită atunci când trebuie ca valoarea unei variabile sau expresii să fie
comparată cu diferite valori.
switch($variabila) switch($variabila)
{case valoare1: {case valoare1:
secvenţa instrucţiuni1 secvenţa instrucţiuni1
break; break;
case valoare2: case valoare2:
secvenţa instrucţiuni2 secvenţa instrucţiuni2
break; break;
................................................. .................................................
case valoaren: default:
secvenţa instrucţiunin secvenţa instrucţiuni
break; break;
} }
Structura repetitivă 1
51

While – execută un set de instrucţiuni atât timp cât expresia


este evaluată la valoarea sa de TRUE.

while(expresie) while(expresie):
{ secv_instrucţiuni
secv_instrucţiuni endwhile;
}
Structura repetitivă 2
52

Do...while –verificarea valorii de adevăr a condiţiei se face


după execuţia grupului de instrucţiuni.

do
secvenţă de instrucţiuni
while(expresie);
Structura repetitivă 3
53

For–este o structură de ciclare cu număr cunoscut de


paşi.
for(expresie1;expresie2;expresia3)
{secvenţă de instrucţiuni}
 Expresie1 –expresia de iniţializare a variabilei de
ciclare
 Expresie2 –expresia de test

 Expresie3 –expresia de incrementare


Structura repetitivă 4
54

Foreach – folosită pentru parcurgerea tablourilor.


Tablou
foreach($tablou as $valoare)
{secvenţă de instrucţiuni}

Matrice
foreach($tablou as $valoare)
foreach($valoare as $valoare1)
{secvenţă de instrucţiuni}
Alte instrucţiuni
55

 Continue – folosită în instrucţiunile de ciclare


pentru a omite restul iteraţiei curente şi pentru a
continua execuţia instrucţiunii iterative.
 Break – folosită pentru întreruperea execuţiei unei

instrucţiuni repetitive. Instrucţiunile care se află


după break nu vor mai fi executate.
56

Utilizarea tablourilor în PHP


Crearea unui tablou
57

Crearea unui tablou se poate face prin:


 atribuirea unei valori pentru o variabilă din tablou;
 invocarea funcţiei array().
Crearea unui tablou prin atribuire
58

$limbaje[] = „C”; $limbaje[0] = „C”;


$limbaje[] = „PHP”; $limbaje[1] = „PHP”;
$limbaje[] =”Pascal”; $limbaje[] =”Pascal”;

$limbaje[“PHP”] = „Ridicat”;
$limbaje[“Pascal”]=„Mediu”;
$limbaje[“C”] =”Redus”;
Crearea unui tablou prin funcţia array()
59

$limbaje=array(10=>„C”, „PHP”, „Pascal”);

$limbaje=array(„PHP”=>„Ridicat”,”Pascal” =>„Mediu”, ”C”=>”Redus”);


Crearea unui tablou multi-dimensional
60

$date["PHP"] = array("simplu", "popular");


$date[“Pascal"] = array(“dificil", "nepopular");
$date[“C"] = array(“simplu", "popular");

$date= array("PHP"=>array("simplu","popular"),
"Pascal"=>array("dificil","nepopular"),
"C"=>array("dificil", "popular"));
Parcurgerea unui tablou
61

 se poate face prin precizarea numelui tabloului şi a cheii


aferente valorii;
$y = 3 * $x[1];
 se parcurge secvenţial tabloul cu ajutorul instrucţiunii for;

<?php
$limbaje = array(0=>"C", 1=>"PHP", 2 =>"Pascal");
$limita = count($limbaje);
for ($i = 0; $i < $limita; $i++)
{
echo "<BR>".$i."=>".$limbaje[$i];
}
?>
Precizarea unui element dintr-un tablou multi-
dimensional
62

<?php
$a = array(array(2, 5), array(1, 4), array(4,5));
$b = $a[1][1] + $a[2][0];
echo $b;
?>
Afişarea unui caracter dintr-un şir de
caractere
63

 pentru afişarea unui caracter din cadrul unui şir de


caractere se va folosi următoarea formă:
$b=$var{pozitie}

<?php
$a = 'Programare WEB';
$b = $a{11};
echo $b;
?>
64

Utilizarea funcţiilor în PHP


Definirea unei funcţii
65

function nume_functie(nume_argument)
// aici se insereaza corpul functiei

 Numele funcţiei este case-sensitive


function calculeaza_arie($inaltime,$latime)

return $inaltime * $latime;

Funcţia va întoarce o valoare
Apelarea unei funcţii
66

 apelarea funcţiei se face prin specificarea numelui funcţiei


şi a argumentelor
$arie = calculeaza_arie(2,4);
 pentru a nu mai afişa mesajele de avertizare se va folosi
simbolul @.
Definirea funcţiilor cu argumente prestabilite
67

<?php
function impozit_vanzari($cantitate ,$rata = 0.0725)
{ echo "<BR>cantitate=".$cantitate;
echo "<BR>rata=".$rata;
return $cantitate*$rata;}

$cumparaturi = 123.45;
echo "<BR>cumparaturi = ".$cumparaturi;
$impozit = impozit_vanzari($cumparaturi,0.08);
echo "<BR>impozit = ".$impozit;
echo "<BR>";
$cumparaturi = 123.45;
echo "<BR>cumparaturi = ".$cumparaturi;
$impozit = impozit_vanzari($cumparaturi);
echo "<BR>impozit = ".$impozit;
?>
Variabile şi referinţe
68

Limbajul PHP foloseşte două tipuri de variabile:


 globale-sunt declarate în afara funcţiilor. Domeniul de
existenţă a unei variabile globale nu include şi corpul
funcţiei. Pentru a putea fi folosită inclusiv în corpul acesteia
se va folosi instrucţiunea GLOBAL.
GLOBAL $var1, $var2, $var3;
 locale-sunt create în interiorul funcţiei şi sunt distruse atunci
când se termină execuţia funcţiei.
 statice-valoarea unei variabile locale trebuie să se păstreze
de la o apelare la alta a funcţiei.
STATIC $var1, $var2, $var3;
Exemplu variabilă globală - greşit
69

<?php
$pret= 13.5;
$cantitate= 250;
function cumpara()
{ return $pret * $cantitate;}
echo "Suma pe care trebuie sa o platiti este ".
cumpara();
?>
Exemplu variabilă globală - bun
70

<?php
$pret= 13.5;
$cantitate= 250;
function cumpara()
{ GLOBAL $pret, $cantitate;
return $pret * $cantitate;}
echo "Suma pe care trebuie sa o platiti este ".
cumpara();
?>
Exemplu variabile locale
71

<?php
function local()
{ $x = 5;
echo "<br>In corpul functiei x = ".$x;
}
$x = 2;
echo "<br>In rest x = ".$x;
local();
echo "<br>In rest x = ".$x;
?>
Exemplu variabilă statică
72

<?php
function locala() {
$x = $x + 1;
echo "<br> x = ".$x;}
function statica()
{ STATIC $x;
$x = $x + 1;
echo "<br> x = ".$x;}
locala();
locala();
echo "<br>";
statica();
statica();
?>
Utilizarea referinţelor 1
73

 Operatorul referinţă modifică valoarea variabilei după


ultima modificare.
<?php
$a = 'Disciplina';
$b = &$a;
echo 'Valoarea variabilei $a este '.$a.'<br>';
echo 'Valoarea variabilei $b este '.$b.'<br>';
$b='Programare Web';
echo 'Variabila $b are valoarea Programare Web';
echo '<br>Valoarea variabilei $a va deveni '.$a;
?>
Utilizarea referinţelor 2
74

 Operatorul referinţă dacă se foloseşte la definirea


funcţie, atunci se va folosi şi la atribuirea valorii.
<?php
function &refer ( )
{global $s;
return $s;}
$s = "Continut 1";
$z = &$s;
$z='Continut 2';
$y=&refer();
echo $y;?>
Funcţii
75

 isset($variabila)-verifică dacă variabila a fost setată sau nu


 current($tablou)-returnează valoarea curentă a tabloului
 next($tablou)-valoarea următorului element al tabloului
 prev($tablou)-valoarea elementului anterior
 key($tablou)-întoarce cheia valorii curente
 explode(“delimitator”,$sir)-transformă un şir într-o matrice
 list($var1,$var2)-atribuie variabile cum acestea ar fi tablouri
 implode(“delimitator”,$tablou)-transformă matricea într-un şir
de caractere
ISSET
76

<?php
if(isset($_POST['adresa']='a'))
{echo 'Mesaj';}
else
{echo 'Mesaj 1';}
?>
Current, next, prev
77

Fie tabloul: 10 a c
f 34 abc
def 435 1ad
Care va fi rezultatul execuţiei secvenţei:
<?php
$matrice=array(array(10,'a','c'),array('f',34,'abc'),array('def',43, '1ad'));
$prim_element=current($matrice[0]);
$urmat_element=next($matrice[2]);
$anterior_element=prev($matrice[2]);
echo 'Primul element este: '.$prim_element.'<br>';
echo 'Urmatorul element este: '.$urmat_element.'<br>';
echo 'Elementul anterior este: '.$anterior_element.'<br>';
?>
EXPLODE
78

 Fie şirul format din seria şi numărul facturii(GL-


567).
 Să se păstreze în variabila serie_factura seria facturii

şi în nr_factura numărul facturii.


79

<?php
$factura='GL-567';
$separare=explode('-',$factura);
$serie_factura=$separare[0];
$nr_factura=$separare[1];
echo 'Seria facturii este '.$serie_factura.' si numarul este '.$nr_factura;?>

<?php
$factura='GLX-56567';
list($serie_factura,$nr_factura)=explode('-',$factura);
echo 'Seria facturii este '.$serie_factura.' si numarul este '.$nr_factura;
?>
IMPLODE
80

 Fie seria unei facturi identificată prin variabila


serie_f şi numărul facturii identificat prin variabila
nr_f
 Să se concateneze cele două variabile într-una

singură şi separatorul dintre acestea să fie spaţiul


81

<?php
$serie_f='GLX';
$nr_f=456;
$factura=$serie_f.' '.$nr_f;
echo 'Factura are seria si numarul '.$factura;
?>

<?php
$serie_f='GL';
$nr_f=45786;
$matrice_factura=array($serie_f,$nr_f);
$factura=implode(' ',$matrice_factura);
echo 'Factura are seria si numarul '.$factura;
?>
82

LUCRUL CU FORMULARE
Formular – definiţie şi definire
83

 Componentă web care preia datele introduse de utilizator


şi le transmite server-ului
 Introducerea unui formular în cadrul documentelor HTML
se face prin tag-ul:

<form name="nume_formular" method="nume_metodă"


action="URL_script">

 name – numele formularului


 method – metoda de transmisie a datelor
 action - specifică browser-ului ce se va întâmpla cu datele
introduse
Transmiterea datelor la server-ul de Web
84

Transmiterea datelor se face prin :


 Metoda POST-preia datele introduse în cadrul
formularului şi le transmite server-ului prin intermediul
protocolului HTTP. Datele transmise nu pot fi vizualizate
în cadrul adresei.
 Metoda GET-preia datele din cadrul elementelor
formularului, le codifică şi apoi le adaugă în cadrul
adresei URL, astfel că se poate vedea numele câmpului şi
valoarea sa. Datele apar în cadrul adresei URL sub formă
de perechi de forma nume=valoare.
Metoda POST-fişier HTML
85

<form action="fisier_prelucrare.php" method="post" name="Primul_formular" >


<table width="284" border="0" align="center">
<tr>
<td width="122">Nume si prenume</td>
<td width="152"><input name="date_personale" type="text" ></td>
</tr>
<tr>
<td>Adresa</td>
<td><textarea name="adresa" rows="2">
</textarea>
</td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="Submit" value="Prelucreaza datele">
</div></td>
</tr>
</table>
</form>
Metoda POST
86
fişierul de prelucrare PHP
<?php
echo "Am inregistrat numele si prenumele dvs.:
<strong>". $_POST[date_personale].“
</strong> si va trimitem coletul la adresa
<strong>".$_POST[adresa]."</strong>";
?>

Adresa URL prin metoda POST


Metoda GET
87
fişierul de prelucrare PHP
<body>
<?php
echo "Am inregistrat numele si prenumele dvs.:
<strong>". $_GET[date_personale].“
</strong> si va trimitem coletul la adresa
<strong>".$_GET[adresa]."</strong>";
?>

Adresa URL prin metoda GET


Lucrul cu elemente de formular
88

 controale de tip “text” (câmp de editare);


 control de tip “textarea”;

 butoane “radio”;

 casete de validare;

 controlul de tip listă (“select”).

 câmpuri ascunse
Controale de tip câmp de editare
89

<input name="nume" type="password" size="33"


maxlength="15">

 TYPE specifică tipul câmpului de editare


 SIZE precizează dimensiunea câmpului de editare
 MAXLENGTH specifică numărul maxim de caractere
care pot fi introduse în câmpul de editare
 VALUE reprezintă valoarea iniţială a câmpului de
editare.
Controale de tip “textarea”
90

<textarea name="textarea" cols="43"


rows="10"></textarea>

 COLS stabileşte numărul total de caractere care sunt


introduse pe un rând
 ROWS precizează numărul rândurilor care se pot

include în cadrul câmpului de editare


Butoane radio
91

<label>
<input type="radio" name="Nume_grup"
value="o2">Optiunea2
</label>

 TYPE specifică tipul de buton


 NAME precizează numele grupului din care face
parte
 VALUE reprezintă valoarea asociată butonului
radio
Casete de selecţie
92

<input name="o1" type="checkbox"


value="checkbox">

 NAME specifică numele opţiunii


 TYPE precizează tipul de buton

 VALUE reprezintă valoarea asociată casetei de

validare
Controlul de tip listă
93

<SELECT NAME=”oras[]” MULTIPLE SIZE=”numar”>


<option value="BC">Bacau</option>
<option value=“GL">Galati</option>
</select>

 NAME atribuie listei de selecţie un nume


 MULTIPLE se pot alege mai multe opţiuni, iar numele va
trebui să aibă numele urmat de []
 SIZE precizează numărul de elemente vizibile din listă
 VALUE atribuie o valoare de tip text care va fi transmisă
server-ului, sub formă de perechi "name = value”
Exemple
94
Lucrul cu butoane radio-static/HTML
<form action="fisier_prelucrare_radio.php" method="post" name="Formular" >
<table width="375" border="0" align="center">
<tr>
<td width="129">Nume si prenume</td>
<td width="236"><input name="date_personale" type="text" id="date_personale"></td>
</tr>
<tr>
<td>Tip persoana </td>
<td><p> <label>
<input type="radio" name="tip_persoana" value="Persoana Fizica">
Persoana fizica</label><br>
<label>
<input type="radio" name="tip_persoana" value="Persoana Juridica">
Persoana juridica</label><br>
</p></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="Submit" value="Prelucreaza datele">
</div></td>
</tr>
</table>
</form>
Exemple
Lucrul cu butoane radio – static
fişierul de prelucrare
95

<?php
echo "Numele si prenumele dvs. este: <strong>".
$_POST[date_personale] ."</strong> si sunteti
<strong>".$_POST[tip_persoana]."</strong>.";
?>
Exemple
96
Lucrul cu butoane radio-dinamic
<?php
mysql_connect('localhost','root','');
mysql_select_db('curs');
$selectie=mysql_query('select * from grad_didactic');
while($rand=mysql_fetch_array($selectie))
{$grad=$rand['denumire_grad'];
echo'<label>';
echo'<input type="radio" name="grad_didactic"
value="'.$grad.'">'.$grad.'</label>';
echo'<br>';
} ?>
Exemple
Lucrul cu casete de validare-static/ HTML
97

<form action="fisier_prelucrare_checkbox.php" method="post" name="Formular">


<table width="480" border="0" align="center">
<tr>
<td width="249">Nume si prenume</td>
<td width="221"><input name="date_personale" type="text“ id="date_personale"></td>
</tr>
<tr>
<td>Selectati marcile de produs preferate </td>
<td><p>
<input name="Samsung" type="checkbox" value="Samsung"> Samsung </p>
<p>
<input name="Panasonic" type="checkbox" value="Panasonic"> Panasonic </p>
</td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="Submit" value="Selecteaza produsele"> </div></td>
</tr>
</table>
</form>
Exemple
Lucrul cu casete de validare-static
98
fişierul de prelucrare PHP
<?php
echo "Numele si prenumele dvs. este: <strong>". $_POST[date_personale].
"</strong> si ati ales urmatoarele marci de produse: ";
if(isset($_POST[Samsung]) and isset($_POST[Panasonic])) echo "Samsung si
Panasonic";
else if (isset($_POST[Samsung])) echo "Samsung";
else if (isset($_POST[Panasonic])) echo "Panasonic";
?>
Exemple
99
Lucrul cu casete de validare-dinamic
<?php
mysql_connect('localhost','root','');
mysql_select_db('curs');
$selectie=mysql_query('select * from angajat');
while($rand=mysql_fetch_array($selectie))
{$id_angajat=$rand['id_angajat'];
$nume_prenume=$rand[nume_angajat].‘ '.$rand[prenume_angajat];
$nume_casuta='c'.$id_angajat;
echo'<p><input type="checkbox" name="'.$nume_casuta.‘“
value="'.$nume_casuta.'">'.$nume_prenume.'</p>';
} ?>
Exemple
Lucrul cu casete de validare-dinamic
100
fişierul de prelucrare
<?php
mysql_connect('localhost','root','');
mysql_select_db('curs');
$selectie=mysql_query('select * from angajat');
echo 'Persoanele selectate de dvs. sunt:';
while($rand=mysql_fetch_array($selectie))
{$id_angajat=$rand['id_angajat'];
$nume_casuta='c'.$id_angajat;
if(isset($_POST[$nume_casuta]))
{$selectie2=mysql_query('select * from angajat where id_angajat='.$id_angajat);
while ($rand2=mysql_fetch_array($selectie2))
{$nume_prenume=$rand2[nume_angajat].' '.$rand2[prenume_angajat];
echo '<ul>';
echo '<li>'.$nume_prenume;
echo '</ul>';
} } } ?>
Redirecţionarea către o pagină nouă
101

 se realizează cu ajutorul:
 funcţiei header()
 Tag-ului HTML meta
Exemplu – header()
102

<?php
$mesaj="Numele si prenumele dvs. este: <strong>". $_POST[date_personale]
."</strong> si ati ales: ";
if(isset($_POST[Samsung]) and isset($_POST[Panasonic]))
{$mesaj=$mesaj."Samsung si Panasonic";}
else if (isset($_POST[Samsung])) {$mesaj=$mesaj."Samsung";}
else if (isset($_POST[Panasonic])){$mesaj=$mesaj."Panasonic";}
else {header("location:Selectie.html");}
echo $mesaj;
?>
<html>
</html>
• se va apela funcţia header() doar în cazul în care utilizatorul nu selectează nici o
casetă de validare din cele prezetate
•Rezultatul obţinut în urma apelului acestei funcţii este deschiderea unei noi pagini,
Selectie.html, care poate include orice element
Tag-ul HTML META
103

<meta http-equiv= “refresh" content= “secunde;


url=index.php?eroare=1" />
Combinarea codului HTML şi PHP pe o
singură pagină
104

 se foloseşte atunci când se doreşte prelucrarea datelor din


cadrul unui formular în aceeaşi pagină cu codul HTML
static
 se va crea un formular care va avea ca şi acţiune variabila
$_SERVER['PHP_SELF']
105

NOŢIUNI FUNDAMENTALE DESPRE


BAZELE DE DATE ŞI SQL
Concepte de bază-BD relaţionale
106

 O bază de date relaţională stochează datele în tabele


 Are capacitatea de a stabili relaţii între date din mai multe
tabele
 Bazele de date relaţionale au la bază limbajul de
interogare SQL
 SQL-limbaj care poate obţine accesul la date stocate în
mai multe tabele, poate filtra datele dorite şi poate sorta,
rezuma şi afişa rezultatele
Crearea unei baze de date
107

 Crearea unei BD se face plecând de la modelul logic al


bazei de date
 http://localhost/phpmyadmin/

 utf8_general_ci-compară şirul de caractere folosind un


limbaj general şi nu este case-sensitive
 utf8_general_cs-compară şirul de caractere folosind un
limbaj general şi este case-sensitive
 CREATE DATABASE ‘BD_IE’;
Crearea tabelelor din baza de date
108

CREATE TABLE ‘BD_IE’.’student’


(‘nr_matricol’ INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,
‘nume_student’ CHAR( 20 ) NOT NULL ,
‘prenume_student’ CHAR( 20 ) NOT NULL ,
‘CNP’ VARCHAR( 13 ) NOT NULL
)
 Limbajul SQL nu este case-sensitive
Accesul la datele unei baze de date
109

 Selectarea datelor din baza de date – SELECT


 Inserarea datelor în baza de date – INSERT
 Şteregerea datelor din baza de date – DELETE
 Modificarea datelor în baza de date - UPDATE
SELECTAREA datelor
110

 Componenta SQL-ului care permite formarea interogărilor


este DML (Data ManipulationLanguage)
 DML permite accesul la datele bazei de date,dar şi
inserarea de noi date, actualizarea sau ştergerea celor
existente
 Selectarea datelor se face prin comanda SELECT
Comanda SELECT-regăsirea datelor
111

 Cea mai simplă interogare este selectarea tuturor datelor


dintr-un tabel
SELECT * FROM tabel
 * - precizează toate câmpurile din tabel
 selectarea doar a anumitor câmpuri se face prin precizarea
acestora
SELECT camp1, camp2 FROM tabel
 formatul datelor de ieşire plasează fiecare rând al tabelului
pe o linie separată şi prezintă coloanele într-o ordine
arbitrară
Comanda SELECT-sortarea datelor găsite
112

 pentru sortarea datelor regăsite în urma filtrării se va folosi


ORDER BY
SELECT nume_câmpuri
FROM tabel
ORDER BY nume_câmpuri DESC/ASC

 clauza va fi stabilită la sfârşitul instrucţiunii SELECT.


 după sortarea după mai multe câmpuri, acestea vor fi
aranjate în funcţie de ordinea care a fost precizată.
 ordinea de aranjare a rezultatelor se va face în funcţie de
cuvântul cheie DESC sau ASC
Comanda SELECT-sortarea datelor găsite
113

SELECT cod_produs,den_produs,pret_produs
FROM produs
ORDER BY den_produs DESC,pret_produs ASC
SELECT cod_produs,den_produs, pret_produs
FROM produs
ORDER BY den_produs, pret_produs ASC
SELECT cod_produs,den_produs, pret_produs
FROM produs
ORDER BY den_produs, pret_produs
SELECT cod_produs,den_produs, pret_produs
FROM produs
ORDER BY 2,3
Comanda SELECT-filtrarea datelor
114

 Filtrarea datelor se face cu ajutorul clauzei WHERE


SELECT nume_câmpuri
FROM tabel
WHERE camp operator valoare
 Clauza WHERE, care specifică criteriile de căutare, se
plasează imediat după clauza FROM.
 Operator poate fi unul dintre operatorii de verificare: egal,
diferit, mai mare, mai mic sau egal, între (BETWEEN
...AND...), LIKE, IS NULL, IN, NOT LIKE, NOT IN
Comanda SELECT-filtrarea datelor
115

SELECT den_produs, pret_produs


FROM produs
WHERE pret_produs=3.87
SELECT den_produs, pret_produs
FROM produs
WHERE pret_produs!>3.87
SELECT den_produs, pret_produs
FROM produs
WHERE pret_produs=3.87
SELECT cod_produs
FROM produs
WHERE den_produs IS NULL
SELECT den_produs, pret_produs
FROM produs
Comanda SELECT
Combinarea clauzelor WHERE
116

 dacă se doreşte filtrarea după mai multe câmpuri se vor


folosi în clauza WHERE cei doi operatori AND sau OR

SELECT nume_câmpuri
FROM tabel
WHERE camp op val AND/OR camp1 op val1

 op-reprezintă operatorul de selecţie


 Primul operator care se prelucrează este operatorul AND
apoi OR
Comanda SELECT-combinarea clauzelor
117

SELECT den_produs, pret_produs


FROM produs
WHERE cod_produs=‘P27’ AND pret_produs=5
SELECT den_produs, pret_produs
FROM produs
WHERE cod_produs=‘P27’ OR pret_produs=5
SELECT cod_produs, den_produs, pret_produs
FROM produs
WHERE den_produs=”produs1” OR den_produs=”produs2”
AND pret_produs>=5
SELECT cod_produs, den_produs, pret_produs
FROM produs
WHERE (den_produs=”produs1” OR den_produs=”produs2”)
AND pret_produs>=5
Comanda SELECT-operatorul IN
118

 este folosit pentru a specifica un domeniu de condiţii.


Operatorul preia o listă cu elemente delimitate prin virgulă
şi sunt incluse între paranteze.
 poate include şi o altă altă clauză SELECT
 are acelaşi rol ca şi operatorul OR
SELECT nume_câmpuri
FROM tabel
WHERE nume_camp IN (’valori’)
 valori-este lista de valori din care se poate alege
Comanda SELECT- operatorul IN
119

SELECT cod_produs, den_produs, pret_produs


FROM produs
WHERE den_produs IN (”produs1”,”produs2”)
SELECT cod_produs, den_produs, pret_produs
FROM produs
WHERE den_produs=”produs1” OR
den_produs=”produs2”
SELECT nr_matricol,nume, prenume
FROM student
WHERE cod_specializare
IN (SELECT cod_specializare FROM specializare WHERE
cod_specializare=1 )
Comanda SELECT-operatorul NOT
120

 Neagă orice condiţie pe care o precede.


SELECT nume_câmpuri
FROM tabel
WHERE NOT nume_camp op valoare

 op-este operatorul care se va nega


Filtrarea prin caracterele de înlocuire
121

 se face prin intermediul operatorului LIKE urmat de


caraceterle de înlocuire:
 Caracterul % - găseşte orice caracter, indiferent de câte ori
apare;
 Caracterul _ - are aceeaşi acţiune ca %, dar înlocuieşte un
singur caracter;
 Caracterul [] – este folosit pentru specificarea unui set de
caractere, dintre care unul trebuie să corespundă unui caracter
în poziţia specificată. Plasarea unui ^ în faţa caracterului nu va
căuta după acele caractere.
Filtrarea datelor prin caractere de înlocuire
122

SELECT nume_câmpuri
FROM tabel
WHERE nume_camp LIKE “%sircaractere%”
SELECT nume_câmpuri
FROM tabel
WHERE nume_camp LIKE “_şircaractere_”
SELECT nume, prenume
FROM student
WHERE nume LIKE “[PT]%”
Comanda SELECT-gruparea datelor
123

 Grupurile se realizează cu ajutorul clauzei GROUP BY

SELECT nume_câmpuri
FROM tabel
GROUP BY camp
Comanda SELECT-gruparea datelor
124

Presupunem că avem baza de date produs cu următoarele


cîmpuri: cod_produs, denumire, pret, cantitate,
categorie_produs.
Se doreşte afişarea pentru fiecare dintre categorii de produs
cantitatea cea mai mare de produs din stoc.

SELECT categorie_produs, MAX(cantitate)


FROM produse
GROUP BY categorie_produs
Efectuarea calculelor matematice
125

 se vor folosi datele găsite în urma selecţiei;

SELECT cod_prod,nume_prod,pret_prod,
cantitate*pret_prod AS valoare
FROM produse_comandate
WHERE serie_f=“GL” AND nr_f=123
Concluzii comanda SELECT
126

 clauza ORDER BY se plasează ultima în cadrul sintaxei


comenzii SELECT
 clauza WHERE se plasează imediat după precizarea
tabelului în care se face selecţia (FROM)
127

NOŢIUNI FUNDAMENTALE DESPRE


BAZELE DE DATE ŞI SQL
INSERAREA datelor în baza de date
128

 Se poate utiliza în mai multe moduri:


 Pentru a insera un singur rând complet;
 Pentru a insera un singur rând parţial;

 Pentru a insera rezultatele unei interogări.


Comanda INSERT-rând complet
129

 Valorile trebuiesc introduse în ordinea în care sunt definite


coloanele, în caz contrar valoarea întoarsă este NULL.

INSERT INTO nume_tabel


VALUES (valori_de_introdus)
Comanda INSERT-rând parţial
130

 Pentru a elimina situaţia în care nu se ştie cu exactitate


ordinea în care să se introducă datele, se va folosi
următoarea sintaxă:
INSERT INTO nume_tabel (campuri)
VALUES (valori_de_introdus)
 În cazul în care un câmp nu este completat cu o valoare, în
mod automat i se va insera valoarea NULL. Dacă câmpul
omis nu acceptă valoarea NULL atunci SGBD-ul va
genera un mesaj de eroare şi rândul nu va fi inserat.
Comanda SELECT-sortarea datelor găsite
131

SELECT cod_produs,den_produs,pret_produs
FROM produs
ORDER BY den_produs DESC,pret_produs ASC
SELECT cod_produs,den_produs, pret_produs
FROM produs
ORDER BY den_produs, pret_produs ASC
SELECT cod_produs,den_produs, pret_produs
FROM produs
ORDER BY den_produs, pret_produs
SELECT cod_produs,den_produs, pret_produs
FROM produs
ORDER BY 2,3
Comanda SELECT-filtrarea datelor
132

 Filtrarea datelor se face cu ajutorul clauzei WHERE


SELECT nume_câmpuri
FROM tabel
WHERE camp operator valoare
 Clauza WHERE, care specifică criteriile de căutare, se
plasează imediat după clauza FROM.
 Operator poate fi unul dintre operatorii de verificare: egal,
diferit, mai mare, mai mic sau egal, între (BETWEEN
...AND...), LIKE, IS NULL, IN, NOT LIKE, NOT IN
Comanda INSERT- date regăsite
133

 Este folosită pentru a introduce într-un tabel rezultatul unei


instrucţiuni SELECT
INSERT INTO nume_tabel (campuri)
SELECT campuri_tabel_importat
FROM nume_tabel1
 nume_tabel reprezintă numele tabelului în care se vor
introduce datele
 campuri reprezintă numele campurilor în care se introduc
datele
 campuri_tabel_importat reprezintă structura tabelului din care
se importă datele
 nume_tabel reprezintă numele tabelului din care se importă
datele.
Comanda INSERT-date regăsite
134

INSERT INTO Clienti (cod_client,nume_client,tip)


SELECT cod_client, nume_client, tip_client
FROM ClientiNoi
WHERE cod_client IN (“C1”,”CL1”,”CL3”)
Copierea datelor dintr-un tabel în altul
135

 Nu foloseşte instrucţiunea INSERT. Pentru a copia


conţinutul unui tabel în cadrul unui alt tabel nou se va
folosi instrucţiunea CREATE TABLE.
CREATE TABLE tabel_nou AS
SELECT nume_cîmpuri
FROM tabel
Copierea datelor dintr-un tabel în altul
136

CREATE TABLE tabel_nou AS SELECT nume_student,


prenume_student FROM student
137

NOŢIUNI FUNDAMENTALE DESPRE


BAZELE DE DATE ŞI SQL (2)
ACTUALIZAREA datelor în BD
138

 Se va folosi instrucţiunea UPDATE şi poate fi folosită în


două moduri:
 Pentru actualizarea anumitor înregistrări din cadrul unui tabel
 Pentru actualizarea tuturor rândurilor dintr-un tabel.

UPDATE nume_tabel
SET coloana1=valoare1, coloana2=valoare2,...
WHERE coloana= valoare
 Dacă lipseşte clauza WHERE se vor actualiza toate

rândurile din tabel


ŞTERGEREA datelor din BD
139

 Se va folosi instrucţiunea DELETE şi poate fi folosită în


două moduri:
 Pentru ştergerea anumitor înregistrări din cadrul unui tabel
 Pentru ştergerea tuturor rândurilor dintr-un tabel.

DELETE FROM nume_tabel


WHERE coloana= valoare
 Dacă lipseşte clauza WHERE se vor actualiza toate
rândurile din tabel
140

ALTE MODURI DE CREARE A


INSTRUCŢIUNILOR SELECT
UNIUNEA tabelelor-echi-uniune
141

 Uniunea reprezintă un mecanism folosit pentru asocierea


tabelelor din cadrul unei instrucţiuni SELECT. În urma
unei uniuni se va returna un singur set de date de ieşire şi
asociază instantaneu rândurile corecte din fiecare tabel.

SELECT nume_câmpuri_dorite_din tabele


FROM tabel1, tabel2
WHERE tabel1.camp1=tabel2.camp1
 dacă nu este precizată clauza WHERE atunci se va realiza
produs cartezian
UNIUNEA tabelelor
142

SELECT den_produs,pret_produs,den_producator
FROM produs, producator
WHERE producator.id_producator=produs.id_producator

SELECT den_produs,pret_produs,den_producator
FROM produs, producator
UNIUNEA tabelelor-uniunea interioară
143

 Uniunea interioară specifică tipul uniunii


SELECT nume_câmpuri_dorite_din tabele
FROM tabel1 INNER JOIN tabel2
ON tabel1.camp1=tabel2.camp1

SELECT den_produs,pret_produs,den_producator
FROM produs INNER JOIN producator
ON produs.id_producator=producator.id_producator
UNIUNEA între mai multe tabele
144

SELECT nume_câmpuri_dorite_din tabele


FROM tabel1, tabel2,tabel3
WHERE tabel1.camp1=tabel2.camp1 AND
tabel3.camp2=tabel.camp2
SELECT
den_produs,pret_produs,cantitate,den_producator
FROM produs, producator,comanda_produs
WHERE producator.id_producator=produs.id_producator
AND comanda_produs.id_produs=produs.id_produs AND
nr_comanda=“G123”
145

INTERACŢIUNEA ÎNTRE
SCRIPTURILE PHP ŞI MYSQL
MySQL – server de baze de date
146

 Pentru a putea realiza cererile MySQL este necesar


să stabilim o legatură cu serverul MySQL. Pentru a
stabili această legatură trebuie specificaţi 4
parametri strict necesari:
 Numele hostului unde este stocată baza de date MySQL.
 Numele utilizatorului

 Parola

 Numele Bazei de Date necesare.

mysql_connect(‘server’,’user’,’parola’)
mysql_select_db(‘bd’)
Interacţiune PHP şi MySQL
147

 Pentru interactiunea PHP-MySQL sunt utilizate mai multe


funcţii:
 mysql_connect-deschide conexiunea cu server-ul
 mysql_close-închide conexiunea cu MySQL
 mysql_fetch_array-extrage un rând ca o matrice
 mysql_insert_id-preia ID din ultima interogare
 mysql_num_rows-numără rândurile
 mysql_num_fields-numără câmpurile
 mysql_query-trimite o interogare MySQL
 mysql_result-preia rezultatul
 mysql_select_db-selectează baza de date
 mysql_error-întoarce un mesaj de eroare în urma operaţiei
MySQL
mysql_connect şi mysql_close
148

mysql_connect(’nume_server’,’nume_utilizator’,’parola’)
mysql_close($conexiune)
<?php
$legatura=mysql_connect('localhost', ‘root', '');
if (!$legatura)
{
die('Eşec la conectare: ' . mysql_error());
}
echo 'Conectare cu succes';
mysql_close($legatura);
?>
Exemplu
149

<?php
mysql_connect(‘localhost’,’root’,’’);
mysql_select_db(‘bd_ie’);
mysql_query(‘INSERT INTO student(nume,prenume,CNP)
VALUES(“’.$_POST[‘nume’].’”, “’.$_POST[‘prenume’].’”,
“’.$_POST[‘CNP’].’”)’);
echo ’Ultima inregistrare introdusa are codul ’.mysql_insert_id();
$selectie=mysql_query(‘SELECT * FROM student’);
while($rand=mysql_fetch_array($selectie))
{$nume_student=$rand[‘nume’];
$prenume_student=$rand[‘prenume’];
$CNP_student=$rand[‘CNP’];
echo ‘Numele dvs. este ’.$nume_student.’ si prenumele ’
.$prenume_student.’ si aveti CNP-ul ’.$CNP_student;}
?>
150

FUNCŢII DE DATE ŞI TIMP.


FUNCŢII CARACTER.
ALTE TIPURI DE FUNCŢII.
Funcţii de date şi timp
151

 checkdate(int $month,int $day,int $year )-validează data


 date(string $format)-întoarce data curentă conform unui
format
 getdate()-întoarce un tablou asociativ conţinând
informaţia despre dată şi oră
 gettimeofday()-întoarce un tablou ce conţine datele
întoarse în rezultatul apelului funcţiei de sistem
Checkdate
152

<?php
var_dump(checkdate(2, 29, 2001));
?>

Funcţia var_dump va afişa informaţii despre variabilă.


Întoarce o valoare booleană.
Date
153
Format Efect
a am sau pm
A AM sau PM
d Ziua lunii de forma 01 până la 31
F Luna, sub formă de caractere (March)
h Ora – format pe 12 ore (01-12)
H Ora – format pe 24 ore (00-23)
i Minute, de la 00 la 59
j Ziua din lună, adică de la 1 la 31
l Ziua săptămânii
m Luna, adică de la 1 la 12
s secunde
w ziua săptămânii format întreg,
unde 0 reprezintă Duminică până la 6 reprezintă Sâmbătă
y anul cu 4 cifre
Y anul cu 2 cifre
z ziua din an, adică de la 0 la 365
Date
154

<?php
echo date(„l,j F, Y”);
?>
Getdate
155

timestamp Valoare
„seconds” secunde
„minutes” minute
„hours” ore
„mday” ziua din lună sub formă de număr
„wday” Ziua din săptămână sub formă de număr
„mon” Luna sub formă de număr
„year” anul
„yday” Ziua din an, sub formă de număr
„weekday” Ziua, (Friday)
„month” Luna, (May)
Getdate
156

<?php
$data=getdate();
echo $data[’mday’].”.”.
$data[’month’].”.”.$data[’year’]
?>
Gettimeofday
157

Cheie Valoare
„sec” secunde
„usec” microsecunde
„minuteswest” Minute vest faţă de Greenwich

<?php
echo gettimeofday();
?>
Funcţii pe şiruri de caractere
158

 explode (string $delimiter, string $string [, int $limit])


 ltrim/ rtrim/ trim(string $str[,string $charlist])
 md5 (string $str)
 str_ireplace ($search,$replace,$subject)
 str_repeat(string $input,int $multiplier )
 str_replace($search, $replace, $subject[, $count])
 strcasecmp(string $str1 , string $str2 )
 strcmp(string $str1 , string $str2 )
 stripos(string $haystack, string $needle)
 strlen ( string $string )
 substr ( string $string , int $start [, int $length ] )
 str_replace($search, $replace, $subject)
Explode
159

 explode (string $delimiter, string $string [, int $limit])


 $delimiter–este caracterul după care se face împărţirea
 $string – şirul care este împărţit

 $limit–precizează în câte subşiruri se împarte. Valoarea


negativă este interpretată ca şi 1.
<?php
$sir="subsir1 subsir2 subsir3";
$subsir=explode(" ",$sir);
echo $subsir[0];
echo $subsir[1];
$sir1='sir1|sir2|sir3';
print_r(explode('|',$sir1,2));
print_r(explode('|',$sir1,-1));?>
Ltrim/ rtrim/ trim
160

 ltrim/ rtrim/ trim(string $str) -elimină spaţiile din stânga,


dreapta sau din ambele capete ale şirului
<?php
$variabila=‘ valoare variabila ‘;
echo trim($variabila);
?>
Md5
161

 md5 (string $str)-codifică şirul de caractere. Întoarce un


şir de 32 de caractere hexazecimale.
 nu va mai putea fi decodificat

<?php
$variabila='programare1';
if(md5($variabila)=='be394f7907863ddf6edfacecdf476aa8')
echo 'S-a scris Programare';
else exit('Nu este ceea ce trebuie');
?>
 Funcţia exit($mesaj)-afişează mesajul şi întrerupe
execuţia script-ului curent
Str_ireplace
162

 str_ireplace ($search,$replace,$subject)
 înlocuieşte un şir de caractere cu un alt şir de caractere,
fără a face diferenţă între litere mari şi litere mici

<?php
$sir='Joi avem cursul de PW';
$modificare = str_ireplace("PW", "Programare Web",$sir);
echo $modificare;
?>
<?php
$sir='Joi avem cursul de PW';
$modificare = str_ireplace(“pw", "Programare Web",$sir);
echo $modificare;
?>
Str_repeat
163

 str_repeat(string $input,int $multiplier )-repetă un şir de


caractere
<?php
$sir='repetare ';
$repeta=str_repeat($sir,4);
echo $repeta;
?>
Str_replace
164

 str_replace($search, $replace, $subject[, $count])


 înlocuieşte toate apariţiile şirului de caractere căutat cu
şirul de înlocuire, fiind case-sensitive
 $search – ce anume va înlocui
 $replace – şirul cu care se va înlocui

 $subject – şirul unde se va înlocui

 $count – va returna numărul rezultatelor găsite

Dacă $subject este tablou, atunci şirul se va înlocui în


toate elementele tabloului.
Str_replace
165

<?php
$sir='Joi avem cursul de PW';
$modificare = str_replace("pw", "Programare Web",$sir);
echo $modificare;?>
<?php
$sir='Joi avem cursul de PW';
$modificare = str_replace("pw", "Programare Web",$sir);
echo $modificare;?>
<?php
$sir='Joi avem cursul de Programare Web';
$vocale=array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$modificare=str_replace($vocale,"",$sir);
echo $modificare;?>
<?php
$sir='Joi avem cursul de PW';
$vocale=array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$modificare=str_replace($vocale,"",$sir,$aparitii);
echo $modificare.'<br>'.$aparitii;?>
Strcasecmp
166

 strcasecmp(string $str1 , string $str2 )-compară două


şiruri fără a face distincţie între litere mari şi mici şi va
întoarce >0 dacă primul şir este mai mare decât al doilea
şir, <0 dacă primul este mai mic decât al doilea şi 0 dacă
sunt egale
<?php
$var1="sir";
$var2="SIR";
if(strcasecmp($var1,$var2)==0)
{echo 'Sirurile sunt la fel';}
?>
Strcmp
167

 strcmp(string $str1 , string $str2 )-compara doua siruri de


caractere făcând diferenţă între litere mari şi litere mici

<?php
$var1="sir";
$var2="SIR";
if(strcasecmp($var1,$var2)==0)
{echo 'Sirurile sunt la fel';}
else echo 'Sirurile nu sunt la fel';
?>
Stripos
168

 stripos($sir, $cautare)-găseşte poziţia primei apariţii a


unui şir de caractere într-un alt şir, fără să facă diferenţă
între literele mici si cele mari
 $sir – şirul în care se face căutarea
 $cautare – şirul care este căutat

<?php
$cauta='a';
$sir='Joi la ora 10 avem PW';
$pozitie=stripos($sir,$cauta);
if($pozitie!==false)
{echo "Pozitia este ".$pozitie;}
else echo "Nu s-a gasit caracterul cautat";
?>
Substr
169

 substr ($sir, $inceput [,$lungime ])-returnează o parte a


şirului
 $inceput<0 - se va porni de la sfârşit către început
 $lungime<0 - nu se vor lua ultimele $lungime caractere.

<?php
$rest=substr("abcdef",-1);
$rest=substr("abcdef",-2);
$rest=substr("abcdef",-3,1);
$rest=substr("abcdef",0,-1);
$rest=substr("abcdef",2,-1);
$rest=substr("abcdef",4,-4);
$rest=substr("abcdef",-3,-1);
?>
Strlen
170

 strlen ($sir)-obţine lungimea unui şir de caractere

<?php
$sir='Am de cautat litera a';
$numar=strlen($sir);
echo $numar
?>
Alte tipuri de funcţii-funcţii matematice
171

 abs ( mixed $number )-valoarea absolută a unui nr.


 ceil ( float $value )-rotunjeşte la cel mai mare nr. întreg
 exp ( float $arg )-calculează exponenţiala
 floor ( float $value )-rotunjeşte la cel mai mic nr. întreg
 max/min(array $values )
 mixed max/min(mixed $val1,mixed $val2 [,mixed $val3...])
 pow(number $baza,number $exponent)
 rand ( int $min , int $max )
 round(float $val[,int $precision=0])
 sqrt ( float $arg )
Exemple 1
172

<?php <?php
$abs=abs(-4.2); echo exp(5.7);
?> ?>
<?php <?php
$a=ceil(7.9); echo floor(4.3);
$b=ceil(-7.5); echo floor(9.999);
echo $a; echo floor(-3.14);
echo $b;?> ?>
<?php
echo round(3.4);
echo round(3.5);
echo round(1.95583,2);
?>
Exemplu max/min
173

 Dacă argumentul este tablou va afişa valoarea cea mai


mare din tablou
 PHP evaluează şirurile de caracter ca fiind 0 dacă este
comparată cu un număr întreg, dar va returna şirul.
 Dacă se compară tablouri, atunci evaluarea se va face de
la stânga la dreapta.
Exemplu max/min
174

<?php
echo max(1, 3, 5, 6, 7);
echo max(array(2, 4, 5));
echo max(0, 'hello');
echo max('hello', 0);
echo max(-1, 'hello');
$val = max(array(2,4,8),array(2,5,7));
$val = max('string',array(2,5,7),42);
?>
175

LUCRUL CU SESIUNI DE
UTILIZATOR
Definire
176

 Sesiunea permite stocarea de informaţii în cadrul unei


variabile pentru a fi utilizată în cadrul mai multor pagini.
 sesiunile nu păstrează valorile stocate pe calculatorul
utilizatorului
 păstrează informaţiile până la închiderea browser-ului, sau
până când utilizatorul distruge în mod explicit sesiunea
curentă
Crearea unei sesiuni
177

 pentru a putea lucra cu sesiuni trebuie să se deschidă


sesiunea folosind funcţia session_start()
 session_start() se introduce în antetul paginii web
 la crearea unei sesiuni se creează un identificator de
sesiune (SID)
 setarea variabilelor sesiune se face prin variabila
superglobală $_SESSION[’nume_variabila’]
 la fiecare pagină care foloseşte variabila sesiune va trebui
deschisă sesiunea
 nu se transmite variabila de la o pagină la alta, ci
informaţiile conţinute în aceasta
Manipularea variabilelor sesiune
178

 session_id()-află identificatorul sesiunii


 dacă se doreşte atribuirea unei anumite valori pentru
sesiune, aceasta va fi declarată înainte de a deschide
sesiunea
<?php
session_id('1a2bda3bad');
session_start();
echo “Identificatorul sesiunii curente SID=". session_id();
?>
Distrugerea unei sesiuni
179

 session_destroy()- distruge sesiunea şi va şterge şi toate


variabilele sesiune
 unset(nume_variabila_sesiune)-şterge variabila de
sesiune specificată
 session_unset()-şterge toate variabilele de sesiune, dar nu
şi sesiunea în sine
180

LUCRUL CU DOSARE ŞI FIŞIERE


Includerea fişierelor
181

Se face cu ajutorul funcţiilor:


 include() sau require();

 include_once() sau require_once ();

Utilă în includerea fişierelor este directiva include_path:


 include_path

.:/director1/director2/htdocs/director3/director4/
Includerea fişierelor - exemplu
182

<?php
for ($i=1;$i<=3;$i++)
{$includefisier="fisier$i".".txt";
echo 'Se include fisierul $includefisier: <br>';
include(„$includefisier”);
echo '<br>‘; }
?>
<?php
for ($i=1;$i<=2;$i++)
{ echo 'Se include continutul fisierului cu numele
<strong> fisier1.txt</strong>: <br>';
$fisier_inclus=include_once ("fisier1.txt");
echo '<br>‘; }
?>
Returnarea unei valori
183
dintr-un fişier inclus
 Întreruperea execuţiei codului din cadrul fişierului inclus
se face cu ajutorul instrucţiunii return. Tot codul aflat
după această instrucţiune nu mai este executat.
Returnarea unei valori
184
dintr-un fişier inclus - exemplu
<?php
$fisier=include("fisier_return.php");
echo 'Fisierul inclus are ca rezultat valoarea: '. $fisier.'.';
?>
<?php
$a=56;
$b=34;
$c=20;
return $c;
$c=$a+$b;
?>
Verificarea fişierelor
185

 verificarea existenţei fişierelor


 file_exists(“nume_fisier.extensie”).

 verificarea tipului de entitate


 is_file(“nume_fisier”)

 is_dir(“/director”)

 verificarea stării unui fişier


 is_readable(“nume_fisier”)

 is_writable(“nume_fisier”)

 is_executable(“nume_fisier”)

 dimensiunea unui fisier


 filesize(“nume_fisier”)
Manipularea fişierelor
186

 crearea fişierelor - touch(“nume_fisier”)


 ştergerea unui fişier - unlink(“nume_fisier”)
 închiderea fişierului - fclose().
Manipularea fişierelor
187

 Deschiderea unui fişier – fopen().


fopen ("nume_fisier", "mod_de_deschidere")
 r - fişierul este deschis pentru citire;
 r+ - fişierul este deschis pentru citire şi scriere;
 w - fişierul este deschis doar pentru scriere, iar conţinutul său este
şters. Dacă fişierul nu există, atunci acesta va fi creat;
 w+ - fişierul este deschis pentru citire şi scriere, iar conţinutul său
este şters. Dacă fişierul nu există, atunci acesta va fi creat;
 a - fişierul este deschis doar pentru scriere, iar pointerul este plasat
la sfârşit. Dacă fişierul nu există, atunci acesta va fi creat;
 a+ - fişierul este deschis pentru scriere şi citire, iar pointerul este plasat la
sfârşit. Dacă fişierul nu există, atunci acesta va fi creat.
Operaţii cu fişiere - citirea
188

 Citirea din fişier se poate face:


 linie cu linie – cu ajutorul funcţiei
fgets($variabila_fisier_deschis, lungime )
 octet cu octet – folosind funcţia
fread ($variabila_fisier_deschis, numar_octeti)
 caracter cu caracter – prin intermediul funcţiei
fgetc ($variabila_fisier_deschis)
Operaţii cu fişiere - citirea
189

<?php
$deschidere_fisier=@fopen("index.txt","r") or die("Nu s-a putut deschide fisierul");
while(!feof($deschidere_fisier))
{$citeste_fisier_linie=fgets($deschidere_fisier, 1024);
echo "$citeste_fisier_linie<br>";
}
fclose($deschidere_fisier);
?>

<?php
$deschidere_fisier=@fopen("index.txt","r") or die("Nu s-a putut deschide fisierul");
while(!feof($deschidere_fisier))
{$citeste_fisier_octet=fread($deschidere_fisier, 26);
echo "$citeste_fisier_octet<br>";
}
fclose($deschidere_fisier);
?>
Operaţii cu fişiere - citirea
190

 Funcţia fread () permite citirea conţinutului unui


fişier, dar nu permite şi stabilirea locaţiei de unde să
pornească aceasta
 funcţia fseek() permite stabilirea poziţiei curente în

cadrul unui fişier


fseek ($variabila_fisier_deschis, pozitie)
Operaţii cu fişiere - citirea
191

<?php
$deschidere_fisier=@fopen("index.txt","r") or die("Nu s-a putut
deschide fisierul");
$marime_fisier=filesize("index.txt");
$valoare=(int)($marime_fisier/3);
fseek($deschidere_fisier,$valoare);
$citeste_fisier_punct=fread($deschidere_fisier,($marime_fisier-
$valoare));
echo $citeste_fisier_punct;
fclose($deschidere_fisier);
?>
Operaţii cu fişiere – scrierea
192

 Scrierea în cadrul unui fişier se face cu ajutorul


funcţiei fwrite() sau fputs().

fwrite ($variabila_fisier_deschis, sir_caractere)

 Şirul de caractere trebuie să se încheie cu


terminatorul de linie „\n”.
Operaţii cu fişiere – scrierea
193

<?php
$deschidere_fisier=@fopen("index.txt","w") or die(“mesaj");
fwrite($deschidere_fisier,"Fwrite scrie peste ceea ce deja exista.
<br>La sfarsitul sirului care este scris se va adauga terminatorul de linie.\n");
fclose($deschidere_fisier);
$deschidere_fisier=@fopen("index.txt","r") or die("Nu s-a putut deschide fisierul");
$citire=fgets($deschidere_fisier,1024);
echo $citire;
fclose($deschidere_fisier);?>
<?php
$deschidere_fisier=@fopen("index.txt","a") or die(“mesaj");
fputs($deschidere_fisier,"Fputs adauga textul la sfarsitul fisierului.\n");
fclose($deschidere_fisier);
$deschidere=@fopen("index.txt","r") or die("Nu s-a putut deschide fisierul");
while(!feof($deschidere))
{$citire=fgets($deschidere);
echo $citire;
echo '<br>';}
fclose($deschidere);?>
Exemplu contor vizitatori
194

<?php
$fisier_contor="contor.txt";
if(file_exists($fisier_contor))
{$deschide_fisier=@fopen($fisier_contor,"r+");
$contor=@fgetc($deschide_fisier);
$contor=$contor+1;
fclose($deschide_fisier);
$deschide_fisier=@fopen($fisier_contor,"w");
fputs($deschide_fisier,$contor);
}
else
{$creeaza_fisier=@fopen($fisier_contor,"w");
$contor="1";
fwrite($creeaza_fisier,$contor);
fclose($creeaza_fisier);
echo $count;
}?>
Manipularea dosarelor
195

 Crearea unui director - mkdir()


mkdir („nume_dosar”, int permisiune)
 Ştergerea unui director - rmdir(“nume_director”).
 Deschiderea unui director - opendir(“nume_diector”).
 Închiderea directorului - closedir($dosar_deschis)
 Citirea conţinutul directorului - readdir().
 Modificarea directorului de lucru - chdir(“dir_modif”).
 Determinarea locaţiei unui director - getcwd().