Home » Resurse Web Design » Utilizarea functiilor in PHP

 
 
 

Utilizarea functiilor in PHP

Scopuri

• învăţaţi să apelaţi funcţiile
• învăţaţi să atribuiţi unei variabile numele unei funcţii                                            
• învăţaţi să ascundeţi mesajele de eroare generate în timpul execuţiei unei funcţii
• învăţaţi să folosiţi programele rezidente în fişierele externe
• învăţaţi să definiţi o funcţie
• învăţaţi să folosiţi variabile globale, locale si statice
• învăţaţi să folosiţi referinţele

În Modulul 2 a fost prezentată noţiunea de funcţie, care simplifică efectuarea unei varietăţi de calcule. În cadrul acestui modul, veţi învăţa mai multe despre utilizarea funcţiilor şi despre modul de definire a propriilor dumneavoastră funcţii.

Utilizarea functiilor in PHP

Procesul de executare a unei funcţii se numeşte utilizarea, apelarea sau invocarea funcţiei. Pentru a folosi o funcţie, scrieţi numele funcţiei, urmat de o pereche de paranteze. De exemplu, funcţia rand(), care generează un număr întreg aleator, poate fi apelată astfel:

rand();

Majoritatea funcţiilor preiau argumente, reprezentând valori, de intrare care influen¬ţează operarea şi rezultatul funcţiei. Pentru a specifica argumente, acestea se inse¬rează între paranteze; dacă specificaţi mai mult de un argument, fiecare argument trebuie separat de vecinul său prin intermediul unei virgule. Argumentul unei funcţii poate fi o valoare literală, o variabilă sau o expresie.
Unele funcţii PHP au argumente opţionale, care pot fi specificate sau omise, în conformitate cu intenţiile dumneavoastră. De exemplu, funcţia rând () are două argumente opţionale. Primul argument al funcţiei indică valoarea întreagă aleatoare cea mai mică pe care o va returna funcţia; al doilea argument indică valoarea cea mai mare. Dacă omiteţi ambele argumente, funcţia returnează o valoare cuprinsă între 0 şi cel mai mare rezultat posibil. Dacă doriţi, puteţi specifica primul argu¬ment, omiţându-1 pe al doilea:

rand(100);

106 

Astfel, funcţia este obligata să returneze o valoare cuprinsă între 100 şi cel mai mare rezultat posibil.
Ca şi rand(), majoritatea funcţiilor returnează valori. Puteţi folosi într-o expresie valoarea returnată de o funcţie. O situaţie foarte frecventă în care se procedează astfel o constituie utilizarea valorii returnate de o funcţie într-o expresie de atribuire, astfel încât valoarea să fie accesibilă în mod repetat fără a se invoca funcţia de mai multe ori. De exemplu:

$gogoasa = rand(1, 12);

Când se produce o eroare în timpul execuţiei unei funcţii, PHP generează mesaje de eroare. Uneori, asemenea mesaje de eroare sunt nedorite. În acest caz, puteţi suprima generarea mesajelor de eroare prin prefixarea numelui funcţiei invocate cu ajutorul caracterului @. De exemplu,, pentru a suprima mesajele de eroare care pot apărea în timpul execuţiei funcţiei f ( ), invocaţi această funcţie după cum urmează:

Y = @f(x);

<Test „la minut”>
• Scrieri o instrucţiune care atribuie variabilei $x un număr întreg aleator cuprins între l şi 10.
• Scrieri o instrucţiune care invocă funcţia sensibil_la_erori(), care nu preia nici un argument şi nu returnează nici un rezultat, suprimând toate mesajele de eroare rezultate.
</Test „la minut”>

Utilizarea fişierelor incluse
Funcţiile PHP vă permit să obţineri accesul la programe PHP scrise anterior, create de dumneavoastră sau de către un alt programator în limbajul PHP. Un alt mecanism care vă permite să obţineri accesul la programele scrise anterior îl consti¬tuie instrucţiunea require, care are următoarea formă:

require(nume_fisier);

Argumentul nume_fisier are forma unui şir, deci o instrucţiune require caracteristică poate avea următorul aspect:

require(„fisierul.inc”);

Când este încărcat un script PHP care conţine o instrucţiune require, conţinutul fişierului specificat – cunoscut sub numele de fişier de includere – este inserat în script,

<notă>
Răspunsuri la test:
• $x = rand(1,  10);
• @sensibil_la_erori( ) ;

107

înlocuind instrucţiunea require. Dacă fişierul de includere conţine linii de program PHP, trebuie să includă etichetele <?php şi ?>, amplasate în locaţiile adecvate.
Deşi se obişnuieşte ca un fişier de includere să primească extensia de fişier inc, nu este obligatoriu să procedaţi astfel. Unii programatori PHP preferă să folosească extensia de fişier php pentru toate fişierele pe care le creează.
Instrucţiunea require vă poate scuti de un mare volum de muncă. De exemplu, să presupunem că scrieţi o aplicaţie PHP care este alcătuită din mai multe scripturi, iar fiecare script afişează o pagină HTML care conţine informaţii standard în partea de sus a paginii. Puteţi crea un fişier script special, denumit antet.inc, care conţine următoarele linii de program:

<HTML>
<HEAD>
<TITLE>Aplicatia care pune capac la toate aplicatiile</TITLE>
</HEAD>
<BODY>
<H1>Aceasta este aplicatia care incheie toate aplicatiile</H1>
<H5>Copyring 2005, Fane Programatorul si Compania SRL.</H5>
si asa mai departe…

Prin inserţia instrucţiunii

require(„antet.inc”);

la începutul fiecărui script, determinaţi programul PHP să includă conţinutul acelui fişier ca şi cum conţinutul respectiv ar face parte din acel script. Acest proce¬deu poate simplifica întreţinerea programului, deoarece informaţiile standard pot fi rezidente într-un singur fişier, ceea ce le face uşor de localizat şi revizuit.
<Sfatul expertului>
Întrebare:    Dacă doresc să obţin numele unui fişier de includere din program, cum pot proceda?
Răspuns:    Instrucţiunea require este prelucrată la încărcarea scriptului PHP asociat, înaintea legări valorilor la variabilele corespunzătoare, în consecinţă, nu puteţi folosi o expresie pentru, a specifica numele fişierului care urmează a fi inclus de către o instrucţiune require.
Şi totuşi puteţi folosi instrucţiunea include, care este o instrucţiune executabilă ce determină evaluarea scriptului PHP dintr-un fişier specificat. De exemplu, instrucţiunea include din următorul program evaluează fişierul f isier1:

$x = 1;
include(„fişier” . $x  .   „. inc”);
La evaluarea fişierului de includere, instrucţiunile PHP pe care le conţine sunt executate ca şi cum ar fi apărut în textul scriptului apelant</Sfatul expertului>

108

Instrucţiunea corelată require_once asigură faptul că fişierul specificat este inclus o singură dată într-un script dat. În cazul în care creaţi fişiere de includere care folosesc instrucţiunea require pentru a include conţinutul altor fişiere de includere, puteţi găsi instrucţiunea require_once utilă.

<Test „la minut”>
• Scrieţi o instrucţiune care include conţinutul fişierului subsol.inc în textul sursă curent.
• Scrieţi o instrucţiune care include conţinutul fişierului subsol. inc în textul sursă curent, asigurându-vă că fişierul este inclus o singură dată. </Test „la minut”>

Definirea unei funcţii
În afară de a utiliza funcţiile din biblioteca de funcţii a limbajului PHP, vă puteţi defini şi folosi propriile funcţii. Pentru a defini o funcţie, respectaţi modelul următor:

function nume_functie(nume_argument)

// aici se insereaza corpul functiei

In cadrul modelului, nume_functie este numele funcţiei, iar nume_argument este numele argumentului funcţiei, în PHP, numele funcţiilor nu prezintă sensibilitate la diferenţa între majuscule şi minuscule; ca atare, f () şi F() reprezintă referiri la aceeaşi funcţie. Cuvântul cheie function, numele funcţiei şi lista cu argumente alcătuiesc antetul funcţiei. Termenul de corp al funcţiei se referă la instrucţiunile incluse între parantezele acolade care urmează după antetul funcţiei. Instrucţiunile din corpul funcţiei sunt executate atunci când funcţia este apelată.
Dacă doriţi să definiţi o funcţie care nu are argumente, puteţi omite nume_argument; dacă doriţi să definiţi o funcţie cu mai multe argumente, puteţi include argumente suplimentare după nume_argument, fiecare argument fiind separat de vecinul său prin intermediul unei virgule. Parantezele şi numele argumentelor incluse între acestea poartă numele de listă cu argumente. Ca exemplu, iată o funcţie care calculează aria unui dreptunghi:

function calculeaza_arie($inaltime,$latime)

    
return$inaltime * $latime;

<notă>
Răspunsuri la test:
• require(„subsol.inc”);
• require_once(„subsol.inc”);</notă>

109

Lista cu argumente a funcţiei calculeaza_arie include argumentele $latime şi $inaltime. Corpul funcţiei este alcătuit dintr-o singură instrucţiune; cu toate acestea, corpul unei funcţii poate conţine un număr arbitrar de instrucţiuni. Dacă doriţi ca o funcţie să returneze o valoare, trebuie să determinaţi funcţia să execute o instruc¬ţiune return care furnizează valoarea respectivă. Instrucţiunea return determină sistarea executării funcţiei; nu este necesar ca aceasta să fie ultima instrucţiune fizică din corpul funcţiei. Dacă definiţi o funcţie care nu are nici o instrucţiune return, funcţia va returna valoarea specială NULL.

Apelarea unei funcţii definite de utilizator
O funcţie definită de utilizator poate fi apelată în acelaşi mod ca o funcţie încorporată. De exemplu, iată o instrucţiune care apelează funcţia calculeaza_arie:

$arie = calculeaza_arie(2,4);

Valorile argumentelor efective — 2 şi 4 – le înlocuiesc pe acelea ale argumentelor formale din corpul funcţiei calculeaza_arie, care se comportă ca şi cum ar fi fost scrisă astfel:
 

return 2 * 4;

<Sugestie>
În PHP 3, definiţia unei funcţii trebuie să preceadă linia de program care apelează funcţia, în PHP 4, definiţia unei funcţii poate fi plasată fie anterior liniei de program care apelează funcţia, fie după aceasta. </Sugestie>

Terminarea execuţiei unei funcţii
O instrucţiune return determină sistarea execuţiei funcţiei care o conţine. In cazul în care doriţi să sistaţi prelucrarea unui întreg script, puteţi invoca funcţia exit(). Iată un exemplu simplu:

function stop()

    
exit();

echo „<BR>Unu…”;
echo „<BR>Doi…”,
stop();
echo „<BR>Trei!”;

Rezultatul acestui script include cuvintele unu şi doi, dar nu şi cuvântul trei. Prin apelarea funcţiei stop() se execută corpul funcţiei respective; la invocarea funcţiei, exit(), execuţia scriptului se încheie.

110

Funcţii recursive
Este posibil ca o funcţie din PHP să se auto-apeleze. O funcţie care procedează astfel se numeşte funcţie recursivă. Totuşi, dacă nu aţi studiat informatica, este recomandabil să nu scrieţi funcţii recursive. Cu toate acestea, puteţi scrie accidental o asemenea funcţie, deci este util să ştiţi unele noţiuni referitoare la aceasta.
Programul următor defineşte şi invocă o funcţie recursivă simplă:

function recursor()

    
return recursor();

$x = recursor();

La invocarea funcţiei recursor(), aceasta invocă imediat funcţia recursor(), care se auto-invocă instantaneu. Astfel, funcţia recursor() este invocată în mod repetat, până când se produce o eroare cunoscuta sub numele de depăşire în sens pozitiv a stivei, (stack overflow). Dacă programul dumneavoastră se încheie cu o depăşire în sens pozitiv a stivei, o posibilă cauză poate consta într-o recursie incorectă.

Definirea argumentelor prestabilite
PHP 4 vă permite să definiţi funcţii cu argumente prestabilite. Dacă invocaţi o funcţie care are un argument prestabilit, dar nu furnizaţi nici o valoare pentru argumentul respectiv, argumentul ia o valoare prestabilită specificată. Iată un exemplu simplu:

function impozit_vanzari($cantitae , $rata = 0.0725)

   
echo „<BR>cantitate=$cantitate”;
   
echo „<BR>rata=$rata”;
   
return $suma * $rata;

$cumparaturi = 123.45;
echo „<BR>cumparaturi = $cumparaturi”;
$impozit = impozit_vanzari($cumparaturi,0.08);
echo „<BR>impozit = $impozit”;

$cumparaturi = 123.45;
echo „<BR>cumparaturi = $cumparaturi”;
$impozit = impozit_vanzari($cumparaturi);
echo „<BR>impozit = $impozit”;

Funcţia impozit_vanzari preia două argumente: un argument obligatoriu, denumit $cantitate, şi un argument prestabilit, denumit $rata. Dacă apelaţi funcţia şi fur¬nizaţi un singur argument, valoarea argumentului respectiv se consideră ca fiind valoarea argumentului $cantitate, iar valoarea 0.0725 se foloseşte ca valoare a argumentului $rata. Astfel, la prima invocare a funcţiei, $rata are valoarea 0.08,

111

specificată drept al doilea argument al funcţiei.Cu toate acestea, la a doua invocare a funcţiei, $rata are valoarea 0.0725 deoarece este specificată valoarea unui singur argument.

<Sfatul specialistului>
Întrebare:   Este posibil ca o funcţie să aibă mai multe argumente prestabilite? Răspuns:    Da, dar rezultatul este deseori confuz. De exemplu să considerăm următorul antet de funcţie:
 
function doua_rele($timp = 1, $spatiu = 2)
 
Care trebuie să fie rezultatul dacă este invocată următoarea funcţie?
 
x = doua rele(3);
Cu alte cuvinte, argumentul trebuie folosit ca valoare a variabilei $timp sau ca valoare a variabilei $spatiu? PHP are reguli care controlează asemenea situaţii, dar regulile respective pot fi derutante.Ca atare, cel mai bine este să evitaţi problema prin definirea unui singur argument prestabilit  şi prin poziţionarea unui argument prestabilit pe ultima poziţie în lista cu arumente. </Sfatul specialistului>

<Test „la minut>
• Scrieţi definiţia unei funcţii care calculează aria unui cerc, dacă se cunoaşte raza acestuia.
• Scrieri definiţia unei funcţii care are ca date de ieşire blocul <HEAD> al unei pagini HTML, incorporând în cadrul unui bloc <TITLE> şirul dat ca argument al funcţiei. </Test „la minut>

<notă>
Răspunsuri la test
•function arie_circulara($raza)

return 3.14159 * $raza *$raza
}
• function bloc_antet($titlu)

echo „<HEAD>\n”;
echo „<TITLE>$titlu</TITLE\n”>
echo „</HEAD>\n”;
}
</notă>

112

Variabile şi referinţe PHP
Variabilele PHP sunt de două tipuri principale:
• Variabile globale
• Variabile locale
Variabilele globale sunt create în exteriorul oricărei funcţii, în timp ce variabilele locale sunt create în interiorul unei funcţii. Această secţiune descrie variabilele globale şi locale, precum şi referinţele, care constituie o modalitate specială de referire la o variabilă.

Utilizarea variabilelor globale
Aşa cum s-a explicat anterior, variabilele globale sunt declarate în afara oricărei funcţii. Variabilele de formular reprezintă un tip important de variabile globale. Cu toate acestea, puteţi crea o variabilă globală atribuindu-i acesteia o valoare, atâta timp cât instrucţiunea de atribuire respectivă nu se află în interiorul corpului unei funcţii.
Totalitatea locurilor unde este accesibilă o variabilă se numeşte domeniu de existenţă al variabilei. În mod prestabilit, variabilele globale nu pot fi accesibile din interiorul corpului unei funcţii; cu alte cuvinte, domeniul de existentă al unei variabile globale, nu include corpurile funcţiilor. Dacă doriţi să obţineţi accesul la o variabilă globală în cadrul unei funcţii, puteţi extinde domeniul de existenţă al variabilei prin speci¬ficarea numelui variabilei în interiorul unei instrucţiuni global. Instrucţiunea global are următoarea formă:

Global variabila1, variabila2, variabila3

După cuvântul cheie global pot urma una sau mai multe variabile; fiecare variabilă este separată de vecina sa prin intermediul unei virgule. Iată un exemplu care prezintă modul de funcţionare a instrucţiunii global:

function nu_este_global()

   
echo „<BR>nuglobal: x=$x”;

function este_global()

    
global $x;
    
echo „<BR>global: x=$x”;

$x = 1;
nu_este_global();
este_global;

Dacă rulaţi acest script, veţi primi următoarele rezultate:

nuglobal: x =
global: x = 1

113

Reţineţi că variabila $x primeşte numele unei valori în afara corpului oricăreia dintre funcţii; cu alte cuvinte, $x este o variabilă globală, în consecinţă, variabila $x nu se află în cadrul domeniului de existenţă al funcţiei nu_este_global() şi, în consecinţă, instrucţiunea echo din cadrul funcţiei nu_este_global() nu afişează nici o valoare. Cu toate acestea, funcţia este_global() conţine o instrucţiune global care extinde domeniul de existenţă al variabilei $x; ca atare, instrucţiunea echo din cadrul funcţiei este_global() afişează valoarea variabilei $x.

Utilizarea variabilelor locale şi a variabilelor statice
Domeniul de existentă, care descrie unde este disponibilă o anumită variabilă, reprezintă o importantă caracteristică a variabilelor. O altă caracteristică importantă este durata de viaţă, care descrie când este disponibilă o anumită variabilă.
Variabilele globale sunt create atunci când li se atribuie o valoare şi există pe durata unui program. Spre deosebire de acestea, variabilele locale sunt create la apelarea funcţiei asociate şi sunt distruse la încheierea apelului la funcţia respectivă. În consecinţă, variabilele locale sunt disponibile numai pe durata execuţiei funcţiei asociate.
Argumentele funcţiilor constituie un tip important de variabilă locala. Cu toate acestea, puteţi crea o variabilă locală prin simpla atribuire a unei valori unei variabile din interiorul unei funcţii. Pentru a ilustra deosebirea dintre variabilele locale şi cele globale, iată un script care defineşte o variabilă locală denumită $x şi o variabilă globală cu acelaşi nume:

function are_local()

  
$x = 2;
  
echo „<BR>In corpul functiei: x = $x”;

$x = 1
echo „<BR>In corpul scriptutlui: x = $x”;
are_local();
echo „<BR>In corpul scriptului: x = $x”;

În cazul în care rulaţi acest script, veţi primi următoarele rezultate:

În corpul scriptului: x = 1
În corpul functiei: x = 2
În corpul scriptului: x = 1

Remarcaţi diferenţa dintre cele două variabile, chiar dacă numele variabilelor este acelaşi. Domeniul de existentă al variabilei globale $x nu se extinde în interiorul corpului funcţiei are_local(), iar domeniul de existenţă al variabilei locale $x nu se extinde dincolo de corpul funcţiei respective. Cu alte cuvinte, domeniile de existenţă ale celor două variabile sunt complet distincte şi, ca atare, PHP nu poate confunda valorile variabilelor respective.

114 

Uneori, doriţi ca o variabilă locală să-şi păstreze valoarea de la un apel al funcţie asociate la altul. Altfel spus, nu doriţi ca variabila să fie distrusă la încheierea apelului la funcţie. Puteţi folosi instrucţiunea static pentru a specifica acest comporta¬ment. Forma instrucţiunii static este similară cu aceea a instrucţiunii global, cu excepţia utilizării cuvântului cheie static în locul cuvântului cheie global. O varia¬bilă afişată într-o instrucţiune static este cunoscută sub numele de variabilă locală statică, sau, mai concis, variabilă statică. Iată un exemplu care prezintă modul de utilizare a unei variabile statice:

function nu_este_static();

   
$x = $x  1;
   
echo „<BR>x=$x

function este_static();

   
static $x;
   
$x = $x  1;
   
echo „<BR>x=$x

nu_este_static();
nu_este_static();
nu_este_static();

este_static();
este_static();
este_static();

Dacă rulaţi acest script, veţi primi următoarele rezultate:

x=1
x=1
x=1
x=1
x=2
x=3

Observaţi că variabila locală $x, definită în cadrul funcţiei nu_este_static(), este creata din nou la fiecare apelare a funcţiei, în  consecinţă, valoarea sa este întotdeauna afişată ca fiind egală cu 1. Prin contrast, variabila statică $x, definită în cadrul funcţiei este_static(), îşi păstrează valoarea de la un apel al funcţiei la următorul; ca atare, valoarea sa creşte de fiecare dată când este executată funcţia.
De asemenea, reţineţi că domeniile de existenţă ale variabilei locale $x şi ale varia¬bilei statice $x sunt distincte; în consecinţă, valorile celor două variabile sunt dife¬rite, chiar dacă variabilele au acelaşi nume.

115

Utilizarea referinţelor (PHP 4)

In mod prestabilit, argumentele transferate unei funcţii PHP sunt transmise prin valoare, ceea ce înseamnă că valorile argumentelor sunt copiate şi funcţiile utilizează copii ale valorilor argumentelor lor, nu argumentele în sine. Ca o consecinţă, o funcţie PHP nu poate modifica valorile argumentelor sale. Acest fapt este în general util, deoarece astfel funcţiile devin mai uşor de înţeles dacă se limitează la a returna o valoare, fără a modifica valori.
Totuşi, puteţi stabili ca o funcţie să aibă posibilitatea de a modifica valoarea unui argument, specificând ca argumentul să fie transferat prin referinţă. Când un argu¬ment este transferat prin referinţă, valoarea sa nu este copiată; funcţia lucrează cu valoarea argumentului şi are libertatea de a modifica acea valoare. Pentru a specifica faptul că un argument urmează a fi transferat prin referinţă, argumentul va fi prefixat cu un caracter ampersand (&). Puteţi ataşa acest prefix la argument în antetul funcţiei sau în apelul la funcţie.
Iată un exemplu care prezintă apelul prin valoare şi apelul prin referinţă:

function prin_valoare($x)

   
$x = 1;

function prin_referinta(&$x)

   
$x = 1;

$y = 0
prin_valoare($y);
echo „<BR>\$y=$y”;

$y = 0
prin_valoare(&$y);
echo „<BR>\$y=$y”;

$y = 0
prin_referinta($y);
echo „<BR>\$y=$y”;

Dacă rulaţi acest script, veţi obţine următoarele date de ieşire:

$y=0
$y=1
$y=1

Reţineţi că scriptul conţine două funcţii, şi anume prin_valoare () şi prin_referinta(). Fiecare funcţie preia un singur argument, denumit $x. Antetul funcţiei prin_referinta() specifică faptul că argumentul său este transferat prin referinţă; argumentul funcţiei prin_valoare() este transferat prin valoare, în conformitate cu practica prestabilită folosiţi în limbajul PHP.

116 

Fiecare funcţie încearcă să modifice valoarea argumentului său. Primul paragraf al programului invocă funcţia prin_valoare(), transferând argumentul prin valoare. În consecinţă, funcţia lucrează cu o copie a argumentului său, iar valoarea variat $y nu se modifică.
Cel de-al doilea paragraf al programului invocă de asemenea funcţia prin_valoare(); cu toate acestea, foloseşte un caracter ampersand pentru a determina transferul referinţă al valorii variabilei $y. În consecinţă, funcţia modifică valoarea argumentului său, care se transformă din 0 în 1.
Cel de-a treilea paragraf al programului invocă funcţia prin_referinta(). Antetul funcţiei respective foloseşte un caracter ampersand pentru a specifica faptul că valoarea argumentului său este transferată prin referinţă, în consecinţă, funcţia modifică valoarea argumentului său, care se transformă din 0 în l.

<Sfatul specialistului>
Întrebare:    De ce se folosesc referinţele sau apelurile prin referinţă?
Răspuns: Prin utilizarea referinţelor se evită suprasarcina de copiere a valorilor argumentelor şi implicit se obţine o viteză mai mare de execuţie a programului. Cu toate acestea, programele devin astfel mai dificil de înţeles, iar| referinţele sau apelurile prin referinţă pot cauza erori de program. Cel mai indicat este să evitaţi referinţele, acolo unde este posibil, şi să definiţi funcţii care returnează valori, şi nu funcţii care modifică valorile propriilor argumente. Cu toate acestea, este important să înţelegeţi noţiunile privind referinţele, astfel încât să puteţi lucra cu programe scrise de programatori care nu respectă aceste sfaturi.
</Sfatul specialistului>

<Test „la minut”>
• Scrieţi instrucţiunea care este necesară într-o funcţie pentru a se putea obţine accesul la o variabilă denumită $greutate creată în afara funcţiei.
• Scrieţi instrucţiunea care determină variabila locala $contor să-şi păstreze valoarea la mai multe invocări ale funcţiei asociate. </Test „la minut”>

Proiect 7-1: Revenire la formularul cu pei de contact
În cadrul acestui proiect, veţi crea din nou formularul HTML şi scriptul PHP intitulat „Proiect 6-2″. Formularul permite unui utilizator să introducă date personale de categoria celor folosite într-o agendă cu adrese de e-mail.
<notă>
Răspunsuri la test:
• global $greutate;
• static $contor;</notă>

117

Scriptul PHP validează datele de intrare introduse de utilizator, asigurându-se că au fost introduse date în câmpurile obligatorii.

Scopurile proiectului
• prezentarea modului de funcţionare a instrucţiunii include
• prezentarea modului de definire şi creare a unei funcţii
• Prezentarea tehnicii racordurilor de program

Pas cu pas
1. Plasaţi următorul script PHP într-un fişier denumit p-7-1.php şi încărcaţi acest fişier în serverul dumneavoastră PHP:

<?php

  
include „p-7-1.inc”;

  
function validare_formular()
  

      
global $porecla, $prenume, $nume, $email;

      
$erori = 0;
 
if(!trim($porecla))

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

if(!trim($prenume))

  
echo „<BR><B>Prenumele</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++;

 
switch($erori)
  

  
case 0:
    
return TRUE;

  
case 1:
   
echo „<BR><BR><BR>Va rugam folositi butonul „;
   
echo „Back al browserului dumneavoastra”;
     
echo „pentru a reveni la formular, „;

118

     
echo „corectati eroarea si”;
     
echo „ reexpediati formularul.”;
  
return FALSE;

default:
 
echo „<BR><BR><BR>Va rugam folositi butonul „;
 
echo „Back al browserului dumneavoastra”;
     
echo „pentru a reveni la formular, „;
     
echo „corectati eroarea si”;
     
echo „ reexpediati formularul.”;
 
return FALSE;
 


function actualizare_baza_de_date()

   
echo „<BR>Actualizeaza baza de date….”;

$ok = validare_formular();
if ($ok)
    
actualizare_baza_de_date();

?>

</BODY>
</HTML>

2. Plasaţi următorul text HTML într-un fişier denumit p-7-1 .inc şi încărcaţi acest fişier în serverul dumneavoastră, plasându-l în acelaşi catalog ca şi fişierul p-7-1 .php:

<HTML>
<HEAD>
<TITLE>Proiect 7-1</TITLE>
</HEAD>
</BODY>

3. Plasaţi următorul text HTML într-un fişier denumit p-7-1 .html şi încărcaţi acest fişier în serverul dumneavoastră, plasându-l în acelaşi catalog ca şi fişierul p-7-1 .php:

<HTML>
<HEAD>
<TITLE>Proiect p-7-1</TITLE>
</HEAD>
<!–Fisier p-7-1.html –>
<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>

119

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

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

120

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

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

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

4. Alocaţi un timp studiului scriptului PHP. acordând o atenţie specială modificărilor operate în proiectul iniţial, prin care au fost incluse un fişier de includere şi anumite funcţii, în particular, observaţi că funcţia actualizare_baza_de_date () conţine o singură instruc¬ţiune echo. O asemenea funcţie, cunoscută sub numele de racord, este folosită în faza de dezvoltare a programului, astfel încât programul să poată fi rulat şi testat chiar înainte de a fi fost scris în totalitate. Ulterior, corpul funcţiei actualizare_baza_de_date() va fi rafinat, urmând să conţină instrucţiuni care realizează efectiv actualizarea unei baze de date.

121

5. 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 continuare. Introduceţi valori pentru mai multe câmpuri şi apoi executaţi clic pe butonul Trimite.

<ecran>
<câmpuri>
Contact Information
NickName:
Title:
First Name:
Middle Name:
Last Name:
Primary Email:                          Secundary Email:
Company Name:
Office Address:                         Home Address:
City:
State:
Zip:
Phone:
Spouse Name:                           Childres Names:
Anniversary:
</câmpuri>
<buton> Submit</buton>
<buton>Clear the Form</buton>
</ecran>

6. La executarea scriptului, acesta verifică dacă porecla, prenumele, numele şi adresa de e-mail sunt prezente. Dacă oricare dintre aceste câmpuri lipseşte, scriiptul afişează un mesaj de eroare. Un rezultat caracteristic este prezentat în continuare.

<Ecran>
Primary email address is required

Please use your browser’s back button to return to the form, correct the error, and re-submit the form.
</Ecran>

<Test de evaluare>
1. Scrieţi o instrucţiune care invocă funcţia test(), transferând valorile l şi 2 ca argumente.
2. Scrieţi o instrucţiune care invocă funcţia live(), transferând ca argumente valorile l şi 2; asigurati-vă că nu se vor genera mesaje de eroare în timpul execuţiei funcţiei.

122

3. Scrieţi o instrucţiune care include conţinutul fişierului antet.php ca parte a scriptului curent.
4. Scrieţi definiţia unei funcţii numite patrat(), care calculează aria unui pătrat, dacă este dată lungimea unei laturi a pătratului.
5. Scrieţi o definiţie a unei funcţii denumite contor(), care incrementează şi returnează valoarea unei variabile locale statice.
</test de evaluare>

Eticheta:

Comentariile sunt inchise

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

Resurse web design