Functii PHP

 

-9- echo

nu este o functie ci un element (constructie) al limbajului php care afiseaza ce i se da ca argument

 

Se pot folosi ghilimele

<?php

echo "hello";

?>

 

sau apostrofuri

 

<?php

echo 'hello';

?>

 

Se pot insera si elemente HTML

 

echo "<strong>hello</strong>";

 

 

-10-

 

print

 

Se foloseste ca si echo doar ca nu poate accepta mai multe argumente date prin virgula.

<?php

print "test";

?>

 

-11-

Inserarea de cod HTML in php

 

Pana acum am afisat cu echo texte normale. Dar daca dorim sa afisam un element html?

 

Sa cream un element input

 

<input type="text" name="name">

 

Sa-l afisam din Php - sa presupunem ca lucram intr-un program mai complex si avem nevoie sa facem acest lucru

 

<?php

echo "<input type="text" name="name"> " ;

?>

 

Cand este rulat scriptul apare o eroare cum ca trebuie inserate punct si virgula ; pe linia 2 sau unde se afla echo.

 

Imediat dupa ce am scris echo am pus ghilimele " a urmat textul  <inut type= si apoi urmeaza din nou ghilimele " si atat considera PHP ca este instructiunea echo de aici si eroarea - el vede ca mai urmeaza ceva dar el nu considera ca face parte din instructiune.

 

A aparut confuzie prin folosirea ghilimelelor de mai multe ori pentru ca PHP nu mai stie cand se termina textul.

 

Pentru evitarea unor astfel de situatii, de folosire repetata a ghilimelelor, avem urmatoarele metode:

 

- V1 in loc de ghilimele in interiorul textului se folosesc apostrofuri:

 

echo "<input type='text' name='name'> "

 

In realitate nu se foloseste metoda asta prea des pentru ca in majoritatea cazurilor ne dorim ca in interiorul textului sa pastram existenta ghilimelelor;

 

Si atunci folosim metoda inversa: in loc de ghilimele la inceput si sfarsit de text folosim apostrofuri iar in interior lasam ghilimele

 

- V2 in loc de ghilimele care sa incadreze textul folosim apostrofuri:

 

echo '<input type="text" name="name"> '

 

In plus, prin  folosire apostrofurilor afisarea textului e mai rapida.

 

De fapt folosirea ghilimelelor pentru afisarea textelor este utila pentru ca PHP-ul cauta in interiorul textului existenta variabilelor. In cazul apostrofurilor el nu mai cauta si afiseaza ce gaseste de aceea e mai rapid.

 

Insa atunci cand dorim sa afisam valorile variabilelor folosim ghilimele

 

<?php

$varsta=15;

echo " Dan are $varsta ani. ";

?>

 

E putin mai lent pentru ca trebuie sa analizeze textul pentru a gasi eventualele variabile.

 

O a treia varianta este folosirea caracterelor escape, adica plasarea unui caracter backslash in fata unei ghilimele face ca ghilimelele sa fie considerate un caracter oarecare:

 

- V3 folosirea caracterelor escape

 

<?php

echo "<input type=\"text\" name=\"name\">"

?>

 

De aici vine si denumirea de escape ale caracterelor escape, asa cum e backslash-ul, el "scapa" de la analiza acele caractere care creaza probleme si care cu ajutorul lui vor fi tratate ca simplu text.

Insa e destul de clar ca e mai multa munca pentru a pune in fata fiecarei ghilimele cate un backslash.

 

Ca o concluzie, daca nu avem de a face cu variabile, varianta V2 e cea mai eficienta:

 

echo ' <input type="text" name="name" value="introdu numele tau"> ';

 

- 12 - Inserarea de php in HTML

 

Daca pana acum am inserat HTML in interiorul PHP-ului acum vom proceda invers:

- vom insera in interiorul unui element html o valoare prin intermediul php-ului, de fapt prin intermediul instructiunii echo.

 

Daca in exemplul anterior in loc de "introdu numele tau" am dori sa inseram o valoare care sa se schimbe din php vom proceda astfel:

<?php

$text="Salut, introdu numele";

?>

 

<input type="text" name="name"

value= "<?php echo $text ;  ?> " >

 

unde variabila $text poate fi schimbata oricand sau poate lua valori diferite in timpul executarii paginii.

- 13 - Comentariile

Comentariil sunt blocuri de text care nu sunt luate in consideratie de catre interpretorul PHP.

Comentariil pot fi utile la transmiterea de informatii celor care citesc codul si care prin intermediul explicatiilor din comentariil pot intelege mai multe despre cod. Deasemeni pot fi transmise informatii despre copyright sau alte lucruri.

O alta situatie cand sunt utile comentariile este atunci cand se incearca depistarea erorilor. Cel mai usor e, in loc de a sterge ceea ce suspectam ca e gresit, sa punem intre comentarii si apoi sa verificam de erori codul ramas.

 

Comentarea unei linii

<?php

//se afiseaza Salutari in browser prin intermediul

// instructiunii echo

echo "Comentarea unei linii";

?>

 

In acest caz am comentat doua linii punand in fata fiecareia cate o pereche de caractere slash

 

Daca dorim sa comentam un intreg bloc de text vom pun in fata caracterele /* iar la sfarsit */

 

<?php

 

/*

se afiseaza Salutari in browser prin intermediul

 instructiunii echo

 

Acest tip de comentarii e mai usor de realizat cand sunt mai multe linii de cod

*/

 

echo "Comentarea unui bloc" ;

?>

 

- 14 - 15 - Afisarea sau ascunderea erorilor (Suplimentar)

 

Atunci cand vizualizam o pagina in browser preferam sa nu vedem erori chiar daca pagina nu este afisata complet. De aceea in mod implicit sunt ascunse erorile de catre server-ul unde este stocata pagina.

 Dar pe noi ne intereseaza ca in faza de dezvoltare a aplicatiilor sa vizualizam erorile pentru a le putea trata corespunzator.

 

Pentru a avea acces la modul in care PHP-ul afiseaza erorile putem deschide fisierul php.ini din folderul unde este instalat PHP-ul. In interiorul fisierului cautam textul error_reporting. Vom gasi explicatii pentru fiecare setare in parte.

De exemplu o setare utila pentru dezvoltatori este

 

error_reporting = E_ALL

pentru afisarea tuturor erorilor

sau

error_reporting= E_ALL | E_STRICT

pentru afisarea tuturor erorilor de sintaxa dar si acelor erori care tin mai mult de modul de programare astfel incat programul sa ruleze corect.

 

Daca nu dorim afisarea anumitor avertismente dar dorim totusi afisarea erorilor

error_reporting = E_ALL & ~E_NOTICE

care este si valoarea implicita folosita de PHP chiar de la instalare

 

Daca in schimb error_reporting este setat pe 0

error_reporting = 0

atunci nu vom avea afisata nici o eroare insa vom vedea doar o pagina alba in cazul in care sunt erori

Asta e mai bine decat ca vizitatorii site-ului nostru sa vada eventualele erori.

 

Pana acum am modificat valoare error_reporting din interiorul lui php.ini.

Sa incercam modificarea acestuia dinamic, din interiorul PHP-ului cu ajutorul functiei

error_reporting()

 

<?php

error_reporting(0); // nu afiseaza erorile

error_reporting(E_ALL);//Afiseaza toate erorile

error_reporting(E_ALL ^E_NOTICE);//afiseaza toate erorile mai putin warning-urile

?>

 

In mod similar se poate folosi functia ini_set

ini_set('error_reporting', E_ALL);

e similar cu error_reporting(E_ALL);

 

- 16 - Variabile

 

In PHP variabilele sunt de forma $nume_variabila

 

O variabila e o locatie din memorie unde sunt stocate informatii. In plus acesta locatie poate fi modificata si accesata folosind un nume care este asociat cu aceasta.

In cazul PHP-ului tipul de informatie pe care il poate avea variabila nu e neaparat stabilit de la inceput.

 

Daca o variabila $x primeste valoarea 10

$x=10;

atunci PHP-ul va trata variabila $x ca fiind de tip numar intreg

 

Dar daca ar primi o valoare de tip text de exemplu valoarea "acesta este un text"

$x="acesta este un text";

atunci $x va fi considerat o variabila de tip text.

 

Astfel putem avea situatia

$x=10;

echo 'variabila $x area valoarea ' , $x, "<br>";

$x = "acesta este un text";

echo 'variabila $x are valoarea ', $x;

 

si nu va fi afisata nici o eroare pentru ca variabilele pot avea orice tip pe parcursul rularii programului.

 

Mai putem avea variabile zecimale (float)

$x = 10.5;

sau variabile de tip boolean care vor stoca valori de adevarat sau false

 

$x = true; // sau false

utile pentru lucrul cu expresii logice

 

Deci, ca o concluzie, in PHP e usor de lucrat cu variabile pentru ca nu trebuie sa fixam noi tipul variabilelor ci doar trebuie sa punem semnul $ in fata numelui si lasam PHP sa se ocupe de modul com vor fi tratate.

 

- 17 - Concatenarea sirurilor de caractere

Dorim sa afisam o data pe care o cream prin concatenare.

 

Dorim sa afisam sub forma

Astazi este Joi, 31 Martie 2011

Mai intai realizam din variabile componentele datei:

 

<?php

$ziua = "Joi";

$data = 31;

$luna = "Martie";

$an = 2011;

?>

 

Si pentru ca afisarea folosind ghilimele permite evaluarea variabilelor vom folosi mai intai metoda cu ghilimele

 

<?php

echo "Astazi este $ziua, $data $luna $an";

?>

Afiseaza

Astazi este Joi, 31 Martie 2011

 

Daca am fi folosit apostrofuri:

echo 'Astazi este $ziua, $data $luna $an';

 

atunci ar fi afisat litera cu litera ce este in interiorul apostrofurilor si ar fi afisat:

 

Astazi este $ziua, $data $luna $an

 

si nu ar fi fost util decat daca am fi dorit sa vedem numele variabilelor

 

Insa exista si metoda folosind concatenarea:

 

echo 'Astazi este ' . $ziua . ', ' . $data . ' ' . $luna . ' ' .  $an;

 

Si rezultatul este afisarea sirului obtinut din concatenarea tuturor elementelor:

sirul 'Astazi este ' este concatenat cu variabilele $ziua, $data, $luna,  $an si alte cateva siruri de forma  '  ' cu rol de despartitor intre cuvinte.

 

Se observa ca desi erau de diferite tipuri, operatorul de concatenare - punct . - le-a transformat intr-un singur text care le contine pe toate.

 

Putem insera si HTML:

echo 'Astazi este <strong>' . $ziua . ', ' . $data . ' ' . $luna . ' ' .  $an . '<strong>' ;

 

Rezultatul este:

Astazi este Joi, 31 Martie 2011

 

- 18 - Instructiunea IF

In viata reala instructiunea IF s-ar traduce astfel:

 

Daca procedez intr-un anumit fel

voi avea un rezultat

altfel

voi avea alt rezultat

 

sau

 

if( este frumos afara)

{

vom merge in excursie

}

else

{

vom sta acasa

}

 

Valoarea expresiei "este frumos afara" poate lua doua valori: true sau false

In PHP valoarea 0 este false iar valoarea 1 este true

 

Deci daca vom rescrie

 

if(1)

{

vom merge in excursie

}

else

{

vom sta acasa

}

 

atunci rezultatul e ca vom merge in excursie de fiecare data pentru ca 1 inseamna ca e intotdeauna true (frumos afara).

 

sau

 

if(1)

{

echo "true";

}

else

{

echo "false";

}

 

se va afisa true

La fel se intampla daca folosim in loc de 1 valoarea true sau false:

 

if(false) //sau 0

{

echo "true";

}

else

{

echo "false";

}

 

se afiseaza false

 

Se observa ca pe fiecare ramura se creaza cate un bloc de cod dat de acolade.

Asta inseamna ca in cazul in care conditia logica evaluata este adevarata se realizeaza toate instructiunile din primul bloc iar in caz ca este falsa se realizeaza instructiunile din blocul de dupa else.

 

Deci forma generala este:

if(expresie logica)

{

bloc de instructiuni pentru

expresie adevarata

}

else

{

bloc de instructiuni pentru

expresie falsa

}

 

Nu intotdeauna ne intereseaza sa executam ceva in cazul in care conditia este falsa, de aceea vom putea folosi forma simplificata

 

if(conditie)

{

bloc de instructiuni pentru

conditie adevarata

}

 

Cum nu prea are sens sa dam valori prestabilite ca 0, 1, true sau false sa vedem cum putem  folosi instructiunea if intr-un mod mai util.

 

Putem folosi comparatii in  expresia logica pe care am denumit-o conditie: comparam pe 1 cu 2

if(1 = = 2)

{

 echo "true";

}

else

{

echo "false";

}

se afiseaza false

 

expresia 1 = = 2 este evaluata ca false pentru ca

= = fiind un operator de comparatie (testeaza egalitatea) returneaza rezultatul compararii celor doua valori 1 si 2, .

 

Daca am renunta la ramura else nu s-ar afisa nimic pentru ca avem intotdeauna la conditie valoarea false si nu se va alege ramura true

 

if( 1 = = 2) //se evaluaeaza false

{

echo "true"; //nu se ajunge aici

}

 

prin urmare atunci cand conditia este falsa si daca in acel caz dorim sa luam o decizie atunci avem nevoie si de ramura else.

 

Sa luam alta conditie in care sa comparam siruri de caractere:

 

$text ="Something";

 

if($text = ="Something")

{

echo "true";

}

else

{

echo "false";

}

 

va afisa true

 

Daca schimbam valoarea lui $text

$text = "Something else";

 

va afisa false

 

- 19 - instructiunea if elseif

 

Sa luam urmatorul script

<?php

 

$number= 10;

if(number= =10)

{

echo 'Equal to ten.';

}

else

{

echo 'Not equal to ten';

}

 

E o instructiune if else obisnuita

Dar daca dorim sa comparam $number si cu o alta valoare, de exemplu 11, tot in aceeasi instructiune if,  atunci adaugam un al doilea if pe care il legam de ramura else:

 

$number=12;

if($number == 10)

{

echo 'Equal to ten';

}

elseif ( $number == 11)

             {

             echo 'Equal to eleven';

             }

             else

             {

             echo 'not equal';

             }

?>

 

Se afiseaza not equal pentru ca variabila $number nu este egala nici cu 10 nici cu 11

 

- 20 - Operatori de atribuire

 

$number = 10;

 

Inseamna ca am atribuit variabilei $number1 valoarea 10

 

Adica nu incercam sa comparam $number cu 10, pentru asta se foloseste operatorul logic dublu egal "= =",  ci sa dam valoarea 10 variabilei $number.

 

Se poate atribui nu doar o valoare ci si rezultatul unei operatii, de exemplu adunare:

$result = $number + 2;

echo $result;

va afisa 12

 

Putem aduna la valoarea unei variabile o alta valoare.

 

$number = $number1 + 2;

echo $number;

va afisa 12

 

asta inseamna ca la valoarea lui lui $number s-a adaugat valoarea 2, noua valoare a lui $number fiind 12

 

Exista si o scurtatura pentru asta si este operatorul "+="

 

adica operatia de mai sus poate fi rescrisa

 

$number += 2;

echo $number;

va afisa 12

 

Putem avea operatori si pentru celelalte operatii

 

scadere:

$number = $number - 2;

sau

$number -= 2;

 

inmultire

$number = $number * 2;

sau

$number *= 2;

 

impartire

$number = $number / 2;

sau

$number /=2;

 

Exista un operatori foarte util, modulo, care returneaza restul impartirii. Este reprezentat de semnul %.

 

Ex:

$rest = $number % 3;

echo $rest;

va afisa 1 pentru ca 1 este restul impartirii lui 10 la 3.

 

La fel se procedeaza si pentru operatorul de concatenare ".="

 

$text = 'hello';

$text .= ' world';

// se putea si $text = $text . ' world';

echo $text;

va afisa hello world;

 

- 21 - operatorii de comparare

 

In cazul instructiunii IF, cel mai adesea, expresia logica in urma careia se va decide pe care ramura va merge programul, este data prin operatorii de comparare

Ex:

<?php

if(true)

{

echo 'inside';

}

 

IF evalueaza expresia "true" care este bineinteles adevarata si alege ramura true si se afiseaza inside

 

In loc de true putem folosi o expresie logica de forma 1= = 1 si efectul e acelasi

 

if( 1 = = 1)

{

echo 'inside';

}

 

?>

 

Aici se observa ca folosim dublu egal "= = "care e diferit de operatorul "=" acesta din urma fiind folosit pentru atribuirea de valori.

expresia 1 = = 1 este evaluata si rezultatul este true

 

Daca in schimb vom folosi expresia 1 = = 2 rezultatul evaluarii ei este fals si instructiunea

 if (1 = = 2)

{

echo 'inside';

}

nu va afisa nimic pentru ca nu se va merge pe ramura true.

 

Alt operator de comparare este not equal "!=" care decide daca o valoare nu este egala cu cea de-a doua

 

In acest caz 1 != 2 este true pentru ca intr-adevar 1 nu este egal cu 2 iar instructiunea

if(1 != 2)

{

echo 'inside';

}

va afisa inside pentru ca expresia 1 != 2 este adevarata

 

Se mai foloseste pentru operatorul not egal si forma "<>"

deci putem avea expresia 1 <> 2 care este tot adevarata

 

Avem doua variabile

 

<?php

$number1 = 10;

$number2 = 9;

?>

 

Sa le comparam

 

<?php

if($number1 > $number2)

{

echo 'Yes.';

}

else

{

echo 'No.';

}

?>

 

Daca $number1 mai mare decat $number2 atunci afiseaza Yes altfel afiseaza No

In acest caz va afisa Yes

 

daca schimbam cu operatorul "<" mai mic

$number1 < $number2 atunci se va afisa  No

 

Pentru verificarea si a egalitatii se poate folosi operatorul >= mai mare sau egal

sau

<= mai mic sau ega.

 

Exemplul anterior poate fi rescris:

 

<?php

$number1 = 10;

$number2 = 10;

 

if($number1 >= $number2)

{

echo 'Yes.';

}

else

{

echo 'No.';

}

?>

 

va afisa Yes pentru ca $number1 este mai mare sau egal cu $number2

 

Ca o concluzie putem enumera operatorii de comparatie:

 

= = verifica egalitatea

!= not equal

<= mai mic sau egal

>= mai mare sau egal

 

Sa luam un exemplu concret.

Sa verificam daca parola introdusa intr-un formular e cea corecta pentru logare:

 

<?php

$password = 'parolaMea';

if($password = = 'parolaMea')

{

echo 'Corect';

}

else

{

echo 'Incorect';

}

 

In acest caz va afisa Corect dar daca $password ar fi un alt cuvant

$password='altaParola';

atunci ar fi afisat Incorect

 

- 22 - Operatorii matematici

 

Adunarea, scaderea, inmultirea si impartirea sunt reprezentate la fel ca la matematica prin +, -, *, /.

In plus, tot intre operatorii aritmetici, exista operatorul modulo reprezentat de simbolul procent "%". Acesta returneaza restul impartirii intre doua numere.

Mai avem operatorul de incrementare "++" si operatorul de decrementare "--"

 

Exemple:

<?php

$sum = 10 + 20;

echo $sum;

// afiseaza 30

 

$sub = 10 - 20;

echo $sub;

// afiseaza -10

 

$mult= 10 * 20;

echo $mult;

//afiseaza 200

 

$div = 10 / 20

echo $div;

//afiseaza 0.5

?>

 

Sa lucram acum cu variabile si sa cream o expresie mai complexa

 

<?php

$number1 = 100;

$number2 = 50;

$number3= 2;

 

$result = ($number1 + $number2) / $number3;

echo $result;

//afiseaza 75

?>

 

Un exemplu pentru modul

 

<?php

 

$number1 = 10;

$number2 = 3;

 

$result = $number1 % $number2;

echo $result;

//se afiseaza 1, restul impartirii lui 10 la 3

?>

 

Operatorul de incrementare ++ este o prescurtare pentru operatia de adunare cu 1.

 

<?php

$number1 = 10;

$number1++;

echo $number1;

 

//afiseaza 11

 

$number1--;

echo $number1;

//afiseaza 10, a scazut 1 din 11 cat devenise $number1

 

?>

 

Incrementarea este folosita mai ales in bucle unde trebuie stiut de cate ori s-a executat bucla pentru a se opri la un moment dat. Asa ca o incrementare de forma $i++ e mai comoda decat $i=$i+1 desi e acelasi lucru.

 

Concluzie:

7 operatori aritmetici

(+ plus,

- minus,

* produs,

/ impartire,

% rest,

++ incrementare,

-- decrementare)

sunt cel mai des folositi in programare

 

- 23 - Operatorii logici

 

Sa presupunem ca avem un numar $number si dorim sa verificam daca se incadreaza intr-un anumit interval.

Intervalul este dat de $lower (cel mai mic) si $upper (cel mai mare)

 

 

<?php

$number=654;

 

$upper = 1000;

$lower = 500;

?>

Sa verificam daca $number se afla in intervalul specificat

 

if($number este mai mare decat $lower si $number e mai mic decat $upper)

{

echo 'Ok, $number se incadreaza in interval';

}

 

expresia logica din interiorul lui if, ($number este mai mare decat $lower si $number e mai mic decat $upper) se poate scrie, in mod firesc

$number > $lower si $number < $upper

 

In plus, acel si dintre cele doua expresii logice se poate inlocui cu operatorul AND sau &&

 

Astfel expresia logica devine

 

($number > $lower && $number < $upper)

 

 

<?php

if($number > $lower && $number < $upper)

{

echo 'Ok, $number se incadreaza in interval';

}

 

?>

 

Se afiseaza Ok pentru ca valoarea lui $number, 654 se incadreaza in intervalul 500, 1000.

Dar daca $number primeste o valoare mai mare, $number = 10500?

 

Nu se afiseaza nimic pentru ca nu se afla in interval.

 

Dar sa afisam ceva, un avertisment de forma: numarul trebuie sa se afle in intervalul 500 - 1000. De aceea vom construi si ramura else.

 

<?php

if($number > $lower && $number < $upper)

{

echo 'Ok, $number se incadreaza in interval';

}

else

{

echo 'Numarul trebuie sa se afle in intervalul '. $lower. ' - ' . $upper;

}

?>

 

Astfel daca numarul se afla in intervalul dorit se afiseaza ok altfel se afiseaza avertismentul din ramura else.

 

 

 

Vom analiza aceasta expresie logica

exp: ($number >$lower && $number < $upper)

 

este formata din doua expresii mai mici:

ex1: $number > $lower

si

ex2: $number < $upper

 

 

Exemplul de pana acum s-a referit la folosirea operatorului logic Si, &&

Acesta impune ca atat partea stanga cat si partea dreapta sa fie adevarate ca rezultatul sa fie adevarat

Daca

ex1 = true

SI

ex2 = true

atunci exp= ex1 && ex2 este true

 

 

Prin urmare operatorul Si este un operator care constrange ca ambii termeni sa fie adevarati.

 

Nu la fel stau lucrurile cu operatorul SAU unde daca un termen e adevarat rezultatul e adevarat.

 

Exemplu: Sa verificam daca un numar $number este egal cu numarul $canbe1 sau cu numarul $canbe2.

 

Daca e egal cu unul dintre ele afisam un mesaj Ok

 

Vom folosi expresia

exp: ($number == $canbe1 || $number == canbe2)

formata din expresiile

ex1: $number == $canbe1

si

ex2: ($number == $canbe2

 

Astfel putem prescurta exp : ex1 || ex2

 

<?php

 

$number = 500;

$canbe1 = 2;

$canbe2 = 4;

 

if($number == $canbe1 || $number == canbe2)

{

echo 'Ok';

}

 

?>

 

Nu se afiseaza nimic pentru ca expresia

exp ($number == $canbe1 || $number == $canbe2) are ambii termeni falsi adica atat

 

ex1  $number == $canbe1

cat si

ex2 $number == $canbe2

 

sunt false, $number nefiind egal nici cu 2 si nici cu 4.

prin urmare

expresia (ex1 || ex2) este falsa

 

Daca $number ia valoarea 2 atunci expresia devine adevarata

 

$number == $canbe1 // este true

 ||

$number == $canbe2 //  este false

 

rezultatul final insa este adevarat pentru ca unul din termeni este adevarat

si ex1 || ex2 este true

 

Se va afisa Ok

 

Daca $number ia valoarea 4 atunci se inverseaza:

ex1 este false dar

ex2 este true

 

iar ex1 || ex2 este true

 

Se va afisa si aici Ok

 

 

Operatorul negare !

 

Putem folosi operatorul !, negare pentru a inversa valoarea de adevar a conditiilor

 

Avem aceleasi variabile ca mai inainte.

 

$number = 500;

$canbe1 = 2;

$canbe2 = 4;

 

Daca ne intereseaza ca expresia anterioara sa fie adevarata atunci o putem nega ca din falsa sa devina adevarata. Negarea lui 0 este 1. Negarea unei expresii falsa este o expresie adevarata.

Pentru a da un rezultat in cazul in care numarul $number nu este egal cu nici unul dintre numerele $canbe1 si $canbe2  atunci putem nega intrega expresie astfel

 

if  ! ($number == $canbe1 || $number == $canbe2)

{

echo "Numarul $number nu este egal cu niciunul dintre numere";

}

 

 

($number == $canbe1 || $number == $canbe2) da rezultat fals, prin negare o facem sa dea rezultat adevarat:

 

!($number == $canbe1 || $number == $canbe2) este adevarata

 

Cum s-ar traduce logic?

 

Negatia se transmite la fiecare termen iar operatorul || devine &&

 

!($number == $canbe1) && !($number == $canbe2)

 

adica $number nu este egal cu $canbe1 si $number nu este egal cu $canbe2

ceea ce este adevarat, fiind negarea expresiei ( ($number este egal cu $canbe1) sau ($number este egal cu $canbe2) ) care era falsa

 

 

Se poate si invers, daca avem o expresie de forma exp: ex1 && ex2, prin negare

!exp : !ex1 || !ex2

 

Concluzie

Operatorii logici sunt:

&& si logic

|| sau logic

! negare logica

 

Negarea unei expresii logice compuse

!(ex1 || ex2)  <=>  !ex1 && !ex2

!(ex1 && ex2)  <=>  !ex1 || !ex2

 

 

-     24 – Egalul triplu

Sa cream doua variabile $num1 si $num2

<?php

$num1= '1';

$num2=1;

 

if($num1==$num2)

{

echo 'Equal.';

}

else

{

echo 'Not equal';

}

?>

 

Se va afisa Equal

Exista totusi o problema de logica a operatiilor. Variabila $num1 este un sir de caractere iar variabila $num2 este un numar intreg. Din punct de vedere al tipului de date sunt diferite iar in marea majoritate a limbajelor de programare astfel de variabile nu ar fi egale. Dar PHP converteste automat sirurile de caractere care reprezinta numere in numerele corespunzatoare astfel incat sunt permise operatii care ar fi posibile doar numerelor.

Astfel '1' == 1 este o expresie adevarata si prin urmare si ($num1 == $num2) este adevarata. Altfel spus operatorul == este unul permisiv care admite ca operanzii sa fie de tipuri diferite dar daca sunt compusi din aceleasi caractere sunt considerati egali.

 

Daca insa dorim sa luam in consideratie si tipul de date al variabilelor atunci vom folosi egalul triplu ===. In acest caz variabilele nu mai sunt egale pentru ca se face distinctie intre tipurile lor.

 

<?php

$num1= '1';

$num2=1;

 

if($num1 === $num2)

{

echo 'Equal.';

}

else

{

echo 'Not equal';

}

?>

 

Se va afisa Not equal

 

Deci sa analizam modul in care se folosesc operatorii =, == si ===

= operatorul de atribuire

== operatorul de comparatie care nu tine cont de tipurile de date

=== operatorul de comparatie care tine cont de tipurile de date.

 

Daca dorim sa comparam doua valori, de exemplu o variabila care contine un numar intreg si o alta valoare obtinuta dintr-un formular atunci nu ne intereseaza daca sunt numere ci sa corespunda ca si caractere, prin urmare dublu egal == va fi suficient.

Sunt si cazuri, de exemplu,  atunci cand avem de a face cu fisiere, si dorim sa fim cat mai exacti din punct de vedere a valorilor inserate in interiorul lor si a tipurilor de date, in acest caz vom folosi egalul triplu ===.

Depinde de cat de rigurosi dorim sa fim din punct de vedere a tipurilor de date, in functie de asta alegem tipul de operator de comparatie - egalitate.

 

- 25 - Bucla while

 

Adesea ne dorim ca anumite actiuni sa fie repetate de mai multe ori. Si atunci spunem ca aceste actiuni fac parte dintr-o bucla repetitiva.

Ce este o bucla?

Sa exemplificam pentru bucla while:

 

<?php

while(conditie)

{

instructiuni...

}

?>

 

Atat timp cat conditie e adevarata se executa ce se afla in interiorul acoladelor de cate ori este necesar pana cand conditie devine false.

Este asemanatoare cu instructiunea if atat doar ca while nu are ramura else insa ramura true se executa pana cand conditie nu mai este adevarata.

Depinde de noi ca expresia logica conditie sa devina falsa la un moment dat, altfel bucla while nu s-ar termina niciodata.

 

De exemplu ar fi o idee proasta sa folosim bucla while cu o conditie care este tot timpul adevarata:

while(1)

{

echo 'Hello<br>';

}

 

In acest caz ar afisa Hello la infinit si pagina web s-ar bloca.

 

Pe de alta parte daca vom pune ca si conditie valoarea 0, fiind automat falsa, nu se va executa nimic.

while(0)

{

echo 'Hello<br>';

}

 

ar fi echivalent cu

if(0)

{

echo 'Hello<br>';

}

si bineinteles nu se executa nimic in ambele cazuri pentru ca nu se porneste niciodata pe ramura true conditia fiind falsa (valoarea 0)

 

Sa cream o conditie care sa fie adevarata doar de un numar finit de ori.

Cream o variabila $contor care sa numere de cate ori se va executa bucla.

 

$contor = 1;

 

Sa presupunem ca dorim sa se execute de 10 ori. Atunci bucla se va termina cand $counter va ajunge la valoarea 10.

 

Adica verificam de fiecare data daca variabila $contor este mica sau egala cu 10

while($contor <=10)

 

Totusi daca nu incrementam variabila $contor, aceasta nu va ajunge niciodata la 10 asa ca avem grija sa o incrementam in interiorul buclei:

 

<?php

$contor=1;

while($contor <=10)

{

echo 'Hello<br>';

$contor++;

}

?>

 

Variabila $contor porneste de la valoarea 1, este incrementata in interiorul buclei si pe masura ce este incrementata este verificata daca a ajuns la 10. Insa cand a ajuns la 11, nu mai respecta conditia ca sa fie mai mica sau egala cu 10 si atunci bucla este intrerupta.

Astfel, rezultatul este:

 Hello a fost afisat de 10 ori exact cat i-am spus in conditie.

 

Ca sa fie vizibila incrementarea variabilei $contor vom modifica putin codul de mai sus astfel incat sa fie afisata din interiorul buclei si valoarea $contor:

 

<?php

$contor=1;

while($contor <=10)

{

echo $contor.' Hello<br>';

$contor++;

}

?>

 

In acest fel va fi afisat:

1 Hello

2 Hello

...

10 Hello

 

- 26 - Buclele do {} while ()

 

Spre deosebire de bucla while() {} unde continutul buclei {} era executat doar daca conditia () era macar o singura data adevarata, bucla do {} while () executa o data bucla {} si apoi verifica daca conditia () este adevarata.

Prin urmare bucla do while va executa macar o data codul indiferent de conditie.

Este utila in acele conditii cand o anumita serie de actiuni trebuie executate indiferent daca conditia de oprire este falsa sau nu.

 

do

{

echo 'This will ALWAYS show';

} while (0);

 

Va afisa o singura data "This will ALWAYS show" chiar daca conditia de oprire este falsa.

In exemplul anterior, in cazul lui while, daca conditia de oprire era 0 atunci nu se afisa nimic.

 

Dar sa incercam sa afisam un text de 10 ori la fel cum am procedat la while

 

$counter=1;

do

{

$counter++;

echo 'This will ALWAYS show <br>';

} while ($counter<=10);

 

Se va afisa de 10 ori "This will ALWAYS show" .

Dar se va afisa macar o data chiar daca conditia ar fi de forma ($counter<=0)

 

In concluzie bucla do while este asemanatoare buclei while, diferenta fiind faptul ca bucla {} se executa macar o data in cazul lui do while.

 

- 27 - Bucla de ciclare FOR

Bucla for este asemanatoare buclei while fiind de forma

for()

{}

 

Pentru controlul executiei buclei se vor folosi 3 expresii.

Ex.

Ne dorim sa afisam valoarea unei variabile $count pe masura ce creste de la 1 la 10. Vom insera in blocul de executat

{

echo $count . '<br>';

}

pentru ca ne dorim sa afisam pe cate un rand valoarea lui $count

 

for($count=1; $count<=10; $count++)

{

echo $count.'<br>';

}

 

Sa analizam cele 3 expresii dintre paranteze

for(

$count=1; // expresia de initializare, se initializeaza variabila contor $count cu valoarea de pornire

 

$count <= 10; // conditia de oprire, se verifica daca variabila contor  ajunge la valoarea unde se opreste executia buclei

 

$count++ )// expresia de incrementare, se incrementeaza variabila contor pana cand conditia de oprire devine falsa

 

 

Insa in mod normal in interiorul parantezelor pe langa conditia de oprire mai exista doua expresii, una de initializare si una de incrementare astfel:

 

for(expresie initializare; conditie oprire; expresie incrementare)

{

bloc instructiuni

}

 

 

Care este ordinea de executie:

1)      $count = 1; se initializeaza variabila contor o singura data la inceputul executiei lui for

Apoi pe masura ce se executa bucla

2)      se verifica conditia de oprire $contor<=10

3)     se executa codul din interiorul acoladelor

4)     se incrementeaza variabila $contor  $contor++

 

Se executa pasii 2,3 si 4 pana cand la pasul 2 conditia de oprire este falsa

 

Astfel se afiseaza:

1 Hello

2 Hello

...

10 Hello

 

Dar daca dorim sa decrementam de la 10 la 1?

 

for($contor=10  ;  $contor >=1  ;  $contor--)

{echo $contor . ' Hello';}

 

initializarea :   $contor = 10;

se verifica daca $contor e mai mare sau egal cu 1 : $contor >= 1;

se decrementeaza $contor pana va ajunge egala cu 0: $contor --

 

In general bucla for se foloseste atunci cand avem de a face cu numaratori exacte, asa cum este exemplul acesta de afisare a textului Hello de 10 ori. Instructiunea while se foloseste mai ales cand nu se poate sti cu exactitate de cate ori va fi executata bucla.

 

- 27 - instructiunea switch()

Switch este o modalitate mai rapida de a alege o optiune, mai rapida decat if-ul pentru ca permite mai multe alternative. Switch inseamna buton sau intrerupator dar e mai degraba un panou de control cu oricate butoane fiecarui buton corespunzandu-i o actiune. De aceea switch-ul e in unele limbaje de programare folosit in realizare meniurilor cu multe optiuni.

 

In cazul nostru vom folosi pentru a desemna o optiune, variabila $number.

 

Pentru o anumita valoare pe care o poate lua $number se alege executia unui bloc de cod:

 

<?php

$number = 1;

 

switch($number)

{

case 1:

   echo "Optiunea 1"; break;

case 2:

   echo "Optiunea 2"; break;

case 3:

   echo "Optiunea 3"; break;

 

}

?>

Va afisa Optiunea 1

 

Ce am realizat? Am creat un mic program care converteste numere in informatie text. Astfel daca $number = 1 atunci se afiseaza Optiunea 1, daca $number = 2 se afiseaza Optiunea2 ...

 

Cum s-ar fi realizat lucrul asta cu ajutorul lui if?

 

if ($number == 1)

{

echo "Optiunea 1";

}

elseif($number == 2)

{

echo "Optiunea 2";

}

elseif($number==3)

{

echo "Optiunea 3";

}

 

E mai greu de urmarit un program cu atatea ramuri de executie de aceea se prefera folosirea lui switch

 

Totusi in cazul in care $number nu ar fi fost egal cu niciunul dintre numerele 1,2,3, in cazul lui if am fi avut o rezolvare, ramura else. In cazul lui switch nu avem else insa avem ceva similar, ramura default:

 

<?php

$number = 4;

 

switch($number)

{

case 1:

   echo "Optiunea 1"; break;

case 2:

   echo "Optiunea 2"; break;

case 3:

   echo "Optiunea 3"; break;

default:

   echo "Nu se incadreaza in nici o optiune"; break;

}

?>

 

Se afiseaza "Nu se incadreaza in nici o optiune";

 

Se observa ca la finalul fiecarei zone de cod din fiecare optiune exista instructiunea break. Aceasta are rolul de a intrerupe executia codului pentru acea ramura. Daca nu ar fi break la final atunci s-ar executa si urmatoarea ramura. Ce rost ar avea totusi instructiunea switch in acest caz? Exista uneori si situatii cand utilizarea ei are sens fara sa folosim break.

 

De exemplu, se primeste ca valoare numele unei zile a saptamanii. Se cere sa se decida daca este o zi lucratoare sau o zi din weekend;

 

<?php

$day="sambata";

switch($day)

{

case "sambata":

case "duminica": echo 'It \'s weekend'; break

default: echo 'It\'s week day'; break

}

?>

 

Se va afisa It's weekend pentru ca va alege ramura "sambata" dar va executa si ramura urmatoare pentru ca nu a gasit nici un break, iar la ramura "duminica" va executa codul pana gaseste instructiunea break.

 

Daca $day ia valoarea "marti" atunci se va alege ramura default, nefiind nici o optiune cu valoarea "marti" si se va afisa It's week day.

 

- 29 - Functiile die si exit

Ele intrerup executia programului si pot afisa un mesaj.

Sunt utile atunci cand se genereaza erori care opresc executia programului. In aceste cazuri e mai bine sa intrerupem noi executia programului cu un mesaj explicativ decat sa primim erori de la PHP.

 

Se luam un exemplu.

<?php

echo 'Hello';

 

echo ' World';

?>

 

In mod normal se afiseaza Hello World dar sa inseram o instructiune die() intre cele doua instructiuni echo;

<?php

echo 'Hello';

die();

echo ' World';

?>

 

Va afisa doar 'Hello' pentru ca programul se termina imediat ce intampina instructiunea die()

Se poate folosi cu acelasi rezultat si exit();

 

Sau se poate folosi die() cu un mesaj de eroare.

 

<?php

echo 'Hello <br>';

die( 'Eroare, executarea scriptului a fost intrerupta');

echo ' World';

?>

Va afisa :

Hello

Eroare, executarea scriptului a fost intrerupta

 

Dar de ce am dori sa terminam script-ul in mijlocul executiei acestuia?

 

Un exemplu bun e conectarea la o baza de date. Comanda pentru conectarea la serverul local mysql este mysql_connect('','','') avand trei argumente: localhost (numele serverului local), numele utilizatorului si parola

 

<?php

mysql_connect('localhost','root','');

?>

Numele serverului este 'localhost', username 'root' si parola este '' (adica fara parola)

In acest caz nu va da eroare pentru ca astea sunt informatiile implicite din instalarea unui WAMP.

 

Sa completam scriptul cu instructiunea die

<?php

mysql_connect('localhost','root','') or die(Nu s-a reusit conectarea la server);

echo 'Ne-am conectat la server';

?>

Va afisa 'Ne-am conectat la server'

 

Sa modificam parametrii astfel incat sa cream o eroare. De exemplu sa oferim un username care nu exista, in loc de root vom folosi alex:

 

<?php

mysql_connect('localhost','alex','') or die('Nu s-a reusit conectarea la server');

echo 'Ne-am conectat la server';

?>

Va afisa un avertisment sau o eroare dar si mesajul 'Nu s-a reusit conectarea la server'

 

Se observa ca se foloseste operatorul logic "or". E o modalitate succinta de a alege sa se execute prima varianta adevarata. In acest caz daca mysql_connect da eroare (returneaza false), PHP alege sa execute ce urmeaza dupa "or" astfel incat evaluarea expresiei sa fie completa. Cum die() returneaza intotdeauna valoare true, acesta se va executa in caz ca mysql_connect returneaza false.

 

O varianta mai usor de inteles din punct de vedere logic ar putea fi folosind if

 

<?php

if(mysql_connect('localhost','alex',''))

{

echo 'Ne-am conectat la server';

}

else

{

die('Nu s-a reusit conectarea la server');

}

?>

 

E clar ca e mai mult de scris decat cu prima modalitate

 

Pe langa mesajul 'Nu s-a reusit conectarea' pot fi afisate si alte erori pe care nu le dorim.

Daca nu dorim sa se afiseze mesajele de avertisment atunci apelam la setarile de afisare a erorilor (cap -14-) sau mai simplu inseram un simbol "@" in fata instructiunii mysql_connect.

 

<?php

@mysql_connect('localhost','alex','') or die(Nu s-a reusit conectarea la server);

echo 'Ne-am conectat la server';

?>

 

Se va afisa doar mesajul 'Nu s-a reusit conectarea la server'.

 

- 30 - Functii, elemente de baza

 

O functie este un bloc de cod caruia ii dam un nume si pe care il putem reutiliza oricand dorim noi. Este mai usor sa executam un bloc intreg de cod doar apeland numele lui decat sa copiem intregul bloc de cod in programul nostru. In plus functia poate fi apelata de nenumarate ori prin numele pe care l-am dat noi.

 

O functie se declara in urmatorul mod

 

function nume_functie (lista de argumente)

{

bloc de instructiuni

}

 

E important sa denumim functiile astfel incat numele sa sugereze ce face functia.

 

De ex sa afisam numele lui Alex.

<?php

function afis_nume()

{

echo 'Alex';

}

 

echo "Numele lui este<br>";

afis_nume();

 

?>

Va afisa

Numele lui este

Alex

 

In acest caz nu este o functie utila, dar de cele mai multe ori functiile vor fi mai complexe si vor imparti programul in segmente de cod care vor fi mai usor de analizat.

 

- 30 - Functii cu argumente

 

Sa presupunem ca avem de adunat doua numere. Si trebuie sa face lucrul asta de mai multe ori in programul nostru.

 

Sa cream functia add() care va aduna doua numere

In interiorul parantezelor vor fi specificati parametrii, si anume variabilele care vor fi adunate.

add($number1, $number2)

 

<?php

function add($number1, $number2)

{

echo $number1 + $number2;

}

?>

Se observa ca nici in cazul parametrilor din cadrul functiilor nu trebuie specificat tipul de date al acestora. Tipul de date are importanta doar in momentul in care prelucram valorile din parametri.

 

Functiile trebuie apelate cu acelasi numar de parametri care apare si la declararea lor.

 

Daca incercam sa apelam functia add() fara nici un parametru vom avea cate un warning pentru fiecare parametru pe care am omis sa-l inseram - "lipseste argumentul cu numarul 1" si "lipseste argumentul cu numarul 2".

 

Sa folosim doua numere pentru adunare

$i_number1 si $i_number2

Am folosit in denumirea variabilei $i_number litera i pentru a desemna ca este o variabila input, adica va fi data ca valoare de intrare pentru functia add().

 

<?php

 

$i_number=10;

$i_number=5;

function add($number1, $number2)

{

echo $number1 + $number2;

}

 

add($i_number1,$i_number2);

 

?>

Va afisa 15

 

In loc de $i_number1 si $i_number2 putem pune ce dorim noi, orice alte variabile sau valori intregi sau cu virgula, nu are importanta.

Care este mecanismul? Variabilele $i_number1 si $i_number2 primesc valori iar in momentul in care sunt folosite in apelul functiei acele valori sunt trimise codului din interiorul functiei. Functia proceseaza informatia din parametrii primiti si in final returneaza la randul ei o valoare sau afiseaza un rezultat.

 

Sa luam un alt exemplu in care se folosesc valori de intrare de diferite tipuri. Sa cream o functie care primeste ca parametrii elementele unei date calendaristice, le combina si apoi le afiseaza.

 

<?php

function afis_data($zi, $luna, $an)

{

echo $zi. ' ' . $luna . ' ' . $an;

}

 

afis_data(31, 'martie', 2011);

?>

 

Va afisa 31 martie 2011

 

Astfel pot fi trimise functiei parametri de tipuri diferite

 

- 32 - Functii care returneaza valori

 

De cele mai multe ori nu vom dori sa afisam informatiile prelucrate de functii. Mai curand ne intereseaza sa prelucram variabilele de intrare si apoi sa returnam rezultatul in codul de unde a fost apelata functia iar acolo vom folosi acel rezultat in alte calcule. Rezultatul returnat de o functie poate fi de orice tip, numar, sir de caractere etc.

Sa presupunem ca avem o expresie de forma (10 + 10) / (5 + 5) rezultatul este 2. Dar dorim ca adunarea sa fie realizata de o functie add() iar impartirea de o functie div().

Sa cream functia add().

<?php

function add($number1, $number2)

{

$result = $number1+$number2;

echo $result;

}

?>

 

Daca apelam aceasta functie din program, add(10,10) vom afisa rezultatul adunarii, 20. Dar nu folosim mai departe acest rezultat si nu-l stocam nicaieri ci doar il afisam. Pe noi insa ne intereseaza sa preluam acel rezultat si sa-l folosim ulterior.

De aceea vom folosi in finalul functiei instructiunea return $result. Astfel transmitem blocului de cod de unde a fost apelata functia valoarea calculata de aceasta.

<?php

function add($number1, $number2)

{

$result = $number1+$number2;

return $result;

}

 

add(10,10);

}

Daca din program apelam add(10,10) atunci $number1 devine 10 iar $number2 ia valoarea celui de al doilea parametru 10. Variabila $result devine 20 prin insumarea celor doi parametri si apoi este returnata prin return $result. Astfel add(10,10) este evaluata de PHP ca avand valoarea 20 ca si cand am fi avut expresia 10 +10.

 

Ca sa putem vedea valoarea returnata de functie trebuie sa afisam rezultatul functiei:

 

echo add(10,10);

ca si cand add(10,10) ar fi tratata ca o variabila de sine statatoare pentru ca in acest moment add(10,10) contine valoarea 20

 

Putem crea o expresie complexa in care sa folosim apelul functiei:

echo add(10,10) + 100;

va afisa 120;

 

Sa revenim la exemplul de la inceput in care aveam expresia (10 + 10) / (5 + 5)

Avem deja o functie care sa calculeze sumele 10 + 10 si 5 + 5 dar ne mai trebuie o functie care sa realizeze impartirea

 

function div($number1, $number2)

{

$rezult = $number1 / $number2;

return $result;

}

 

Se observa ca am folosit aceleasi denumiri de parametri si pentru functia div , $number1 si $number2. Asta pentru ca parametrii folositi in declarea unei functii nu sunt propriu-zis variabile declarate si care contin informatii. Ei exista doar pentru a specifica ce fel de valori va primi functia in momentul apelarii ei de aceea mai poarta denumirea de parametri formali. Astfel putem sa ii folosim cu aceleasi nume in oricate functii dorim. Ei exista doar in interiorul functiilor si doar in momentul apelului acestora.

 

Sa revenim la exemplu si vom folosi o variabila $sum pentru a stoca rezultatul final.

<?php

$sum=div ( add(10,10), add(5,5) );

echo $sum;

?>

Va afisa 2

 

- 33 - Variabile globale

Se poate intalni urmatoarea situatie: se definesc cateva variabile in afara unei functii dar cand incercam sa folosim acele variabile in interiorul functiei nu le putem accesa.

Sa luam un exemplu in care sa folosim o variabila declarata in programul principal si care sa stocheze o informatie, sa spunem adresa unui user care acceseaza pagina PHP la un moment dat.

 

<?php

$user_ip = $_SERVER['REMOTE_ADDR'];

echo $user_ip;

?>

Se afiseaza 127.0.0.1, variabila $user_ip a fost definita in programul principal si tot acolo am afisat-o

Nu ne intereseaza sa discutam despre vectorul de sistem $_SERVER care contine diverse informatii despre server si mediul PHP doar dorim sa folosim adresa de IP stocata in variabila $_SERVER['REMOTE_ADDR']. Despre $_SERVER sa va discuta intr-un capitol ulterior, acum insa ne intereseaza sa punctam faptul ca variabila $user_ip este declarata in programul principal si contine IP-ul unui utilizator care acceseaza pagina PHP.

Pentru ca in faza de dezvoltare a aplicatiilor lucram de obicei pe serverul local, localhost, IP-ul este cel local, 127.0.0.1

Vom crea o functie echo_ip() in care se va incerca folosirea variabilei $user_ip.

<?php

$user_ip = $_SERVER['REMOTE_ADDR'];

 

function echo_ip()

{

$sir='Adresa ta este'. $user_ip. '<br>';

echo $sir;

}

 

echo_ip();

?>

 

De aceasta data se afiseaza doar sirul

"Adresa ta este"

fara sa mai adauge si IP-ul 127.0.0.1 pentru ca variabila $user_ip nu mai este recunoscuta in interiorul functiei echo_ip().

Pentru a determina PHP-ul sa recunoasca variabila $user_ip in interiorul functiei vom adauga chiar la inceputul functiei linia de cod

 

global $user_ip;

specificand in acest mod ca variabila $user_ip este globala prin urmare vizibila atat in functie cat si in programul principal.

 

<?php

$user_ip = $_SERVER['REMOTE_ADDR'];

 

function echo_ip()

{

global $user_ip;

$sir='Adresa ta este'. $user_ip. '<br>';

echo $sir;

}

 

echo_ip();

?>

 

De aceasta data variabila $user_ip este vizibila in interiorul functiei echo_ip() si continutul ei va fi afisat odata cu sirul 'Adresa ta este'.

Adresa ta este 127.0.0.1

 

Un motiv important pentru utilizarea variabilelor globale este faptul ca unele variabile folosite in programele noastre vor fi create in alte fisiere. Acele fisiere pot fi incluse in fisierul in care lucram. Prin urmare, ca sa putem folosi acele variabile externe in functiile noastre, va trebui sa le declaram globale in functiile in care dorim sa le folosim.

 

Obs. De ce nu putem declara variabila $user_ip = $_SERVER['REMOTE_ADDR'] atat in afara functiei cat si in interiorul ei? In acest mod nu mai trebuie sa o mai declaram globala.

Exista doua motive:

- poate ca pe parcursul executiei programului variabila declarata in programul principal isi modifica valoarea dar in interiorul functiei variabila creata cu acelasi nume nu va fi modificata pentru ca nu e aceeasi variabila ci una creata local. Prin urmare declarand o variabila globala nu facem altceva deca sa specificam ca folosim in functie exact aceeasi variabila declarata in programul principal.

- este o pierdere de timp si de resurse sa declaram variabile cu acelasi nume de mai multe ori in aplicatia noastra

 

 

- 34 - Functii pentru siruri de caractere

Sa luam o variabila $string = 'This is an example string';

Vom folosi functia str_word_count(). Poate fi folosita atat pentru a numara cate cuvinte se afla intr-un sir de caractere cat si pentru a produce un vector ce contine cuvintele din sirul de caractere dat ca parametru.

str_word_count($string, 0)  sau str_word_count($string) returneaza numarul de cuvinte din $string

str_word_count($string,1) va returna un vector (array) care va contine cuvintele din $string iar indicele unui element va indica pe ce pozitie in sir se afla cuvantul continut de element.

str_word_count($string,2) va returna un vector asociativ in care elementele vor contine fiecare cuvant iar fiecare element va avea indicele egal cu pozitia la care se afla cuvantul in sir (pozitia din punct de vedere al caracterelor nu al cuvintelor)

 

Mai intai varianta in care str_word_count($string) returneaza numarul de cuvinte

<?php

$string = 'This is an example string';

$string_word_count= str_word_count($string);

echo $string_word_count;

?>

Va afisa valoarea 5 pentru ca sirul 'This is an example string' contine 5 cuvinte

 

Varianta in care str_word_count() returneaza un vector ce contine cuvintele din sir

<?php

$string = 'This is an example string';

$string_word_count= str_word_count($string,1);

echo $string_word_count;

?>

Va afisa array

Asta inseamna ca $string_word_count a primit ca valoare un vector dar nu putem sa-l afisam cu echo, insa echo afiseaza ca are de a face cu un vector.

Pentru a afisa un vector va trebui sa folosim o functie pentru afisat vectori, print_r();

<?php

$string = 'This is an example string';

$string_word_count= str_word_count($string,1);

print_r ($string_word_count);

?>

Va afisa array([0]=> This [1] => is [2] => an [3] => example [4] => string) care reprezinta vectorul format din impartirea in cuvinte separate a sirului $string. Se observa ca indicele de la 0 la 4 reprezinta al catalea e respectivul cuvant in sirul $string. In cazul nostru cuvantul "example" este pe pozitia a 4-a si in vector elementul corespunzator are indicele 3.

array([0]=> This [1] => is [2] => an [3] => example [4] => string)

 

Varianta in care str_word_count() returneaza un vector asociativ in care fiecare element contine cate un cuvant din sir iar indicele indica pozitia din punct de vedere al caracterelor in sir. Exemplu: daca $string = 'This is an example string' atunci vectorul asociativ este

array([0]=> This [5] => is [8] => an [11] => example [19] => string)

deoarece cuvantul "This" incepe la pozitia 0, cuvantul "is" la pozitia 5 si tot asa. Sirul $string incepe la pozitia 0 si se termina la pozitia 24 pentru ca este format din 25 de caractere.

<?php

$string = 'This is an example string';

$string_word_count= str_word_count($string,2);

print_r ($string_word_count);

?>

Va afisa

array([0]=> This [5] => is [8] => an [11] => example [19] => string)

 

Functia str_word_count poate fi folosita si cu un al treilea parametru care permite ca anumite semne de punctuatie sa fie considerate cuvinte de sine statatoare. De exemplu daca am adauga caracterul punct "." la sfarsitul sirului

$string ='This is an example string .'

 si am aplica functia $str_word_count($string,1),  PHP nu va lua in considerare ca exista caracterul punct separat cu un spatiu de ultimul cuvant din sir.

Insa daca aplicam str_word_count($string,1,'.') si apoi afisam rezultatul vom avea

array ( [0] => This [1] => is [2] => an [3] => example [4] => array [5] => . )

ceea ce inseamna ca pe pozitia 5 a aparut un cuvant care este chiar "." specificat de parametrul al treilea.

 

<?php

$string = 'This is an example string .';

$string_word_count= str_word_count($string,1,'.');

print_r ($string_word_count);

?>

Va afisa

array ( [0] => This [1] => is [2] => an [3] => example [4] => array [5] => . )

 

Daca insa $string ='This is an example string.' are semnul de punctuatie punct "." lipit de ultimul cuvant "string" atunci vom avea:

 

<?php

$string = 'This is an example string.';

$string_word_count= str_word_count($string,1,'.');

print_r ($string_word_count);

?>

Va afisa

array ( [0] => This [1] => is [2] => an [3] => example [4] => string. ) 

ultimul cuvant, al cincilea, corespunzator indicelui 4 fiind "string." , punctul "." fiind luat impreuna cu cuvantul "string".

 

Pot fi puse oricate caractere care pot fi interpretata drept cuvinte care in conditii normale ar fi ignorate.

De exemplu putem avea

<?php

$string='This is an example string & this is a tutorial .';

$string_word_count = str_word_count($string,1, '&.!') ;

print_r($string_word_count);

?>

Se afiseaza

array ( [0] => This [1] => is [2] => an [3] => example [4] => string [5] => & [6] => this [7] => is [8] => a [9] => tutorial [10] => . )

Se observa ca elementele 5 si 10 sunt chiar caracterele "&" si "." indicate drept cuvinte in sirul '&.!'.

 

- 35 - Functii pentru siruri , continuare

Functia str_shuffle() - amesteca intre ele caracterele unui sir

<?php

$string = "This is an example string";

$string_shuffled= str_shuffle($string);

echo $string_shuffled;

?>

Afiseaza textul

T ieshpitm esxsgaila rnn

 care este o amestecare aleatorie a caracterelor din sirul "This is an example string"

La ce ne poate folosi o astfel de functie? Atunci cand ne dorim sa upload-am un fisier si dorim sa-i dam un nume generat aleatoriu, putem amesteca un sir dupa care sa atasam o extensie.

Sau putem genera aleatoriu un numar foarte mare sau un text avand la baza doar anumite caractere. In general generarea aleatorie este utila in testarea programelor.

Sa  generam aleatoriu un sir care sa contina literele alfabetului si cifrele de la 0 la 9.

<?php

$string = "abcdefghijklmnop0123456789";

$string_shuffled= str_shuffle($string);

echo $string_shuffled;

?>

Va afisa

349bofn1idge7kc5j60ma8hlp2

Dar da dorim sa avem un sir de doar 5 caractere din sirul $string_shuffled?

Vom folosi functia substr($string_shuffled,0,5) in care am specificat ca extragem din sirul $string_shuffled 5 caractere pornind de la pozitia 0.

<?php

$string = "abcdefghijklmnop0123456789";

$string_shuffled = str_shuffle($string);

$half=substr($string_shuffled, 0, 5);)

echo $half;

?>

Va afisa

349bo

Daca ne dorim sa generam un sir format doar din jumatate din caractere fom folosi functia strlen($string) care returneaza lungimea sirului $string. Dupa aceea vom imparti lungimea la 2 pentru a obtine jumatate din lungimea sirului.

<?php

$string = "abcdefghijklmnop0123456789";

$string_shuffled = str_shuffle($string);

$half=substr($string_shuffled, 0, strlen($string)/2);)

echo $half;

?>

Va afisa

349bofn1idge7

care este un sir generat aleatoriu din toate caracterele sirului original dar avand lungimea de doar jumatate

 

Functia strrev() returneaza inversul unui sir

<?php

$string = "This is an example string";

$string_reversed= strrev($string);

echo $string_reversed;

?>

Va afisa

gnirts elpmaxe na si sihT

inversul sirului This is an example string

 

-36 - Functii pentru siruri de caractere , continuare

Functia similar_text()

Daca va doriti sa vedeti daca doua referate sunt diferite si nu unul inspirat din celalalt atunci se poate afla cu functia similar_text() cat de apropiate sunt cele doua texte unul fata de celalalt.

 

<?php

$string1 = 'This is an essay. I\'m going to be talking about php.';

$string2 = 'This is an essay. I will be talking about the subject php.';

similar_text($string1, $string2, $result);

echo 'The similarity between is, ', $result;

?>

Va afisa

The similarity between is, 78.1818181818

Asta inseamna ca cele doua texte sunt asemanatoare in procent de aproape 80%.

Daca modificam si mai mult unul din texte astfel incat sa nu mai fie atat de asemanator de ex

<?php

$string1 = 'This is an essay. I\'m going to be talking about php.';

$string2 = 'My essay is about php. I\'m going to be talking about everything to do with php';

similar_text($string1, $string2, $result);

echo 'The similarity between is, ', $result;

?>

Va afisa

The similarity between is, 63.0769230769

Asemanarea a scazut textele fiind diferite intr-un procent mai mare.

 

Functia strlen() returneaza lungimea unui sir de caractere

<?php

$string = 'This is an example string';

$string_length = strlen($string);

echo $string_length;

?>

afiseaza 25, cat este dimensiunea sirului $string

Este utila si o vom folosi de multe ori cand vom dori sa verificam daca un sir nu este vid. De exemplu daca a fost introdusa o valoare intr-o caseta text dintr-un formular.

<?php

$string = 'This is an example string';

$string_length = strlen($string);

if( $string_length > 0)

{

echo $string;

}

else

{

echo 'Eroare, introduceti macar un caracter';

}

?>

 

- 37 - Functii pentru siruri de caractere, continuare

Functia trim(), sterge spatiile din stanga si din dreapta unui sir

<?php

$string = ' This is an example string.  ';

$string_trimmed = trim($string);

echo $string_trimmed;

?>

Va afisa sirul "This is an example string." care este cea mai mare parte din sirul $string mai putin spatiile de la inceput si de la sfarsit

La ce poate folosi functia trim()? Sa spunem ca dorim sa impartim un sir de caractere in elemente ale unui vector, dupa cum se va vedea la functia explode() - asemanatoare cu str_word_count($string,1). Insa in loc de siruri de caractere diferite de spatii vom avea si acele spatii de la inceput si de la sfarsit. De cele mai multe ori nu ne dorim sa intalnim doar spatii in sirurile de caractere asa ca o metoda e sa ne asiguram ca le stergem din sirul original.

Daca se doreste eliminarea doar a spatiilor din stanga se foloseste functia ltrim() iar pentru spatiile din dreapta rtrim().

 

Functia addslashes(), adauga slash-uri in fata caracterelor escape

<?php

$string = 'This is a <img src="image.jpg"> string.';

$string_slashes = htmlentities(addslashes($string));

echo $string_slashes;

?>

Va afisa

This is a <img src=\"image.jpg\"> string.

 

Am folosit si functia htmlentities() ca sa putem afisa si tag-urile html, altfel ar fi intrerpretate de browser si afisate ca elemente HTML.

Se obserca ca functia addslashes() adauga caractere "\" pentru a "scapa" caracterele care creaza probleme, in cazu nostru ghilimelele.

Nu mai trebuie sa avem noi grija sa introducem slash-uri in fata ghilimelelor sau apostrofurilor sau altor caractere escape, mai ales ca nu stim ce poate introduce un utilizator intr-un formular. Cu functia addslashes() vom putea sa ne asiguram ca nu vor fi caractere care sa creeze probleme.

Daca ne dorim sa scapam de caracterele slash pe care fie le-am introdus noi, fie exista deja, putem folosi functia stripslashes();

<?php

$string = 'This is a <img src="image.jpg"> string.';

$string_slashes = htmlentities(addslashes($string));

echo stripslashes($string_slashes);

?>

Va afisa

This is a <img src="image.jpg"> string.

 

In general daca dorim sa trimitem in HTML vom folosi addslashes() dar daca dorim sa stocam intr-o baza de date doar informatia sau daca vom avea nevoie sa procesam sirurile in diverse moduri iar slash-urile ne-ar incurca, atunci vom scapa de caractere slash inutile cu functia stripslashes().

Aceste functii siruri de caractere din capitolele 34 - 37 reprezinta o colectie de functii mai des utilizate, insa sunt cu mult mai multe ce pot fi consultate pe http://php.net/manual/en/ref.strings.php

- 38 - Introducere in vectori, array

Un vector este o colectie de date.

Daca la un moment dat am avea nevoie de mai multe numere, sa spunem

5, 10, 15, 20

si dorim sa le folosim pe toate atunci ne este de mai mult folos sa le avem stocate pe toate in acelasi loc.

Este util sa lucram cu vectori pentru ca pot fi usor accesati in interiorul buclelor unde la fiecare iteratie poate fi accesat un element din vector.

Vom crea o variabila vector

<?php

$food = array('Pasta', 'Pizza', 'Salad');

 

// astfel avem 3 elemente in vector, 3 siruri de caractere, 'Pasta' pe pozitia 0, 'Pizza' pe pozitia 1, 'Salad' pe pozitia 2

 

echo $food[0];

echo $food[2];

// Se va afisa primul si al treilea element din vector PastaSalad

?>

 

Daca insa ne dorim sa afisam mai multe detalii despre vectori atunci vom folosi instructiunea de afisare print_r()

 

<?php

$food = array('Pasta', 'Pizza', 'Salad');

print_r($food);

?>

 

Se va afisa

array ( [0] => Pasta [1] => Pizza [2] => Salad )

Acum se poate vedea mult mai clar care sunt indicii si valorile corespunzatoare

Daca am fi incercat sa afisam simplu prin intermediul lui echo ar fi afisat doar Array asta insemnand ca are de a face cu un vector insa nu mai mult pentru ca echo nu stie sa afiseze vectori.

 

Cum adaugam elemente la un vector? Putem adauga chiar in definirea vectorului:

$food = array('Pasta', 'Pizza', 'Salad','Vegetables');

 

in acest caz a fost adaugat elementul 'Vegetables' pe pozitia 4 si avand indicele 3

sau

 

$food[4]='Fruit';

care inseamna ca indicelui 4 din vector i-a fost asociata valoarea 'Fruit'. Dar in vector nu exista un element cu indicele 4 asa ca automat a fost creat unul.

Aceasta metoda este cea mai utila pentru adaugarea de elemente in vectori fiind folosita mai ales in bucle.

 

- 39 - Vectori asociativi

Sa luam exemplul anterior in care avem 4 tipuri de mancare stocate ca valori intr-un vector

 

<?php

$food = array('Pasta', 'Pizza', 'Salad','Vegetables');

print_r ($food);

?>

continutul vectorului este de forma

Array ( [0] => Pasta [1] => Pizza [2] => Salad [3] => Vegetables )

Dar sa presupunem ca dorim ca fiecarei grupe de alimente sa-i asociem o valoare nutritiva, numarul de calorii

 

<?php

$food = array('Pasta'=>300, 'Pizza'=>1000, 'Salad'=>150, 'Vegetables'=>50);

print_r($food);

?>

 

Se va afisa

Array ( [Pasta] => 300 [Pizza] => 1000 [Salad] => 150 [Vegetables] => 50 )

Asta inseamna ca de aceasta data alimentele sunt pe post de indici iar valorile stocate sunt numarul de calorii.

Pana acum accesam elementele din vector $food[0], $food[1]...Acum daca incercam acelasi lucru nu mai obtinem nimic pentru ca de aceasta data indicii sunt valori text.

Astfel pentru primul elemente din vector nu vom incerca $food[0] ci $food['Pasta'] si vom obtine valoarea 300.

 

echo $food['Pasta'];

va afisa

300

 

echo $food['Pizza'];

va afisa

1000

 

Vectorii asociativi sunt foarte utili in lucrul cu baze de date sau in prelularea informatiilor din formulare.

 

- 40 - Vectori bidimensionali

 

se mai poate reformula: vectori in interiorul altor vectori.

Sa revenim la exemplul anterior cu tipurile de mancare

 

$food = array('Pasta'=>300, 'Pizza'=>1000, 'Salad'=>150, 'Vegetables'=>50);

 

In loc de a avea elemente in interiorul vectorului vom avea alti vectori. Si e bine sa ne gandim la acestia ca la niste categorii. Adica vom avea un vector de categorii de elemente

 

Sa categorisim alimentele in functie de cat de sanatoase sunt:

-Healthy

Salad

Vegetable

Pasta

 

-Unhealthy

Pizza

Ice cream

 

Vom avea un vector pe pozitia Healty si al vector Unhealthy

 

$food=array( 'Healthy'=>array(), 'Unhealthy'=array() );

 

apoi vom putea insera in fiecare vector elementele corespunzatoare

<?php

$food=array(

              'Healthy'=>

                          array('Salad','Vegetable','Pasta'),

             'Unhealthy'=>

                          array('Pizza','Ice cream') );

?>

- au fost aranjate pentru a pune in evidenta categoriile dar pot fi scrise oricum, pe o singura linie sau mai multe

 

Sa afisam un element din vector, sa luam 'Pasta'

 

<?php

echo $food['Healty'] [2];

?>

 

afiseaza

Pasta

 

Vom folosi doi indici, primul desemneaza categoria si al doilea alege elementul din vectorul categorie.

 

Sa luam un alt exemplu, 'Ice cream': face parte din vectorul 'Unhealty' si e pe pozitia 2 (indicele 1)

 

<?php

echo $food['Unhealty'] [1];

?>

 

- 41 - Instructiunea de ciclare foreach()

 

Parcurge vectorul luand pe rand fiecare element al acestuia si le atribuie varibilelor desemnate intre paranteze

Exista sub doua forme:

 

1. nu se citeste si indicele

 

foreach($nume_vector as $element)

{

bloc de instructiuni

}

 

2. se citeste si indicele

 

foreach($nume_vector as $indice => $element)

{

bloc de instructiuni

}

 

Cum functioneaza? Se porneste de la inceputul vectorului $nume_vector si se culege fiecare element al vectorului in variabila $element (iar indicele in $indice). In blocul de instructiuni urmeaza sa fie prelucrate elementele.

 

 

Sa afisam continutul vectorului definit anterior:

 

<?php

$food=array(

              'Healthy'=>

                          array('Salad','Vegetable','Pasta'),

             'Unhealthy'=>

                          array('Pizza','Ice cream') );

 

foreach($food as $category => $inner_array)

{

echo $category.'<br>';

}

?>

 

Va afisa

Healthy
Unhealthy

Dorim sa afisam si elementele din vectorii corespunzatori categoriilor

foreach($food as $category => $inner_array)

{

echo $category.'<br>';

echo $inner_array.'<br>';

}

?>

Se va afisa

Healthy
Array
Unhealthy
Array

De ce nu afiseaza si vectorii ci doar afiseaza Array? Pentru ca $inner_array fiind vector nu poate fi afisat cu echo. De aceea il vom afisa tot cu foreach.

<?php

foreach($food as $category => $inner_array)

{

echo $category.'<br>';

 

foreach($inner_array as $item)

             {

             echo $item.'<br>';

             }

}

?>

 

Va afisa

Healthy
Salad
Vegetable
Pasta
Unhealthy
Pizza
Ice cream

 

Nu se distinge prea bine unde incepe al doilea vector asa ca vom pune in evidenta denumirile categoriilor folosind tag-ul <strong>

 

<?php

foreach($food as $category => $inner_array)

{

echo '<strong>'.$category.'<strong><br>';

 

foreach($inner_array as $item)

             {

             echo $item.'<br>';

             }

}

?>

 

Healthy
Salad
Vegetable
Pasta
Unhealthy
Pizza
Ice cream

 

- 42 - functiile include() si require()

 

Functia include() se foloseste atunci cand se doreste ca tot ce se afla intr-un fisier, HTML si/sau PHP, sa fie inclus intr-un alt fisier.

De exemplu avem un fisier care contine header-ul pentru o pagina web si ne dorim ca acel header sa se regaseasca pe fiecare pagina a site-ului. Copierea textului duce la marirea dimensiunilor fisierelor si nici nu e eficienta asa ca se poate realiza acelasi lucru folosind include().

 

avem un fisier header.php care contine un titlu

 

<h2>My page</h2>

 

Cum putem crea mai multe pagini cu acelasi header in interiorul lor. Cum se procedeaza pentru o pagina asa se va proceda si pentru celelalte. Vom crea un fisier denumit index.php si un altul anotherpage.php

 

index.php:

 

<?php

$var= 'String';

echo $var;

?>

 

anotherpage.php

 

<?php

$var = 10;

echo $var;

?>

 

Vom modifica continului lui index.php astfel incat sa contina si fisierul header.php

 

index.php;

 

<?php

include 'header.php';

$var= 'String';

echo $var;

?>

 

daca header.php se afla pe un nivel mai sus vom scrie

include '../header.php';

daca se afla intr-un alt folder

include 'folder/header.php';

 

vom proceda la fel si pentru anotherpage.php

 

<?php

include 'header.php';

$var = 10;

echo $var;

?>

 

In acest fel titlul My page se va regasi pe fiecare pagina chiar daca fiecare pagina se comporta diferit, avand functionalitate diferita.

Mai mult, daca vom schimba continutul lui header.php aceasta schimbare se va regasi in ambele fisiere php, index.php si anotherpage.php. Fara include ar fi trebuit sa modificam fiecare fisier in parte.

 

In acest mod a fost creat un template, un model de pagina care poat fi modificat cu usurinta intr-un singur loc astfel incat modificarile sa fie vizibile in oricare din pagini.

 

Pot fi incluse in acest mod fisiere meniu, fisiere bara laterala, fisiere cu aplicatii, cu html sau cu php si pot fi incluse oricate fisiere sunt necesare.

 

Mai mult de atat, in header.php pot fi declarate si variabile:

 

<h2>My page</h2>

<?php

$var1 = 'String';

$var2 = 10;

?>

 

E suficient sa includem header.php in ambele fisiere index.php si anotherpage.php pentru a avea acces la variabilele din ambele fisiere.

 

index.php:

 

<?php

include 'header.php';

 

echo $var1;

?>

 

anotherpage.php:

 

<?php

include 'header.php';

 

echo $var2;

?>

 

Va afisa

String

 

respectiv

 

10

 

pentru ca ambele valori au fost preluate din fisierul header.php

 

Dar ce se intampla daca dintr-un anumit motiv fisierul header nu ar exista? Toate valorile declarate in el nu ar mai fi accesibile in fisierul care il include deci pagina nu ar mai avea rost sa fie rulata. Pentru a opri executia script-ului atunci cand nu se gaseste un fisier se foloseste functia require();

 

Nu se vede nici o schimbare in cazul lui require('header.php') fata de include('header.php') insa sa luam situatia cand fisierul de inclus nu exista.

 

<?php

include ('doesntexist.php');

echo 'Var2 is'. $var2;

?>

Afiseaza cateva notificari dar nici o eroare care sa opreasca scriptul si se afiseaza pe ultima linie Var2 is

 

insa daca vom folosi require()

 

<?php

include ('doesntexist.php');

echo 'Var2 is'. $var2;

?>

 

atunci pe langa notificari se afiseaza Fatal error iar scriptul este oprit si nu se mai afiseaza nici textul de la instructiunea echo.

 

Rostul unei astfel de instructiuni apare atunci cand anumite informatii din fisierul header sunt absolut necesare pentru rularea paginii, in lipsa acestuia rularea paginii ne mai avand rost.

 

Include e mai mult pentru design. Daca nu sunt gasite elementele de HTML nu e ceva grav. De exemplu un site poate sa functioneze chiar daca nu gaseste un meniu, se incarca restul paginii si va functiona chiar si partial.

 

- 43 - include_once si require_once

 

Nu este nici o diferenta fata de include sau require daca se foloseste o data in interiorul paginii. Diferentele apar daca se incearca folosirea aceluiasi fisier php de mai multe ori.

 

<?php

require('header.php');

require('header.php');

?>

Va afisa continutul lui header.php de doua ori

My page

My page

 

Daca insa folosim require_once atunci nu se mai include header.php si a doua oara. Va verifica daca header.php a fost deja inclus si il va include doar daca nu a fost deja inclus.

 

<?php

require('header.php');

require_once('header.php');

?>

 

????

- nu functioneaza -

????

 

reaquire_once este similar cu constructia urmatoare:

 

<?php

require('header.php');

 

if(defined('header.php'))

{

require('header.php');

}

?>

 in care se verifica daca fisierul header.php a fost deja inclus

 

???????

 

include_once are aceeasii semnificatie, adica nu mai include a doua oara fisierul deja inclus.

 

La ce ar putea folosi require_one si include_once? Atunci cand avem multe fisiere e posibil sa nu mai stim de cate ori am inclus un anumit fisier si in care fisier s-a intamplat asta. Cu include_once ne asiguram ca nu l-am inclus de mai multe ori din greseala.

 

- 44 - preg_match() Pattern Matching

Consta in verificarea unui sir de caractere  daca corespunde unui anumit model.

Desi preg_match are foarte multe aplicabilitati si variante de verificare a sirurilor dupa anumite modele, vom testa doar capacitatea lui de cautare a unui sir in alt sir.

 

Dorim sa cautam un sir ("is") in interiorul sirului "This is a string".

 

<?php

$string = 'This is a string.';

if(preg_match('/is/',$string ) )

{

echo 'Match found';

}

else

{

echo 'No match found';

}

?>

 

Va afisa

Match found

pentru ca exista sirul 'is' in sirul continut de $string ('This is a string')

Se poate observa modul cum este data expresia de cautare:

 

de forma /sir de cautat/

 

Se poate verifica daca exista spatiu intr-un sir si atunci expresia de cautare este de forma 2 slash-uri cu un spatiu intre ele

'/ /'

 

- 45 - Pattern Matching - continuare

 Vom crea o functie care va primi ca parametru un sir si il va verifica cu ajutorul functiei preg_match. Verificam daca sirul primit ca parametru contine macar un spatiu. Daca contine un spatiu functia returneaza true iar daca nu returneaza false.

 

<?php

 

function has_space($string)

{

if(preg_match('/ /', $string) )

{

return true;

}

else

{

return false;

}

}

 

$string = 'Thisdoesnthasaspace';

 

 

if(has_space($string))

{

echo 'Has a space';

}

else

{

echo 'Has no spaces';

}

?>

 

Afiseaza

Has no spaces

pentru ca sirul $string  'Thisdoesnthasaspace' nu contine nici un spatiu

 

Daca am da variabilei $string o valoare 'This doesn/'t have a space' care contine macar un spatiu (de fapt mai multe spatii) atunci se va afisa

Has a space

 

 

- 46 - String length

 

Functia strlen() returneaza lungimea unui sir de caractere

<?php

$string_length = strlen('How many characthers does this have?');

echo $string_length;

?>

Se afiseaza:

35

 

Vom folosi si o variabila care sa stocheze un sir de caractere si vom afisa dimensiunea acelui sir

 

<?php

$string = 'Alex';

$string_length = strlen($string);

echo $string_length;

?>

Se afiseaza:

4

 

Daca ne propunem sa parcurgem un sir de caractere? Trebuie sa stim cand ne oprim si pentru asta folosim ca punct de oprire lungimea sirului pe o aflam cu strlen.

 

<?php

$string = 'Alex';

$string_length = strlen($string);

for($x=1; $x<= $string_length; $x++)

{

echo $x . '<br>';

}

?>

Se afiseaza:

1

2

3

4

Momentan doar am afisat pentru fiecare caracter din sir doar pozitia lui dar mai tarziu vom putea procesa in acelasi mod fiecare caracter din sir afisandu-l sau folosind-ul in diverse scopuri.

 

- 47 - Upper and lower case conversion

 

Conversii in litere mici sau litere mari

strtolower pentru litere mici

strtoupper pentru litere mari

<?php

$string = 'I Could Be Any Case';

 

$string_lower = strtolower($string);

$string_upper = strtoupper($string);

 

echo $string_lower;

echo string_upper;

?>

Se afiseaza

i could be any case
I COULD BE ANY CASE

 

De ce sunt utile aceste functii in PHP?

Sa exemplificam prin crearea unui formular de login. Trebuie sa verificam daca o persoana care isi da numele exista in baza de date

 

<form action="index.php" method="GET">

Name: <input type="text" name="user_name"> <br><br>

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

</form>

 

Exista posibilitatea ca cineva sa isi scrie cu numele cu litere mici desi in baza de date numele e scris cu majuscula. Solutia e sa transformam toate literele sirului preluat din formular in litere mici iar orice ar tasta userul in formular (toate literele mari, toate mici, la inceput cu majuscula sau in orice alt mod) noi putem verifica corect daca si-a introdus numele lui.

 

Din formular informatiile se pot prelua cu ajutorul vectorilor $_GET sau $_POST, de aici si metoda method="GET".

Pentru a prelua informatiile dintr-un anumit camp trebuie sa ne folosim de numele lui: daca dorim sa extragem informatia din <input type="text" name="user_name"> vom folosi $_GET['user_name'].

Astfel:

 

<?php

if( isset($_GET['user_name']) && !empty($_GET['user_name']) )

{

echo $user_name = $_GET['user_name'];

}

 

?>

 

De ce se foloseste method = "GET"?

Ca sa putem urmari in bara de adrese valorile transmise. Prin method="POST" nu s-ar putea vedea in bara de adrese.

 

isset($_GET['user_name']) returneaza true daca exista variabila $_GET['user_name'], adica daca o fost trimisa informatia din formular.

 

empty($_GET['user_name']) returneaza true daca $_GET['user_name'] este vida adica nu a fost scris nimic in formular inainte de a se da submit. De aceea noi verificam daca !empty($_GET['user_name']) este true.

 

Daca ambele conditii sunt adevarate

if( isset($_GET['user_name']) && !empty($_GET['user_name']) )

atunci se stocheaza in variabila $user_name informatia din $_GET['name']

 

In momentul in care s-a tastat Alex in campul Nume si apoi s-a apasat submit, in bara de adrese a browser-ului a fost afisat index.php?user_name=Alex

 

Acum dorim sa verificam daca numele introdus este egal cu 'alex'

 

if($user_name=='alex')

{

echo 'You are the best.';

}

 

Totusi daca numele a fost tasta cu majuscula (Alex) comparatia nu mai este adevarata.

Vom crea o noua variabila $user_name_lc (lc de la lower case) care sa primeasca strtolower($username). Nu vom schimba valoarea din $user_name pentru ca e posibil sa avem nevoie la un moment dat de valoarea introdusa de user.

 

$user_name_lc = strtolower($user_name);

 

Script-ul complet va arata astfel:

 

<form action="index.php" method="GET">

Name: <input type="text" name="user_name"> <br><br>

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

</form>

 

<?php

if( isset($_GET['user_name']) && !empty($_GET['user_name']) )

{

$user_name = $_GET['user_name'];

$user_name_lc = strtolower($user_name);

 

             if(user_name_lc=='alex')

             {

                          echo 'You are the best, '.  $user_name;

             }

}

 

?>

 

Daca se va introduce in campul Name valoarea aLeX se va afisa

You are the best, aLeX

 

pentru ca am folosit valoarea introdusa initial de user si stocat in $user_name dar in comparatii am folost variabila $user_name_lc care contine numele user-ului cu litere mici.

 

 

- 48 - String position strpos();

 

Gasirea pozitiei unui sir in alt sir

strpos() primeste 3 argumente

- primul este sirul in care se cauta

- al doilea este sirul cheie de cautat

- al treilea, optional, este offset-ul, de unde sa inceapa cautarea in string

 

Sa cautam intr-un sir subsirul 'is'

<?php

$fint = 'is';

$find_length = strlen($find);

 

  $string = 'This is a string, and it is an example';

echo strpos($string, $find);

 

?>

 

Se afiseaza

2

 

pentru ca 'is' este pe pozitia 2(pornind de la 0) in sirul 'This is a string…'

 

Daca dorim sa gasim si alta aparitia a sirului 'is' atunci vom specifica un offset de 3 (punctul de pornire fata de pozitia 0)

 

echo strpos($string,$find,3);

se va afisa 5

 

pentru ca 'is' se gaseste si de la pozitia 5 in sirul 'This is a string…'

 

Dar sa gasim o metoda astfel incat sa putem afisa toate aparitiile lui $find in sirul $string

 

Pentru aceasta vom folosi o bucla while in care vom cauta in sirul $string cat timp cautarea nu da rezultat de eroare.

Pentru aceasta vom folosi dupa fiecare cautare si parametrul offset care va primi ca valoare ultima pozitie gasita + lungimea sirului de gasit $find, $find_length. Astfel dupa fiecare aflare a pozitiei lui $find se sare peste acea pozitie folosind offset-ul si tot asa pana cand nu se mai gaseste nici o aparitie a lui $find.

 

<?php

 

$offset=0;

$find = 'is';

$find_length = strlen($find);

$string = 'This is a string, and it is an example.';

 

while($string_position = strpos($string, $find, $offset))

{

echo '<b>'.$find .'</b>'. ' found at '. $string_position. '<br>';

$offset = $string_position + $find_length;

}

 

?>

Se afiseaza toate aparitiile lui 'is'

 

is found at 2
is found at 5
is found at 25

 

La ce putem folosi acest script?

In loc de un text oarecare asa cum este $find='is' se poate folosi preluarea dintr-un formular

$find=$_GET['user_name']

si se poate cauta numele introdus intr-un alt sir de caractere.

 

- 50 - Inlocuirea unui sir dintr-un subsir.

Daca dorim sa inlocuim un sir in alt sir dar dorim ca acest lucru sa nu se intample decat intr-o anumita portiune din sirul in care se cauta, atunci putem limita cautarea si inlocuirea doar la un subsir.

Pentru asta folosim functia substr_replace()

 

<?php

 

$string = 'This part don\'t search. This part search';

$string_new =  substr_replace($string, 'alex', 29, 4);

echo $string_new;

?>

 

Va afisa:

This part don't search. This alex search

 

pentru ca in sirul $string, 4 caractere de la pozitia 29 au fost inlocuite cu sirul 'alex'.

 

- 51 - Inlocuirea unui sir

str_replace();

 

Poate primi 3 parametri

- primul este sirul care se cauta si se inlocuieste

- al doilea este sirul cu care se inlocuieste

- al treilea este sirul in care se cauta

 

str_replace(looking for, to replace, string);

 

<?php

$string = 'This is string, and is an example.';

$new_string = str_replace('is', ' ', $string);

echo $new_string;

?>

 

Afiseaza:

Th string, and an example.

 

unde au fost inlocuite toate aparitiile lui 'is' cu ' '.

 

Putem merge mai departe si sa inlocuim si alte sectiuni din sirul $new_string:

 

<?php

$string = 'This is string, and is an example.';

$new_string = str_replace('is', ' ', $string);

$new_string = str_replace('string', ' ', $new_string);

echo $new_string;

?>

 

Se afiseaza

Th , and an example.

unde, pe rand, din sirul original au fost inlocuite sirurile 'is' si 'string' cu ' '.

Dar aceasta nu este o modalitate corecta de a inlocui in mod repetat siruri in alte siruri.

 

Functia str_replace poate accepta un vector cu elemente care trebuie inlocuite.

 

<?php

$find = array('is', 'string',' example');

$string = 'This is a string, and is an example.';

 

$new_string = str_replace($find, ' ', $string);

 

echo $new_string;

 

?>

 

Va afisa:

Th a , and an .

 

pentru ca au fost inlocuite toate aparitiile lui 'is', 'string' si 'example' cu sirul ' '.

 

Dar putem realiza simultan inlocuiri ale fiecarui element din vectorul $find cu cate un sir diferit.

 

Se poate crea in mod similar un alt vector cu elemente care vor inlocui pe cele din vectorul $find;

 

<?php

$find = array('is', 'string','example');

$replace = array('IS','STRING',' ');

$string = 'This is a string, and is an example.';

 

$new_string = str_replace($find, $replace, $string);

 

echo $new_string;

 

?>

 

Va afisa

ThIS IS a STRING, and IS an .

 

pentru ca fiecare element din $find a fost inlocuit cu elementul corespunzator din $replace.

 

Aceasta metoda este utila atunci cand dorim sa evitam aparitia unor cuvinte intr-un text, cand vrem sa ne asiguram ca nu sunt scrise expresii neplacute intr-un formular care trimite informatii intr-o zona publica a site-ului. Se poate in acest mod construi un filtru pentru "cuvinte rele".

 

- 52 - Cenzurarea cuvintelor

Vom prelua un text din formular si apoi folosind str_replace vom inlocui anumite cuvinte pe care nu le dorim in textul nostru.

 

<?php

$find = array('alex','billy','dale');

$replace = array('a**x','b***y','d**e');

 

 

if( isset($_POST["user_input"])  && !empty($_POST["user_input"]) )

{

//echo "works";

$user_input=$_POST["user_input"];

 

// $user_input_new = str_replace($find, $replace, $user_input); nu functioneaza pentru litere mari

$user_input_lc = strtolower($user_input);

$user_input_new = str_replace($find, $replace, $user_input_lc);

 

echo $user_input_new;

 

}

?>

 

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

<textarea name="user_input" rows="7" cols="30">

<?php

echo $user_input;

?>

 

</textarea><br><br>

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

</form>

 

Sa analizam codul de mai sus:

 

 

Din formular este trimisa informatia cu ajutorul vectorului POST in variabila $_POST['user_input']. Verificam apoi daca nu preluam o variabila vida cu ajutorul functiilor isset si empty

Salvam in variabila $user_input informatia preluata din formular.

Aplicam asupra lui $user_input functia str_replace pentru a inlocui cuvintele din vectorul $find cu cele din vectorul $replace   

Daca am lasa codul in aceasta forma nu ar putea inlocui acele cuvinte scrise cu litere mari. Prin urmare mai adaugam o variabila care va stoca textul preluat din formular dar transformat in litere mici user_input_lc.

In plus aplicam asupra ei functia str_replace. In acest mod inlocuirea cuvintelor, indiferent cu ce tip de litere sunt scrise, se va face doar pe textul scris cu litere mici si prin urmare va functiona intotdeauna.

 

Pentru textul introdus in formular:

I went out with Danny, Billy, Dale and Alex

 

Va afisa:

i went out with danny, b***y, d**e and a**x

 

 

 

 

Totusi, acum, suntem intr-o alta situatie care ar putea sa nu fie convenabila. De aceasta data textul afisat este transformat cu totul in litere mici si nu ne dorim ca toate cuvintele pe care le-am scris sa fie transformate. De aceea vom folosi din start functia str_ireplace care inlocuieste cuvintele indiferent daca sunt cu litere mari sau mici.  Prin urmare vom rescrie codul facand modificarea str_replace cu str_ireplace

 

<?php

$find = array('alex','billy','dale');

$replace = array('a**x','b***y','d**e');

 

 

if( isset($_POST["user_input"])  && !empty($_POST["user_input"]) )

{

//echo "works";

$user_input=$_POST["user_input"];

 

$user_input_new = str_ireplace($find, $replace, $user_input);

 

echo $user_input_new;

 

}

?>

 

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

<textarea name="user_input" rows="7" cols="30">

<?php

echo $user_input;

?>

 

</textarea><br><br>

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

</form>

                    

 

Pentru textul introdus in formular:

I went out with Danny, Billy, Dale and Alex

 

Va afisa:

I went out with Danny, b***y, d**e and a**x

 

53. Crearea unei aplicatii de tip Find and Replace

Scopul aplicatiei este de a descoperi modul in care se lucreaza cu functia substr_replace. Gasirea si inlocuirea unui sir de caractere se poate face foarte simplu folosind functia str_replace insa exista si situatii in care se cere utilizarea lui substr_replace. Vom incerca sa folosim substr_replace pentru gasirea si inlocuirea unui sir de caractere indiferent de cate ori apare in text.

Functia substr_replace este de forma

 substr_replace( sirul_in_care_se_inlocuieste, cuvantul_care_inlocuieste, pozitia_de_la_care_se_inlocuieste, numarul_de_caractere_inlocuite)  

 

astfel daca avem sirul "The big cat sat on the mat" si dorim sa inlocuim cat cu monkey atunci vom folosi functia substr_replace astfel:

<?php

echo substr_replace("The big cat sat on the mat","monkey",8,3);

?>

pentru ca am gasit pe pozitia 8(pornind de la 0) textul "cat" si acesta are lungimea de 3 caractere.

 

<?php

$offset = 0;

 

if( isset($_POST['text'])  && isset($_POST['searchfor'])  && isset($_POST['replacewith'] ) )

{

$text = $_POST['text'];

$search = $_POST['searchfor'];

$replace = $_POST['replacewith'];

$search_length = strlen($search);

 

if(!empty($text) && !empty($search) && !empty($replace))

{

//echo "ok";

 

while($strpos = strpos($text, $search, $offset))

{

$offset = $strpos + $search_length;

$text=substr_replace($text,$replace,$strpos,$search_length);

}

 

}

else

{

echo "please fill in all the fields";

}

 

}

?>

 

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

<textarea name="text" rows="6" cols="30">

 

<?php

  echo $text;

?>

 

 

</textarea> <br><br>

Search for:

<input type="text" name="searchfor"><br><br>

Replace with:

<input type="text" name="replacewith"> <br><br>

<input type="submit" value="Find and replace">

</form>

 

Sa analizam codul:

Mai intai verificam daca in formular au fost inserate informatii valide. Astfel verificam pentru fiecare camp elementul corespunzator din vectorul POST. Apoi colectam fiecare text in cate o variabila $text, $search si $replace.

De asemeni, tot pentru validare, le verificam daca nu cumva sunt vide, adica aplicam functia empty(). Daca toate cele 3 variabile exista si sunt nevide atunci trecem la prelucrarea propriu-zisa.

Ne asiguram ca avem variabila $offset initializata cu 0. Aceasta ne va folosi in momentul in care am gasit o aparitie a lui $search in $text si vrem sa pornim cautarea de dupa acea aparitie.

Astfel: pe masura ce gasim cate o aparitie a lui $search actualizam valoarea lui $offset prin adaugarea la valoarea lui $strpos lungimea lui $search. In acest fel urmatoarea cautare va porni dupa textul $search gasit in $text.

Dupa fiecare gasire a lui $search se realizeaza inlocuirea acestuia in $text cu $replace.

Se procedeaza astfel in bucla while pana cand nu se mai gasesc aparitii a lui $search in $text, adica atunci cand strpos($text,$search, $offset) returneaza false.

In final se afiseaza $text, fie in interiorul campului textarea fie separat.

 

58 Timestamps – functii pentru timpul si data, returnarea zilei, saptamanii, lunii sau anului

 

Timestamp sau timpul curent reprezinta o valoare numerica ce insumeaza numarul de secunde din 1 ianuarie 1970.

 

De ex pentru a vedea timpul curent putem afisa valoarea functiei time

echo time();

va afisa o valoarea de forma 1303897146 iar la fiecare reincarcare a paginii se va afisa noua valoare actualizata la secunda.

Daca am avea o pagina web in care dorim sa afisam la ce ora a fost afisat un anumit comentariu scris de un utilizator, o astfel de valoarea a timpului nu are avea nici o semnificatie.

Astfel

<?php

echo "Timpul curent este ".time();

?>

afiseaza

Timpul curent este 1303897146

dar nu reprezinta nimic pentru un utilizator obisnuit

 

Insa avem la dispozitie functia date() care primeste ca parametru un sir de caractere ce reprezinta formatul datei iar al doilea parametru, optional, este un numar ca cel de mai sus

De exemplu, pentru data de mai sus care nu e neaparat data curenta

<?php

  echo date("dD M Y :h i s",1303897146);

?>

obtinem rezultatul

27Wed Apr 2011 :12 39 06

unde

d este parametrul numarul zilei,

D numele zilei,

m  numarul lunii,

M numele lunii

y anul din doua cifre

Y anul din patru cifre

h ora

i minutul

s secunda

 

Functia date poate fi folosita atat pentru a arata data curenta

<?php

  echo date("D M Y");

?>

 

sau timpul curent

<?php

  echo date("h i s");

?>

sau orice fel de combinatie: date("d") pentru zi, date("h") pentru ora, date("s") pentru secunda etc.

 

De asemeni poate fi folosita pentru extragerea datei dintr-un numar oarecare, de exemplu o data din trecut

 

<?php

$data= time()-60000000;

  echo date("d m Y",$data);

?>

 

Va afisa

15 05 2009

 

Folosind date() si functia maketime() se poate crea o valoare reprezentand un moment in timp din trecut sau viitor, in secunde.

<?php

echo $tomorrow  = mktime(0, 0, 0, date("m")  , date("d")+1, date("Y"));

echo "<br>";

echo $lastmonth = mktime(0, 0, 0, date("m")-1, date("d"),   date("Y"));

echo "<br>" ;

echo $nextyear  = mktime(0, 0, 0, date("m"),   date("d"),   date("Y")+1);

?>

Va afisa

1270760400
1267999200
1302210000

 

59 – Modificarea valorilor pentru timp

 

Sa presupunem ca am aflat timpul curent si apoi il afisam intr-un format usor de inteles:

<?php

$time = time();

$actual_time = date('D M Y @ H :i : s ', $time);

echo $actual_time;

?>

 

Sa modificam timpul cu un minut in urma

 

<?php

$time = time();

$actual_time = date('D M Y @ H :i : s ', $time);

$time_modified = date('D M Y @ H :i : s ', $time - 60);

echo "Timpul actual este ". $actual_time. " iar timpul modificat cu 60 de secunde in urma este ".$time_modified;

?>

 

Se va afisa

Timpul actual este Thu Apr 2010 @ 19 :06 : 23 iar timpul modificat cu 60 de secunde in urma este Thu Apr 2010 @ 19 :05 : 23

 

Dar daca am dori sa adaugam sau sa scadem din parametrul timp numarul de secunde corespunzator unei saptamani. Ar trebui sa facem noi calculele adica sa adaugam 7 zile * 24 ore * 3600 secunde..

 

<?php

 $time=time();

echo date('d M Y @ H :i : s ', $time);

echo '<br>';

echo $time_modified = date('d M Y @ H :i : s ', $time - 7*24*60*60);

?>

Va afisa

08 Apr 2010 @ 19 :30 : 53
01 Apr 2010 @ 19 :30 : 53

 

Dar exista o functie care primeste ca parametru un sir de caractere si-l transforma in numarul de secunde corespunzator adaugat la data curenta. De ex. strtotime("+ 1 week") va returna numarul de secunde corespunzator datei curente la care se adauga o saptamana.

 

<?php

$time = time();

$actual_time = date('d M Y @ H :i : s ', $time);

$time_modified = date('d M Y @ H :i : s ', strtotime('-1 week'));

echo "Timpul actual este ". $actual_time. " iar timpul modificat cu o saptamana in urma este ".$time_modified;

?>

 

Va afisa

Timpul actual este 08 Apr 2010 @ 19 :17 : 28 iar timpul modificat cu o saptamana in urma este 01 Apr 2010 @ 19 :17 : 28

 

Putem adauga o ora '+1 hour', un an '+1 year' sau putem face combinatii 1 saptamana 2 ore si 30 de secunde : strtotime('+1 week 2 hours 30 seconds');

Astfel:

<?php

$time = time();

$actual_time = date('d M Y @ H :i : s ', $time);

$time_modified = date('d M Y @ H :i : s ', strtotime('+1 week 2 hours 30 seconds'));

echo "Timpul actual este ". $actual_time. " iar timpul modificat cu o 1 saptamana 2 ore si 30 de secunde este ".$time_modified;

?>

 

Va afisa

Timpul actual este 08 Apr 2010 @ 19 :22 : 20 iar timpul modificat cu o 1 saptamana 2 ore si 30 de secunde este 15 Apr 2010 @ 21 :22 : 50

 

60 Generarea numerelor aleatoare

Pentru a genera numere aleatoare putem apela simplu rand();

<?php

$rand = rand();

echo $rand;

?>

 

Pentru a gasi limita maxima superioara a numerelor generate aleatoriu apelam functia getrandmax();

<?php

$rand = rand();

$max = getrandmax();

echo $rand.'/'.$max;

?>

 

Va afisa

14138/32767

 

Ceea ce inseamna ca numarul generat 14138 este unul dintre numerele mai mici sau egale cu 32767 care este limita superioara a numerelor aleatorii.

Daca dorim sa generam numere in interiorul unui interval atunci va trebui sa specificam limita de jos si pe cea de sus. De exemplu sa simulam rostogolirea unui zar. Avem nevoie de numerele de la 1 la 6 prin urmare apelam functia rand(1,6);

<?php

if( isset($_POST['roll']) )

{

$rand = rand(1,6);

echo 'you rolled a '.$rand;

}

 

?>

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

<input type="submit" name="roll" value="Roll dice">

</form>

 

61 Variabila $_SERVER Script Name

Variabila $_SERVER este de fapt un vector care contine diferite informatii despre mecanismul de functionare a serverului, a fisierelor php, a userilor care acceseaza serverul..

De exemplu ne intereseaza numele fisierului in care se afla scriptul creat de noi. Este util atunci cand dorim ca fisierul nostru sa poata rula indiferent de numele primit. De exemplu cand avem de-a face cu formulare.

 

<?php

echo $script_name = $_SERVER['SERVER_NAME'];

?>

 

Sa cream un fisier care sa contina un formular: header.inc.php

 

<form action="" method="POST">

<input type="submit" name = "submit" value="Submit">

</form>

 

Sa includem acest fisier in index.php si in anotherpage.php. Fiecare din ele vor verifica daca a fost apasat butonul submit si in caz ca a fost apasat vor afisa: index.php va afisa Process1 iar anotherpage.php va afisa Process2

 

index.php:

<?php

include 'header.inc.php';

 

if( isset($_POST['submit']) )

{

echo 'Process 1';

}

?>

 

anotherpage.php

<?php

include 'header.inc.php';

 

index.php:

<?php

include 'header.inc.php';

if( isset($_POST['submit']) )

{

echo 'Process 2';

}

?>

 

?>

 

Ne intereseaza ca formularul sa functioneze in ambele fisiere. Avem un formular inclus in doua fisiere dar la action="" nu putem specifica decat un singur fisier.

Sa incercam sa completam in fisierul header.inc.php, in formular,  la action cu numele fisierului index.php

 

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

<input type="submit" name = "submit" value="Submit">

</form>

 

Atunci cand vom apela index.php si vom apasa Submit va afisa Process 1 ceea ce este corect. Dar daca apelam anotherpage.php si apasam submit se va incarca tot index.php pentru ca doar acesta este specificat la action.

 

 

Cum putem specifica si index.php atunci cand este apelat fisierul index.php dar si anotherpage.php cand este apelat acesta din urma. Solutia este sa inseram un script php intre ghilimelele de la action : action = "<?php ?>" iar in acest script sa generam dinamic numele fiserului care este apelat.

 

Vom modifica fisierul header.inc.php astfel incat sa-si updateze dinamic numele de la action.

 

<?php

$script_name = $SERVER['SCRIPT_NAME'];

?>

 

<form action="<?php echo $script_name; ?>" method="POST">

<input type="submit" name = "submit" value="Submit">

</form>

 

Astfel atunci cand vom apela index.php si vom da submit se va afisa Process 1 si va ramane in index.php iar pentru anotherpage.php se va afisa Process 2 si va ramane tot pe anotherpage.php. Daca verificam codul sursa pentru index.php dupa submit vom vedea ca numele "index.php" apare in formular la action si la fel "anotherpage.php"  pentru fisierul anotherpage.php.

 

O utilizarea a acestei metode este sa redirectam un user care se logeaza pe aceeasi pagina pe care este formularul cu nume si parola. Deoarece de cele mai multe ori caseta de logare e in partea de sus a paginii vom dori sa utilizam pagina si dupa logare. De aceea dupa ce numele si parola s-au dovedit corecte vom face o redirectare catre aceeasi pagina, eventual cu un mesaj de bun venit cu numele utilizatorului intr-un colt din pagina.

 

62 Variabila Server Host Name

Folosirea variabilei $_SERVER['HTTP_HOST'] pentru a utiliza numele host-ului indiferent unde upload-am site-ul. Vom folosi un exemplu pentru un folder de imagini 'images'

 

conf.inc.php:

 

<?php

$host = $_SERVER['HTTP_HOST'];

$images = $host . '/images/' ;

?>

 

index.php:

<?php

require 'conf.inc.php';

echo ' <img src=" ' .  $images .  ' header.gif" />';

?>

 

63 Functia header() pentru modificarea header-ului trimis browser-ului.

O vom folosi pentru redirectarea catre unei alte pagini folosind parametrul Location:

 

index.php:

 

<h1>my page</h1>

<?php

header('Location: http://www.google.com');

?>

 

nu este corect pentru ca a fost trimis informatie html (<h1>my page </h1>) inainte de functia header

 

 

index.php:

 

<?php

$redirect_page = 'http://www.google.com';

$redirect = true;

 

if($redirect==true)

{

header('Location: '. $redirect_page);

}

 

?>

 

 

64. Functia ob_start pentru crearea buffer-ului in care se stocheaza header-ul paginii.

Folosind functia ob_start putem scrie inainte de functia header() tag-uri HTML fara sa primim erori cu conditia ca ob_start() sa fie scrisa chiar la inceput inaintea oricarui tag.

 

index.php

 

<?php

ob_start();

?>

 

<h1>My page </h1>

This is my page

 

<?php

$redirect_page = 'http://www.google.com';

$redirect = true;

 

if($redirect==true)

{

header('Location: '. $redirect_page);

}

 

ob_end_flush();//sterge buffer-ul dar mai intai afiseaza continutul acestuia in pagina - recomandata

 

//ob_end_clean();

//sterge buffer-ul si nu afiseaza nimic

 

?>

 

65. Obtinerea IP-ului vizitatorilor unei pagini

De exemplu dorim sa blocam accesul unui IP

 

conf.inc.php:

<?php

$ip_address = $_SERVER['REMOTE_ADDR'];

$ip_blocked = array( '127.0.0.1' , '100.100.100.100' );

?>

 

index.php

<?php

require 'conf.inc.php';

 

foreach($ip_blocked as $ip)

{

if($ip == $ip_address)

             {

                          die('Your IP address, ' . $ip_address . ' has been blocked.');

}

}

 

//echo $ip_address;

?>

 

<h1>Welcome</h1>

 

 

deoarece IP-ul local este chiar 127.0.0.1 va afisa mesajul 'Your IP address...'

 

 

66 O metoda mai buna de a obtine IP-ul unui user

 

<?php

$http_client_ip = $_SERVER['HTTP_CLIENT_IP']; // pentru a verifica daca user-ul este in spatele unui router care ofera un ip extern

 

$http_x_forwarded_for = $_SERVER['HTTP_X_FORWARDED_FOR']; // pentru a verifica daca userul foloseste un proxy

 

$remote_addr = $_SERVER['REMOTE_ADDR']; // ip-ul propriu-zis

 

if( !empty($http_client_ip) )

{

$ip_address = $http_client_ip;

}

else if( !empty($http_x_forwarded_for) )

{

$ip_address = $http_x_forwarded_for;

}

else

{

$ip_address= $remote_addr;

}

 

echo $ip_address;

?>

 

 

67 Detectarea browser-ului user-ului

Ne asiguram ca in folderul PHP avem urmatoarele setari

Identificam fisierul browscap.ini. Daca nu-l avem il download-am de pe google.

In php.ini gasim urmatoarea setare pe care o modificam astfel:

 

[browscap]

browscap = "C:\xampp\php\browscap.ini"

 

Se restarteaza serverul Apache

 

In editor vom scrie:

index.php:

 

<?php

$browser = get_browser(null, true);

 

//print_r($browser); // afisam toate informatiile oferite de functia get_browser()

//echo $browser['browser']; //afisam exact numele browser-ului

 

$browser = strtolower($browser['browser']);

if($browser != 'chrome')

{

echo 'You are not using Google Chrome, please do!';

}

 

?>

 

69 Folosirea variabilelor $_GET

Acestea se preiau din campurile formularelor care au ca metoda valoarea GET. Un formular cu metoda GET va trimite datele introduse in campurile sale si in adresa URL care se formeaza prin apasarea butonului submit si care este afisata mai apoi in bara de adrese.

 

Inainte de preluarea datelor din formular se verifica urmatoarele:

1. Exista variabilele sau s-a apasat butonul submit?

2. Sunt nevide sau valoarea este NULL?

3. Sunt afisate inapoi in pagina pentru utilizator

 

 

index.php:

 

<?php

if ( isset($_GET['day']) && isset($_GET['date']) && isset($_GET['year']) )

{

    $day = $_GET['day'];

  $date = $_GET['date'];

  $year = $_GET['year'];

    if(!empty($day) && !empty($date) && !empty($year) )

    {

    echo 'It is '.$day.' '.$date. ' '. $year;

    }

    else

    {

    echo "Fill in all the fields";

     }

 

}

?>

<form action = "index.php" method = "GET">

Day: <br> <input type="text" name="day"> <br>

Date: <br> <input type="text" name="date"> <br>

Year: <br> <input type="text" name="year"> <br>

<br> <input type="submit" value="Submit"> <br>

</form>

 

70 Folosirea variabilelor POST

Exista situatii cand nu dorim ca informatiile din formular sa apara in bara de adrese asa cum se intampla in cazul metodei GET. In acest caz folosim POST

Vom crea un camp de tip password si vom verifica daca parola introdusa este egala cu un text predefinit $match

 

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

Password: <br>

<input type="password" name="password"><br><br>

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

</form>

 

<?php

$match = 'pass123';

 

if(isset($_POST['password']))

{

$password= $_POST['password'];

if(!empty($password))

{

if($password==$match)

{

echo 'That is correct';

}

else

{

echo 'That is incorrect';

}

}

}

 

 

?>

 

 

71 Folosirea datelor din formulare.

72 htmlentities() pentru securitate

 Pana acum am procesat informatiile din formulare folosind acelasi fisier php specificand numele acestuia la action="index.php" dar se poate specifica si un alt nume de fisier php care va urma sa prelucreze aceste date

 

vom lucra cu formularul de mai sus cu introducerea datei

 

In interiorul campurilor utilizatorul poate introduce absolut orice informatie de tip text, inclusiv tag-uri HTML. Poate nu intentionat dar se poate si intentionat. Cum tag-urile HTML pot fi interpretate de browser, atunci cand informatiile sunt afisate in pagina, acesta va afisa si obiectele HTML corespunzatoare. De aceea e o situatie periculoasa din punct de vedere a securitatii.

Pentru fiecare variabila $day, $date, $year vom folosi functia htmlentities() care asigura ca tag-urile HTML nu sunt transmise in forma initiala catre browser ci sunt prelucrate pentru a fi afisate caracter cu caracter.

 

<?php

if ( isset($_GET['day']) && isset($_GET['date']) && isset($_GET['year']) )

{

    $day =htmlentities( $_GET['day']);

  $date = htmlentities( $_GET['date']);

  $year = htmlentities( $_GET['year']);

    if(!empty($day) && !empty($date) && !empty($year) )

    {

    echo 'It is '.$day.' '.$date. ' '. $year;

    }

    else

    {

    echo "Fill in all the fields";

     }

 

}

?>

<form action = "index.php" method = "GET">

Day: <br> <input type="text" name="day"> <br>

Date: <br> <input type="text" name="date"> <br>

Year: <br> <input type="text" name="year"> <br>

<br> <input type="submit" value="Submit"> <br>

</form>

 

 

In acest mod daca in campul day am scrie <iframe src="page"> </iframe>, in loc sa afiseze in browser un element iframe asa cum s-ar fi intamplat fara htmlentities, acum afiseaza exact ceea ce am scris in campul din formular: <iframe src=\"page\"> </iframe>

 

73. Sesiuni php

Sesiunile in php ca si cookie-urile sunt metode de a transimite informatii de la o pagina la alta sau de a regasi anumite informatii atunci cand un utilizator acceseaza o anumita pagina.

Cookie-urile sunt informatii stocate in fisiere pe calculatorul utilizatorului si prin urmare acestea pot fi accesate oricand si chiar li se poate schimba informatia. Deci nu pot fi folosite pentru situatii cand este necesara securizarea informatiilor.

Sesiunile sunt variabile pe server si accesul la acestea nu este direct deci nu pot fi schimbate de un utilizator oarecare

Vom folosi un fisier set.php pentru setarea unei variabile session si fisierul view.php pentru vizualizarea acesteia

 

set.php:

 

<?php

session_start();

$_SESSION['name']='Alex';

?>

 

Am pornit stocarea de variabile $_SESSION pe server si am setat una cu numele 'name' si valoarea 'Alex'. Din acest moment orice pagina va avea acces la aceasta variabila pentru ca nu va disparea la reincarcarea unei alte pagini.

 

Este echivalentul unui vector cu informatii din limbajele de programare clasice care este disponibil pe toata durata executiei programului.

 

view.php:

 

<?php

session_start();

echo $_SESSION['name'];

 

?>

 

O situatie cand variabilele SESSION sunt utile este atunci cand un user s e logeaza si navigheaza prin toata pagina. Atunci fiecare pagina pe care intra va sti ce utilizator este pe baza informatiilor stocate in $_SESSION care este un vector permanent pe durata logarii.

 

Vom seta o variabila 'username' in fisierul set.php

<?php

session_start();

$_SESSION['user_name']='Alex';

?>

 

Astfel view.php mai poate fi scris:

 

<?php

session_start();

if( isset($_SESSION['user_name']) )

{

echo 'Welcome, '. $_SESSION['user_name'];

}

else

{

echo 'Please log in.';

}

?>

 

Daca este incarcat in browser primul fisier set.php care seteaza variabila $_SESSION['user_name'] cu valoarea 'Alex' atunci din view.php se va putea accesa aceasta variabila si in acest mod se poate afla daca un utilizator care acceseaza pagina este logat.

 

74 Stergerea unei sesiuni – Unsetting sessions

La ce ar putea folosi stergerea unei sesiuni? De exemplu pentru golirea cosului de cumparaturi al unui user intr-un magazin virtual.

 

Avem deja fisierul set.php

 

<?php

session_start();

$_SESSION['user_name']='Alex';

?>

 

Vom crea un fisier unset.php pentru stergerea sesiunii.

 

<?php

session_start(); // se porneste sesiunea chiar si atunci cand dorim sa stergem

unset($_SESSION['user_name']);

?>

 

In acest mod am sters variabila 'user_name' din $_SESSION.

 

Dar daca am seta mai multe variabile in $_SESSION? De ex in set.php mai adaugam si varsta utilizatorului

 

set.php:

 

<?php

session_start();

$_SESSION['user_name']='Alex';

$_SESSION['age']=21;

?>

 

 

Modificam view.php pentru a afisa si $_SESSION['age']:

 

<?php

session_start();

echo 'Welcome, '. $_SESSION['user_name']. '. You are  '. $_SESSION['age']. '! ';

?>

 

Daca acum vom incarca unset.php se va sterge variabila 'user_name' insa va ramane variabila 'age'. Cand este incarcat view.php acesta va afisa variabila 'age'.

 De aceea vom folosi session_destroy() pentru a sterge toate variabilele.

 

unset.php

 

<?php

session_start();

session_destroy();

?>

 

75. Crearea cookie-urilor. Variabilele $_SESSION dureaza cam cat timp este accesata pagina web in timp ce cookie-urile pot dura mult mai mult. In ele pot fi pastrate preferintele privind modul in care este accesat site-ul si alte informatii.

 

Crearea unui cookie

set.php

<?php

setcookie('username','alex',time()+10);

?>

 

Am creat un cookie denumit 'username' setat cu valoarea 'alex' si care va avea durata de viata de 10 secunde

 

Citirea unui cookie

 

view.php

<?php

echo $_COOKIE['username'];

?>

 

Daca pagina view.php este accesata mai tarziu de 10 secunde dupa crearea cookie-ului atunci valoarea cookie-ului nu va mai fi afisata.

 

Cum cookie-urile sunt stocate pe calculatorul user-ului, fiind astfel si usor de modificat, nu dorim sa stocam informatii importante privind securitatea logarii sau in general a site-ului.

 

76 Stergerea unui cookie

 

Vom seta un cookie care sa dureze mai mult, sa spunem 1000 secunde

set.php

<?php

setcookie('username','alex',time()+1000);

?>

 

Stergerea unui cookie este asemanatoare cu setarea unuia. Doar ca se seteaza ca durata de viata sa fie 0 adica time() sau time() – 1 etc.

 

De exemplu setam din nou cookie-ul de mai sus dar cu durata de viata cu 1000 de secunde in inapoi in timp si in felul asta l-am sters,

 

unset.php

 

<?php

setcookie('username','alex',time()-1000);

?>

 

Daca se doreste ca la logout sa se stearga cookie-urile atunci de butonul logout se poate lega o astfel de operatie pentru a sterge datele utilizatorului ramase pe calculator.

 

77 Lucrul cu fisiere.

Mai intai se deschide fisierul si apoi fie se scrie, fie se citesc date din el. Prin urmare exista diferite atribute corespunzatoare fiecarui mod de interactiune:

w   ritting - scriere

r    eading - citire

a   ppend - adaugare

 

file.php:

 

<?php

// Mai intai se creaza un handler pentru fisierul care va fi deschis, in acest caz names.txt.

$handle = fopen('names.txt','w');

 

fwrite($handle,'Alex'."\n");

//daca vrem sa mai adaugam o linie concatenam "\n" la linia anterioara

fwrite($handle,'Billy');

fclose($handle);

echo('Written');//un mesaj de confirmare a scrierii in fisier

?>

 

De fiecare data cand accesam file.php se descide names.txt si se rescrie intreg continutul. Astfel daca am incerca sa rulam file.php inca o data si sa adaugam un nou nume in fisier, toate celelalte se sterg, ramanand ultimul nume adaugat.

 

78 Adaugarea de date intr-un fisier

Sa presupunem ca am adaugat doua linii intr-un fisier text names.txt

Alex

Billy

si am folosit fisierul file.php

 

<?php

$handle = fopen('names.txt','w');

fwrite($handle,'Alex'."\n");

fwrite($handle,'Billy'."\n");

fclose($handle);

echo('Written');

?>

 

Sa incercam sa adaugam un alt nume, 'Steven':

file.php:

<?php

$handle = fopen('names.txt','a');

fwrite($handle,'Steven'."\n");

fclose($handle);

?>

 

In names.txt vom avea

Alex

Billy

Steven

 

Sa adaugam numele dintr-un formular

Vom modifica file.php:

 

<?php

if( isset($_POST['name']) )

{

$name = $_POST['name'];

if(!empty($name))

{

 

$handle = fopen('names.txt','a');

fwrite($handle,$name."\n");

 

}

else

{

echo 'Type a name';

}

 

}

?>

 

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

Name: <br>

<input type="text" name="name"><br><br>

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

</form>

 

79 Citirea dintr-un fisier

Vom folosi functia file() care transforma toate liniile dintr-un fisier text in elemente ale unui vector:

 

<?php

if( isset($_POST['name']) )

{

$name = $_POST['name'];

if(!empty($name))

{

//scrierea in fisier

$handle = fopen('names.txt','a');

fwrite($handle,$name."\n");

 

//citirea din fisier

echo 'Numele din fisier sunt: ';

$readin = file('names.txt');

 

foreach($readin as $fname)

{

echo trim($fname). ', ';

}

// sfarsit citire din fisier

}

else

{

echo 'Type a name';

}

 

}

?>

 

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

Name: <br>

<input type="text" name="name"><br><br>

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

</form>

 

 

Pentru a nu apare dupa ultimul nume din lista virgula, vom incerca sa numaram cate nume sunt in fisier si sa nu adaugam virgul dupa ultimul nume. Astfel citirea din fisier poate fi rescrisa:

 

//citirea din fisier

echo 'Numele din fisier sunt: ';

 

$count = 1;

$readin = file('names.txt');

$readin_count = count($readin);

 

foreach($readin as $fname)

{

echo trim($fname);

if($count < $readin_count)

{

echo ', ';

}

$count++;

}

// sfarsit citire din fisier

 

80 Functia explode folosind citirea din fisiere

Atunci cand citim dintr-un fisier siruri de caractere si dorim sa le despartim in cuvinte avem nevoie sa eliminam delimitatorii, fie acestia spatii sau virgule sau orice alt caracter.

Sa luam fisierul text names.txt care contine numele mai multor persoane despartite cu virgula

Alex, Billy, Peter, Daniel, Dale, Sandra

 

<?php

$filename='names.txt';

$handle = fopen($filename,'r');

echo fread($handle, filesize($filename) );

?>

Ne afiseaza continutul unui fisier.

 

Daca am fi dorit sa afisam doar primele 5 caractere am fi putut folosi

echo fread($handle, 5);

 

In loc sa-l afisam vom prelua sirul de caractere intr-o variabila. Apoi vom folosi functia explode pentru a crea un vector in functie de despartitorii din sir, in cazul nostru virgulele.

 

<?php

$filename='names.txt';

$handle = fopen($filename,'r');

$datain = fread($handle, filesize($filename) );

 

$names_array = explode (',' ,  $datain);

 

foreach($names_array as $name)

{

echo  $name.'<br>';

}

?>

 

 

Am putea afisa orice element din vector. De exemplu am putea afisa doar primul nume:

echo $names_array[0];

 

81. Functia implode folosind scrierea in fisiere

Pornind de la un vector de siruri de caractere, dorim sa cream un sir de caractere care sa contina toate sirurile din vector.

 

<?php

$names_array = array('Alex','Billy', 'Dale');

$string = implode(', ',$names_array);

echo $string;

//sau inseram intr-un fisier la fel ca in exemplele de mai sus

$file_name='names.txt';

$handle=fopen($file_name,'a');

fwrite($handle,$string);

fclose($handle);

?>

 

82-83 Lucrul cu fisiere – listarea continutului unui folder

Vom lista fisierele dintr-un folder si apoi vom crea cate un link catre fiecare dintre ele

Vom avea un folder denumit 'files' cu cateva fisiere text pentru exemplificare

 

<?php

$directory = 'files';

if($handle =opendir($directory.'/'))

{

echo 'Looking inside \''. $directory.'\':<br>';

  while($file=readdir($handle)){

    echo $file.'<br>';

  }

}

?>

 

Va afisa

.

..

firstfile

secondfile

thirdfile

 

Daca dorim sa nu afisam si cele doua linii . si .. atunci vom pune conditii la afisare

 

<?php

$directory = 'files';

if($handle =opendir($directory.'/'))

{

echo 'Looking inside \''. $directory.'\':<br>';

  while($file=readdir($handle)){

   if($file!='.' && $file !='..') {

    echo $file.'<br>';

    }

  }

 

}

?>

 

Sa adaugam si link-urile

<?php

$directory = 'files';

if($handle =opendir($directory.'/'))

{

echo 'Looking inside \''. $directory.'\':<br>';

  while($file=readdir($handle)){

   if($file!='.' && $file !='..') {

    echo '<a href="' . $directory . '/' . $file . '">' . $file . '</a><br>';

    }

  }

 

}

?>

 

Se poate folosi si pentru imagini prin schimbarea modului de afisare

in loc de

    echo '<a href="' . $directory . '/' . $file . '">' . $file . '</a><br>';

 

se va afisa

    echo '<img src="' . $directory . '/' . $file . '"><br>';

 

 

Sau putem afisa imaginile ca link-uri

 

<?php

$directory = 'files';

if($handle =opendir($directory.'/'))

{

echo 'Looking inside \''. $directory.'\':<br>';

  while($file=readdir($handle)){

   if($file!='.' && $file !='..') {

    echo '<a href="' . $directory . '/' . $file . '">' . '<img width=100 src="' . $directory . '/' . $file . '">'  . '</a><br>';

    }

  }

 }

?>

 

84 Verificarea daca exista un fisier inainte de a-l incarca pe server

Util de exemplu cand cream nume aleatoare pentru fisiere. Este bine sa verificam daca nu cumva exista deja un nume la fel.

 

<?php

$filename_or='image.jpg';

echo $filename = rand(1000,9999).md5($filename_or).rand(1000,9999);

?>

 

Trebuie acum sa verificam daca in timp nu cumva a mai fost generat un nume de fisier identic, oricat ar parea de improbabil. Pentru aceasta vom folosi functia file_exists().

 

<?php

$filename = 'file.txt';

if(file_exists($filename)){

echo 'File already exists';

}

else{

$handle = fopen($filename, 'w');

fwrite($handle,'Nothing');

fclose($handle);

}

?>

 

 

85-86 Lucru cu fisiere – stergerea si redenumirea fisierelor

 

Vom avea pentru exemplificare doua fisiere: filetodelete.txt si filetorename.txt

 

pentru stergere folosim functia unlink()

 

<?php

$filename= 'filetodelete.txt';

if(unlink($filename) ){

echo 'File <strong>'. $filename .' </strong> has been deleted';

}

else{

echo 'File cannot be deleted';

}

 

?>

 

Dupa ce se sterge fisierul, daca mai incarcam o data file.php vom primi un warning. De aceea putem pune in fata functiei de stergere caracterul @ pentru a evita warning-urile

if(@unlink($filename)...

 

Vom redenumi acum cel de-al doilea fisier folosind generarea aleatorie de caractere.

 

<?php

$filename= 'filetorename.txt';

$rand = rand(10000,99999);

 

//trebuie sa adaugam noi extensia fisierului, nu este adaugata automat

 

if( @rename($filename, $rand.'.txt') ){

echo 'File <strong>'.$filename. '</strong> has been renamed to <strong>' . $rand.'.txt </stong>';

} else {

echo 'Error renaming';

}

?>

 

87-88 Upload-area fisierelor Basics

Vom crea un folder 'uploads' pentru exemplificare unde vom stoca fisierele upload-ate

Vom folosi vectorul global $_FILES pentru a prelua numele fisierului, dimensiunea, tipul, numele stocat in locatia temporara

Pentru aceasta vom accesa un vector asociativ din interiorul lui folosind numele campului input din formular, in acest caz 'file'.

 

<?php

echo $name = $_FILES['file']['name'];

//$size =  $_FILES['file']['size'];

//$size =  $_FILES['file']['type'];

 

 $tmp_name = $_FILES['file']['tmp_name'];

 //echo $tmp_name;

 

if(isset($name)){

      if(!empty($name)){

       

          $location = 'uploads/';

 

          if(move_uploaded_file($tmp_name, $location.$name)){

          echo 'Uploaded';

          }

             else{

   echo 'There was an error';

             }

 

      //echo 'ok';

      }else{

      echo 'Please choose a file. ';

      }

}

?>

 

<form action ="file.php" method="POST" enctype="multipart/form-data">

<input type="file" name="file"><br><br>

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

</form>