Sunteți pe pagina 1din 54

1.

Instalarea programelor necesare


Introducere

Cursul nostru isi propune sa faca o initiere in lucrul cu php si MySql. Vom trece in aceste 12 lectii in mare prin toate capitolele unui curs de php, prezentand exemple cel mai mult si dandu-va referinte pentru
a putea studia mai mult pe cont propriu. La sfarsitul cursurilor speram sa puteti face singuri cate o mica aplicatie.

Instalare programe necesare pentru lucrul local

Iata un prim pas in lucrul cu PHP si MySQL: vestea buna este ca puteti lucra cu aceste programe, local, pe computerul dvs., sub Windows (98,2000, XP). Daca cineva lucreaza sub Unix/Linux exista variante
de php, mysql si server de web Apache pentru Unix/Linux. Ne vom referi in continuare la instalarea sub Windows.

Puteti fie sa instalati separat PHP de pe site-ul www.php.net, MySQL de pe site-ul www.mysql.com si un server de web Apache de pe www.apache.org.

Dar mai simplu este sa instalati asa numitul "PHPTriad", un grup de 3 programe care se vor instala pe computerul dvs.: PHP, MySQL si server-ul de web Apache.

Il gasiti la adresa http://sourceforge.net/projects/phptriad (PhpTriad 2.2).

Adresa directa de download este: http://prdownloads.sourceforge.net/phptriad/phptriad2-2-1.exe?download

In mod normal instalarea se va face pentru Apache in c:apache, pentru MySQL in c:apachemysql, iar php-ul se va instala in c:apachephp .

Dupa instalare puteti sa va puneti cate un shortcut in StartUp pentru C:apacheApache.exe (care porneste server-ul web de Apache) si pentru C:apachemysqlbinwinmysqladmin.exe .(care porneste MySQL-
ul).

Apoi in browser-ul vostru deschideti : http://localhost/ . Veti vedea paginile web pe care le veti aseza in C:apachehtdocs (acesta corespunde cu wwwroot de pe un server de web obsinuit).

In mod normal daca lucrati cu server-ul de Apache, va trebui sa opriti functionarea server-ului de IIS (daca il aveti instalat in Win 98, Win 2k sau Win XP).

Lucrul cu bazele de date MySQL

Pentru a deschide o baza de date MySQL puteti folosi phpMyAdmin, o unealta care se instaleaza odata cu phpTriad (il gasiti dupa instalare la http://localhost/phpMyAdmin ), sau un program gen
MySQLFront (acesta a ajuns la versiunea 2.5 si momentan nu mai este dezvoltat, dar este o unealta foarte buna, cu care va puteti conecta la baza de date), pe care il gasiti la
adresa:http://mysqlfront.sstienemann.de/ sau http://mysqlfront.venturemedia.de/ (la rubrica News).

Dupa ce instalati MySQLFront, va conectati la baza de date locala cu : hostname: localhost; user: root; port:3306 (este portul implicit). Ulterior puteti seta o parola pentru user-ul root (administrator al bazei de
date) si veti putea da acces pentru alti useri la diferite baze de date. Dupa conectarea cu MySQL Front la baza de date, veti putea crea propriile baze de date.

Editarea programelor PHP

Pentru editarea programelor PHP puteti folosi un editor simplu de text (gen Notepad sau Edit pe care le aveti instalate in Windows), sau un program mai avansat care sa va arate automat si sintaxa
limbajului, asa cum este HomeSite (de la www.allaire.com, din pacate acesta nu este gratuit) sau un editor gratuit cum ar fi PhpEdit (de la www.phpedit.net ), sau Maguma Studio (il gasiti
lahttp://www.maguma.com/en/lightdownload.html ).

Lectia 2:variabile constante,operatori si functii

Lectia 2 : DATE
Tipuri de date, Variabile, Constante, Operatori, Definire functii

In PHP lucrul cu variabile este extrem de simplu. PHP recunoaste usor tipurile variabilelor, iar sintaxa de definire a acestora are structura cea mai simpla posibila. Aceia care au mai lucrat cu C,
Java sau Perl, vor gasi lucrul cu PHP foarte usor.

Toate variabilele, in PHP incep su semnul dolar ($). Nu conteaza ce tip de variabila folositi. In codul programului toate arata la fel. PHP retine tipul informatiei stocate in variabila

Nu este necesara o declarare a variabilelor la inceputul programului. Tot ce trebuie sa faceti este doar sa le folositi si ele exista. Cum am spus, toate tipurile de variabile arata la fel. Urmatorul
exemplu arata cum se declara o variabila de tipul string, integer, si floating-point (tipurile de date vor fi discutate si explicate imediat):

$a = Acesta este un string; //Acesta este un string

$b = 4; //Acesta este un integer

$c = 4.837 //Acesta este un numar in virgula flotanta (floating-point)

$d = 2; //Acesta este tot un string

1. 1. TIPURI DE DATE

Tipurile de date cele mai folosite in PHP sunt urmatoarele:

1. - boolean
2. - integer
3. - floating-points
4. - string
5. - array
6. - null.

In continuare le vom discuta pe fiecare pe scurt.

Boolean

Este cel mai simplu tip de date. O variabila de tipul boolean poate avea doar doua valori: TRUE sau FALSE (ADEVARAT sau FALS). De asemenea poate lua valori intregi care sa le repreainte pe
cele de mai sus. Astfel, valoarea 0 inseamna FALSE, iar orice alta valoare intreaga diferita de 0 inseamna TRUE.

In urmatoarele exemple variabila a primeste valoarea TRUE (adevarat):

$a = TRUE;

$a = 1;

$a = -1;

sau valoarea FALSE (fals):

$a = FALSE;

$a = 0;

$a = ; //sirul vid

Integer

Reprezinta multimea numerelor intregi Z = {, -2, -1, 0, 1, 2, }

Variabilele de acest tip pot fi initializate cu numere intregi specificate in format zecimal (in baza 10), hexazecimal (in baza 16) sau octal (in baza 8).

Exemplu:

$a = 1234; //numar intreg zecimal

$a = -123; //numar intreg negativ

$a = 0123; //numar intreg in format octal numarul trebuie precedat de un 0

$a = 0x1AB; //numar intreg in format hexazecimal numarul e precedat de 0x

Dimensiunea unui numar de tip Integer este dependenta de platforma, dar valoarea maxima este de aproximativ 2.000.000.000 cu semn (-2.000.000.000 0 +2.000.000.000)

Floating-points

Reprezinta numerele cu virgula mobila, care pot fi specificate folosind oricare din sintaxele urmatoare:

$a = 1.23;

$a = 1.2e3;

$a = 7E-10;

Dimensiunea acestui tip de date este foarte mare, si este data de numere ce pot fi scrise pe 64 de biti (numarul maxim este in jurul valorii de 10^20 = 10 la puterea 20). Dezavantajul este ca are
o precizie scazuta la ultimele cifre.

String

String reprezinta un sir de caractere.

Exista 3 moduri de definire a variabilelor de tip String, dar numai 2 sunt folosite in mod uzual.
- definirea cu ghilimele simple:

$a = Acesta este un string;


- definirea cu ghilimele duble:
$a = Acesta este un string;

Pentru afisarea caracterului apostrof ( ) in cadrul textului, acesta trebuie precedat de caracterul backslash ( \ ). La fel se procedeaza pentru afisarea caracterului backslash ( \ ).

Exemplu:

$a = 'Arnold once said: "I\'ll be back"';

//Va afisa: Arnold once said: Ill be back

Diferenta dintre cele doua modalitati este ca in cazul al doilea pot fi inserate anumite caractere speciale, iar daca in cadrul textului apare o variabila, aceasta va fi inlocuita cu valoarea continuta in
ea.

Exemplu:

$x = 40;

$a = S-au inscris $x participanti la cursul de PHP.;

//Va afisa: S-au inscris 40 participanti la cursul de PHP.

Caracterele speciale care pot fi folosite sunt urmatoarele:

\n linie noua (line feed)

\r intoarcere la inceputul liniei (carriage return)

\t tab

\\ backslash

\$ semnul dolar

\ ghilimele

Array

In limba romana acest tip de date se numeste tipul Tablou si reprezinta o structura ordonata pe mai multe dimensiuni. Datele continute intr-un Array pot fi de tipuri diferite.

Sintaxa pentru definire este urmatoarea:

$nume_array[cheie] = valoare;

cheie poate fi de tipul String sau Integer nenegativ

valoare poate fi orice

Definirea se poate face in mai multe moduri, ilustrate in exemplul urmator:

// Acesta

$a = array( 'culoare' => 'rosu'

, 'gust' => 'dulce'

, 'forma' => 'rotund'

, 'nume' => 'mar'

, 4 // cheia este 0

);
// este absolut echivalent cu

$a['culoare'] = 'rosu';

$a['gust'] = 'dulce';

$a['forma'] = 'rotund';

$a['nume'] = 'mar';

$a[] = 4; // cheia este 0

//sau

$b[] = 'a';

$b[] = 'b';

$b[] = 'c';

// Va rezulta sirul array( 0 => 'a' , 1 => 'b' , 2 => 'c' ),

// sau mai simplu, sirul array('a', 'b', 'c')

Referirea la o variabila de tip tablou se face cu numele tabloului si cheie:

echo Fructul $a[nume] are gust $a[gust].;

//Va afisa: Fructul mar are gust dulce.

Null

Valoarea speciala NULL reprezinta o variabila care nu are nici o valoare.

Sintaxa de atribuire a acestei valori unei variabile este urmatoarea:

$a = Null;

Atentie! Valoare null trebuie scrisa in forma aceasta Null, cu N mare.

1. 2. VARIABILE

Cum am spus si la inceput, toate variabilele sunt precedate de semnul dolar ( $ ). Numele variabilelor este case-sensitive, adica tine cont de litere mari sau mici ($var este o variabila diferita de
$Var). Numele unei variabile trebuie sa inceapa cu o litera sau liniuta de subliniere ( _ ) urmata de oricate litere, cifre sau liniute de subliniere.

Exemplu:

$var = Bob;

$Var = John;

echo $var, $Var; //Va afisa: Bob, John

$4me = variabila; //incorect numele incepe cu o cifra

$_4me = variabila; //corect numele incepe cu liniuta de subliniere

In PHP este permisa atribuirea unei valori prin referinta. Aceasta inseamna ca noua variabila va fi o referinta spre variabila originala. Modificarea variabilei noi va duce la modificarea celei
originale, si invers. Aceasta atribuire are loc mult mai rapid, iar efectul se observa mai ales in structuri care se repeta. Pentru o astfel de atribuire se foloseste semnul ( & ) in fata valorii atribuite.

Exemplu:

$a = banana;

$b = &$a; //variabila $b va contine stringul banana

$b = portocala; //modificand variabila $b se va modifica si $a

Variabilele declarate in cadrul unui program nu sunt valabile si in interiorul functiilor definite de utilizator. Variabilele globale sunt valabila in tot programul, iar variabilele locale sunt valabile doar in
cadrul structurii definite de utilizator.

Exemplu:

$a = 1; /* variabila globala */
Function Test () {

echo $a; /* referinta spre o variabila locala */

Test ();

Aceasta functie nu va afisa nimic, pentru ca variabila locala $a nu are atribuita nici o valoare. Pentru a folosi o variabila globala in interiorul functiei definite de utilizator, ea trebuie declarata in
cadrul functiei cu clauza global.

$a = 1; /* variabila globala */
Function Test () {

global $a;

echo $a; /* referinta spre o variabila locala */

Test ();

Aceasta functie va afisa valoarea 1, pentru ca foloseste variabila $a declarata global.

Variabilele pot fi luate si dintr-un formular HTML sau prin specificarea lor la apelarea paginii web, insa acestea vor fi tratate in alta lectie.

1. 3. CONSTANTE

Constanta este un identificator pentru o valoare simpla. Cum spune si numele, valoarea acesteia nu se modifica pe durata executiei scriptului. Numele constantei este case-sensitive, ca si in
cazul variabilelor. Prin conventie, constantele se scriu intotdeauna cu litere mari.

Exemplu:

define("CONSTANT", "Hello world.");

echo CONSTANT; // Afiseaza: "Hello world."

Constantele pot contine numai date de tipul: boolean, integer, floating-point si string.

Exista cateva diferente intre constante si variabile:

- constantele nu au semnul dolar ( $ ) in fata

- constantele pot fi definite si accesate oriunde, fara a tine cont de regulile de la variabile

- constantele nu pot fi redefinite.

1. 4. OPERATORI
Operatori aritmetici

$a + $b adunare

$a - $b scadere

$a * $b inmultire

$a / $b impartire

$a % $b modulo

Operatori de atribuire

$a = 3; //$a primeste valoarea 3

$a += 5; //$a ia valoarea 8, adica 3 + 5.

$c = ($b = 4) + 5; //$b primeste valoarea 4, iar $c valoarea 9

$b = "Hello ";

$b .= "There!"; //atribuie lui $b valoarea "Hello There!", este echivalent cu $b = $b . "There!";

Operatori la nivel de bit

$a & $b Si

$a | $b Sau

$a ^ $b Sau-Exclusiv

~ $a Not (Negare)

$a << $b Rotire la stanga (muta bitii lui $a cu $b pozitii spre stanga)

$a >> $b Rotire la dreapta (muta bitii lui $a cu $b pozitii spre dreapta)

Operatori de comparare

$a == $b egal cu

$a === $b identic cu

$a != $b deferit

$a <> $b diferit

$a !== $b neidentic

$a < $b mai mic

$a > $b mai mare

$a <= $b mai mic sau egal

$a >= $b mai mare sau egal

Operatori de incrementare/decrementare
++$a Pre-incrementare (aduna 1 la $a, apoi returneaza $a)

$a++ Post-incrementare (returneaza $a, apoi aduna 1 la $a)

--$a Pre-decrementare (scade 1 din $a, apoi returneaza $a)

$a-- Post-decrementare (returneaza $a, apoi scade 1 din $a)

Operatori logici

$a and $b Si

$a or $b Sau

$a xor $b Sau-Exclusiv

! $a Not (Negare)

$a && $b Si

$a || $b Sau

<SPAN style="FONT-SIZE: 10pt; COLOR: black;

3.Structuri de control

Structuri de control. Definire Clase

Structurile de control sunt scheletul ( inima) limbajelor de programare . PHP are incluse structurile de control necesare functionarii unui limbaj.

Daca aveti ceva cunostinte de Cobol, Pascal, C nu o sa fiti deloc surprinsi de ceea ce urmeaza.

Programele PHP iau decizii prin evaluare unor expresii conditionale si executa instructiuni bazate pe rezultatele acestor evaluarii.

Expr. Conditionale se mai numesc si expresii booleene , uneori , si au valorile asociate : true (1) adevarat

false (0)- fals

O modalitate mai utila de a forma o expresie conditionala consta in utilizarea unui operator relational pentru compararea a doua valori numerice.

Exemplu : $a < 1 ( operatorul < are aceeasi semnificatie ca si in algebra )

Expresia conditionala de mai sus are valoarea true daca si numai daca valoarea variabilei $a are valoarea mai mica decat unitatea ; in toate celelalte cazuri are valoarea false.

Puteti folosi operatori relationali si pentru compararea sirurilor, numai ca aceste siruri vor fi convertite la o valoare numerica inainte de evaluarea expresiei. Vom vedea mai tarziu totusi ca exista
si functii de comparare a sirurilor.

Operatori relaionali ai limbajului PHP


Operator Descriere

1. a<b Adevrat dac valoarea lui a este mai mic dect valoarea lui b.

2. a>b Adevrat dac valoarea lui a este mai mare dect valoarea lui b.

3. a<=b Adevrat dac valoarea lui a este mai mic sau egal cu valoarea lui b.

4. a>=b Adevrat dac valoarea lui a este mai mare sau egal cu valoarea lui b.

5. a==b Adevrat dac valoarea lui a este egal cu valoarea lui b.

6. a!=b Adevrat dac valoarea lui a este diferit de valoarea lui b.

7. a= =b Adevrat dac a i b sunt identice; cu alte cuvinte, dac a i b au acelai tip i dac valoarea lui a este egal cu valoarea lui b.

8. a!= =b Adevrat dac a i b nu sunt identice; cu alte cuvinte, dac a i b nu sunt de acelai tip sau dac valoarea lui a este diferit de valoarea lui b.

Pentru a sintetiza, iat regulile care definesc rezultatul unei expresii condiionale:

Constantele true i false i iau respectiv valorile lor booleene corespunztoare.

O expresie condiional care const dintr-o valoare nedefinit are valoarea false; n caz contrar, rezultatul depinde de tipul valorii, n spe numeric, ir, tablou sau obiect.

O expresie condiional care const dintr-o valoare numeric are valoarea false dac valoarea este zero; n caz contrar, are valoarea true.

O expresie condiional care const dintr-o valoare de tip ir are valoarea false dac irul este vid; n caz contrar, are valoarea true.

O expresie condiional care const dintr-o valoare de tip tablou sau obiect are valoarea false dac tabloul sau obiectul sunt vide; n caz contrar, are valoarea true.

O expresie condiional alctuit dintr-un operator relaional i din operanzii si ia valori n conformitate cu rezultatul comparaiei (numerice sau nu).

Putei forma expresii condiionale complexe prin unirea a dou expresii condiionale cu ajutorul unui operator logic.
De exemplu, expresia urmtoare este adevrat dac ambele expresii condiionale care o compun sunt adevrate:

$a < 1 AND $b < 1

Cu alte cuvinte, expresia este adevrat dac att variabila $a, ct i variabila $b au valori mai mici dect 1.

In general, expresiile sunt evaluate de la stnga la dreapta. Ca si in alte limbaje de programare totui, operatorii care apar n partea superioar a tabelului dispun de o preceden mai ridicat i
sunt efectuai anterior operatorilor cu o precedent mai redus, dac nu sunt folosite paranteze pentru a specifica o alt ordine a operaiilor.

Operatori logici ai limbajului PHP

Operator Descriere

x AND y Adevrat dac att x, ct i y sunt adevrate.

x && y Adevrat dac att x, ct i y sunt adevrate.

x OR y Adevrat dac minimum una din expresiile x i y este adevrat.

x || y Adevrat dac minimum una din expresiile x i y este adevrat.

x XOR y Adevrat dac numai una din expresiile x i y este adevrat.

!x Adevrat dac x este fals.

Precedena operatorilor PHP

Operator
! ~ ++ (int) (double) (string) (array) (object)

/%

+-.

< <= > >=

= = != = = = ! = =

&

&&

?:

= += -= = /= .= %= &= = = ~= <<= >>=

And

Xor

Or

,
Exemplu :

Consideram expresia $a + $b * $c

Precedena operatorului de multiplicare * este mai ridicat dect aceea a operatorului de adunare +, deci nmulirea este efectuat prima, chiar dac adunarea apare la stnga nmulirii. Cu alte
cuvinte, expresia este evaluat ca i cum ar fi fost scris astfel:

$a + ( $b * $c )

Dac dorii ca adunarea s fie efectuat prima, putei folosi paranteze n cadrul expresiei, astfel:

( $a + $b ) * $c

INSTRUCTIUNEA IF

SIMPLA

$a= 15 ;

If ($a > 10)

Echo "Acesta este un numr mare " ;

Asta se traduce cam asa :

- daca conditia este adevarata executa echo sau orice alta instructiune care ar putea fi ;

1. Plasai urmtorul script PHP ntr-un fiier denumit lectia3-1.php i ncrcai acest fiier n serverul dumneavoastr PHP:

<HTML>

<HEAD>

<TITLE>Lectia3-1</TITLE>

</HEAD>

<BODY>

<!--Fiier lectia3-1.php -->

<?php

echo Numrul introdus a fost : $numr.;

if ($numr > 10)


echo <BR> Acesta este numr mare.;

?>

</BODY>

</HTML>

2. Plasai urmtoarea pagin HTML ntr-un fiier denumit lectia3-1.html i ncrcai acest fiier n serverul dumneavoastr, plasndu-l n acelai catalog ca i fiierul lectia3-1.php:

<HTML>

<HEAD>

<TITLE>Lectia 3-1</TITLE>

</HEAD>

<BODY>

<!--Fiier lectia3-1.html-->

<FORM METHOD=POST ACTION=lectia3-1.php>

Introducei o valoare numeric:

<BR><INPUT TYPE=TEXT NAME=numar>

</FORM>

</BODY>

</HTML>

COMPLEXA

$a= 15 ;

if ($a > 10 )

echo <BR>Numarul este mai mare dect 10.;

echo <BR>Deci, trebuie sa fie mai mare.;

sau

sa zicem ca $a = 8 ;

if ($numar > 10 )
echo <BR>Acesta este un numar mare .;

else

echo <BR>Acesta este un numar mic.;

Instructiunea if va afisa : Acesta este un numar mic

Sau INSTRUCTIUNE IF IMBRICATA

if ($numar > 10 )

if ($numa > 100)

echo <BR>Acesta este un numar foarte mare.;

else

echo <BR>Acesta este un numar mare.;

else

echo <BR>Acesta este un numar mic.;

Exemplul afieaz mesajul Acesta este un numr foarte mare." dac valoarea variabilei $numar depete 100; n caz contrar, dac valoarea variabilei $numar este mai mare dect 10, se
afieaz mesajul Acesta este un numr mare.". Dac valoarea variabilei $numar este mai mic sau egal cu 10, exemplul afieaz mesajul Acesta este un numr mic.".

INSTRUCTIUNEA ELSEIF

if ($numar > 100 )

echo <BR>Acesta este un numar foarte mare.;

elseif ($numa > 10)

echo <BR>Acesta este un numar mare.;

elseif ($numa > 1)

echo <BR>Acesta este un numar mic.;

else

echo <BR>Acesta este un numar foarte mic.;

Exemplul extinde funcionalitatea exemplului anterior, afind mesajul Acesta este un numr foarte mic." pentru valori ale variabilei $numar mai mici sau egale cu 1
Scrierea instruciunilor switch, break i default

Instruciunea if v permite s luai o decizie n dou sensuri. Pentru a putea lua o decizie n mai multe sensuri, putei folosi mai multe instruciuni if , else sau elseif. Cu toate acestea, cnd dorii
ca programul dumneavoastr s aleag dintr-un set de alternative care pot fi reprezentate prin valori ntregi, instruciunea switch este o opiune mai convenabil.

De exemplu, s presupunem c valoarea variabilei $numar este l, 2 sau 3, reprezentnd respectiv dimensiunile mic, medie i mare. Iat un mic program care afieaz dimensiunile asociate
valorilor variabilei $numar:

Switch($numar)

case(1):

echo mic;

break;

case(2):

echo mediu;

break;

case(3):

echo mare;

break;

default:

echo Acesta nu este un cod valabil;

Instruciunea break determin ncheierea execuiei instruciunii switch, transfernd controlul urmtoarei instruciuni secveniale care succede instruciunii switch. n absena instruciunii break,
execuia trece la urmtoarea instruciune case sau default, fapt nedorit n majoritatea cazurilor.

INSTRUCTIUNEA FOR

Instructiunea for este o instructiune bucla sau o instructiune iterative; o instructiune care executa in mod repetat instructiunile associate.

Exemplu:

$suma = 0

for ($n =1; $n<=3; $n++)

$suma += $n;

echo !<BR>Suma intregilor de la 1 la $numa este $suma.;


n exemplu se calculeaz suma ntregilor cuprini ntre l i 3. Pentru aceasta, mai nti se iniializeaz variabila $suma la valoarea 0. Apoi, se execut o instruciune for care incrementeaz n
mod repetat valoarea variabilei $suma.

Instruciunea for include trei expresii, care apar ntre paranteze; fiecare expresie este separat de vecina sa printr-un caracter punct i virgul. De asemenea, instruciunea for include o
instruciune sau un grup de instruciuni, cunoscute sub numele de corpul instruciunii for. n exemplul de mai sus, instruciunea $suma += $n este corpul instruciunii for.

Sa examinm mai amnunit cele trei expresii:

Prima expresie este expresia de iniializare. Aceasta se execut atunci cnd PHP ajunge la instruciunea for. In exemplu, expresia de iniializare atribuie valoarea variabilei $n, variabil
denumit variabil de ciclare sau index.

A doua expresie este expresia de test. Aceasta este o expresie condiional care indic dac se execut sau nu corpul instruciunii, n general, face referire la variabila de ciclare. In cadrul
exemplului, expresia de test compar valoarea variabilei $n cu valoarea 3. Expresia de test este evaluat pentru prima dat imediat dup evaluarea expresiei de iniializare.

Cea de-a treia expresie este expresia pas. n general, aceasta modific una sau mai multe variabile la care se face referire n expresia test. n cadrul exemplului, expresia pas incrementeaz
valoarea variabilei $n.

Secvena de execuie a unei instruciuni for este urmtoarea:

1. Se evalueaz expresia de iniializare.

2. Se evalueaz expresia test.

3. Dac rezultatul evalurii expresiei test este false, se execut etapa 7.

4. Se execut corpul buclei.

5. Se evalueaz expresia pas.

6. Se trece la etapa 2.

7. Se ncheie execuia instruciunii for, prin executarea urmtoarei instruciuni secveniale.

Instruciunea for este util pentru numrare i executarea n mod repetat a unor aciuni. Ca alt exemplu, iat o instruciune for care creeaz numeroase controale de tip buton. Numrul
controalelor create este determinat de valoarea variabilei $numar:

for($n=0;$n<=$numar; $n++)

echo <BR><INPUT TYPE =BUTTON VALUE=$n>n;

Instruciunile while i do while reprezint versiuni manuale" ale instruciunii for.

Urmatoarele 2 instructiuni sunt echivalente:

for ( ; $i<= 3; ) $suma += $i; while ($i <= 3) $suma ++ $i;

Exemplu de instructiune while:


$n = 0;

$suma = 0;

while ($n <= 3)

$suma = $suma +$n;

$n++;

echo Suma este $suma.

Secvena de execuie a unei instruciuni while este urmtoarea:

1.Se evalueaz expresia test.

2.Dac rezultatul este false, se trece la etapa 5.

3.Se execut corpul buclei.

4.Se trece la-etapa 1.

5. Se prsete bucla, prin executarea urmtoarei instruciuni secveniale.

Instruciunea do while este oarecum asemntoare instruciunii while. Diferena este aceea c instruciunea do while i execut corpul nainte de a-i evalua expresia de test.
Astfel, corpul buclei unei instruciuni do while este ntotdeauna executat cel puin o dat; corpul unei instruciuni while este omis dac expresia de test are iniial valoarea false.

Secvena de execuie a unei instruciuni do while este urmtoarea:

1. Se execut corpul buclei.

2. Se evalueaz expresia de test

3. Dac rezultatul este adevrat, se trece la etapa 1.

4. Se ncheie execuia buclei, prin executarea urmtoarei instruciuni secveniale.

Exemplu :

$suma = 0;

$n = 1;

do

$suma += $n;

$n++;

while ($n <= $numar);


echo <BR>Suma ntregilor cuprini ntre 1 i $numar este $suma.;

Preluarea datelor dintr-un formular

In acest curs vom invata sa preluam datele dintr-un formular si sa le afisam.

Vom incepe cu cateva elemente de HTML:

1. Pentru a descrie un formular folositi eticheta FORM, care are urmatoarea forma elementara:

<FORM METHOD=metoda ACTION=url >

Atributul METHOD poate lua una din valorile GET sau POST.

Cand METHOD este GET (implicit), datele introduse in form sunt trimise ca o cerere HTTP GET cu ?form_data adaugat la sfarsitul URL-ului specificat de atributul ACTION . Astfel, datele trimise
prin metoda GET pot fi vizualizate de catre utilizator (dezavantaj).Folositea metodei GET permite ca trimiterea form-ului sa fie continuta in URL. Aceasta prezinta avantajul ca poate fi facuta
bookmark in browserele actuale, dar, datele nu pot contine caractere non-ASCII precum "" si "". De asemenea, cantitatea de date care poate fi procesata prin metoda GET este limitata de
lungimea maxima a URL-ului pe care o accepta serverul si browserul. Pentru siguranta, form-urile care ar putea contine caractere non-ASCIIsau mai mult de 100 de catactere trebuie sa
foloseasca METHOD=POST.Cu valoarea METHOD egala cu POST, datele introduse in form sunt trimise ca o cerere HTTP POST , iar datele sunt continute in interiorul cererii .Majoritatea
browserelor actuale nu pot face bookmark la cereri POST , dar, astfel POST nu limiteaza lungimea si tipul de caracter introdus ,precum la GET.

Ca incepator este mai bine sa folositi in mod consecvent metoda POST, deoarece alegerea intre metodele GET si POST este destul de complicata.Ca regula empirica, multi programatori
folosesc GET pentru formulare care executa o cautare sau o interogare, respectiv POST pentru formulare care actualizeaza o baza de date sau un fisier.Astfel, datele trimise prin metoda GET
pot fi vizualizate de catre utilizator.

Atributul ACTION specifica adresa URL a scriptului PHP care prelucreaza datele adunate prin intermediul formularului. Adresa URL poate fi o adresa completa,care include protocolul, numele
gazdei si calea de acces, respectiv o adresa partiala, care specifica o locatie relativa la locatia paginii curente.

Intre eticheta FORM si eticheta sa /FORM corespunzatoare, plasati controalele formularului

Ex 1:

<FORM method=POST action=http://www.php.intercer.org/test.php>

<FORM method=POST action=test1.php>

2. Pentru a crea o caseta de tip text folosim un control text :

<INPUT TYPE=text name=mytext>


Atributul NAME atribuie casetei cu text un nume, astfel incat continutul sau sa fie accesibil unui script PHP.Numele pe care il atribuiti unui control trebuie sa fie unic in cadrul formularului si trebuie
sa respecte regulile pentru denumirea variabilelor PHP, cu exceptia ca nu trebuie sa inceapa cu simbolul $. HTML nu are o eticheata /INPUT.

3. Daca trimitem scriptului PHP date confidentiale, folosim o caseta text de tip password

<INPUT TYPE=password name=mypassword>

4. Pentru a expedia datele unui script PHP aveti nevoie de un buton de expediere :

<INPUT TYPE=submit VALUE=text>

Atributul VALUE specifica textul care trebuie sa apara pe suprafata butonului de expediere

Ex 2:

Crearea unui formular cu 3 controale: un control de tip text, unul de tip password si un buton

<FORM METHOD=post ACTION=login.php>

Login : <INPUT TYPE=text name=login>

Parola : <INPUT TYPE=password name=parola>

<INPUT TYPE=submit VALUE=Login>

</FORM>

5. Crearea de suprafete cu text

Ca o caseta cu text, o suprafata cu text permite unui utilizator sa introduca text.Cu toate acestea, o suprafata cu text poate permite utilizatorului sa introduca mai multe linii de text, in timp ce o
caseta de text permite introducerea unei singure linii de text.

<TEXTAREA NAME=mytext ROWS=numar COLS=numar WRAP=wrap>

Atributul NAME(obligatoriu) specifica numele controlului.

Atributul ROWS(obligatoriu) specifica numarul liniilor de text vizibile in suprafata cu text

Atributul COLS(facultativ) specifica numarul coloanelor de text vizibile in suprafata cu text

Atributul WRAP(facultativ) specifica maniera de infasurare in interiorul suprafetei cu text.

O eticheta TEXTAREA trebuie combinata cu o eticheta /TEXTAREA.Orice text care apare intre etichete va fi prezentat drept continut initial al controlului de tip suprafata cu text.
6. Crearea campurilor ascunse

Uneori este utila crearea asa-numitelor campuri ascunse.Valorile campurilor ascunse sunt trimise la server alaturi de valorile altor controale; cu toate acestea, utilizatorul nu are posibilitatea de a
vizualiza sau manipula valorile campurilor

<INPUT TYPE=hidden NAME=mytext VALUE=myvalue>

7. Crearea casetelor de validare

Pentru datele care pot avea numai una din doua valori, cum ar fi pornit sau oprit, caseta de validare este controlul ideal.De exemplu, caseta de validare este un control adecvat pentru a
permite utilizatorului sa opteze pentru livrarea rapida a unui colet.In cazul in care caseta de validare este validata, coletul va fi livrat mai rapid, in caz contrar, coletul se va deplasa cu mijloace
obisnuite.

<INPUT TYPE=checkbox NAME=mycheck value=text CHECKED>

Daca atributul CHECKED apare, caseta de validare va fi selectata in mod prestabilit; in caz contrar, caseta de validare nu este selectata initial.

Atributul VALUE specifica valoare care este trimisa serverului in cazul in care caseta de validare este selectata; daca atributul nu este specificat, se va trimite valoarea on (activat)

8. Crearea butoanelor radio

Ca si casetele de validare, butoanele radio pot avea numai una din doua valori. Cu toate acestea, butoanele radio sunt organizate in grupuri, iar la un moment dat poate fi activat un singur buton
radio din cadrul unui grup; toate celelalte trebuie sa fie dezactivate.Butoanele radio sunt utile pentru a permite unui utilizator sa aleaga dintr-o serie de alternative mutual exclusive.De exemplu,
puteti folosi un set de trei butoane radio pentru a permite utilizatorului sa specifice tipul de ambalaj pentru un cadou: fara ambalaj, cu ambalaj simplu sau sofisticat. Numai unul din cele trei
butoane radio poate fi activat; la un loc, setul de butoane radio ofera utilizatorului o tripla optiune.

<INPUT TYPE=radio NAME=myradio value=text CHECKED>

Atributele unui buton radio au aceeasi semnificatie ca si acelea ale unei casete de validare

Toti membrii unui set de casete de validare prezinta acceasi valoare a atributului name

9. Crearea de selectii

O selectie este un meniu care defileaza, de unde utilizatorul poate alege una sau mai multe optiuni. De exemplu, intr-o selectie pot fi enumerate garniturile pentru pizza, astfel incat un utilizator
sa poata selecta orice combinatie de garnituri pe care o doreste.

<SELECT NAME=myselect size=numar MULTIPLE>etichete OPTION</SELECT>

Eticheta SELECT este folosita in combinatie cu eticheta /SELECT. Intre cele doua etichete este inclusa o serie de etichete OPTION.

Atributul MULTIPLE arata ca utilizatorul poate alege mai multe optiuni mentinand apasata tasta CTRL si executand click pe aceasta.In absenta atributului MULTIPLE, utilizatorul poate selecta o
singura optiune.Daca specificati atributul MULTIPLE, trebuie sa specificati si un atribut NAME, care atribuie un nume de tablou ca nume al controlului. De exemplu, un control de tip selectie care
permite utilizatorului sa aleaga mai multe garnituri pentru desert trebuie denumit folosind sintaxa garnitura[], nu garnitura.

Atributul SIZE specifica numarul de optiuni vizibile.Prin utilizarea unui buton de derulare in jos sau a unei bare de defilare, utilizatorul poate manipula selectia pentru a obtine accesul la restul
optiunilor si a alege dintre acestea.

Asa cum s-a aratat, o selectie este asociata cu una sau mai multe optiuni.Pentru a crea o optiune care urmeaza a fi utilizate in cadrul unei selectii, folositi urmatoare sintaxa:

<OPTION SELECTED VALUE=text>continut_optiune</OPTION>

Eticheta OPTION este combinata cu eticheta /OPTION. Textul dintre aceste etichete este cunoscut sub numele de continut al optiunii. Continutul optiunii apare in controlul SELECT.

Multi programatori HTML omit eticheta /OPTION, caz in care textul optiunii se extinde pana la urmatoarea eticheta OPTION sau /SELECT/.Totusi s-ar putea ca acest mod de utilizare sa nu fie
compatibil cu versiunile ulterioate ale standardului HTML.

10. Crearea unui buton de reinitializare.

Acest buton este folosit pentru ca utilizatorul sa poata sterge toate informatiile incluse intr-un formular.

<INPUT TYPE=reset VALUE=reset>

Unicul atribut obligatoriu este TYPE. Atributul optional VALUE specifica textul care va aparea pe suprafata butonului de reinitializare; daca atributul este omis, pe buton va scrie Reset.

Am vazut cum se poate crea un formular in HTML.Acum o sa vedem cum putem prelua variabilele din php si sa le afisam intr-o fereastra noua.

O variabila preluata dintr-un formular poate fi preluata prin una din modalitatile :

1. $_POST[nume_variabila] sau cu $_GET[nume_variabila] (in functie de atributul method al formului post sau get)

2. De asemeni pot fi folosite si $HTTP_POST_VARS[nume_variabila] si$HTTP_GET_VARS[nume_variabila]

3. Daca in PHP.ini (fisierul de configurare al php-ului) aveti setat register_globals=on puteti folosi $nume_variabila

Personal va recomand prima varianta.

Sa luam cateva exemple de formulare simple :


Ex 3 : preluarea valorii unui control text

test.html

<form action="test.php" method="POST">

Introduceti numele : <input type="text" name="name"><br>

<input type="submit" value="Trimite">

</form>

test.php

<?php

echo "Salut ".$_POST["name"]." !!";

?>

Similar se face pentru controale de tip password si textarea.

Ex 4: preluarea valorii unui control checkbox

test1.html

<form action="test1.php" method="POST">

Alb <input type="checkbox" name="color_alb" value="alb"><br>

Rosu <input type="checkbox" name="color_rosu" value="rosu"><br>

Alb <input type="checkbox" name="color_verde" value="verde"><br>

<input type="submit" value="Trimite">

</form>

test1.php

<?php
echo "Ati selectat culorile :<br>";

if($_POST["color_alb"]!="")

echo "Culoarea ".$_POST["color_alb"]." !!<br>";

if($_POST["color_rosu"]!="")

echo "Culoarea ".$_POST["color_rosu"]." !!<br>";

if($_POST["color_verde"]!="")

echo "Culoarea ".$_POST["color_verde"]." !!<br>";

?>

Ex 5: preluarea valorii unui control radio

test2.html

<form action="test2.php" method="POST">

Alb <input type="radio" name="color" value="alb"><br>

Rosu <input type="radio" name="color" value="rosu"><br>

Alb <input type="radio" name="color" value="verde"><br>

<input type="submit" value="Trimite">

</form>

test2.php

<?php

echo "Ati selectat culoarea :".$_POST["color"]." !!!";

?>

Ex 6: preluarea valorii unui control select

test3.html
<form action="test3.php" method="POST">

Selecteaza culoare :

<select name="color[]" MULTIPLE size="3">

<option>alb</option>

<option>negru</option>

<option>rosu</option>

<option>verde</option>

<option>albastru</option>

<option>galben</option>

</select>

<input type="submit" value="Trimite">

</form>

Obs: daca doriti selectie simpla puneti name=color iar daca doriti sa fie vizibila o singura optiune la un moment dat stergeti size=3

test3.php

<?php

if(is_array($_POST["color"])){

$c=count($_POST["color"]);

echo "Ati selectat culorile<br>";

foreach ($_POST["color"] as $key => $value)

echo "$value<br>";

else{

echo "Ati selectat culoarea :".$_POST["color"]." !!!";

?>

Sper ca ati inteles aceste exemple !!


Acum sa trecem la tema !

Tema -crearea unui formular pentru inscrierea la un newsletter

Campurile de care aveti nevoie sunt specificate in urmatorul tabel:

Nume camp Obligatoriu(Da/Nu) Tip control Observatii

Nume Da text

Prenume Da text

Sex Da radio

Starea civila Da select casatorit(a), necasatorit(a), divortat(a)

Data nasterii Da select se utilizeaza 3 controale select (zi,an,luna)

Domiciliul Da textarea aici utilizatorul va scrie strada,nr,bloc,scara, etaj, apartament

Oras Da text

Judet/Sector Da select selectul va contine judetele din Romania+ cele 6 sectoare din Bucuresti

Cod postal Da text

Email Da text

Telefon Nu text

Fax Nu text

Venit lunar Nu radio aici alegeti si voi niste intervale (100-200$, 201-300$, 301-500$, peste 500$ )

Hobby-uri Nu select multiple la lbera alegere

Modalitate de expediere a newsletter-ului Da checkbox (3 controale) modalitatile prin care sa primeasca newsletterului : email,posta si fax

Butoane pentru SUBMIT si RESET Da butoane (2)

Cerinte :

1. Sa se creeze formularul in HTML

2. Sa se preia in PHP variabilele din formular si sa se afiseze intr-un tabel

Obs 1 - Se testeaza variabilele obligatorii in PHP (NU folosind JavaScript ).Daca a aparut vreo eroare (adica daca au fost omise campuri obligatori) se trebuie sa ne intoarcem in formularul initial
pastrandu-se variabilele postate deja
ex : daca am introdus numele si am omis prenumele , cand ma va intoarce in pagina initiala numele trebuie sa fie deja completat.

Obs 2 - la email se testeaza corectitudinea adresei introduse : sa aiba @ si sa contina cel putin un caractet . (punct)

Spor la lucru !

5.Introducere in MySQL
Introducere in MySQL (exercitii din linia de comanda),

Probabil ca daca cineva v-ar ruga sa ii realizati un magazin online, probabil l-ati ruga sa va ofere date despre produsele sale iar voi ati incerca sa realizati un design bun si sa gasiti o forma de a-i prezenta
produsele. Cand e vorba de 5-10 produse nu ar fi o problema asa mare. Dar daca se pune problema unui numar de cateva 100 de produse? Ar trebui sa luati de pe servarul unde se afla site-ul (asta daca nu
aveti deja o copie a site-ului pe calculator), sa o modificati si sa-l puneti din nou pe servar. Probabil ca fiecare produs va avea propria pagina cu descriere si probabil caracteristici. Va puteti inchipui ce
inseamana sa ti "up to date" un astfel de site. Sisif s-ar fi considerat probabil norocos.

Si probabil acum veti intelege cat de puternica este o baza de date. Sa pornim de la un caz practic. Vom incerca sa realizam un site de anunuturi online (ceva mai simplu decat www.adserv.ro). In mod
normal cinva care trebuie sa dea un anunt, va va trimite un email cu anuntul, voi veti modifica pagina html cu anunuturi si o veti pune pe server. Si asta pentru fiecare anunt in parte. Lucrurile vor devenii
destul de dificile atunci cand veti avea de publicat cateva zeci de mesaje pe zi. Si cum va spuneam mai devreme sau mai tarziu vom "esua" prin a folosi o baza da date.
Dar ce este pana la urma o baza de date? O baza de date (in cazul nostru MySQL) este un program ce poate stoca o cantitate foarte mare de informatii si o poate organiza intr-un format ce este usor
accesibil in mod direct sau de catre un alt program (in cazul nostru PHP).

O baza de date este formata din unul sau mai multe tabele. In cazul nostru vom incepe cu o singura tabela pe care o sa o numim "anunturi". Asa dupa cum ii spune si numele o tabela e de fapt un tabel ce
contine informatii. Fiecare coloana contine un anumit tip de informatii iar fiecare rand contine un set de astfel de informatii. In cazul nostru un anunt reprezinta un astfel de rand. Randurile si coloanele unei
tabele arata cam asa:

coloana coloana coloana


| | |
rand - id text_anunt data_anunt
1 vand masina de.. 2003-04-20
rand -
2 inchiriez spatiu... 2003-04-21

Observati ca tabela noastra are o cloana ce contine anuntul ("text_anunut") si data la care a aparut ("data_anunut"). Probabil o sa ma intrebati ce e cu coloana "id". O proiectare buna a unei baze de date
presupune ca un anumit anunt sa fie indentificat unic. In viata de zi cu zi daca cineva ne-ar ruga sa identificam un anunt i-am spune probabil ca e alac cu "masina de....". Dar pentru o baza de date e un pic
mai complicat sa identifice astfel in mod unic un anunt. Si atunci folosim o coloana ce contine un numar unic. Astfel e mai simplu sa aflam ce de fapt anunutul care ne intereseaza e anuntul 2 (id=2).

crearea unei baze de date


Haideti sa creem o astfel de baza de date (presupun ca deja ati instalat MySQL, el functioneaza si puteti sa folositi linia de comanda SQL). Este foarte simplu sa creati o baza de date:
mysql> CREATE DATABASE anunturi;
Am ales numele "anunturi" pentru baza noastra de date. Puteti alege orice nume. Acum ca am creat baza de date trebuie sa-i spunem servarului (in cazul nostru MySQL) ca vrem sa folosim aceasta baza de
date.
mysql> USE anunturi;
Daca doriti sa stergeti o baza de date puteti utiliza:
mysql> DROP DATABASE nume_baza_de_date;

crearea unei tabel


Crearea unei tabel este un lucru ceva mai complicat, pentru ca in tabele sunt de fapt stocate informatile. Daca veti citi manualul de MySQL veti descoperi o definitie ce la prima vedere pare criptica:
mysql> CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement]
Cam complicat nu? Sa luam un exemplu concret si sa vedem cum crea tabela noastra cu anunturi:
mysql> CREATE TABLE anunturi (
-> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> text_anunut TEXT,
-> data_anunt DATE NOT NULL
-> );
Tot pare complicat nu? Haideti sa vedem ce reprezita fiecare linie:

prima linie pare destul de simpla. daca stiti ceva engleza e suficient sa traduceti si veti vedea ca ii spunem servarului de MySQL ca dorim sa crem o tabela

a doua linie e in schimb ceva mai complicata. Sa o luam pe rand. Aceasta linie comunica serverului MySQL ca dorim sa crem o coloana cu numele "id" de timp intreg ("INT") ce se va auto

incrementa ("AUTO_INCREMENT") si informatile continute in aceasta coloana vor fi unice ("PRIMAY KEY"). V-am explicat mai sus ca o baza de date bine proiectata trebuie sa aiba un mod de
a indentifica in mod unic o inregistrare (linie).

a treia linie ii comunica serverului MySQL ca dorim sa crem o coloana cu numele "text_anunt" de tim "TEXT"

a patra linie ii comunica serverului MySQL ca dorim sa crem o coloana cu numele "data_anunt" de tim "DATE" si mai mult decat atat pune conditia ca totdeuna sa existe informatii (sa nu fie

niciodata gol).
Recomandarea mea este sa consultati manualul MySQL (il veti gasi in directorul unde ati instalat MySQL in subdirectorul "Doc") pentru a afla mai multe despre tipuirle de date atunci cand
creati o tabela.
Daca doriti sa stergeti o tabela puteti utiliza:
mysql> DROP TABLE nume_tabela;


introducere de date intr-un tabel
Acum am creat baza de date si tablea dar ea inca goala. Nu am introdus nici o informatie. Exista 2 modalitati de a introduce informatii in baza de date. Folositi-o pe cea care vi se pare cea mai
simpla:
mysql> INSERT INTO anunturi SET
-> text_anunut = "vand masina de spalat automata. tel. 11111111",
-> data_anunt = "2003-04-20";

sau:
mysql> INSERT INTO anunturi
-> (text_anunut, data_anunt) VALUES(
-> "inchiriez spatiu comercial ultracentral. tel 232323", "2003-04-21");

Retineti ca ambele variante sunt absolut echivalente. Observati ca in nici una din variante nu am amintit nimic de campul "id". De ce? Pentru ca initial (cand am creat tabela) am pus conditia ca

acest camp sa fie AUTO_INCREMENT, iar la fiecare inserare MySQL va avea grija sa incrementeze cu 1 valoare precedenta si sa o adauge automat in tabela.

vizualizarea datelor stocate


Ce eram mai greu a trecut. Acum vom incerca sa obtinem de la MySQL informatile stocate. Daca dorim sa obtinem toate informatile din baza nostra de date vom folosi:
mysql> SELECT * FROM anunuturi;

in acest caz "*" se traduce prin "toate".

Daca in schim dormim sa aflam numai anunturile folsim:


mysql> SELECT text_anunt FROM anunuturi;

Sau daca dorim sa aflam anunutul si data cand a fost publicat folosim:
mysql> SELECT text_anunut, data_anunt FROM anunuturi;

Dar daca vrem sa aflam cate anunturi au fost publicate de exemplu in data de 21 aprilie 2003?
mysql> SELECT COUNT(*) FROM anunutur where data_anunt="2003-04-21"i;

Dar daca vrem sa aflam toate anunturile despre masini de spalat?


mysql> SELECT text_anunt FROM anunuturi WHERE text_anunut LIKE %"masina de spala%t";

Sfatul meu e sa incercati sa va mai jucati cu astfel de interogari catre baza de date (query in engleza).

modificare datelor stocate


La un moment dat va fi nevoie sa modificam datele stocate. Acum veti intelege utilitatea campului "id". Sa presupunem ca vrem sa modificam anuntul cu masina de spalat sa sa ii adaugam
pretul:
mysql> UPDATE anunturi SET text_anunt = "vand masina de spalat automata. pret 10 milioane. tel. 11111111" WHERE id = 1;

Puteti lesne observa ca am modificat randul ce are id=1. Daca acest camp nu ar fi existat acesta modificare ar fi fost un pic mai dificila pentru ca ar fi fost destul de greu sa-i comunicam

MySQL ce rand vrem de fapt sa modificam.

stergerea datelor stocate


Utilitatea campului "id" se va vedea si atunci cand vom dori sa stergem o inregistrare. Dupa campul "id" vom indentifica in mod unic inregistrarea pe care vrem so o stergem, astfel:

mysql> DELETE FROM anunturi WHERE id = 1;

6.Publicarea datelor din baza de date pe web

Publicarea datelor din baza de date pe web

Daca in lectia precedenta am vorbit despre baza de date acum a venit timpul sa afisem datele stocate intr-o forma "comerciala". Cei dintre voi care au avut curiozitatea sa incerce exemplele din
lectia precedenta au observat ca rezultatul query-urilor sunt afisate intr-un tabel, lucru nu foarte estetic. Mai mult decat atat un browser web nu se poate lega direct la servarul MySQL, nu poate
trimite query-uri si nu poate afisea rezultatul returnat de acestea. Un browser web nu poate decat sa afiseze pagini HTML. Si de aceea aici avem nevoie de PHP, care se poate conecta la
MySQL, poate trimite interogari si poate afisea rezultatul interogarior in format HTML, format inteles de un browser web. Principiul de functionare este cel descris in figura 1.

figura 1

Sa detaliem un pic. Browserul web vrea sa afiseze o pagina. El cere aceasta pagina serverului web, care vazand ca este o pagina de tip PHP o trimite spre prelucrare modulului de PHP
instalat. Acesta interpreteaza codul, vede ca sunt cerute date din baza de date, se conecteaza la aceasta, le obtine si genereaza codul html pentru afiserea lor. Astfel pagina generata este
servita browserului care o afiseaza. Sa parcurgem in detaliu toate aceste etape.

conectarea PHP la MySQL


Conectarea la MySQL se face printr-o functie PHP, mai exact:

<?php
$link = mysql_connect("mysql_host", "mysql_user", "mysql_password")
or die("Nu se poate conecta");
?>
Functia mysql_connect se conecteaza la MySQL folosind ca parametri adresa serverului unde ruleaza MySQL (daca il aveti instalat pe propriul calculator aceasta ar trebui sa fie localhost),
user-ul (daca il aveti instalat pe propriul calculator aceasta ar trebui sa fie root) si parola (daca il aveti instalat pe propriul calculator aceasta ar trebui sa nu existe).

Deci exemlul de mai sus particularizat pentru cazul in care aveti MySQL instalat pe proriul calculator:
<?php
$link = mysql_connect("localhost", "root", "")
or die("Nu se poate conecta");
?>
Functia die nu face altceva decat sa afiseze mesajul si sa nu mai execute nici un cod dupa. Variabila $link reprezinta un identificator pentru aceasta conxiune (pentru ca ne putem conecta
simultan la mai multe server MySQL).

Numai conectarea nu este suficienta. Trebuie sa-i spunem servarului MySQL ce baza de date dorim sa folosim. Pentru a exemplifica vom folosi baza de date de la lectia 5.
<?php
$link = mysql_connect("mysql_host", "mysql_user", "mysql_password")
or die("Nu se poate conecta");
mysql_select_db("anunturi", $link) or die("nu se poate alege baza de date");
?>
Observati ca functia mysql_select_db este cea care ii transmite serverului MySQL ce baza de date vrem sa folosim.

trimiterea de interogari cu PHP


Vom contiuna sa folosim ca exemplu practic baza de date de la lectia 5. Sa presupunem ca dorim sa schimbam data celui de-al doilea anunt.

<?php
$link = mysql_connect("mysql_host", "mysql_user", "mysql_password")
or die("Nu se poate conecta");
mysql_select_db("anunturi", $link) or die("nu se poate alege baza de date");
$query = "UPDATE anunturi SET data_anunt = '2003-05-10' WHERE id =2";
$result = mysql_query($query) or die("Query failed");

?>
Functia mysql_query este cea care transmite serverului MySQL query-ul pe care dorim sa-l executam ca string. Variabila $querycintine in acest caz un string ce reprezinta query-ul nostru de
update. Se pot astfel executa orice fel de query-uri, dar probabil cele mai importante sunt cele care selecteaza si afiseaza informatii din baza de date, asa cum vom vedea in paragraful urmator.

manipularea rezultatelor selectate


Poate una dintre cele mai importante lucruri pe care le puteti face cu combinatia PHP - MySQL este sa selectati si sa afiseati informatile din baza de date. Sa luam un exemplu concret si sa-l
discutam:

<?php
$link = mysql_connect("mysql_host", "mysql_user", "mysql_password")
or die("Nu se poate conecta");
mysql_select_db("anunturi", $link) or die("nu se poate alege baza de date");
$query = "select * from anunturi";
$result = mysql_query($query) or die("Query failed");

while ($myrow = mysql_fetch_array($result)) {


echo "<b>Anunt:</b> ".$myrow["text_anunt"]."<br><b>Data:</b> ".$myrow["data_anunt"]."<br><br><br>";
}

?>
Functia nou introdusa in exemlul nostru este mysql_fetch_array functie ce nu face decat sa ia pe rand (pana se termina) fiecare rand (inregistrare) returnat de query si sa o introduca intr-un
vector ($myrow). Puteti observa ca, cheile acestui vector sunt chiar numele campuriolor din tabela noastra.

introducerea de noi date in baza de date


Si acum sa incercam sa realizam o metoda practica de a introduce noi anunturi in baza noastra de date. Ati invatat despre formulare la lectia 4. Daca nu ati parcurs-o deja ca invit sa o faceti
inainte de a continua pentru a putea intelege pe deplin urmatoarele exemple.

Vom folosi un fisier (html) in care va exista un formular unde vom introduce anunturile sa-l numim 6_form.htm. El are urmatorul continut:

<html>
<head>
<title>Adaugare in baza de date</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form name="form1" method="post" action="6_insert.php">
<strong>anunt:</strong>
<input type="text" name="anunt" id="anunt">
<br>
<strong>data:</strong>
<input type="text" name="data" id="data">
(in format aaaa-ll-zz)<br>
<input type="submit" name="Submit" value="adauga">
<input type="reset" name="Submit2" value="reset">
</form>
</body>
</html>
Prin intermediul acestui fisier se pot introduce anuntul si data la care a fost publicat.

Acum cel de-al doilea fisier (de data asta de tip php) care va prelua datele din formularul precedent si le va introduce in baza de date. Sa-l numim 6_insert.php.
html>
<head>
<title>Adaugare in baza de date</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
$link = mysql_connect("mysql_host", "mysql_user", "mysql_password")
or die("Nu se poate conecta");
mysql_select_db("anunturi", $link) or die("nu se poate alege baza de date");
$query = "INSERT INTO anunturi SET text_anunt='".$_POST["anunt"]."', data_anunt='".$_POST["data"]."'";
$result = @mysql_query($query);
if ($result) echo "anuntul a fost indrodus cu succes. <a href=\"6_form.htm\">introduceti alt anunt?</a>";
else
{
echo "eroare. anuntul nu a putut fi introdus";
exit();
}

?>
</body>
</html>
In acest fisier se introduc informatiile in baza de date si se afiseaza daca a intervenit vreo eroare.

Puteti descarca o arhiva cu ambele fisier de aici.

7.Conectarea la baza de date in php


Lectia 7 : Conectarea la o baza de date din PHP

de Cristi, PHPRomania

PHP permite conectarea la diferite baze de date printre care:

dbase

FrontBase

Interbase

SQL Server

mSQL

MySQL

Oracle

Cea mai frecventa combinatie o reprezinta PHP si MySQL pe care o vom prezenta in aceasta lectie.

Introducere

MySQL reprezinta o baza de date relationala oferita gratuit, disponibila atat pentru Windows, cat si pentru Linux. Este folosita in realizarea aplicatiilor mici si medii.

Ideea pe care se bazeaza interactiunea PHP - MySQL sau in general interactiunea dintre PHP si o baza de date este aceea ca permite ca informatiile care se doresc sa apara pe site sa fie
prezente in baza de date. In acest fel informatiile pot fi actualizate usor si prezentate intr-o forma "dinamica" in cadrul site-ului.

Conectarea la baza de date

Vom incepe prin a ne conecta la o baza de date MySQL.

mysql_connect(adresa, utilizator, parola);

Ca si parametri vom folosi adresa care reprezinta IP-ul sau hostname-ul calculatorului pe care am instalat baza de date MySQL. Acesta poate fi acelasi cu cel pe care ruleaza serverul de web
(de obicei Apache sau IIS) sau un alt calculator. In cazul in care se gaseste pe acelasi calculator cu serverul de web, putem folosi la adresa si localhost. Numele de utilizator si parola vor fi cele
setate pentru MySQL. Implicit acestea sunt nume de utilizator: root si fara parola. Este recomandat ca aceste setari implicite sa fie modificate.
Functia mysql_connect returneaza un numar de identificare a conexiuni in caz de succes sau false in caz de eroare

<?php $id = mysql_connect("localhost", "root", "") or die("Nu


ma pot conecta la MySQL!"); print ("Conectare reusita");
mysql_close($id); ?>

Atentie o conexiune la baza de date trebuie deschisa intotdeauna inainte de a o folosi!


In cazul in care nu ne putem conecta la baza de date functia mysql_connect va returna false, iar in acest caz se va trece la executarea functiei die care va afisa mesajul din paranteza si va
termina executia scriptului.

Urmatorul pas il reprezinta alegerea bazei de date

mysql_select_db(baza_de_date, identificatorul_conexiunii);

Parametrii folositi in acest caz vor fi numele bazei de date ales si identificatorul returnat de catre mysql_connect.

<?php $id = mysql_connect("localhost", "root", "") or die("Nu


ma pot conecta la MySQL!"); $db = mysql_select_db("curs", $id)
or die("Nu gasesc o baza de date cu numele curs!"); mysql_close($id); ?>

In exemplul de mai sus am selectat baza de date curs. Ca si in exemplul anterior, in cazul in care nu putem selecta baza de date curs se va trece la executia functiei die a carui comportament
a fost explicat mai sus.

Inserarea unei inregistrari in baza de date

In exemplul urmator vom insera intr-o baza de data o inregistrare. Pentru aceasta vom folosi functia mysql_query cu ajutorul careia vom executa o instructiune SQL.

mysql_query(instructiune_SQL, identificatorul_conexiunii);

Aceasta instructiune (in cazul nostru <<INSERT INTO cursanti(nume) VALUES('$nume')>>) va fi transmisa serverului MySQL care il va executa si va returna rezultatul. In
cazul mysql_query rezultatul va fi true, in caz de succes, sau false, in caz de eroare.
Pentru a testa exemplul urmator va trebui sa creati un fisier cu numele "adauga_nume.php". Acest fisier va afisa in browser un formular cu o linie in care va puteti introduce numele si un buton
care in momentul in care este apasat va transmite numele mai departe. Dupa cum se observa am setat formularului la actiune valoarea "adauga_nume.php", ceea ce inseamna ca valoarea va fi
transmisa spre acelasi fisier.
Dupa ce valoarea este transmisa, executia va continua si in interiorul instructiunii if, executie care initial a fost ignorata, deoarece variabila $nume nu exista in cazul primei executii.
<?
if($nume) {
$idSQL = mysql_connect("localhost", "root", "");
mysql_select_db("curs", $idSQL);
$query = "INSERT INTO cursanti(nume) VALUES('$nume')";
mysql_query($query, $idSQL);
print("Numele dvs a fost introdus in baza de date!");
}
?>
<form method="POST" action="adauga_nume.php">
Numele dvs:
<input type="text" name="nume" size="30">
<input type="submit" value="Adauga"></form>

Atentie: In unele cazuri este necesar sa se foloseasca variabila $HTTP_POST_VARS['nume'] in momentul in care se doreste preluarea variabilei nume transmisa prin metoda POST prin
intermediul formularului.

Selectarea inregistrarilor

Dupa ce am inserat o inregistrare in baza de date dorim sa o afisam in browser. De aceea vom incerca sa vedem daca in tabela cursanti exista un utilizator cu numele Cristi. Pentru aceasta
construim o instructiune sql de tipul celei de mai jos. Instructiunea mysql_num_rows returneaza numarul de rezultate returnate de executia instructiunii. Se poate observa ca in cazul in care se
foloseste instructiunea mysql_query cu o instructiune SELECT, acesta nu va returna true sau false, ci va returna o lista de rezultate sau false in caz de eroare.

$query = "SELECT * FROM cursanti WHERE nume='Cristi'";


$result = mysql_query($query, $idSQL);
if(mysql_num_rows($result))
{
print("<strong>Numele Cristi exista in tabela cursanti</strong>");
}
else
{
print("<strong>Numele Cristi nu exista in tabela cursanti</strong>");
}

Atentie: Trebuie sa fiti conectati la baza de date inainte de a executa instructiunea SQL.

In urmatorul exemplu dorim sa afisam toate inregistrarile din tabela cursanti. Vom proceda ca si in exemplul anterior. Insa in cazul in care gasim rezultate in tabela cursanti vom parcurge
fiecare din aceste rezultate si il vom afisa pe ecran.

mysql_fetch_row(rezultatul_returnat_de_mysql_query);

Instructiunea mysql_fetch_row va parcurge rezultatul returnat de instructiunea mysql_query si va returna pentru fiecare inregistrare un tablou care contine fiecare camp returnat. Indexarea
tablourilor incepe de la valoare 0. Instructiune while va avea ca efect returnarea pentru fiecare linie a unui tablou. In cazul nostru vom avea in $row[0], numele cursantului.

$query = "SELECT nume FROM cursanti";


$result = mysql_query($query, $idSQL);
if(mysql_num_rows($result)) {
while($row = mysql_fetch_row($result))
{
print("$row[0]<br>");
}
} else {
print "Tabela cursanti este goala !";
}

Atentie: Trebuie sa fiti conectati la baza de date inainte de a executa instructiunea SQL.

In urmatorul exemplu vom selecta dintr-o tabela toti cursanti a caror nume incep cu litera c. Pentru aceasta vom folosi o instructiune SQL mai complexa. Portiunea <nume LIKE 'c%'> din
interiorul instructiunii SQL se traduce prin toate inregistrarile a caror camp nume incepe cu litera c. Semnul %inseamna orice numar de caractere chiar si nici unul.
In acest exemplu am selectat pe langa nume si campul email, pe care il afisam prin intermediul lui $row[1].

$query = "SELECT nume,email FROM cursanti WHERE nume LIKE 'c%'";


$result = mysql_query($query, $idSQL);
if(mysql_num_rows($result)) {
while($row = mysql_fetch_row($result))
{
print("$row[0]");
print("$row[1]<br>");
}
} else {
print "Tabela cursanti este goala !";
}

Atentie: Trebuie sa fiti conectati la baza de date inainte de a executa instructiunea SQL.

Actualizarea unei inregistrari

In urmatorul exemplu vom actualiza toate inregistrarile care contin emailul test@asp.net cu test@asp.net. In cazul nu exista nici un utilizator care sa posede adresa de email test@asp.net,
tabela va ramane nemodificata.

$query = "UPDATE cursanti SET email='test@php.net' WHERE email='test@asp.net'";


mysql_query($query, $idSQL);

Stergerea unei inregistrari


Urmatorul exemplu permite stergerea tuturor inregistrarilor din tabela cursanti care au emailul test@php.net.

$query = "DELETE FROM cursanti WHERE email='test@php.net'";


mysql_query($query, $idSQL);

Final

Este recomandat ca dupa fiecare selectie a unor inregistrari din cadrul tabelei prin instructiunea SQL SELECT sa se foloseasca instructiunea mysql_free_result. Aceasta permite eliberarea
resurselor asociate variabilei $result.

mysql_free_result($result);

In cadrul acestui tutorial am folosit o tabela de forma:

CREATE TABLE cursanti(


id tinyint(4) DEFAULT '0' NOT NULL AUTO_INCREMENT,
nume varchar(50),
email varchar(50),
PRIMARY KEY (id));

Tema de casa

Realizati o tabela care sa contina campurile: nume, prenume, adresa, oras, judet.
Cerintele sunt urmatoarele:
- inserati prin intermediul unui formular noi inregistrari in tabela
- afisati in browser toti utilizatorii care sunt din Bucuresti
- afisati in browser toti utilizatorii care sunt dintr-un judet care incepe cu litera T

Resurse

www.php.net - site-ul oficial al limbajului PHP


www.mysql.com - site-ul oficial MySQL
www.phpromania.as.ro - Site-ul Comunitatatii PHP din Romania

8.Functii de prelucare a fisierelor

Lectia 8: Functii de prelucrare a fisierelor

resource fopen ( string filename, string mode [, int


use_include_path [, resource zcontext]])
Deschide un fisier sau un URL
Primul parametru este numele fisierului, iar al doilea este modul
de deschidere.
use_include_path poate fi setat '1' sau TRUE daca se face cautarea
si in include_path.
Exemple:

<?php $handle = fopen("fis.txt","r");


$handle = fopen("include/date.dat","w");
$handle = fopen("../agenda.txt","w+r");
$handle = fopen("fisier.txt","a");
$handle = fopen
("ftp://user:password@example.com/somefile.txt",
"w"); ?>
Modurile de deschidere ale unui fisier sunt:

mod Descriere
Deschide doar pentru citire; pozitioneaza pointerul la
'r'
inceputul fisierului.
deschide pentru citire si pentru scriere;pozitioneaza
'r+'
pointerul la inceputul fisierului
Deschide doar pentru scriere; pozitioneaza pointerul la
'w' inceputul fisierului si trunchiaza lungimea fisierului la
0.Daca fisierul nu exista incearca sa-l creeze.
Deschide pentru scriere si pentru citire; pozitioneaza
'w+' pointerul la inceputul fisierului si trunchiaza lungimea
fisierului la 0.Daca fisierul nu exista incearca sa-l creeze.
Deschide doar pentru scriere; pozitioneaza pointerul la
'a' sfarsitul fisierului .Daca fisierul nu exista incearca sa-l
creeze
Deschide pentru scriere si pentru citire;pozitioneaza
'a+' pointerul la sfarsitul fisierului .Daca fisierul nu exista
incearca sa-l creeze

string fread ( resource handle, int length)


Citeste pana la lenght bytes de la pointerul pozitionat in fisierul
referit de handle sau pana la sfarsitul de fisier.

Exemple:

<?php
$filename = "fisier.txt";
$handle = fopen ($filename, "r") or
die("Eroare la deschidere");
$contents = fread ($handle, 1024);
fclose ($handle);
?>

int fwrite ( resource handle, string string [, int length])


Scrie sirul de caractere string in fisierul referit de handle. Daca
parametrul length
exista scrierea se va intrerupe dupa ca au fost
scrise length caractere sau s-a ajuns la sfarsitul sirului de
caractere.
Functia returneaza numarul de bytes scrisi sau FALSE daca apare
o eroare.
Exemple:

<?php
//scrie o linie noua in fisierul ex2.txt
$filename = 'ex2.txt';
$text = "O linie singura linie\n";
$handle = fopen($filename, "w") or
die("Eroare la deschidere");
fwrite($handle, $text);
fclose($handle);
print "Success, am scris $text in fisierul $filename";
?>

fwrite($handle,"text");
fwrite($handle,"1234");
fwrite($handle,"a,b,c\nAm invatat php");

bool feof ( resource handle)


Returneza TRUE pointerul este pozitionat in fisier la EOF(sfarsit
de fisier) sau daca apare o eroare; altfel returneaza FALSE

string fgets ( resource handle [, int length])


Returneaza un sir de caractere de lungime maxima length - 1
bytes
cititi din fisierul referit de handle. Citirea se termina cand au fost
cititi length - 1 bytes ,
la intalnirea unui sfarsit de linie (care este inclus in valoarea
returnata), sau la EOF.
Daca nu este specificata lungimea, lungimea default este de 1k,
sau 1024 bytes.

Exemple:

<?
//afiseaza prima linie dintr-un fisier
$nume_fisier="exemplu.txt";
$handle=fopen($nume_fisier,"r") or
die("Eroare la deschidere");
$linie=fgets($handle,4096);
fclose($handle);
echo $linie;
?>

int fputs ( resource handle, string str [, int length])


fputs() este un alias pentru fwrite(), si este identic din toate
punctele de vedere
Exemple:

<?php
//scrie o linie noua la sfarsitul fisierului ex2.txt
$filename = 'ex2.txt';
$text = "O linie noua \n";
$handle = fopen($filename, "a") or
die("Eroare la deschidere");
fputs($handle, $text);
fclose($handle);
print "Success, am scris $text in fisierul $filename";
?>

string fgetc ( resource handle)

Returneaza un string care contine un singur caracter citit din


fisierul
referit de handle. Returneaza FALSE cand intalneste sfarsitul de
fisier (EOF).

Exemple:

<?php
$nume_fisier="fisier.txt";
$handle=fopen($nume_fisier,"r") or
die("Eroare la deschidere");
$n=0;
while(!feof($handle))
{
$c=fgetc($handle);
echo $c;
}
fclose($handle);
?>

int fprintf ( resource handle, string format [, mixed args])

Scrie un string formatat conform string-ului de formatare in


fisierul referit de handle
Stringul de formatare este compus din una sau mai multe
directive:
caractere normale (fara de %) care sunt copiate direct la rezultat ,
si specificatii de conversie, care descriu modul de conversie a
celorlalti parametri..
Un specificator de conversie poate contine in principal::

% - un caracter procent.
b - argumentul este tratat ca un integer, si prezentat ca un numar
binar.
c - argumentul este tratat ca un integer, si prezentat ca, caracterul
cu acel cod ASCII.
d - argumentul este tratat ca un integer, si prezentat ca un numar
zecimal cu semn.
u - argumentul este tratat ca un integer, si prezentat ca un numar
zecimal fara semn.
f - argumentul este tratat ca un numar real, si prezentat ca un
numar real.
o - argumentul este tratat ca un integer, si prezentat ca un numar
in baza 8.
s - targumentul este tratat ca un sir de caractere, si prezentat ca un
sir de caractere.
x - argumentul este tratat ca un integer, si prezentat ca un numar
in baza 16 (cu litere mici).
X -argumentul este tratat ca un integer, si prezentat ca un numar in
baza 16 (cu litere mari).

Exemple:

$a=65;
$b="un text";
$y="f";
$z=12.33;
fprinf($handle,"%d",$a); //Imi scrie in fisierul referit de $handle
numarul intreg 65;
fprinf($handle,"%b",$a); //Imi scrie in fisierul referit de $handle
numarul 65 in baza 2 adica1000001
fprinf($handle,"%x",$a); //Imi scrie in fisierul referit de $handle
numarul 65 in baza 16 adica 41
fprinf($handle,"%c",$a); //Imi scrie in fisierul referit de $handle
caracterul care are codul ascii 65 adica A
fprinf($handle,"%o",$a); //Imi scrie in fisierul referit de $handle
numarul 65 in baza 8 adica 101
fprinf($handle,"%f",$z); //Imi scrie in fisierul referit de $handle
numarul real 12.330000
fprinf($handle,"%.2f",$z); //Imi scrie in fisierul referit de $handle
numarul real 12.33 doar cu doua zecimale dupa virgula.
fprinf($handle,"%s",$z); //Imi scrie in fisierul referit de $handle
textul 12.33.
fprinf($handle,"%s",$b); //Imi scrie in fisierul referit de $handle
textul un text.
fprinf($handle,"variabila a are valoarea %d, variabila b are
valoarea %s",$a,$b);
//Imi scrie in fisierul referit de $handle: variabila a are valoarea
65, variabila b are valoarea un text

mixed fscanf ( resource handle, string format [, string var1])

Functia fscanf() este similara cu sscanf(), doar ca citeste dintr-un


fisier
referit de handle si interpreteaza stringul citit conform stringului
de formatare
specificat .Daca se trimit doar doi parametrii functiei aceasta va
returna rezultatul sub forma unui vector.

Exemple:

<?php
$handle = fopen ("fisier.txt","r") or
die("Eroare la deschidere");
while ($info = fscanf ($handle, "%s\t%s\n"))
{
echo $info[0] . "<br>";
}
fclose($handle);
?>

pentru fisier.txt:

Ion Popescu
George Octavian
Vasile Ionescu

imi va afisa:

Ion
George
Vasile

int fseek ( resource handle, int offset [, int whence])

Modifica pozitiionarea in fisierul referit de handle. Noua


pozitie ,masurata in bytes de la inceputul
fisierului, este obtinut adaugand un numar de bytes la pozitia
specificata de whence, ale carui valori
sunt specificate mai jos:

SEEK_SET - Seteaza pozitia egala cu numarul de bytes


specificati de offset..
SEEK_CUR - Seteaza pozitia egala cu pozitia curenta plus
offset.
SEEK_END - Seteaza pozitia egala cu pozitia sfarsitului de fisier
plus offset ( Pentru a ne muta la o pozitie inainte de sfarsitul de
fisier trebuie ca offset sa aiba o valoare negativa..)
Daca whence nu este specificat, se presupune ca este SEEK_SET.
Daca mutarea s-a realizat cu succes functia returnneaza 0; altfel,
returneaza -1. .

Exemple:

<?php
$handle = fopen ("exemplu.txt", "r");
fseek($handle,2);
fscanf($handle,"%c",$char); echo $char;
?>

Daca fisierul exemplu.txt contine:

abcdefsds
sdadad

exemplul va afisa:

Alte exemple:

Ex1:

<?php
//suma numerelor intregi dintr-un fisier, numerele fiind scrise cate
unul pe o linie
$nume_fisier="ex1.txt";
$handle = fopen ($nume_fisier, "r") or
die("Eroare la deschidere");
$s=0;
while (!feof($handle))
{
$buffer = fgets($handle, 4096);
$s+=(int)$buffer;
}
echo $s;
fclose ($handle);
?>

Ex2:
<?
//afiseaza numarul de aparitii ale unui caracter intr-un fisier
$nume_fisier="ex2.txt";
$l='a';
$handle=fopen($nume_fisier,"r") or
die("Eroare la deschidere");
$n=0;
while(!feof($handle))
{
$c=fgetc($handle);
if($c==$l) $n ++;
}
fclose($handle);
echo "Litera ($l) apare de $n ori in fisierul ($nume_fisier)"
?>

Ex3:

<?
//afiseaza numarul de aparitii al unui cuvant intr-un fisier
$nume_fisier="ex3.txt";
$cuvant='cuvant';
$handle=fopen($nume_fisier,"r") or
die("Eroare la deschidere");
$n=0;
while(!feof($handle))
{
$linie=fgets($handle,4096);
$n += substr_count($linie, $cuvant); ;
}
fclose($handle);
echo "Cuvantul $cuvant apare de $n ori in fisierul $nume_fisier";
?>

Ex4:

<?
//Copiaza continutul primului fisier in cel de-al doilea.
$fisier1 = "origine.txt";
$fisier2 = "destinatie.txt";
$handle1 = fopen($fisier1, "r") or
die("Eroare la deschidere");
$handle2 = fopen($fisier2, "w") or
die("Eroare la deschidere");
while (!feof($handle1))
{
$buffer=fread($handle1,1024);
fwrite($handle2,$buffer,1024);
}
fclose($handle1);
fclose($handle2);
echo "Am scris continutul fisierului $fisier1 in fisierul $fisier2";
?>

9.Utilizarea unei functii


Procesul de executare a unei functii se numeste utilizarea, apelarea sau
invocarea functiei. Pentru a folosi o functie, scrieti numele functiei, urmat de
o pereche de paranteze.
De exemplu, functia rand(), care genereaz un numr intreg aleator, poate fi
apelata astfel:

rand();

Majoritatea functiilor preiau argumente, reprezentand valori, de intrare care


influenteaza operarea si rezultatul functiei. Pentru a specifica argumente,
acestea se insereaza intre paranteze; daca specificati mai mult de un
argument, fiecare argument trebuie separat de vecinul sau prin intermediul
unei virgule. Argumentul unei functii poate fi o valoare literala, o variabila
sau o expresie.
Unele functii PHP au argumente optionale, care pot fi specificate sau omise,
in conformitate cu intentiile dumneavoastra.

Cand se produce o eroare in timpul executiei unei functii, PHP genereaza


mesaje de eroare. Uneori, asemenea mesaje de eroare sunt nedorite. In acest
caz, puteti suprima generarea mesajelor de eroare prin prefixarea numelui
functiei invocate cu ajutorul caracterului @. De exemplu,, pentru a suprima
mesajele de eroare care pot aparea in timpul executiei functiei f ( ), invocati
aceasta functie dupa cum urmeaza:

Y = @f(x);

Definirea unei functii

In afara de a utiliza functiile din biblioteca de functii a limbajului PHP, va


puteti defini si folosi propriile functii. Pentru a defini o functie, respectati
modelul urmator:

function nume_functie(nume_argument)
{
// aici se insereaza corpul functiei
}

In cadrul modelului, nume_functie este numele functiei, iar nume_argument


este numele argumentului functiei, in PHP, numele functiilor nu prezinta
sensibilitate la diferenta intre majuscule si minuscule; ca atare, f () si F()
reprezinta referiri la aceeasi functie. Cuvantul cheie function, numele
functiei si lista cu argumente alcatuiesc antetul functiei. Termenul de corp al
functiei se refera la instructiunile incluse intre parantezele acolade care
urmeaza dupa antetul functiei. Instructiunile din corpul functiei sunt
executate atunci cand functia este apelata.
Daca doriti sa definiti o functie care nu are argumente, puteti omite
nume_argument; daca doriti sa definiti o functie cu mai multe argumente,
puteti include argumente suplimentare dupa nume_argument, fiecare
argument fiind separat de vecinul sau prin intermediul unei virgule.
Parantezele si numele argumentelor incluse intre acestea poarta numele de
lista cu argumente. Ca exemplu, iata o functie care calculeaza aria unui
dreptunghi:

function calculeaza_arie($inaltime,$latime)
{
return$inaltime * $latime;
}

Lista cu argumente a functiei calculeaza_arie include argumentele $latime si


$inaltime. Corpul functiei este alcatuit dintr-o singura instructiune; cu toate
acestea, corpul unei functii poate contine un numar arbitrar de instructiuni.
Daca doriti ca o functie sa returneze o valoare, trebuie sa determinati functia
sa execute o instructiune return care furnizeaza valoarea respectiva.
Instructiunea return determina sistarea executarii functiei; nu este necesar ca
aceasta sa fie ultima instructiune fizica din corpul functiei. Daca definiti o
functie care nu are nici o instructiune return, functia va returna valoarea
speciala NULL.
Apelarea unei functii definite de utilizator

O functie definita de utilizator poate fi apelata in acelasi mod ca o functie


incorporata. De exemplu, iata o instructiune care apeleaza functia
calculeaza_arie:

$arie = calculeaza_arie(2,4);

Functii recursive

Este posibil ca o functie din PHP sa se auto-apeleze. O functie care


procedeaza astfel se numeste functie recursiva. Totusi, daca nu ati studiat
informatica, este recomandabil sa nu scrieti functii recursive. Cu toate
acestea, puteti scrie accidental o asemenea functie, deci este util sa stiti unele
notiuni referitoare la aceasta.
Programul urmator defineste si invoca o functie recursiva simpla:

function recursor()
{
return recursor();
}
$x = recursor();

La invocarea functiei recursor(), aceasta invoca imediat functia recursor(),


care se auto-invoca instantaneu. Astfel, functia recursor() este invocata in
mod repetat, pana cand se produce o eroare cunoscuta sub numele de
depasire in sens pozitiv a stivei, (stack overflow). Daca programul
dumneavoastra se incheie cu o depasire in sens pozitiv a stivei, o posibila
cauza poate consta intr-o recursie incorecta.

<titlu>Definirea argumentelor prestabilite</titlu>


PHP 4 va permite sa definiti functii cu argumente prestabilite. Daca invocati
o functie care are un argument prestabilit, dar nu furnizati nici o valoare
pentru argumentul respectiv, argumentul ia o valoare prestabilita specificata.
Iata un exemplu simplu:

function impozit_vanzari($cantitae , $rata = 0.0725)


{
echo "<BR>cantitate=$cantitate";
echo "<BR>rata=$rata";
return $suma * $rata;
}

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

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

Functia impozit_vanzari preia doua argumente: un argument obligatoriu,


denumit $cantitate, si un argument prestabilit, denumit $rata. Daca apelati
functia si furnizati un singur argument, valoarea argumentului respectiv se
considera ca fiind valoarea argumentului $cantitate, iar valoarea 0.0725 se
foloseste ca valoare a argumentului $rata. Astfel, la prima invocare a
functiei, $rata are valoarea 0.08, specificata drept al doilea argument al
functiei.Cu toate acestea, la a doua invocare a functiei, $rata are valoarea
0.0725 deoarece este specificata valoarea unui singur argument.

<titlu>Utilizarea variabilelor globale</titlu>


Asa cum s-a explicat anterior, variabilele globale sunt declarate in afara
oricarei functii. Variabilele de formular reprezinta un tip important de
variabile globale. Cu toate acestea, puteti crea o variabila globala atribuindu-
i acesteia o valoare, atata timp cat instructiunea de atribuire respectiva nu se
afla in interiorul corpului unei functii.
Totalitatea locurilor unde este accesibila o variabila se numeste domeniu de
existenta al variabilei. In mod prestabilit, variabilele globale nu pot fi
accesibile din interiorul corpului unei functii; cu alte cuvinte, domeniul de
existenta al unei variabile globale, nu include corpurile functiilor. Daca doriti
sa obtineti accesul la o variabila globala in cadrul unei functii, puteti extinde
domeniul de existenta al variabilei prin specificarea numelui variabilei in
interiorul unei instructiuni global. Instructiunea global are urmatoarea forma:

Global variabila1, variabila2, variabila3

Dupa cuvantul cheie global pot urma una sau mai multe variabile; fiecare
variabila este separata de vecina sa prin intermediul unei virgule. Iata un
exemplu care prezinta modul de functionare a instructiunii global:

function nu_este_global()
{
echo "<BR>nuglobal: x=$x";
}
function este_global()
{
global $x;
echo "<BR>global: x=$x";
}
$x = 1;
nu_este_global();
este_global;

Daca rulati acest script, veti primi urmatoarele rezultate:

nuglobal: x =
global: x = 1

Retineti ca variabila $x primeste numele unei valori in afara corpului


oricareia dintre functii; cu alte cuvinte, $x este o variabila globala, in
consecinta, variabila $x nu se afla in cadrul domeniului de existenta al
functiei nu_este_global() si, in consecinta, instructiunea echo din cadrul
functiei nu_este_global() nu afiseaza nici o valoare. Cu toate acestea, functia
este_global() contine o instructiune global care extinde domeniul de
existenta al variabilei $x; ca atare, instructiunea echo din cadrul functiei
este_global() afiseaza valoarea variabilei $x.

Utilizarea variabilelor locale si a variabilelor statice


Domeniul de existenta, care descrie unde este disponibila o anumita
variabila, reprezinta o importanta caracteristica a variabilelor. O alta
caracteristica importanta este durata de viata, care descrie cand este
disponibila o anumita variabila.
Variabilele globale sunt create atunci cand li se atribuie o valoare si exista pe
durata unui program. Spre deosebire de acestea, variabilele locale sunt create
la apelarea functiei asociate si sunt distruse la incheierea apelului la functia
respectiva. In consecinta, variabilele locale sunt disponibile numai pe durata
executiei functiei asociate.
Argumentele functiilor constituie un tip important de variabila locala. Cu
toate acestea, puteti crea o variabila locala prin simpla atribuire a unei valori
unei variabile din interiorul unei functii. Pentru a ilustra deosebirea dintre
variabilele locale si cele globale, iata un script care defineste o variabila
locala denumita $x si o variabila globala cu acelasi nume:

function are_local()
{
$x = 2;
echo "<BR>In corpul functiei: x = $x";
}
$x = 1
echo "<BR>In corpul scriptutlui: x = $x";
are_local();
echo "<BR>In corpul scriptului: x = $x";

In cazul in care rulati acest script, veti primi urmatoarele rezultate:

In corpul scriptului: x = 1
In corpul functiei: x = 2
In corpul scriptului: x = 1

Remarcati diferenta dintre cele doua variabile, chiar daca numele variabilelor
este acelasi. Domeniul de existenta al variabilei globale $x nu se extinde in
interiorul corpului functiei are_local(), iar domeniul de existenta al variabilei
locale $x nu se extinde dincolo de corpul functiei respective. Cu alte cuvinte,
domeniile de existenta ale celor doua variabile sunt complet distincte si, ca
atare, PHP nu poate confunda valorile variabilelor respective.

Utilizarea fisierelor incluse

Functiile PHP va permit sa obtineri accesul la programe PHP scrise anterior,


create de dumneavoastra sau de catre un alt programator in limbajul PHP. Un
alt mecanism care va permite sa obtineri accesul la programele scrise
anterior il constituie instructiunea require, care are urmatoarea forma:

require(nume_fisier);

Argumentul nume_fisier are forma unui sir, deci o instructiune require


caracteristica poate avea urmatorul aspect:

require("fisierul.inc");

Cand este incarcat un script PHP care contine o instructiune require,


continutul fisierului specificat - cunoscut sub numele de fisier de includere -
este inserat in script,
inlocuind instructiunea require.

De exemplu, sa presupunem ca scrieti o aplicatie PHP care este alcatuita din


mai multe scripturi, iar fiecare script afiseaza o pagina HTML care contine
informatii standard in partea de sus a paginii. Puteti crea un fisier script
special, denumit antet.inc, care contine urmatoarele linii de program:

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

Prin insertia instructiunii

require("antet.inc");

la inceputul fiecarui script, determinati programul PHP sa includa continutul


acelui fisier ca si cum continutul respectiv ar face parte din acel script.

10.Utilizarea variabilelor cookie


Scopuri

nvai care este modul de funcionare a variabilelor cookie

nvai s creai, s obinei accesul la variabilele cookie i s le tergei

nvai s stocai mai multe valori ntr-o variabil cookie

nvai s specificai opiunile dintr-o variabil cookie

Acest modul v prezint noiunile introductive referitoare la variabilele de


date cookie, o caracteristic HTTP care v permite s stocai date n sistemul
unui utilizator. Variabilele cookie sunt utile pentru stocarea preferinelor
utilizatorilor i a altor informaii care trebuie reinute atunci cnd utilizatorul
trece la o nou pagin Web.

Accesul la variabilele cookie i crearea acestora

Valorile majoritii variabilelor dispar atunci cnd scriptul PHP care le


conine i ncheie execuia. Spre deosebire de acestea, valorile variabilelor
cookie se pot pstra un timp indefinit. Pentru ca valorile lor s se poat
pstra, browserul utilizatorului stocheaz variabilele cookie n unitatea de
hard-disc local a utilizatorului.

Variabilele cookie sunt utile dintr-o mulime de puncte de vedere. De


exemplu, multe situri Web folosesc variabile cookie pentru a stoca identitatea
utilizatorului i preferinele de vizualizare ale acestuia. Cnd utilizatorul
revine la situl Web, variabilele cookie permit browserului s recunoasc
utilizatorul i s restaureze opiunile sitului selectate de ctre utilizator.

Din pcate, variabilele cookie nu constituie soluia perfect pentru un mediu


de stocare pe termen lung i prezint o serie de dezavantaje. De exemplu:

Un utilizator poate dezactiva variabilele cookie prin stabilirea unei opiuni


a browserului

n anumite situaii, variabilele cookie pot fi vizualizate de ali utilizatori


dect utilizatorul ale crui date le stocheaz

Un site poate stoca numai 20 de variabile cookie i numai 4KB de


informaii n unitatea de hard-disc local a utilizatorului

Numeroase versiuni ale browserelor frecvent folosite au erori care le


mpiedic s foloseasc variabilele cookie n mod adecvat

n ciuda acestor dezavantaje, variabilele cookie rmn cea mai popular


tehnic pentru obinerea unui mediu de stocare pe termen lung. Deci, este
important s nelegei care este modul de funcionare i de utilizare a
acestora.

Accesul la o variabil cookie

Poate c trstura cea mai caracteristic a variabilelor cookie o constituie


comoditatea. Dac ai creat o variabil cookie, valoarea acesteia este automat
pus la dispoziie ca variabil PHP avnd acelai nume cu acela al variabilei
cookie. De exemplu, s presupunem c ai creat o variabil cookie denumit
fruct i c i atribuii valoarea banana. Aceast pereche nume-valoare este
apoi pus la dispoziia fiecrui script PHP asociat sitului dumneavoastr de
Web. Deci putei afia valoare variabilei cookie folosind urmtoarea
instruciune:

Echo Valoarea variabilei cookie este $fruct.;

Aceast instruciune are ca efect afiarea urmtorului rezultat:


Valoarea variabilei cookie este banana.

Variabila PHP de tip tablou asociativ HTTP_COOKIE_VARS conine


numele i valoarea fiecrei variabile cookie curent. Dac dorii s
vizualizai fiecare variabil cookie disponibil i valoarea acesteia, putei
invoca funcia phpinfo(), care afieaz valoarea tabloului
HTTP_COOKIE_VARS. Dac dorii s obinei acces la tablou prin metode
programatice, putei folosi un program ca urmtorul:

Foreach($HTTP_COOKIE_VARS as $nume => $valoare)

Echo <BR>$nume => $valoare;

Crearea unei variabile cookie

Crearea unei variabile cookie este aproape la fel de simpl ca i obinerea


accesului la aceasta. Pentru a crea o variabil cookie, invocai funcia
setcookie(), care are urmtoarea form:

setcookie(nume, valoare, expirare)

Argumentul nume specific numele variabilei cookie, iar argumentul valoare


specific valoarea variabilei. Argumentul expirare indic momentul expirrii
variabilei cookie; dup ora specificat, variabila cookie nu mai este
accesibil.

n general, este convenabil s se specifice momentul expirrii folosind


funcia time(), care returneaz intervalul de timp (exprimat n secunde) scurs
de la 1 ianuarie 1970. Putei aduga o valoare de tip decalaj (offset), care
specific intervalul de timp pe durata cruia variabila cookie trebuie s fie
accesibil. De exemplu, s lum n considerare urmtoarea instruciune:
setcookie(fruct, banana, time()+3600);

Aceast instruciune creeaz o variabil cookie denumit fruct, care are


valoarea banana. Variabila cookie va fi disponibil timp de o or (3600
secunde) de la crearea sa.

Dac preferai, putei specifica momentul expirrii folosind funcia mktime


(). Aceast funcie are urmtoarea form:

mktime(ore,minute,secunde,luna,zi,an)

De exemplu, urmtoarea instruciune creeaz o variabil cookie care expir


la o secund dup miezul nopii primei zile a anului 2005:

Setcookie(fruct, banana, mktime(0, 0, 1, 1, 1, 2005));

Valorile variabilelor cookie sunt trimise de ctre browser ca parte a antetelor


HTTP. Ca atare, valorile variabilelor cookie trebuie s fie stabilite anterior
expedierii oricror altor valori ctre browser. Trimiterea fie i a unui singur
spaiu v poate mpiedica s configurai valoarea unei variabile cookie.
Pentru a evita problemele, asigurai-v c un script PHP care stabilete o
valoare a unei variabile cookie este plasat n partea superioar a fiierului,
fr caractere de tip spaiu alb care s-l precead. De asemenea, stabilii
valoarea variabilei cookie nainte de a executa o instruciune echo sau o alt
instruciune PHP care trimite browserului date de ieire.

ntrebare: Ce este un antet HTTP?

Rspuns: nainte de a trimite date HTML unui browser, un server Web


trimite, n general, unul sau mai multe antete HTTP; aceste antete sunt
cunoscute sub numele de antete de rspuns al serverului. Similar, nainte de a
trimite informaii unui server Web, un browser Web trimite, n general, unul
sau mai multe antete HTTP; aceste antete sunt cunoscute sub numele de
antete de cerere. Antetele de rspuns al serverului frecvent folosite descriu
configuraia serverului i furnizeaz informaii referitoare la adresa URL
solicitat de client. Antetele de cerere utilizate de obicei descriu configuraia
clientului i formatele de date acceptabile de ctre client.

n afar de antetele de rspuns al serverului i de antetele de cerere,


protocolul HTTP folosete antete generale i antete de entitate. Antetele
generale sunt folosite att de ctre clieni, ct i de ctre servere, pentru a
specifica informaii precum data curent i opiunile de conexiune. Antetele
de entitate descriu formatul datelor schimbate de un client i un server.

tergerea unei variabile cookie

Deoarece o variabil cookie are o dat de expirare, aceasta va fi tears


automat la un oarecare interval de timp dup crearea sa. Totui, putei terge
o variabil cookie imediat. Pentru aceasta, fixai momentul expirrii
variabilei cookie la un moment de timp din trecut. De exemplu, pentru a
terge o variabil cookie denumit fruct, putei folosi urmtoarea instruciune:

Setcookie(fruct, , time()-3600);

Aceast instruciune stabilete timpul de expirare cu o or (3600 de secunde)


n urm. Remarcai c valoarea variabilei cookie este exprimat sub forma
unui ir vid; din moment ce variabila cookie nu va mai fi disponibil,
valoarea sa nu mai are importan.

Tehnici avansate de utilizare a variabilelor cookie

Aceast seciune prezint unele tehnici mai avansate pentru lucrul cu


variabile cookie. Prima sub-seciune explic modul de stocare a mai mult de
20 de valori ntr-o singur variabil cookie. Cea de-a doua sub-seciune
explic modul de utilizare a mai multor argumente suplimentare ale funciei
setcookie ().

Stocarea mai multor valori ntr-o variabil cookie


Deoarece un sit Web poate stoca numai 20 de variabile cookie n sistemul
unui utilizator, capacitatea de a stoca mai multe valori ntr-o singur variabil
cookie este util, n conformitate cu manualul PHP pe suport electronic,
putei realiza acest lucru prin specificarea unui tablou ca nume al variabilei
cookie. De exemplu, putei folosi un program ca acesta:

//Un exemplu eronat de variabila cookie cu mai multe valori

for ($i = 0; $i < 30; $i++)

setcookie(cookies[$i], $i);

(isset($cookies))

foreach ($cookies as $i => $cookie)

echo <BR>$i => $cookie;

Din pcate, acest procedeu nu funcioneaz. Contrar informaiilor din


manualul PHP, fiecare element al tabloului este stocat ntr-o variabil cookie
separat. Astfel, prin utilizarea acestui procedeu nu putei stoca mai mult de
20 de valori.

Pe de alt parte, stocarea mai multor valori ntr-o singur variabil cookie
este posibil. Pentru aceasta, inserai valorile ntr-un tablou i folosii funcia
serialize() pentru a mpacheta" elementele tabloului ntr-un ir; ulterior,
putei recupera valoarea tabloului folosind funcia unserialize(). Iat un
exemplu care prezint modul de creare a unei variabile cookie care conine
mai multe valori, precum i modul de acces la aceasta:
// Se creeaza un tablou

for ($i = 0; $i < 30; $i++)

$tablou[$i]=$i;

// Se impacheteaza intregul tablou intr-un sir

$s = serialize($tablou);

// Se creeaza o variabila cookie si se stabileste valoarea sa

setcookie(cookies,$s);

if(isset($cookies))

//Se despacheteaza valoarea variabilei cookie

$tablou = unserialize(stripslashes($cookies));

// Demonstreaza ca totul este in ordine,

// prin afisarea elementelor tabloului

foreach ($tablou as $i => $cookie)

echo <BR>$i => $cookie;

}
Funcia stripslashes() este folosit pentru eliminarea secvenelor escape
adugate la ir atunci cnd valoarea variabilei cookie este returnat de PHP.

Dei acest procedeu reuete s ocoleasc limita celor 20 de variabile cookie,


nu poate depi limita celor 4KB de date stocate ntr-o variabil cookie
pentru fiecare sit Web n parte. Dac dorii s stocai mai mult de 4KB de
date, trebuie s stocai datele ntr-o baz de date pe parte de server sau ntr-
un alt loc dect o variabil cookie.

Specificarea accesului la o variabil cookie i alte opiuni

Funcia setcookie() poate prelua maximum ase argumente, inclusiv trei


argumente despre care nu am discutat nc. Iat formatul complet al funciei
setcookie():

setcookie(nume, valoare, expirare, cale, domeniu, sigur)

Argumentele nume, valoare i expirare au fost descrise n seciunea


precedent a acestui modul.

Argumentul cale v permite s specificai calea URL asociat variabilei


cookie. n mod prestabilit, variabila cookie este disponibil pentru scripturile
din catalogul care conine scriptul n care a fost configurat variabila
respectiv, precum i pentrul scripturile din sub-cataloagele aferente
catalogului respectiv. n particular, scripturilor din cataloagele printe ale
catalogului care conine scriptul nu li se permite accesul prestabilit la
variabila cookie.

Pentru a pune variabila cookie la dispoziia scripturilor dintr-un anumit


catalog din sub-cataloagele sale, specificai o valoare a argumentului cale.
De exemplu, pentru a pune variabila cookie la dispoziia ntregului arbore de
cataloage, specificai " /" ca valoare a argumentului cale; pentru a face
variabila cookie disponibil n catalogul /-test i n sub-cataloagele sale,
specificai "/-test/" ca valoare a argumentului cale.

11.Aplicatie de logare in PHP


Lectia / Tema 11 - Aplicatie de logare in PHP

Aplicatie de logare in php

Pentru acest curs nu am noutati sa va spun asa ca am sa trec direct la tema.


Veti putea sa rezolvati tema folosindu-va de cunostintele acumulate pana
acum.

Initial aveam de gand sa continui aplicatia (tema) de la cursul 4. Dar cum nu


prea v-ati ingramadit la predarea temelor, o sa facem o alta aplicatie.

In mare aplicatia are urmatorul algoritm : un user se inscrie la un anumit


serviciu (email, etc). In acest moment i se creaza un cont invalid pe care
administratorul il poate valida sau nu. Dupa ce contul a fost validat userul se
poate loga; in contul sau el poate face diferite operatii.

Cam asta a fost pe scurt tema voastra.Acum sa trecem s-o dezbatem mai pe
larg:

Pas 1 Creare cont si logare

Pe pagina principala (index.php) exista 2 controale input (unul text si unul


password) si un buton submit.Cu ajutorul acestora se va face logarea.

In cazul in care username/parola sunt incorecte se va afisa un


mesaj de eroare

In cazul in care contul nu este valid se va afisa un mesaj in


acest sens

Daca username/parola sunt corecte se testeaza tipul userului


(daca este admin il redirectam in pagina admin.php ; daca este
user obisnuit il redirectam in pagina user.php )

Dupa logare setati un cookie/sesiune in care tineti minte username/parola si


alte informatii de care aveti nevoie (drepturile pe care le are userul
respectiv : admin sau user obisnuit)

Tot pe pagina principala se gaseste un link spre pagina de inscriere


(inscriere.php)

inscriere.php

Campuri :

Username (*)

Parola (*)

Email (*)
Nume (*)

Prenume (*)

Sex (*)

Data nasterii (*)

Site personal

Domiciliul (textarea oras, judet, strada, cp)

Telefon

Domenii de interes

Verificarea campurilor obligatorii v-o las la alegerea voastra (indicat este s-o
faceti prin ambele mijloace : din Java Script si din PHP)

daca inscrierea a reusit se afiseaza un mesaj in care se


specifica aceasta si i se spune ca administratorul trebuie sa
valideze contul

daca inscrierea a esuat se spune si motivul (username-ul mai


exista in baza de date, etc)

Pas 2 Operatii dupa logare

Dupa logare, in ambele cazuri (si pentru admin si pentru user obisnuit),
paginile unde vor fi redirectati vor contine doar o lista de meniuri

User obisnuit (user.php)

Meniuri :

Modifica profil userul isi poate modifica profilul cu


exceptia username-ului

Obs : Daca isi modifica parola aveti doua optiuni :

o sa-l dati afara din cont si sa-i cereti sa se


logheze folosind noua parola

o sa modificati valoarea parolei in


cookie/sesiune

Mesaje (aici userul isi poate citi mesajele de la administrator)

Mesajele vor fi afisate in ordinea sosirii

Userul are optiunea de a sterge un mesaj.Insa mesajul nu se va sterge


fizic din baza de date ci doar vor fi marcate intr-un anumit fel si el nu
le mai vede. Doar adminul este cel care poate sterge mesajele

Userul are posibilitatea de a trimite si el un mesaj administratorului

Un meniu la alegere

Logout

Userul paraseste contul (sa nu uitati sa desetati cookie/sesiune)

Administrator (admin.php)

Meniuri :

Vizualizare toti userii

o Userii se afiseaza cate 10 pe pagina (pentru a


vizualiza pagina anterioara se utilizeaza
next/prev)

o Tabelul de afisare va contine coloanele :

Nume

Prenume

Email

Username

Parola

Un link spre informatii


detaliate (cand administratoril
va da click pe el, se va deschide
un pop-up in care se vor afisa
toate informatiile despre userul
respectiv)

Buton pentru stergerea unui


user

Vizualizeaza useri noi (useri neactivati)

ca si la meniul anterior userii


se afiseaza cate 10 pe pagina iar
tabelul de afisare este acelasi
numai ca se vor mai adauga 3
butoane : Valideaza(pentru
validarea unui cont),
Sterge(pentru stergerea unui
cont) si Modifica (modifica
profilul unui user)

Trimite mesaj

Administratorul poate trimite mesaje catre orice user (are un select


box in care specifica spre ce user va pleca mesajul). Prima optiune
din select box este pentru toti userii (mesajul va merge catre toti
userii)

Citeste mesaje

In aceasta sectiune administratorul va citi mesajele primite de la useri

Sterge mesaje

Administratorul poate sterge mesajele pe care userii le-au "sters" (de


fapt nu le-au sters doar le-am marcat ca sterse)

Logout

Cam atat cu tema.Va urez succes!

S-ar putea să vă placă și