Sunteți pe pagina 1din 38

PARTEA I – NOŢIUNI GENERALE DESPRE PHP

Lecţia 1: PHP - Noţiuni de bază

1.1. Introducere
PHP este prescurtarea de la Hypertext PreProcessor.
Spre deosebire de paginile HTML care puteau fi verificate si pe calculatorul local paginile PHP nu pot fi
verificate decat daca sunt gazduite pe un server web care are instalat PHP.

Cand accesam o pagina HTML serverul care o gazduieste trimite pagina HTML catre browser spre afisare.
In cazul unei pagini PHP serverul citeste codul PHP, il interpreteaza si genereaza dinamic pagina HTML
care este trimisa browserului spre afisare. Acesta este motivul pentru care utilizatorii folosesc PHP pentru
construirea unor pagini cu continut dinamic.

Fisierele PHP au extensia php. Puteti scrie astfel de fisiere cu Notepad sau cel mai indicat cu un editor
specializat, de exemplu Crimson Editor, care va indica si numarul liniilor, lucru util la depanarea
scripturilor. Verificati ca nu aveti extensiile ascunse (My Computer -> Tools -> Folder Options -> View ->
debifati Hide extensions for known file types). Pentru a putea crea fisiere php dati clic dreapta New ->
Text Document, apoi il redenumiti nume.php.

Cand PHP-ul parcurge un fisier de fapt "citeste" textul pana cand intalneste una din etichetele speciale
care-i spun sa inceapa sa interpreteze textul ca pe cod PHP. Se executata codul pana cand este intalnita
eticheta de inchidere. Apoi se "citeste" din nou textul mai departe. Acesta este motivul pentru care se
poate adauga cod PHP in interiorul HTML-ului.

Important:

inchiderea unui rand se face obligatoriu cu caracterul ;

numele functiilor nu sunt Case Sensitive (nu se face diferenta intre utilizarea literelor mari sau mici)

numele variabilelor sunt Case Sensitive (se face diferenta intre utilizarea literelor mari sau mici)

ghilimelele se folosesc pereche "..." sau '...', folosirea lor "...' sau '..." constituie o eroare

Codul PHP este delimitat de unul din urmatoarele seturi de etichete de deschidere si inchidere:
<?php ?> etichete recomandate
<script language="php"?> </script>
<? ?> folosirea lor necesita anumite setari pe server
<% %> etichete tip ASP, folosirea lor necesita anumite setari pe server

Exemplu: cel mai simplu script PHP este:

<?php
echo "Acesta este un script PHP";
?>

Daca veti verifica functionarea acestui script pe un server veti vedea ca este afisat textul delimitat de
ghilimele.
Functia echo este folosita pentru afisarea informatiilor delimitate de ghilimele. Nu uitati sa inchideti
randul cu ;. Similar functiei echo este functia print.

In situatia in care scriptul nu este scris corect PHP-ul va afisa eroarea indicandu-va si locul unde aceasta
apare. Erorile sunt afisate doar daca serverul este setat corespunzator (in php.ini este setat
display_errors=On si error_reporting=E_ALL).

Exemplu: in interiorul scriptului puteti insera si etichete HTML


Liceul “George Călinescu”, Bucureşti 1
Prof. Costache Maria-Magdalena 2010-2011
<?php
echo "Acesta este un script <b>PHP</b><br>care contine si etichete HTML";
?>

Exemplu: fisierul PHP poate contine intre etichetele <html> si </html> blocuri PHP delimitate de <?php ?
>

<html>
<head><title>Exemplu0_3</title>
</head>
<body>
Bloc HTML<br>
<?php
echo "Bloc PHP";
?>
</body>
</html>

In PHP sunt trei metode prin care se poate adauga un comentariu, evident neafisat in browser, cu scopul
de a adauga informatii necesare programatorului.
Tot ce urmeaza dupa caracterele // sau # este considerat comentariu. De exemplu:

// Urmeaza un comentariu in PHP


# Urmeaza un comentariu in PHP

Utilizare:

echo "test"; // browser-ul va afisa test


echo "proba"; # browser-ul va afisa proba

Un comentariu format din mai multe linii este incadrat de /* si */. De exemplu:

/* Comentariul in PHP
scris pe doua linii */

Acest tip de comentariu poate fi folosit si pentru ignorarea unor blocuri PHP. In exemplul urmator
browserul va afisa doar proba

/* echo "Tutorial";
echo "PHP"; */
echo "proba";

1. 2. Variabile
Variabila este un container de date care poarta un nume si i se poate atribui o valoare care poate fi
modificata de mai multe ori sau salvata intr-o baza de date. Numele dat variabilei incepe cu simbolul $
urmat de orice litera mica (a-z) sau mare (A-Z) sau cu caracterul _ dar niciodata cu o cifra si nu poate
contine spatii goale. De exemplu: $nume_variabila
$nume_variabila="valoare"

Este recomandat ca numele variabilei sa fie cat mai sugestiv pentru a evita incurcaturile in timpul scrierii
scriptului.

Exemplu: atribuim variabilei $program valoarea PHP si apoi o tiparim

<?php
$program="PHP";
echo $program;
?>

Exemplu: in aceeasi constructie echo putem folosi text impreuna cu o variabila

Liceul “George Călinescu”, Bucureşti 2


Prof. Costache Maria-Magdalena 2010-2011
<?php
$luna="iulie";
echo "Am concediu in luna ".$luna;
?>

Modificand valoarea variabilei se modifica ceea ce este afisat de browser.

Intr-un script puteti folosi mai multe variabile care pot fi adaugate in aceeasi constructie echo.

Exemplu:

<?php
$ziua="22";
$luna="12";
$anul="1995";
echo "Data nasterii este ".$ziua.".".$luna.".".$anul;
?>

In PHP sunt opt tipuri de variabile primitive:

patru tipuri scalare: intregi, numere cu virgula flotanta, siruri si boleene

doua tipuri compuse: matrice si obiecte

doua tipuri speciale: resurse si NULL

Intreg (integer) este un simplu numar intreg exprimat in sistem zecimal, hexazecimal sau octal, optional
putand purta si semn (+ sau -).
In sistem octal numarul trebuie precedat de 0 iar pentru hexazecimal precedat de 0x.

$a=2006; //numar exprimat in sistem zecimal


$a=-52; //numar negativ exprimat in sistem zecimal
$a=0135; //numar octal (echivalent cu 207 zecimal)
$a=0x1D; //numar hexazecimal (echivalent cu 29 zecimal)

Numerul cu virgula flotanta (float) sau dubla precizie este un numar real care poate fi folosit cu
urmatoarea sintaxa:

$a=3.14; //numar zecimal


$a=-2.59; //numar zecimal negativ
$a=1.3e2; //130
$a=6E+3; //6000

Exemplu:

<?php
$temperatura=-5;
$vant=8.5;
echo "La Sinaia sunt ".$temperatura."<sup>o</sup>C iar vantul bate cu ".$vant."m/s";
?>

Sirul (string) este o variabila care contine o combinatie de numere, litere, simboluri si spatii delimitate
intre doua ghilimele simple sau duble. Sirurile pot contine si nume de variabile.

Exemplu:

<?php
$nume="Ivan Paul";
$data="19 iulie 2005";
echo "Solicitarea a fost facuta de domnul ".$nume." pe data de ".$data;
?>

Liceul “George Călinescu”, Bucureşti 3


Prof. Costache Maria-Magdalena 2010-2011
Cea mai simpla cale pentru a specifica un sir este sa il incadram intre ghilimele simple (') dar eventualele
ghilimele simple continute vor fi precedate de caracterul \. In aceasta situatie variabilele si caracterele
speciale vor fi ignorate.

echo "acesta este un sir"; //acesta este un sir


echo "variabila $a"; //variabila $a
echo "rand1 \n rand2"; //rand1 \n rand2

Daca sirul este definit prin ghilimele duble (") PHP-ul interpreteaza mai multe secvente pentru caracterele
speciale:

Secventa Semnificatie
\n rand nou
\r sfarsit de linie
\t tab orizontal
\\ backslash
\$ simbol dolar
\" ghilimele duble

Variabila booleana exprima valoarea de adevar: TRUE sau FALSE. Orice valoare diferita de zero sau sir
care nu este gol (contine cel putin un caracter) sunt considerate ca TRUE.

Matricei (array) i se pot atribui mai multe valori comparativ cu numerele sau sirurile care pot contine
doar o singura valoare. Matricele folosesc chei sau indexi pentru a identifica valorile stocate.
O matrice se creaza folosind functia array():

$matrice = array('apa','aer','foc');

Exemplu: cream o matrice si ii tiparim elementele folosind functia print_r

<?php
$matrice = array('ocean','mare','lac');
print_r ($matrice);
?>

Exemplu: utilizam aceeasi matrice dar folosim functia var_dump() care ne arata cate elemente sunt in
matrice si lungimea fiecarei valori a sa

<?php
$matrice = array('ocean','mare','lac');
var_dump ($matrice);
?>

Primul index al unei matrici are valoarea 0. Valorile indexilor pot fi si declarate manual.

Exemplu: cream o matrice cu indexii 1, 3 si 5

<?php
$matrice = array(1=>'calculator',3=>'monitor',5=>'imprimanta');
var_dump ($matrice);
?>

Pentru a sterge o pereche cheie/valoare se foloseste unset()

unset($matrice[3]); //sterge cheia 3 din matrice


unset($matrice); //sterge intreaga matrice

Exemplu: stergem elementul 3 din matricea $matrice

Liceul “George Călinescu”, Bucureşti 4


Prof. Costache Maria-Magdalena 2010-2011
<?php
$matrice = array(1=>'Matematica',2=>'Fizica',3=>'Biologie',4=>'Istorie');
unset($matrice[3]); //sterge cheia 3 Biologie
print_r ($matrice);
?>

Matricile multidimensionale sunt o lista de matrici

Exemplu: matrice multidimensionala formata din 3 matrici

<?php
$it = array(
"monitor" => array("Samsung","LCD","17\""),
"imprimanta" => array("HP","jet de cerneala","A4"),
"router" => array("Linksys","1","4"),
);
echo "Monitorul este produs de ".$it['monitor'][0].", are ecran tip ".$it['monitor'][1]."
si diagonala de ".$it['monitor'][2].".";
echo "<br>";
echo "Imprimanta este produsa de ".$it['imprimanta'][0].", tehnologie ".$it['imprimanta']
[1]." si foloseste hartie ".$it['imprimanta'][2].".";
echo "<br>";
echo "Routerul este produs de ".$it['router'][0].", are ".$it['router'][1]." port WAN si
".$it['router'][2]." porturi LAN".".";
?>

Variabile predefinite
PHP ofera un mare numar de variabile predefinite oricarui script care ruleaza si sunt functie de serverul pe
care functioneaza.
Incepand cu PHP 4.2.0 valoarea default pentru directiva register_globals este off. Aceasta afecteaza setul
de variabile predefinite disponibile in scop global.
De exemplu pentru a obtine DOCUMENT_ROOT vom folosi $_SERVER['DOCUMENT_ROOT'] in loc de
$DOCUMENT_ROOT cum era in cazul in care register_globals erau on.

PHP Superglobals sunt variabile disponibile oriunde in script

$GLOBALS contine referinte catre toate variabilele care sunt disponibile in scop global scriptului
$_SERVER variabile furnizate scriptului de catre serverul web
$_GET variabile furnizate scriptului via HTTP GET (provin dintr-un formular in care method="GET")
$_POST variabile furnizate scriptului via HTTP POST (provin dintr-un formular in care
method="POST")
$_COOKIE variabile furnizate scriptului via HTTP cookies
$_ENV variabile furnizate scriptului de catre mediu

In continuare voi prezenta cateva din cele mai des folosite variabile globale.

$_SERVER['REMOTE_ADDR'] Exemplu: adresa IP a vizitatorului


$_SERVER['HTTP_USER_AGENT'] Exemplu: informatii despre browserul folosit
$_SERVER['HTTP_REFERER'] Exemplu: pagina vizitata anterior
$_SERVER['SERVER_NAME'] Exemplu: numele serverului
$_SERVER['SCRIPT_NAME'] Exemplu: numele scriptului

Scopul variabilelor depinde de contextul in care sunt definite. Majoritatea variabilelor din PHP au un
singur scop. Acesta se aplica si pentru fisierele adaugate prin functiile include() si require().

Exemplu:

<?php
$a=10;
include "exemplu1_9b.php";
?>
Liceul “George Călinescu”, Bucureşti 5
Prof. Costache Maria-Magdalena 2010-2011
/* urmeaza fisierul exemplu1_9b.php */
<?php
echo "Mihai are ".$a." ani";
?>

Orice variabila folosita in interiorul unei functii este limitata doar scopului functiei.

Exemplu: deoarece functia foloseste o variabila declarata in afara ei echo nu va afisa nimic

<?php
$a=10;
function mihai() {
echo "Mihai are ".$a." ani";
}
mihai();
?>

Exemplu: aceeasi functie dar acum declaram variabila de tip global motiv pentru care echo va afisa corect

<?php
$a=10;
function mihai() {
global $a; //declaram variabila $a de tip global
echo "Mihai are ".$a." ani";
}
mihai();
?>

Variabile statice
O alta caracteristica importanta a scopului variabilei este variabila statica care exista doar in scopul
functiei locale dar isi pierde valoarea cand executia scriptului inceteaza.

Exemplu: executarea succesiva a functiei va afisa tot timpul 0

<?php
function static1() {
$a=0;
echo $a;
$a++;
}
static1();
echo "<br>";
static1();
echo "<br>";
static1();
?>

Exemplu: aceeasi functie dar declaram variabila ca fiind statica. De cate ori functia va fi executata ea va
incrementa valoarea anterioara a variabilei $a

<?php
function static1() {
static $a=0;
echo $a;
$a++;
}
static1();
echo "<br>";
static1();
echo "<br>";
static1();
?>

Liceul “George Călinescu”, Bucureşti 6


Prof. Costache Maria-Magdalena 2010-2011
Variabile variabile
Cateodata este util sa avem nume variabil pentru variabila

Exemplu:

<?php
$a="Mihai";
$$a="Ionescu";
echo "$a $Mihai";
?>

Exista functii care determina tipul variabilei.

Exemplu: verificam daca variabila $a este de tip intreg

<?php
$a=19;
if (is_integer($a)) {
echo '$a este intreg';
} else {
echo '$a nu este intreg';
}
?>

Exemplu: verificam daca variabila $a este de tip numar cu virgula flotanta

<?php
$a=3.14;
if (is_float($a)) {
echo '$a este numar cu virgula flotanta';
} else {
echo '$a nu este numar cu virgula flotanta';
}
?>

Exemplu: verificam daca variabila $a este de tip sir

<?php
$a="sir";
if (is_string($a)) {
echo '$a este un sir';
} else {
echo '$a nu este un sir';
}
?>

Exemplu: verificam daca variabila $a este o matrice

<?php
$a = array('fructe','legume','carne');
if (is_array($a)) {
echo '$a este o matrice';
} else {
echo '$a nu este o matrice';
}
?>

1. 3. Constante
Caracteristici:

Liceul “George Călinescu”, Bucureşti 7


Prof. Costache Maria-Magdalena 2010-2011
au o valore, dar spre deosebire de variabile nu poate fi schimbata sau stearsa si nu sunt precedate de
simbolul $

numele este case sensitiv si va incepe obligatoriu cu o litera. Poate contine litere mari sau mici, cifre si
caracterul _ dar fara spatii

este recomandat, dar nu obligatoriu, ca denumirea constantei sa fie scrisa cu majuscule pentru a fi
mai usor identificata de programator

ca si in cazul variabilelor superglobale constantele au un caracter global.

pot lua doar valori scalare

Pentru definirea constantei se foloseste functia define().

Exemplu: constanta NUME are valoarea Popescu

<?php
define('NUME','Popescu');
echo NUME;
?>

Ca si in cazul variabilelor constructia echo poate gazdui mai multe constante si text impreuna.

Exemplu:

<?php
define('NUME','Popescu');
define('PRENUME','Mihai');
echo "Unchiul meu este ".PRENUME." ".NUME."";
?>

1. 4. Operatori
Vom discuta despre operatori aritmetici, de atribuire, de comparatie, logici si multipli

Operatorii aritmetici sunt de adunare, scadere inmultire si impartire.

adunare $a+$b

scadere $a-$b

inmultire $a*$b

impartire $a/$b

modulo (restul impartirii celor 2 valori) $a%$b

Exemplu:

<?php
$a=12;
$b=3;
$c=7;
$adunare=$a+$b;
$scadere=$a-$b;
$inmultire=$a*$b;
$impartire=$a/$b;
$modulo=$a%$c;
echo $a."+".$b."=".$adunare."<br>";

Liceul “George Călinescu”, Bucureşti 8


Prof. Costache Maria-Magdalena 2010-2011
echo $a."-".$b."=".$scadere."<br>";
echo $a."x".$b."=".$inmultire."<br>";
echo $a.":".$b."=".$impartire."<br>";
echo $a."%".$c."=".$modulo;
?>

Operatorii de atribuire sunt:


Principalul operator de atribuire este = si inseamna asocierea operatorului din stanga cu valoarea
expresiei din dreapta (a nu se confunde cu egalitatea). Valoarea unei expresii de atribuire este valoarea
atribuita, adica valoarea lui $a=5 este 5.

$a=7;
$a+=6; //atribuie lui $a valoarea 13, acelasi lucru cu $a=$a+6
$b="Buna ";
$b.="ziua"; // atribuie lui $b valoarea "Buna ziua", acelasi lucru cu $b=$b."ziua";

Operatorii de comparatie sunt:

egalitate $a==$b TRUE daca $a este egal cu $b


identic $a===$b TRUE daca $a este egal cu $b si sunt de acelasi tip

inegalitate (diferit) $a!=$b TRUE daca $a este diferit de $b


inegalitate (diferit) $a<>$b TRUE daca $a este diferit de $b
neidentic $a!==$b TRUE daca $a este diferit de $b si nu sunt de acelasi tip

mai mic $a<$b TRUE daca $a este mai mic decat $b


mai mare $a>$b TRUE daca $a este mai mare decat $b
mai mic sau egal $a<=$b TRUE daca $a este mai mic sau egal cu $b
mai mare sau egal $a>=$b TRUE daca $a este mai mare sau egal cu $b

Operatorii logici sunt:

NOT !$a TRUE daca $a nu este TRUE


AND $a && $b TRUE daca si $a si $b sunt TRUE
AND $a and $b TRUE daca si $a si $b sunt TRUE

OR $a || $b TRUE daca ori $a ori $b sunt TRUE


OR $a or $b TRUE daca ori $a ori $b sunt TRUE
XOR $a xor $b TRUE daca ori $a ori $b sunt TRUE dar nu amandoua

Verificarea functionarii operatorilor de comparatie si logici se poate face folosind structurile de control care
vor fi prezentate in Capitolul 4.

Operatori multipli
Intr-o constructie PHP pot fi folositi impreuna mai multi operatori.

Exemplu:

<?php
$a=12;
$b=3;
$c=3;
echo $a."+".$b."+".$c."=".($a+$b+$c)."<br>";
echo $a."x".$b."-".$c."=".($a*$b-$c);
?>

Liceul “George Călinescu”, Bucureşti 9


Prof. Costache Maria-Magdalena 2010-2011
Incrementarea si decrementarea unui numar
Marirea unui numar cu o unitate se numeste incrementare, iar scaderea cu o unitate se numeste
decrementare.

Incrementarea se poate realiza adunand o unitate la acel numar (sau variabila) sau putem folosi varianta
prescurtata, si similar pentru decrementare.

post incrementare $a++ returneaza $a si incrementeaza $a cu 1

post decrementare $a-- returneaza $a si decrementeaza $a cu 1

pre incrementare ++$a incrementeaza $a cu 1 si returneaza $a

pre decrementare --$a decrementeaza $a cu 1 si returneaza $a

Exemplu: incrementarea si decrementarea unui numar

<?php
$a=7;
$b=7;
$c=7;
$d=7;
echo "post incrementarea lui 7 este: ".$a++."<br>";
echo "post decrementarea lui 7 este: ".$b--."<br>";
echo "pre incrementarea lui 7 este: ".++$c."<br>";
echo "pre decrementarea lui 7 este: ".--$d;
?>

Numere aleatoare
rand() este functia din PHP care genereaza automat numere aleatoare. Poate primi parametri limita
minima si maxima a numerelor generate.

Exemplu:

<?php
echo "numar generat aleator: ".rand()."<br>";
echo "numar generat aleator din intervalul 1-49: ".rand(1,49);
?>

Functia de rotunjire
round() este functia de rotunjire si poate primi ca parametru numarul de cifre zecimale dupa rotunjire

Exemplu:

<?php
echo "27,54621 rotunjit este: ".round(27.54621)."<br>";
echo "27,54621 rotunjit cu 2 zecimale este: ".round(27.54621,2);
?>

Lecţia 2 : Structuri de control


Aceste structuri permit definirea unei conditii si apoi executarea unor operatii functie de raspuns.

Vom discuta despre:

if while require
else for break
elseif foreach continue
switch include return

Liceul “George Călinescu”, Bucureşti 10


Prof. Costache Maria-Magdalena 2010-2011
if este instructiunea conditionala cea mai folosita avand urmatoarea sintaxa:

if (conditie) {
instructiuni executate daca este indeplinita conditia ;
}

Conditia este incadrata de paranteze rotunde iar instructiunea care se executa in cazul in care conditia
este indeplinita intre acolade. Neindeplinirea conditiei face sa se execute ce urmeaza dupa inchiderea
acoladei.

Exemplu: se compara doua variabile si se afiseaza un mesaj

<?php
$a=4;
$b=3;
echo "$a=4<br>";
echo "$b=3<br>";
if ($a>$b) {
echo "$a>$b";
}
?>

else este alta instructiunea conditionala care indica ce se executa in cazul in care conditia mentionata in
instructiunea if nu este indeplinita si are sintaxa:

if (conditie) {
instructiuni executate daca este indeplinita conditia;
} else {
instructiuni executate daca nu este indeplinita conditia;
}

Exemplu: se compara doua variabile si se afiseaza un mesaj

<?php
$a=2;
$b=9;
echo "$a=2<br>";
echo "$b=9<br>";
if ($a>$b) {
echo "$a>$b";
} else {
echo "$a<$b";
}
?>

elseif este o combinatie intre if si else. In cazul in care conditia if nu este indeplinita se introduce elseif
care testeaza inca o conditie. Daca nu este indeplinita a doua conditie se executa declaratia introdusa prin
else.

if (conditia1) {
instructiuni executate daca este indeplinita conditia 1;
} elseif (conditia2) {
instructiuni executate daca este indeplinita conditia 2;
} else {
instructiuni executate daca nu este indeplinita conditia 2;
}

Exemplu:

<?php
$a=19;
$b=23;
if ($a<$b) {

Liceul “George Călinescu”, Bucureşti 11


Prof. Costache Maria-Magdalena 2010-2011
echo "$a<$b";
} elseif ($a==$b) {
echo "$a==$b";
} else {
echo "$a>$b";
}
?>

switch este asemanatoare functiei if dar conditia are mai mult de doua valori.

Exemplu: transforma numarul zilei in numele ei

<?php
$ziua=2;
echo $ziua;
echo "<br>";
switch ($ziua) {
case 1:
echo "Luni";
break;
case 2:
echo "Marti";
break;
case 3:
echo "Miercuri";
break;
case 4:
echo "Joi";
break;
case 5:
echo "Vineri";
break;
case 6:
echo "Sambata";
break;
case 7:
echo "Duminica";
break;
}
?>

while este o instructiune de tip bucla. Atat timp cat conditia este adevarata se repeta bucla.

Exemplu:

<?php
$numar=1;
while ($numar<=7) {
echo $numar."<br>";
$numar++;
}
?>

for este o instructiune de tip bucla.

for (expresia1; expresia2; expresia3) {


instructiuni de executat;
}
?>

expresia1 este evaluata la inceputul buclei


expresia2 se verifica la inceputul fiecarei iteratii
expresia3 se executa la sfarsitul fiecarei iteratii
constructia for poate functiona si fara una sau toate aceste expresii

Liceul “George Călinescu”, Bucureşti 12


Prof. Costache Maria-Magdalena 2010-2011
Exemplu: se initializeaza variabila i cu valoarea 1, se verifica daca este mai mica sau egala cu 10 iar apoi
se incrementeaza. La fiecare iteratie se tipareste variabila i.

<?php
for ($i=1; $i<=10; $i++) {
echo $i."<br>";
}
?>

foreach este o constructie care functioneaza doar cu matrice generand erori cand sunt folosite variabile
cu tipuri de date diferite sau variabile neinitializate. Sintaxa folosita este:

foreach ($matrice as $cheie=>$valoare) {


instructiuni de executat;
}

Exemplu:

<?php
$personal = array(
"Florin" => director,
"Catalin" => inginer,
"Mihai" => economist,
"Sorin" => sofer,
"Diana" => secretara
);

foreach ($personal as $nume => $meserie) {


echo "$nume => $meserie<br>";
}
?>

include si require sunt doua functii asemanatoare folosite pentru includerea in paginile php a unor fisiere
externe. Diferenta intre cele doua functii consta in faptul ca daca include da gres scriptul genereaza o
avertizare dar functioneaza in continuare in timp ce la require se termina executarea scriptului.

include "fisier1.php";
require "fisier2.html";

break opreste fortat executia structurilor for, foreach, while, do..while sau switch.
break accepta optional un argument numeric care indica numarul de structuri imbricate a caror
functionare este oprita.

Exemplu: la i=6 se opreste executia buclei

<?php
for ($i=0; ;$i++) {
if ($i>6) {
break;
}
echo $i."<br>";
}
?>

continue sare peste restul din iteratia buclei curente si continua executia la inceputul iteratiei urmatoare
continue accepta optional un argument numeric care indica numarul de bucle care vor fi sarite pana la
sfarsit.

Exemplu: sare executia peste i==5

<?php
for ($i=0;$i<8;$i++) {
if ($i==5)
Liceul “George Călinescu”, Bucureşti 13
Prof. Costache Maria-Magdalena 2010-2011
continue;
echo $i."<br>";
} ?>

return
Daca este chemata din interiorul unei functii declaratia return() opreste imediat executia functiei curente
si furnizeaza argumentul ca valoare a functiei.
Daca este chemata in scop global executia scriptului curent se opreste.

Lecţia 3 : Functii
Functia este o secventa de cod ce poate fi utilizata de mai multe ori in interiorul marilor scripturi si este
prezentata in script prin declaratia ei.
Functia chemata (invocata) va contine acelasi numar de argumente ca in declaratie.
function foo($arg_1,$arg_2, $arg_n) {
echo "Exemplu.\n";
return $val
}

unde:
foo este numele functiei
$arg_1, $arg_2, ... , $arg_n sunt argumentele functiei
$val este valoarea returnata de functie

Exemplu: construim o functie care aduna 2 variabile

<?php
function adunare($a,$b) {
$suma=$a+$b;
return $suma;
}

$rezultat=adunare(5,16);
echo $rezultat;
?>

Exemplu: o functie care genereaza un tabel

<?php
function tabel($lim) {
echo "<table border=\"1\">\n";
for ($i=0; $i<=$lim; $i++) {
echo "<tr><td>randul ".$i."</td></tr>\n";
}
echo "</table>";
}
tabel(9); //tabel cu 10 randuri
?>

Lecţia 4: Lucrul cu fisiere


Folosind PHP-ul se pot executa anumite operatii asupra fisierelor aflate pe server cum ar fi:
fopen() = deschide fisierul indicat
fclose() = inchide fisierul
fread() = citeste continutul fisierului
fwrite() = scrie in fisier
filesize() = indica dimensiunea fisierului

Deschiderea fisierelor
Sintaxa functiei fopen() este:
Liceul “George Călinescu”, Bucureşti 14
Prof. Costache Maria-Magdalena 2010-2011
fopen(param1, param2);

param1 = fisierul, calea catre fisier sau adresa fisierului care va fi deschis
param2 = modul in care va fi deschis fisierul, si poate avea valorile:

r = fisier deschis doar pentru citire


r+ = fisier deschis doar pentru citire si scriere
w = fisier deschis doar pentru scriere
w+ = fisier deschis pentru citire si scriere iar daca nu exista fisierul il creza
a = fisier deschis pentru adaugare la sfarsit
a+ = fisier deschis adaugare la sfarsit iar daca nu exista fisierul il creza
t = fisier deschis in mod text
b = fisier deschis in mod binar
sau combinatii ale acestora.

Citirea fisierelor
Sintaxa functiei fread() este:

$filename="proba.txt";
$handle=fopen($filename, "r");
$contents=fread($handle, filesize($filename));

variabila $handle va fi folosita ulterior si in alte functii

Scrierea in fisiere
Sintaxa functiei fwrite() este:

fwrite($handle, "continut ce va fi scris in fisier");

Verificarea drepturilor de acces asupra fisierului


Sintaxa functiei is_writable este:

is_writable($filename);

returneaza TRUE daca se poate si FALSE daca nu se poate scrie in fisier

Inchiderea fisierului
Sintaxa functiei fclose() este:

fclose($handle);

Folosind aceste functii de baza putem incerca cateva exemple simple.

Exemplu: se verifica dreptul de scriere in fisier. Primul pas este crearea fisierului proba.txt apoi se verifica
exemplul care va returna mesajul Acces interzis scrierii in fisier. Se modifica drepturile asupra fisierului
conform Q5 din FAQ adaugand scrierea. Se verifica iar exemplul care va returna mesajul Acces permis
scrierii in fisier.

<?php
$filename="proba.txt";
if(is_writable($filename)) { //se verifica dreptul de scriere in fisier
echo "Acces permis scrierii in fisier";
} else {
echo "Acces interzis scrierii in fisier";
}
?>

Exemplu: adaugam exemplului anterior verificarea deschiderii fisierului.

Liceul “George Călinescu”, Bucureşti 15


Prof. Costache Maria-Magdalena 2010-2011
<?php
$filename="proba.txt";
if(is_writable($filename)) { //se verifica dreptul de scriere in fisier
if(!$handle=fopen($filename, 'a')) { //se verifica deschiderea fisierului
echo "Fisierul <b>".$filename."</b> nu poate fi deschis";
exit; //se incheie executia scriptului
}
echo "Fisierul <b>".$filename."</b> poate fi deschis";
} else {
echo "Acces interzis pentru scriere in fisier";
}
?>

Exemplu: adaugam exemplului anterior scrierea in fisier si tiparirea continutului sau

<?php
$filename="proba.txt";
if(is_writable($filename)) { //se verifica dreptul de scriere in fisier
if(!$handle=fopen($filename, 'a')) { //se verifica deschiderea fisierului
echo "Fisierul <b>".$filename."</b> nu poate fi deschis";
exit; //se incheie executia scriptului
}
if(fwrite($handle, date("j-n-Y g:ia")."\r\n")===FALSE) { //testeaza daca se poate scrie
in fisier
die ("Nu se poate scrie in ".$filename.""); //iesire
}
fclose($handle);
$matrice=file($filename); //se citeste continutul fisierului si se stocheaza intr-o
matrice
foreach ($matrice as $cheie =>$valoare) {
echo $valoare."<br>"; //printeaza cate o valoare pe un rand
}
} else {
echo "Acces interzis pentru scriere in fisier";
}
?>

Liceul “George Călinescu”, Bucureşti 16


Prof. Costache Maria-Magdalena 2010-2011
Lecţia 5: Interacţiunea cu formulare HTML

5.1. Preluarea datelor din formularele HTML


Recapitulare: in tutorialul de HTML la capitolul Formulare am mentionat ca eticheta form are atributele
action si method iar fiecare camp din formular avea un name.

action indica fisierul care prelucreaza datele introduse in formular cand este apasat butonul Trimite
method indica modul in care datele sunt trimise spre prelucrare pe server si poate avea valorile: POST
cand datele trimise nu sunt vizibile utilizatorului si GET cand datele sunt adaugate la adresa URL. Metoda
POST permite trimiterea unei cantitati mai mari de date decat metoda GET.
name este un atribut care identifica datele introduse in fiecare camp al formularului

Sa presupunem ca intr-un formular avem un camp cu name="nume" si method="POST". Fisierul indicat


de action va prelua datele introduse in campul "nume" astfel:

$_POST["nume"];

Exemplu: formular cu un camp si scriptul php de preluare a datelor

<form action="exemplu5_1.php" method="POST">


Nume: <input type="text" name="nume"><br>
<input type="submit" value="Trimite">
</form>

/* urmeaza fisierul exemplu5_1.php */


<?php
$nume=$_POST["nume"];
echo $nume;
?>

Verificarea datelor introduse in formular


Pentru a fi siguri ca utilizatorul a completat campurile trebuie sa adaugam scriptului partea de verificare.

Exemplu: folosim acelasi formular dar adaugam partea de verificare

<?php
$nume=$_POST["nume"];
if ($nume=="") {
echo "Campul nume nu este completat";
} else {
echo $nume;
}
?>

Partea de verificare poate avea mai multe conditii simultane.

Exemplu: acelasi formular dar partea de verificare are doua conditii legate prin operatorul OR sau ||

<?php
$nume=$_POST["nume"];
if (($nume=="") || (strlen($nume)<5)) {
echo "Campul nume nu este completat corect";
} else {
echo $nume;
}
?>

Folosind modelele anterioare puteti prelua date si face verificarea pentru toate campurile formularului.

Liceul “George Călinescu”, Bucureşti 17


Prof. Costache Maria-Magdalena 2010-2011
Datele preluate pot fi eventual introduse intr-o baza de date sau prelucrate in vederea trimiterii prin email
functie de cerintele aplicatiei.

In afara preluarii datelor putem folosi formularul si pentru upload-ul fisierelor pe server dar cu
masurile de precautie necesare pentru a evita eventualele upload-uri de fisiere nedorite pe server.
Pentru upload formularul va contine un camp de tip input cu type="file" iar eticheta form va contine in
plus un argument enctype="multipart/form-data".

Exemplu: formular pentru upload fisiere. Folderul in care se face upload trebuie sa permita operatia de
scriere. Din motive de securitate acest exemplu nu este activ.

<form method="post" action="exemplu5_4.php" enctype="multipart/form-data">


Fisier pentru upload: <input type="file" name="file"><br>
<input type="submit" value="Trimite">
</form>

/* urmeaza fisierul exemplu5_4.php */


<?php
$a=$_FILES["file"]["size"];
$b=$_FILES["file"]["name"];
$c=$_FILES["file"]["tmp_name"];
$d=$_FILES["file"]["type"];
if(($a<10000) && ($a>0)) {
move_uploaded_file($c,$b);
echo "Original file name: ".$b."<br>";
echo "File name after upload: ".$c."<br>";
echo "File size: ".$a."<br>";
echo "File type: ".$d;
}
?>

5. 2. Functia mail
Folosind functia mail() din PHP pot fi trimise mailuri utilizand urmatoarea sintaxa:

mail(destinatar, subiect, mesaj, header aditional);

destinatar este adresa unde va fi trimis mailul iar daca este necesar mailul poate fi trimis mai multor
destinatari, situatie in care adresele vor fi separate prin virgula
subiect este informatia care va fi afisata in campul subiect
mesaj este corpul mailului. Fiecare linie va fi separata prin LF (\n) si nu va avea mai mult de 70 de
caractere
header aditional contine informatii optionale, de exemplu: From, Cc, Bcc fiind separate de caracterele
CRLF (\r\n)

Toate mailurile trimise trebuie sa aibe campul From completat. Acest lucru poate fi facut prin adaugarea
acestuia in header aditional sau prin setarea corespunzatoare a adresei in fisierul php.ini din PHP.

Executia functiei mail returneaza TRUE daca mailul a fost acceptat pentru trimitere, altfel FALSE.
Acceptarea mailului pentru trimitere nu inseamna obligatoriu si ca a fost trimis.

Exemplu: trimiterea unui simplu mail

$to="proba@test.ro";
$subiect="functia mail";
$mesaj="Mail trimis cu functia mail din PHP";
mail($to, $subiect, $mesaj);

Exemplu: trimiterea unui mail la care adaugam header aditional cu campurile From, Cc, Bcc. Pentru ca
mailul sa poata contine etichete HTML trebuie adaugat Content-type. S-au folosit caracterele speciale \r\n
pentru afisarea fiecarei informatii pe un nou rand

Liceul “George Călinescu”, Bucureşti 18


Prof. Costache Maria-Magdalena 2010-2011
$to="proba@test.ro";
$subiect="functia mail";
$mesaj="Mail trimis cu functia mail din PHP";
$headers = 'MIME-Version: 1.0'."\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1'."\r\n";
$headers .= 'From: sender@test.ro'."\r\n";
$headers .= 'Cc: cc@test.ro'."\r\n";
$headers .= 'Bcc: bcc@test.ro'."\r\n";
mail($to, $subiect, $mesaj, $headers);

Lecţia 6 : Exemple
md5 este o metoda de criptare folosind un algoritm special care furnizeaza ca rezultat un numar
hexazecimal de 32 caractere

Exemplu: introduceti in formular datele care ulterior vor fi criptate md5

/* urmeaza fisierul test1.html */


<form action="test1.php" method="POST">
Introduceti date spre criptare: <input type="text" name="date"><br>
<input type="submit" value="Trimite">
</form>

/* urmeaza fisierul test1.php */


<?php
$a=$_POST['date']; //preluare date din formular
echo md5($a); //tiparire codare md5
?>

date returneaza un sir functie de parametri ceruti conform tabelului de mai jos

Parametru Semnificatie Exemplu


Y An format 4 cifre 2006
y An format 2 cifre 06
n Luna format 1 sau 2 cifre 7
m Luna format 2 cifre 07
F Luna June
M Luna format 3 litere Jun
j Zi din luna format 1 sau 2 cifre 9
d Zi din luna format 2 cifre 09
l (L mic) Zi din saptamana Friday
D Zi din saptamana format 3 litere Wed
w Zi din saptamana format 1 cifra 0=duminica 6=sambata
z Zi din an (0-365) 123
t Numarul zilelor dintr-o anumita luna 30
g Ora 12h format 1 sau 2 cifre 3
G Ora 24h format 1 sau 2 cifre 21
h Ora 12h format 2 cifre 03
H Ora 24h format 2 cifre 21
i Minute 32
s Secunde 17
a am sau pm pm
A AM sau PM PM

Exemplu: data si ora afisate in mai multe moduri

<?php
echo date("d-m-Y g:i A");
Liceul “George Călinescu”, Bucureşti 19
Prof. Costache Maria-Magdalena 2010-2011
echo"<br>";
echo date("j-F-Y H:i" );
echo"<br>";
echo date("l-M-Y");
?>

strlen returneaza lungimea unui string

Exemplu: returneaza lungimea sirului Another brick in the wall

<?php
$sir="Another brick in the wall";
echo strlen($sir);
?>

trim() elimina spatiile albe din sir


ltrim() elimina spatiile albe din stanga sir
rtrim() elimina spatiile albe din dreapta sir

Exemplu: se elimina succesiv spatiile libere din sir " 234 " folosind ltrim() si apoi rtrim()

<?php
$a=" 234 ";
echo $a."<br>";
echo strlen($a);
$b=ltrim($a);
echo "<br>".$b."<br>";
echo strlen($b);
$c=rtrim($b);
echo "<br>".$c."<br>";
echo strlen($c);
?>

strtolower() converteste un sir la litere mici


strtoupper() converteste un sir la litere mari

Exemplu: se converteste primul sir la litere mici si al doilea la litere mari

<?php
$a="Star Wars Episode III";
echo strtolower($a);
echo "<br>";
$b="atentie inalta tensiune";
echo strtoupper($b);
?>

array_merge() uneste mai multe matrici

Exemplu: uneste doua matrici si tipareste matricea rezultata

<?php
$a=array(apa, aer, foc);
$b=array(fructe, legume, carne);
print_r(array_merge($a,$b));
?>

count() numara elemetele unei matrici

Exemplu:

<?php
$a=array(fructe, legume, carne, lactate);

Liceul “George Călinescu”, Bucureşti 20


Prof. Costache Maria-Magdalena 2010-2011
echo (count($a));
?>

Lecţia 7: PHP - GD Library


Functiile GD sunt folosite pentru crearea imaginilor. Verificati folosind phpinfo(), ca serverul de gazduire
suporta aceste functii, inainte de a le utiliza.

Pentru a insera in paginile web o imagine creata cu functiile din php folositi eticheta img

<img src="imagine.php" alt="Imagine creata cu GD Library">

In urmatorul exemplu vom genera o imagine in format JPEG, cu dimensiunile 200px x 100px, fond verde.

<?php
header ("Content-type: image/jpeg");
$img = ImageCreate (200,100);
$fond = ImageColorAllocate ($img,0,200,0);
ImageJPEG ($img, '', 100);
?>

header - declara tipul imaginii


Content-type poate avea valorile:
image/jpeg - pentru JPEG
image/gif - pentru GIF
image/png - pentru PNG
Cu ImageCreate sunt declarate dimensiunile imaginii
Culoarea fondului imaginii este declarata in ImageColorAllocate, prin cele 3 culori de baza R-G-B, in
format zecimal (0-255)
ImageJPEG - afiseaza imaginea in browser (pentru GIF se foloseste ImageGIF, iar pentru PNG
ImagePNG). Calitatea imaginii generate va fi "best quality" (100).

Adaugam exemplului anterior textul "Proba text", cu caractere albe.

<?php
header ("Content-type: image/jpeg");
$img = ImageCreate (200,100);
$fond = ImageColorAllocate ($img,0,200,0);
$text = ImageColorAllocate ($img,255,255,255);
ImageString ($img,5,10,10,"Proba text",$text);
ImageJPEG ($img, '', 100);
?>

Culoarea fontului este declarata tot cu ImageColorAllocate, similar culorii fondului


ImageString contine 3 valori numerice si textul continut de imagine. Prima este marimea fontului,
urmatoarele 2 sunt distantele in pixeli (coordonatele pe X si pe Y) fata de coltul stanga sus, stabilind
pozitia textului in interiorul imaginii.

Cream o linie din punctul (10,90) in punctul (190,90). Referinta coordonatelor este coltul stanga sus.

<?php
header ("Content-type: image/jpeg");
$img = ImageCreate (200,100);
$fond = ImageColorAllocate ($img,0,200,0);
$col = ImageColorAllocate ($img,255,255,255);
ImageLine ($img,10,90,190,90,$col);
ImageJPEG ($img, '', 100);
?>

Liceul “George Călinescu”, Bucureşti 21


Prof. Costache Maria-Magdalena 2010-2011
Cu ImageLine cream linia. Cele 4 valori numerice continute reprezinta coordonatele x si y pentru punctul
de inceput si de sfarsit al liniei, iar ultima este declarata culoarea.

Completam exemplul anterior cu inca 2 linii pentru a desena un triunghi.

<?php
header ("Content-type: image/jpeg");
$img = ImageCreate (200,100);
$fond = ImageColorAllocate ($img,0,200,0);
$col = ImageColorAllocate ($img,255,255,255);
ImageLine ($img,10,90,190,90,$col);
ImageLine ($img,10,90,100,10,$col);
ImageLine ($img,100,10,190,90,$col);
ImageJPEG ($img, '', 100);
?>

Cream o elipsa in centrul imaginii (100,50), avand latimea 180 si inaltimea 80.

<?php
header ("Content-type: image/jpeg");
$img = ImageCreate (200,100);
$fond = ImageColorAllocate ($img,0,200,0);
$col = ImageColorAllocate ($img,255,255,255);
ImageEllipse ($img,100,50,180,80,$col);
ImageJPEG ($img, '', 100);
?>

Cream un trapez.

<?php
header ("Content-type: image/jpeg");
$img = ImageCreate (200,100);
$fond = ImageColorAllocate ($img,0,200,0);
$col = ImageColorAllocate ($img,255,255,255);
ImagePolygon
($img,array(60,10,140,10,190,90,10,90),4,$col);
ImageJPEG ($img, '', 100);
?>

ImagePolygon contine o matrice (care indica coordonatele pentru fiecare colt in parte) si numarul de
colturi

Vom genera o imagine care va avea ca fundal un fisier JPG (fond.jpg), peste care aplicam textul "Text
proba", de culoarea neagra (0,0,0), folosind fontul "verdana.ttf", marime 18. Textul va fi amplasat, fata
de coltul stanga sus, la 30px pe orizontala si 40px pe verticala, si va avea o inclinare de 10 grade.
Calitatea imaginii generate va fi "best quality" (100).

<?php
header("Content-Type: image/jpeg");
$im = ImageCreateFromJpeg("fond.jpg");
$text="Text proba";
$black = ImageColorAllocate($im, 0, 0, 0);
$start_x = 30;
$start_y = 60;
Imagettftext($im, 18, 10, $start_x, $start_y, $black,
'verdana.ttf', $text);
Imagejpeg($im, '', 100);
ImageDestroy($im);
?>

Liceul “George Călinescu”, Bucureşti 22


Prof. Costache Maria-Magdalena 2010-2011
PARTEA a II - a – INTERACŢIUNEA CU BAZE DE DATE

Partea 1-a : Introducere


Pentru multă lume, principala raţiune de a învăţa un limbaj precum PHP ar fi interacţiunea pe care o oferă cu
bazele de date. In acest curs căutăm să explicăm cum se foloseşte PHP şi MySQL, pentru a memora informaţii
pe Web şi cum includem toate astea pe site-ul Web. Pentru a parcurge acest curs sunt necesare cel puţin
elementele de bază privind folosirea PHP. Se recomandă deci parcurgerea cursului de PHP, înainte de a
continua.
De ce îmi trebuie o Bază de Date?
Este, de fapt, surprinzător cât de utilă poate fi o bază de date, mai ales atunci când poate fi folosită într-un site
Web. Sunt foarte multe lucruri care se pot face într-un astfel de caz, de la afişarea unor simple liste şi până la
producerea integrală a paginilor Web dintr-o bază de date. Câteva exemple cu PHP şi MySQL, folosite
împreună, sunt:
Schimbarea - rotaţia Banner-elor. Pentru a realiza schimbarea pe ecran a imaginilor la diferitele vizitări ale
unei pagini şi a asigura astfel un interes mai mare al vizitatorilor, se poate folosi un script PHP care
deschide o bază de date ş extrage aleator o imagine sau un set de imagini, pentru a-l include într-un set de
pagini Web. Scriptul PHP va contoriza deasemeni numărul de câte ori a fost văzut banner-ul, putând, cu
modificări minore, să urmăreasc ਞ chiar şi numărul de click-uri. Pentru a adăuga, schimba sau edita
bannerele, tot ce avem de făcut este să schimbăm baza de date iar scriptul va încărca banner-ul corect în
toate paginile site-ului Web.
Forumurile Web. Sute de forumuri de dezbatere sunt acum realizate - rulează în PHP şi MySQL. Acestea s-
au dovedit mult mai eficiente dacât alte sisteme, creind câte o pagină pentru fiecare mesaj şi oferind o largă
varietate de opţiuni. Toate paginile forumului pot fi actualizate prin schimbarea unui script PHP.
Bazele de Date. Un astfel de exemplu (edificator) îl oferă site-urile care dau toate informaţiile dintr-o bază
de date. Spre exemplu, Script Avenue este rulat de câteva scripturi, care furnizează toate informaţiile dintr-o
bază de date amplă. Toate categoriile de scripturi diferite pot fi accesate într-un singur script exact prin
schimbarea URL-ului pentru a accesa diferite părţi ale bazei de date.
Site-urile Web. Când avem un site de mari dimensiuni - cu multe pagini, şi dorim să modificăm aspectul
general sau să schimbăm proiectul, chestiune care ar cere foarte mult timp pentru aducere la zi şi încărcare.
Cu PHP şi MySQL întregul site Web se poate reduce la unul sau două scripturi PHP care să acceseze o bază
de date MySQL pentru a obţine informaţiile pentru paginile Web. Pentru a actualiza sau a modifica
proiectul centrului Web nu trebuie să schimbăm decât o pagină.
De ce e nevoie?
Sunt necesare trei componente pentru a putea rula scripturi PHP care să acceseze baze de date cu MySQL.
În primul rând, este nevoie de un server Web. Acesta poate fi sau pe calculatorul personal sau pe o 'gazdă'
Web. Oricare pachet - oricare tip de server Web este acceptat şi va lucra cu PHP şi MySQL, dar cel mai
recomandat este Apache, care e public şi gratis.
PHP trebuie să fie instalat pe server. Dacă nu este deja instalat, puteţi să o faceţi sau să apelaţi la
administratorul serverului Web, în acest sens. Pachetul de instalare poate fi descărcat - preluat de la
http://PHP.net şi este deasemeni public - gratuit. Dacă nu sunteţi sigur dacă este sau nu instalat, o să vedeţi
mai jos cum vă puteţi lămuri.
În fine, aveţi nevoie de MySQL. Acesta este de fapt pachetul de programe pentru gestiunea bazelor de date.
Puteţi folosi deasemeni multe alte sisteme de baze de date (SQL, Oracle etc.) dar aici discutăm despre
PHP/MySQL, deci avem nevoie de MySQL (cu toate că se folosesc comenzi care ţin de limbajul SQL ţi
'merg' la oricare din sistemele de baze de date SQL). Şi pachetul MySQL este public - gratuit, putând fi
preluat din pagina oficială a firmei MySQL. Dar şi în cazul MySQL trebuie să verificăm mai întâi dacă nu
cumva este deja instalat.
Dacă nu puteţi instala PHP şi MySQL, sau dacă gazda Web nu v-o permite, puteţi apela la alt server Web, la
altă gazdă. Spre exemplu, Freedom2Surf este un server Web public, care acordă acces liber şi suportă PHP,
având MySQL instalat. HostRocket este un alt server excelent care oferă spaţiu de până la 300 MO, şi include
PHP, MySQL şi multe altele, dar percepe o taxă de abonament de 10 USD pe lună.
Cum aflăm dacă PHP şi MySQL sunt instalate

Liceul “George Călinescu”, Bucureşti 23


Prof. Costache Maria-Magdalena 2010-2011
Există un test simplu, atât pentru PHP cât şi pentru MySQL:
Lansaţi - deschideţi un editor de texte şi scrieţi următoarele:
<?
phpinfo();
?>
salvând fişierul cu un nume precum phpinfo.php
Apoi încărcaţi acest fişier în spaţiul web, pe server, apelându-l, după aceea, din navigator. Dacă PHP-ul este
deja instalat veţi căpăta o pagină plină cu toate detaliile instalării respective. Parcurgeţi atunci aceste informaţii.
Dacă găsiţi o secţiune despre MySQL atunci înseamnă că MySQL este şi el deja instalat.
Gestiunea Bazelor de date
Chiar dacă tot ce ţine de administrarea bazelor de date poate fi realizat prin scripturi PHP, instalarea pe server a
pachetului PHPMyAdmin poate aduce un plus de confort. Este un excelent set de scripturi care asigură o
interfaţă administrativă pentru bazele de date MySQL. Si mai este şi public-gratuit.
Cu el puteţi adăuga, elimina, edita, salva şi vizualiza bazele de date, fiind deosebit de util pentru depanare.
Scopul acestui curs
Urmărim familiarizarea cursantului cu câteva din elementele de bază ale folosirii PHP împreună cu MySQL.
Pentru asta vom urmări mereu un exemplu. Parcurgând cursul de faţă veţi învăţa cum să creaţi un program
bazat pe Web pentru a contacta colaboratorii - o variantă de caiet de adrese. Acest program vă permite să
memoraţi numele împreună cu adresa corespunzătoare, adresa e-mail şi numărul de telefon. Veţi putea să
actualizaţi înregistrările, să căutaţi în baza de date. Existând Ši opţiunea de a trimite un mesaj email la toţi cei
din baza de date (reţineţi însă: acest sistem nu va fi folosit pentru expedierea unor mesaje nesolicitate).
După realizarea acestui sistem veţi fi, cu siguranţă, în măsură să creaţi aproape orice tip de bază de date pe
Web.

Liceul “George Călinescu”, Bucureşti 24


Prof. Costache Maria-Magdalena 2010-2011
Partea 2-a: Construirea unei Baze de Date
Introducere
Mai înainte de a porni construcţia unor script-uri pentru baze de date, ar trebui să avem o bază de date în care să
plasăm informaţii şi din care să citim. In această lecţie vom vedea cum creem o bază de date în MySQL şi cum
o pregătim pentru date. Ca un exemplu, vom crea o bază de date de tip carte de adrese de contact.
Construcţia Bazei de Date
Bazele de date MySQL au un sistem de iniţializare standard (un setup). Este vorba de o bază de date, compusă
din tabele, oarecum separate, conţinând diferite câmpuri, etc. chiar dacă sunt parte dintr-o bază de date. Fiecare
tabelă conţine înregistrări care sunt făcute din câmpuri.
Conectarea la o Bază de Date
Procesul de instalare a unei baze de date MySQL diferă de la o platformă la alta. In esenţă este vorba peste tot
de un nume al bazei de date, un nume de utilizator (cont) şi o parolă. Aceste informaţii sunt cerute pentru
conectarea la baza de date.
Dacă aveţi pachetul PHPMyAdmin (sau un program similar) instalat, atunci puteţi să intraţi acolo şi să vă
conectaţi introducând contul (numele de utilizator) şi parola. Dacă nu aveţi aşa ceva, atunci trebuie să faceţi
întreaga administrare a bazelor de date folosind script-uri PHP (şi o puteţi face).
Crearea unei Tabele
Mai înainte de orice altceva cu baza de date, trebuie să vă creaţi o tabelă. O tabelă este o secţiune a bazei de
date pentru memorarea unor informaţii structurate (legate). Intr-o tabelă vom defini diferite câmpuri care vor fi
folosite în acea tabelă. Din cauza acestei construcţii, aproape toate centrele cu baze de date trebuie să fie
satisfăcute folosind doar o bază de date.
Crearea unei tabele în PHPMyAdmin este simplă, scrieţi numele, selectaţi numărul de câmpuri şi
&Quot;apăsaţi" butonul (click). Ajungeţi atunci la un ecran setup în care trebuie să creaţi câmpurile pentru baza
de date. Dacă folosiţi un script PHP pentru a crea propria bază de date, iar completa creere şi iniţializarea vor fi
făcute îtr-o singură comandă.
Câmpuri
Există o largă varietate de câmpuri şi de atribute disponibile în MySQL şi vom discuta doar câteva din ele:
Tipul câmpului Descriere
TINYINT Număr Intreg mic
SMALLINT Număr Intreg mic
MEDIUMINT Număr Intreg
INT Număr Intreg
VARCHAR Text (maximum 256 caractere)
TEXT Text
Acestea sunt doar câteva dintre câmpurile disponibile. O căutare pe Internet ne poate furniza lista cu toate
tipurile de câmpuri permise.
Crearea unei Tabele cu PHP
Să creem o tabelă din PHP este ceva mai dificil decât cu MySQL. Avem de parcurs următorii paşi:
CREATE TABLE nume_tabel {
Fields
}
Câmpurile sunt definite după cum urmează:
fieldname type(length) extra info,
Ultimul câmp introdus nu poate include nici o virgulă.
O să dăm îndată un exemplu complet privind aceste definiri.
Baza de date cu adrese de contact
Baza de date de contact va conţine toate informaţiile de contact ale cunoscuţilor introduşi în tabel. Iar
informaţiile vor putea fi editate şi consulate în internet. Următoarele câmpuri vor fi folosite în baza de date:
Nume Tipul Lungimea Descrierea
id INT 6 Un identificator unic pentru fiecare înregistrare
Nume VARCHAR 15 Numele de familie al persoanei

Liceul “George Călinescu”, Bucureşti 25


Prof. Costache Maria-Magdalena 2010-2011
prenume VARCHAR 15 Numele de botez al persoanei
telefon VARCHAR 20 Numărul de telefon
mobil VARCHAR 20 Numărul de telefon mobil
fax VARCHAR 20 Numărul de fax
email VARCHAR 30 Adresa e-mail
web VARCHAR 30 Pagina Web personală
Poate vă miraţi că am folosit un tip de câmp VARCHAR pentru coloana mumăr_telefon/fax, chiar dacă acestea
sunt formate din cifre. Chiar dacă am putea folosi tipul INT, este preferabil să folosim VARCHAR pentru că
astfel vor fi permise spaţii şi cratime, precum şi porţiuni de text, la fel ca numerele scrise ca text (exemplu
1800-COMPANY) şi cum nu vom iniţia apeluri telefonice de pe Web, totul e în ordine.
Există încă ceva de care trebuie să avem grije în această bază de date. Câmpul id va fi pus ca PRIMARY,
INDEX, UNIQUE şi iniţializat ca auto_increment (poziţie ce apare în Extra în PHPMyAdmin). Raţiunea pentru
asta este că acesta va fi câmpul identificator (primar sau index) şi deci trebuie să fie unic. Definirea sa ca auto
increment înseamnă că la adăugarea fiecărei înregistrări, câtă vreme nu specificăm acolo un id, acesta va primi
ca valoare următorul număr.
Dacă folosim PHPMyAdmin sau un program de management, putem crea o tabelă numită contacte.
Crearea Tabelei în PHP
Pentru a crea această tabelă vom folosi următoarea secvenţă de comenzi PHP. O parte dintre comenzile de mai
jos n-au fost încă discutate, dar le vom explica în detaliu în lecţia următoare.
<?
$user="username";
$password="password";
$database="database";
mysql_connect(localhost,$user,$password);
@mysql_select_db($database) or die( "Baza de date nu poate fi selectata");
$query="CREATE TABLE contacts (id int(6) NOT NULL auto_increment,nume varchar(15) NOT
NULL,prenume varchar(15) NOT NULL,telefon varchar(20) NOT NULL,mobil varchar(20) NOT NULL,fax
varchar(20) NOT NULL,email varchar(30) NOT NULL,web varchar(30) NOT NULL,PRIMARY KEY
(id),UNIQUE id (id),KEY id_2 (id))";
mysql_query($query);
mysql_close();
?>
Introduceţi numele bazei de date, contul MySQL şi parola MySQL în poziţiile corespunzătoare din primele 3
linii de mai sus.

Liceul “George Călinescu”, Bucureşti 26


Prof. Costache Maria-Magdalena 2010-2011
Partea 3-a: Introducerea datelor
Introducere
Pe parcursul precedentelor lecţii am văzut ce vrem să învăţăm în acest curs şi am văzut cum putem crea o bază
de date pe care s-o folosim în acest curs. In această lecţie vom vedea cum introducem anumite informaţii în
baza noastră de date astfel încât să devină cât mai utilă.
Conectarea la o bază de date
Primul lucru care trebuie făcut, mai înainte de a putea face ceva, este conectare la baza de date MySQL. Acesta
este un pas foarte important, pentru că, dacă nu suntem conectaţi, comenzile către baza de date vor eşua.
Practic, pentru a folosi o bază de date trebuie să precizăm numele de utilizator (username), parola (password) şi
numele bazei de date :
$username="nume_utilizator";
$password="parola";
$database="numele_bazei_de_date";
Desigur, aici s-ar putea discuta dacă nu-i riscant să păstrăm parola într-un fişier. Nu trebuie să vă alarmaţi, însă,
deoarece sursa PHP este prelucrată de server înainte de a fi trimisă navigatorului, astfel încacirc;t este imposibil
pentru orice utilizator să vadă scriptul.
Mai apoi, avem nevoie de o comandă care să lanseze conexiunea la baza de date:
mysql_connect(localhost,$username,$password);
Această linie spune PHP-ului să se conecteze la serverul de baze de date MySQL la 'localhost' (localhost se
numeşte serverul pe care rulează PHP-ul. In afara cazului în care gazda Web indică altceva, vom folosi
localhost) folosind numele de cont memorat în $username şi parola din $password.
Mai înainte de a discuta cum lucrăm cu baza de date, vom vedea încă o comandă:
mysql_close();
Aceasta este o comandă foarte importantă care închide conexiunea cu serverul de baze de date. Scriptul va rula
încă, dacă nu includem această comandă, iar prea multe conexiuni MySQL deschise pot cauza probleme
serverului web. Este un obicei bun să includem comanda de închidere de mai sus după ce am introdus toate
comenzile către baza de date, pentru a menţine platforma în bună stare.
Selectarea bazei de date
După ce ne-am conectat la severul de baze de date, trebie să selectăm baza de date pe care vrem s-o folosim.
Trebuie să fie o bază de date la care avem acces, cu respectivul nume de utilizator. Se foloseşte următoarea
comandă:
@mysql_select_db($database) or die( "Baza de date nu poate fi selectata");
Aceasta spune PHP-ului să selecteze baza de date specificată în variabila $database (pe care am definit-o mai
înainte). Dacă conexiunea nu se poate realiza procesul (execuţia script-ului) se opreşte afişând textul:
Baza de date nu poate fi selectata
Această parte suplimentară 'or die' este bună pentru ieşire, chiar dacă nu asigură decât un minim control al
erorii.
Execuţia comenzilor
După conectarea la server şi selecţia bazei de date dorite, putem începe execuţia comenzilor pe server.
Există două moduri de a executa o comandă. Prima revine pur şi simplu la introducerea comenzii în PHP. Asta
merge atunci când nu apar rezultate ca urmare a execuţiei comenzii.
Cea de a doua variantă este să definim comanda ca o variabilă. Asta va atribui variabilei rezultatele operaţiei.
In această lecţie vom folosi prima cale, deoarece nu aşteptăm răspuns de la baze de date. Comanda va arăta cam
aşa:
mysql_query($query);
Folosirea acestei forme a comenzii este utilă pentru că repetăm pur şi simplu aceiaşi comandă iarăşi şi iarăşi
fără a fi nevoie să memorăm altele. Tot ce avem de făcut este să schimbăm variabila.
Introducerea datelor
Acum ne vom întoarce la baza de date cu adrese de contact, pe care am creat-o în lecţia anterioară. Pentru a
introduce primele informaţii în baza de date:
Nume: Ionescu
Prenume: Gheorghe
Telefon: 021 3456789
Liceul “George Călinescu”, Bucureşti 27
Prof. Costache Maria-Magdalena 2010-2011
Mobil: 0724 334455
Fax: 0264 567891
E-mail: ionescughe@personal.ro
Web: http://www.cinestie.inext.ro
Toate acestea vor fi introduse cu o singură comandă:
$query = "INSERT INTO contacts VALUES ('','Ionescu','Gheorghe','021 3456789','0724 334455','0264
567891','ionescughe@personal.ro','http://www.cinestie.inext.ro')";
Pare puţin cam confuz la prima vedere. Să lămurim puţin lucrurile.
Ma întâi, apare variabila $query căreia îi atribuim o comandă (vezi paragraful precedent). Următoarea parte,
adică:
INSERT INTO contacts VALUES
este destul de uşor de înţeles. Ea spune PHP-ului să insereze în tabel numită contacts valorile care urmează
(scrise între paranteze).
Acolo, între paranteze, avem toate câmpurile de adăugat. Apar toate câmpurile în ordine şi sunt inserate
informaţiile dintre ghilimele. Spre exemplu:
Ionescu
va fi inserat în al 2-lea câmp, care, în această tabelă este câmpul 'nume' .
Poate aţi reţinut că nu am inserat nimic în primul câmp din baza de date (id). Asta din cauză că acest câmp va fi
un câmp index, elementul unic de identificare. Fiecare înregistrare din baza de date va avea un unic ID. Din
această cauză, când încărcăm baza de date, vom pune ID pe 'Auto Increment'. Asta înseamnă că, ne-atribuindu-i
nici o valoare, el va lua la fiecare înregistrare următoarea valoare din şir. Iar prima înregistrare va avea valoarea
ID=1 .

Liceul “George Călinescu”, Bucureşti 28


Prof. Costache Maria-Magdalena 2010-2011
Partea 4-a: Introducere
Până acum, am creat o bază de date şi am încărcat în ea informaţii. In această lecţie vom vedea cum se
realizează o pagină de intrare pentru această bază de date, şi cum se afişează conţinutul acesteia.
Introducerea datelor dintr-o pagină HTML
Introducerea datelor din paginile HTML este aproape identică cu inserarea lor din script-uri PHP. Avantajul
constă, însă, în faptul că nu apare nevoia schimbării script-ului pentru fiecare câmp de introdus. In plus, putem
permite "vizitatorilor" să introducă direct datele lor.
Iată mai jos cum arată o pagină HTML cu celule text pentru introducerea detaliilor corespunzătoare:
<form action="insert.php" method="post">
Nume Familie: <input type="text" name="nume"><br>
Prenume: <input type="text" name="prenume"><br>
Telefon: <input type="text" name="telefon"><br>
Mobil: <input type="text" name="mobil"><br>
Fax: <input type="text" name="fax"><br>
E-mail: <input type="text" name="email"><br>
Web: <input type="text" name="web"><br>
<input type="Submit">
</form>
Această pagină poate fi, desigur, formatată şi pot apare diferite schimbări - variante. Este doar un formular de
pornire, ilustrativ. Va trebui însă editat script-ul din lecţia precedentă, pentru ca, în locul introducerii
informaţiilor direct din script în baza de date, să fie folosite variabilele:
<?
$username="username";
$password="password";
$database="baza_mea_de_date";
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Baza de date nu poate fi selectata");
$query = "INSERT INTO contacts VALUES ('','$nume','$prenume','$telefon','$mobil','$fax','$email','$web')";
mysql_query($query);
mysql_close();
?>
Acest script trebuie salvat ca fişier cu numele insert.php, astfel ca să poată fi apelat de formularul HTML.
Treaba va merge întrucât, în loc ca datele să fie introduse local, ele se introduc în formular şi sunt memorate în
variabilele care apar precizate acolo şi care sunt transmise apoi PHP-ului.
Putem să adăugăm script-ului un mesaj care să confirme preluarea datelor. Asta face parte din 'oferta' de bază a
PHP şi rămâne ca exerciţiu.
Scoaterea Datelor
Acum avem în baza de date cel puţ'in o înregistrare, dacă nu mai multe. Se pune problema cum vizualizăm,
cum scoatem aceste date folosind PHP. Cunoaşterea elementelor de programare din PHP este necesară,
recomandabilă fiind parcurgerea Mini-cursului de PHP înaintea acestuia.
Prima comandă la care vom apela este comanda SELECT din SQL, folosită într-o cerere MySQL în forma:
SELECT * FROM contacts
Aceasta este o comandă de bază din MySQL, care va spune script-ului să selecteze toate înregistrările din tabela
contacts. Dar, de data aceasta, comanda furnizează un rezultat, ea va trebui executată atribuin rezultatele unei
variabile:
$query="SELECT * FROM contacts";
$rezultat=mysql_query($query);
In acest caz, întregul conţinut al bazei de date va fi atribuit variabilei cu numele $rezultat (care va fi deci o
matrice, un tablou). Mai înainte de a putea scoate aceste date va trebui să le extragem ca variabile simple,
separate. Pentru asta trebuie să ştim câte înregistrări avem în tabelă (deci şi în variabila $rezultat ).
Numărarea liniilor
Avem o comandă specială în MySQL pentru calculul numărului de linii din tabelă. Este importantă pentru că în
baza de date se fac uzual numeroase actualizări, completări, ştergeri.
Liceul “George Călinescu”, Bucureşti 29
Prof. Costache Maria-Magdalena 2010-2011
$num=mysql_numrows($rezultat);
Astfel, variabila $num va căpăta ca valoare numărul de linii din $rezultat (adică tocmai din baza de date). Acest
număr va putea fi folosit în continuare pentru ciclul în care se vor analiza şi desface în variable separate
câmpurile fiecărei linii.
Construirea ciclului
Avem de scris un ciclu pentru a selecta din tabel (din rezultat) linie cu linie.... Definim un indice, o variabilă $i
care va parcurge (cu incrementare) valorile de la 1 la $num .
$i=0;
while ($i < $num) {
OPERATIILE ASUPRA LINIEI
++$i;
}
Acesta este un ciclu tipic în PHP şi va executa ansamblul numit OPERATIILE ASUPRA LINIEI de exact
$num ori, adică de atâtea ori cât trebuie. La fiecare reluare $i fiind mărit cu o unitate. Astfel $i poate fi folosit şi
pentru a preciza numărul liniei care se prelucrează.
Asocierea datelor la variabile
In partea pe care am numit-o OPERATIILE ASUPRA LINIEI trebuie să separăm fiecare câmp din linia -
înregistrare asociindu-l unei variabile. Folosim pentru asta următoarea secvenţă:
$variable=mysql_result($rezultat,$i,"numele_campului");
Astfel, pentru a extrage fiecare componentă din baza noastră de date, vom folosi următoarele instrucţiuni:
$nume=mysql_result($result,$i,"nume");
$prenume=mysql_result($result,$i,"prenume");
$telefon=mysql_result($result,$i,"telefon");
$mobil=mysql_result($result,$i,"mobil");
$fax=mysql_result($result,$i,"fax");
$email=mysql_result($result,$i,"email");
$web=mysql_result($result,$i,"web");
Nu ne-am ocupat aici de câmpul ID (deşi o puteam face) pentru că nu ne este necesar la afişare datelor.
Combinarea Script-ului
Acum putem scrie script-ul complet pentru scoaterea datelor. In acest script datele nu sunt formatate, adică vor
fi afişate toate cu acelaşi font, predefinit.
<?
$username="username";
$password="password";
$database="baza_noastra_de_date";
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Baza de date nu poate fi selectata");
$query="SELECT * FROM contacts";
$rezultat=mysql_query($query);
$num=mysql_numrows($rezultat);

mysql_close();
echo "<b><center>Database Output</center></b><br><br>";
$i=0;
while ($i < $num) {
$nume=mysql_result($rezultat,$i,"nume");
$prenume=mysql_result($result,$i,"prenume");
$telefon=mysql_result($result,$i,"telefon");
$mobil=mysql_result($result,$i,"mobil");
$fax=mysql_result($result,$i,"fax");
$email=mysql_result($result,$i,"email");
$web=mysql_result($result,$i,"web");
echo "<b>$nume $prenume</b><br>Telefon: $telefon<br>Mobil: $mobil<br>Fax: $fax<br>E-mail:
$email<br>Web: $web<br><hr><br>";
Liceul “George Călinescu”, Bucureşti 30
Prof. Costache Maria-Magdalena 2010-2011
++$i;
}
?>

Liceul “George Călinescu”, Bucureşti 31


Prof. Costache Maria-Magdalena 2010-2011
Partea 5-a: Introducere
Până acum am văzut cum creem o bază de date - tabelele din care este formată, cum inserăm informaţiile şi
cum afişăm datele din baza de date. In această lecţie vom vedea mai multe moduri de a afişa - scoate date din
baza de date.
Formatarea scoaterii
In ultima parte a lecţiei precedente am scos o listă cu toate persoanele înregistrate în baza de date. De fapt am
ajuns să avem definite variabilele care permit scoaterea sau afişarea, încheind cu o comandă destul de simplă de
afişare (echo) fără a o explica. Desigur, datele din tabel ar trebui prezentate pe ecran tot în forma unui tabel. Iar
asta nu-i prea complicat. In fond dacă ştim cum să afişăm (scoatem) fiecare variabilă în parte, atunci tot restul
privind formatarea, organizarea ca tabel, etc., este doar legat de cunoaşterea HTML.
Tot ce avem de făcut deci este să folosim PHP pentru scoaterile HTML incluzând variabilele în zonele corecte.
Cel mai simplu este să închidem tagul PHP şi să introducem liniile normale din HTML. Oridecâte ori ajungem
la o variabilă o vom include folosind o secvenţă de forma:
<? echo "$numele_variabilei"; ?>
Putem atunci să folosim un ciclu PHP pentru a repeta o secvenţă de cod ca cea de mai sus, la includerea
variabilelor într-un tablou. Spre exemplu, folosind secvenţa de cod din lecţia precedentă cu ciclul
corespunzător, putem formata scoaterile pentru ca să apară într-o tabelă mare:
<table border="0" cellspacing="2" cellpadding="2">
<tr>
<th><font face="Arial, Helvetica, sans-serif">Nume</font></th>
<th><font face="Arial, Helvetica, sans-serif">Telefon</font></th>
<th><font face="Arial, Helvetica, sans-serif">Mobil</font></th>
<th><font face="Arial, Helvetica, sans-serif">Fax</font></th>
<th><font face="Arial, Helvetica, sans-serif">E-mail</font></th>
<th><font face="Arial, Helvetica, sans-serif">Website</font></th>
</tr>
$i=0;
while ($i < $num) {
$nume=mysql_result($rezultat,$i,"nume");
$prenume=mysql_result($result,$i,"prenume");
$telefon=mysql_result($result,$i,"telefon");
$mobil=mysql_result($result,$i,"mobil");
$fax=mysql_result($result,$i,"fax");
$email=mysql_result($result,$i,"email");
$web=mysql_result($result,$i,"web");
?>
<tr>
<td><font face="Arial, Helvetica, sans-serif"><? echo "$nume $prenume"; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><? echo "$telefon"; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><? echo "$mobil"; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><? echo "$fax"; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><a href="mailto:<? echo "$email"; ?>">E-mail</a></font></td>
<td><font face="Arial, Helvetica, sans-serif"><a href="<? echo "$web"; ?>">Website</a></font></td>
</tr>
<?
++$i;
}
echo "</table>";
Această secvenţă va afişa antetul tabelului, apoi va adăuga o linie suplimentară pentru fiecare înregistrare din
baza de date, formatând datele la scoatere.
Dacă sunteţi deja familiarizaţi cu PHP şi HTML, atunci lucrurile sunt probabil destul de clare - de uşor de
înţeles. O să explicăm doar una din liniile din tabel, spre exemplu:
<a href="mailto:<? echo "$email"; ?>">E-mail</a>
Liceul “George Călinescu”, Bucureşti 32
Prof. Costache Maria-Magdalena 2010-2011
care construieşte o legătură email la adresa transmisă de variabila $email . Asta arată una dintre calităţile
importante şi utile ale folosirii PHP pentru includerea datelor MySQL . Adică prin astfel de scoateri putem face
paginile Web dinamice.
Selectarea unor date
La fel cu afişarea întregii baze de date, PHP poate fi folosit pentru a selecta date individuale, doar anumite
înregistrări, sau înregistrările care verifică anumite criterii. Pentru asta trebuie să folosim o variaţiune a cererii
SELECT . Pentru afişarea întregii tabele am folosit cererea:
SELECT * FROM contacts
Dacă vrem însă să selectăm doar pe acele persoane care au prenumele 'Mihai' vom folosi o cerere de forma:
SELECT * FROM contacts WHERE prenume='mihai'
Ca şi la alte cereri - comenzi SQL, avem de fapt propoziţii foarte apropiate de formularea curentă din limba
engleză. Intr-un mod asemănător vom putea selecta înregistrările pe baza oricărui câmp din baza de date. Dar se
poate selecta o înregistrare folosind mai multe câmpuri, adăugând în formularea cererii clauza:
field='value'
Fără a intra în prea multe detalii, vom mai spune că putem folosi variabilele pentru a transmite criteriul dorit
pentru selecţie. Spre exemplu, dacă dintr-un formular de căutare primim a variabilă numită $nume_cautat
putem imagina următoarea secvenţă:
$query="SELECT * FROM contacts WHERE nume='$nume_cautat'";
$result=mysql_query($query);
Reţineţi că la sfârşitul primei linii avem un ' urmat de " , înainte de ; .

Liceul “George Călinescu”, Bucureşti 33


Prof. Costache Maria-Magdalena 2010-2011
Partea 6-a: Introducere
In ultimele două lecţii am văzut cum extragem date din baza de date şi cum le afişăm pe ecran. Acum vom
ajunge la aspectele finale ale afişării datelor, prin selectarea elementelor dorite şi controlul erorilor (stoparea
mesajelor de eroare) atunci când scoatem date.
Interceptarea Erorilor
Prin scoaterea tuturor informaţiilor dintr-o bază de date, este puţin probabil să ajungem la situaţia când nu mai
sunt date. Dar dacă am permis ajustări şi, ştergeri şi actualizări ale înregistrărilor, atunci se prea poate să
ajungem la o eroare. Din fericire, cu PHP şi MySQL, avem un mod simplu de a evita o astfel de situaţie
folosind:
$num=mysql_numrows($rezultat);
unde $rezultat conţine rezultatul unei cereri - interogări a bazei de date ( precum selectarea tuturor
înregistrărilor). Aşa cum am discutat mai sus, aceasta va atribui variabilei $num numărul de linii din rezultat
(care s-a utilizat într-un ciclu, în lecţia a 4-a). Putem insera în ciclu o comandă de captare/tratare a erorilor
folosind o instrucţiune IF :
if ($num==0) {
echo "Baza de date nu conţine nici o înregistrare";
} else {
Output Loop
}
Putem dezvolta ramura asta făcând-o mai prietenoasă. Spre exemplu, oferind o legătură la pagina Add Data, de
introducere de informaţii în baza de date, atunci când ea este vidă.
Ordonarea datelor
Nu numai că putem scoate datele în funcţie de conţinutul unui câmp, dar putem ordona aceste date pe baza unei
reguli aplicată conţinutului unei coloane (spre exemplu aranjând utilizatorii în ordine alfabetică). In mod
normal, afişarea în urma unei interogări se face în ordinea stabilită de identificatorul ID, pornind de la 1 în sus.
Putem însă alege modul de ordonare (sortarea) după oricare coloană din tabel.
Spre exemplu, o ordonare utilă ar putea fi după numele de botez. Asta însemnând în ordine ascendentă
(crescătoare, de la A la Z şi de la 1 la 10...). Pentru a obţine un astfel de rezultat folosim următoarea cerere:
SELECT * FROM contacts ORDER BY prenume ASC
Putem folosi, desigur şi ordonarea descendentă, specificând DESC în locul lui ASC .
Alte variante cu mysql_numrows şi Sortare
Valoarea care i se atribuie (ca mai sus) variabilei $num este foarte importantă, nu numai pentru cicluri şi
captarea erorilor. Un exemplu poate fi scoaterea doar a ultimelor 5 înregistrări adăugate bazei de date. Mai
întâi, avem ordonarea naturală, stabilită de ID, (ultima înregistrare având valoarea maximă a ID), dar vom alege
ordinea descendentă.
Astfel vom avea înregistrările începând cu cea mai recentă şi terminând cu cea mai veche. Mai trebuie doar să
numărăm, afişând doar primele 5.
Desigur, înainte de a începe ciclul de cinci, trebuie să ne asigurăm că $num este mai mare decât 5 . Avem deci
o secvenţă de forma:
if ($num<5) {
$to=$num;
}else{
$to=5;
}
$i=0;
while ($i < $to) {
SECVENTA DE COMENZI mysql PENTRU SCOATERE
Cu alte cuvinte, dacă avem mai mult de cinci linii în tabel atunci ciclul se va face de la 0 la 5. In caz contrar,
dacă sunt mai puţin de 5 linii, ciclul va parcurge exact numărul respectiv de linii.
Câmpul ID
Atunci când, în primele lecţii am creat baza de date (cartea de adrese), am inclus un câmp numeric numit id. Pe
care l-am stabilit ca auto_increment şi i-am dat rolul de câmp primar. Am discutat cum acesta are rolul de

Liceul “George Călinescu”, Bucureşti 34


Prof. Costache Maria-Magdalena 2010-2011
identificator unic pentru fiecare înregistrare din baza de date. Acum facem un pas înainte, folosind acest câmp
pentru a selecta anumite înregistrări din baza de date.
Selecţia unei singure înregistrări
Iată cum putem selecta înregistrări din baza de date folosind conţinutul unui câmp particular:
SELECT * FROM contacts WHERE field='value'
Atunci, folosind unicitatea câmpului ID putem selecta orice înregistrare din baza de date, folosind:
SELECT * FROM contacts WHERE id='$id'
unde $id este o variabilă conţinând numărul unei înregistrări. Spre exemplu, dacă dorim să avem o pagină Web
generată dinamic dintr-o bază de date cu un singur script PHP, putem scrie script-ul ca să includă pagini Web
distincte ca înregistrări ale bazei de date. Atunci, folosind câmpul id, putem selecta fiecare pagină individuală
plasând-o la soatere. Putem chiar folosi chiar URL-ul paginii pentru a specifica înregistrarea dorită
http://www.centrul_propriu.ro/stiri/items.php?item=5476
Iar script-ul PHP să caute înregistrarea care are numărul de ordine (id-ul) care corespunde valorii variabilei
$item, care în acest caz este 5476
Legături la o singură înregistrare
Folosind această metodă de alegere a înregistrării folosind URL-ul, înregistrarea poate fi extinsă prin generarea
dinamică a URL-ului. Pare cam complicat. Vom vedea cum realizăm o pagină de aducere la zi a bazei de date
cu adresele. Cu ideea ca utilizatorul să-şi poată modifica propriile detalii din înregistrare.
Pentru asta, vom include o nouă coloană cuprinzând o legătură Update . Această legătură conducând la o pagină
care să permită utilizatorului să actualizeze înregistrarea. Pentru a selecta înregistrarea din acea pagină vom
pune:
?id=$id
Căpătând identificatorul id al înregistrării, secvenţa aceasta va crea o legătură la fiecare din înregistrări.

Liceul “George Călinescu”, Bucureşti 35


Prof. Costache Maria-Magdalena 2010-2011
Partea 7-a: Introducere
Până acum am învăţat cum să punem informaţiile în baza de date MySQL, cum să vedem aceste informaţii din
baza de date, selectând care din ele vrem să le vedem. In această lecţie vom vedea cum facem cele două acţiuni
finale, actualizarea bazei de date şi ştergerea unor înregistrări din ea.
Script-ul de actualizare
Am văzut în lecţia anterioară cum creem o legătură pentru fiecare înregistrare pentru a ne poziţiona în scriptul
de actualizare. Prin folosirea variabilei $id , legăturile respective pot transmite valoarea corecta a
identificatorului ID către script, astfel ca acesta să poată actualiza baza de date. Vom realiza deci un script de
actualizare, care va avea două părţi:
Pagina de afişare a actualizării
Prima parte a script-ului de actualizare foloseşte procedeul de selecţie a unei singure înregistrări, aşa cum l-am
scris în lecţia precedentă, adăugând doar câteva elemente HTML pentru a-l face mai util. Mai întâi, ne
connectăm la baza de date şi selectăm înregistrarea potrivită.
$id=$_GET['id'];
$username="nume_utilizator";
$password="parola";
$database="baza_de_date";
mysql_connect(localhost,$username,$password);
$query=" SELECT * FROM contacts WHERE id='$id'";
$result=mysql_query($query);
$num=mysql_numrows($rezultat);
mysql_close();
$i=0;
while ($i < $num) {
$nume=mysql_result($rezultat,$i,"nume");
$prenume=mysql_result($rezultat,$i,"prenume");
$telefon=mysql_result($rezultat,$i,"telefon");
$mobil=mysql_result($rezultat,$i,"mobil");
$fax=mysql_result($rezultat,$i,"fax");
$email=mysql_result($rezultat,$i,"email");
$web=mysql_result($rezultat,$i,"web");
Zona de cod suplimentar
++$i;
}
Unde 'Zona de cod suplimentar' marchează porţiunea din script unde vor apare comenzile de actualizare. Adică
formatarea HTML pentru scoatere:
<form action="updated.php" method="post">
<input type="hidden" name="ud_id" value="<? echo "$id"; ?>">
Numele de Familie: <input type="text" value="ud_first" value="<? echo "$nume"?>"><br>
Numele de Botez: <input type="text" value="ud_last" value="<? echo "$prenume"?>"><br>
Numărul de Telefon: <input type="text" value="ud_phone" value="<? echo "$telefon"?>"><br>
Numărul de Mobil: <input type="text" value="ud_mobile" value="<? echo "$mobil"?>"><br>
Numărul de Fax: <input type="text" value="ud_fax" value="<? echo "$fax"?>"><br>
Adresa E-mail: <input type="text" value="ud_email" value="<? echo "$email"?>"><br>
Adresa Web: <input type="text" value="ud_web" value="<? echo "$web"?>"><br>
<input type="Submit" value="Update">
</form>
Aşa cum se poate vedea, această secvenţă construieşte (scoate) un formular standard, dar în locul zonelor goale,
aşa cum apăreau în formularul pentru introducerea datelor, de data asta avem conţinutul câmpului respectiv din
înregistrarea în cauză (care-i de actualizat). Asta îl face mai adaptat scopului, mai comod de folosit.
Actualizarea bazei de date
Tot ce mai avem de făcut este actualizarea efectivă a bazei de date. Asta este o operaţie simplă care implică o
nouă cerere pentru baza de date:
Liceul “George Călinescu”, Bucureşti 36
Prof. Costache Maria-Magdalena 2010-2011
$query = "UPDATE contacts SET nume = '$ud_first',prenume = '$ud_last',telefon = '$ud_phone',mobil =
'$ud_mobile',fax = '$ud_fax',email = '$ud_email',web = '$ud_web' WHERE id = '$ud_id'";
Această cerere spune sistemului de gestiune de baze de date să actualizeze tabela contacts în acele linii în care
ID coincide cu valoarea din $ud_id (care, aşa cum se poate vedea din formularul anterior, a primit valoarea id a
înregistrării pe care o actualizăm), modificând următoarele câmpuri cu valorile specificate (care au fost
introduse cu ajutorul formularului).
Această cerere poate fi înglobată într-un script simplu:
$ud_id=$_POST['ud_id'];
$ud_first=$_POST['ud_first'];
$ud_last=$_POST['ud_last'];
$ud_phone=$_POST['ud_phone'];
$ud_mobile=$_POST['ud_mobile'];
$ud_fax=$_POST['ud_fax'];
$ud_email=$_POST['ud_email'];
$ud_web=$_POST['ud_web'];
$username="nume_utilizator";
$password="parola";
$database="baza_de_date";
mysql_connect(localhost,$username,$password);
$query="UPDATE contacts WHERE id='$ud_id' SET first='$ud_first' last='$ud_last' phone='$ud_phone'
mobile='$ud_mobile'
fax='$ud_fax' email='$ud_email' web='$ud_web'";
mysql_query($query);
echo "Actualizarea s-a făcut";
mysql_close();
Asta va actualiza baza de date transmiţând şi o confirmare utilizatorului.
Stergerea înregistrărilor
Ultima parte a acestei lecţii priveşte modul cum ştergem o înregistrare dim baza de date. Ca şi cu pagina de
actualizare, vom construi o pagină pentru a şterge una sau mai multe linii din baza de date. Trebuie să-i
transmitem poziţia (ID-ul) înregistrării, printr-un URL, spre exemplu:
delete.php?id=9
Scriptul care va face asta, numit delete.php, este aproape identic cu cel de actualizare a bazei de date, cu
excepţia comenzii MySQL (modului în care este construită cererea). In locul comenzii SQL UPDATE , vom
folosi:
DELETE FROM contacts WHERE id='$id'
Ciclurile
La acest punct este momentul să menţionăm şi un alt mod de folosire a ciclurilor cu o bază de date. Putem
folosi un ciclu pentru a executa un şir de cereri. Spre exemplu, dacă trebuie să schimbăm - extragem toate
înregistrările dintr-o bază de date în care apare ca prenume Serban pentru a realiza un Website www.serban.ro:
Partea Standard de Conectare la Baza de Date
$query=" SELECT * FROM contacts WHERE prenume='Serban'";
$rezultat=mysql_query($query);
$num=mysql_numrows($rezultat);

$i=0;
while ($i < $num) {
$id=mysql_result($rezultat,$i,"id");
$query1="UPDATE contacts SET web='http://www.serban.ro' WHERE id='$id'";
mysql_query($query);
++$i;
}
mysql_close();

Liceul “George Călinescu”, Bucureşti 37


Prof. Costache Maria-Magdalena 2010-2011
Partea 8-a: Introducere
Pe parcursul acestui curs am văzut cum să folosim PHP-ul pentru a interacţiona cu un sistem de baze de date
MySQL (sau SQL) şi cum să folosim comenzile uzuale (cele mai necesare). Am exemplificat, cu modul de
realizare a unei baze de date de tip carte de adrese (ca sistem de management a contactelor ?). In această lecţie
finală, vom vedea câteva "trucuri" MySQL şi vom scrie versiunea definitivă (finală) a script-ului construit pe
parcursul acestui curs.
Pentru economia de timp
Atunci când construim un script complex folosind bazele de date, apare des secvenţa de conectare la baza de
date. De aceea, pentru a simplifica lucrurile, se poate fie să creem un fişier cu numele de utilizator şi parola sau
chiar un fişier de conectare. Spre exemplu, un fişier "username/password" poate fi construit cu numele:
dbinfo.inc.php
cuprinzând în el:
<?
$username="numele_de_utilizator_al_bazei_de_date";
$password="parola";
$database="nume_baza_de_date";
?>
In care precizăm datele concrete potrivite (numele_de_utilizator_al_bazei_de_date, parola,
nume_baza_de_date). Atunci în fişierele php vom folosi, chiar la început, următoarea secvenţă, care va include
scriptul de mai sus:
include("dbinfo.inc.php");
sau, atunci când acesta se află în alt director:
include("/[traseul complet]/dbinfo.inc.php");
Atunci, vom putea folosi în continuare variabilele $username, $password şi $database în script-ul nostru, fără a
avea nevoie să le definim de fiecare dată. De asemeni, dacă vom modifica cândva aceste informaţii, spre
exemplu trecând pe alt server web, tot ce va fi de schimbat va fi în acest unic fişier.
Aceeaşi schemă o putem folosi pentru conectarea la baza de date, plasând şi comanda de conectare în fişier.
Atunci va trebui, însă, să ne asigurăm de închiderea conexiunii, pentru a nu avea probleme cu serverul MySQL.
Căutarea
Se poate realiza şi o căutare limitată în baza de date folosind funcţia specială din MySQL. Adică prin folosirea
funcţiei LIKE , în forma:
SELECT * FROM nume_tabela WHERE nume_camp LIKE '%$string%'
Asta însemnă că LIKE va spune bazei de date să folosească posibilităţile proprii de căutare. Semnele % au
semnificaţia că orice alte date pot să apară în poziţia lor şi variabila $string va conţine cererea de căutare. Adică
putem avea acolo un cuvânt, sau un număr, spre exemplu:
LIKE '%pian%'
ceea ce va conduce la scoaterea liniilor care includ cuvântul pian în câmpul specificat.
Similar, putem renunţa la unul din semnele % astfel ca să precizăm poziţia şirului de caractere:
LIKE 'pian%'
Astfel vom putea selecta doar liniile în care câmpul specificat începe cu prefixul pian, caz în care, spre
exemplu, expresia următoare va fi evitată:
Un pian se află pe scenă.
Finalizarea Script-ului
Pe parcursul acestui mini-curs am prezentat diferite porţiuni de cod ale script-ului pentru construcţia
bazei de date contacts. Puteţi descărca script-ul complet ca un fişier comprimat zip, pentru a examina
întreaga aplicaţie (vezi legăturile).
Concluzii
Acum, încheind acest curs, ar trebui să ştiţi să folosiţi PHP şi MySQL împreună pentru a crea o bază de
date - accesibilă pe Web, precum şi pentru a scrie programe de acces la baza de date. Folosirea bazelor
de date pe Web deschide noi şi mari posibilităţi de lucru în Internet şi poate face mult mai puternic un
centru Web, economisind timpul de actualizare, permiţând utilizatorilor să interacţioneze (să răspundă)
şi multe altele. www_RegieLive_ro_CURS_PHP.zip

Liceul “George Călinescu”, Bucureşti 38


Prof. Costache Maria-Magdalena 2010-2011

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