Sunteți pe pagina 1din 53

PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

2. Programarea web în limbajul PHP


Elemente de sintaxă ale limbajului PHP
Un script PHP poate fi plasat oriunde în interiorul unui fișier HTML.
Scriptul PHP începe cu <?php și se termină cu ?>:
<?php
// cod scris în PHP
?>
Extensia predefinită a unui fișier PHP este " .php".
În mod obișnuit , un fișier PHP conține taguri HTML și instrucțiuni de
cod PHP.
<!DOCTYPE html>
<html>
<body>
<h1>My first PHP page</h1>
<?php
echo "Hello World!";
?>
</body>
</html>

Notă : Instrucțiunile PHP se încheie cu simbolul ”;”.


Comentarii
Un comentariu în cod PHP este o linie care nu este citită/ executată ca
parte a programului. Singurul său scop este de a fi citit de către cineva
care analizează codul.
Comentariile pot fi folosite pentru:

16
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

• Alte persoane să înțeleagă scopul în care au fost scrise anumite


linii de cod
• Autorul codului/ programatorul să își poată aminti de ce a scris
respectivele instrucțiuni. Cei mai mulți programatori trăiesc
experiența de a reveni la propria lor muncă un an sau doi mai
târziu și de a constata că au uitat de ce au scris anumite linii de
cod .
Există mai multe posibilități de a realiza comentarii în PHP:
<!DOCTYPE html>
<html>
<body>

<?php
// Acesta este un comentariu uni-linie
# Acesta este de asemenea un comentariu
uni-linie /* Acesta este format din mai multe
linii de comentariu bloc care se întinde pe mai
multe linii */
// Comentariile pot fi folosite pentru a
”anula” //anumite secvențe de cod
$x = 5 /* + 15 */ + 5;
echo $x;
?>

</body>
</html>

Case-sensitivity în PHP
În PHP, toate cuvintele cheie (de exemplu if, else, while, echo, etc.),
clase, funcții și funcții definite de utilizator nu sunt sensibile la scrierea
cu litere mici sau cu litere mari.
În exemplul de mai jos, cele 3 instrucțiuni echo sunt corecte (și
echivalente, ca rezultat):
Exemplu:
<!DOCTYPE html>
<html> <body>
<?php
ECHO "Hello World!<br>";
echo "Hello World!<br>";
EcHo "Hello World!<br>";
?> </body>
</html>

Cu toate acestea, identificatorii de variabile sunt case-sensitive.


17
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

În exemplul de mai jos doar prima instrucțiune va afișa valoarea


variabilei $color, deoarece $color, $COLOR și $coLOR sunt tratate ca
variabile distincte.
Exemplu:
<!DOCTYPE html>
<html>
<body>
<?php
$color = "red";
echo "My car is " . $color . "<br>";
echo "My house is " . $COLOR . "<br>";
echo "My boat is " . $coLOR . "<br>";
?>
</body>
</html>

Notă: Identificatorii de variabile sunt case-sensitive.

Variabile PHP
Variabilele reprezintă ”containere” pentru memorarea informațiilor.
Crearea (declararea ) variabilelor PHP
În PHP, un identificator de variabilă începe cu simbolul $, urmat de
numele propriu-zis al variabilei:
Exemplu:
<?php
$txt = "Hello world!";
$x = 5;
$y = 10.5;
?>

După execuția instrucțiunilor de mai sus, variabila $txt va memora


valoarea Hello world!, variabila $xva memora valoarea 5, iar variabila
$y va memora valoarea 10.5.
Notă: La atribuirea unei valori de tip șir de caractere, valoarea trebuie
încadrată între ghilimele.
Spre deosebire de alte limbaje de programare, în PHP nu există o
instrucțiune de declarare a variabilelor. Aceasta este creată în momentul
în care i se atribuie prima valoare.
Tratați variabilele ca și containere pentru stocarea informațiilor!

18
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Un identificator de variabilă poate fi scurt(x sau y) sau poate fi


descriptiv(age, carname, total_volume).
Reguli pentru identificatorii de variabile PHP:
Identificatorul variabilei începe cu simbolul $, urmat de numele
variabilei
• Numele variabilei trebuie să înceapă cu o literă sau cu simbolul
”_”
• Numele variabilei nu poate să înceapă cu o cifră
• Numele variabilei poate conține doar caractere alfa-numerice
(A-z, 0-9) și simbolul ”_”
• Numele de variabile sunt case-sensitive ($age și $AGE reprezintă
variabile distincte)
Variabile de ieșire
Instrucțiunea echo este adesea utilizată pentru a afișa date pe ecran.
Următorul exemplu evidențiază modul în care se va afișa un text și
valoarea unei variabile pe ecran:
<?php
$txt = "PHP-Schools";
echo "I love $txt!";
?>
Următorul exemplu produce același rezultat ca exemplul anterior:
<?php
$txt = "PHP-Schools";
echo "I love " . $txt . "!";
?>
Exemplul de mai jos va afișa suma valorilor stocate în 2 variabile x și y:
<?php
$x = 5;
$y = 4;
echo $x + $y;
?>
Mai multe informații găsiți la adresa:
http://www.w3schools.com/php/php_variables.asp

În limbajul PHP tipurile de date nu sunt foarte clar utilizate!


Limbajul PHP nu necesită declararea tipurilor de date. În exemplul
de mai sus, observați că variabilele x și y nu au fost declarate înaintea
utilizării lor, nu au fost asociate tipuri de date acestor variabile.

19
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

PHP convertește automat variabila la tipul corect de date, în funcție


de valoarea care i-a fost atribuită.
În alte limbaje, cum ar fi C, C++ și Java, programatorii trebuie să declare
numele și tipul de date al variabilei înainte de a o utiliza. PHP suportă
următoarele tipuri de date:
• String
• Integer
• Float
• Boolean
• Array
• Object
• Null
• Resource
În PHP, funcția var_dump() returnează tipul de date și valoarea unei
variabile:
<?php
$x = 5985;
var_dump();
?>
Pentru mai multe informații, accesați link-ul:
http://www.w3schools.com/php/php_datatypes.asp
Domeniul de vizibilitate al variabilelor
În PHP, variabilele pot fi declarate oriunde în interiorul scriptului.
Domeniul de vizibilitate al unei variabile este zona din script în care
variabila poate fi referită / utilizată.
În PHP există trei domenii distincte de vizibilitate a variabilelor:
• Local | Static (în interiorul unei funcții)
• Global ( în afara unei funcții)
• Super Global (toate domeniile)
Domeniul Global și Local
O variabilă declarată în afara unei funcții are un domeniu de vizibilitate
GLOBAL și poate fi accesată doar în afara unei funcții:
<?php
$x = 5; // domeniu global
function myTest() {
// utilizarea variabilei x în interiorul funcției
va genera eroare
echo "<p>Variable x inside function is:
$x</p>"; }

20
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
myTest();
echo "<p>Variable x outside function is:
$x</p>"; ?>

O variabilă declarată în cadrul unei funcții are un domeniu de vizibilitate


LOCAL și poate fi accesată numai în această funcție:
<?php
function myTest() {
$x = 5; // domeniu local
echo "<p>Variable x inside function is:$x </p>";
}
myTest();
// utilizarea variabilei x în afara funcției
va genera eroare
echo "<p>Variable x outside function
is:$x</p>"; ?>

Notă: Puteți avea variabile locale cu același nume, în diferite funcții,


deoarece variabilele locale sunt recunoscute numai de funcția în care
acestea sunt declarate.
Specificatorul global
Specificatorul global este utilizat pentru a accesa o variabilă globală din
cadrul unei funcții. Pentru a realiza acest lucru, utilizați specificatorul
global înaintea variabilei (în interiorul funcției):
<?php
$x = 5;
$y = 10;

function myTest() {
global $x, $y;
$y = $x + $y;
}

myTest();
echo $y; // afișează 15
?>

PHP stochează, de asemenea, toate variabilele globale într-o matrice


numita $GLOBALS [index]. Indicele are numele variabilei. De
asemenea, această matrice este accesibilă din funcții și poate fi utilizată
pentru a actualiza în mod direct variabilele globale.
<?php
$x = 5;
21
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
$y = 10;

function myTest() {
$GLOBALS['y'] =
$GLOBALS['x']+$GLOBALS['y']; }

myTest();
echo $y; // outputs 15
?>

În mod normal, atunci când o funcție este executată, toate variabilele sale
sunt șterse. Cu toate acestea, uneori, ne dorim ca o variabilă locală să NU
fie eliminată pentru a o utiliza într-o altă secvență de instrucțiuni.
Pentru a nu fi eliminată din memorie se utilizează specificatorul static la
prima declarare a variabilei:
<?php
function myTest() {
static $x = 0;
echo $x;
$x++;
}

myTest();
myTest();
myTest();
?>

Apoi, de fiecare dată când funcția este apelată, acea variabilă va memora
în continuare informațiile pe care le conținea la ultimul apel. Notă:
Variabila este locală funcției.
Instrucțiunile echo și print
În PHP există două moduri de bază pentru afișare: echo și print.
Instrucțiunile echo și print sunt mai mult sau mai puțin asemănătoare.
Ambele sunt utilizate pentru afișarea datelor pe ecran.
Diferențele care pot fi semnalate sunt:
• echo nu returnează nici o valoare, în timp ce print returnează 1,
astfel încât poate fi utilizată în cadrul expresiilor.
• echo poate avea parametri multipli (mai rar), în timp ce print are
un parametru unic.
• echo este o instrucțiune relativ mai rapidă decât print.

22
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Pentru mai multe informații, accesați link-ul:


http://www.w3schools.com/php/php_echo_print.asp
Stringuri PHP
Un string reprezintă un șir de caractere, cum ar fi “Hello World!“.
Funcții PHP specifice lucrului cu șiruri de caractere: • Lungimea unui
șir de caractere: funcția strlen() returnează numărul de caractere al
unui string.
Exemplu:
<?php
echo strlen(“Hello World!“);
// afișează 12
?>
• Numărul de cuvinte al unui șir de caractere: Funcția
str_word_count() returnează numărul de cuvinte al stringului
primit ca parametru
• Inversarea unui șir de caractere: Funcția PHP strrev() inversează
stringul.
• Căutarea unui text specific din cadrul unui șir: Funcția strpos()
caută un text specific într-un șir de caractere.
• Înlocuirea unui subșir într-un șir: Funcția PHP str_replace()
înlocuiește unele caractere cu alte caractere dintr-un șir de
caractere.
Pentru mai multe informații, accesați link-ul: http://www.
w3schools.com/ php/ php_ref_string.asp

Constante PHP
O constantă este un identificator (nume) pentru o valoare simplă.
Valoarea nu poate fi modificată în timpul execuției scriptului. Un
identificator valid de constantă începe cu o literă sau cu simbolul ”_” (nu
se utilizează simbolul $).
Notă: Spre deosebire de variabile, constantele sunt vizibile global în
cadrul scriptului.
Pentru crearea unei constante se utilizează funcția define().
Modul de utilizare a funcției define():
define(nume, valoare, case-insensitive)
Parametrii funcției și semnificația acestora:
• nume: specifică numele constantei
• valoarea: specifică valoarea constantei

23
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

• case-insensitive: specifică dacă numele constantei este sau nu


sensibilă la scrierea cu majuscule. Implicit acest parametru are
valoarea fals.

În exemplul de mai jos se creează constanta GREETING, case


insensitive :
<?php
define("GREETING","Welcome to alfatraining!",
true); echo GREETING;
?>

Operatori PHP
Operatorii sunt utilizați pentru a realiza diferite operații cu variabile și
valori constante.
Operatorii în limbajul PHP se clasifică astfel:
• Operatori aritmetici (+, -, *, /, %, **)
• Operatori de atribuire (=, +=, -=, *=, /=, %=)
• Operatori relaționali (==, ===, !=, <>, !==, >, <, >=, <=) •
Operatori de incrementare/decrementare (++$x, $x++, --$x,
$x--)
• Operatori logici (and, or, xor, &&, |, !)
• Operatori pe stringuri (., .=)
• Operatori pe tablouri (+, ==, ===, !=, <>, !==)
Pentru mai multe informații accesați linkul:
http://www.w3schools.com/php/php_operators.asp

Structuri de control
Instrucțiuni de decizie
Instrucțiunile condiționale (de decizie) sunt utilizate pentru a executa
anumite acțiuni bazate pe condiții.
Foarte des atunci când scriem cod, dorim să efectuăm acțiuni diferite
pentru diferite condiții.
În PHP există următoarele instrucțiuni de decizie:
• if – execută o secvență de cod dacă o condiție logică este
adevărată
• if...else - execută o secvență de cod dacă o condiție logică este
adevărată și execută altă secvență de cod dacă condiția este
falsă

24
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

• if...elseif....else – execută diferite secvențe de cod pentru două sau


mai multe condiții logice
• switch – selectează o secvență de cod care va fi executată în
funcție de valoarea unei expresii-selector
Pentru sintaxă și exemple accesați linkurile
http://www.w3schools.com/php/php_if_else.asp
http://www.w3schools.com/php/php_switch.asp
Instrucțiuni de ciclare în PHP
Instrucțiunile de ciclare (repetitive) PHP execută o secvență de cod cât
timp o condiție logică este adevărată.
De multe ori, atunci când scriem cod, aceeași secvență de cod dorim să
se execute de mai multe ori. Pentru a evita scrierea de linii de cod
identice în mod repetat, putem utiliza instrucțiuni de ciclare. În PHP
avem următoarele instrucțiuni de ciclare:
• while - execută o secvență de cod cât timp o condiție logică este
adevărată.
• do...while - execută o secvență de cod o dată, apoi repetă execuția
secvenței cât timp o condiție logică este adevărată. • for - execută o
secvență de cod de un număr de ori specificat • foreach - execută o
secvență de cod pentru fiecare element al unui tablou
Pentru sintaxă și exemple accesați linkurile:
http://www.w3schools.com/php/php_looping.asp
http://www.w3schools.com/php/php_looping_for.asp
Funcții PHP
Adevărata putere a limbajului PHP derivă din funcțiile sale, limbajul
încorporează peste 1000 de funcții predefinite.
Funcții definite de utilizator în limbajul PHP
• În afară de funcțiile predefinite ale limbajului, ne putem crea
propriile noastre funcții.
• Funcția reprezintă un bloc de instrucțiuni care poate fi executat în
mod repetat în cadrul unui program.
• Funcția nu se va executa imediat ce se încarcă pagina în browser,
aceasta se va executa doar în urma unui apel.
Crearea unei funcții definite de utilizator în PHP:
O funcție definită de utilizator începe cu cuvântul rezervat "function":
25
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Sintaxa:
function functionName() {
code to be executed;
}
Notă: Numele unei funcții începe cu o literă sau simbolul ”_”, nu poate
începe cu o cifră.
Alegeți nume sugestive pentru funcții care să reflecte scopul acesteia.
Numele de funcții nu sunt case-sensitive.
Pentru mai multe detalii accesați:
http://php.net/manual/en/functions.user-defined.php

Tablouri PHP
Un tablou reprezintă o structură de date care memorează într-o singură
variabilă o mulțime de valori.
Exemplu:
<?php
$cars = array("Volvo","BMW", "Toyota");
echo "I like
".$cars[0].",".$cars[1]."and"
.$cars[2].".";
?>
Dacă aveți de memorat o listă de valori (de exemplu numele unor
mașini), memorarea acestor date ar arăta în modul următor: $cars1 =
"Volvo";
$cars2 = "BMW";
$cars3 = "Toyota";
Dacă ar trebui să scrieți un cod pentru identificarea unei anumite mașini
dintr-o mulțime de 3 sau 300 de mașini, cum ar arăta codul?
Soluția în acest caz este să creați un tablou.
Un tablou poate stoca o mulțime de valori, utilizând un nume unic, iar
regăsirea unei valori se va realiza prin referirea la un anumit
index(poziția ocupată de valoare ).
Pentru crearea unui tablou în PHP se utilizează funcția array().
În PHP, există 3 tipuri de tablouri:
• Tablouri indexate – tablouri indexate numeric
• Tablouri asociative – tablouri în care identificarea unui element se
realizează pe baza unei chei
• Tablouri multidimensionale – tablouri care conțin unul sau mai
multe tablouri
26
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Sortarea tablourilor
• sort() – sortează tablourile în ordine crescătoare
• rsort() - sortează tablourile în ordine descrescătoare • asort() -
sortează tablourile asociative în ordine crescătoare, în funcție de o
valoare dată
• ksort() - sortează tablourile asociative în ordine crescătoare, în
funcție de o cheie dată
• arsort() - sortează tablourile asociative în ordine descrescătoare, în
funcție de o valoare dată
• krsort() - sortează tablourile asociative în ordine descrescătoare, în
funcție de o cheie dată

Pentru mai multe detalii accesați linkurile:


http://www.w3schools.com/php/php_arrays.asp
http://www.w3schools.com/php/php_arrays_sort.asp

Variabile globale și superglobale în PHP


Variabilele superglobale, "superglobals", au fost introduse o dată cu
versiunea PHP 4.1.0 și reprezintă variabile predefinite ale limbajului care
sunt întotdeauna accesibile, indiferent de domeniul de vizibilitate - și pot
fi accesate din orice funcție, clasă sau fișier, fără a fi nevoie de alte
instrucțiuni.
Variabilele superglobale în PHP sunt:
• $GLOBA LS
• $_SERVER
• $_REQUEST
• $_POST
• $_GET
• $_FILES
• $_ENV
• $_COOKIE
• $_SESSION
Detalii legate de semnificația fiecărei astfel de variabile găsiți la adresa :
http://www.w3schools.com/php/php_superglobals.asp

Gestionarea formularelor în PHP


Variabilele superglobale $_GET și $_POST sunt utilizate pentru
colectarea datelor în formulare de date.
27
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Formulare HTML simple


Exemplul de mai jos prezintă un formular HTML simplu, cu două
câmpuri și un buton de ”submit”.
Exemplu:
<html>
<body>

<form action="welcome.php" method="post">


Name: <input type="text" name="name"><br>
E-mail: <input type="text"
name="email"><br> <input type="submit">
</form>

</body>
</html>
Atunci când utilizatorul completează formularul de mai sus și dă clic pe
butonul de trimitere, datele din formular sunt trimise pentru procesare
într-un fișier PHP denumit "welcome.php". Datele din formular sunt
trimise prin metoda HTTP POST.
Metoda HTTP POST și variabila superglobală $_POST Pentru
afișarea datelor trimise prin intermediul formularului putem utiliza
variabila superglobală $_POST și instrucțiuni de afișare a diferitelor
componente ale acesteia. Fișierul "welcome.php" va arăta astfel:
<html>
<body>

Welcome <?php echo $_POST["name"]; ?><br>


Your email address is: <?php echo
$_POST["email"]; ?>
</body>
</html>

Pe ecran vor fi afișate următoarele date:


Welcome John
Your email address is john.doe@example.com

Rezultate identice cu cele din scriptul anterior se obțin utilizând metoda


HTTP GET:
<html>
<body>

28
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
<form action="welcome_get.php" method="get">
Name: <input type="text"
name="name"><br>
E-mail: <input type="text"
name="email"><br> <input type="submit">
</form>
</body>
</html>

Fișierul "welcome_get.php" va avea următorul conținut:


<html>
<body>

Welcome <?php echo $_GET["name"]; ?><br>


Your email address is: <?php echo $_GET["email"]; ?>

</body>
</html>

În procesarea formularelor este importantă SECURITATEA datelor


transmise!
GET versus POST
Ambele metode GET și POST creează un tablou de forma (cheie1 =>
valoare1, cheie2 => valoare2,....), în care cheile reprezintă numele
câmpurilor din formular, iar valorile reprezintă datele introduse de
utilizator în aceste câmpuri.
Informațiile trimise prin metodele GET și POST se recuperează prin
intermediul variabilelor superglobale $_POST și $_GET . $_GET este
un tablou de variabile transferat scriptului curent prin parametri URL.
$_POST este un tablou de variabile transferat scriptului curent prin
metoda HTTP POST.
Programatorii preferă metoda POST pentru trimiterea datelor din
formulare.

29
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
Când să utilizăm metoda GET?
Informațiile transmise dintr-un formular prin metoda GET sunt vizibile
tuturor( toate numele și valorile variabilelor sunt afișate în URL). GET
este o metodă care restricționează volumul de informație trimis la
aproximativ 2000 de caractere. Datorită faptului că variabilele sunt
afișate în URL, este posibil să marcăm pagina, lucru util în anumite
situații.
Metoda GET poate fi utilizată în transmiterea datelor mai puțin
importante.
Notă: Metoda GET nu trebuie utilizată pentru trimiterea parolelor sau
a altor informații importante!
Când anume utilizăm metoda POST?
Informațiile transmise dintr-un formular prin metoda POST nu sunt
vizibile altor persoane(numele/valorile sunt încorporate în cadrul unei
cereri HTTP) și nu există limitări din punct de vedere al volumului de
informație transmis.
În plus, metoda POST oferă o funcționalitate avansată cum ar fi suport
pentru operația de încărcare a fișierelor pe server în format binar.
Deoarece variabilele nu sunt afișate în URL marcarea paginii care
conține formularul nu este posibilă.
Pentru mai multe informații accesați link-ul :
http://www.w3schools.com/php/php_forms.aspf
Validarea datelor din formulare
Pentru protejarea datelor dintr-un formular trebuie să realizați o validare
corectă a datelor care să protejeze formularul împotriva atacurilor
provocat de hackeri sau a spam-urilor.
Ce este funcția htmlspecialchars()?
Funcția htmlspecialchars() convertește caracterele speciale în entități
HTML. De exemplu, caractere ca ” < ” și ” >” vor fi înlocuite cu &lt; și
&gt;.
Acest lucru împiedică atacatorii să exploateze codul prin inserarea de
coduri HTML sau Javascript în formulare (atacuri de tip Cross-site
Scripting).
Notă : Foarte important în securitatea unui formular PHP – Variabila
$_SERVER["PHP_SELF"] poate fi utilizată de hackeri! Dacă utilizați în
pagină parametrul PHP_SELF atunci un hacker poate introduce în cod
un simbol ”/” și comenzi de tip Cross Site Scripting (XSS) pentru a
exploata datele.
30
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Cum putem evita vulnerabilitatea variabilei $_SERVER["PHP_SELF"]


în propriile pagini? Prin utilizarea funcției htmlspecialchars().
Codul din pagina care conține formularul ar arăta astfel:
<form method="post" action="
<?php echo
htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Dacă un hacker ar încerca să exploateze variabila PHP_SELF, rezultatul


ar fi următorul:
<form method=”post”
action=”test_form.php/&quot;&gt;&lt;script&gt;ale
rt( ‚hacked‟)&lt;/script&gt;”>

Atacul asupra paginii ar eșua!


Regula care trebuie respectată este cea în care variabilele trebuie
transmise prin funcția htmlspecialchars(). Dacă un hacker încearcă să
insereze în pagină scriptul următor:
<script>location.href('http://www.hacked.com'
) </script>
acesta nu va fi executat, deoarece codul se va transforma astfel:
&lt;script&gt;location.href('http://www.hacked.com')&lt;/script&gt;
În aceste condiții, datele formularului pot fi afișate în siguranță într-o
pagină sau în cadrul unui email.
De asemenea, trebuie realizate următoarele operații la transmiterea
datelor unui formular:
1. Eliminați caracterele inutile ( space, tab, newline) din datele de
intrare cu ajutorul funcției trim()
2. Eliminați caracterele backslash (\)din datele de intrare cu ajutorul
funcției stripslashes().

Următorul pas este cel de a crea o funcție care realizează toate


verificările datelor introduse în formular.
Vom numi această funcție test_input(). Vom verifica fiecare variabilă
$_POST cu această funcție. Conținutul funcției este prezentat mai jos:
<?php
// definim și inițializăm variabilele
asociate câmpurilor cu șirul vid
$name = $email = $gender = $comment = $website
= "";

31
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
if ($_SERVER["REQUEST_METHOD"] ==
"POST") { $name =
test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website =
test_input($_POST["website"]); $comment
= test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>

Câmpuri obligatorii în formulare PHP


Toate câmpurile din formularul de mai sus sunt opționale. Pentru a
obține câmpuri obligatorii vom utiliza o funcție și variabile suplimentare.
În următorul exemplu vom adăuga variabile noi: $nameErr, $emailErr,
$genderErr, and $websiteErr. Rolul acestor variabile este de a memora
mesaje care vor fi afișate pentru câmpurile obligatorii.
Adăugăm de asemenea, o instrucțiune if-else pentru fiecare variabilă
$_POST. Aceasta va verifica dacă variabila $_POST este vidă ( cu
ajutorul funcției PHP empty()). Dacă variabila este vidă un mesaj de
eroare va fi memorat în variabila de eroare asociată respectivului câmp,
în caz contrar, variabila asociată câmpului din formular va stoca
rezultatul returnat de funcția test_input().
<?php
// definim și inițializăm variabilele de eroare
cu șirul vid
$nameErr = $emailErr = $genderErr = $websiteErr
= "";
// definim și inițializăm variabilele
asociate câmpurilor cu șirul vid
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] ==
"POST") { if (empty($_POST["name"])) {
$nameErr = "Name is required";
} else {
$name = test_input($_POST["name"]);
}

32
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
if (empty($_POST["email"])) {
$emailErr = "Email is required";
} else {
$email = test_input($_POST["email"]);
}
}
?>

Apoi, în formularul HTML adăugăm un mic script după fiecare câmp


care generează mesajul de eroare corespunzător. Acest mesaj va fi afișat
dacă utilizatorul încearcă să trimită datele fără a completa unul dintre
câmpurile obligatorii.
Afișarea mesajelor de eroare la completarea câmpurilor unui
formular
Exemplu
<form method="post" action="<?php echo
htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Name:
<input type="text" name="name">
<span class="error">* <?php echo
$nameErr;?></span> <br><br>
E-mail:
<input type="text" name="email">
<span class="error">* <?php echo
$emailErr;?></span> <br><br>
<input type="submit" name="submit"
value="Submit"> </form>

Validarea datelor din câmpul ”Name”


Codul de mai jos exemplifică un mod simplu de a verifica dacă câmpul
name conține numai litere și caractere albe. Dacă valoarea din câmpul
name nu este validă, se va stoca un mesaj de eroare în variabila
$nameErr.
$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters and white space allowed";
}

Funcția preg_match() returnează true dacă toate caracterele stocate în


variabila $name aparțin mulțimii de caractere șablon dată ca parametru
al funcției și fals în caz contrar.

33
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Validarea datelor din câmpul ”Email”


Cel mai simplu mod de a valida o adresă de email este utilizarea funcției
PHP filter_var().
În codul de mai jos se verifică corectitudinea adresei de email. În cazul
în care textul nu este valid se va stoca în variabila $emailErr un mesaj de
eroare:
$email = test_input($_POST["email"]);
if (!filter_var($email,
FILTER_VALIDATE_EMAIL)) { $emailErr =
"Invalid email format"; }

Validarea datelor din câmpul ”URL”


În codul de mai jos se verifică corectitudinea adresei URL (expresia
permite, de asemenea, utilizarea cratimelor în cadrul URL). În cazul în
care textul nu este valid se va stoca în variabila $websiteErr un mesaj de
eroare:
$website = test_input($_POST["website"]);
if
(!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-
a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-
9+&@#\/%=~_|]/i",$website)) {
$websiteErr = "Invalid URL";
}

Cookies în limbajul PHP


Un cookie este utilizat pentru identificarea unui utilizator. Un cookie
reprezintă un mic fișier stocat pe computerul utilizatorului.

De fiecare dată când de pe un computer se execută o cerere de încărcare


a unei pagini în browser va fi trimis serverului fișierul cookie pentru
identificarea utilizatorului. Cu ajutorul limbajului PHP puteți crea sau
regăsi valori cookie.
Crearea unui cookie în PHP
Un cookie se creează cu ajutorul funcției setcookie().
În exemplul următor se creează un cookie numit "user" cu valoarea
"John Doe". Acest cookie va expira în 30 zile(86400 * 30). Simbolul "/"
arată că cookie va fi disponibil în toate paginile site-ului. Pentru
identificarea unui cookie "user" utilizăm variabila globală $_COOKIE.
Funcția isset() verifică dacă cookie a fost creat:

34
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
Exemplu:
<?php
$cookie_name = "user";
$cookie_value = "John Doe";
setcookie($cookie_name, $cookie_value,
time()+ (86400 * 30), "/"); // 86400 = 1 zi
?>
<html>
<body>

<?php
if(!isset($_COOKIE[$cookie_name])) {
echo "Cookie named '" . $cookie_name . "' is not
set!";
} else {
echo "Cookie '" . $cookie_name . "' is
set!<br>";
echo "Value is: " . $_COOKIE[$cookie_name];
}
?>

</body>
</html>

Funcția setcookie() trebuie să apară înaintea tagului <html>. Pentru a afla


detalii legate de operații cu cookie accesați linkul
http://www.w3schools.com/php/php_cookies.asp

Sesiuni
Sesiunea reprezintă o metodă de stocare în variabile a informațiilor astfel
încât acestea să poată fi utilizate în mai multe pagini web. Spre deosebire
de un cookie, informațiile nu sunt stocate pe computerul utilizatorului.
O sesiune durează atât timp cât utilizatorul accesează un site și se
încheie o dată cu închiderea browserului. Accesarea unei pagini web este
o operație de sine stătătoare, orice accesare ulterioară a aceleiași pagini
(spre exemplu un refresh) se va face fără ca serverul "să știe" de
accesările anterioare. La fel se întâmplă atunci când sunt accesate mai
multe pagini diferite una după alta.
Variabilele sesiune rezolvă această problemă prin stocarea informațiilor
legate de utilizator și utilizarea lor în cadrul mai multor pagini vizitate de
acesta. (de exemplu: username, favorite color, etc).

35
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Implicit, variabilele sesiune sunt stocate pe server până la închiderea


browserului.
Notă: Pentru memorarea permanentă a datelor unui utilizator există
opțiunea memorării acestora într-o bază de date.
Deschiderea unei sesiuni PHP
O sesiune începe la apelul funcției session_start().
Variabilele sesiune sunt setate cu variabila globală $_SESSION.
Vom crea o pagină numită "demo_session1.php", în care vom deschide o
nouă sesiune și vom seta câteva variabile de tip sesiune. Notă: Funcția
session_start() trebuie apelată la începutul paginii, înaintea oricăror
taguri HTML.
<?php
// deschide sesiunea
session_start();
?>
<!DOCTYPE html>
<html>
<body>

<?php
// Atribuirea de valori variabilelor de tip
sesiune $_SESSION["favcolor"] = "green";
$_SESSION["favanimal"] = "cat";
echo "Session variables are set.";
?>

</body>
</html>

Obținerea valorilor variabilelor sesiune


Vom crea o altă pagină numită "demo_session2.php". Din această pagină
vom accesa informațiile variabilelor sesiune din pagina creată anterior
("demo_session1.php").
Observați că variabilele sesiune nu sunt transmise în mod individual
pentru fiecare pagină nouă, în schimb, acestea sunt preluate din sesiunea
deschisă la începutul fiecărei pagini (session_start ()). De asemenea,
observați că toate valorile variabilelor sesiune sunt stocate în variabila
globală $_SESSION:
<?php
session_start();

36
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
?>
<!DOCTYPE html>
<html>
<body>

<?php
// Se afișează valorile variabilelor sesiune
setate în pagina anterioară
echo "Favorite color is " . $_SESSION["favcolor"]
. ".<br>";
echo "Favorite animal is " .
$_SESSION["favanimal"] . ".";
?>

</body>
</html>

Figura de mai jos ilustrează fluxul de date în sesiunile existente în


paginile web:
Cele patru fișiere .php sunt prezentate în paginile următoare. Pagina
session_login.php conține următorul cod:
<?php
/*before destroying the Session –
you have to receive the session */
session_start();

// destroy the session

37
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
session_destroy();
$_SESSION = array();
?>

<html>
<body>
<h3>Login-Pages</h3>
<form action="intro.php" method="post">
<p><input name="name" /> Name</p>
<p><input type="password" name="password"
/> Password</p>
<p><input type ="submit" value="login"
/></p> </form>
</body>
</html>
Pagina intro.php conține următorul cod:
<?php
// deschiderea sesiunii
session_start();

// verifică dacă există apel din pagina


session_login.php
if(isset($_POST["name"])) {

// verifică dacă numele și parola sunt corecte if


($_POST["name"] == "Marina" && $_POST["password"]
== "elefant"
|| $_POST["name"] == "Andra" &&
$_POST["password"] == "castle")
{
// numele și parola sunt corecte
$_SESSION['name'] = $_POST["name"];
}
}
// check if inside the session
include "control.inc.php";
?>

<html><body>
<h3>Intro Page</h3>

<?php
echo "<p>Hello " . $_SESSION['name'] .
"</p>"; ?>

38
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
<p><a href="other.php">Go to another Page
</a></p> <p><a href="session_login.php">Log off
</a></p> </body></html>

Pagina other.php conține următorul cod:


<?php
// deschiderea sesiunii
session_start();
// check if you are inside the session
include "control.inc.php";

?>
<html>
<body>
<h3>This is the other page</h3>
<?php

echo "<p>Hello " . $_SESSION['name'] .


"</P>"; ?>
<p> <a href ="intro.php"> Go to
Intro-Page</a></p> <p> <a href
="session_login.php"> Log off</a></p>

</body>
</html>

Pagina control.inc.php conține următorul cod:


<?php
// control if inside the session
if (!isset($_SESSION["name"]))
{
echo "<p>no entry</p>";
echo "<p><a href ='session_login.php'>Go to
Login </a></p>";
echo "</body></html>";
exit;
}?>

Baze de date
O bază de date reprezintă o colecție de date organizată astfel încât un
program să poată selecta rapid datele necesare la un moment dat.
39
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Putem asocia conceptul de bază de date celui de sistem de arhivare


electronică a datelor.

Bazele de date tradiționale sunt organizate în câmpuri și înregistrări


memorate în tabele(fișiere). Câmpul reprezintă un atribut al informației,
înregistrarea este alcătuită dintr-o mulțime de câmpuri , iar tabela
reprezintă o colecție de înregistrări..
Pentru a accesa date stocate într-o bază de date este necesar un sistem de
gestiune a bazelor de date (DBMS). Acesta reprezintă o colecție de
programe care permit memorarea, organizarea și regăsirea datelor din
baza de date.
PHP permite conexiunea la o bază de date. MySQL este cel mai popular
sistem de gestiune a bazelor de date cu ajutorul limbajului PHP.
Ce reprezintă MySQL?
• MySQL este un sistem de baze de date utilizat pe web • MySQL
este un sistem de baze de date care rulează pe un server
• MySQL este ideal pentru aplicații mici și mari
• MySQL este foarte rapid, fiabil și ușor de utilizat
• MySQL utilizează standardul SQL
• MySQL compilează pe o varietate de platforme
• MySQL este open source, poate fi descărcat și folosit • MySQL
este dezvoltat, distribuit și susținut de Oracle Corporation
• MySQL este numit My, după fiica co-fondatorului său Monty
Widenius
Datele dintr-o bază de date MySQL sunt organizate în tabele. Tabelele
reprezintă o colecții de date relaționate, organizate pe linii și coloane.

40
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Pentru mai multe informații accesați link-ul:


http://www.w3schools.com/php/php_mysql_intro.asp
MySQL este sistemul de baze de date standard pentru website-uri cu
volume mari atât de date, cât și de utilizatori finali (cum ar fi Facebook,
Twitter și Wikipedia).
PHP 5 poate lucra cu o bază de date MySQL utilizând:
• extensia MySQLi ("i" provine de la ”improved”)
• PDO (PHP Data Objects)
Atât MySQLi, cât și PDO au propriile avantaje:
• PDO lucrează cu 12 sisteme diferite de baze de date, pe când
MySQLi lucrează doar cu baze de date MySQL.
• Așa încât, dacă vrei ca proiectul tău să utilizeze altă bază de date,
PDO face ca acest proces să fie simplu. Trebuie modificat doar
stringul de conectare și câteva interogări. Cu MySQLi va trebui
să rescrii întregul cod sau interogările incluse.
• Ambele extensii sunt orientate pe obiect, dar MySQLi oferă în
plus o interfață procedurală API.
• Ambele suportă conceptul de Prepared Statements (șabloane
compilate pentru SQL care pot fi rulate şi care pot fi
particularizate folosind ca parametri diverse variabile). Aceste
șabloane sunt foarte importante pentru securitatea aplicației
web.

Exemple de scripturi care utilizează MySQLi


1. Deschiderea unei conexiuni la MySQL
<?php
$servername = “localhost“;
$username = “root“;
$password = ““;

// Crearea conexiunii
$conn = mysqli_connect($servername,
$username, $password);

// verificarea conexiunii
If (!$conn) {

41
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
die (“Connection failed: “ .
Mysqli_connect_error());
}
echo “Connected successfully“;
?>

2. Închiderea unei conexiuni


mysqli_close($conn);

Pentru crearea sau ștergerea unei baze de date sunt necesare privilegii de
tip CREATE.
3. Crearea unei baze de date MySQL utilizând MySQLi
Comanda CREATE DATABASE este utilizată pentru crearea unei baze
de date în MySQL. În exemplul următor se creează o bază de date cu
numele “myDB“:
<?php
$servername = “localhost“;
$username = “root“;
$password = ““;
// Crearea conexiunii
$conn = mysqli_connect($servername,
$username, $password);
// verificarea conexiunii
If (!$conn) {
die (“Connection failed: “ .
mysqli_connect_error());
}
// Crearea bazei de date
$sql = “CREATE DATABASE myDB“;
if (mysqli_query($conn, $sql)) {
echo “Database created successfully“;
} else {
echo “Error creating database: “ .
mysqli_error($conn);
}
mysqli_close($conn);
?>

Comanda CREATE TABLE este utilizată în MySQL pentru crearea unei


tabele.
4. Crearea tabelei MyGuests
Tabela va conține 5 coloane "id", "firstname", "lastname", "email" și
"reg_date":
42
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY
KEY, firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)

Tipul de date specifică ce tip de date va stoca un câmp al tabelei. Există


câteva atribute opționale care pot fi specificate pentru fiecare câmp al
tabelei:
• NOT NULL – Fiecare înregistrare trebuie să conțină o valoare
pentru acel câmp, valorile nule nu sunt permise
• DEFAULT valoare – setează o valoare predefinită care va fi
memorată automat în tabelă, de fiecare dată când câmpul
respectiv nu este completat
• UNSIGNED – utilizat pentru tipuri numerice, permite stocarea
doar de valori pozitive, inclusiv zero
• AUTO INCREMENT - MySQL incrementează automat cu 1
valoarea câmpului de fiecare dată când este adăugată o nouă
înregistrare
• PRIMARY KEY – utilizat pentru identificarea unică a
înregistrărilor din tabelă. Coloana PRIMARY KEY este,
deseori, un câmp numeric ID setat cu atributul
AUTO_INCREMENT
Notă: Fiecare tabelă trebuie să conțină o coloană de tip cheie primară,
cu valori unice pentru fiecare înregistrare.
5. Crearea unei baze de date numite myDB și a tabelei MyGuests.
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";

// crearea conexiunii
$conn = mysqli_connect($servername,
$username, $password, $dbname);
// verificarea conexiunii
if (!$conn) {
die("Connection failed: " .
mysqli_connect_error());
}

43
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
// sql to create table
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY
KEY, firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";

if (mysqli_query($conn, $sql)) {
echo "Table MyGuests created successfully";
} else {
echo "Error creating table: " .
mysqli_error($conn);
}
mysqli_close($conn);
?>

După crearea bazei de date și a tabelei, putem adăuga date.


6. Inserarea datelor în tabele MySQL
Reguli care trebuie respectate la inserarea datelor în tabele: • Interogarea
SQL trebuie să fie încadrată între ghilimele în PHP
• Stringurile din interiorul unei interogări trebuie să fie delimitate de
ghilimele
• Valorile numerice nu se scriu între ghilimele
• Cuvântul NULL nu se scrie între ghilimele
Comanda INSERT INTO este utilizată pentru adăugarea de noi
înregistrări într-o tabelă MySQL:
Sintaxa:
INSERT INTO table_name (column1, column2,
column3,...)
VALUES (value1, value2, value3,...)
Notă: Dacă o coloană are unul dintre atributele AUTO_INCREMENT
sau TIMESTAMP nu este necesar ca aceste coloane să apară în
interogare; MySQL va adăuga automat valori în aceste câmpuri.
În exemplul următor vom adăuga o nouă înregistrare în tabela
"MyGuests" creată în scriptul precedent.
<?php
$servername = "localhost";
$username = „root";
$password = "";
$dbname = "myDB";

44
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
// Create connection
$conn = mysqli_connect($servername,
$username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " .
mysqli_connect_error());
}

$sql = "INSERT INTO MyGuests (firstname,


lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";

if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" .
mysqli_error($conn);
}

mysqli_close($conn);
?>

Dacă se execută o comandă INSERT sau UPDATE într-o tabelă cu un


câmp ID cu atributul AUTO_INCREMENT, putem obține valoarea din
câmpul ID al ultimei înregistrări inserate/actualizate.
7. Obținerea ID-ului ultimei înregistrări inserate în tabelă
<?php
$servername = "localhost";
$username = „root";
$password = "";
$dbname = "myDB";

// Crearea conexiunii
$conn = mysqli_connect($servername,
$username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " .
mysqli_connect_error());
}

$sql = "INSERT INTO MyGuests (firstname,


lastname, email)

45
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
VALUES ('John', 'Doe', 'john@example.com')";

if (mysqli_query($conn, $sql)) {
$last_id = mysqli_insert_id($conn);
echo "New record created successfully. Last
inserted ID is: " . $last_id;
} else {
echo "Error: " . $sql . "<br>" .
mysqli_error($conn);
}

mysqli_close($conn);
?>

8. Inserarea unui grup de înregistrări în MySQL


<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Crearea conexiunii
$conn = mysqli_connect($servername,
$username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " .
mysqli_connect_error());
}

$sql = "INSERT INTO MyGuests (firstname,


lastname, email)
VALUES ('John', 'Doe', 'john@example.com');";
$sql .= "INSERT INTO MyGuests (firstname,
lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com');";
$sql .= "INSERT INTO MyGuests (firstname,
lastname, email)
VALUES ('Julie', 'Dooley', 'julie@example.com')";

if (mysqli_multi_query($conn, $sql)) {
echo "New records created successfully";
} else {
echo "Error: " . $sql . "<br>" .
mysqli_error($conn);
}

46
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
mysqli_close($conn);
?>

9. Interogarea datelor dintr-o bază de date MySQL


Comanda SELECT este utilizată pentru interogarea uneia sau mai multor
tabele :
Sintaxa:
SELECT column_name(s) FROM table_name
Putem utiliza caracterul ’ * ’ pentru a selecta toate coloanele unei tabele:
Sintaxa:
SELECT * FROM table_name
<?php
$servername = "localhost";
$username = „root";
$password = "";
$dbname = "myDB";

// Crearea conexiunii
$conn = mysqli_connect($servername,
$username, $password, $dbname);
// Verificarea conexiunii
if (!$conn) {
die("Connection failed: " .
mysqli_connect_error());
}

$sql = "SELECT id, firstname, lastname


FROM MyGuests";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
// afișează datele fiecărei înregistrări
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Name: " .
$row["firstname"]. " " . $row["lastname"].
"<br>"; }
} else {
echo "0 results";
}

mysqli_close($conn);
?>

47
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

10. Ștergerea datelor în MySQL


Comanda DELETE este utilizată pentru ștergerea datelor dintr-o tabelă:
Sintaxa:
DELETE FROM table_name
WHERE some_column = some_value
Notă: Clauza WHERE specifică care înregistrare va fi ștearsă. Dacă
această clauză nu apare, vor fi șterse toate înregistrările.
<?php
$servername = "localhost";
$username = „root";
$password = "";
$dbname = "myDB";

// Crearea conexiunii
$conn = mysqli_connect($servername,
$username, $password, $dbname);
// Verificarea conexiunii
if (!$conn) {
die("Connection failed: " .
mysqli_connect_error());
}

// sql va șterge înregistrarea cu ID-ul 3


$sql = "DELETE FROM MyGuests WHERE id=3";

if (mysqli_query($conn, $sql)) {
echo "Record deleted successfully";
} else {
echo "Error deleting record: " .
mysqli_error($conn);
}
mysqli_close($conn);
?>

11. Actualizarea datelor în tabele MySQL


Comanda UPDATE este utilizată pentru actualizarea datelor dintr-o
tabelă:
Sintaxa:
UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value

48
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Notă: Clauza WHERE specifică care înregistrare/înregistrări va/vor fi


actualizată/actualizate. Dacă se omite această clauză, toate înregistrările
vor fi actualizate.
<?php
$servername = "localhost";
$username = “root";
$password = "";
$dbname = "myDB";

// Crearea conexiunii
$conn = mysqli_connect($servername,
$username, $password, $dbname);
// verificarea conexiunii
if (!$conn) {
die("Connection failed: " .
mysqli_connect_error());
}

$sql = "UPDATE MyGuests SET


lastname=„Travolta' WHERE id=2";

if (mysqli_query($conn, $sql)) {
echo "Record updated successfully";
} else {
echo "Error updating record: " .
mysqli_error($conn);
}

mysqli_close($conn);
?>

12. Limitarea selecției datelor în MySQL


Clauza LIMIT este folosită în comanda MySQL SELECT pentru a limita
numărul de înregistrări returnate în urma interogării care urmează să fie
afișate. Poate avea unul sau două argumente, acestea fiind numere întregi
pozitive sau zero.
Clauza LIMIT este utilă în obținerea rezultatelor din tabele foarte mari
ca volum, selectarea unui număr foarte mare de înregistrări afectând
performanța.
Dacă trebuie să interogăm date din tabela "Orders" din primele 30 de
înregistrări, interogarea SQL arată ca în exemplul de mai jos: $sql =
"SELECT * FROM Orders LIMIT 30";
Dar dacă ar trebui interogate înregistrările cu ID-ul cuprins între 16 și 25
?
49
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

MySQL oferă o soluție în acest caz: utilizarea clauzei OFFSET.


Interogarea SQL de mai jos se poate traduce astfel "returnează numai 10
înregistrări, începând cu înregistrarea 16 (OFFSET 15)":
$sql = "SELECT * FROM Orders LIMIT 10 OFFSET
15";
Pentru același rezultat se poate utiliza și comanda de mai jos: $sql =
"SELECT * FROM Orders LIMIT 15, 10"; Observați că
numerele trebuie inversate când sunt separate cu virgula.
PhpMyAdmin
PhpMyAdmin este un sistem de gestiune a bazelor de date MySQL free,
open source, scris în PHP și destinat administrării bazelor de date prin
intermediul unui browser web. Prin phpMyAdmin se pot întreprinde
diverse operații cum ar fi crearea, modificarea sau ștergerea bazelor de
date, tabelelor, câmpurilor sau rândurilor; executarea de comenzi
(interogări) SQL și administrarea utilizatorilor și privilegiilor.
În PhpMyAdmin sunt posibile următoarele operații:
• Crearea și ștergerea unei baze de date
• Crearea / ștergerea/ modificarea tabelelor și a tabelelor virtuale
(views)
• Ștergerea / editarea / adăugarea câmpurilor în tabele •
Execuția oricărei instrucțiune SQL
• Gestionarea cheilor asociate câmpurilor
• Gestionarea privilegiilor
• Gestionarea declanșatoarelor și a procedurilor stocate • exportul
datelor în diferite formate (CSV, SQL, XML, PDF … )
PhpMyAdmin este disponibil în 62 de limbi.
Pentru documentație detaliată accesați link-ul:
https://www.phpmyadmin.net/docs/
50
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Etapele creării unei baze de date MySQL


Gestionarea fișierelor pe server
În acest capitol veți învăța să deschideți, să accesați pentru citire și să
închideți fișiere stocate pe server.
51
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Deschiderea unui fișier în PHP utilizând funcția fopen() Funcția


fopen() permite deschiderea unui fișier de pe server și oferă mai multe
opțiuni față de funcția readfile().
Vom utiliza fișierul "webdictionary.txt", fișier care are conținutul de mai
jos:
AJAX = Asynchronous JavaScript and XML
CSS = Cascading Style Sheets
HTML = Hyper Text Markup Language
PHP = PHP Hypertext Preprocessor
SQL = Structured Query Language
SVG = Scalable Vector Graphics
XML = EXtensible Markup Language
Primul parametru al funcției fopen() specifică numele fișierului, iar al
doilea parametru reprezintă modul de deschidere a fișierului.
<?php
$myfile = fopen("webdictionary.txt", "r")
or die("Unable to open file!");
echo
fread($myfile,filesize("webdictionary.txt"));
fclose($myfile);
?>

Moduri de deschidere a unui fișier


Mod Descriere

r Deschidere doar pentru citire. Pointerul la inceputul fișierului.


Modul se mai numește și mod citire

r+ Deschidere atât pentru citire, cât și pentru scriere. Pointer la


începutul fișierului.

w Deschidere doar pentru scriere. Pointerul este la începutul


fișierului, iar tot conținutul fișierului este șters în momentul
deschiderii. În caz că fișierul nu există, acesta va fi creat.
Modul se mai numește și mod scriere.

w+ Deschidere atât pentru scriere, cât și pentru citire. Pointerul


este la începutul fișierului, iar tot conținutul fișierului este
șters în momentul deschiderii. În caz că fișierul nu există,
acesta va fi creat.

a Deschidere doar pentru scriere. Pointerul este la sfârșitul


fișierului. Dacă fișierul nu există, acesta va fi creat. Modul se
mai numește și mod adăugare.

a+ Deschidere atât pentru scriere, cât și pentru citire. Pointerul


este la sfârșitul fișierului. Dacă fișierul nu există, acesta va fi

52
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
creat.

x Fișierul este creat și deschis pentru scriere. Pointerul la


începutul fișierului. În caz că fișierul există se generează o
eroare de tip E_WARNING, iar funcția fopen() returnează
false.

x+ Fișierul este creat și deschis pentru scriere și citire. Pointerul


la începutul fișierului. În caz că fișierul există se generează o
eroare de tip E_WARNING, iar funcția fopen() returnează
false.

Citirea dintr-un fișier


Funcția fread() citește date dintr-un fișier.
Primul parametru al funcției fread() conține numele fișierului, iar cel
de-al doilea parametru specifică numărul maxim de octeți care va fi citit.
În următorul exemplu se citește întreg conținutul fișierului
"webdictionary.txt" :
fread($myfile,filesize("webdictionary.txt"));
Închiderea unui fișier
Funcția fclose() este utilizată pentru închiderea unui fișier. Notă: O
practică corectă este cea de a închide toate fișierele după finalizarea
operațiilor de prelucrare a datelor, pentru a nu fi distruse accidental.
Funcția fclose() necesită ca parametru numele fișierului care va fi închis:
<?php
$myfile = fopen("webdictionary.txt",
"r"); // cod ce va fi executat..
fclose($myfile);
?>

Citirea linie cu linie dintr-un fișier


Funcția fgets() este utilizată pentru citirea unei linii din fișier. În exemplul
de mai jos se afișează prima linie din fișierul "webdictionary.txt":
<?php
$myfile = fopen("webdictionary.txt", "r")
or die("Unable to open file!");
echo fgets($myfile);
fclose($myfile); ?>

53
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Notă: După apelul funcției fgets() , pointerul de fișier se mută la


începutul celei de-a doua linii din fișier.
Verificarea sfârșitului de fișier
Funcția feof() function verifică dacă pointerul a ajuns la sfârșitul
fișierului.
Funcția feof() este utilă în parcurgerea fișierelor a căror dimensiune nu
se cunoaște.
În exemplul de mai jos, fiecare linie din fișierul "webdictionary.txt" este
citită și afișată pe ecran, până când se întâlnește marcajul de sfârșit de
fișier:
<?php
$myfile = fopen("webdictionary.txt", "r")
or die("Unable to open file!");

// se afișează linie cu linie


while(!feof($myfile)) {
echo fgets($myfile) . "<br>";
}

fclose($myfile);
?>

Citirea unui caracter din fișier


Funcția fgetc() citește un singur caracter din fișierul dat ca parametru. În
exemplul de mai jos, se afișează pe ecran caracter cu caracter conținutul
fișierului "webdictionary.txt":
<?php
$myfile = fopen("webdictionary.txt", "r")
or die("Unable to open file!");

// afișează fiecare caracter din fișier


while(!feof($myfile)) {
echo fgetc($myfile);
}

fclose($myfile);
?>

Notă: După apelul funcției fgetc() , pointerul de fișier se mută pe


următorul caracter.

54
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Crearea și scrierea în fișiere stocate pe server


Funcția fopen() este utilizată în PHP fie pentru deschiderea unui fișier,
fie pentru crearea lui.
Pentru crearea unui fișier, modul de deschidere al acestuia va fi pentru
scriere(w) sau pentru adăugare(a).

În exemplul următor se va crea fișierul "testfile.txt", în același director în


care este salvat fișierul .php care conține codul pentru crearea fișierului:
$myfile = fopen("testfile.txt", "w");
Notă: Dacă aveți erori atunci când încercați codul de mai sus, verificați
mai întâi dacă aveți drepturi de scriere pe hard disk. Scrierea într-un
fișier
Funcția fwrite() scrie date în fișierul specificat în primul parametru. Al
doilea parametru al funcției va conține șirul de caractere ce urmează a fi
scris în fișier.

În exemplul de mai jos, se vor scrie pe linii separate numele a două


persoane("John Doe" , "Jane Doe") în fișierul "newfile.txt":
<?php
$myfile = fopen("newfile.txt", "w") or
die("Unable to open file!");
$txt = "John Doe\n";
fwrite($myfile, $txt);
$txt = "Jane Doe\n";
fwrite($myfile, $txt);
fclose($myfile);
?>

Fișierul "newfile.txt" va avea următorul conținut, după execuția


scriptului:
John Doe
Jane Doe

Suprascrierea într-un fișier


În exemplul următor deschidem fișierul "newfile.txt" în modul de
deschidere pentru scriere (w) și scriem numele a două persoane pe
primele 2 linii de fișier:
<?php
$myfile = fopen("newfile.txt", "w") or
die("Unable to open file!");
$txt = "Mickey Mouse\n";
fwrite($myfile, $txt);

55
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
$txt = "Minnie Mouse\n";
fwrite($myfile, $txt);
fclose($myfile);
?>

Datele stocate în fișier înaintea execuției acestui script s-au pierdut și


fișierul are acum următorul conținut:
Mickey Mouse
Minnie Mouse

Upload-ul fișierelor pe server


În PHP operația de upload este facilă, cu toate acestea trebuie să fim
precauți în momentul în care executăm această operație. Configurarea
fișierului "php.ini"
Primul pas este cel în care PHP va fi configurat să permită operația de
upload.
În fișierul "php.ini" directiva file_uploads va fi setată pe On:
file_uploads = On
Fișierul „php.ini“ este localizat în „c:/xampp/php/php.ini“.

În continuare, creăm un formular HTML care permite utilizatorilor să


aleagă imaginea care doresc să o încarce pe server:
<html>
<body>

<form action="upload.php" method="post"


enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload"
id="fileToUpload">
<input type="submit" value="Upload
Image" name="submit">
</form>

</body>
</html>

Reguli care trebuie respectate la crearea formularului HTML de mai sus:


• Metoda utilizată în formular trebuie să fie "post"
• Un atribut obligatoriu este enctype="multipart/form-data". Acesta
specifică tipul conținutului utilizat la trimiterea formularului.

56
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
Notă:

• Atributul type="file" al tagului <input> setează câmpul din formular ca


fiind un control de tip file-select, care va afișa în formular un buton
"Browse"

În continuare, creăm un fișier "upload.php".


<?php
$target_dir = "uploads/";
$target_file = $target_dir .
basename($_FILES["fileToUpload"]["name"
]); $uploadOk = 1;
$imageFileType =
pathinfo($target_file,PATHINFO_EXTENSION);

// Verifica daca fisierul este intr-adevar o


imagine if(isset($_POST["submit"])) {
$check =
getimagesize($_FILES["fileToUpload"]["tmp_name"
]); if($check !== false) {
echo "File is an image - ". $check["mime"]. ".";
$uploadOk = 1;
}
else {
echo "File is not an image.";
$uploadOk = 0;
}
}
?>

Notă: Fișierul "upload.php" va fi salvat în directorul uploads creat


anterior.
În continuare, adăugăm câteva restricții.
Verificarea existenței unui fișier
Mai întâi verificăm dacă fișierul upload.php există în directorul uploads.
În caz contrar, va fi afișat un mesaj de eroare și variabila $uploadOk va fi
setată pe 0:
// Verificăm dacă există fișierul
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}

57
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Restricționarea dimensiunii unui fișier pentru upload În exemplul de


mai jos câmpul din formular se numește "fileToUpload".
Dacă dimensiunea fișierului este mai mare de 500KB, va fi afișat un
mesaj de eroare și variabila $uploadOk va fi setată pe 0:
// verificăm dimensiunea fișierului
if ($_FILES["fileToUpload"]["size"] >
500000) { echo "Sorry, your file is too
large.";
$uploadOk = 0;
}

Restricționarea formatului unui fișier pentru upload


În exemplul de mai jos este permis upload-ul doar pentru fișiere de tip
JPG, JPEG, PNG, și GIF. Pentru toate celelalte formate de fișier va fi
afișat un mesaj de eroare și variabila $uploadOk va fi setată pe 0:
// permite anumite formate pentru fișierul de
upload if($imageFileType != "jpg" &&
$imageFileType != "png" && $imageFileType !=
"jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF
files are allowed.";
$uploadOk = 0;
}

Forma finală a scriptului PHP pentru upload-ul unui fișier


<?php
$target_dir = "uploads/";
$target_file = $target_dir .
basename($_FILES["fileToUpload"]["name"
]); $uploadOk = 1;
$imageFileType =
pathinfo($target_file,PATHINFO_EXTENSION);

// Check if image file is a actual image or


fake image
if(isset($_POST["submit"])) {
$check =
getimagesize($_FILES["fileToUpload"]["tmp_name"
]); if($check !== false) {
echo "File is an image - " . $check["mime"] .
".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;

58
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

}
}
// verificăm dacă fișierul există în directorul
uploads
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// verificăm dimensiunea fișierului
if ($_FILES["fileToUpload"]["size"] > 500000)
{ echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Verificăm formatele de fișier

if($imageFileType != "jpg" && $imageFileType !=


"png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are
allowed.";
$uploadOk = 0;
}

// Verificăm starea variabilei $uploadOk


if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";

// dacă totul este OK atunci încercăm upload-ul pe


server
} else {
if
(move_uploaded_file($_FILES["fileToUpload"]["tmp_na
m e"], $target_file)) {
echo "The file ". basename(
$_FILES["fileToUpload"]["name"]). " has been
uploaded.";
} else {
echo "Sorry, there was an error uploading your
file.";
}
}
?>

59

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