Home » Resurse Web Design » Scriere programe PHP

 
 
 

Scriere programe PHP

Modulul 6:

Scrierea instrucţiunilor PHP condiţionale
Scopuri
• î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.

Utilizarea valorilor de tip adevărat/fals
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)

** / %

*+ – .

*< <= > >=

*= =  !=  = = =  ! = =

*&

*

*

*&&

*

*?:

*=   +=  -=  *=  /=  .=  %=  &=  =  = ~=  <<=  >>=

*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”>

Scrierea instrucţiunilor if simple
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.

Proiect 6-1: Testarea valorilor numerice
Î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

Scopul proiectului
• Prezentarea modului de funcţionare a instrucţiunii if

Pas cu pas
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”>
Scrierea unor instrucţiuni if mai complexe
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 )

echo „<BR>Numarul este mai mare decăt 10.”;

echo „<BR>Deci, trebuie sa fie mai mare.”;

Î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 )

echo „<BR>Numarul este mai mare decăt 10.”;

echo „<BR>Deci, trebuie sa fie mai mare.”;

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

echo „<BR>Numărul este mai mic decât 10.”;

echo „<BR>Este un numar mic.”;

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”>

Scrierea instrucţiunilor switch, break şi default

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)

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”;

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”>

Scrierea instrucţiunilor for
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”>

Scrierea instrucţiunilor while şi do while
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)

<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++;

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

$suma  += $n;

$n++;

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>

atunci puteţi înlocui liniştit programul respectiv cu un program care foloseşte o instrucţiune do while:
do
{
<o acţiune oarecare>;
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”>

Proiect 6-2: Validarea datelor de intrare introduse de utilizator
Î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.

Scopurile proiectului
• 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

Pas cu pas
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))

echo „<BR><B>Porecla</B> este obligatorie.”;

$erori++;

if (!trim($prenume))

echo „<BR><B>Prenume</B> este obligatoriu.”;

$erori++;

if (!trim($nume))

echo „<BR><B>Numele</B> este obligatoriu.”;

$erori++;

if (!trim($email))

echo „<BR><B>Adresa primara de e-mail</B>”.

„ este obligatorie.”;

$erori++;

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”> </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”> </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”> </TD>

<TD> </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”> </TD>

<TD> </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”> </TD>

<TD> </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”> </TD>

<TD> </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”> </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>

Eticheta:

Comentariile sunt inchise

Ne pare rau, dar nu poti lasa un comentariu pentru acest post.

Resurse web design