You are on page 1of 12

119

Functii
ntrr-o aplicatie scrisa n PHP pot fi ntlnite doua tipuri de functii: functii predefinite, apartinnd limbajului si functii definite de programator pentru a evita scrierea repetata a unor secvente de cod sau pentru a usura ntelegerea codului. Definirea unei functii Sintaxa unei functii scrise n PHP este urmatoarea:
function nume([lista_parametri]) { corpul_functiei [return expresie;] }

Lista parametrilor transmisi unei functii poate lipsi. Daca functia nu returneaza ninic (lipseste instructiunea return) functia nu poate figura ntr-o expresie. Exemple:
1. function start_table($border) { echo "<table border=$border>\n"; }

Pentru a ncepe generarea unui tabel avnd un chenar de 2 pixeli, functia trebuie apelata astfel:
start_table(2); 2. function calcul ($a=0, $b=0) { $c = $a + $b; return $c; }

Includerea n lista de parametri a atribuirilor $a=0, $b=0 asigura valori initiale variabilelor $a si $b, n cazul n care apelul s-a realizat incorect (cu valori neinitializate de exemplu). Apelul functiei se poate face astfel:
$rez = calcul(12, 223);

Valoarea returnata de o functie poate apartine oricarui tip: string , array, integer, double etc. n cazul unei functii care realizeaza o interogare a bazei de date, ea poate returna identificatorul care permite accesarea rezultatului, ca n exemplul urmator:

120

function safe_query ($query = "") { if (empty($query)) { return FALSE;} $rezultat = mysql_query($query); or die ("Query failed: " . "<li>eroare nr. = " . mysql_errno() ."<li>eroare = " . mysql_error() ."<li>query = " . $query ); return $rezultat; }

Functia scrisa poate fi folosita cu succes n locul functiei predefinite mysql_query(), deoarece ea furnizeaza informatii detaliate ori de cte ori o interogare esueaza. Vizibilitatea variabilelor Utilizarea functiilor pune si n PHP probleme de vizibilitate a variabilelor. n PHP o variabila declarata n afara oricarei functii este o variabila globala iar o variabila declarata ntr-o functie este o variabila locala. Variabilele globale sunt fie create de programator, fie provin din numele cmpurilor formularelor, declarate si initializate automat, n cazul scripturilor asociate formularelor. Spre deosebire de alte limbaje, pentru a fi vizibile ntr-o functie, variabilele globale trebuie declarate folosind declaratia global. Exemplu:
function suma ($b) { global $a; $c = $a + $b; return $c; } $a = 100; echo suma(12);

Functii predefinite PHP este deosebit de bogat n functii. O lista relativ completa poate fi gasita la adresa http://www.php.net/manual. 1. Functii pentru prelucrarea sirurilor de caractere n domeniul prelucrarii sirurilor de caractere, PHP ofera o mare varietate de functii predefinite, peste 70 la numar, ceea ce face posibila realizarea n acest limbaj a

121

celor mai multe dintre prelucrarile posibile n alte limbaje. Fiind orientat pe tratarea informatiilor continute n pagini Web, PHP pune la dispozitie si o serie de functii specifice, deosebit de utile n practica. strip_tags() realizeaza nlaturarea dintr-un sir de caractere a tuturor marcajelor HTML sau PHP, cu exceptia unora specificate n mod explicit. Prototipul functiei este:
strip_tags (string sir [, string marcaje_permise]).

Functia permite nlaturarea pericolului includerii de catre un utilizator ntr-o caseta de text sau o zona de text, a unor marcaje HTML sau scripturi PHP nedorite. Exemplu de utilizare:
strip_tags($sir, "<i><b>");

addslashes() modifica un sir de caractere dat adaugnd caractere "\" (backslash) n fata unor caractere ca: " (ghilimele), ' (apostrof), \ (backslash). Prototipul functiei este:
string addslashes (string sir).

Functia este gndita sa ajute la formarea sirurilor de caractere care sunt inserate n cmpuri apartinnd unor tabele dintr-o baza de date, ca n exemplul urmator:
$str1 = "let's see"; $str1 = addslashes($str1); $rez = mysql_query("insert into continut (continut) values ('$str1')");

Sirurile de caractere provenind din cmpurile unui formular nu necesita o tratare folosind aceasta functie deoarece ele sunt n mod automat modificate si transmise n acest fel. stripslashes() este functia opusa functiei addslashes(). Ea suprima caracterele adaugate ca urmare a apelarii functiei addslashes(). Prototipul functiei este:
string stripslashes (string sir).

str_replace() realizeaza cautarea ntr-un sir de caractere a unui subsir si nlocuirea sa cu un alt sir. Prototipul functiei este:
string str_replace (string sir_cautat, string sir_substitutie, string sir_de_prelucrat).

Exemplu:
$sir = "Cei patru evanghelisti erau trei"; $sir1 = str_replace("trei", "doi", $sir);

substr_replace() permite nlocuirea unei secvente de caractere dintr-un sir cu un alt sir, dat ca argumennt. Prototipul functiei este:

122 string substr_replace (string sir_de_prelucrat, string sir_substitutie, int start [, int lungime]).

Parametrii start si lungime definesc pozitia n sirul de prelucrat respectiv lungimea subsirului care va fi nlocuit. Daca ultimul parametru lipseste, vor fi nlocuite toate caracterele ramase pna la sfrsitul sirului. Exemplu:
$sir = "Vara aceasta mergem in Turcia."; $sir1 = substr_replace($sir, "Italia.", 23);

strcmp() este functia de comparare a doua siruri. Prototipul functiei este:


int strcmp (string sir1, string sir2).

Functia returneaza o valoare pozitiva daca primul sir este mai mare, 0 daca sirurile sunt identice si o valoare negativa daca primul sir este mai mic. strlen() returneaza lungimea sirului dat ca argument. Prototipul functiei este:
int strlen (string sir).

Functia returneaza o valoare pozitiva daca primul sir este mai mare, 0 daca sirurile sunt identice si o valoare negativa daca primul sir este mai mic. strpos() furnizeaza pozitia sirului dat ca al doilea argument n sirul dat ca prim argument. Prototipul functiei este:
int strpos (string sir_dat, string sir_cautat [, int offset]).

Functia returneaza o valoare pozitiva daca sirul este gasit si FALSE daca sirul cautat nu exista. Daca parametrul offset este definit, acesta reprezinta pozitia n sirul dat de unde ncepe cautarea. Exemplu:
$sir = "Vara aceasta mergem la munte."; $p = strpos($sir, " ");

Variabila $p va avea valoarea 4, deoarece pe pozitia 4 se afla primul spatiu. strrpos() opereaza asemanator cu strpos() dar functia va returna pozitia ultimei aparitii n sirul dat a sirului dat ca al doilea argument. Prototipul functiei este:
int strrpos (string sir_dat, string sir_cautat).

substr() returneaza o portiune dintr-un sir indicata prin doua valori numerice. Prototipul functiei este:
string substr (string sir_dat, int start [, int lungime]).

Daca parametrul lungime lipseste, subsirul returnat va contine toate caracterele de la start pna la sfrsitul sirului. strrev() inverseaza ordinea caracterelor dintr-un sir dat. Prototipul functiei este:
string strrev (string sir_dat).

123

strtolower() transforma toate majusculele din sirul dat n caractere normale. Prototipul functiei este:
string strtolower (string sir_dat).

strtoupper() transforma toate literele din sirul dat n majuscule. Prototipul functiei este:
string strtoupper (string sir_dat).

strtr() este o functie care permite nlocuirea n sirul dat ca prim argument a caracterelor din sirul dat ca al doilea argument cu caracterele corespunzatoare din sirul dat ca al treilea argument. Prototipul functiei este:
string strtr (string sir_dat, string car_de_inlocuit, string car_de_substitutie).

Exemplu:
$sir = "sir de caractere de tratat"; $sir1 = strtr($sir, "ca", "qw");

n exemplul dat, toate caracterele "c" vor fi nlocuite cu "q" si toate caracterele "a" vor fi nlocuite cu "w". ucfirst() este o functie care schimba n majuscula primul caracter al sirului dat ca argument. Prototipul functiei este:
string ucfirst (string sir_dat).

ucwords() este o functie care schimba n majuscula primul caracter al fiecarui cuvnt din sirul dat ca argument. Prototipul functiei este:
string ucwords (string sir_dat).

trim() este o functie care nlatura toate spatiile de la nceputul si sfrsitul sirului dat ca argument, inclusiv caracterele return, LF (line feed) sau tab. Prototipul functiei este:
string trim (string sir_dat).

htmlspecialchars() este o functie care transforma caracterele <, >, & sau " n reperezentarile lor HTML: &lt;, &gt, &amp;, si &quot;. n acest fel se poate afisa ntro pagina Web codul HTML pentru realizarea unei actiuni. Prototipul functiei este:
string htmlspecialchars (string sir_dat).

printf() si sprintf() sunt functii care opereaza ca n limbajul C si permit scrierea formatata respectiv construirea unui sir de caractere cu un format dat. Aceste functii sunt utile cnd modul de afisare a unor date este important.

124

2. Functii pentru accesarea unei baze de date PHP dispune de functii care pot asigura exploatarea unui mare numar de servere de baze de date. n cele ce urmeaza vor fi prezentate doar functiile care servesc la conectarea la un server MySQL. mysql_connect() si mysql_select_db() realizeaza o conexiune cu serverul MySQL. Prototipurile functiilor sunt:
int mysql_connect (string host, string user, string password). int mysql_select_db(string database [, int conect]))

De regula apelul functiei mysql_connect() este urmat de apelul functiei mysql_select_db(). Daca se recupereaza valoarea ntrega returnata de mysql_connect(), ea poate fi folosita ca al doilea parametru n mysql_select_db(), permitnd astfel ca ntr-un script sa se realizeze conexiuni la mai multe servere de baze de date. Pentru conectarea la mai multe baze de date, v alorile ntregi si distincte returnate de functiile mysql_select_db() apelate vor fi folosite ca si parametri n functii ca mysql_query() , mysql_insert_id() , mysql_affected_rows() etc., apelate ulterior. Exemple:
mysql_connect("localhost", "mdamian", "aq^123") or die ("Nu ma pot conecta la serverul MySQL"); mysql_select_db("studenti") or die ("Nu ma pot conecta la b.d. Studenti");

Daca serverul de baze de date MySQL ruleaza pe un alt calculator din retea, avnd adresa wanadoo.cluj.ro, conectarea la aceeasi baza de date ar putea fi realizata scriind:
mysql_connect("wanadoo.cluj.ro", "mdamian", "aq^123") or die ("Nu ma pot conecta la serverul MySQL"); mysql_select_db("studenti") or die ("Nu ma pot conecta la b.d. Studenti");

mysql_query() este functia cea mai frecvent utilizata cnd este exploatata o baza de date. Prototipul functiei este :
int mysql_query (string query [, int link]).

Aceasta functie trimite o comanda serverului MySQL (orice comanda! ). Functia nu returneaza rezultatul comenzii SQL ci o valoare care va fi folosita n continuare ca parametru n apelurile functiilor care realizeaza extragerea rezultatului comenzii. Daca s-a introdus o comanda select, rezultatul este un cursor, rndurile acestuia putnd fi preluate folosind una dintre functiile mysql_fetch_row(), mysql_fetch_array() sau mysql_result(). De regula apelul functiei mysql_query() este urmat de constructia or die(mysql_error() ), pentru a primi n caz de esec un mesaj privind cauza esecului.

125

mysql_fetch_array() permite preluarea unui rnd dintr-un cursor realizat ca urmare a unei interogari. Valorile sunt memorate ntr-un sir asociativ n care numele cheilor coincid cu numele cmpurilor. Prototipul functiei este :
array mysql_fetch_array (int rezultat [, int tip_rezultat]).

Daca nu se indica al doilea parametru, PHP va prelua fiecare cmp de doua ori, o data cu o cheie care poarta numele cmpului si a doua oara cu o cheie numerica. De regula nu se doreste acest lucru si atunci al doilea parametru va fi MYSQL_ASSOC pentru chei avnd ca nume numele cmpurilor respectiv MYSQL_NUM pentru chei numerice. Exemplu:
$q = "select * from stud"; $rezultat = mysql_query($q) or die(mysql_error()); echo "<TABLE BORDER=3>"; while ($row = mysql_fetch_array($rezultat, MYSQL_ASSOC)) { echo "<TR>"; while(list($key, $val) = each($row)) { echo "<TD>" . $val . "</TD>"; } echo "</TR>"; } echo "</TABLE>";

mysql_fetch_row() este o functie care opereaza ca si mysql_fetch_array() daca la apel al doilea parametru este MYSQL_NUM . Prototipul functiei este :
array mysql_row (int rezultat).

mysql_insert_id() este o functie care se poate apela dupa o comanda insert, daca tabela n care s-a adaugat un rnd are o cheie primara de tip auto_increment. Functia va returna valoarea cheii primare corespunznd rndului inserat. Prototipul functiei este:
int mysql_insert_id ([int link]).

Exemplu:
mysql_query("insert into utilizatori (nume, prenume) values ('Vasilescu', 'Carmen')") or die (mysql_error()); $n = mysql_insert_id();

mysql_num_rows() returneaza numarul de linii dintr-un cursor creat ca urmare a executarii unei comenzi SQL select. Prototipul functiei este:
int mysql_num_rows (int rezultat).

Exemplu:

126 $query = "select * from utilizatori"; $rez = mysql_query($query) or die (mysql_error()); if (mysql_num_rows($rez) == 0) { echo "Tabela utilizatori nu contine inregistrari"; } else { // se prelucreaza rezultatele }

mysql_affected_rows() returneaza numarul de linii afectate de o comanda update, insert sau delete. Prototipul functiei este:
int mysql_affected_rows ([int link]).

Exemplu:
$query = "delete from utilizatori where id_num == $v"; $rez = mysql_query($query) or d ie (mysql_error()); $deleted = mysql_affected_rows(); if ($deleted == 0) { echo "Nimic de sters!"; } else { echo "Ati sters $deleted linii din tabela utilizatori."; }

mysql_errno() si mysql_error() permit identificarea erorii care s-a produs n timpul exectarii unei comenzi SQL. Prima functie returneaza codul numeric al erorii iar a doua un mesaj n care eroarea este descrisa explicit. Prototipurile functiilor sunt:
int mysql_errno ([int link]) string mysql_error ([int link]).

mysql_result() realizeaza recuperarea valorii unui cmp dintr-un rnd al unui cursor rezultat ca urmare a unei comenzi SQL select. Prototipul ei este:
tip_variabil mysql_result(int rezultat, int linie [, tip_variabil cmp])

Daca este indicat cmpul, el poate fi indicat fie printr -o valoare numerica fie prin numele sau. Fiind o functie cu executie lenta, apelarea ei nu se justifica dect n cazul n care rezultatul comenzii select este un singur rnd sau chiar o singura valoare, ca n exemplul urmator:
$rez = mysql_query("select count(*) from stud") or die (mysql_error()); echo "In tabela stud sunt " . mysql_result($rez, 0, 0) . " inregistrari.";

127

n alte situatii mysql_fetch_row().

se

vor

utiliza

functiile

mysql_fetch_array()

sau

mysql_free_result() realizeaza eliberarea zonei de memorie ocupata de cursorul indicat ca argument. Prototipul ei este:
int mysql_free_result(int rezultat)

De regula nu este necesara eliberarea memoriei ocupate de cursorul realizat prin executarea unei comenzi SQL select deoarece dupa ncheierea scriptului conexiunea cu serverul MySQL este nchisa. Functiile PHP care realizeaza activitati de administrare a unei baze de date (creare baza de date, creare tabele, modificare structura, suprimare tabele sau suprimare baza de date) nu vor fi incluse deoarece aceste actiuni nu fac de regula obiectul unor activitati din scripturi. Activitatile de acest tip se realizeaza mult mai eficient cu instrumente ca phpMyAdmin.

3. Functii pentru preluarea datei si timpului date() returneaza data si ora curenta. Prototipul ei este:
string date (string format [, int timp])

Daca este prezent al doilea argument, functia va forma din valoarea acestuia un sir de caractere reprezentnd o data, conform formatului indicat ca prim argument. Exemplu:
echo date("F d, Y g:i a");

poate imprima ceva de forma "May 12, 2002 19:21 pm ". Caracterele care pot fi folosite n sirul format sunt: Indicator a A B d D F g G h H i Semnificatie am sau pm AM sau PM timp Internet ziua din luna (01 la 31) ziua din saptamna, 3 litere, n engleza (ex. Fri) luna, text lung, engleza (ex. January) ora, 0, 1 ... 12 ora, 0 la 24 ora, 01, 02, ... 12 ora, 01 ... 24 minutul, 00 la 59

128

j l (L mic) m M n s S w Y y z

ziua din luna fara zerouri n fata orelor scrise cu o cifra ziua din saptamna, text lung (ex. Friday) luna n cifre (01 la 12) luna, text 3 caractere (ex. Jan) luna, fara zerouri n fata lunilor dintr-o cifra secunda, 00 la 59 sufixul pt. numerale ordinale, engl. (ex. th, nd) ziua din saptamna, numeric, 0 la 6 anul, patru pozitii zecimale anul, doua pozitii zecimale ziua din an, numeric, 0 la 365
int mktime (int ora, int minutul, int secunda, int luna, int ziua, int anul)

mktime() creaza o data. Prototipul ei este: Exemplu:


$anul = 2002; $luna = 5; $ziua = 25; echo date ("l F d, Y", mktime(0,0,0, $luna, $ziua+30, $anul));

va imprima "Monday June 24, 2002 ". Functia permite calcule cu zile si ore, ca n exemplu. time() returneaza o valoare ntreaga reprezentnd timpul curent n secunde de la nceputul epocii Unix (1 ianuarie 1970 00:00:00 GMT). Prototipul ei este:
int time ().

4. Functii pentru exploatarea fisierelor PHP poseda un set complet de functii care permit manipularea fisierelor si directoarelor pe calculatorul gazda. fopen() deschide fisierul indicat ca prim argument. Prototipul ei este:
int fopen (string nume, string mod).

Sirul mod se formeaza folosind codurile din tabelul de mai jos. Mod r r+ w w+ Semnificatie Deschide n citire Deschide n citire si scriere Deschide n scriere Deschide n citire si scriere. Daca fisierul nu exista, este creat.

129

a a+

Deschide n adaugare Deschide n adaugare. Daca fisierul nu exista, va fi creat. Exemplu: $fisier = "date.txt"; $fp = fopen($fisier, "r+") or die ("Nu pot deschide fisierul"); $continut = fread($fp, filesize($fisier)); // Inlocuieste lei cu Euro $con_nou = str_replace("lei", "Euro", $continut); rewind($fp); fwrite($fp, $con_nou); ftruncate($fp, ftell($fp)); fclose($fp);

fclose() nchide fisierul indicat ca argument. Prototipul ei este:


int fclose (int fp).

feof() testeaza daca indicatorul nregistrarii curente este pe pozitia sfrsitului de fisier. Prototipul ei este:
int feof (int fp).

fgets() citeste o linie din fisierul de tip text indicat ca argument. Prototipul ei este:
string fgets (int fp [, int lungime]).

Exemplu:
$fp = fopen("/home/httpd/cgi- bin/postuniv/fdat.txt", "r") or die("fdat nu exista"); while ($fp && !feof($fp)) { echo fgets($fp); } fclose($fp);

copy() copiaza fisierul dat ca prim argument n locatia indicata ca al doilea argument. Prototipul ei este:
int copy (string sursa, string destinatie).

dirname() returneaza un sir de caractere reprezentnd numele directorului n care este fisierul precizat n argument. Prototipul ei este:
string dirname (string cale).

Exemplu:

130 $cale = "www.postuniv.ro/an1/nume.txt"; echo dirname($cale);

5. Alte functii importante mt_srand() initializeaza generatorul de numere aleatoare. Prototipul ei este:
int mt_srand (int numar).

Argumentul este un numar oarecare, de obicei fiind generat folosind functia time(). mt_rand() returneaza un numar aleator cuprins ntre o valoare minima si una maxima. Prototipul ei este:
int mt_rand (int mini, int maxi).

Exemplu:
mt_srand(time()); $nr = mt_rand(0, 1000); echo $nr;

mail() permite trimiterea unui e-mail dintr-un script. Prototipul ei este:


bool mail(string to, string subject, string message [, string additional_info]).

Exemplu:
$mesaj = "Comanda dv. a fost inregistrata si va fi tratata cu prioritate"; $adr = "JohnDoe@somwhere.net"; mail($adr, "Subject Confirmare", $mesaj, "From: Internationnal Trade\r\nReply-to: numelemeu@yahoo.com");

include() permite includerea unui fisier n scriptul curent. Prototipul ei este:


include (string nume_fisier).

Observatie: La intrarea n fisierul inclus se trece automat n mod HTML, deci daca trebuie inclusa o secventa n PHP trebuie rescris marcajul <?php ... Exemplu:
h.php: <html>< head><title><?php echo $titlu; ?></title></head> <body bgcolor=yellow> <?php $titlu = "Pagina Web a S.C. Comert International"; include('h.php'); . . . // continutul paginii

index.php:

You might also like