Documente Academic
Documente Profesional
Documente Cultură
PHP Suport de Curs PDF
PHP Suport de Curs PDF
PHP
Specializare:
WebProgramator
_____________________________________________________________________________________________
Curs: PHP
CUPRINS
CAPITOLUL 1. INTRODUCERE IN LIMBAJUL PHP ..........................................................................................................3
1.2.CREAREA UNUI SCRIPT PHP ............................................................................................................................................ 4
CAPITOLUL 2. ELEMENTE DE BAZA ALE LIMBAJULUI PHP............................................................................................6
2.1.TIPURI DE VARIABILE ..................................................................................................................................................... 6
2.2.DECLARAREA VARIABILELOR IN PHP ............................................................................................................................... 12
2.3.DOMENIUL DE VALABILITATE AL VARIABILELOR ................................................................................................................. 13
2.4.OPERATORI ............................................................................................................................................................... 15
2.5. STRUCTURI DE CONTROL ............................................................................................................................................. 17
2.6. UTILIZAREA MATRICELOR............................................................................................................................................. 23
CAPITOLUL 3. FUNCTII PHP ....................................................................................................................................... 27
CAPITOLUL 4. PHP SI FORMULARELE HTML .............................................................................................................. 31
4.1. CREAREA UNUI FORMULAR .......................................................................................................................................... 31
4.2. UTILIZAREA METODELOR GET SI POST .......................................................................................................................... 31
4.3. RECEPTIONAREA DATELOR DE LA UN FORMULAR HTML .................................................................................................... 32
4.4. TRATAREA ERORILOR .................................................................................................................................................. 35
4.5. EXERCITIU ................................................................................................................................................................ 35
CAPITOLUL 5. FISIERE SI DIRECTOARE....................................................................................................................... 36
5.1. CREAREA, SCRIEREA FISIERELOR .................................................................................................................................... 36
5.2. BLOCAREA FISIERELOR ................................................................................................................................................ 38
5.3. CITIREA FISIERELOR .................................................................................................................................................... 40
5.4. CREAREA SI PARCURGEREA DIRECTOARELOR. ................................................................................................................... 43
5.5. DREPTURI DE ACCESS LA FISIERE .................................................................................................................................... 45
CAPITOLUL 6. SITE-URI DINAMICE, LUCRUL CU BAZELE DE DATE .............................................................................. 46
6.1. CONECTAREA LA SERVERUL MYSQL; TRATAREA ERORILOR ................................................................................................. 46
6.2. CREAREA SI SELECTAREA UNEI BAZE DE DATE ................................................................................................................... 48
6.3. CREAREA TABELELOR, SCRIPTURI SQL ............................................................................................................................ 50
6.4. ADAUGAREA, INSERAREA DATELOR INTR-O TABELA ........................................................................................................... 52
6.5. CITIREA DATELOR DINTR-O TABELA SAU INTEROGARE ........................................................................................................ 53
6.5. CITIREA DATELOR DINTR-O TABELA SAU INTEROGARE ........................................................................................................ 55
CAPITOLUL 7. SESIUNI SI COOKIE-URI ....................................................................................................................... 56
7.1. DESPRE SESIUNI, CREAREA UNEI SESIUNI PHP.................................................................................................................. 56
7.2 MANIPULAREA VARIABILELOR SESIUNII. ........................................................................................................................... 58
7.2. STERGEREA UNEI SESIUNI ............................................................................................................................................ 59
7.3. CREAREA SI CITIREA COOKIE-URILOR .............................................................................................................................. 60
7.3. INTRODUCEREA PARAMETRILOR INTR-UN COOKIE ............................................................................................................. 63
7.4. MONITORIZAREA VIZITATORILOR UNUI SITE ..................................................................................................................... 64
7.5 STERGEREA COOKIE-URILOR .......................................................................................................................................... 67
CAPITOLUL 8. UTILIZAREA CLASELOR IN PHP ............................................................................................................ 68
8.1 DESPRE POO, AVANTAJELE UTILIZARII CLASELOR ............................................................................................................... 68
8.2. DECLARAREA CLASELOR, CLASE DERIVATE ....................................................................................................................... 68
8.3. INSTANTIEREA CLASELOR; STERGEREA INSTANTELOR UNEI CLASE .......................................................................................... 70
CAPITOLUL 9. EXEMPLU DE SCRIPT PHP ................................................................................................................... 74
_______________________________________________________________________________________________
Curs: PHP
_______________________________________________________________________________________________
Curs: PHP
Limbajul PHP reprezinta o tehnologie server, de aceea el nu poate fi folosit pentru operatii pe
partea de client . Din acest punct de vedere limbajul PHP nu poate inlocui limbajul Java Script. Pe
de alta parte putem folosi limbajul PHP pentru a generera cod Java Script.
O secventa de cod PHP incepe intotdeauna cu caracterul escape : <?php , urmat de una sau mai
multe instructiuni PHP. Sfarsitul secventei de cod PHP este marcat de caracterul escape : ?>.
In acest fel serverul Web va identifica secventele <?php si ?> si va interpreta tot ce se afla in
interiorul acestor doua secventa ca si cod PHP. Pentru a vedea daca serverul Web este configurat
astfel incat sa interpreteze codul PHP putem crea un fisier simplu ( folosind un editor de text, de
exemplu Notepad), iar in acest fisier vom scrie urmatoarea secventa:
<?php
phpinfo();
?>
Secventa pentru
start cod PHP
Instuctiune PHP
Salvam acest fisier cu numele de : phpinfo.php in directorul pentru documente Apache, in general
acest director se numeste htdocs si se gaseste in directorul unde a fost instalat serverul Apache.
In acest moment deschideti browserul de pe sistemul dvs., iar ca adresa URL introducem :
http://localhost/phpinfo.php; ar trebui sa vedeti o pagina Web cu informatiile de configurare a
modulului PHP.
Dupa cum observati am inserat in aceasta secventa de cod HTML o secventa de cod PHP, care
incepe cu secventa <?php si se termina cu secventa ?>.
Elementul echo reprezinta o instructiune a limbajului PHP si va instrui serverul Web sa insereze
secventa: <p>Bun venit la site-ul nostru !!! <p> in codul HTML.
Astfel secventa HTML generata de serverul Web va fi urmatoarea:
_______________________________________________________________________________________________
Curs: PHP
In realitate nu avem nevoie de PHP pentru a genera o secventa atat de simpla de cod HTML.
In exemplul urmator vom declara citeva variabile PHP, dupa care vom insera continutul acestora
in codul HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?php
//Declaram cateva varibile
$site_title = "My Site";
$bg_color = "white";
$user_name = "Popescu Ion";
?>
<html>
<head>
<title><?php echo $site_title; ?></title>
</head>
<body bgcolor=<?php print $bg_color; ?> >
<?php
echo "<p>Salut ".$user_name."<br>";
echo "Astazi este:".date("F d, Y");
?>
</body>
</html>
Salvam acest fisier sub numele test1.php, dupa care deschidem browserul iar ca adresa folosim
http://localhost/test1.php. In fereastra browserului va fi incarcata o pagina ca in figura de mai jos:
Observam cum variabilele declarate in prima sectiune de cod PHP au fost utilizate pentru a
genera cod HTML corespunzator.
_______________________________________________________________________________________________
Curs: PHP
defineste trei variabile, tipurile acestora sunt respectiv: boolean, intreg respectiv string. Putem
afla tipul unei variabile folosind functia gettype() care returneaza un string continand tipul
variabilei cercetate.
Functia is_int() returneaza TRUE daca variabila furnizata ca parametru este de tip integer. Alte
functii similare sunt : is_string(), is_bool().
Functia dump_var() afiseaza tipul si valoarea unei variabile si este folosita de obicei in scopul
depanarii codului PHP.
Tipul boolean variabilelele de tipul boolean pot lua doar doua valori : FALSE sau TRUE
<?php
$boolVar = TRUE;
$boolVar1 = True;
$boolVar2=FALSE;
$boolVar3=False;
echo dump_var($strVar);
?>
In exemplul de mai sus am declarat patru variabile de tipul boolean. Se observa ca putem initializa
valoarea variabilelor folosind literalele TRUE sau True, respectiv FALSE sau False; nu se face
distinctie aici intre literele mari sau mici.
_______________________________________________________________________________________________
Curs: PHP
Variabilele de alt tip decat boolean pot fi convertite la tipul boolean prin operatorul cast (bool) .
Urmatoarele valori vor fi convertite implicit in variabile booleene cu valorea false:
- variabile booleene cu faloarea false
- variabile intregi cu valoarea 0
- variabile float cu valoarea 0.0
- variabile string cu continut nul :
- variabile array (tablou) cu numar de elemente zero
- obiecte cu numar de membrii zero
- tipul special NULL , folosit in general pentru referinte spre obiecte
<?php
var_dump( (bool) 0);
var_dump( (bool) );
var_dump( (bool) 1);
var_dump( (bool) mystring);
?>
// bool(false)
// bool(false)
// bool(true)
// bool(true)
Tipul integer reprezinta numere, ele pot fi specificate in format zecimal, hexazecimal sau octal.
In tabelul urmator prezentam cateva declaratii de variabile intregi:
<?php
$var1 = 215678;
$var2 = 0x1A8;
$var3 = 067;
?>
Valorile minime, respectiv maxime pe care le poate lua o variabila de tip integer depind de
sistemul de operare pe care ruleaza modulul PHP. De exemplu pentru un sistem Windows
valoarea unui integer se memoreaza pe 32 de biti: 31 bit pentru numar si un bit pentru semn. In
acest caz valorile unui intreg se afla in intervalul :-213 repectiv: 213.
Daca incercam sa folosim un integer cu valori care ies din acest inteval vo avea de-a face cu un
fenomen de depasire : integer overflow. In acest caz interpretorul PHP converteste acesta valoare
intr-o valoare de tip float (care are un interval mai extins de valori).
In PHP simpla impartire a doua valori intregi va produce ca rezultat o variabila de tip float. Pentru
a obtine doar partea intreaga a acestui rezultat putem folosi operatorul cast (int).Pentru a rotunji
rezultatul la intregul cel mai apropiat de valoarea reala folosim functia round() :
<?php
var_dump(25 / 7);
var_dump((int)25 / 7);
var_dump(round(25 / 7));
?>
//float(3.5714285714286)
//int(3)
//float(4)
_______________________________________________________________________________________________
Curs: PHP
Tipul string reprezinta o insiruire de caractere, fiecare caracter este memorat pe 1 byte; setul de
caractere este limitat la 256 valoari distincte. Dimensiunea sirurilor poate fi oricat de mare in PHP,
nu exista specificatii care sa limiteze numarul maxim de caractere dintr-un sir.
In PHP, un sir poate fi declarat in mai multe feluri:
prin delimitare cu ghilimele simple: '
prin delimitare cu ghilimele duble: "
prin sintaxa heredoc
Delimitarea cu ghilimele simple este cea mai simpla reprezentare a sirurilor de caractere in PHP.
Daca dorim ca sirul sa contina caracterul ' va trebui sa folosim inseram inaintea lui caracterul
escape \. Daca dorim ca sirul sa contina caracterul \ va trebui sa dublam acest caracter. Aceast
comportament este exemplificat in exemplul urmator:
<?php
$var1 = ' Acesta este un sir de test';
echo $var1;
echo 'Institultul \'Multimedia\'';
echo 'Vrei sa stergi C:\\*.* ?';
echo 'Variabila var1=$var1';
?>
Dupa cum se observa in ultima linie variabila $var1 nu este expandata adica nu va fi afisat:
Variabila var1=Acesta este un sir de test. Pentru a realiza acest lucru se folosesc ghilimelele duble.
Delimitarea cu variabile duble permite expandarea valorilor variabilelor continute in sir. Pe de alta
parte sunt recunoscute urmatoarele caractere ESCAPE:
\n
\r
\t
\\
\$
\"
Linie noua
Carriage return ( rand nou)
Tab orizontal
backslash
Semnul dolar
Ghilimele duble
Daca un caracter dolar: $ va fi intalnit in sirul de caractere delimitate cu ghilimeme duble, PHP va
analiza urmatoarele caractere incercand sa gaseasca o variabila cu acelasi nume declarata
anterior. Daca va fi gasita valoarea acestei variabile va inlocui sirul $(nume variabila). Acest lucru
este exemplificat in exemplul urmator:
<?php
$var1 = 'Popescu';
echo "Candidatul $var1 a fost admis";
echo "Candidatul $var1a fost admis";
_______________________________________________________________________________________________
Curs: PHP
echo "Candidatul ${var1}a fost admis"; // afiseaza: Candidatul Popescua fost admis
?>
In anumite situatii pentru a nu da nastere la confuzii este bine sa includem numele variabilelor
intre acolade {} ; in acest caz vom fi siguri ca interpretorul PHP va folosi numele corect al
variabilelor.
Pe langa imbricarea variabilelor in cadrul sirurilor delimitate prin ghilimele duble, PHP pune la
dispozitie operatorul de concatenare a sirurilor: .(punct) . Acest operator adauga un sir la sfarsitul
altui sir . De exemplu:
<?php
$nume = 'Popescu';
$prenume='Ion';
echo 'Numele de familie este '.$nume. 'iar prenumele este '.$prenume;
?>
In acest caz ultima linie de cod va afisa: Numele de familie este Popescu iar prenumele este Ion.
Se observa cum operatorul de concatenare a sirurilor combina textul predefinit cu variabilele
declarate anterior.
In anumite situatii este necesar sa accesam unul dintre caracterele unui sir. Pentru aceasta putem
folosi parantezele{} ca in exemplul de mai jos:
<?php
$var1 = ' Acesta este un sir de test';
echo $var1{0};
echo $var1{1};
$var1{0} = 'C';
?>
_______________________________________________________________________________________________
Curs: PHP
// afiseaza 0
// afiseaza: caractere mixte
// afiseaza : CARACTERE MIXTE
// inlocuieste in $var4 toate aparitiile sirului Files
// cu valoarea translatiei: Fiiere
// afiseaza 9
// afiseaza false
Sintaxa heredoc este o alta modalitate de a delimita siruri. In acest caz delimitatorul este ("<<<");
acesta trebuie urmat de un identificator unic, dupa care urmeaza sirul de caractere, iar secventa
se incheie din nou cu identificatorul mentionat. Identificatorul de incheiere trebie sa se afle in
prima coloana a liniei, acesta poate contine caractere alfanumerice dar neaparat trebuie sa
inceapa cu o litera , nu cu o cifra sau alt semn.
Exemplu:
<?php
$var1 = <<< EOT
Exemplu de sir care
foloseste delimitatorul
heredoc.
EOT;
echo $var1;
//afiseaza: Exemplu de sir care
// foloseste delimitatorul heredoc.
?>
Tipul array reprezinta un vector de valori, fiecare element al vectorului are asociata o cheie.
Aceasta cheie va fi folosita ulterior la identificarea unui element specific at vectorului. In PHP tipul
array se mai numeste si tip map ordonat , deoarece elemente vectorului sunt ordonate dupa
campul cheie.
O variabila de tip array se poate declara in mai multe feluri:
<?php
$fructe[3];
$fructe[0] = 'mere';
$fructe[1] = 'pere';
$fructe[2] = 'cirese';
//Variabila $fructe de mai sus se mai poate declara si astfel:
$fructe1 = array("mere", "pere", "cirese");
//Referirea elementelor se face in felul urmator:
echo $fructe[0]; // afiseaza mere
echo $fructe[1]; // afiseaza pere
echo $fructe[2]; // afiseaza cirese
echo $fructe1[0];
// afiseaza mere
echo $fructe1[1];
// afiseaza pere
?>
Cheile pot avea valori intregi sau pot fi siruri de caractere; este posibil sa mixam chei intregi si de
tip caracter, ca in exemplul urmator:
_______________________________________________________________________________________________
Curs: PHP
<?php
$myArray = array( 10 => 200, 20 => 400, "a" => 600);
echo $myArray[10];
echo $myArray[20];
echo $myArray["a"];
//afiseaza 200
//afiseaza 400
//afiseaza 600
Este posibil ca un element al vectorului sa fie de asemenea de tip array. In acest caz avem de-a
face cu un array multidimensional:
<?php
$multiDimArray = array("firstLine" => array(1 =>10, 2 => 20, "a" =>"alpha"));
$multiDimArray["nextLine"] =
array(1 =>20, 2 => 40, "b" =>"beta");
echo $multiDimArray["firstLine"][1];
//afiseaza 10
echo $multiDimArray["nextLine"][1];
//afiseaza 20
echo $multiDimArray["firstLine"][2];
//afiseaza 20
echo $multiDimArray["firstLine"]["a"];
//afiseaza alpha
echo $multiDimArray["nextLine"]["b"];
//afiseaza beta
?>
In cazul de mai sus am declarat un array cu 2 linii si 3 coloane.Prima linie este identificata de
array-ul cu numele fisrtLine, iar ce-a de-a doua linie este identificata de nextLine.
Tipul object reprezinta de fapt instanta unei clase declarate in PHP. O cllasa este o structura
care contine variabile membru si functii membru. De exemplu declaram o clasa care
Memoreaza datele personale ale unui user:
<?php
class PersUI = {
var $name=null;
var $adresaEmail=null;
var $logged=null;
//PersUI constructor
function PersUI() {
$name="";
$adresaEmail=";
$logged=FALSE;
}
//functie pentru setarea numelui
function setName($aName) {
$name=$aName;
_______________________________________________________________________________________________
Curs: PHP
}
//functie pentru obtinerea numelui
function getName() {
return $name;
}
function setAdresaEmail($emailAdress) {
$adresaEmail = $emailAdress;
}
function getAdresaEmail() {
return $adresaEmail;
}
function isLogged() {
return $logged;
}
}
$myPers = new PersUI();
$myPers->setName("Ionescu");
$myPers->setAdrresaEmail("Ionescu@yahoo.com");
echo $myPers->getName();
// Afiseaza Ionescu
echo $myPers->getAdresaEmail(); // Afiseaza Ionescu@yahoo.com
echo $myPers->isLogged();
// Afiseaza false
?>
Declaratia clasei incepe cu variabilele membru : name, adresaEmail, logged care initial au valoarea
null, adica nu sunt initializate( nu au nici un fel de valoare asociata).
Urmeaza portiunea unde sunt declarate functiile; acestea pot avea un argument sau pot fi fara
argumente. De exemplu functia setName($aName) va asocia variabilei membru $name valoarea
continuta in varibila furnizata ca parametru : $aName;
Functia getName() nu are nici un parametru dar ea returneaza valoarea continuta in variabila
$nume.
Crearea unui obiect de tipul PersUI se face prin linia: $myPers = new PersUI; myPers este o
variabila de tip obiect si reprezinta o instanta a clasei PersUI.
Tipul resource este un tip special de variabila care pastreaza o legatura spre resurse externe.
Exemple de resurse externe: manipulatori pentru deschidere de fisiere, conectare la baze de date,
compresia fisierelelor, resurse COM, etc...
Odata cu PHP 4.0 a fost introdus un mecanism care elibereaza automat memoria alocata pentru
referintele care nu mai sunt referite in program. Acest mecanism se numeste garbage collection
(colectorul de gunoaie) ; un mecanism similar functioneaza in limbajul Java.
Tipul NULL reprezinta varibilele care nu au inca atribuita o valoare.
O variabila se considera a avea valoarea Null daca
- este setata explicit prin atribuirea valorii NULL
- nu a fost asignata inca o valoare acestei variabile
- varibila a fost stearsa prin functia unset();
Curs: PHP
In limbajul PHP variabilele sunt reprezentate prin semnul $ urmat de numele variabilei. Numele
variabilei este case sensitive, adica conteaza faptul ca numele este scris cu litere mari sau mici.
Intotdeuna numele variabilelor incepe cu o litera sau underscore(_) si poate fi urmat de litere sau
cifre. In PHP tipul variabilelor se specifica in momentul declararii lor:
<?php
$varInt = 12371;
$varBool = TRUE;
$varStr = "sir de test";
$myArray = array("alpha","beta","gama");
$var1 = 124;
$var2 = &$var1;
echo $var2;
$var2 = "valoarea lui var2= $var2";
echo $var2;
echo $var1;
?>
Curs: PHP
}
echo makeSum(); //nu afiseaza nimic
?>
Functia makeSum() foloseste variabilele $var1 si $var2 declarate anterior, dar aceste variabile nu
au domeniu de valabilitae in interiorul functiei.Prin urmare rezultatul functiei este NULL. Pentru a
rezolva aceasta problema vom declara cele douva variabile ca fiind externe functiei , adica
variabile globale:
<?php
$var1 = 124;
$var2 = 200;
function makeSum() {
global $var1,$var2;
return $var1 + $var2;
}
echo makeSum(); //afiseaza 224
?>
In exemplul de mai sus declaratia: global $var1,$var2 face ca variabilele $var1,$var2 sa fie
recunoscute si in interiorul functiei.
O alta metoda prin care putem solutiona aceasta problema este prin folosirea variabilei PHP
predefinite $GLOBALS.
<?php
$var1 = 124;
$var2 = 200;
function makeSum() {
return $GLOBALS['var1'] + $GLOBALS['var2'];
}
echo makeSum(); //afiseaza 224
?>
$GLOBALS este de fapt un array ; elementele acestui array au cheia egala cu numele variabilelor
declarate, iar urmatorul cimp egal cu valoarea lor.
$GLOBALS este o variabila superglobala, ea va fi recunoscuta in orice script.
Variabilele declarate in interiorul unei functii se numesc variabile locale functiei si nu au doeniul
de valabilitate in afara functiei. Aceste variabile sunt create pe stiva, de aceea la iesirea din
functie acestea vor fi automat distruse.
<?php
function makeSum() {
$var1 = 124;
$var2 = 200;
return $var1+ $var2;
}
echo $var1; //nu afiseaza nimic. Variabila $var1 out of scope
echo $var2; //nu afiseaza nimic. Variabila $var2 out of scope
echo makeSum(); //afiseaza 224
?>
_______________________________________________________________________________________________
Curs: PHP
O alta categorie importanta de varibile (din punctul de vedere al domeniului) sunt variabilele
statice. Aceste variabile sunt valabile in domeniul functiei unde au fost declarate , dar au
proprietatea ca valaorea lor nu se altereaza la un apel succesiv al functiei:
<?php
function increment() {
static $var1 = 0;
$var1++;
return $var1;
}
echo increment(); //afiseaza 1
echo increment(); //afiseaza 2
echo increment(); //afiseaza 3
?>
In anumite situatii avem nevoie ca numele variabilelor sa fie variabil , adica sa putem schimba
numele variabilei in momentul executiei programului (run-time). In acest scop exista asa numitele
variable variables :
<?php
$var1 = 'nume';
$$var1='Ionescu';
echo $var1;
echo $nume;
echo ${$var1};
?>
// afiseaza nume
// afiseaza Ionescu
// afiseaza Ionescu
2.4.Operatori
Operatorii sunt simboluri specifice care realizeaza o actiune specifica in cadrul unei expresii.
Operatorii actioneaza asupra variabilelor prezente in expresie. De exemplu in cadrul expresiilor
matematice vom folosi operatori aritmetici.
Exemple de operatori aritmetici:
$a + $b
Adunare : a+b
$a - $b
Scadere : a-b
$a * $b
Inmultire: a*b
$a / $b
Impartire: a/b
$a%$a
Moule :restul impartirii lui a la b
$a +=$b
Echivalent cu: $a = $a + $b
$a -=$b
Echivalent cu: $a = $a - $b
$a *=$b
Echivalent cu: $a = $a * $b
$a /=$b
Echivalent cu: $a = $a / $b
$a++
Incrementare ; Ecivalent cu $a = $a +1
$a-Decrementare; Echivalent cu $a = $a -1
_______________________________________________________________________________________________
Curs: PHP
Operatori pe biti sunt folositi pentru a realiza operatii logice pe biti asupra operanzilor.
$a & $b
And logic pe biti intre a si b
$a | $b
Sau logic pe biti intre a si b
$a ^ $b
XOR (Exclusive OR) pe biti intre a si b
~$a
Negare pe biti 01; 10
$a >> $b
Deplasare cu $b biti la dreapta a operandului $a
$a << $b
Deplasare cu $b biti la stanga a operandului $a
_______________________________________________________________________________________________
Curs: PHP
2.5.1. Instructiunea IF
If(conditie) {
Instructiune(1);
Instructiune(2);
..................
}
Dupa cum se observa, dupa if urmeaza o pereche de paranteze rotunde in interiorul carora se
plaseaza conditia, adica o expresie logica a carei rezultat poate fi TRUE sau FALSE. Daca rezultatul
expresiei logice este true, se vor executa instuctiunile: Instructiune(1), apoi Instructiune(2), etc...
Se observa ca acest set de instructiuni se plaseaza intre acolade. Doar intr-un singur caz aceste
acolade nu sunt necesare si anume: in cazul in care setul de instructiuni contine doar o singura
instructiune.
Daca rezultatul expresiei logice dintre paranteze rotunde este FALSE, setul de instructiuni dintre
acolade nu se va executa, controlul programului va fi plasat la instructiunea care urmeaza dupa
acolada:}.
Instructiunea if poate fi completata cu clauza : else, dupa cum urmeaza:
If(conditie) {
Instructiune(1);
Instructiune(2);
..................
}
else {
Instructiune(01);
Instructiune(02);
..................
}
In acest din urma caz, daca expresia logica conditie este adevarata se vor executa
instructiunile: Instructiune(1); Instructiune(2); , iar daca valoarea expresiei logice : conditie are
valoarea FALSE se vor executa instructiunile: Instructiune(01); Instructiune(02);
Clauza else poate fi urmata de asemenea de o instructiune if :
If(conditie1) {
Instructiune(1);
Instructiune(2);
..................
_______________________________________________________________________________________________
Curs: PHP
}
else If(conditie2) {
Instructiune(01);
Instructiune(02);
..................
}
else {
Instructiune(001);
Instructiune(002);
..................
}
In acest caz daca conditie1 este TRUE se executa Instructiune(1), respectiv Instructiune(2);
Daca conditie1 este FALSE, dar conditie2 este TRUE se executa: Instructiune(01), respectiv
Instructiune(02);
Daca conditie1 este FALSE si conditie2 este FALSE se executa : Instructiune(001), respectiv
Instructiune(002).
In continuare vom vedea cum se foloseste instructiunea if pentru a compara valorile a doua
variabile numerice:
<?php
if($a > $b) {
echo 'Valoarea variabiei a este mai mare ca variabila b';
}
else if($a == $b) {
echo 'Valoarea variabilei a este egala cu variabila b';
}
else {
echo 'Valoarea variabilei a este mai mica decat cea a variabilei b';
}
?>
In exemplul de mai sus am presupus ca variabilele $a si $b sunt create anterior si au valori
numerice.
Observatie: in locul instructiunii compuse else if(conditie ) se poate folosi clauza elseif.
In cazul in care vrem sa comparam valoarea unei singure variabile cu o succesiune de valori, in
locul instructiunii if putem folosi instructiune switch:
<?php
switch($a) {
case 0:
echo 'Valoare variabilei $a este 0';
break;
_______________________________________________________________________________________________
Curs: PHP
case 1:
echo 'Valoare variabilei $a este 1';
break;
case 2:
echo 'Valoare variabilei $a este 2';
break;
case 3:
echo 'Valoare variabilei $a este 3';
break;
}
?>
Executia instructiunii switch continua pana cand se intalneste o valoare corespunzatoare pentru
variabila $a. In acest caz, se afiseaza un mesaj, iar daca instructiunea este urmata de clauza:
break; instructiunea switch se va sfarsi. De retinut ca instructiune break; opreste executia
instructiunii switch.
Variabila $a poate avea si tipul string, de exemplu; in aest caz valorile cu care se compara vor avea
de asemenea tipul string.
Structuri de control repetitive (cicluri):
- while
- do-while
- for
- foreach
Curs: PHP
Curs: PHP
Curs: PHP
Instructiune(1);
Instructiune(2);
Instructiune(3);
.............
}
sau:
foreach(expresie_array as $key =>$valoare) {
Instructiune(1);
Instructiune(2);
Instructiune(3);
.............
}
In primul caz pentru fiecare element din array se va asocia valoarea variabilei : $valoare, iar dupa
fiecare executie a instructiunilor se va face trecerea la urmatorul element din array.
In cel de-al doilea caz pentru fiecare element din array se va face asocierea cheie-array cu
variabila $key si valoare-element-array cu $valoare.
<?php
$arr = array(0, 1, 2, 3, 4, 5);
foreach($arr as $iCrt) {
echo 'Elementul current este:'.$iCrt;
}
?>
In anumite situatii este util sa aflam perechea cheie=>valoare a fiecarui element din array:
<?php
$arr = array('zero', 'unu', 'doi', 'trei', 'patru', 'cinci');
foreach($arr as $key => $iCrt) {
echo 'Cheia curenta este:'.$key;
echo 'Elementul current este:'.$iCrt;
}
?>
In cazul tablourilor multidimensionale , putem parcurge elementele din array in felul urmator:
<?php
$multiDimArray = array("firstLine" => array(1 =>10, 2 => 20, "a" =>"alpha"));
$multiDimArray["nextLine"] =
array(1 =>20, 2 => 40, "b" =>"beta");
foreach($multiDimArray as $lines) {
foreach($lines as $columns) {
echo 'Elementul curent este:'. $columns;
}
}
?>
_______________________________________________________________________________________________
Curs: PHP
Curs: PHP
Curs: PHP
Curs: PHP
_______________________________________________________________________________________________
Curs: PHP
Curs: PHP
function sumArray($arr) {
$total=0;
foreach($arr as $val) {
$total += $val;
}
return $total;
}
$arr = array(0=>356,1=>125,2=>543243,3=>12,4=>1643,5=>432,6=>7775);
foreach($arr as $cheie=>$val) {
echo "<br>Elemenul $cheie Valoare=$val";
}
echo " <br>Suma elementelor din array este ".sumArray($arr);
?>
In exemplul de mai sus functia sumArray are un singur parametru de tip array(). In interiorul
functiei declaram o variabila locala: $total, care initial are valoarea 0. In continuare cu ajutorul
instructiunii foreach parcurgem array-ul: $arr si aduna la valoarea $total valoarea
corespunzatoare elemetului curent din array. La final functia va returna valoarea $total care
reprezinta de fapt suma elementelor din array.
In anumite situatii este necesar sa modificam continutul variabilelor transmise ca parametru
functiei. Consideram exemplul de mai sus in care ne propunem sa modificam valoarea primului
element din array cu valoarea rezultata din suma:
<?php
/******************************
Function sumArray
Parameters: $arr : array
Returns: integer
******************************/
function sumArray($arr) {
$total=0;
foreach($arr as $val) {
$total += $val;
}
$arr[0] = $total;
return $total;
}
$arr = array(0=>356,1=>125,2=>543243,3=>12,4=>1643,5=>432,6=>7775);
foreach($arr as $cheie=>$val) {
echo "<br>Elemenul $cheie Valoare=$val";
}
echo " <br>Suma elementelor din array este ".sumArray($arr);
echo " <br>arr[0] = $arr[0]; // va afisa 356 (nemodificat)
?>
Se observa ca instructiunea: $arr[0] = $total; introdusa in functia de mai sus nu a modificat
valoarea finala a variabilei $arr[0] din tablou. Acest lucru se datoreaza faptului ca in PHP, in mod
_______________________________________________________________________________________________
Curs: PHP
implicit, argumentele functiei sunt transmise prin valoare. Cu alte cuvinte atunci cand transmitem
o variabila unei functii, interpretorul PHP va realiza o copie a acestei variabile si va transmite
valoarea acesteia din urma functiei.
O alta modalitate de a transmite valori(variabile) unei functii este prin referinta. In acest caz
interpretorul de PHP nu mai realizeaza nici o copie a variabilei, in schimb se transmite functiei
adresa din memorie a variabilei ca parametru:
<?php
/******************************
Function sumArray
Parameters: &$arr : referinta la array
Returns: integer
******************************/
function sumArray(&$arr) {
$total=0;
foreach($arr as $val) {
$total += $val;
}
$arr[0] = $total;
return $total;
}
$arr = array(0=>356,1=>125,2=>543243,3=>12,4=>1643,5=>432,6=>7775);
foreach($arr as $cheie=>$val) {
echo "<br>Elemenul $cheie Valoare=$val";
}
echo " <br>Suma elementelor din array este ".sumArray($arr);
echo " <br>arr[0] = $arr[0]; // va afisa 553586 (modificat)
?>
In exemplul de mai sus argumentul functiei este &$arr, care specifica ca argumentul functiei se
transmite prin referinta. In acest caz instructiunea: $arr[0] = $total; va modifica continutul final al
elementului $arr[0] . Transmiterea argumentelor prin referinta se recomanda in cazul utilizarii ca
argumente a tablourilor cu multe elemente sau al sirurilor continand multe caractere. Folosind
transmiterea argumentelor prin referinta, codul se va executa mai rapid deoarece in cazul unui
tablou, se va transmite doar adresa de memorie unde incepe tabloul in memorie(memorat pe 32
biti) in schimbul transmiterii intregului tablou de valori.
In cazul transmiterii mai multor parametri, este posibil sa specificam anumite valori implicite
pentru unele din argumentele functiei:
<?php
/******************************
Function cafeaFavorita
Parameters: $type: string
Returns: nothing
******************************/
function cafeaFavorita($type="espresso") {
_______________________________________________________________________________________________
Curs: PHP
Curs: PHP
_______________________________________________________________________________________________
Curs: PHP
Curs: PHP
Variabile PHP globale: _GET si _POST reprezinta de fapt variabile de tip array, fiecare element se
poate accesa prin cheia sa; in cazul nostru cheia este data de atributul : name din formular.
In continuare cream un formular care preia informatii de login ( nume si parola):
<html>
<head>
<title>Untitled</title>
</head>
<body>
<form action="test2.php" method="POST">
<table summary="" bgcolor="#808080">
<tr>
<td>
<table cellpadding="1" cellspacing="1" border="0">
<caption><font color="#3399ff" size="4">User authentification</font></caption>
<tr align="right">
<td align="right">Name</td>
<td><input type="text" size="25" name="name"></td>
</tr>
<tr align="right">
<td>Password</td><td><input type="password" size="25" name="password"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Logon"></td>
</tr>
<tr>
<td colspan="2" align="center"><a href="autentif.php">New user?</a>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>
Aceasta pagina HTML va genera un formular ca mai jos:
_______________________________________________________________________________________________
Curs: PHP
Introducem in continuare secventa care va prelua datele din formular(test2.php). In cazul in care
Name=Ion si Password=computer scriptul va afisa :
<br>Salut Ion .Autentificare realizata' ;
In alte cazuri scriptul va afisa :
Nume sau parola incorecte<br>Incercati din nou
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<?php
if(isset($_POST)) {
if($_POST['name'] == 'Ion' && $_POST['password']== 'computer') {
echo '<br>Salut'.$_POST['name'].'<br>Autentificare realizata';
die;
}
else
echo '<br>Nume sau parola incorecte<br>Incercati din nou';
}
}
?>
<form action="test2.php" method="POST">
<table summary="" bgcolor="#808080">
<tr>
<td>
<table cellpadding="1" cellspacing="1" border="0">
<caption><font color="#3399ff" size="4">User authentification</font></caption>
<tr align="right">
<td align="right">Name</td>
<td><input type="text" size="25" name="name"></td>
</tr>
<tr align="right">
<td>Password</td><td><input type="password" size="25" name="password"></td>
</tr>
<tr><td colspan="2" align="center"><input type="submit" value="Logon"></td></tr>
<tr><td colspan="2" align="center"><a href="autentif.php">New user?</a></tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>
_______________________________________________________________________________________________
Curs: PHP
Scriptul PHP de mai sus se executa doar daca functia isset($_POST) returneaza TRUE. Functia
isset() returneaza FALSE daca variabila transmisa ca parametru este neinitializata(are valoarea
NULL); in caz contrar returneaza valoarea TRUE.
4.5. Exercitiu
Consideram un formular care afiseaza informatii despre utilizator:
_______________________________________________________________________________________________
Curs: PHP
-nume
-judet
-oras
Intrarile judet si oras sunt introduse intr-un meniu <select>. Campurile judet si oras sunt pastrate
intr-un tablou bidimensional. Sa se modifice scriptul de mai jos astfel incat la selectarea unui
anumit judet, in combobox-ul orase sa fie incarcate orasele corespunzatoare.
<form action="test5.php" method="GET">
<?php
$orase = array('Hunedoara' =>array('Deva','Hunedoara','Calan','Simeria','Orastie'),
'Alba' =>array('Alba-Iulia','Cugir','Brad','Zlatna','Tebea'),
'Timis' =>array('Timisoara','Lugoj','Savirsin','Remetea','Sincraieni'));
echo "<br>Nume:<input type='text' name='nume'><br>";
echo "<br>Judet<select name='judete'>";
foreach($orase as $cheie =>$judet) {
echo "<option value=$cheie>$cheie</option>";
}
echo "</select>";
echo "<br>Localitate<select name='oras'>";
foreach($orase['Hunedoara'] as $oras) {
echo "<option value=$oras>$oras</option>";
}
echo "</select>";
?>
<br><input type="submit" value="Trimite formular">
</form>
?>
_______________________________________________________________________________________________
Curs: PHP
Descriere
Permite doar citirea fisierului
Citire sau scriere de la inceputul fisierului
Creaza fisierul daca nu exista si suprascrie datele existente
Citire sau scriere; la scriere , creeaza fisierul daca nu exista si suprascrie datele
existente
Adaugare; Creaza fisierul daca nu exista si adauga datele noi la sfarsitul fisierului
existent
Citire sau scriere; la scriere, creaza fisierul daca nu exista si adauga datele noi la
sfarsitul fisierului existent
Doar scriere; Creaza fisierul daca nu exista si genereaza un averisment daca acesta
exista
Citire sau scriere; Creaza fisierul daca nu exista si genereaza un averisment daca acesta
exista
Deschide fisierul in mod binar
In continuare prezentam o secventa de cod care preia datele dintr-un formular si apoi scrie aceste
date intr-un fisier pe server:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled</title>
</head>
_______________________________________________________________________________________________
Curs: PHP
<body>
<?php
ini_set('display_errors',1);
error_reporting(E_ALL & ~E_NOTICE);
if(isset($_POST['submit'])) {
if(!empty($_POST['adnotari'])) {
$fp = fopen('..\date.txt','wb');
if($fp) {
$date = $_POST['adnotari']."\r\n";
$dateLen = fwrite($fp,$date);
fclose($fp);
if($dateLen==0) {
echo "Nu pot scrie date in fisierul ..\date.txt";
}
else
{
echo "Datele transmise au fost scrise in fisierul ..\date.txt";
}
}
else {
echo "Nu pot deschide fisierul ..\date.txt la scriere";
}
}
}
?>
<form action="scriu_fis.php" method="POST">
Introduceti textul pentru scriere in fisier pe server:<br><br>
<textarea name="adnotari" rows="5" cols="20"></textarea><br><br>
<input type="submit" name="submit" value="Submit text">
</form>
</body>
</html>
Datele sunt preluate intr-un formular folosind eticheta <textarea>. Se observa ca instructiunea
fopen creaza un fisier daca acesta nu exista ; in cazul in care exista va altera vechiul continut al
fisierului.
Curs: PHP
Flock($fp, modBlocare);
Unde fp este un pointer catre fisier asa cum am discutat in exemplul de mai sus.
Parametrul modBlocare poate avea urmatoarele valori:
Mod blocare
Descriere
LOCK_SH
Blocare partajata in scopuri de citire
LOCK_EX
Blocare exclusiva in scopuri de scriere
LOCK_UN
Eliminarea blocarii
LOCK_NB
Blocare fara fixare
Vom modifica secventa de scriere de mai sus dupa cum urmeaza:
$fp = fopen('..\date.txt','wb');
if($fp) {
$date = $_POST['adnotari']."\r\n";
flock($fp,LOCK_EX);
$dateLen = fwrite($fp,$date);
flock($fp,LOCK_UN);
fclose($fp);
}
In acest caz codul PHP de preluare a datelor din formular si scriere in fisier , se va modifica ca mai
jos:
<?php
ini_set('display_errors',1);
error_reporting(E_ALL & ~E_NOTICE);
if(isset($_POST['submit'])) {
if(!empty($_POST['adnotari'])) {
$fp = fopen('..\date.txt','wb');
if($fp) {
$date = $_POST['adnotari']."\r\n";
flock($fp, LOCK_EX);
$dateLen = fwrite($fp,$date);
flock($fp, LOCK_UN);
fclose($fp);
if($dateLen==0) {
echo "Nu pot scrie date in fisierul ..\date.txt";
}
else
{
echo "Datele transmise au fost scrise in fisierul ..\date.txt";
}
}
else {
echo "Nu pot deschide fisierul ..\date.txt la scriere";
}
_______________________________________________________________________________________________
Curs: PHP
}
}
?>
Curs: PHP
<title>Untitled</title>
</head>
<body>
<?php
if(isset($_POST['submit'])) {
if(empty($_POST['nume']) || empty($_POST['parola1'])) {
echo "Nume sau parola necompletate";
}
else {
if($_POST['parola2'] !=$_POST['parola1']) {
echo "Campurile parola si confirmare parola diferite";
}
else if($fp = fopen('..\userData.txt','a+b')){
$date = $_POST['nume']."\t";
$date .= crypt($_POST['parola1'])."\r\n";
$dateLen = fwrite($fp,$date);
fclose($fp);
if($dateLen >0 ) {
echo "Date au fost adaugate cu success";
}
}
}
}
?>
<form action="scriu_pers.php" method="POST">
<table summary="" bgcolor="#808080">
<caption>Autentificare utilizator</caption>
<tr><td>
<table summary="" border="0">
<tr><td>Nume:</td><td><input type="text" size='15' name='nume'></td></tr>
<tr><td>Parola:</td><td><input type="password" size='20' name='parola1'></td></tr>
<tr>
<td>Confirmare parola:</td><td><input type="password" size='20' name='parola2'></td>
</tr>
<tr align="center">
<td colspan="2"><input type="submit" name='submit' value= 'Logon'></td>
</tr>
</table>
</td></tr>
</table>
</form>
</body>
</html>
Scriptul : scriu_pers.php transmte mesaje de eroare daca Campurile Nume sau Parola sunt vide,
sau daca Campurile Parola si Confirmare paraola sunt diferite.
_______________________________________________________________________________________________
Curs: PHP
Curs: PHP
</tr>
<tr align="center">
<td colspan="2"><input type="submit" name='submit' value= 'Logon'></td>
</tr>
</table>
</td></tr>
</table>
</form>
</body>
</html>
</body>
</html>
Curs: PHP
Curs: PHP
_______________________________________________________________________________________________
Curs: PHP
Curs: PHP
Curs: PHP
?>
Curs: PHP
_______________________________________________________________________________________________
Curs: PHP
In cazul in care interpretorul PHP nu mai functioneaza, fisierele PHP nu vor mai fi interpretate, ci
va fi afisat codul sursa al acestor. De aceea acest fisier trebuie plasat cu unu sau doua niveluri mai
sus in ierarhia de directoare.
Deoarece acest script va fi apelat frecvent, PHP pune la dispozitie directiva
include(numeFisierPHP);
care va insera in scriptul curent continutul fisierului specificat ca parametru.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title> exedmplu MySQL </title>
</head>
<body>
<?php
//Include scriptul de conectare
include(../dbconnect.php);
?>
</body>
</html>
Tip
Identificator unic, nenull, cheie primara
Char(30)
Char(25)
Char(10)
Date
Decimal(13,2)
Curs: PHP
<?php
include ("../dbconnect.php");
$SQL = "CREATE TABLE Albume (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,";
$SQL .= "Nume varchar(30) NOT NULL, Autor varchar(25) , Gen varchar(10) NOT NULL,";
$SQL .= "DataIntrarii date, Pret decimal(13,2))";
if(mysql_query($SQL)) {
echo "Tabelul : magazincd a fost creat";
}
else {
echo "Nu pot creea tabelul magazincd deoarece:".mysql_error();
echo "<br>$SQL";
}
?>
</body>
</html>
In exemplul de mai sus , variabila $SQL contine comanda SQL pentru crearea unui tabel. Se
observa ca in parametrii comenzii sunt incluse campurile din tabela.
Instructiunea mysql_query, executa aceasta comanda si in cazul in care rezultatul nu este Null se
trimite la iesire sirul: Tabelul: magazincd a fost creat. In cazul in care instructiunea SQL nu a putut
fi executata functia mysql_query intoarce valoarea NULL.
Pentru crearea tabelelor se pot folosi de asemenea fisiere script. Acestea din urma au extensia
.sql , si contin instructiuni SQL .
Consideram fisierul creare_tabele.sql cu urmatorul continut:
# Nume fisier: creare_tabele.sql
# Use this schema for creating your database for
# a new installation of webProject.
CREATE TABLE judete (
jude_id INT(5) NOT NULL auto_increment,
jude_denumire varchar(100) default '',
PRIMARY KEY (jude_id),
KEY local_denu (jude_denumire)
);
CREATE TABLE localitati (
local_id INT(5) NOT NULL auto_increment,
local_judID INT(5) unsigned NOT NULL,
local_denumire varchar(100) default '',
PRIMARY KEY (local_id),
KEY local_denu (local_denumire),
KEY local_jude (local_judID)
);
_______________________________________________________________________________________________
Curs: PHP
Dupa cum se observa acest fisier contine comenzi pentru crearea a doua tabele: judete si
localitati. Pentru a executa acest fisier script deschidem o consola MySQL si executam comanda:
source creare_tabele.sql;
care va lansa in executie acest script si va creea cele doua tabele. De asemenea in acest script pot
fi inserate orice comenzi valide SQL.
Curs: PHP
<tr>
<td>Pret</td><td><input type="text" size='13' name='pret'></td>
</tr>
<tr align="center">
<td colspan="2"><input type="submit" name='submit' value='Trimite'></td>
</tr>
</table>
</td></tr>
</table>
</CENTER>
</form>
</body>
</html>
Se observa ca datele din formular vor fi trimise catre scriptul : adaug_cd.php.
In continuare cream scriptul adaug_cd.php ca mai jos:
<?php
//conectare la baza de date
include ("../dbconnect.php");
if(isset($_POST['submit'])) {
$SQL = "INSERT INTO Albume (Nume, Autor, Gen, DataIntrarii, Pret) ";
$SQL .="VALUES('{$_POST['nume']}','{$_POST['autor']}','{$_POST['gen']}','";
$SQL .=date('Y-m-d')."',{$_POST['pret']})";
if(mysql_query($SQL)) {
echo "Datele au fost adaugate la tabela";
}
else {
echo "Eroare SQL".mysql_error();
}
}
?>
Se observa folosirea instructiunii SQL:
INSERT INTO numeTabela (cimp1,cimp2,cimp3,...) VALUES( Valoare1,Valoare2,Valoare3,...);
Ca si in alte cazuri folosim instructiunea mysql_query pentru a executa aceasta comanda SQL.
Curs: PHP
_______________________________________________________________________________________________
Curs: PHP
vom considera baza de date: magazincd, si vom incerca sa creea un form HTML din care sa
preluam date si sa le inseram in tabela : Albume.
Curs: PHP
//Parcurgere inregistrari
while($row = mysql_fetch_array($res)) {
echo "<tr><td>{$row['Nume']}</td>";
echo "<td>{$row['Autor']}</td>";
echo "<td>{$row['Gen']}</td>";
echo "<td>{$row['DataIntrarii']}</td>";
echo "<td align='right'>{$row['Pret']}</td>";
echo "<td><input type='button' onclick = 'deleteCD( {$row['id']}
)'></td>";
echo "</tr>";
}
echo "</table>";
echo "<input type='hidden' name='rowDel'>";
}
else {
echo mysql_error();
}
?>
</form>
</body>
</html>
<script language="JavaScript" type="text/javascript">
<!-function deleteCD(rowID){
this.document.forms.stergForm.rowDel.value=rowID;
this.document.forms.stergForm.submit();
}
//-->
</script>
Curs: PHP
Curs: PHP
<title>Pagina B</title>
</head>
<body>
Aceasta este pagina B
<?php
echo "<br>Variabila de sesiune are valoarea: ".$_SESSION['userName'];
?>
<br>Legatura <a href="A.php">spre pagina A</a>
</body>
</html>
In acest exemplu se observa ca pagina B detine informatii despre variabila de sesiune creata in
pagina A. Se observa ca atribuirea , respectiv citirea variabilelor se face folosind variabila superglobala : _SESSION.
Curs: PHP
?>
</body>
</html>
Deoarece variabilele de sesiune pot fi citite de alti utilizatori neautorizati, nu este indicat sa
pastram aici informatii esentiale cum sint parolele pentru baza de date.
Pentru a creea un minimum de securitate putem codifica aceste informatii , folosind functtile de
codare oferite de PHP: md5() sau crypt().
Functia md5(sirDeCaractere) codifica sirul de caractere furnizat ca parametru si returneaza un sir
de 32 charactere hexazecimale. Aceasta functie foloseste algoritmul de criptare: RSA Data
Security, Inc. MD5 Message-Digest Algorithm,
Acestl lucru este exemplificat in cele ce urmeaza:
<?php
$sir = Ionescu;
echo md5($sir); //produce iesirea: 1f3870be274f6c49b3e31a0c6728957f
?>
Acest mecanism de codare este ireversibil.
Consideram cazul in care avem o variabila de sesiune care pastreaza o parola si dorim sa codam
aceasta variabila astfel incat utilizatorii rau intentionati sa nu o poata folosi.
Pentru aceasta folosim functia md5(sir), pentru a o cripta. Mai mult initializam o variabila globala
cu numele $secret, careia ii atribuim ca valoare un sir de caractere. In continuare concatenam
valorile $parola si $secret si apoi criptam rezultatul. In acest caz chiar daca cineve reuseste sa
decripteze variabila de sesiune este putin probabil sa poata separa sirul $secret creat de noi. Ca si
in cazul conectarilor la baza de date este bine sa pastram acest fisier cu un nivel mai sus decat
directorul pentru pagini de Web:
<?php
$secret = jfhwpa0cnwwmddien5432fdwwq345s;
$parola = computer;
session_start();
$_SESSION[parola] = md5($secret.$parola);
//Consideram variabila $varTest
//Pentru a testa daca valoarea variabilei $varTest este egala cu $parola
if(md5($secret.$varTest) == $_SESSION[parola])
echo Valorile sunt egale;
else
echo Valorile nu sunt egale;
?>
Curs: PHP
_______________________________________________________________________________________________
Curs: PHP
Curs: PHP
<tr>
<td>PageColor</td><td><select
name="pageColor"
onchange="onPageColorChanged()"
id="id_selPageCol">
<option value="#00ffff">Aqua</option>
<option value="#0000ff">Blue</option>
<option value="#ff00ff">Fuchisa</option>
<option value="#808080">Gray</option>
<option value="#008000">Green</option>
<option value="#00ff00">Lime</option>
<option value="#800000">Maroon</option>
</select>
</td>
<td>
<div
style="background-color:
#00ffff;
display:inline"
id="id_page"
> </div>
</td>
</tr>
<tr>
<td>FontColor</td><td><select
name="fontColor"
onchange="onFontColorChanged()"
id="id_selFontCol">
<option value="#00ffff">Aqua</option>
<option value="#0000ff">Blue</option>
<option value="#ff00ff">Fuchisa</option>
<option value="#808080">Gray</option>
<option value="#008000">Green</option>
<option value="#00ff00">Lime</option>
<option value="#800000">Maroon</option>
</select>
</td>
<td>
<div
style="background-color:
#00ffff;
display:inline"
id="id_font"
> </div>
</td>
</tr>
<tr align="center">
<td colspan="2"><input type="submit" value="Trimite" name="submit"></td>
</tr>
</table>
</form>
<br>Legatura spre <a href="test_cookie.php">pagina de test</a>
</body>
</html>
<script language="JavaScript" type="text/javascript">
<!-function onPageColorChanged(){
this.document.getElementById('id_page').style.backgroundColor
=
this.document.getElementById('id_selPageCol').value;
_______________________________________________________________________________________________
Curs: PHP
A doua pagina : test_cookie.php , citeste cele doua variabile din cookie si seteaza in mod
corespunzator culorile pentru text si background:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test cookie</title>
</head>
<body
<?php
if($_COOKIE['pageColor'])
echo "bgcolor=".$_COOKIE['pageColor'];
if($_COOKIE['fontColor'])
echo " text=".$_COOKIE['fontColor'];
?>
Legatura spre <a href="option.php">setare pagina</a>
</body>
</html
Curs: PHP
Argumentele path si domain sunt folosite pentru a limita un cookie pentru a limita un cookie la un
anumit director dintr-un site Web , respectiv la un anumit domeniu (de exemplu www.mySite.ro).
Pentru a limita durata de viata a unui cookie astfel incat acesta sa existe numai cand utilizatorul
se afla in dosarul domeniului:
setcookie(nume, valorea, time()+3600, /user/);
Curs: PHP
// Function: browser_info
// Purpose: Returns browser type and version
////////////////////////////////////////////////////////////
function browser_info ($agent) {
// Determine browser type
// Search for Internet Explorer signature.
$browse_version = "";
$iPos=0;
if (($iPos=strpos($agent,'MSIE')) != false ) {
$browse_type = "IE";
for($iCrt=$iPos+strlen('MSIE'); $agent[$iCrt] != ';'; $iCrt++)
$browse_version .= $agent[$iCrt];
}
// Search for Opera signature.
elseif (($iPos=strpos($agent,'Opera')) != false) {
$browse_type = "Opera";
for($iCrt=$iPos+strlen('Opera'); $agent[$iCrt] != ';'; $iCrt++)
$browse_version .= $agent[$iCrt];
}
// Search for Netscape signature. The search for the Netscape browser
// *must* take place after the search for the Internet Explorer and Opera
// browsers, because each likes to call itself
// Mozilla as well as by its actual name.
elseif (($iPos=strpos($agent,'Mozilla/')) != false) {
$browse_type = "Netscape";
for($iCrt=$iPos+strlen('Mozilla/'); $agent[$iCrt] != ';';
$iCrt++)
$browse_version .= $agent[$iCrt];
}
// If not Internet Explorer, Opera, or Netscape, then call it unknown.
else {
$browse_type = "Unknown";
$browse_version = "Unknown";
}
// return the browser type and version as array
return array($browse_type, $browse_version);
}
////////////////////////////////////////////////////////////
// Function: opsys_info
// Purpose: Returns the user operating system
////////////////////////////////////////////////////////////
function opsys_info($agent) {
// Determine operating system
if ( strstr ($agent, 'Win') ) // Search for Windows platform
$opsys = "Windows";
elseif ( strstr($agent, 'Linux') ) // Search for Linux platform
$opsys = "Linux";
_______________________________________________________________________________________________
Curs: PHP
Curs: PHP
while($row = mysql_fetch_array($res)) {
echo "<tr>";
echo "<td>{$row['browser']}</td> <td>{$row['ip']}</td> <td>{$row['host']}</td>
<td>{$row['timeOfVisit']}</td> <td>{$row['count']}</td>";
echo "</tr>";
}
echo "</table>";
}
}
//Afiseata lista cu ultimii 10 vizitatori
list_vizitors(10);
?>
</body>
</html>
In acest exemplu functia browser_info returneaza browserul, respectiv versiunea browserului sub
forma unui array. Functia opsys_info returneaza sistemul de operare al utilizatorului.
Functia record_user() adauga/actualizeaza inregistrarea cu privire la vizitator.
Functia list_vizitors($maxNr) listeaza ultimii maxNr vizitatori in ordinea descendenta a datei
ultimei vizite.
Rezultatul executarii acestui script este afisat in figura de mai jos:
_______________________________________________________________________________________________
Curs: PHP
_______________________________________________________________________________________________
Curs: PHP
<?php
class CPersoana {
var $nume;
var $ocupatia;
var $varsta;
function CPersoana ($aName, $aOcupation, $age) {
$this->nume=$aName;
$this->ocupatia=$aOcupation;
$this->varsta=$age;
}
function getName() {
return $this->nume;
}
function getOcupatia() {
return $this->ocupatia;
}
function getVarsta() {
return $this->varsta;
}
}
//Utilizarea clasei CPersoana
//Creeaza o instanta a clasei CPersoana
$pers = new CPersoana (Ionescu,mecanic, 35,Ionescu@yahoo.com);
echo <br>Numele este.$pers->getName(). Ocupatia=.$pers->getOcupatia();
?>
Dorim sa extindem clasa de mai sus astfel incat sa contina si date despre home-page si e-mail:
<?php
class CpersoanaCuEmail extends CPersoana {
var $email;
var $home_page;
function CpersoanaCuEmail ($aName, $aOcupation, $age, $aHomePage, $aEmail) {
$this->nume=$aName;
$this->ocupatia=$aOcupation;
$this->varsta=$age;
$this->home_page = $aHomePage;
$this->email=$aEmail;
}
function getEmail() {
return $this->email;
}
function getHomePage() {
return $this->home_page;
}
}
//Utilizarea clasei CpersoanaCuEmail
_______________________________________________________________________________________________
Curs: PHP
Curs: PHP
<body>
<?php
class ParserXML {
var $m_parser;
// resursa parserului XML
var $m_html;
// documentul HTML formatat
var $m_xml_file;
// fisierul XML
var $m_open_tags; // Array: taguri de inceput
var $m_close_tags; //Array: taguri de sfirsit
function ParserXML() {
$this->m_html="";
$this->m_xml_file="";
$this->m_open_tags = array();
$this->m_close_tags = array();
$this->m_parser = xml_parser_create();
xml_parser_set_option($this->m_parser,
XML_OPTION_CASE_FOLDING, false);
xml_set_object($this->m_parser,$this);
xml_set_element_handler($this->m_parser,"openElement",
"closeElement");
xml_set_character_data_handler($this->m_parser,"caracterData");
}
function ParserDestroy() {
xml_parser_free($this->m_parser);
}
function setOpenTags($arrOpenTags) {
$this->m_open_tags=$arrOpenTags;
}
function setCloseTags($arrCloseTags) {
$this->m_close_tags = $arrCloseTags;
}
function html() {
return "<html>$this->m_html</html>";
}
function openElement($parser, $tag, $attributes) {
if($format=$this->m_open_tags[$tag])
$this->m_html .= $format;
//if($tag=="nume" && isset($attributes['email'])) {
//$format = "<a href='mailto:".$attributes['email']."'> Mail to ".$attributes['email'];
//$this->m_html .= $format;
//}
}
function closeElement($parser, $tag) {
//if($tag=="nume") {
//$this->m_html .="</a>";
//}
if($format=$this->m_close_tags[$tag])
_______________________________________________________________________________________________
Curs: PHP
$this->m_html .= $format;
}
function caracterData($parser, $cData) {
$this->m_html .= $cData;
}
function parse($xmlFile) {
if($fp = fopen($xmlFile,'rb')) {
while($data = fread($fp,4096)) {
if(!xml_parse($this->m_parser,$data, feof($fp))) {
$linNr
=
xml_get_current_line_number($this>m_parser);
$errMsg=xml_error_string($this->m_parser);
die("Eroare XML errMsg la linia $linNr");
}
}
}
}
}
$open_tags = array('mesaje'=>"<table summary='' colspan='0' border='1'>",
'mesaj'=>"<tr align='center'>",
'nume'=>"<td>",
'adresa'=>"<td>",
'email'=>"<td>",
'varsta'=>"<td>");
$close_tags = array('mesaje'=>"</table>\r\n",
'mesaj'=>"</tr>\r\n",
'nume'=>"</td>",
'adresa'=>"</td>",
'email'=>"</td>",
'varsta'=>"</td>");
$parser = new ParserXML();
$parser->setOpenTags($open_tags);
$parser->setCloseTags($close_tags);
$parser->parse("test.xml");
echo $parser->html();
?>
</body>
</html>
Curs: PHP
</mesaj>
<mesaj>
<nume>Popescu</nume>
<adresa>Hunedoara</adresa>
<virsta>39</virsta>
</mesaj>
</mesaje>
Scriptul de mai sus va genera un tabel cu coloanele: nume, adresa,virsta.
_______________________________________________________________________________________________
Curs: PHP
size="25"
_______________________________________________________________________________________________
Curs: PHP
Introducem in continuare secventa care va prelua datele din formular. In cazul in care Name=Ion
si Password=computer scriptul va afisa :
<br>Salut Ion .Autentificare realizata' ; iar in alte cazuri scriptul va afisa :
Nume sau parola incorecte<br>Incercati din nou
Scriptul introdus are culoarea albastra:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<?php
if(isset($_POST)) {
if($_POST['name'] == 'Ion' && $_POST['password']== 'computer'){
echo '<br>Salut'.$_POST['name'].'<br>Autentificare realizata';
die;
}
else
echo '<br>Nume sau parola incorecte<br>Incercati din nou';
}
}
?>
<form action="test2.php" method="POST">
<table summary="" bgcolor="#808080">
<tr>
<td>
<table cellpadding="1" cellspacing="1" border="0">
<caption><font color="#3399ff" size="4">User authentification</font></caption>
<tr align="right">
<td align="right">Name</td>
_______________________________________________________________________________________________
Curs: PHP
size="25"
Daca utilizatorul selecteaza linkul: New user , va fi incarcat scriptul autentif.php, care creeaza un
formular cu datele personale ale utilizatorului si introduce aceste date intr-o tabela din baza de
date. Pentru conectare la baza de date am folosit urmatorii paramtrii:
$host="localhost";
$port="3306";
$userName="webuser1";
$password="pass1";
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Formular de inregistrare</title>
</head>
<body>
<?php
//Conectare la BD
$host="localhost";
$port="3306";
$userName="webuser1";
$password="pass1";
$handler = mysql_connect($host, $userName, $password);
if(!$handler) {
echo 'Conectare la baza de date esuata. Nume sau parola incorecte'.mysql_error();;
die();
}
_______________________________________________________________________________________________
Curs: PHP
else{
echo 'Autentificare reusita in BD';
if(!mysql_select_db('tst2',$handler))
echo 'Could not find database ';
if(isset($_GET)) {
if(isset($_GET['nume']) && isset($_GET['pass'])) {
$query ="SELECT nume,parola from utilizatori WHERE nume='".$_GET['nume']."'
AND parola='".$_GET['pass']."'";
$result = mysql_query($query,$handler);
//echo "after";
/*if(!$result)
{
echo "MySQL Error: ".mysql_error();
die();
}
else*/
$rows = mysql_num_rows($result);
if($rows > 0) {
echo "Utilizatorul cu numele ".$_GET['nume']." exista deja
in baza de date";
}
else {
$query = "INSERT INTO utilizatori (nume, parola, email, telefon,
localitate) VALUES(";
$query .= "'".$_GET['nume']."',";
$query .= "'".$_GET['pass']."',";
$query .= "'".$_GET['adr_email']."',";
$query .= "'".$_GET['telefon']."',";
$query .= "'".$_GET['localitate']."');";
$result = mysql_query($query);
if(!$result) {
echo "MySQL Error: ".mysql_error();
die();
}
else {
"Utilizatorul ".$_GET['nume']." a fost introdus
in baza de date";
}
}
}
}
}
?>
<form action="autentif.php" method="GET">
<table summary="" bgcolor="#c0c0c0">
<tr><td>
_______________________________________________________________________________________________
Curs: PHP
<table>
<caption><font
color="#000080"
size="5">Formular
de
inregistrare</font></caption>
<tr><td>Nume</td><td><input type="text" name="nume" size="15"></td></tr>
<tr><td>Parola</td><td><input
type="password"
name="pass"
size="20"></td></tr>
<tr><td>Confirmare Parola</td><td><input type="password" name="confirmpass"
size="20"></td>
</tr>
<tr><td>Adresa
E-mail</td><td><input
type="text"
name="adr_email"
size="15"></td></tr>
<tr><td>Telefon</td><td><input
type="text"
name="telefon"
size="15"></td></tr>
<tr>
<td>Localitate</td><td><select name="localitate">
<option value="1">Deva</option>
<option value="2">Hunedoara</option>
<option value="3">Calan</option>
<option value="4">Orastie</option>
</select></td>
</tr>
<tr><td></td><td><input type="submit" value="Submit" ></td></tr>
</table>
</td></tr>
</table>
</form>
</body>
</html>
_______________________________________________________________________________________________
Curs: PHP
In continuare modificam scriptul de logare astfel incat sa se confrunte informatiile din formular cu
cele existente in baza de date.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<?php
if(isset($_POST)) {
if(isset($_POST['name']) && isset($_POST['password'])) {
//Logare la BD
$handler = mysql_connect('localhost:3306','webuser1','pass1');
if(!$handler) {
echo "Could not connect to database ".mysql_error();
die();
}
mysql_select_db('tst2');
$query = "SELECT nume,parola from utilizatori WHERE nume='".$_POST['name']."'
AND parola='".$_POST['password']."';";
//echo "<br>Query=".$query;
$result = mysql_query($query);
if(!isset($result) || !mysql_num_rows($result)) {
echo "Nume sau parola incorecte.<br>Incercati din nou";
_______________________________________________________________________________________________
Curs: PHP
}
else {
echo "<br>Salut ".$_POST['name']."<br>Autentificare reusita";
}
}
}
?>
<form action="test2.php" method="POST">
<table summary="" bgcolor="#808080">
<tr>
<td>
<table cellpadding="1" cellspacing="1" border="0">
<caption><font color="#3399ff" size="4">User authentification</font></caption>
<tr align="right"> <td align="right">Name</td> <td><input type="text" size="25"
name="name"></td> </tr>
<tr
align="right">
<td>Password</td><td><input
type="password"
size="25"
name="password"></td> </tr>
<tr> <td colspan="2" align="center"><input type="submit" value="Logon"></td> </tr>
<tr> <td colspan="2" align="center"><a href="autentif.php">New user?</a> </tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>
_______________________________________________________________________________________________