Sunteți pe pagina 1din 19

Cap 2.1.1. Inserarea codului PHP intr-o pagina HTML.

Taguri PHP

Scripturile PHP sunt destinate generarii dinamice de continut in paginile de Web. De aici rezulta
faptul ca un astfel de script trebuie inclus intr-o pagina HTML. In acest scop pot fi folosite mai
multe tipuri de tag-uri HTML dupa cum urmeaza:

• stilul "scurt":

<? echo "<H1>Text generat dinamic din PHP</H1?>"; ?>

Avantajul acestui stil este simplitatea. De aici rezulta o visteza mai mare de scriere a
codului.

• stilul XML:

<?php echo "<H1>Text generat dinamic din PHP</H1?>"; ?>

Acest stil este compatibil cu documente conforme cu standardul XML (Extensible Markup
Language). Datorita raspandirii in continua crestere a acestui standard in continuare se
va prefera acest stil.

• stilul SCRIPT:

<SCRIPT LANGUAGE='php'> echo "<H1>Text generat dinamic din PHP</H1?>";


</SCRIPT>

Acest stil este destinat celor obisnuiti cu scrierea de cod JavaScript sau VBScript. Este util
daca se foloseste un editor HTML care are probleme cu alte stiluri de tag-uri.

• stilul ASP:

<% echo "<H1>Text generat dinamic din PHP</H1?>"; %>

Acest stil este similar cu cel folosit la ASP (Active Server Pages). Este util daca se
foloseste un editor HTML care genereaza cod ASP.

Texul care apare intre tagul de inceput si cel de incheiere (indiferent de stil) va fi interpretat ca
script PHP. Textul care apare in afara acestor taguri va fi tratat ca si cod HTML obisnuit.

Cap 2.1.2. Generarea dinamica de continut HTML

Codul PHP nu va fi vizibil in sursa trimisa de serverul Web catre navigatorul clientului. Acest cod
va fi interpretat de catre modulul PHP din server si doar textul generat de acest script va fi
trimis mai departe de catre server.

La scrierea codului, instructiunile PHP din script vor fi terminate printr-un separator punct si
virgula ';' asemanator celor din limbajul C, C++ sau Java. Omiterea acestul separator va genera
o eroare de sintaxa.

Interpretorul de PHP va ingnora in schimb spatiile dintre instructiuni sau dintre elementele unei
instructiuni. Spre exemplu, secventele:

<?php echo "Hello"; echo "world !"; ?>

mircea.neamtu@ulbsibiu.ro.
si

<?php echo "Hello";


echo "world !" ;?>

vor genera acelasi rezultat.

Pentru claritatea codului se obisnuieste sa se adauge comentarii in care sa se explice rolul liniilor
respective. Interpretorul de PHP va ignora textul din comentarii, el avand doar rolul de a ajuta
programatorul in dezvoltarea codului respectiv. Comentariile pot si adaugate in trei moduri:

• stilul C: Comentariul se poate intinde pe mai multe linii si este cuprins intre semnele '/*'
si '*/'. El se poate insera chiar si in mijlocul unei expresii dar nu poate fi imbricat in alt
comentariu.
• stilul C++: Comentariul se intinde pe o singura linie, de la aparitia semnului '//' pana la
sfarsitul liniei curente.
• stilul Shell: Comentariul se intinde pe o singura linie, de la aparitia semnului '#' pana la
sfarsitul liniei curente.

Pentru a exemplifica generarea dinamica de continut se va utiliza functia date() pentru a afisa
data si ora la care a fost interpretat scriptul pe server:

Creati fisierul a2121.php cu urmatorul continut:

<HTML>
<HEAD>
<TITLE>Activitate 1.</TITLE>
</HEAD>
<BODY>
<H2>Exemplu de generare dinamica de cod.</H1><P>
Linia urmatoare este generata de PHP:<P>
Activitate 1 <?php
echo "Data curenta pe server: ";
echo date("H:i, jS F"); // se obtine data si ora curenta cu ajutorul functiei date()
echo "<BR>";
?>
</BODY>
</HTML>

Incarcati fisirul direct in navigator (prin File/Open) si apoi copiati fisierul in directorul htdocs al
serverului de Web si incarcati adresa http://localhost/a2121.php

Cap 2.1.3. Tipuri de date. Conversii de tip

Limbajul PHP suporta urmatoarele tipuri de date:

• Integer - utilizat pentru numere intregi


• Double - utilizat pentru numere reale
• String - utilizat pentru siruri de caractere
• Array - utilizat pentru a stoca date multile de acelasi tip
• Object - utilizat pentru a retine obiecte - instante ale claselor

In plus, PHP suporta si tipurile pdfdoc respectiv pdfinfo pentru a asigura suport pentru PDF
(standardul Portable Document Format).

PHP este un limbaj slab tipizat. In limbajele puternic tipizate, o variabila poate retine un singur
tip de date pe toata durata sa de viata, tip asignat la declararea acelei variabile. In PHP

mircea.neamtu@ulbsibiu.ro.
varibilele nu trebuie declarate explicit (ele sunt considerate ca fiind declarate implicit la prima lor
utilizare in cod), iar tipul de date asignat este determinat de valoarea retinuta in acel moment.
Urmatoarele linii de cod sunt corecte in PHP (numele variabilelor PHP sunt prefixate de semnul
$):

$var1 = 1;
$var1 = "sirul 1";

Tipul datelor extrase din variabile poate fi schimbat fortat (casting sau conversie de tip) in
expresiile unde acestea intervin. Acest lucru se face prin precizarea noului tip intre paranteze
rotunde in fata variabilei respective:

$var1 = 1;
$var2 = (double)$var1 + 3.52;

Conversia de tip nu afecteaza tipul real al varibilei.

Cap 2.1.4. Identificatori. Constante

Identificatorii sunt cuvinte care denota entitati intr-un program. Exemple de identificatori sunt:
numele de variabile, de functii sau de clase. In PHP identificatorii trebuie sa respecte
urmatoarele reguli:

• Identificatorii pot fi de orice lungime si pot fi formati din litere, cifre, liniuta de subliniere
sau semnul dolar.
• Identificatorii nu pot incepe cu o cifra.
• Identificatorii sunt de tip "case sensitive" (tin cont de litere mici-mari). Spre exemplu,
$numepers este diferit de $numePers. Singurii identificatori care nu respecta aceasta
regula sunt cei care denota nume de functii PHP predefinite.

PHP permite folosirea a doua tipuri de constante.

Constantele de tip valoare sunt precizate direct in expresii dependent de tipul lor:

• constantele intregi: 0, 100, -1320


• constantele de tip double: 0.00, 3.1523, -4.5
• constantele de tip sir de caractere: "sir1", 'sir2', 'sir cu "gilimele"! ', "sir cu 'apostrof'! "

Constantele cu nume se aseamana cu varibilele, dar valoarea lor nu poate fi schimbata de-a
lungul programului. Pentru a face codul scris mai lizibil se obisnuieste ca numele varibilelor sa
fie scrise in intregime cu litere mari. O diferenta notabila fata de variabile este aceia ca numele
acestora nu sunt precedate de semnul $. Declararea cosntantelor se face cu ajutorul cuvantului
cheie define.

...
define("PI",3.14);
$unUnghi = PI;
$altUnghi = 2*PI;

Cap 2.1.5. Variabile utilizator. Variabile referinta. Domeniu de valabilitate

Variabilele sunt locatii de memorie desemnate printr-un identificator care incepe cu semnul $.
Ele permit memorarea valorilor de diverse tipuri. Tipul unei variabile PHP poate fi modifcat in
momentul cand i se asigneaza o valoare. Declararea variabilelor utilizator nu trebuie facuta
explicit. O variabila se considera declarata implicit prima data cand este folosita.

mircea.neamtu@ulbsibiu.ro.
Pentru a asigna o valoare unei variabile se va folosi operatorul = sub forma $variabila =
expresie. Daca $variabila nu exista ea va fi creata in prealabil apoi i se va asigna valoarea
expresiei.

Varibilele referinta permit schimbarea numelui unei variabile in mod dinamic. Acest lucru se face
prin utilizarea valorii unei varibile pe post de nume de variabila. Indirectarea se realizeaza prin
utilizarea marcajului dolar '$' in fata numelui variabilei referinta, ca si in exemplul urmator:

$var1 = 5;
$var2 = "var1";
echo "Valoarea din var1 este ";
echo $var1;
echo " sau ";
echo $$var2;

In acest exemplu notatia $$var2 a fost folosita pentru a desemna valoarea retinuta de varibila
$var1.

Prin domeniul de valabilitate a unei variabile se intelege locurile in care o variabila poate fi
folosita (este vizibila) dupa ce a fost creata. Domeniile definite de PHP sunt urmatoarele:

• Global - varibilele globale, definite in afara functiilor sunt vizibile in tot fisierul curent, mai
putin in interiorul functiilor.
• Locale unei functii - variabilele create in functii sunt vizibile doar in interiorul acestora.
• Globale in interiorul unei functii - acest tip de varibile sunt folosite pentru a accesa
variabilele globale cu acelasi nume.

Cap 2.1.6. Accesarea variabilelor din form-uri HTML

Principalul mecanism de colectare a datelor de la utilizatori prin intermediul unui site Web il
reprezinta formularele HTML (HTML forms). Din acest motiv, limbajul PHP pune accent pe
facilitarea accesului la aceste date.

Un formular HTML cuprinde campuri in care utilizatorul (cel care acceseaza pagina) poate
introduce date. Pentru procesarea acestor date formularul defineste o actiune numita submit
(trimitere), care corespunde de obicei apasarii unui buton cu acelasi titlu. Rezultatul acestei
actiuni este accesarea unei alte pagini (pagina tinta - target) care va primi automat valorile
completate in campurile formularului si le va prelucra. In cadrul subiectului prezentat, paginile
tinta ale formularelor vor fi fisiere PHP, paginile cuprinzand formularele putand fi fisiere PHP sau
HTML.

Mai multe informatii despre formulare HTML se pot obtine la adresa


http://www.w3.org/MarkUp/.

In PHP datele dintr-un formular HTML pot fi accesate prin doua metode.

Prima metoda, mai simpla dar mai inceata si mai nesigura, consta in folosirea varibilelor
inregistrate global. In acest fel numele campurilor dintr-un formular HTML devin automat
varibile PHP, cu valori setate corespunzator, in pagina tinta a formularului. Transmiterea se face
asemanator cu transmiterea parametrilor spre functii. Pentru a putea folosi aceasta metoda
trebuie ca fisierul de configurare php.ini sa aiba setarea register_globals pe valoarea "On".

A doua metoda presupune obtinerea valorilor din doua tablouri create automat si denumite
$HTTP_POST_VARS, respectiv $HTTP_GET_VARS corespunzator metodei de trimitere din
formular spre server (post sau get). Indicele de acces in tablou va fi chiar numele campului dorit
din formular.

mircea.neamtu@ulbsibiu.ro.
Din motive de claritate in general se utilizeaza prima metoda. In schimb, in scripturile
profesionale, unde viteza si securitatea sunt determinante, a doua metoda este de preferat.

Creati fisierul a2161.html cu urmatorul continut:

<HTML>
<HEAD>
<TITLE>Activitate 2 (form)</TITLE>
</HEAD>
<BODY>
<FORM name="primulForm" method="post" action="a2162.php">
<P>Date personale
<P>Nume <INPUT type="text" name="numePers" size="36"
maxlength="36"><BR>
Prenume <INPUT type="text" name="prenumePers" size="36"
maxlength="36"><BR>
Mijlocul de transport preferat
<SELECT name="transport">
<OPTION>Masina</OPTION>
<OPTION>Trenul</OPTION>
<OPTION>Avionul</OPTION>
<OPTION>Vaporul</OPTION>
</SELECT>
<P> <INPUT type="submit" name="trimit" value="Submit">
<INPUT type="reset" name="sterg" value="Reset">
</FORM>
</BODY>
Activitate 2 </HTML>

Creati fisierul a2162.php cu urmatorul continut:

<HTML>
<HEAD>
<TITLE>Activitate 2 (procesare)</TITLE>
</HEAD>
<BODY>
<H1>Prelucrare date din formularul a261.html</H1>
<HR>
<?php
echo "Nume persoana: ".$numePers."<BR>";
echo "Prenume persoana: ".$prenumePers."<BR>";
echo "Mijloc de transport preferat: ".$transport."<BR>";
$nume=$numePers." ".$prenumePers;
echo $nume." prefera sa calatoreasca cu ".$transport."."."<BR>";
?>
<HR>
</BODY>
</HTML>

Copiati fisierele in directorul htdocs al serverului de Web si incarcati adresa


http://localhost/a2161.html. Completati formularul si apasati apoi butonul Submit.

Cap 2.1.7. Tema 2.a

A) Efectuati cele doua activitati prezentate pe parcursul acestui capitol.

mircea.neamtu@ulbsibiu.ro.
B) Creati un formular HTML tip sondaj de opinie intr-un domeniu ales de dumneavoastra. Scrieti apoi un fisier PHP care
sa prelucreze acest formular afisind datele personale si optiunile marcate. Raspunsul la aceasta tema va consta in numele
celor doua fisiere si observatiile referitoare la problemele intampinate

Cap 2.2.1. Operatori

Operatorii sunt simboluri care pot fi utilizate pentru a efectua operatii asupra unor varibile si
constante de diverse tipuri. Entitatile asupra carora se aplica un operator se numesc operanzi.
Un operator poate avea unul, doi sau chiar trei operanzi. Majoritatea operatorilor sunt binari (au
doi operanzi). In general operatorii sunt clasificati functie de tipul datelor asupra carora
actioneaza.

Cap 2.2.1.1. Operatori aritmetici

Operatorii aritmetici provin din matematica si actioneaza asupra datelor de tip numeric.

Acestia sunt:

Operator Denumire Exemplu


+ adunare $a + $b
- scadere $a - $b
* inmultire $a * $b
/ impartire $a / $b
% modulo $a % $b
++ incrementare - post $a++
++ incrementare - pre ++$a
-- decrementare - post $a--
-- decrementare - pre --$a

Operatorul % (modulo) are ca si rezultat restul impartirii numerelor transmise.

Operatorii de incrementare/decrementare sunt operatori unari care au ca rezultat


cresterea/descresterea cu o unitate a varibilei operand asupra careia se aplica. Operatorii post
se aplica dupa ce valoarea este evaluata in expresia din care face parte iar operatorii pre se
aplica inainte de evaluarea expresiei. Ex:

$a = 5;
$b = $a++; // b = 5, a = 6
$c = ++$a; // c = 7, a = 7
$d = 4 + --$a; // d = 10, a = 6
$e = 4 + --$c; // e = 11, c = 6

Daca operatorii aritmetici se aplica asupra unor valori de tip string, PHP va incerca conversia
acestora in numere. Daca conversia nu reuseste, sirurile sunt convertite la valoarea 0.

Activitate 1 Creati fisierul a2211.php cu urmatorul continut:

<HTML>
<HEAD>
<TITLE>Activitate 2.2.1.1.</TITLE>
</HEAD>
<BODY>
<H2>Operatori aritmetici.</H1><P>
<?php
mircea.neamtu@ulbsibiu.ro.
$a = 3;
$b = 11;
$c = 4.7;
echo "a = "; echo $a; echo "<BR>";
echo " b = "; echo $b; echo "<BR>";
echo " c = "; echo $c; echo "<BR>";
echo "a - b = "; echo $a - $b; echo "<BR>";
echo "a * c = "; echo $a * $c; echo "<BR>";
echo "b % a = "; echo $b % $a; echo "<BR>";
echo "b % c = "; echo $b % $c; echo "<BR>";
echo "b + --a= "; echo $b + --$a; echo "<BR>";
echo "a / 0 = "; echo $a / 0; echo "<BR>";
?>
</BODY>
</HTML>

Copiati fisierul in directorul htdocs al serverului de Web si incarcati adresa http://localhost/a2211.php

Cap 2.2.1.2. Operatori pe siruri de caractere

In PHP exista un singur operator pe siruri de caractere, restul operatiilor fiind efectuate prin
intermediul unor functii din biblioteca standard a limbajului. Acest operator este operatorul de
concatenare - punct '.'.

$s1 = "Sirul 1";


$s2 = "Sirul 2";
$s3 = $s1."-".$s2; // s3 = "Sirul 1-Sirul 2"

Cap 2.2.1.3. Operatori de asignare

Operatorii de asignare permit atribuirea de valori varibilelor. Cel mai simplu operator este
operatorul '='. El are doi operanzi: o variabila in partea stanga si o expresie in partea dreapta.
Valoarea expresiei este evaluata apoi atribuita variabilei din partea stanga si, in final, returnata
de operator. Deoarece = nu este o intructiune PHP ci un operator, el poate intra in expresii
complexe de genul:

$a = $b = 4 + ($c = 3); // a = 7, b = 7, c=3

In plus fata de operatorul de asignare simplu, PHP pune la dispozitia programatorilor si operatori
de asignare combinati:

Operator Utilizare Echivalent cu


+= $a += $b $a = $a + $b
-= $a -= $b $a = $a - $b
*= $a *= $b $a = $a * $b
/= $a /= $b $a = $a / $b
%= $a %= $b $a = $a % $b
.= $s1 .= $s2 $s1 = $s1 . $s2

Cap 2.2.1.4. Operatori de referire

Varsiunea PHP 4 a introdus un nou operator si anume operatorul de referire '&'. El este un
operator unar, avand ca operand o variabila si permite legarea unui nume de variabila de zona
de memorie a varaibilei operand. Spre exemplu se considera secventa:
mircea.neamtu@ulbsibiu.ro.
$a = 3;
$b = $a; // a = 3, b = 3
$b = 5; // a = 3, b = 5

In urma acestei secvente vor exista doua variabile independente $a si $b. Modificarea ulterioara
a valorii lui $b nu afecteaza valoarea retinuta de $a. Daca, in schimb, consideram secventa:

$a = 3;
$b = &$a; // a = 3, b = 3
$b = 5; // a = 5, b = 5

Se va observa ca $b nu este o varibila independenta ci este un nou nume pentru variabila $a


(ambele vor indica spre aceiasi zona de memorie). Orice modificare a valorii lui $b va afecta in
aceiasi masura si valoarea lui $a.

Cap 2.2.1.5. Operatori de comparare

Operatorii de comparare sunt operatori binari care au ca si scop compararea valorilor


operanzilor. Rezultatul acestor operatori este unul logic, avand valoarea true (adevarat) sau
flase (fals).

Acestia sunt:

Operator Denumire Exemplu


== egalitate $a == $b
=== test de identitate $a === $b
!= inegalitate $a != $b
<> inegalitate $a <> $b
< mai mic $a < $b
> mai mare $a > $b
<= mai mic egal $a <= $b
>= mai mare egal $a >= $b

Daca operanzii nu sunt de acelasi tip se va incerca conversia operanzilor pentru a deveni
compatibili si apoi se va face comparatia. In cazul operatorului test de identitate '===' operanzii
nu sunt considerati egali daca nu au acelasi tip.

Cap 2.2.1.6. Operatori logici

Operatorii logici sunt utilizati pentru a combina valori logici in expresii.

Acestia sunt:

Operator Denumire Rezultat


! negare !$a neaga valoarea logica a lui $a
&& si logic $a && $b intoarce adevarat doar daca ambele valori $a si $b sunt adevarate
and si logic $a and $b intoarce adevarat doar daca ambele valori $a si $b sunt adevarate
|| sau logic $a || $b intoarce adevarat daca cel putin una dintre valorile lui $a sau $b este adevarata
or sau logic $a or $b intoarce adevarat daca cel putin una dintre valorile lui $a sau $b este adevarata
xor sau exclusiv $a xor $b intoarce adevarat daca $a si $b au valori logice diferite

Cap 2.2.1.7. Operatori pe biti

Operatorii pe biti ajuta la prelucrarea numerelor intregi considerate ca siruri de biti.


mircea.neamtu@ulbsibiu.ro.
Acestia sunt:

Operator Denumire Rezultat


~ negare pe biti ~$a inverseaza valorilor tuturor bitilor lui $a
& si pe biti $a &$b doar biti pe 1 in $a si $b simultan sunt setati pe 1 in rezultat
| sau pe biti $a | $b biti pe 1 in $a sau $b sunt setati pe 1 in rezultat
^ sau exclusiv pe biti $a ^ $b bitii setati in $a sau $b dar nu in ambele sunt setati pe 1 in rezultat
<< deplasare stanga $a << $b deplaseaza bitii din $a la stanga cu $b pozitii
>> deplasare dreapta $a >>$b deplaseaza bitii din $a la dreapta cu $b pozitii

Cap 2.2.1.8. Operatori aditionali

Operatorii prezentati in acest subcapitol sunt: operatorul conditional, operatorul de suprimare a


erorilor si operatorul de executie.

Operatorul conditional are sintaxa:

conditie ? valoare_adevarata : valoare_falsa

Operatorul evalueaza mai intai expresia logica din conditie. Daca conditia este adevarata va
intoarce expresia valoare_adevarata iar in caz contrar valoare_falsa.

Exemplu: echo ($varsta < 18) ? "adolescent" : "matur";

Operatorul de suprimare a erorilor '@' are sintaxa:

@(expresie)

El are rolul de a suprima erorile si avertismentele generate de expresia operand.

Exemplu:

$a = ($b / 0); // genereaza avertisment de impartire la zero


$a = @($b / 0 ); // nu genereaza avertisment

In cel de al doilea caz, valoarea lui $a va fi setata pe valoare vida ( convertita la 0 ca intreg).

Operatorul de executie poate fi folosit pentru a executa o comanda pe interpretorul de


comenzi al serverului.

El consta in doua apostroafe inverse '`'intre care este plasata comanda de executat. Exemplu
`ls -al`.

Operatorul de executie actioneaza doar daca optiunea safe_mode din php.ini este dezactivata
(Off). In general acest operator nu se foloseste datorita breselor de securitate pe care le
deschide pe server.

Cap 2.2.2. Expresii

O definitie simpla a expresiilor PHP este urmatoarea: "expresie = orice are o valoare". Cea mai
mare parte a unui program PHP consta in expresii. Expresiile combina operanzi si operatori de
diverse tipuri: constante, variabile sau nume de functii.

mircea.neamtu@ulbsibiu.ro.
La evaluarea expresiilor operatorii se vor aplica intr-o ordine prestabilita, data de "precedenta"
lor. Tabelul urmator prezinta operatorii in ordinea inversa a precedenteiv lor (in fata sunt cei mai
putin prioritari).

Precedenta Asociativitate Operator


1 stanga ,
2 stanga or
3 stanga xor
4 stanga and
5 stanga = += -= *= /= .= %=
6 stanga ?:
7 stanga ||
8 stanga &&
9 stanga |
10 stanga ^
11 stanga &
12 - == != ===
13 - < > <= >=
14 stanga << >>
15 stanga +-.
16 stanga */%
17 dreapta ! ~ ++ -- @
18 dreapta []
19 - new
20 - ()

O atentie deosebita trebuie acordata sirurilor de caractere intre ghilimele " ". La evaluarea
expresiei in care acestea apar, toate numele de variabile care apar in interiorul lor sunt inlocuite
cu valorile corespunzatoare. Exemplu:

$nume = "Vasile";
$sir1 = "Domnul $nume are masina rosie!";
$sir2 = 'Domnul $nume are masina rosie!';
echo $sir1; // afiseaza Domnul Vasile are masina rosie!
echo $sir2; // afiseaza Domnul $nume are masina rosie!

Activitate 2 Creati fisierul a2221.php cu urmatorul continut:

<HTML>
<HEAD>
<TITLE>Activitate 2.2.2.1.</TITLE>
</HEAD>
<BODY>
<H2>Operatori si expresii.</H1><P>
<?php
$nume = "Ionescu";
$prenume = "Vasile";
$varsta = 38;
$salar = 1500;
$prop1 = "Domnul $prenume $nume are $varsta ani."."<BR>";
echo $prop1;
$prop2 = "Domnul ".$nume." are salar ".(($salar<1000)?"mic":"mare")."!<BR>";
echo $prop2;
mircea.neamtu@ulbsibiu.ro.
$salarNou = &$salar; // salarNou indica spre salar
$procentMarire = 26; // procentul cu care se mareste salarul
$salarNou += $salarNou*($procentMarire / 100);
$prop3 = " Salarul sau dupa marire este de $salar $."; // salar si salar nou indica
spre aceiasi valoare
echo $prop3;
?>
</BODY>
</HTML>

Copiati fisierul in directorul htdocs al serverului de Web si incarcati adresa


http://localhost/a2221.php

Cap 2.2.3. Tema 2.b

A) Efectuati cele doua activitati prezentate pe parcursul acestui capitol.

B) Creati un formular HTML in care se citesc numele, prenumele, anul de studiu si nota luata la
un examen de un student. La apasarea butonului de Submit se va incarca o pagina PHP in care
se va afisa sub forma de fraze situatia elevului, transformand nota in calificativ: promovat /
nepromovat si apoi calculand bursa ca fiind 100000*nota daca nota este peste 7, respectiv
50000*(nota-1) daca este sub 7. Raspunsul la aceasta tema va consta in numele celor doua
fisiere si observatiile referitoare la problemele intampinate.

Cap 3.1.1. Instructiuni conditionale

Instructiunile conditionale permit executia conditionata a secventelor de program. In lipsa unor


astfel de instructiuni ar fi practic imposil de implementat o mare parte dintre problemele din
luma reala.

Cap 3.1.1.1. Instructiunea if

Instructiunea if permite luarea de decizii privind executia unei alte instructiuni sau a unui bloc
de instructiuni inclus intre acolade ('{' si '}').

Cea mai simpla sintaxa a instructiunii if este:

if (expr)
instructiune

Expresia expr este o expresie (conditie) logica ce se evalueaza la true sau false. Daca evaluarea
conditiei are ca rezultat o valoare adevarata se va executa instructiunea specificata, daca nu,
instructiunea va fi ignorata si se va trece mai departe.

Exemplu:

if ($nota < 5)
echo 'Examenul trebuie repetat!';

mircea.neamtu@ulbsibiu.ro.
Daca expresia conditionala nu este una logica, se va face o conversie automata la o valoare
logica. Valorile numerice 0 sau 0.0, sirurile vide (""), tablourile fara nici un element sau
variabilele neinitializate vor fi evaluate la fals, restul fiind evaluate la true.

Daca se doreste executia conditionala a mai mult de o instructiune se va utiliza costructia de


bloc, ca in exemplul urmator:

if ($nota < 5)
{
echo 'Examenul trebuie repetat!';
$bursa = 0;
}

In multe cazuri, pentru conditie neadevarata se doreste executia altei instructiuni sau a unu bloc
de instructiuni. In acest caz se va folosi clauza optionala else. Exemplu:

if ($nota < 5)
{
echo 'Examenul trebuie repetat!';
$bursa = 0;
}
else
{
echo 'Felicitari pentru trecerea examenului!';
$bursa = 1000000;
}

In unele situatii, la luarea unei decizii exista mai multe optiuni. In acest caz ar trebui testate mai
multe conditii. Pentru aceasta, limbajul PHP pune la dispozitia programatorilor clauza elseif. In
acest caz sintaxa instructiunii este:

if (expr1)
instructiune1
elseif (expr2)
instructiune2
...

elseif (expr3)
instructiune

Exemplu:

if ($nota < 5)
{
echo 'Insuficient';
$bursa = 0;
}
elseif ($nota<7)
{
echo 'Suficient';
$bursa = 500000;
}
elseif ($nota<9)
{
echo 'Bine';
$bursa = 1000000;
}
else
{
mircea.neamtu@ulbsibiu.ro.
echo 'Bine';
$bursa = 1500000;
}

Cap 3.1.1.2. Instructiunea switch

Instructiunea switch este similara cu o serie de instructiuni if care testeaza mai multe valori
posibile pentru o anumita expresie. Avantajul sau este o scriere mai concisa si mai simplu de
inteles si depanat. Sintaxa acestei instructiuni este:

switch (expr) {
case valoare_1:
instructiune_1;
break;
case valoare_2:
instructiune_2;
break;
...
case valoare_n:
instructiune_n;
break;
defaut:
instructiune_default;
}

Dupa evaluarea expresiei, valoarea obtinuta este comparata cu valorile din clauzele case. Daca
se intalneste o potrivire se va continua cu executia instructiunilor din clauzele case urmatoare,
pana la intalnirea instructiunii break. Consecinta este ca, daca instructiunile dintr-o clauza case
nu se termina cu break, se va continua executia cu instructiunile clazei urmatoare. Acest lucru
se poate utiliza pentru a executa o secventa de instructiuni comuna pentru mai multe valori, ca
si in exemplu urmator:

switch ($nota) {
case 1: case 2: case 3: case 4:
echo ' nu are bursa!';
break;
case 5: case 6:
echo ' bursa este 500000.';
break;
case 7:
echo ' bursa este 700000.';
break;
case 8: case 9:
echo ' bursa este 1000000.';
break;
case 10:
echo ' bursa este 1500000.';
break;
defaut:
echo 'nota nu este corecta!';
}

Cap 3.1.2. Instructiuni repetitive

Instructiunile repetitive permit implementarea algoritmilor care necesita repetarea unei


secvente de calcul.

mircea.neamtu@ulbsibiu.ro.
Cap 3.1.2.1. Instructiunea while

Instructiunea while se foloseste pentru a implementa o bucla repetitiva cu test initial. Ea


permite executia unei instructiuni sau a unui bloc de instructiuni inclus intre acolade ('{' si '}') si
are sintaxa:

while (expr)
instructiune

Expresia expr este o expresie (conditie) logica ce se evalueaza inainte de fiecare repetitie. Daca
rezultatul evaluarii conditiei este adevarat, se va executa instructiunea specificata apoi secventa
se va relua. Daca rezultatul evaluarii este fals, instructiunea va fi ignorata si se va trece la
intructiunea de dupa while.

Exemplu:

$i = 1;
while ($i< 5)
echo 'Numarul '.$i++."<BR>";

In cazul in care conditia este neadevarata de la inceput, instructiunea din bucla nu se va


executa de loc.

Creati fisierul a3121.php pentru a genera o tabela de conversie valutara.

<HTML>
<HEAD>
<TITLE>Activitate 3.1.2.1.</TITLE>
</HEAD>
<BODY>
<H2>Tabela de conversie dolari/lei.</H1><P>
<?php
$curs= 33000;
$n = 50;
echo "<TABLE border=1>";
while ($n<=5000)
{
Activitate 1 echo "<TR>"; // se creeaza o noua linie in tabel
echo "<TD>"; // se creeaza coloana pentru valoarea in lei
echo number_format($n)." $ </TD>"; // se completeaza valoarea in lei
echo "<TD>"; // se creeaza coloana pentru valoarea in dolari
echo number_format($n*$curs)." lei </TD> </TR>"; // se completeaza
valoarea in dolari
$n+=50; // se vor tabela valorile din 50 in 50 de dolari
}
echo "</TABLE>";
?>
</BODY>
</HTML>

Copiati fisierul in directorul htdocs al serverului de Web si incarcati adresa


http://localhost/a3121.php

Cap 3.1.2.2. Instructiunea do-while

Instructiunea do-while este asemanatoare cu instructiunea while dar se foloseste pentru a


implementa o bucla repetitiva cu test final. Ca si while, ea permite executia unei instructiuni sau
a unui bloc de instructiuni inclus intre acolade ('{' si '}') si are sintaxa:
mircea.neamtu@ulbsibiu.ro.
do
instructiune
while (expr);

Expresia expr este o expresie (conditie) logica ce se evalueaza dupa fiecare repetitie. Daca,
dupa executarea instructiunii conditia este adevarata se va relua secventa de la inceput. In
cazul in care conditia devine falsa, repetitia se va incheia si se va trece la intructiunea de dupa
do-while.

Exemplu:

echo "Se genereaza un sir de numere aleatoare in intervalul 0-100.<BR>";


echo "Generarea se opereste la primului numar mai mare de 90 sau cand s-au depasit 20 de
numere.<BR>";
$i = 1;
do
{
$n = rand(0,100);
echo 'Numarul '.$i++." = ".$n."<BR>";
} while ($n<=90 and $i<21);

In cazul buclei do-while, instructiunea din bucla se va executa cel putin o data chiar si in cazul in
care conditia nu este adevarata de la inceput.

Cap 3.1.2.3. Instructiunea for

Instructiunea for este inspirata din limbajul C. Ca si while, ea permite executia unei instructiuni
sau a unui bloc de instructiuni inclus intre acolade ('{' si '}') si are sintaxa:

for (expr1; expr2; expr3)


instructiune

Prima expresie (expr1) este numita expresie de initializare si se executa o singura data,
neconditionat, la inceputul ciclului. De obicei aceasta expresie contine atribuiri. Expr2 este o
conditie logica ce se evalueaza la inceputul fiecarei iteratii. Pentru conditie adevarata se va
executa instructiunea din bucla, daca este falsa, repetitia se va incheia si se va trece la
intructiunea de dupa for. Expr3 se numeste expresie de iterare si se evalueaza la sfarsitul
fiecarei repetari. Ea are rolul de a asigura trecerea la pasul urmator (incrementarea contoarelor,
citirea datelor urmatoare etc.).

Oricare dintre cele trei expresii pot fi vide. Daca expr3 este vida PHP o va considera adevarata
si va cicla la infinit. In acest caz trebuie asigurata o iesire fortata din bucla utilizand una dintre
instructiunile de control pentru repetitii (vezi capitolul 3.1.3).

Exemplu de folosire a instruciunii for:

echo "Tabloul factorialelor primelor 10 numere naturale.<BR>";


echo "Definitia factorialului unui numar n este n!=1*2*3*...*n.<BR>";
echo "<TABLE border=1>";
for ($n = 1, $factorial = 1; $n <= 10; $n++)
{
echo "<TR> <TD>";
echo $n;
echo "</TD> <TD>";
$factorial *= $n;
echo $factorial;
echo "</TD> </TR>";
}

mircea.neamtu@ulbsibiu.ro.
Cap 3.1.2.4. Tablouri PHP. Instructiunea foreach

Un tablou este un tip de date ce poate retine un set de valori. In PHP tabloul va asocia fiecarei
intrari o cheie prin care aceasta poate fi regasita. Cheile pot fi numerice (in acest caz indicii
creati implicit vor fi 0,1,2 ...) sau pot fi siruri de caractere (caz in care tabloul se numeste
asociativ). Valorile retinute pot avea orice tip dar sunt de acelasi fel pentru un tablou dat.

O variabila de tip tablou poate fi creata prin constructorul array().

Sintaxa pentru crearea unui tablou indexat numeric este:

$tablou = array (el0, el1, ... el_n);

Exemplu:

$culori= array ("alb", "albastru", "verde", "rosu", "galben");

Accesul la elementele tabloului se face prin indecsi numerici (cu semnificatia de numere de
ordine in tablou). Spre exemplu $culori[0] are valoarea "alb", $culori[4] are valoarea "galben"
etc.

In PHP dimensiunea unui tablou este variabila. Pentru a adauga un nou element se va atribui
pur si simplu variabilei cu urmatorul indice o anumita valoare. Spre exemplu $culori[5]="negru"
va adauga un nou element ("negru") la sfarsitul tabloului $culori.

Numarul curent de elemente ale unui tablou se poate afla in orice moment cu ajutorul functiei
count($tablou).

Tablourile asociative sunt tablouri in care valorilor continute le sunt asociate chei prin care
acestea pot fi regasite. Sintaxa pentru crearea unui astfel de tablou este:

$tablou = array( "cheie1" => el1, "cheie2" => el2, ... "cheie_n" => el_n);

Exemplu:

$pret = array ("paine alba" => 7000, "ou" => 3000, "zahar" => 24000);

Accesul la un element se face prin cheia asociata. Spre exemplu $pret["paine alba"] are
valoarea 7000. Si in acest caz tabloul poate si extins dinamic prin adaugarea unui nou element a
carei cheie nu exista in tablou. Spre exemplu $pret["miere 500g"] = 30000 va adauga
elementul 30000 cu cheia "miere 500g" la tabloul $pret, acesta avand acum patru elemente.

Ambele tipuri de tablouri retin intern o referinta (pointer) catre elementul curent de prelucrat.
Acest lucru permite scrierea secventelor pentru parcurgerea si prelucrarea elementelor lor.

Instructiunea foreach este asemanatoare cu instructiunea for dar este destinata exclusiv
parcurgerii de tablouri, in special a celor asociative. Sintaxa acestei instructiuni are doua forme
alternative:

foreach (tablou as valoare_element_curent)


instructiune
foreach (tablou as cheie => valoare_element_curent)
instructiune

Prima forma permite extragerea tuturor valorilor din tablou si prelucrarea lor individual, pe cand
cea de a doua forma permite si extargerea si prelucrarea cheilor asociate.

mircea.neamtu@ulbsibiu.ro.
Creati fisierul a3124.php pentru a genera o tabela de conversie valutara.

<HTML>
<HEAD>
<TITLE>Activitate 3.1.2.4.</TITLE>
</HEAD>
<BODY>
<H2>Parcurgerea tablourilor.</H1>
<P>
<?php
$culori= array ("alb", "albastru", "verde", "rosu", "galben");
$pret = array ("paine alba" => 7000, "ou" => 3000, "zahar" => 24000);
echo "<P>Tablou indexat numeric, extragere valori.<BR>";
echo "<UL>";
foreach ($culori as $culoare)
echo "<LI>".$culoare."</LI>";
echo "</UL>";
echo "<P>Tablou indexat numeric, extragere valori si indecsi.<BR>";
echo "<TABLE border=1>";
foreach ($culori as $indice => $culoare)
{
echo "<TR>"; // se creaza o noua linie in tabel
echo "<TD>"; // se creaza coloana pentru valoarea indexului
echo $indice; // se completeaza valoarea indexului
echo "</TD> <TD>"; // se creaza coloana pentru culori
echo $culoare; // se completeaza culoarea
echo "</TD> </TR>"; // se inchide linia curenta
Activitate 2
}
echo "</TABLE>";
echo "<HR>";
echo "<P>Tablou asociativ, extragere valori.<BR>";
echo "<UL>";
foreach ($pret as $pret_produs)
echo "<LI>".$pret_produs."</LI>";
echo "</UL>";
echo "<P>Tablou asociativ, extragere valori si chei.<BR>";
echo "<TABLE border=1>";
foreach ($pret as $produs => $pret_produs)
{
echo "<TR>"; // se creaza o noua linie in tabel
echo "<TD>"; // se creaza coloana pentru valoarea cheii (produsul)
echo $produs; // se completeaza valoarea cheii
echo "</TD> <TD>"; // se creaza coloana pentru pret
echo $pret_produs; // se completeaza pretul
echo "</TD> </TR>"; // se inchide linia curenta
}
echo "</TABLE>";
?>
</HR>
</BODY>
</HTML>

Copiati fisierul in directorul htdocs al serverului de Web si incarcati adresa


http://localhost/a3124.php

La prelucrarea tablourilor numerice se prefera folosirea iteratiei dupa index in genul:

echo "<UL>";
for ($i = 0; $i < count($culori); $i++)
mircea.neamtu@ulbsibiu.ro.
echo "<LI>".$culori[$i]."</LI>";
echo "</UL>";

Cap 3.1.3. Instructiuni de control pentru repetitii

In multe situatii, pentru simplificarea implementarii este necesar sa se iasa fortat dintr-o
iteratie. In acest scop limbajul PHP include trei instructiuni speciale: continue, break si return.

Instructiunea break permite intreruperea fortata a buclei curente. Ea poate fi folosita cu


instructiunile for, foreach, while, do..while sau switch. Exemplu - se vor genera 20 de numere
aleatoare in intervalul [0-50] si se va imparti numarul 1000 la numerele generate. Generarea se
va opri fortat daca se genereaza 0:

for ($i=1; $i <= 20; $i++)


{
$a = rand(0,50);
if ($a == 0)
{
echo "S-a generat 0.<BR> ";
break;
}
echo "Pasul $i: 1000 / $a = ".(1000/$a)."<BR>";
}
echo "Generare terminata!";

Instructiunea continue permite terminarea fortata a iteratiei curente si trecerea la urmatoarea


iteratie. Ea poate fi folosita cu instructiunile for, foreach, while sau do..while. Exemplu - se
considera exemplul anterior, dar daca se genereaza numarul 0 nu se va executa impartirea si se
va trece la generarea urmatorului numar:

for ($i=1; $i <= 20; $i++)


{
$a = rand(0,50);
if ($a == 0)
{
echo "S-a generat 0.<BR> ";
continue;
}
echo "Pasul $i: 1000 / $a = ".(1000/$a)."<BR>";
}
echo "Generare terminata !";

Instructiunea return permite terminarea fortata a functiei sau programului curent. Ea poate fi
folosita in instructiunile for, foreach, while sau do..while unde, prin terminarea scriptului,
termina in mod evident si bucla curenta. Daca se doreste generarea unui mesaj in pagina
inainte de incheierea scriptului, in loc de return se pot folosi functiile exit(mesaj) sau die(mesaj)
- die fiind un alias al functiei exit. Exemplu - in exemplul anterior, la generarea lui 0 se termina
fortat pagina:

for ($i=1; $i <= 20; $i++)


{
$a = rand(0,50);
if ($a == 0)
{
echo "Eroare: S-a generat 0.";
return;
}
/* alternativ se poate folosi secventa
mircea.neamtu@ulbsibiu.ro.
if ($a == 0)
die("Eroare: S-a generat 0.");
*/
echo "Pasul $i: 1000 / $a = ".(1000/$a)."<BR>";
}
echo "Generare terminata !";

Cap 3.1.4. Tema 3.a

A) Efectuati cele doua activitati prezentate pe parcursul acestui capitol.

B) Sa se creeze o pagina in care se va afisa un tabel de conversie valutara dolar/euro/lei


personalizat pentru o casa de schimb valutar. Pentru aceasta se va crea un formular HTML in
care se citeste cursul valutar curent, prima si ultima valoare din tabel precum si pasul cu care se
face tabelarea. La apasarea butonului de Submit se va incarca o pagina PHP in care se va afisa
tabelul rezultat, avand trei coloane: suma-lei/dolari-lei/euro, ca in figura de mai jos. Raspunsul
la aceasta tema va consta in numele celor doua fisiere si observatiile referitoare la problemele
intampinate.

suma in Dolari(Euro) Lei/dolari Lei/euro


100 3,300,000 3,250,000
200 6,600,000 6,500,000

mircea.neamtu@ulbsibiu.ro.