Welcome, guest. You are not logged in.
Language / Choose language
 
Username Password  
Today: WHERE COUNTRY IS BEST IN ASIA? · More of this
    Search
 

   

Modul #6
85

<titlu>PARTEA A II A
Scrierea unor programe PHP cu un grad avansat de complexitate</titlu>

<titlu>Modulul 6:
Scrierea instrucþiunilor PHP condiþionale</titlu>
<titlu>Scopuri</titlu>
• învãþaþi sã definiþi ºi sã folosiþi valorile de tip adevãrat/fals
• învãþaþi sã înþelegeþi ºi sã scrieþi instrucþiunile if ºi instrucþiunile conexe
• învãþaþi sã înþelegeþi ºi sã scrieþi instrucþiunile switch si instruc­þiunile conexe
• învãþaþi sã înþelegeþi si sã scrieþi instrucþiuni de ciclare, inclusiv
instrucþiunile while, do while ºi for
Majoritatea programelor utile nu se comportã în exact acelaºi mod la fiecare rulare a acestora, în schimb, programele iau decizii, executând uneori o operaþie ºi alteori alta, în funcþie de circumstanþe. De exemplu, un program util pentru calculul impozitului pe venit nu foloseºte aceeaºi ratã a impozitului pentru fiecare contribua­bil. In cadrul acestui modul, veti învãþa sã încorporaþi instrucþiunile condiþionale în programele dumneavoastrã, astfel încât programele sã poalã lua decizii.

86

<titlu>Utilizarea valorilor de tip adevãrat/fals</titlu>
Programele PHP iau decizii prin evaluarea unor expresii condiþionale ºi executã instrucþiuni bazate pe rezultatele acestor evaluãri. Expresiile condiþionale sunt asimilate ca având una din douã valori: true (adevãrat) sau false (fals). Uneori, expresiile condiþionale se mai numesc ºi expresii booleene, în onoarea matematicianului care le-a studiat, George Boole. Constanta true are valoarea l, iar const false are valoarea 0.
Puteþi forma o expresie condiþionalã folosind constanta true sau constanta false. O modalitate mai utilã de a forma o expresie condiþionalã constã în utilizarea operator relaþional pentru compararea a douã valori numerice. Sã luãm în conside urmãtorul exemplu:

$a<1

Aceastã expresie condiþionalã foloseºte operatorul <, care are, în esenþã, aceeaºi semnificaþie ca în algebrã. Expresia are valoarea true dacã ºi numai dacã valoarea variabilei $a este mai micã decât unitatea; în toate celelalte cazuri, are valoarea false. PHP furnizeazã un set de asemenea operatori relaþionali, prezentaþi pe scurt în tabelul 6-1.
PHP nu vã obligã sã comparaþi numai valori numerice. Puteþi folosi operatorul relaþionali pentru compararea ºirurilor; cu toate acestea, un ºir care apare într-o expresie condiþionalã este convertit la o valoare numericã înainte de evaluarea expresiei. Deseori, se ajunge la rezultate neaºteptate, în general, valorile ºirurilor trebuie sã fie comparate folosind o funcþie de comparare a ºirurilor; aceste funcþii vor fi explicate în Modulul 7.

<tabel 6-1 Operatori relaþionali ai limbajului PHP>
*Operator
* Descriere

* a<b
*Adevãrat dacã valoarea lui a este mai micã decât valoarea lui b.

*a>b
*Adevãrat dacã valoarea lui a este mai mare decât valoarea lui b.

*a<=b
*Adevãrat dacã valoarea lui a este mai micã sau egalã cu valoarea lui b.

*a>=b
*Adevãrat dacã valoarea lui a este mai mare sau egalã cu valoarea lui b.

*a==b
*Adevãrat dacã valoarea lui a este egalã cu valoarea lui b.

*a!=b
*Adevãrat dacã valoarea lui a este diferitã de valoarea lui b.

*a===b
*Adevãrat dacã a ºi b sunt identice; cu alte cuvinte, dacã a ºi b au acelaºi tip ºi dacã valoarea lui a este egalã cu valoarea lui b.

*a!==b
*Adevãrat dacã a ºi b nu sunt identice; cu alte cuvinte, dacã a ºi b nu sunt de acelaºi tip sau dacã valoarea lui a este diferitã de valoarea lui b.
</tabel 6-1>

Pentru comoditate, puteþi forma expresii condiþionale fãrã un operator relaþional. De exemplu, dacã $a este o variabilã numericã, puteþi folosi expresia $a ca expresie condiþionalã. Expresia este consideratã ca având valoarea false dacã valoarea variabilei $a este zero, respectiv valoarea true dacã valoarea variabilei respective este

87

diferitã de zero. Dacã folosiþi un ºir ca expresie condiþionalã, expresia are valoarea false dacã ºirul este vid sau dacã are valoarea specialã "\0", care simbolizeazã un octet cu valoarea zero. Similar, utilizarea unei valori nedefinite ca expresie condiþio­nalã determinã obþinerea valorii false. Dacã folosiþi un tablou sau un obiect ca expresie condiþionalã, aceasta are valoarea false dacã tabloul sau obiectul sunt vide; în caz contrar, expresia are valoarea true.
Pentru a sintetiza, iatã regulile care definesc rezultatul unei expresii condiþionale:
• Constantele true ºi false îºi iau respectiv valorile lor booleene corespunzãtoare.
• O expresie condiþionalã care constã dintr-o valoare nedefinitã are valoarea false; în caz contrar, rezultatul depinde de tipul valorii, în speþã numeric, ºir, tablou sau obiect.
• O expresie condiþionalã care constã dintr-o valoare numericã are valoarea false dacã valoarea este zero; în caz contrar, are valoarea true.
• O expresie condiþionalã care constã dintr-o valoare de tip ºir are valoarea false dacã ºirul este vid; în caz contrar, are valoarea true.
• O expresie condiþionalã care constã dintr-o valoare de tip tablou sau obiect are valoarea false dacã tabloul sau obiectul sunt vide; în caz contrar, are valoarea true.
• O expresie condiþionalã alcãtuitã dintr-un operator relaþional ºi din operanzii sãi ia valori în conformitate cu rezultatul comparaþiei (numerice sau nu).

Puteþi forma expresii condiþionale complexe prin unirea a douã expresii condiþionale cu ajutorul unui operator logic. De exemplu, expresia urmãtoare este adevãratã dacã ambele expresii condiþionale care o compun sunt adevãrate:

$a < 1 AND $b < 1

Cu alte cuvinte, expresia este adevãratã dacã atât variabila $a, cât ºi variabila $b au valori mai mici decât unitatea. Tabelul 6-2 prezintã pe scurt operatorii logici ai limbajului PHP. Reþineþi cã puteþi prefixa o expresie condiþionalã cu operatorul !, care inverseazã valoarea „adevãrat" sau „fals" a operandului sãu.
In general, expresiile sunt evaluate de la stânga la dreapta. Totuºi, operatorii care apar în partea superioarã a tabelului dispun de o precedenþã mai ridicatã ºi sunt efectuaþi anterior operatorilor cu o precedentã mai redusã, dacã nu sunt folosite paranteze pentru a specifica o altã ordine a operaþiilor.


<tabel 6-2 Operatori logici ai limbajului PHP>

*Operator
* Descriere

*x AND y
*Adevãrat dacã atât x, cât ºi y sunt adevãrate.

*x && y
*Adevãrat dacã atât x, cât ºi y sunt adevãrate.

*x OR y
*Adevãrat dacã minimum una din expresiile x ºi y este adevãratã.

*x || y
*Adevãrat dacã minimum una din expresiile x ºi y este adevãratã.

*x XOR y
*Adevãrat dacã numai una din expresiile x ºi y este adevãratã.

*!x
*Adevãrat dacã x este falsã.
</tabel 6 – 2>

88

<Sfatul specialistului>
Întrebare: De ce foloseºte PHP doi operatori logici reprezentând conjuncþii (AND ºi &&) ºi doi operatori logici reprezentând, disjuncþii (OR ºi ||)? Care sunt diferentele între cele douã tipuri de operatori?
Rãspuns: Ambii operatori de conjuncþie executã aceeaºi operaþie, ca de altfel ºi ambii operatori de disjuncþie. Cu toate acestea, operatorii diferã din punctul de vedere al precedenþei - caracteristica determinantã a ordinii în care sunt executate operaþiile în timpul evaluãrii expresiilor. Operatorii && ºi || au o prece­dentã relativ ridicatã, în timp ce operatorii AND ºi OR au o precedentã relativ redusã. Tabelul 6-3 indicã precedenþa operatorilor PHP, conþinând numeroºi operatori care nu au fost încã prezentaþi.

<tabel 6-3 Precedenþa operatorilor PHP>
*Operator

*! ~ ++ — (int) (double) (string) (array) (object)

** / %

*+ - .

*< <= > >=

*= = != = = = ! = =

*&

*&#61657;

*&#61671;

*&&

*&#61671;&#61671;

*?:

*= += -= *= /= .= %= &= &#61671;= &#61657;= ~= <<= >>=

*And

*Xor

*Or

*,
</tabel 6-3>

De exemplu, sã considerãm urmãtoarea expresie:

$a + $b * $c

Precedenþa operatorului de multiplicare * este mai ridicatã decât aceea a operatorului de adunare +, deci înmulþirea este efectuatã prima, chiar dacã adunarea apare la stânga înmulþirii. Cu alte cuvinte, expresia este evaluatã ca ºi cum ar fi fost scrisã astfel:

$a + ( $b * $c )

Dacã doriþi ca adunarea sã fie efectuatã prima, puteþi folosi paranteze în cadrul expresiei, astfel:

( $a + $b ) * $c

89

<Test „la minut">
Sã presupunem cã variabila $a are valoarea 10, variabila $b are valoarea l, iar variabila $c are valoarea 1:
• Care este valoarea expresiei $a < $b?
• Care este valoarea expresiei $a <= $b?
• Care este valoarea expresiei $a > $b?
• Care este valoarea expresiei $b >= $c?
• Care este valoarea expresiei $a > $b AND $b >= $c?
</Test „la minut">

<titlu>Scrierea instrucþiunilor if simple</titlu>
Expresiile condiþionale nu sunt deosebit de interesante sau utile ca atare. Aceste expresii sunt însã esenþiale pentru scrierea instrucþiunilor condiþionale, prin care se iau decizii. Cea mai simplã instrucþiune condiþionalã este instrucþiunea if, care executã douã operaþii. Mai întâi, evalueazã o expresie condiþionalã. Apoi, dacã ºi numai dacã valoarea expresiei condiþionale este true, instrucþiunea if executã o instrucþiune specificatã.
Iatã o instrucþiune if simplã:

If ($numãr > 10)
Echo „ Acesta este un numãr mare „;

Sã ne reamintim cã, în general, limbajul PHP ignorã spatiile albe. In mod convenþional, o instrucþiune asociatã unei instrucþiuni if este scrisã decalat în raport cu aceasta. Acest procedeu este recomandat deoarece prin utilizarea sa este facilitatã citirea programului. Atunci când este executatã, instrucþiunea if evalueazã expresia condiþionalã $numar > 10, care este adevãratã numai dacã valoarea variabilei $numa este mai mare decât 10. Instrucþiunea echo este executatã numai dacã valoarea variabilei $numar este mai mare decât 10.
Pentru a acumula experienþã în utilizarea instrucþiunii if, nu uitaþi sã parcurgeþi Proiectul 6-1.

<titlu>Proiect 6-1: Testarea valorilor numerice</titlu>
În cadrul acestui proiect, veþi scrie ºi veþi executa un mic program PHP, care include o instrucþiune if. Programul indicã dacã un numãr pe care îl introduceþi este sau nu mai mare decât 10.

<notã>Rãspunsuri la test:
• false
• false
• true
• true
• true
</notã>

90

<titlu>Scopul proiectului</titlu>
• Prezentarea modului de funcþionare a instrucþiunii if

<titlu>Pas cu pas</titlu>
1. Plasaþi urmãtorul script PHP într-un fiºier denumit p-6-1. php ºi încãrcaþi acest fiºier în serverul dumneavoastrã PHP:

<HTML>
<HEAD>
<TITLE>Proiect 6-1</TITLE>
</HEAD>
<BODY>
<!--Fiºier p-6-1.php -->
<?php
echo „ Numãrul introdus a fost : $numãr.”;
if ($numãr > 10)
echo „ <BR> Acesta este numãr mare.”;
?>
</BODY>
</HTML>

2. Plasaþi urmãtoarea paginã HTML într-un fiºier denumit p-6-1 .html ºi încãrcaþi acest fiºier în serverul dumneavoastrã, plasându-l în acelaºi catalog ca ºi fiºierul p-6-1 .php:

<HTML>
<HEAD>
<TITLE>Proiect 6-1</TITLE>
</HEAD>
<BODY>
<!--Fiºier p-6-1.html-->
<FORM METHOD=”POST” ACTION=”p-6-1.php”>
Introduceþi o valoare numericã:
<BR><INPUT TYPE=”TEXT” NAME=”numar”>
</FORM>
</BODY>
</HTML>


3. Orientaþi un browser Web spre adresa URL a fiºierului încãrcat în etapa precedentã. Ecranul browserului trebuie sã fie asemãnãtor celui prezentat în ilustraþia urmãtoare. Introduceþi un numãr ºi apãsaþi pe tasta ENTER.*
4. În momentul execuþiei scriptului de prelucrare, acesta comparã valoarea pe care aþi introdus-o cu valoarea 10. Dacã aþi introdus o valoare mai mare decât 10, scriptul afiºeazã un mesaj. Un rezultat caracteristic este prezentat în ilustraþia urmãtoare.
<imagine>
Enter a numeric value:
11
The nxnnber entertd was: 11.
That's a big number.
</imagine>

<notã>
*În original este menþionata tasta RETURN, nume care nu se mai utilizeazã de mult în tastaturile calculatoarelor. - N.T.
</notã>

91

<Test „la minut">
• Scrieþi o instrucþiune care afiºeazã mesajul „aoleu!" dacã valoarea varia­bilei $erori este mai mare decât zero.
• Scrieþi o instrucþiune if care afiºeazã mesajul „nu trece" dacã valoarea variabilei $culoare este egalã cu valoarea variabilei $rosu sau cu valoarea variabilei $galben. </Test „la minut">
<titlu>Scrierea unor instrucþiuni if mai complexe</titlu>
Sã presupunem cã doriþi sã executaþi nu una, ci douã instrucþiuni în cazul în care o anumitã expresie condiþionalã este adevãratã. Puteþi scrie douã instrucþiuni if, câte una pentru fiecare dintre instrucþiunile pe care doriþi sã le executaþi. Alternativ, puteþi crea un grup de instrucþiuni, prin includerea unei serii de instrucþiuni între paranteze acolade. Un grup de instrucþiuni se comportã ca o singurã instrucþiune ºi se poate asocia cu o instrucþiune if. Sã considerãm urmãtorul exemplu:

if ($numar > 10 )
&#61563;
echo „<BR>Numarul este mai mare decãt 10.”;
echo „<BR>Deci, trebuie sa fie mai mare.”;
&#61565;

În cazul în care expresia condiþionalã are valoarea true, sunt executate ambele instrucþiuni din cadrul grupului de instrucþiuni. Unii programatori preferã sã formateze programe ca acesta în alt mod. De exemplu, ei pot scrie ceva de genul urmãtor:

if ($numar > 10 )&#61563;
echo „<BR>Numarul este mai mare decãt 10.”;
echo „<BR>Deci, trebuie sa fie mai mare.”;
&#61565;

Acest stil este mai compact, dar face dificilã identificarea parantezei acolade de deschidere corespunzãtoare parantezei de închidere. Probleme de lizibilitate de acest gen devin importante la scrierea unor instrucþiuni if mai complicate.
Sã presupunem cã doriþi sã executaþi o instrucþiune atunci când o condiþie este adevãratã ºi o altã instrucþiune când condiþia este falsã. Instrucþiunea else vã permite sã procedaþi astfel. Sã luãm în considerare urmãtorul exemplu:

if ($numar > 10 )
echo „<BR>Acesta este un numa mare .”;
else
echo „<BR>Acesta este un numa mic.”;
<notã>
Rãspunsuri la test:
• if ($erori > 0)
echo "aoleul";
• if ($culoare == $rosu OR $culoare == Sgalben)
echo "nu trece';
</notã>

92

În acest exemplu, mesajul „Acesta este un numãr mare" este afiºat atunci când valoarea variabilei $numar este mai mare decât 10; mesajul „Acesta este un numãrul mic" este afiºat în caz contrar. Dacã doriþi, puteþi folosi o instrucþiune else cu un grup de instrucþiuni. De exemplu:


if ($numar > 10 )
echo „<BR>Acesta este un numar mare.”;
else
&#61563;
echo „<BR>Numãrul este mai mic decât 10.”;
echo „<BR>Este un numar mic.”;
&#61565;

Instrucþiunea asociatã unei instrucþiuni if sau else poate fi ea însãºi o instruc­þiune if. O asemenea instrucþiune if se numeºte instrucþiune if imbricatã. Iatã un exemplu de instrucþiune if imbricatã:

if ($numar > 10 )
if ($numa > 100)
echo „<BR>Acesta este un numar foarte mare.”;
else
echo „<BR>Acesta este un numar mare.”;
else
echo „<BR>Acesta este un numar mic.”;


Exemplul afiºeazã mesajul „Acesta este un numãr foarte mare." dacã valoarea variabilei $numar depãºeºte 100; în caz contrar, dacã valoarea variabilei $numar este mai mare decât 10, se afiºeazã mesajul „Acesta este un numãr mare.". Dacã valoarea variabilei $numar este mai micã sau egalã cu 10, exemplul afiºeazã mesajul „Acesta este un numãr mic.".
Instrucþiunile if imbricate pot deveni extrem de dificil de înþeles dacã numãrul de instrucþiuni ºi nivelul de imbricare nu sunt relativ reduse. Deci trebuie sã le folosiþi cu economie.
O instrucþiune corelatã atât cu instrucþiunea if, cât ºi cu instrucþiunea else, este instrucþiunea elseif. Când este folositã corect, poate fi mai simplu de înþeles decât o instrucþiune if imbricatã, logic echivalentã cu aceasta. Iatã un exemplu de instruþiune elseif:

if ($numar > 100 )
echo „<BR>Acesta este un numar foarte mare.”;
elseif ($numa > 10)
echo „<BR>Acesta este un numar mare.”;
elseif ($numa > 1)
echo „<BR>Acesta este un numar mic.”;
else
echo „<BR>Acesta este un numar foarte mic.”;
Exemplul extinde funcþionalitatea exemplului anterior, afiºând mesajul „Acesta este un numãr foarte mic." pentru valori ale variabilei $numar mai mici sau egale cu 1. Într-un caz general, cu o instrucþiune if ºi cu o instrucþiune else poate fi asociat

93

un numãr mult mai mare de instrucþiuni elseif. PHP evalueazã expresiile condiþio­nale în mod succesiv, pornind de la expresia condiþionalã asociatã instrucþiunii if . PHP executã instrucþiunea asociatã primei expresii condiþionale care are valoarea true; dacã nici o expresie condiþionalã nu are valoarea true, PHP executã instruc­þiunea asociatã cu instrucþiunea else. Este permisã omiterea instrucþiunii else, caz în care nu este executatã nici o instrucþiune dacã nici una din expresiile condiþionale nu are valoarea true.

<Test „la minut">
• Scrieþi o instrucþiune if ºi o instrucþiune else pentru a afiºa mesajul „stai" dacã valoarea variabilei $culoare este egalã cu valoarea variabilei $rosu sau cu valoarea variabilei $galben, respectiv pentru a afiºa mesajul „liber" în caz contrar.
• Scrieþi o instrucþiune if ºi o instrucþiune else pentru a înmulþi valoarea variabilei $numar cu 10 dacã valoarea variabilei $factor este l, respectiv pentru a înmulþi valoarea variabilei $numar cu 100 în caz contrar. </Test „la minut">

<titlu>Scrierea instrucþiunilor switch, break ºi default</titlu>

Instrucþiunea if vã permite sã luaþi o decizie în douã sensuri. Pentru a putea lua o decizie în mai multe sensuri, puteþi folosi mai multe instrucþiuni if , else sau elseif. Cu toate acestea, când doriþi ca programul dumneavoastrã sã aleagã dintr-un set de alternative care pot fi reprezentate prin valori întregi, instrucþiunea switch este o opþiune mai convenabilã.
De exemplu, sã presupunem cã valoarea variabilei $numar este l, 2 sau 3, reprezentând respectiv dimensiunile micã, medie ºi mare. Iatã un mic program care afiºeazã dimensiunile asociate valorilor variabilei $numar:

Switch($numar)
&#61563;
case(1):
echo „ mic”;
break;

<notã>
Rãspunsuri la test:
• if ($culoare == $rosu OR $culoare == $galben)
echo "stai"; else
echo "liber";
• if ($factor ==1)
$numar = 10 * $numar;
else
$numar = 100 * $numar;
</notã>

94
case(2):
echo „mediu”;
break;
case(3):
echo „mare”;
break;
default:
echo „Acesta nu este un cod valabil”;
&#61565;

Acþiunea unei instrucþiuni switch este determinatã de valoarea unei expresii întregi, nu de valoarea unei expresii condiþionale. Numele variabilei este dat între parantezele care urmeazã dupã cuvântul cheie switch. Parantezele acolade sdelimi­teazã o serie de instrucþiuni case ºi o instrucþiune default opþionalã, fiecare dintre instrucþiunile cuprinse între paranteze putând avea instrucþiuni asociate. Când este executatã, instrucþiunea switch încearcã sã stabileascã o identitate între valoarea variabilei sale asociate ºi valoarea asociatã unei instrucþiuni case. Se vor executa instrucþiunile asociate primei instrucþiuni case pentru care identitatea respectivã est valabilã. Dacã valoarea variabilei din instrucþiunea switch nu corespunde nici uneia din valorile asociate instrucþiunilor case, se vor executa instrucþiunile asociate instrucþiunii default, dacã existã o asemenea instrucþiune.
Un procedeu de programare indicat constã în aceea ca fiecare instrucþiune case din cadrul unei instrucþiuni switch sã se încheie cu o instrucþiune break. Instrucþiunea break determinã încheierea execuþiei instrucþiunii switch, transferând controlul urmãtoarei instrucþiuni secvenþiale care succede instrucþiunii switch. În absenþa instrucþiunii break, execuþia trece la urmãtoarea instrucþiune case sau default, fapt nedorit în majoritatea cazurilor.

<Sugestie>
Nu este necesar sã folosiþi numere întregi consecutive în instrucþiunile case ale unei instrucþiuni switch. Dacã preferaþi, puteþi folosi numere întregi non-consecutive, numere cu virgulã mobilã sau ºiruri.</Sugestie>

<Sfatul specialistului>
Întrebare: PHP include numeroase instrucþiuni condiþionale, incluzând instrucþiunile if, else, elseif ºi switch. Existã ºi alte mecanisme de luare a deciziilor?
Rãspuns: Da. Operatorul condiþional ?:, denumit uneori operator ternar sau operator întrebare-douã puncte, constituie o altã modalitate de a scrie decizii în PHP. Operatorul condiþional formeazã o expresie care se poate folosi în multe contexte PHP. Iatã sintaxa de utilizare a acestuia:
expresie-condiþionala ? valoare-adevarat : valoare-fals

95

Observaþi cum semnul întrebãrii este separat de caracterul douã puncte prin valoarea valoare-adevarat. Operatorul condiþional îºi evalueazã expresia condiþio­nalã. Dacã expresia este evaluatã la valoarea true (adevãrat), operatorul condiþio­nal returneazã valoarea valoare-adevarat; în caz contrar, returneazã valoarea valoare-fals. Operatorul condiþional vã permite sã specificaþi deciziile într-o manierã foarte concisã.
De exemplu, sã luãm în considerare urmãtoarea instrucþiune de atribuire, care foloseºte un operator condiþional: $a = ($b > $c) ? 1 : 2
Aceastã instrucþiune de atribuire comparã valorile variabilelor $b ºi $c. Dacã valoarea variabilei $b este mai mare decât aceea a variabilei $c, atunci variabilei $a îi este atribuitã valoarea 1; în caz contrar, variabilei respective îi este atribuitã valoarea 2. </Sfatul specialistului>

<Test „la minut">
• Scrieþi o instrucþiune switch care testeazã valoarea variabilei $exponent. Instrucþiunea trebuie sã atribuie variabilei $factor o valoare dupã cum urmeazã: dacã $exponent este l, $factor primeºte valoarea 10; dacã $exponent este 2, $factor primeºte valoarea 100; altfel, $factor primeºte valoarea 0.
• în programare, se recomandã ca fiecare instrucþiune case sã fie asociatã cu o instrucþiune ________.</Test „la minut">

<titlu>Scrierea instrucþiunilor for</titlu>
Instrucþiunea for este o instrucþiune buclã sau o instrucþiune iterativã; cu alte cuvinte, o instrucþiune care executã în mod repetat instrucþiunile asociate. Iatã un exemplu de utilizare a unei instrucþiuni for:
<notã>
Rãspunsuri la test:
• switch($exponent)
{
case 1:
$factor = 10;
break;
case 2:
$factor =100;
break;
default:
$factor = 0;
}
• break</notã>

96

$suma = 0
for ($n =1; $n<=3; $n++)
$suma += $n;
echo !<BR>Suma intregilor de la 1 la $numa este $suma.”;
96

În exemplu se calculeazã suma întregilor cuprinºi între l ºi 3. Pentru aceasta, mai întâi se iniþializeazã variabila $suma la valoarea 0. Apoi, se executã o instrucþiune for care incrementeazã în mod repetat valoarea variabilei $suma.
Pentru a vedea cum funcþioneazã mecanismul acestei instrucþiuni, sã examinãm componentele instrucþiunilor for. Instrucþiunea for include trei expresii, care apar între paranteze; fiecare expresie este separatã de vecina sa printr-un caracter punct ºi virgulã. De asemenea, instrucþiunea for include o instrucþiune sau un grup de instrucþiuni, cunoscute sub numele de corpul instrucþiunii for. în exemplul de mai sus, instrucþiunea $suma += $n este corpul instrucþiunii for.
Sa examinãm mai amãnunþit cele trei expresii:
• Prima expresie este expresia de iniþializare. Aceasta se executã atunci când PHP ajunge la instrucþiunea for. In exemplu, expresia de iniþializare atribuie valoarea variabilei $n, variabilã denumitã variabilã de ciclare sau index.
• A doua expresie este expresia de test. Aceasta este o expresie condiþionalã care indicã dacã se executã sau nu corpul instrucþiunii, în general, face referire la variabila de ciclare. In cadrul exemplului, expresia de test comparã valoarea variabilei $n cu valoarea 3. Expresia de test este evaluatã pentru prima datã imediat dupã evaluarea expresiei de iniþializare.
• Cea de-a treia expresie este expresia pas. în general, aceasta modificã una sau mai multe variabile la care se face referire în expresia test. în cadrul exemplului, expresia pas incrementeazã valoarea variabilei $n.

Secvenþa de execuþie a unei instrucþiuni for este urmãtoarea:
1. Se evalueazã expresia de iniþializare.
2. Se evalueazã expresia test.
3. Dacã rezultatul evaluãrii expresiei test este false, se executã etapa 7.
4. Se executã corpul buclei.
5. Se evalueazã expresia pas.
6. Se trece la etapa 2.
7. Se încheie execuþia instrucþiunii for, prin executarea urmãtoarei instrucþiuni secvenþiale.

Instrucþiunea for este utilã pentru numãrare ºi executarea în mod repetat a unor acþiuni. Ca alt exemplu, iatã o instrucþiune for care creeazã numeroase controale de tip buton. Numãrul controalelor create este determinat de valoarea variabilei $numar:

for($n=0;$n<=$numar; $n++)
echo „<BR><INPUT TYPE =\”BUTTON\” VALUE=\”$n\”>\n”;

97

Aºa cum veþi vedea în Modulul 8, instrucþiunea for este utilã mai ales în lucrul cu tablouri.
<Test „la minut">
• Scrieþi o instrucþiune for care calculeazã suma întregilor cuprinºi între l ºi 100.
• Scrieþi o instrucþiune for care afiºeazã la ieºire etichete HTML <BR>. Numãrul etichetelor afiºate trebuie sã fie egal cu valoarea variabilei $n. </Test „la minut">

<titlu>Scrierea instrucþiunilor while ºi do while</titlu>
Practic, instrucþiunile while ºi do while reprezintã versiuni „manuale" ale instrucþiunii for. Dacã o instrucþiune for are trei expresii, o instrucþiune while sau do while una singurã, ºi anume expresia de test. Aºa cum se întâmplã de obicei, expresiile iei instrucþiuni for sunt opþionale; fãrã o expresie de iniþializare sau o expresie pas, ' instrucþiune for opereazã în acelaºi mod ca o instrucþiune while. în consecinþã, urmãtoarele douã instrucþiuni sunt echivalente:

for ( ; $i<= 3; ) $suma += $i;
while ($i <= 3) $suma ++ $i;

Când folosiþi o instrucþiune while, trebuie sã furnizaþi un mecanism oarecare, analog expresiei de incrementare a instrucþiunii for, care actualizeazã variabilele la care se face referire în expresia de test. De asemenea, sunteþi responsabil cu iniþializarea tuturor valorilor folosite în expresia de test.
Secvenþa de execuþie a unei instrucþiuni while este urmãtoarea:
1.Se evalueazã expresia test.
2.Dacã rezultatul este false, se trece la etapa 5.
3.Se executã corpul buclei.
4.Se trece la-etapa 1.
5. Se pãrãseºte bucla, prin executarea urmãtoarei instrucþiuni secvenþiale.
Iatã un exemplu care utilizeazã instrucþiunea while:

$n = 0;
$suma = 0;
while ($n <= 3)
&#61563;

<notã>
Rãspunsuri la test:
• $suma = 0;
for ($i = 1; $i <= 100; $i++)
$suma = $suma + $i;
• for ($i = 1; $i <= $n; $i++)
echo " <BR>;
</notã>

98

$suma = $suma +$n;
$n++;
&#61565;
echo „Suma este $suma.”

Remarcaþi cã instrucþiunea $n = 0; iniþializeazã bucla ºi cã instrucþiunea n++; incrementeazã valoarea variabilei buclã $n. Instrucþiunea while este cel mai utilã atunci când un alt program necesar executã deja aceste funcþii; în asemenea situaþii, instrucþiunea while este mai clarã decât o instrucþiune for degeneratã, cãreia îi lipsesc una sau mai multe dintre expresiile sale obiºnuite.
Instrucþiunea do while este oarecum asemãnãtoare instrucþiunii while. Diferenþa este aceea cã instrucþiunea do while îºi executã corpul înainte de a-ºi evalua expresia de test. Astfel, corpul buclei unei instrucþiuni do while este întotdeauna executat cel puþin o datã; corpul unei instrucþiuni while este omis dacã expresia de test are iniþial valoarea false.

Secvenþa de execuþie a unei instrucþiuni do while este urmãtoarea:
1. Se executã corpul buclei.
2. Se evalueazã expresia de test
3. Dacã rezultatul este adevãrat, se trece la etapa 1.
4. Se încheie execuþia buclei, prin executarea urmãtoarei instrucþiuni secvenþiale.
Iatã un exemplu care foloseºte o instrucþiune do while. Observaþi cã amplasarea expresiei de test imediat dupã corpul buclei vã reaminteºte faptul cã executarea corpului are loc înainte de evaluarea expresiei de test

$suma = 0;
$n = 1;
do
&#61563;
$suma += $n;
$n++;
&#61565;
while ($n <= $numar);
echo „<BR>Suma întregilor cuprinºi între 1 ºi $numar este $suma.”;

<Sfatul specialistului>
Întrebare: Instrucþiunea while ºi instrucþiunea do while par foarte asemãnãtoare. Când trebuie sã folosesc o instrucþiune do while în locul unei instrucþiuni while?
Rãspuns: Experþii în programare au demonstrat cã este posibila scrierea oricãrui program fãrã a folosi nici o instrucþiune do while. Deci, utilizarea instrucþiunii do while este o chestiune de comoditate, nu de necesitate. Va puteþi des­curca folosind numai instrucþiuni while.

99

În general, este bine sã fiþi prudent ºi sã folosiþi instrucþiunea while, care evalueazã o expresie de test înainte, de executarea corpului acesteia. Astfel, se evitã executarea eronatã a corpului buclei. Totuºi, când vedeþi un model ca acesta:
<o acþiune oarecare>;
while(expresie - test)
{
<aceeaºi acþiune>
&#61565;

atunci puteþi înlocui liniºtit programul respectiv cu un program care foloseºte o instrucþiune do while:
do
{
<o acþiune oarecare>;
&#61565;while (expresie-test);
</sfatul specialistului>

<Test „la minut">
• Scrieþi o instrucþiune while ºi instrucþiunile asociate care afiºeazã suma întregilor cuprinºi între l ºi 100.
• Scrieþi o instrucþiune do while ºi instrucþiunile asociate care afiºeazã suma întregilor cuprinºi între l ºi 100. </Test „la minut">

<titlu>Proiect 6-2: Validarea datelor de intrare introduse de utilizator</titlu>
În cadrul acestui proiect, veþi crea un formular HTML si un script PHP care permit unui utilizator sã introducã date personale de categoria celor folosite într-o agenda de adrese e-mail. Scriptul PHP valideazã datele introduse de utilizator, garantând existenþa datelor în câmpurile obligatorii.

<titlu>Scopurile proiectului</titlu>
• Prezentarea modului de utilizare a instrucþiunilor condiþionale
• Prezentarea unui mod de validare a datelor dintr-un formular

<notã>
Rãspunsuri la test:
• $suma = 0;
$n = 1 ;
while ($n <= 100)
$suma += $n;
echo "suim este $suma.";
• $suma = 0;
$n = 1;
do
{
$suma += $n;
}while ($n <= 100)
echo „suma este $suma.";
</notã>

100

<titlu>Pas cu pas</titlu>
1. Plasaþi urmãtorul script PHP într-un fiºier denumit p-6-2. php ºi încãrcaþi acest fiºier în serverul dumneavoastrã PHP:

<HTML>
<HEAD>
<TITLE>Proiect 6-2</TITLE>
</HEAD>
<BODY>
<! -- Fisierul p-6-2.php -- >
<?php

$erori=0;
if (!trim($porecla))
&#61563;
echo „<BR><B>Porecla</B> este obligatorie.”;
$erori++;
&#61565;

if (!trim($prenume))
&#61563;
echo „<BR><B>Prenume</B> este obligatoriu.”;
$erori++;
&#61565;

if (!trim($nume))
&#61563;
echo „<BR><B>Numele</B> este obligatoriu.”;
$erori++;
&#61565;

if (!trim($email))
&#61563;
echo „<BR><B>Adresa primara de e-mail</B>”.
„ este obligatorie.”;
$erori++;
&#61565;

if ($erori>0)
echo „<BR><BR><BR>Va rugam folositi butonul Back ”.
„ al browserului dumneavoastra pentru a reveni la „.
„formular, corectati ”;
if ($erori == 1)
echo „eroarea, ”;
if ($erori > 1)
echo „erorile, ”;
if ($erori > 0)
echo „si reexpediati formularul.”;

?>

</BODY>
</HTML>

2. Plasaþi urmãtoarea paginã HTML într-un fiºier denumit p-6-2.html ºi încãrcaþi acest fiºier în serverul dumneavoastrã, plasând fiºierul în acelaºi catalog cu fiºierul p-6-2.php:

101

<HTML>
<HEAD>
<TITLE>Proiect 6-2</TITLE>
</HEAD>
<BODY>
<! -- Fisierul p-6-2.html -- >
<FORM METHOD=”POST” ACTION=” p-6-2.php”>
<H1>Informatii privind persoana de contact</H1>
<TABLE>

<TR>
<TD><B>Porecla:</B></TD>
<TD><INPUT TYPE=”TEXT” NAME=”porecla”></TD>
</TR>

<TR>
<TD>Titlu:</TD>
<TD><INPUT TYPE=”TEXT” NAME=”titlu”></TD>
</TR>

<TR>
<TD><B>Prenume:</B></TD>
<TD><INPUT TYPE=”TEXT” NAME=”prenume”></TD>
</TR>

<TR>
<TD>Prenumele tatalui:</TD>
<TD><INPUT TYPE=”TEXT” NAME=”prenume_tata”></TD>
</TR>

<TR>
<TD><B>Nume:</B></TD>
<TD><INPUT TYPE=”TEXT” NAME=”Nume”></TD>
</TR>

<TR>
<TD><B>Adresa de e-mail principala:</B><TD>
<TD><INPUT TYPE=”TEXT” NAME”email”></TD>
<TD WIDTH=”20”>&nbsp;</TD>
<TD>Adresa de e-mail secundara:</TD>
<TD><INPUT TYPE=”TEXT” NAME=”emailsecundar”></TD>
</TR>

<TR>
<TD>Numele companiei:</TD>
<TD><INPUT TYPE=”TEXT” NAME=”nume_companie”></TD>
</TR>

<TR>
<TD>Adresa firmei:</TD>
<TD><INPUT TYPE=”TEXT” NAME=”adresa_firmei1”></TD>
<TD WIDTH=”20”>&nbsp;</TD>
<TD>Adresa la domiciliu:</TD>
<TD><INPUT TYPE=”TEXT” NAME=”adresa_acasa”></TD>
</TR>

102

<TR>
<TD></TD>
<TD><INPUT TYPE=”TEXT” NAME”adresa_firmei2”></TD>
</TR>

<TR>
<TD>Oras:</TD>
<TD><INPUT TYPE=”TEXT” NAME=”oras_birou”></TD>
<TD WIDTH=”20”>&nbsp;</TD>
<TD>&nbsp;</TD>
<TD><INPUT TYPE=”TEXT” NAME=”oras_acasa”></TD>
</TR>

<TR>
<TD>Stat:</TD>
<TD><INPUT TYPE=”TEXT” NAME=”stat_birou”></TD>
<TD WIDTH=”20”>&nbsp;</TD>
<TD>&nbsp;</TD>
<TD><INPUT TYPE=”TEXT” NAME=”stat_acasa”></TD>
</TR>

<TR>
<TD>Cod postal:</TD>
<TD><INPUT TYPE=”TEXT” NAME=”cod_birou”></TD>
<TD WIDTH=”20”>&nbsp;</TD>
<TD>&nbsp;</TD>
<TD><INPUT TYPE=”TEXT” NAME=”cod_acasa”></TD>
</TR>

<TR>
<TD>Telefon:</TD>
<TD><INPUT TYPE=”TEXT” NAME=”telefon_birou”></TD>
<TD WIDTH=”20”>&nbsp;</TD>
<TD>&nbsp;</TD>
<TD><INPUT TYPE=”TEXT” NAME=”telefon_acasa”></TD>
</TR>
<TR>
<TD>Data nasterii:</TD>
<TD><INPUT TYPE=”TEXT” NAME=”data_nastere”></TD>
</TR>

<TR>
<TD>Numele sotului/sotiei:</TD>
<TD><INPUT TYPE=”TEXT” NAME=”nume_sot”></TD>
<TD WIDTH=”20”>&nbsp;</TD>
<TD>Numele copiilor:</TD>
<TD><INPUT TYPE=”TEXT” NAME=”copii”></TD>
</TR>

<TR>
<TD>Ziua nuntii:</TD>
<TD><INPUT TYPE=”TEXT” NAME=”zi_nunta”></TD>
</TR>

</TABLE>

103

<BR>
<BR>
<BR>
<INPUT TYPE=”SUBMIT” VALUE=”Trimite”>
<BR>
<BR>
<INPUT TYPE=”RESET” VALUE=”Sterge datele”>

</FORM>
</BODY>
</HTML>

3. Dedicaþi un interval de timp studiului scriptului PHP, acordând o atenþie specialã modului de utilizarea instrucþiunilor condiþionale pentru validarea datelor din formular.
4. Orientaþi un browser Web spre adresa URL a fiºierului HTML încãrcat anterior. Ecranul browserului trebuie sã fie asemãnãtor celui prezentat în figura 6-1. Introduceþi valori în mai multe câmpuri si apoi executaþi clic pe butonul „Trimite".

<figura 6-1>Formularul de introducere a datelor pentru proiectul 6-2.

< ecran> Contact Information
<cãmpuri>
Nickname:
Title:
Fisrt name:
Middle name:
Last name:
Primary Email: Secondary Email:
Company Name:
Office address: Home address:
City:
State:
Zip:
Phone:
Birthday:
Spouse name: Childres Names:
Anniversary:
</câmpuri>
<buton>Submit </buton>
<buton>Clear the form </buton>

</figura 6-1>

104

5. La executarea scriptului, acesta verificã dacã porecla, prenumele, numele ºi adresa de e-mail existã; dacã vreunul din aceste câmpuri lipseºte, scriptul afiºeazã un mesaj de eroare. Un rezultat caracteristic este prezentat în figura 6-2.

<figura 6-2> Datele de ieºire ale proiectului 6-2, afiºând erorile de validare.

Nickname is required.
First same is required.
Last name is required.
Primary email address is required.
Please use your browser's back button to return to tbe form, correct the errors, and re-submit the form.

</figura 6-2>

<Test de evaluare>
1. Scrieþi o instrucþiune if care atribuie variabilei $y valoarea l dacã variabila $x are valoarea l, în caz contrar atribuind variabilei $y valoarea 2.
2. Scrieþi o instrucþiune switch care atribuie valoarea 5 variabilei $y dacã variabila $x are valoarea l, respectiv valoarea 15 dacã variabila $x are valoarea 2, valoa­rea 20 dacã variabila $x are valoarea 3, valoarea -1 în celelalte situãrii.
3. Scrieþi o buclã for care are ca date de ieºire o serie de asteriscuri; numãrul asteriscurilor trebuie sã fie dat de valoarea variabilei $stele.
4. Scrieþi o instrucþiune if care atribuie variabilei $y valoarea l dacã variabila $x are valoarea l, respectiv valoarea 3 dacã variabila $x are valoarea 2, valoarea 5 dacã variabila $x are valoarea 3, valoarea -l în celelalte situãrii.
</Test de evaluare>

Visits: 440
   
 Top


Advertise on our site! Click here

 powered by Peperoni.de Users online right now: 15371   Help/FAQ   Terms   Imprint