F. Radulescu. Curs: Baze de date 1Partea 2. Baze de date si [606264]
F. Radulescu. Curs: Baze de date 1Partea 2. Baze de date si
pagini web
Capitolul 2
Limbajul PHP
F. Radulescu. Curs: Baze de date 2Obiective
/rhombus6Obiectivul acestui curs un este o prezentare completa a limbajului PHP ci o introducere (pentru cei care un au utilizat inca acest limbaj).
/rhombus6Limbajul este simplu si usor de invatat, semanand cu alte limbaje de programare deja studiate.
/rhombus6Exista o multitudine de carti si documentatii accesibile online din care se pot aprofunda diversele aspecte ale limbajului si folosirii acest uia.
/rhombus6In cursurile de PHP vom prezenta atat interfata sa cu SGBD-ul MySQL cat si scurte exemple de lucru cu Oracle si ODBC.
F. Radulescu. Curs: Baze de date 3Introducere
/rhombus6Așa cum am văzut în capitolul precedent, în
cazul scripturilor scrise în limbajul C acestea trebuie să execute o serie de opera ții de
“bucătărie internă” care pot încurca pe un utilizator care nu este un bun cunoscător al limbajului și pot genera erori:
/rhombus4detectarea metodei ( GET sau POST ) și implicit a
locului de unde se citesc datele (variabila de mediu QUERY_STRING sau intrarea standard
stdin )
/rhombus4descompunerea șirului primit de la browser în
perechi simbol-valoare
/rhombus4transmiterea unui preambul al rezultatului în format MIME .
F. Radulescu. Curs: Baze de date 4Introducere
/rhombus6Aceste inconveniente pot fi evitate prin folosirea
unui limbaj evoluat care să preia toate aceste opera ții și care să permită o gestiune simplă atât a
simbolilor primi ți de la browser (datele completate
în formă) cât și a altor variabile cum sunt cele de
mediu.
/rhombus6Există mai multe solu ții în această direc ție:
1. Folosirea unor limbaje specializate în scrierea de scripturi cum este perl .
2. Inserarea în cadrul fi șierelor HTML a unor
programe care se execută la nivelul browserului (cum este Java ) și care pot con ține inclusiv
proceduri de conectare și exploatare a unei baze de
date.
F. Radulescu. Curs: Baze de date 5Introducere
3. Inserarea în cadrul fi șierelor HTML a unor
programe care se execută la nivelul serverului de web înainte ca acesta să trimită rezultatul către browser.
/rhombus6Un exemplu de astfel de limbaj este PHP
descris în capitolul de fa ță.
/rhombus6Deci PHP este un limbaj pentru inserturi în fi șierele HTML, inserturi care sunt înlocuite
la evaluarea fi șierului de către serverul de
web cu rezultatele execu ției lor.
F. Radulescu. Curs: Baze de date 6Introducere
/rhombus6PHP a reprezentat initial o abreviere pentru “Personal Home Pages tools” și a fost creat
în 1994 de Rasmus Lerdorf.
/rhombus6În primele versiuni (PHP/FI) el con ținea
suport doar pentru pachetul de baze de date mSQL ( mini SQL ).
/rhombus6Actualmente PHP inseamna ‘PHP: Hypertext
Processor’ putând fi folosit în conjunc ție cu
o largă listă de SGBD-uri, atât comerciale cât și necomerciale ( free software )
incluzand MySQL, dBase, Oracle, DB2, PostgreSQL, Sybase, InterBase, SQLServer, ODBC, etc.
F. Radulescu. Curs: Baze de date 7Introducere
/rhombus6Acest pachet poate fi instalat atât ca
un interpretor de sine stătător (deci un CGI separat) cât și ca un modul
pentru serverul de web (Apache).
/rhombus6Pachetul poate fi instalat de asemenea sub Windows IIS/PWS și Apache.
/rhombus6Informa ții complete despre instalare și
configurare în diverse variante pot fi găsite în manualul care îl înso țește.
F. Radulescu. Curs: Baze de date 8Inserare cod
/rhombus6Introducerea de inserturi scrise în PHP în fi șierele HTML poate fi făcută în mai multe
moduri (func ția echo are acela și efect cu
printf din limbajul C):
1. <?php echo "Varianta 1 tip XML\n"; ?>
2. <? echo "Varianta 2, cea mai simpla\n"; ?>
3. <script language="php">
echo "Varianta 3, tip limbaj pentru scripturi";
</script>;
4. <% echo "varianta 4, tip ASP"; %>
F. Radulescu. Curs: Baze de date 9Inserare cod
/rhombus6Pentru folosirea unora dintre aceste variante interpretorul de PHP trebuie configurat corespunzator (variantele 2 si 4)
/rhombus6Optiunile respective se gasesc in fisierul de configurare php.ini
F. Radulescu. Curs: Baze de date 10 Descriere
/rhombus6Insertul poate con ține o singură
instruc țiune, ca în exemplele de mai sus,
sau mai multe instruc țiuni.
/rhombus6Formatul instruc țiunilor este liber, putându-
se continua pe mai multe linii.
/rhombus6Ca și în C fiecare instruc țiune este terminată
cu punct și virgulă.
/rhombus6Directiva de inchidere bloc php tine si loc de ;
/rhombus6Daca dupa ultimul bloc nu exista ; nu este eroare (e chiar folositor uneori cand se fac incluziuni de fisiere)
F. Radulescu. Curs: Baze de date 11 Exemple
/rhombus6Obisnuit:
<?php
echo ‘Hello world';
?>
/rhombus6Fara ; in final de bloc:
<?php echo ‘Hello world' ?>
/rhombus6Fara directiva de inchidere la ultimul bloc (dar cu ; !)
<?php echo ‘Putem omite directiva in final';
F. Radulescu. Curs: Baze de date 12 Comentarii
/rhombus6Comentariile sunt ca si in C / Unix shell:
<?php
echo ‘Test'; // Comentariu pe linie /* Comentariu pe
potential mai multe linii */
echo ‘Ceva'; # Comentariu pe linie
?>
F. Radulescu. Curs: Baze de date 13 Tipuri si variabile
/rhombus6PHP este un limbaj interpretat. In consecinta nu este necesara declararea variabilelor
/rhombus6O variabila imprumuta tipul valorii stocate in ea l a
momentul respectiv.
/rhombus6O variabila isi poate schimba tipul pe parcursul executiei scriptului PHP
/rhombus6O variabila se creaza in momentul in care se depune o valoare in ea.
/rhombus6Pentru conversia intre tipuri (daca e necesara) se pot folosi construc ții de conversie de tip cast
similare cu cele din C sau func ția settype .
F. Radulescu. Curs: Baze de date 14 Tipuri
/rhombus6Exista 8 tipuri de date in PHP: 4 tipuri scalare, doua compuse si doua speciale
1. Boolean
2. Integer
3. Float (include double)
4. String
5. Array
6. Object
7. Resource
8. Null
F. Radulescu. Curs: Baze de date 15 Variabile
/rhombus6Numele oricarei variabile este prefixat cu simbolul
$.
/rhombus6Acesta e un marcaj de variabila si nu face efectiv
parte din nume.
/rhombus6Pentru aflarea tipului unei variabile se poate folo si
functia gettype sau var_dump
/rhombus6Instruc țiunea de atribuire este identică cu cea din
limbajul C.
/rhombus6Dacă variabila nu este deja definită, ea se crează automat:
$nume = "Ion"; $adresa = "Bucuresti"; $sir = "1234"; $numar = (int) $sir; // exemplu de cast
F. Radulescu. Curs: Baze de date 16 Tipul Boolean
/rhombus6O variabila de tip Boolean poate contine valoarea
True sau False.
/rhombus6In cazul conversiei la Boolean, sunt considerate False (printre altele):
/rhombus4Literalul FALSE
/rhombus4Valoarea intreaga sau reala (float, double) 0 (zero )
/rhombus4Un sir vid
/rhombus4Sirul "0"
/rhombus4Un array cu 0 elemente
/rhombus4Tipul special NULL (incluzand variabilele ne-setate =
inexistente)
/rhombus6Orice alta valoare este considerata True (inclusiv orice resursa)
F. Radulescu. Curs: Baze de date 17 Tipul intreg
/rhombus6Specificarea se poate face in bazele 10, 8 si 16:
<?php
$a = 1234; // zecimal $a = -123; // zecimal, negativ $a = 0123; // octal $a = 0x1A; // hexazecimal
?>
F. Radulescu. Curs: Baze de date 18 Numere intregi
/rhombus6Daca o cifra este incorecta restul cifrelor se igno ra:
<?php
$a = 123 EU4PLECLA5678; // 123
$a = 0123 89; // octal 0123
$a = 0x1A SPARAGUS; // hexa 0x1A
?>
/rhombus6Daca se depaseste capacitatea de reprezentare pentr u intregi
(~2^31), valoarea devine automat float
/rhombus6La conversia de la float la intreg numarul e rotunj it spre 0.
Daca se depaseste capacitatea de reprezentare pentr u intregi
rezultatul este nedefinit (nu se emite nici o atent ionare!)
/rhombus6La conversia de la string la numar se ia prefixul i ntreg al
numarului (ca mai sus):
$a = 1 + “3 iezi cucuieti”; // $a devine 4
F. Radulescu. Curs: Baze de date 19 Tipul real (float, double)
/rhombus6Se pot scrie in formatul uzual sau exponential:
<?php
$a = 1.234; $b = 1.2e34; $c = 12E-34;
?>
/rhombus6Valorile limita sunt dependente de platforma
dar uzual numerele sunt pana la ~1.8e308 cu o precizie de 14 cifre.
/rhombus6Conversia de la sir la float se face similar cu cea a intregilor (pana la primul caracter care nu face parte dintr-o reprezentare corecta de numar real)
F. Radulescu. Curs: Baze de date 20 Tipul ARRAY
/rhombus6Un tablou PHP este o succesiune de perechi (cheie, valoare).
/rhombus6Li se mai spune si tablouri asociative.
/rhombus6Un tablou poate fi exploatat in modul clasic (chei pornind de la 0 ca in C) sau ca tablou asociativ (acces prin cheie, cheile putand sa nu fie succesive si nici numerice.
F. Radulescu. Curs: Baze de date 21 Exemple
<?php
$a = array(“pw" => “examen",
4 => ”an terminal”, “succes” =>true);
echo $a[“pw”], $a[4]
// $b = array cu 2 dimensiuni
$b = array(“medii" => array(1 => 9.45, 2 => 9.5, 3=> 8.12, 4 => 9.90, “stat”=>10)); echo $b[“medii"][2]; // 9.5 echo $b[“medii"][“stat"]; // 10
// $c e identic cu $b
$c = array(“medii" => array(1 => 9.45, 9.5, 8.12, 9.90, “stat”=>10)); echo $c[“medii"][2]; // 9.5 echo $c[“medii"][“stat"]; // 10
?>
F. Radulescu. Curs: Baze de date 22 Tipul Array
/rhombus6Cheia trebuie sa fie scalara (un alt array sau obiect)
/rhombus6Adaugarea inca unui element cu cheie
maxima negativa adauga o pereche cu cheia 0 (incepand cu v4.3.0)
/rhombus6Cheia TRUE devine 1
/rhombus6Cheia FALSE devine 0
/rhombus6Cheia NULL devine sirul vid
F. Radulescu. Curs: Baze de date 23 Exemplu
$regiune = array(-12 => “Oltenia”);
// o variabila de tip array cu cheia // maxima -12 // Adaugam noi elemente si vom crea noi // perechi cu chei incepand cu 0:
$regiune[] = "Muntenia"; // elementul 0 $regiune[] = "Moldova"; // elementul 1
/rhombus6In lipsa, cheile pleaca de la 0:
$orase = array(“Bucuresti”, “Ploiesti”,
“Campina”) // chei 0, 1, 2
F. Radulescu. Curs: Baze de date 24 Conversii
/rhombus6La conversia din tipurile intreg, real, string, boolean si resursa in tipul array se creaza un tablou cu un singur element cu cheia 0 si valoarea respectiva.
/rhombus6Daca se converteste un obiect la array, obtinem un array avand ca elemente proprietatile obiectului. Mai multe amanunte in documentatia PHP.
/rhombus6Conversia unei valori nule la array duce la un array vid (Atentie: vid nu inseamna nul!)
F. Radulescu. Curs: Baze de date 25 Comparatii
/rhombus62 tablouri se pot compara astfel:
/rhombus4Egalitate: $a == $b adevarat daca au aceleasi perechi (cheie, valoare)
/rhombus4Identitate: $a === $b adevarat daca au aceleasi perechi (cheie, valoare) in aceeasi ordine si cu aceleasi tipuri
/rhombus4Inegalitate: $a <> $b sau $a != $b. Inversa egalitatii
/rhombus4Nonidentitate: $a !== $b. Inversa identitatii/
F. Radulescu. Curs: Baze de date 26 Comparatii
/rhombus6Se pot afla diferentele dintre 2 tablouri folosind functia array_dif care returneaza valorile dintr-un array care nu se gasesc in al doilea:
<?php
$array1 = array(“ion", “vasile", “ion", “elen a"); $array2 = array(“vasile", “ion", “mia"); $rezultat = array_diff($array1, $array2); print_r($rezultat);
// rezultat: [0]=>“elena”
?>
F. Radulescu. Curs: Baze de date 27 Reuniune
/rhombus6Doua tablouri se pot reuni folosint operatorul +:
$c = $a + $b
/rhombus6Rezultatul contine perechile primului array la care se adauga
perechile din al doilea array cu o cheie care nu ex ista in
primul.
/rhombus6Exemplu:
<?php
$array1 = array(“ion", “vasile", “ion", “elen a"); $array2 = array(“vasile", “ion", “mia"); $rezultat = $array2 + $array1; print_r($rezultat);
?>
/rhombus6Vom obtine un tablou cu 4 elemente: elementele din array2
(chei 0, 1, 2) si ultimul element din array 1 (chei a 3):
(
“vasile", “ion", “mia“, “elena")
F. Radulescu. Curs: Baze de date 28 Tipul Obiect
/rhombus6A fost descris in detaliu la orele de
laborator.
/rhombus6Daca o valoare de alt tip este convertita la tipul obiect, obtinem o instanta a clasei stdClass .
/rhombus6Daca se converteste la obiect o valoare nula, noua instanta va fi vida.
/rhombus6Daca un tablou se converteste la obiect cheile devin proprietati.
F. Radulescu. Curs: Baze de date 29 Tipul Resursa
/rhombus6Tipul resursa este un tip special,
variabilele de acest tip contin o referinta catre o resursa externa.
/rhombus6Felul resursei se poate obtine cu functia get_resource_type (ex: mysql link, file, domxml document, etc)
/rhombus6Conversia la tipul resursa nu are sens (din definitia tipului)
/rhombus6O resursa care nu mai este referita este detectata automat de 'garbage collector' si eliberata (deci nu e necesara eliberarea manuala).
F. Radulescu. Curs: Baze de date 30 Tipul NULL
/rhombus6Tipul NULL are o singura valoare, NULL.
/rhombus6O variabila nula nu contine nici o valoare.
/rhombus6O variabila este considerata nula daca:
1. I-a fost asignata valoarea NULL
2. Nu i-a fost asignata inca nici o valoare (deci even tual ea
nu exista).
3. A fost dealocata cu functia unset($variabila)
/rhombus6O variabila se poate testa daca e nula sau nu cu fu nctia
is_null($variabila).
/rhombus6O variabila se poate testa daca exista sau nu (cazu rile 2
si 3 de mai sus) cu functia isset($variabila, …)
/rhombus6O variabila se poate testa daca este goala cu empty($variabila). Sunt considerate goale variabile le
care contin echivalentul lui FALSE (inclusiv care c ontin
valoarea NULL)
F. Radulescu. Curs: Baze de date 31 Variabile
/rhombus6Asa cum am mai spus, numele
variabilelor este prefixat cu $ (marcaj de variabila).
/rhombus6Numele este case-senzitiv (literele mari sunt considerate diferite de cele mici).
/rhombus6Un nume corect PHP incepe cu litera sau underscore si continua cu litere, cifre si underscore.
/rhombus6Variabilele pot contine referinte vatre alte
variabile (adresa se preleveaza cu &, ca in C). Exemplu:
F. Radulescu. Curs: Baze de date 32 Variabile
<?php
$unu = 'Ceva'; $doi = &$unu; // $doi e o referinta la $unu. $doi = "Altceva"; // Modificam $doi echo $unu; // Ambele contin acelasi echo $doi; // sir
?>
/rhombus6Nu se poate preleva cu & adresa unei expresii (doar a unei variabile).
/rhombus6PHP initializeaza variabilele cu valori implicite dar nu este bine sa ne bazam pe aceste valori (0 pentru numere, False pentru boolean, etc).
F. Radulescu. Curs: Baze de date 33 Variabile predefinite
/rhombus6Exista un numar mare de variabile predefinite (de sistem) pe care scriptul le poate folosi.
/rhombus6Cele mai utilizate sunt:
/rhombus4$_GET, $_POST, $_COOKIES, $_REQUEST contin valorile transmise scriptului cu metodele GET, POST, cookie sau reuniunea lor
/rhombus4$_SESSION contine variabile care se pot folosi de o succesiune de executii de scripturi care formeaza o sesiune de lucru
/rhombus4$GLOBALS contine toate variabilele globale ale scriptului
/rhombus6O descriere a acestor variabile si a altora din aceeasi categorie se gaseste in documentatia PHP
F. Radulescu. Curs: Baze de date 34 Domeniul (scope)
/rhombus6Variabilele sunt cunoscute în contextul
în care au fost create.
/rhombus6Cele definite în afara oricărei funcții
sunt similare variabilelor globale din C.
/rhombus6Cele definite în funcții (prin asignare)
sunt locale acelei funcții.
/rhombus6Spre deosebire de limbajul C o variabilă
globală nu este cunoscută în interiorul unei funcții decât dacă este declarată cu global în acea funcție.
F. Radulescu. Curs: Baze de date 35 Domeniul (scope)
/rhombus6Exemplul 1:
$a = 1; /* variabila globala */ function Ecou() { $a = 2;
/* se asigneaza o valoare variabilei locale */
echo $a; /* tiparire variabila locala */
}Ecou(); echo $a;
/* tiparire variabila globala */
/rhombus6Rezultat 21
F. Radulescu. Curs: Baze de date 36 Domeniul (scope)
/rhombus6Exemplul 2:
$a = 1; /* variabila globala */
function Ecou() { global $a
$a = 2;
/* se asigneaza o valoare variabilei globale */
echo $a; /* tiparire variabila globala */
}Ecou(); echo $a;
/* tiparire variabila globala */
/rhombus6Rezultat 22
F. Radulescu. Curs: Baze de date 37 Domeniul (scope)
/rhombus6Un alt mod de a defini varibile globale cunoscute ș i în
interiorul funcțiilor este folosirea tabloului asoc iativ
predefinit $GLOBALS, având ca indici numele variabi lelor
globale:
/rhombus6Exemplu:
$a = 1; /* variabila globala */
function Ecou() { $GLOBALS["a"] = 2;
/* se asigneaza o valoare
variabilei globale */
echo $GLOBALS["a"]; /* tiparire variabila globala */
}Ecou(); echo $a;
/* tiparire variabila globala */
/rhombus6Rezultat 22
F. Radulescu. Curs: Baze de date 38 Variabile statice
/rhombus6Ca și în C se pot defini variabile locale funcțiilor d ar
care își păstrează valoarea de la un apel la altul.
/rhombus6Aceste variabile se numesc statice .
/rhombus6Variabilele statice pot fi inițializate cu o valoare
care apoi se modifică și este păstrată pentru apelurile viitoare:
function Increment() { static $a = 0;
echo $a; $a++;
}
/rhombus6Rezultatul apelului repetat al acestei funcții va f i
afișarea numerelor 0, 1, 2, . . .
F. Radulescu. Curs: Baze de date 39 Macrosubstitutie
/rhombus6Numele unei variabile se poate găsi în altă variabilă.
/rhombus6Acest procedeu, numit macrosubstituție, este
întâlnit și în alte limbaje, cum este Xbase (dBase, Fox, Clipper).
/rhombus6Instrucțiunile:
$a = " Limbajul ";
$$a = " PHP ";
definesc două variabile: $a cu valoarea “Limbajul” și
$Limbajul cu valoarea “ PHP”.
/rhombus6În acest caz instrucțiunea:
echo "$a ${$a}";
va afisa Limbajul PHP
F. Radulescu. Curs: Baze de date 40 Variabile externe
/rhombus6În această categorie intră variabilele corespunzăto are simbolilor
primiti de la un formular și variabilele de mediu s etate de
serverul de web, în același mod ca în cazul scriptu rilor scrise în
limbajul C.
/rhombus6Să presupunem că avem următoarea formă:
<form action="actiune.php" method="post">
Nume: <input type="text" name=" nume "><br>
Localitate: <input type="text" name=" adresa[localitate] "><br>
Strada: <input type="text" name=" adresa[strada] "><br>
Numar: <input type="text" name=" adresa[numar] "><br>
Optiuni: <br> <select
multiple name=" so[] ">
<option value="Windows 95">Windows 95 <option value="Windows XP">Windows XP <option value="Windows Vista">Windows Vista <option value="Linux">Linux </select>
<input type="submit">
</form>
F. Radulescu. Curs: Baze de date 41 Variabile externe
/rhombus6Scriptul actiune.php care tratează această
formă poate primi variabilele:
/rhombus4$nume , variabilă simplă
/rhombus4$adresa , un tablou asociativ cu trei elemente
/rhombus4$so , un tablou având atâtea elemente câte selecții
s-au făcut în meniul vertical din formă.
/rhombus6Acest lucru se intampla insa doar daca optiunea
de configurare a PHP register_globals e setata pe On (implicit ea e insa Off, fiind potential o bresa de securitate.
/rhombus6In mod normal valorile celor 3 variabile se gasesc in $_POST si $_REQUEST.
F. Radulescu. Curs: Baze de date 42 Constante
/rhombus6Constantele se definesc similar cu limbajul C, cu d efine:
<?php
// Constante valide define("MATERIE", "Programare Web"); define("_EVAL_UARE", "Examen"); define("NOTA10", "10"); // Nume invalid define("2PAC", "Cantaret"); // Asa arata constantele PHP, // e bine sa nu avem si noi la fel define("__NOTA__", "10");
?>
F. Radulescu. Curs: Baze de date 43 Constante
/rhombus6Spre deosebire de variabile:
/rhombus4Constantele nu au un nume care incepe cu $
/rhombus4Constantele pot fi definite doar cu define() nu prin atribuire
/rhombus4Constantele nu au domeniu de valabilitate ca variabilelee (se pot folosi si in functii de exemplu).
/rhombus4Nu pot sa-si schimbe valoarea si nu pot fi dealocate (unset)
/rhombus4Constantele pot contine doar valori scalare (boolean, intreg, real sau sir)
F. Radulescu. Curs: Baze de date 44 Constante predefinite
/rhombus6PHP-ul pune la dispozitie si o serie de constante predefinite.
/rhombus6Acestea au forma __Nume__
/rhombus6Printre ele sunt:
/rhombus4__LINE__ numarul liniei curente in sursa PHP
/rhombus4__FILE__ calea si numele complet al fisierului surs a
PHP
/rhombus4__DIR__ directorul acelui fisier
/rhombus4__FUNCTION__ numele functiei curente (doar cu
litere mici in PHP4)
/rhombus4__CLASS__ numele clasei (doar cu litere mici in
PHP4)
/rhombus4__METHOD__ numele metodei din clasa (doar PHP5)
F. Radulescu. Curs: Baze de date 45 Expresii
/rhombus6Expresiile in PHP sunt similare celor din limbajul C
/rhombus6Se pot folosi constructii de tipurile:
/rhombus4$a++, ++$a
/rhombus4$a–, –$a
/rhombus4$a += 3; (echivalenta cu $a = $a + 3;), in loc de + putand fi orice operator valid pentru operatia respectiva
/rhombus4Atribuiri multiple, ca de exemplu:
$a = $b = ++$c; sau $a = $b += 10;
F. Radulescu. Curs: Baze de date 46 Atribuirile intorc o valoare
/rhombus6Ca si in limbajul C atribuirile intorc o valoare: if ($con = mysql_connect(…)) …
/rhombus6Ca si in limbajul C o expresie logica e evaluata doar pana in momentul in care valoarea sa este certa: mysql_connect(…)
or die('Conexiune
esuata');
F. Radulescu. Curs: Baze de date 47 Operatori
/rhombus6Aritmetici: +, -, *, /, % (modul)
/rhombus6Logici: ==, ===, !=, !==, <, >, <=, >=
/rhombus6Conectori logici: and, &&, or, ||, ! (negare), xor (sau exclusiv)
/rhombus6Operatori pe siruri: . (concatenare)
/rhombus6Operatori pe biti: &, |, ~ (inversare biti)
F. Radulescu. Curs: Baze de date 48 Structuri de control
/rhombus6Exista o serie de structuri de control care sunt similare celor din limbajul C.
/rhombus6Vom avea ca si acolo decizii, cicluri,
alegere
/rhombus6Se pot defini ca si in C functii (nu exista decat functii, nu si proceduri ca in Pascal).
F. Radulescu. Curs: Baze de date 49 Decizia
/rhombus6În PHP aceste instrucțiuni sunt asemănătoare ca sintaxă cu cele similare din limbajul C.
/rhombus6Sintaxa:
if ( conditie_1 )
{ instructiuni_1 }
elseif ( conditie_2 )
{ instructiuni_2 }
. . . . . . . . . . else { instructiuni_N }
/rhombus6elseif și else sunt opționale (similar cu limbajul
C).
F. Radulescu. Curs: Baze de date 50 Decizia
/rhombus6Exemplu:
if ($a > $b) { print "a este mai mare ca b";} elseif ($a == $b) { print "a este egal cu b";} else
{ print "a este mai mic decat b";}
F. Radulescu. Curs: Baze de date 51 Ciclul WHILE
/rhombus6Sintaxa:
while ( conditie )
{ instructiuni }
/rhombus6Exemplu:
$i = 10; while ($i >= 0) { print $i–; }
F. Radulescu. Curs: Baze de date 52 Ciclul DO
/rhombus6Sintaxa:
do { instructiuni } while ( conditie );
/rhombus6Exemplu:
$i = 10; do { print $i–;} while ($i>0);
F. Radulescu. Curs: Baze de date 53 Ciclul FOR
/rhombus6Sintaxa:
FOR (expr1; expr2; expr3)
instructiune
/rhombus6Execuția unui astfel de ciclu se face astfel:
/rhombus4Se evaluează expresia expr1
/rhombus4Cât timp expresia expr2 are valoarea adevărat se re petă
operațiile:
•Se execută instrucțiunea ( instructiune )
•Se evaluează expresia expr3
/rhombus6Exemplu:
for ($i = 1; $i <=10; $i++)
{ print $i;}
/rhombus6Efectul va fi afișarea valorilor de la 1 la 10.
F. Radulescu. Curs: Baze de date 54 FOREACH
/rhombus6Sintaxa (2 variante):
foreach (expr_array as $valoare)
statement
foreach (expr_array as $cheie =>
$valoare)
statement
/rhombus6Se foloseste pentru parcurgerea unui tablou (ciclu dupa elementele unui tablou)
F. Radulescu. Curs: Baze de date 55 Exemplu
<?php // tiparirea unui tablou $arr = array("one", "two", "three"); foreach ($arr as $val) {
echo "Value: $val<br />\n"; }
foreach ($arr as $k => $val) {echo "Cheie: $k; Val: $val<br />\n";
}?>
F. Radulescu. Curs: Baze de date 56 Break si Continue
/rhombus6Aceste instrucțiuni se folosesc pentru a ieși
dintr-un ciclu, respectiv pentru a se trece necondiționat la un nou pas al ciclului chiar dacă pasul curent nu s-a terminat.
/rhombus6Exemplu:
Tipărirea numerelor impare dintre 1 și 10
for ($i = 1;;$i++) { if ($i > 10) { break; } if ($i % 2) { continue; } print $i; }
F. Radulescu. Curs: Baze de date 57 Alegerea (Switch)
/rhombus6Sintaxa:
switch (expr) { case val1:
instructiuni
case val2:
instructiuni
. . . . . . . . default:
instructiuni
}
F. Radulescu. Curs: Baze de date 58 Alegerea (Switch)
/rhombus6Efectul este următorul:
/rhombus4Se evaluează expresia expr
/rhombus4Se parcurg etichetele case ( val1, val2, …)
una după alta. În cazul în care se găsește o egalitate, se execută instrucțiunile de la acea etichetă până la prima instrucțiune break sau până se sfârsește întregul
switch .
/rhombus4Dacă nu există nici o egalitate se execută instrucțiunile de la default
F. Radulescu. Curs: Baze de date 59 Alegerea (Switch)
/rhombus6Exemplu:
switch ($i) { case 0: print "i egal cu 0"; break; case 1: print "i egal cu 1"; break; case 2: print "i egal cu 2"; break; default: print "i nu este egal cu 0, 1 sau 2"; }
/rhombus6De remarcat că dacă instrucțiunile break ar lipsi, în cazul în care
$i este egal cu 0 se tipăresc toate cele patru mesa je iar în cazul
în care este egal cu 1 doar ultimele trei.
F. Radulescu. Curs: Baze de date 60 Functii
/rhombus6Programele PHP pot conține funcții definite de utilizator, inclusiv funcții recursive.
/rhombus6Sintaxa definiției unei funcții este următoarea:
function nume_functie
(lista_parametri )
{instructiuni }
/rhombus6Dacă se dorește ca funcția să întoarca o valoare, se folosește instrucțiunea:
return expresie ;
F. Radulescu. Curs: Baze de date 61 Functii
/rhombus6Exemplu:
function la_patrat ($numar) { return $numar * $numar; }echo la_patrat(10);
F. Radulescu. Curs: Baze de date 62 Functii
/rhombus6Folosirea unei funcții se poate face doar după definiția acesteia.
/rhombus6Parametri sunt transmiși prin valoare .
/rhombus6Dacă se dorește transmiterea prin referință a unui argument, se poate folosi construcție &variabila:
function la_patrat (&$numar) { $numar = $numar * $numar; }$a = 10; la_patrat($a); echo $a; // tipareste 100
F. Radulescu. Curs: Baze de date 63 Functii
/rhombus6Se poate transmite prin valoare adresa sa:
function la_patrat ($numar) { $numar = $numar * $numar; }
$a = 10; la_patrat($a); echo $a; // tipareste 10 la_patrat(&$a); echo $a; // tipareste 100
F. Radulescu. Curs: Baze de date 64 Functii
/rhombus6La definirea unei funcții se pot asigna și valori implicite pentru argumente.
/rhombus6În cazul în care acestea lipsesc la apel sunt luate implicit valorile din definiție:
function la_patrat ($numar = 4) { return $numar * $numar; }echo la_patrat(10); // tipareste 100 echo la_patrat(); // tipareste 16
F. Radulescu. Curs: Baze de date 65 Functii
/rhombus6Astfel de argumente trebuie să fie ultimele din
listă.
/rhombus6De exemplu secvența:
function inmultire ($numar1 = 4,
$numar2)
{ return $numar1 * $numar2; }echo inmultire(10); va semnala o eroare deoarece automat valoarea
10 va fi asignată primului argument.
F. Radulescu. Curs: Baze de date 66 Functii PHP
/rhombus6Pachetul PHP pune la dispoziție un număr foarte mare de funcții, atât de uz general cât și funcții specifice accesului la diverse sisteme de gestiune a bazelor de date.
/rhombus6În continuare sunt prezentate doar o parte dintre acestea, incluzând funcțiile uzuale de acces la baze de date MySQL si Oracle
F. Radulescu. Curs: Baze de date 67 Functii ARRAY
array array( lista valori );
/rhombus6Crează un array conținând valorile din listă.
Pentru un array bidimensional se poate folosi
operatorul => pentru asocierea celor doi indici.
/rhombus6Exemplu:
$note = array(1, 2, 3, 4, 5, 6, 7,
8, 9, 10);
$calificative("S"=>"Satisfacator",
"B"=>"Bine","F"=>"Foarte bine");
/rhombus6În primul caz s-a definit un array cu o singură
dimensiune iar în cel de-al doilea unul cu două dimensiuni.
F. Radulescu. Curs: Baze de date 68 Functii ARRAY
void list( lista de valori );
/rhombus6Asignează o listă de variabile ca și când ar
fi un array .
/rhombus6Exemplu:
$rezultat = mysql_query("select
nume_s, grupa from studenti");
while ( list($n, $g) =
mysql_fetch_row($rezultat) )
{ print( "Nume: $n<br>Grupa: $g<br>\n"); }
F. Radulescu. Curs: Baze de date 69 Functii ARRAY
int count(variabila);
/rhombus6Întoarce numărul de elemente din variabilă.
/rhombus6Dacă este un array acest numar poate fi mai
mare ca 1. Dacă variabila nu este setată întoarce 0.
array each(array array);
/rhombus6întoarce următoarea pereche (index, valoare)
dintr-un array sub forma unui tablou având indicii 0 și 1 sau key și value .
F. Radulescu. Curs: Baze de date 70 Functii ARRAY
/rhombus6De notat că fiecare variabilă de tip array are
asociat un pointer intern care arată către unul dintre elementele sale iar funcția each() se
poate folosi pentru parcurgerea sa.
/rhombus6Exemplu:
$calificative("S"=>"Satisfacator",
"B"=>"Bine","F"=>"Foarte bine");
list($c, $d) = each($calificative);
/rhombus6Atunci:
/rhombus4$c are valoarea "S"
/rhombus4$d are valoarea "Satisfacator"
F. Radulescu. Curs: Baze de date 71 Functii ARRAY
mixed next(array tablou);
/rhombus6Întoarce următorul element al unui array sau false dacă nu mai sunt
elemente, avansând deci pointerul intern asociat tabloului.
/rhombus6De notat că dacă un tablou are
elemente nule și pentru acestea valoarea întoarsă va fi false . De aceea,
pentru parcurgerea unui tablou se recomandă folosirea lui each() .
F. Radulescu. Curs: Baze de date 72 Functii ARRAY
mixed prev(array tablou);
/rhombus6Întoarce precenentul element al unui array sau false
dacă nu mai sunt elemente, decrementând deci pointerul intern asociat tabloului.
/rhombus6Aceeasi observatie ca la next (folosire each)
mixed reset(array tablou);
/rhombus6Setează pointerul intern asociat tabloului la primu l
element al acestuia.
/rhombus6Întoarce valoarea acestui element.
int sizeof(array tablou);
/rhombus6Întoarce numărul de elemente ale unui tablou. Este analog cu count() .
F. Radulescu. Curs: Baze de date 73 Functii de informare/setare
int error_reporting(int [level]);
/rhombus6Setează nivelul de erori care sunt raportate de PHP ,
conform tabelului de mai jos. Valorile respective p ot
fi cumulate prin adunare în cazul în care se doresc
setate simultan mai multe tipuri de raportări..
string getenv(string variabila);
/rhombus6Întoarce valoarea unei variabile de mediu sau false în
caz de eroare.
$ip = getenv("REMOTE_ADDR"); // prelevare adresa IP
a clientului
F. Radulescu. Curs: Baze de date 74 Functii de informare/setare
void putenv(string setare);
/rhombus6Crează o noua variabilă de mediu. Exemplu:
putenv("USER = $user");
int phpinfo(void);
/rhombus6Întoarce o suită de informații privind PHP: opțiuni de
compilare, versiune, informații despre serverul de web, variabile de mediu, versiunea sistemului de operare, etc.
string phpversion(void);
/rhombus6Întoarce sub forma unui șir numărul versiunii PHP folosite
F. Radulescu. Curs: Baze de date 75 Alte functii
void eval(string sir);
/rhombus6Șirul de caractere (care trebuie să conțină expresii valide PHP) este evaluat.
/rhombus6Exemplu:
$nume = 'Ion'; $str = 'Ma numesc $nume<br>'; echo $str; eval( "\$str = \"$str\";" ); echo $str;
/rhombus6Va avea ca efect tipărirea mesajelor:
Ma numesc $nume Ma numesc Ion
F. Radulescu. Curs: Baze de date 76 Alte functii
void die(string mesaj);
/rhombus6Afișeaza un mesaj și termină execuția scriptului.
/rhombus6Exemplu:
$nume_fisier = '/usr/local/date.txt'; $f = fopen($nume_fisier, 'r')
or die "Nu se poate deschide fisierul
$filename";
void exit(void);
/rhombus6Termină imediat execuția scriptului.
F. Radulescu. Curs: Baze de date 77 Alte functii
void sleep(int secunde);
/rhombus6Întârzie execuția un număr de secunde.
echo(string arg1, string
[argn]…);
/rhombus6sau
echo string arg1, string
[argn]…;
/rhombus6Evaluează și afișează parametrii primiți
ca argument.
F. Radulescu. Curs: Baze de date 78 Alte functii
print(string arg);
/rhombus6Afișează argumentul
int printf(string format, mixed
[argumente]…);
/rhombus6Afișează argumentele formatate conform șirului format (asemănător cu limbajul C).
int strcmp(string str1, string str2);
/rhombus6Compară două șiruri. Întoarce o valoare < 0, egală cu 0 sau >0 după cum str1 este mai mic, egal sau
mai mare decât str2 . Literele mari și mici sunt
considerate diferite.
int strlen(string sir);
/rhombus6Întoarce lungimea unui șir de caractere.
F. Radulescu. Curs: Baze de date 79 Alte functii
string substr(string sir, int start, int
[lung]);
/rhombus6Întoarce un subșir conținând caracterele începând c u cel
dat de start și având lunginea lung . Dacă start este
negativ, numărătoarea pentru stabilirea caracterulu i inițial
este făcută de la sfârșitul șirului. Dacă lung este negativ
ultimul caracter al subșirului este cel aflat la di stanța lung
de sfârșitul șirului. Întoarce întotdeauna cel puți n un
caracter, cel dat de start .
/rhombus6Exemple:
$rest = substr("abcdef", 1); // întoarce "bcdef" $rest = substr("abcdef", 1, 3); // întoarce "bcd" $rest = substr("abcdef", -1); // întoarce "f" $rest = substr("abcdef", -2); // întoarce "ef" $rest = substr("abcdef", -3, 1); // întoarce "d" $rest = substr("abcdef", -1, -1); // întoarce "bcde "
F. Radulescu. Curs: Baze de date 80 Alte functii
int is_array(mixed var);
Întoarce true dacă variabila este un array și false altfel.
int is_double(mixed var);
int is_float(mixed var);
int is_real(mixed var);
Întorc true dacă variabila este un număr real și false altfel.
int is_int(mixed var);
int is_integer(mixed var);
int is_long(mixed var);
Întorc true dacă variabila este un număr întreg și false altfel.
F. Radulescu. Curs: Baze de date 81 Alte functii
int is_object(mixed var);
Întoarce true dacă variabila este un obiect și false
altfel.
int is_string(mixed var);
Întoarce true dacă variabila este un șir de
caractere și false altfel.
int isset(mixed var);
Întoarce true dacă variabila există și false altfel.
int unset(mixed var);
Elimină o variabilă.
string strval(mixed var);
Convertește la șir de caractere o variabilă scalară
F. Radulescu. Curs: Baze de date 82 Bibliografie
/rhombus6Documentatia PHP
http://www.php.net/docs.php
Cateva carti disponibile online:
/rhombus6Sams – Teach Yourself PHP in 10 Minutes(2005)
http://www.net130.com/CMS/Pub/book/book_web/book_we b_php/2005_10_19_70383.htm
/rhombus6Object Oriented PHP Concepts Techniques and Code (s i
altele), la adresa:
http://cid-846ffdcf0d3320d8.skydrive.live.com/brows e.aspx/eBook
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: F. Radulescu. Curs: Baze de date 1Partea 2. Baze de date si [606264] (ID: 606264)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
