<titlu>Utilizarea functiilor</titlu>
<titlu>Scopuri</titlu> i4u1un
• invatati sa apelati functiile
• invatati sa atribuiti unei variabile numele unei functii
• invatati sa ascundeti mesajele de eroare generate in timpul
executiei unei functii
• invatati sa folositi programele rezidente in fisierele externe
• invatati sa definiti o functie
• invatati sa folositi variabile globale, locale si statice
• invatati sa folositi referintele
In Modulul 2 a fost prezentata notiunea de functie, care simplifica efectuarea
unei varietati de calcule. In cadrul acestui modul, veti invata
mai multe despre utilizarea functiilor si despre modul de definire a propriilor
dumneavoastra functii.
<titlu>Utilizarea unei functii</titlu>
Procesul de executare a unei functii se numeste utilizarea, apelarea sau invocarea
functiei. Pentru a folosi o functie, scrieti numele functiei, urmat de o pereche
de paranteze. De exemplu, functia rand(), care genereaza un numar intreg
aleator, poate fi apelata astfel:
rand();
Majoritatea functiilor preiau argumente, reprezentand valori, de intrare
care influen¬teaza operarea si rezultatul functiei. Pentru a specifica argumente,
acestea se inse¬reaza intre paranteze; daca specificati mai mult de
un argument, fiecare argument trebuie separat de vecinul sau prin intermediul
unei virgule. Argumentul unei functii poate fi o valoare literala, o variabila
sau o expresie.
Unele functii PHP au argumente optionale, care pot fi specificate sau omise,
in conformitate cu intentiile dumneavoastra. De exemplu, functia rand
() are doua argumente optionale. Primul argument al functiei indica valoarea
intreaga aleatoare cea mai mica pe care o va returna functia; al doilea
argument indica valoarea cea mai mare. Daca omiteti ambele argumente, functia
returneaza o valoare cuprinsa intre 0 si cel mai mare rezultat posibil.
Daca doriti, puteti specifica primul argu¬ment, omitandu-1 pe al doilea:
rand(100);
Astfel, functia este obligata sa returneze o valoare cuprinsa intre 100
si cel mai mare rezultat posibil.
Ca si rand(), majoritatea functiilor returneaza valori. Puteti folosi intr-o
expresie valoarea returnata de o functie. O situatie foarte frecventa in
care se procedeaza astfel o constituie utilizarea valorii returnate de o functie
intr-o expresie de atribuire, astfel incat valoarea sa fie
accesibila in mod repetat fara a se invoca functia de mai multe ori. De
exemplu:
$gogoasa = rand(1, 12);
Cand se produce o eroare in timpul executiei unei functii, PHP
genereaza mesaje de eroare. Uneori, asemenea mesaje de eroare sunt nedorite.
In acest caz, puteti suprima generarea mesajelor de eroare prin prefixarea
numelui functiei invocate cu ajutorul caracterului @. De exemplu,, pentru a
suprima mesajele de eroare care pot aparea in timpul executiei functiei
f ( ), invocati aceasta functie dupa cum urmeaza:
Y = @f(x);
<Test „la minut">
• Scrieri o instructiune care atribuie variabilei $x un numar intreg
aleator cuprins intre l si 10.
• Scrieri o instructiune care invoca functia sensibil_la_erori(), care
nu preia nici un argument si nu returneaza nici un rezultat, suprimand
toate mesajele de eroare rezultate.
</Test „la minut">
<titlu>Utilizarea fisierelor incluse</titlu>
Functiile PHP va permit sa obtineri accesul la programe PHP scrise anterior,
create de dumneavoastra sau de catre un alt programator in limbajul PHP.
Un alt mecanism care va permite sa obtineri accesul la programele scrise anterior
il consti¬tuie instructiunea require, care are urmatoarea forma:
require(nume_fisier);
Argumentul nume_fisier are forma unui sir, deci o instructiune require caracteristica
poate avea urmatorul aspect:
require(„fisierul.inc”);
Cand este incarcat un script PHP care contine o instructiune require,
continutul fisierului specificat - cunoscut sub numele de fisier de includere
- este inserat in script,
<nota>
Raspunsuri la test:
• $x = rand(1, 10);
• @sensibil_la_erori( ) ;
inlocuind instructiunea require. Daca fisierul de includere contine linii
de program PHP, trebuie sa includa etichetele <?php si ?>, amplasate in
locatiile adecvate.
Desi se obisnuieste ca un fisier de includere sa primeasca extensia de fisier
inc, nu este obligatoriu sa procedati astfel. Unii programatori PHP prefera
sa foloseasca extensia de fisier php pentru toate fisierele pe care le creeaza.
Instructiunea require va poate scuti de un mare volum de munca. De exemplu,
sa presupunem ca scrieti o aplicatie PHP care este alcatuita din mai multe scripturi,
iar fiecare script afiseaza o pagina HTML care contine informatii standard in
partea de sus a paginii. Puteti crea un fisier script special, denumit antet.inc,
care contine urmatoarele 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 insertia instructiunii
require(„antet.inc”);
la inceputul fiecarui script, determinati programul PHP sa includa continutul
acelui fisier ca si cum continutul respectiv ar face parte din acel script.
Acest proce¬deu poate simplifica intretinerea programului, deoarece
informatiile standard pot fi rezidente intr-un singur fisier, ceea ce
le face usor de localizat si revizuit.
<Sfatul expertului>
Intrebare: Daca doresc sa obtin numele unui fisier de includere din program,
cum pot proceda?
Raspuns: Instructiunea require este prelucrata la incarcarea scriptului
PHP asociat, inaintea legari valorilor la variabilele corespunzatoare,
in consecinta, nu puteti folosi o expresie pentru, a specifica numele
fisierului care urmeaza a fi inclus de catre o instructiune require.
Si totusi puteti folosi instructiunea include, care este o instructiune executabila
ce determina evaluarea scriptului PHP dintr-un fisier specificat. De exemplu,
instructiunea include din urmatorul program evalueaza fisierul f isier1:
$x = 1; include("fisier" . $x . ". inc");
La evaluarea fisierului de includere, instructiunile PHP pe care le contine
sunt executate ca si cum ar fi aparut in textul scriptului apelant</Sfatul
expertului>
Instructiunea corelata require_once asigura faptul ca fisierul specificat este
inclus o singura data intr-un script dat. In cazul in care
creati fisiere de includere care folosesc instructiunea require pentru a include
continutul altor fisiere de includere, puteti gasi instructiunea require_once
utila.
<Test „la minut">
• Scrieti o instructiune care include continutul fisierului subsol.inc
in textul sursa curent.
• Scrieti o instructiune care include continutul fisierului subsol. inc
in textul sursa curent, asigurandu-va ca fisierul este inclus o
singura data. </Test „la minut">
<titlu>Definirea unei functii</titlu>
In afara de a utiliza functiile din biblioteca de functii a limbajului
PHP, va puteti defini si folosi propriile functii. Pentru a defini o functie,
respectati modelul urmator:
function nume_functie(nume_argument)
?
// aici se insereaza corpul functiei
?
In cadrul modelului, nume_functie este numele functiei, iar nume_argument este
numele argumentului functiei, in PHP, numele functiilor nu prezinta sensibilitate
la diferenta intre majuscule si minuscule; ca atare, f () si F() reprezinta
referiri la aceeasi functie. Cuvantul cheie function, numele functiei
si lista cu argumente alcatuiesc antetul functiei. Termenul de corp al functiei
se refera la instructiunile incluse intre parantezele acolade care urmeaza
dupa antetul functiei. Instructiunile din corpul functiei sunt executate atunci
cand functia este apelata.
Daca doriti sa definiti o functie care nu are argumente, puteti omite nume_argument;
daca doriti sa definiti o functie cu mai multe argumente, puteti include argumente
suplimentare dupa nume_argument, fiecare argument fiind separat de vecinul sau
prin intermediul unei virgule. Parantezele si numele argumentelor incluse intre
acestea poarta numele de lista cu argumente. Ca exemplu, iata o functie care
calculeaza aria unui dreptunghi:
function calculeaza_arie($inaltime,$latime)
? return$inaltime * $latime;
?
<nota>
Raspunsuri la test:
• require("subsol.inc");
• require_once("subsol.inc");</nota>
Lista cu argumente a functiei calculeaza_arie include argumentele $latime si
$inaltime. Corpul functiei este alcatuit dintr-o singura instructiune; cu toate
acestea, corpul unei functii poate contine un numar arbitrar de instructiuni.
Daca doriti ca o functie sa returneze o valoare, trebuie sa determinati functia
sa execute o instruc¬tiune return care furnizeaza valoarea respectiva. Instructiunea
return determina sistarea executarii functiei; nu este necesar ca aceasta sa
fie ultima instructiune fizica din corpul functiei. Daca definiti o functie
care nu are nici o instructiune return, functia va returna valoarea speciala
NULL.
<titlu>Apelarea unei functii definite de utilizator</titlu>
O functie definita de utilizator poate fi apelata in acelasi mod ca o
functie incorporata. De exemplu, iata o instructiune care apeleaza functia
calculeaza_arie:
$arie = calculeaza_arie(2,4);
Valorile argumentelor efective — 2 si 4 - le inlocuiesc pe acelea
ale argumentelor formale din corpul functiei calculeaza_arie, care se comporta
ca si cum ar fi fost scrisa astfel: return 2 * 4;
<Sugestie>
In PHP 3, definitia unei functii trebuie sa preceada linia de program
care apeleaza functia, in PHP 4, definitia unei functii poate fi plasata
fie anterior liniei de program care apeleaza functia, fie dupa aceasta. </Sugestie>
<titlu>Terminarea executiei unei functii</titlu>
O instructiune return determina sistarea executiei functiei care o contine.
In cazul in care doriti sa sistati prelucrarea unui intreg script,
puteti invoca functia exit(). Iata un exemplu simplu:
function stop()
? exit();
? echo „<BR>Unu…”; echo „<BR>Doi…”, stop(); echo „<BR>Trei!”;
Rezultatul acestui script include cuvintele unu si doi, dar nu si cuvantul
trei. Prin apelarea functiei stop() se executa corpul functiei respective; la
invocarea functiei, exit(), executia scriptului se incheie.
<titlu>Functii recursive</titlu>
Este posibil ca o functie din PHP sa se auto-apeleze. O functie care procedeaza
astfel se numeste functie recursiva. Totusi, daca nu ati studiat informatica,
este recomandabil sa nu scrieti functii recursive. Cu toate acestea, puteti
scrie accidental o asemenea functie, deci este util sa stiti unele notiuni referitoare
la aceasta.
Programul urmator defineste si invoca o functie recursiva simpla:
function recursor()
? return recursor();
?
$x = recursor();
La invocarea functiei recursor(), aceasta invoca imediat functia recursor(),
care se auto-invoca instantaneu. Astfel, functia recursor() este invocata in
mod repetat, pana cand se produce o eroare cunoscuta sub numele
de depasire in sens pozitiv a stivei, (stack overflow). Daca programul
dumneavoastra se incheie cu o depasire in sens pozitiv a stivei,
o posibila cauza poate consta intr-o recursie incorecta.
<titlu>Definirea argumentelor prestabilite</titlu>
PHP 4 va permite sa definiti functii cu argumente prestabilite. Daca invocati
o functie care are un argument prestabilit, dar nu furnizati nici o valoare
pentru argumentul respectiv, argumentul ia o valoare prestabilita specificata.
Iata 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”;
Functia impozit_vanzari preia doua argumente: un argument obligatoriu, denumit
$cantitate, si un argument prestabilit, denumit $rata. Daca apelati functia
si fur¬nizati un singur argument, valoarea argumentului respectiv se considera
ca fiind valoarea argumentului $cantitate, iar valoarea 0.0725 se foloseste
ca valoare a argumentului $rata. Astfel, la prima invocare a functiei, $rata
are valoarea 0.08,
specificata drept al doilea argument al functiei.Cu toate acestea, la a doua
invocare a functiei, $rata are valoarea 0.0725 deoarece este specificata valoarea
unui singur argument.
<Sfatul specialistului>
Intrebare: Este posibil ca o functie sa aiba mai multe argumente prestabilite?
Raspuns: Da, dar rezultatul este deseori confuz. De exemplu sa consideram urmatorul
antet de functie: function doua_rele($timp = 1, $spatiu = 2)
Care trebuie sa fie rezultatul daca este invocata urmatoarea functie? 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 controleaza asemenea situatii,
dar regulile respective pot fi derutante.Ca atare, cel mai bine este sa evitati
problema prin definirea unui singur argument prestabilit si prin pozitionarea
unui argument prestabilit pe ultima pozitie in lista cu arumente. </Sfatul
specialistului>
<Test „la minut>
• Scrieti definitia unei functii care calculeaza aria unui cerc, daca
se cunoaste raza acestuia.
• Scrieri definitia unei functii care are ca date de iesire blocul <HEAD>
al unei pagini HTML, incorporand in cadrul unui bloc <TITLE>
sirul dat ca argument al functiei. </Test „la minut>
<nota>
Raspunsuri la test
•function arie_circulara($raza)
? return 3.14159 * $raza *$raza
S
• function bloc_antet($titlu)
? echo "<HEAD>\n”; echo „<TITLE>$titlu</TITLE\n”> echo "</HEAD>\n";
S
</nota>
<titlu>Variabile si referinte PHP</titlu>
Variabilele PHP sunt de doua tipuri principale:
• Variabile globale
• Variabile locale
Variabilele globale sunt create in exteriorul oricarei functii, in
timp ce variabilele locale sunt create in interiorul unei functii. Aceasta
sectiune descrie variabilele globale si locale, precum si referintele, care
constituie o modalitate speciala de referire la o variabila.
<titlu>Utilizarea variabilelor globale</titlu>
Asa cum s-a explicat anterior, variabilele globale sunt declarate in afara
oricarei functii. Variabilele de formular reprezinta un tip important de variabile
globale. Cu toate acestea, puteti crea o variabila globala atribuindu-i acesteia
o valoare, atata timp cat instructiunea de atribuire respectiva
nu se afla in interiorul corpului unei functii.
Totalitatea locurilor unde este accesibila o variabila se numeste domeniu de
existenta al variabilei. In mod prestabilit, variabilele globale nu pot
fi accesibile din interiorul corpului unei functii; cu alte cuvinte, domeniul
de existenta al unei variabile globale, nu include corpurile functiilor. Daca
doriti sa obtineti accesul la o variabila globala in cadrul unei functii,
puteti extinde domeniul de existenta al variabilei prin speci¬ficarea numelui
variabilei in interiorul unei instructiuni global. Instructiunea global
are urmatoarea forma:
Global variabila1, variabila2, variabila3
Dupa cuvantul cheie global pot urma una sau mai multe variabile; fiecare
variabila este separata de vecina sa prin intermediul unei virgule. Iata un
exemplu care prezinta modul de functionare a instructiunii 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;
Daca rulati acest script, veti primi urmatoarele rezultate:
nuglobal: x = global: x = 1
Retineti ca variabila $x primeste numele unei valori in afara corpului
oricareia dintre functii; cu alte cuvinte, $x este o variabila globala, in
consecinta, variabila $x nu se afla in cadrul domeniului de existenta
al functiei nu_este_global() si, in consecinta, instructiunea echo din
cadrul functiei nu_este_global() nu afiseaza nici o valoare. Cu toate acestea,
functia este_global() contine o instructiune global care extinde domeniul de
existenta al variabilei $x; ca atare, instructiunea echo din cadrul functiei
este_global() afiseaza valoarea variabilei $x.
<titlu>Utilizarea variabilelor locale si a variabilelor statice</titlu>
Domeniul de existenta, care descrie unde este disponibila o anumita variabila,
reprezinta o importanta caracteristica a variabilelor. O alta caracteristica
importanta este durata de viata, care descrie cand este disponibila o
anumita variabila.
Variabilele globale sunt create atunci cand li se atribuie o valoare si
exista pe durata unui program. Spre deosebire de acestea, variabilele locale
sunt create la apelarea functiei asociate si sunt distruse la incheierea
apelului la functia respectiva. In consecinta, variabilele locale sunt
disponibile numai pe durata executiei functiei asociate.
Argumentele functiilor constituie un tip important de variabila locala. Cu toate
acestea, puteti crea o variabila locala prin simpla atribuire a unei valori
unei variabile din interiorul unei functii. Pentru a ilustra deosebirea dintre
variabilele locale si cele globale, iata un script care defineste o variabila
locala denumita $x si o variabila globala cu acelasi 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”;
In cazul in care rulati acest script, veti primi urmatoarele rezultate:
In corpul scriptului: x = 1
In corpul functiei: x = 2
In corpul scriptului: x = 1
Remarcati diferenta dintre cele doua variabile, chiar daca numele variabilelor
este acelasi. Domeniul de existenta al variabilei globale $x nu se extinde in
interiorul corpului functiei are_local(), iar domeniul de existenta al variabilei
locale $x nu se extinde dincolo de corpul functiei respective. Cu alte cuvinte,
domeniile de existenta ale celor doua variabile sunt complet distincte si, ca
atare, PHP nu poate confunda valorile variabilelor respective.
Uneori, doriti ca o variabila locala sa-si pastreze valoarea de la un apel
al functie asociate la altul. Altfel spus, nu doriti ca variabila sa fie distrusa
la incheierea apelului la functie. Puteti folosi instructiunea static
pentru a specifica acest comporta¬ment. Forma instructiunii static este
similara cu aceea a instructiunii global, cu exceptia utilizarii cuvantului
cheie static in locul cuvantului cheie global. O varia¬bila
afisata intr-o instructiune static este cunoscuta sub numele de variabila
locala statica, sau, mai concis, variabila statica. Iata un exemplu care prezinta
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();
Daca rulati acest script, veti primi urmatoarele rezultate:
x=1 x=1 x=1 x=1 x=2 x=3
Observati ca variabila locala $x, definita in cadrul functiei nu_este_static(),
este creata din nou la fiecare apelare a functiei, in consecinta, valoarea
sa este intotdeauna afisata ca fiind egala cu 1. Prin contrast, variabila
statica $x, definita in cadrul functiei este_static(), isi pastreaza
valoarea de la un apel al functiei la urmatorul; ca atare, valoarea sa creste
de fiecare data cand este executata functia.
De asemenea, retineti ca domeniile de existenta ale variabilei locale $x si
ale varia¬bilei statice $x sunt distincte; in consecinta, valorile
celor doua variabile sunt dife¬rite, chiar daca variabilele au acelasi nume.
<titlu>Utilizarea referintelor (PHP 4)</titlu>
In mod prestabilit, argumentele transferate unei functii PHP sunt transmise
prin valoare, ceea ce inseamna ca valorile argumentelor sunt copiate si
functiile utilizeaza copii ale valorilor argumentelor lor, nu argumentele in
sine. Ca o consecinta, o functie PHP nu poate modifica valorile argumentelor
sale. Acest fapt este in general util, deoarece astfel functiile devin
mai usor de inteles daca se limiteaza la a returna o valoare, fara a modifica
valori.
Totusi, puteti stabili ca o functie sa aiba posibilitatea de a modifica valoarea
unui argument, specificand ca argumentul sa fie transferat prin referinta.
Cand un argu¬ment este transferat prin referinta, valoarea sa nu este
copiata; functia lucreaza cu valoarea argumentului si are libertatea de a modifica
acea valoare. Pentru a specifica faptul ca un argument urmeaza a fi transferat
prin referinta, argumentul va fi prefixat cu un caracter ampersand (&).
Puteti atasa acest prefix la argument in antetul functiei sau in
apelul la functie.
Iata un exemplu care prezinta apelul prin valoare si apelul prin referinta:
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”;
Daca rulati acest script, veti obtine urmatoarele date de iesire:
$y=0
$y=1
$y=1
Retineti ca scriptul contine doua functii, si anume prin_valoare () si prin_referinta().
Fiecare functie preia un singur argument, denumit $x. Antetul functiei prin_referinta()
specifica faptul ca argumentul sau este transferat prin referinta; argumentul
functiei prin_valoare() este transferat prin valoare, in conformitate
cu practica prestabilita folositi in limbajul PHP.
Fiecare functie incearca sa modifice valoarea argumentului sau. Primul
paragraf al programului invoca functia prin_valoare(), transferand argumentul
prin valoare. In consecinta, functia lucreaza cu o copie a argumentului
sau, iar valoarea variat $y nu se modifica.
Cel de-al doilea paragraf al programului invoca de asemenea functia prin_valoare();
cu toate acestea, foloseste un caracter ampersand pentru a determina transferul
referinta al valorii variabilei $y. In consecinta, functia modifica valoarea
argumentului sau, care se transforma din 0 in 1.
Cel de-a treilea paragraf al programului invoca functia prin_referinta(). Antetul
functiei respective foloseste un caracter ampersand pentru a specifica faptul
ca valoarea argumentului sau este transferata prin referinta, in consecinta,
functia modifica valoarea argumentului sau, care se transforma din 0 in
l.
<Sfatul specialistului>
Intrebare: De ce se folosesc referintele sau apelurile prin referinta?
Raspuns: Prin utilizarea referintelor se evita suprasarcina de copiere a valorilor
argumentelor si implicit se obtine o viteza mai mare de executie a programului.
Cu toate acestea, programele devin astfel mai dificil de inteles, iar|
referintele sau apelurile prin referinta pot cauza erori de program. Cel mai
indicat este sa evitati referintele, acolo unde este posibil, si sa definiti
functii care returneaza valori, si nu functii care modifica valorile propriilor
argumente. Cu toate acestea, este important sa intelegeti notiunile privind
referintele, astfel incat sa puteti lucra cu programe scrise de
programatori care nu respecta aceste sfaturi.
</Sfatul specialistului>
<Test „la minut">
• Scrieti instructiunea care este necesara intr-o functie pentru
a se putea obtine accesul la o variabila denumita $greutate creata in
afara functiei.
• Scrieti instructiunea care determina variabila locala $contor sa-si
pastreze valoarea la mai multe invocari ale functiei asociate. </Test „la
minut">
<titlu>Proiect 7-1: Revenire la formularul cu pei de contact</titlu>
In cadrul acestui proiect, veti crea din nou formularul HTML si scriptul
PHP intitulat „Proiect 6-2". Formularul permite unui utilizator sa
introduca date personale de categoria celor folosite intr-o agenda cu
adrese de e-mail.
<nota>
Raspunsuri la test:
• global $greutate;
• static $contor;</nota>
Scriptul PHP valideaza datele de intrare introduse de utilizator, asigurandu-se
ca au fost introduse date in campurile obligatorii.
<titlu>Scopurile proiectului</titlu>
• prezentarea modului de functionare a instructiunii include
• prezentarea modului de definire si creare a unei functii
• Prezentarea tehnicii racordurilor de program
<titlu>Pas cu pas</titlu>
1. Plasati urmatorul script PHP intr-un fisier denumit p-7-1.php si incarcati
acest fisier in serverul dumneavoastra 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, „;
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. Plasati urmatorul text HTML intr-un fisier denumit p-7-1 .inc si incarcati
acest fisier in serverul dumneavoastra, plasandu-l in acelasi
catalog ca si fisierul p-7-1 .php:
<HTML>
<HEAD>
<TITLE>Proiect 7-1</TITLE>
</HEAD>
</BODY>
3. Plasati urmatorul text HTML intr-un fisier denumit p-7-1 .html si
incarcati acest fisier in serverul dumneavoastra, plasandu-l
in acelasi catalog ca si fisierul 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>
<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>
<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. Alocati un timp studiului scriptului PHP. acordand o atentie speciala
modificarilor operate in proiectul initial, prin care au fost incluse
un fisier de includere si anumite functii, in particular, observati ca
functia actualizare_baza_de_date () contine o singura instruc¬tiune echo.
O asemenea functie, cunoscuta sub numele de racord, este folosita in faza
de dezvoltare a programului, astfel incat programul sa poata fi
rulat si testat chiar inainte de a fi fost scris in totalitate.
Ulterior, corpul functiei actualizare_baza_de_date() va fi rafinat, urmand
sa contina instructiuni care realizeaza efectiv actualizarea unei baze de date.
5. Orientati un browser Web spre adresa URL a fisierului HTML incarcat
anterior. Ecranul browserului trebuie sa fie asemanator celui prezentat in
continuare. Introduceti valori pentru mai multe campuri si apoi executati
clic pe butonul Trimite.
<ecran>
<campuri>
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:
</campuri>
<buton> Submit</buton>
<buton>Clear the Form</buton>
</ecran>
6. La executarea scriptului, acesta verifica daca porecla, prenumele, numele
si adresa de e-mail sunt prezente. Daca oricare dintre aceste campuri
lipseste, scriiptul afiseaza un mesaj de eroare. Un rezultat caracteristic este
prezentat in 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. Scrieti o instructiune care invoca functia test(), transferand valorile
l si 2 ca argumente.
2. Scrieti o instructiune care invoca functia live(), transferand ca argumente
valorile l si 2; asigurati-va ca nu se vor genera mesaje de eroare in
timpul executiei functiei.
3. Scrieti o instructiune care include continutul fisierului antet.php ca parte
a scriptului curent.
4. Scrieti definitia unei functii numite patrat(), care calculeaza aria unui
patrat, daca este data lungimea unei laturi a patratului.
5. Scrieti o definitie a unei functii denumite contor(), care incrementeaza
si returneaza valoarea unei variabile locale statice.
</test de evaluare>