Sunteți pe pagina 1din 131

MANUELA CARPEN * ROXANA ASANDULUI * MIHAIELA TUNEA

CARMEN-AFRODITA GIOCAȘ * CERASELA-DANIELA CARDAȘ

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

Carte elaborată în cadrul proiectului Erasmus +


”Acquisition of professional web programming skills for
an earlier integration in the labor market” nr. ref. 2015-
1-RO01-A102-014297.

Colaboratori:
Conținuturi capitolele 1, 2 : Ralph-Müller Lucanus
Conținuturi capitolul 3 : Mihaela-Liliana Prăjinariu
Conținuturi capitolul 4 : Vlad Batalan
Copertă : Andra-Mălina Cardaș

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

Cuprins
1. Introducere .............................................................. 5
Ce este PHP?...........................................................5
De ce să alegi programare în PHP?............................6
2. Programarea web în limbajul PHP ........................ 16
Elemente de sintaxă ale limbajului PHP................... 16
Variabile PHP ........................................................ 18
Crearea (declararea ) variabilelor PHP............... 18
Variabile de ieșire ............................................. 19
Domeniul de vizibilitate al variabilelor ............... 20
Domeniul Global și Local ................................... 20
Specificatorul global ........................................ 21
Instrucțiunile echo și print ................................ 22
Stringuri PHP.................................................... 23
Constante PHP ...................................................... 23
Operatori PHP....................................................... 24
Structuri de control ............................................... 24
Instrucțiuni de decizie....................................... 24
Instrucțiuni de ciclare în PHP ............................. 25
Funcții PHP ........................................................... 25
Funcții definite de utilizator în limbajul PHP ....... 25
Tablouri PHP ......................................................... 26
Sortarea tablourilor .......................................... 27
Variabile globale și superglobale în PHP .................. 27
Gestionarea formularelor în PHP ............................ 27
Formulare HTML simple.................................... 28
3
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Metoda HTTP POST și variabila superglobală


$_POST ........................................................................ 28
GET versus POST .............................................. 29
Validarea datelor din formulare ........................ 30
Câmpuri obligatorii în formulare PHP................. 32
Afișarea mesajelor de eroare la completarea
câmpurilor unui formular.............................................. 33
Cookies în limbajul PHP.......................................... 34
Crearea unui cookie în PHP ............................... 34
Sesiuni .................................................................. 35
Deschiderea unei sesiuni PHP............................ 36
Obținerea valorilor variabilelor sesiune ............. 36
Baze de date ......................................................... 39
Ce reprezintă MySQL? ...................................... 40
Exemple de scripturi care utilizează MySQLi ....... 41
PhpMyAdmin ................................................... 50
Etapele creării unei baze de date MySQL ........... 51
Gestionarea fișierelor pe server ............................. 51
3. Fișe de lucru........................................................... 60
4. Crearea unui website dinamic utilizând PHP ......... 79
Webografie .............................................................. 131

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

1. Introducere
Limbajele pe care se bazează PHP sunt :
• HTML ( Hyper Text Markup Language) – pentru definirea
conținuturilor paginilor web
• CSS ( Cascading Style Sheets)- pentru definirea aspectului
paginilor web
• JavaScript- pentru programarea evenimentelor din paginile
web, pentru a adăuga interactivitate paginilor web
Tutoriale :
• HTML Tutorial
[http://www.w3schools.com/cssref/default.asp]
• CSS Reference
[http://www.w3schools.com/cssref/default.asp]
• JavaScript Reference
[http://www.w3schools.com/jsref/default.asp]
Alte resurse utile:
• http://php.net/manual/ro/

Ce este PHP?
• … un acronim pentru “PHP: Hypertext Preprocessor”
• …un limbaj de programare open-source, cu o largă răspândire
în domeniul IT
• … gratis pentru a fi descărcat și utilizat
De ce este un limbaj atât de atractiv și popular?
• pentru că este suficient de puternic pentru a fi în centrul celui
mai mare sistem de blogging pe web (WordPress)!
• pentru că este suficient de complex pentru a rula cea mai
mare rețea socială (Facebook)!
• de asemenea, este destul de ușor să fii un programator
începător de server-side!
PHP...
• Fișierele PHP pot conține text, coduri HTML, CSS,
JavaScript și coduri PHP
• codurile PHP sunt executate pe server, iar rezult atul este
returnat în browser ca un cod HTML simplu
• Fișierele PHP au extensia ".php"

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

Vă prezentăm un exemplu de cod PHP (introduction.php)


<!DOCTYPE html>
<html>
<body>
<?php
echo "My first PHP script!";
?>
</body>
</html>

Ce avem de făcut?
Server side:
• La început pornim serverul web (localhost).
• Apoi scriem codul de mai sus într-un editor de text, cum ar fi
Notepad++ .
• Salvăm fișierul cu numele „introduction.php“ în directorul
„C:/xampp/htdocs“.
Client side:
• După salvarea fișierului îl deschidem în browser
(http://localhost/introduction.php) și analizăm conținutul
paginii web afișate în browser.

În PHP se pot realiza următoarele operații:


... generare de pagini cu conținut dinamic
... creare, deschidere, citire, scriere, ștergere și închidere de
fișiere de pe server
... colectarea datelor din formulare
... trimiterea și primirea cookie-urilor
...adăugarea, ștergerea, actualizarea datelor din baza de date
... controlul accesului utilizatorilor
... criptarea datelor
PHP nu te limitează în privința obiectelor afișate prin pagini web: pot
fi afișate imagini, fișiere PDF, video Flash, texte XHTML sau XML.

De ce să alegi programare în PHP?


• PHP rulează pe diferite platforme (Windows, Linux, Unix,
Mac OS X, etc.)
• PHP este compatibil cu aproape toate serverele utilizate în
prezent (Apache, IIS etc.)
• PHP suportă o gamă largă de baze de date

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

• PHP este gratuit. Descărcați-l din resursa oficială PHP:


www.php.net
• PHP este ușor de învățat și rulează eficient pe partea de server
De ce anume avem nevoie?
Pentru a începe să utilizați PHP, parcurgeți pașii de mai jos:
• Identificați o gazdă web PHP gazdă și suport MySQL
• Instalați un server web pe propriul PC, apoi instalați PHP și
MySQL
• Urmați instrucțiunile de instalare de pe situl oficial
http://php.net/manual/en/install.php
• De ce avem cu adevărat nevoie în acest curs?
• Un server web XAMPP ( Apache), un interpretor PHP și un
SBGD (MySQL)
• Un editor de text (Notepad++)
• Un browser (Firefox)
În cadrul acestui seminar, vom configura PHP pe propriul PC prin
utilizarea XAMPP (inclusiv Apache și PHP, MySQL).
Site-ul oficial PHP (PHP.net) are instrucțiuni de instalare pentru PHP:
http://php.net/manual/en/install.php
Exemplul următor evidențiază modul în care PHP lucrează cu HTML,
CSS și JavaScript:
Ce vom realiza?
• vom crea un fișier *.php dintr-un fișier *.html deja existent
• vom adăuga stiluri utilizând CSS
• vom adăuga/include pagini dinamice (fișiere *.php)
• vom include un subsol, conținut ș i un meniu de navigare în
paginile web.
Fișierele basis.html și basis.css au fost create și au următorul
conținut:
basis.css
* {
margin: 0px;
padding: 0px;
}
body {
font-size: 12pt;

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

font-family: Verdana,Arial,sans-serif;
}

/* General fonts */
ul, li {
margin-top: 0px;
list-style-type: none;
}
p {
font-family: Verdana,Arial,sans-serif;
font-style: normal;
font-variant: normal;
font-weight: normal;
font-size: 1em;
line-height: normal;
padding: 0px;
}
h1 {
font: 1.25em Verdana,Arial,sans-serif;
font-weight: bold;
padding-bottom: 10px;
}
h2 {
font: 1.25em Verdana,Arial,sans-serif;
font-weight: bold;
padding-bottom: 10px;
color: red;
}
h3 {
font: 1.25em Verdana,Arial,sans-serif;
font-weight: bold;
padding-bottom: 10px;
}
img {
border: none;
}

/* Container */
#container {
width: 970px;
margin-top: 20px;
margin-right: auto;
margin-bottom: auto;
margin-left: auto;
}

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

/* Header Components */
#header {
border: 1px solid #999999;
width: 970px;
height: 115px;
}

/* Logo */
#logo {
float: left;
}

/* Slogan */
#slogan {
position: absolute;
width: auto;
height: 30px;
margin-top: 20px;
margin-left: 280px;
font-size: 2.3em;
font-weight: bold;
}

/* Search bar */
#search {
float: right;
margin-top: 30px;
clear: right;
font-size: 0.8em;
}

/* Rootline */
#rootline {
font: normal 10px Verdana,Arial,sans-serif;
padding-top: 5px;
padding-bottom: 0px;
margin-left: 0px;
}

/* Left part */
#left {
float: left;
min-height: 590px;
padding-bottom: 0px;
padding-top: 0px;
position: relative;

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

width: 200px;
border: 1px solid #999999;
margin-top: 10px;
font-size: 1.1em;
}

/* Language */
#languages {
padding-top: 5px;
padding-left: 16px;
padding-bottom: 20px;
}

/* Meniu stanga */
#left-menu {
text-align: left;
margin-top: 40px;
list-style-type: none;
margin-left: 8px;
}
#left-menu a {
text-decoration: none;
}
#left-menu a:hover {
color: #666;
}

/* The main part of the page */


#middle {
float: left;
height: 580px;
margin-left: 10px;
width: 520px;
border: 1px solid #999999;
margin-top: 10px;
padding: 5px 5px 5px 10px;
overflow: auto;
}

/* Right */
#right {
width: 202px;
padding-top: 5px;
padding-left: 5px;
padding-right: 5px;
padding-bottom: 0px;

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

min-height: 585px;
float: right;
text-align: left;
font-weight: normal;
font-family: Verdana,Arial,sans-serif;
border: 1px solid #999999;
margin-top: 10px;
position: relative;
font-size: 0.8em;
}

/* Footer */
#footer {
position: relative;
top: 15px;
font-family: Verdana,Arial,sans-serif;
clear: both;
text-align: right;
color: #333;
height: 25px;
width: 970px;
text-decoration: none;
border: 1px solid #999999;
font-size: 0.9em;
padding-top: 5px; }

basis.html
<html>

<head>
<link rel="stylesheet" type="text/css"
href="css/basis.css">
</head>

<body>
<div id="container">

<div id="header">
<div id="logo">###LOGO###</div>
<div id="slogan">###SLOGAN###</div>
<div id="search">###SEARCH###</div>
</div>

<div id="rootline">###ROOTLINE###</div>

<div id="left">

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

<div id="languages">###LANGUAGES###</div>
<div id="left-menu">###LEFT-MENU###</div>
<div id="motto">###MOTTO### </div>
</div>

<div id="middle"> ###MIDDLE###</div>

<div id="right"> ###RIGHT###


<div id="topnews">###TOPNEWS###</div>
</div>

<div id="footer"> ###FOOTER### </div>

</div>

</body>
</html>

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

Primii pași:
• Creați un nou folder în directorul "C: / xampp /" (denumit
"day_1")
• Copiați "basis.html" cu numele "basis.php" în directorul "C: /
xampp / htdocs / day_1"
• Creați un folder denumit "css" în "C: / xampp / htdocs /
day_1" și copiați "basis.ccs" în "C: / xampp / htdocs / day_1 /
css"
• Creați fișierele pe care le veți include în fișierul .php (Footer,
Content, Navigation)
• Pentru a include fișierele în "basis.php", utilizați instrucțiunea
include.
Pentru o organizare optimă a fișierelor pe disc vă propunem
următoarea structură de directoare și fișiere :

Figura de mai jos evidențiază ce se întâmplă la execuția pe server a


fișierului basis.php:

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

Ce este World Wide Web (www) ?


• Termenul World Wide Web este un sistem de documente și
informații de tip hipertext legate între ele care pot fi accesate
prin rețeaua mondială de Internet. Documentele, care rezidă
în diferite locații pe diverse calculatoare server, pot fi regăsite
cu ajutorul unui identificator univoc numit URI. Hipertextul
inclusiv imagini etc. este afișat cu ajutorul unui program de
navigare în web numit browser, care descarcă paginile web de
pe un server web și le afișează pe un terminal „client” la
utilizator.
• Toate calculatoarele
folosesc un protocol
de comunicare numit
HTTP

Cum funcționează www?

• Informațiile web sunt


stocate în documente
numite pagini web
• Paginile Web sunt
fișiere stocate pe
computere numite
servere web
• Calculatoarele care
14
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

”citesc” paginile web sunt numite clienți web


• Clienții web vizualizează paginile cu un program numit
browser web
• Cele mai populare browsere sunt Google Chrome, Firefox și
Internet Explorer

sursa imaginii: Wikipedia


Figura de mai sus evidențiază comunicarea ”statică” în www.

Interpretorul PHP acționează ca o


extensie a serverului web care
este invocată de ori câte ori o
pagina PHP este
accesată(imaginea din dreapta ).
Această componentă procesează
codul-sursa din pagină și apoi
transmite rezultatul înapoi la
web-server, ajungând în final în
browserele utilizatorilor.

Modul de funcționare al
interpretorului PHP este ilustrat
de figura din dreapta și de figura
din pagina următoare :

15
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 $x va 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, programat orii 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 a fara 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 u ltimul 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 une i 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 formularu lui 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;alert(
‚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 în cearcă 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 variabilel e 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 ses iune.
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 ses iune 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_INCREM ENT
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["lastn ame"]. "<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.
PhpMyAdmi n
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
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

3. Fișe de lucru
FIȘA DE LUCRU NR.1- instalarea produselor software
1. Download-ați pachetul web XAMPP compatibil cu sistemul de
operare instalat pe computerul vostru de la adresa
https://www.apachefriends.org/ro/download.html și acceptați
setările implicite pentru instalare.
2. Navigați în Windows și localizați directorul C:/XAMPP cu
subdirectorul htdocs.
3. Porniți aplicația XAMPP - Control Panel lansând în execuție
fișierul xampp-control.exe.

FIȘA DE LUCRU NR.2- crearea fișierelor html, css și php


1. Creați un nou director numit „day_1“ în directorul „C:/xampp/“.
2. Copiați fișierul “basis.html “ în directorul „C:/xampp
/htdocs/day_1“și redenumiți-l „basis.php“;
3. Creați directorul „css“ în „C:/xampp/htdocs/day_1“ și copiați
„basis.css“ în „C:/xampp/htdocs/day_1/css“;
4. Modificați fișierul .css, prin aplicarea de noi stiluri pentru font și
background;
5. Creați o listă ne-ordonată pentru a o utiliza în secțiunea de meniu;
6. Creați un fișier “menu.php” care va conține tagurile pentru crearea
listei ne-ordonate
<?php
echo '<ul>
<li><a href="">Home</a></li>
<li><a href="http://www.w3schools.com /php/
default.asp"> PHP-Tutorial</a></li>
<li><a href="http:// www.w3schools.com/html/
default.asp">HTML-Tutorial</a></li>
<li><a href="http:// www.w3schools.com/ css/
default.asp"> CSS-Tutorial</a></li>
<li><a href="http:// www.w3schools.com /js/
default.asp" >JavaScript-Tutorial</a></li>
</ul>';
?>

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

FIȘA DE LUCRU NR.3- transformarea paginilor statice în pagini


dinamice
În directorul Day_1 există fișierele basis.html și basis.css
1. Scrieți în basis.html codul PHP pentru includerea codului PHP în
pagina html
2. Creați fișierele pentru secțiunile paginii web, de tip include-files
(Footer, Content, Navigation)
3. Pentru includerea fișierelor create mai sus în “basis.php“ utilizaț i
instrucțiunea include
<html>
<head>
<link rel="stylesheet" type="text/css"
href="css /basis.css">
</head>
<body>
<div id="container">
<div id="header">
<div id="logo">###LOGO###</div>
<div id="slogan">###SLOGAN###</div>
<div id="search">###SEARCH###</div>
</div>
<div id="rootline">###ROOTLINE###</div>
<div id="left">
<div id="languages">###LANGUAGES###</div>
<div id="left-menu">###LEFT-MENU###</div>
<div id="motto">###MOTTO###</div>
<div id="left-menu">
<?PHP
include 'menu.php';
?>
</div>
</div>
<div id="middle">
<h1>Welcome to my webpage</h1>
<?php
include 'vars.php';
echo "I have $number $color $car. ";
?>
</div>
<div id="right"> ###RIGHT###
<div id="topnews">###TOPNEWS###</div>
</div>
<div id="footer">
<?PHP
61
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

include 'footer.php';
?>
</div>
</div>
</body>
</html>

FIȘA DE LUCRU NR.4- utilizarea instrucțiunii de afișare în PHP


1. Creați în directorul “day_1” scripturi php pentru obținerea
următoarelor rezultate:
Afișarea în browser a mesajului “Welcome to Alfatraining”
<html>
<body>
<?php
echo " Welcome to Alfatraining!";
?>
</body>
</html>
2. Adăugați comentarii liniilor de cod PHP
3. Studiați proprietatea non case-sensitivity a instrucțiunilor PHP

FIȘA DE LUCRU NR.5- utilizarea variabilelor


Creați în directorul “day_1” scripturi php pentru obținerea
următoarelor rezultate:
1. Declararea variabilelor color, car, house și atribuirea de valori
<?php
$number = 100;
$color = 'silver';
$car = 'Peugeot 206';
?>
2. Afișarea valorilor memorate în variabile și a tipurilor de date ale
acestora utilizând funcția var_dump().
<?php
$x = 4569;
var_dump($x);
?>
3. Modificați numele variabilelor în instrucțiunea de afișare pentru a
observa proprietatea case-sensitivity a variabilelor.
<html>

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

<body>
<?php
$color = "red";
echo " My car is " . " . $color . ";
echo " My house is" . " . $COLOR. ";
echo " My boat is" . " . $CoLoR.";
?>
</body>
</html>

FIȘA DE LUCRU NR.6- utilizarea structurilor de control


Creați în directorul “day_1” scripturi php pentru a testa rezultatele
structurilor de control în PHP.
1. Structurile de decizie if, if else și if elseif
<?php
$t = date("H");
if ($t < "10") {
echo "Have a good morning!";
}
else {
if ($t < 20) {
echo "Have a good day!";
}
else {
echo "Have a good night!";
}
}
?>
2. Structurile repetitive for, while, do while, foreach
<?php
$colors=array("red","green","blue","yellow");
foreach($colors as $value){
echo "$value <br>";
}
?>

FIȘA DE LUCRU NR.7- crearea și utilizarea tablourilor


1. Declarați și inițializați un tablou numit cars care să memoreze
mărcile a trei mașini. Afișați datele memorate în tablou utilizând
instrucțiunea foreach.
<?php
$cars = array("Volvo", "BMW", "Toyota");

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

foreach($cars as $car)
echo "I like " . $car. "<br>";
?>
2. Declarați și inițializați un tablou numit cars în care memorați
mărcile a 3 mașini. Sortați crescător tabloul și afișați datele.
<?php
$cars = array("Volvo", "BMW", "Toyota");
sort($cars);
foreach($cars as $car)
{
echo $car;
echo "<br>";
}
?>

FIȘA DE LUCRU NR.8- transformarea paginilor statice în pagini


dinamice
1. În directorul “Day 2/static_HTML” identificați fișierele resurse ale
unui website (fișiere .html, imagine, .css, etc).
2. Creați fișierele .php necesare pentru toate secțiunile unei pagini
web (header, menu, footer).
Menu.php
<?php
echo "<ul id='main_menu'>";
echo"<li";
if(basename($_SERVER['PHP_SELF'])=="aktuell.ph
p")
echo " class='selected'";
echo "><a
href='aktuell.php'>Aktuelles</a></li>";
echo "<li";
if(basename($_SERVER['PHP_SELF'])=="ueber_uns.
php")
echo " class='selected'";
echo "><a href='ueber_uns.php'>Über
uns</a></li>";
echo "<li";
if(basename($_SERVER['PHP_SELF'])=="leistungen
.php")
echo " class='selected'";
echo "><a
href='leistungen.php'>Leistungen</a></li>";
echo "<li";
64
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

if(basename($_SERVER['PHP_SELF'])=="team.php")
echo " class='selected'";
echo "><a href='team.php'>Team und
Kontakt</a></li>";
echo "<li";
if(basename($_SERVER['PHP_SELF'])=="impressum.
php")
echo " class='selected'";
echo "><a
href='impressum.php'>Impressum</a></li>";
echo "</ul>";
?>
3. Ștergeți fișierele html.

FIȘA DE LUCRU NR.9- Crearea funcțiilor și studiul


comportamentului variabilelor în diferite domenii de vizib ilitate
1. Creați o funcție myTest care conține variabila locală x
<?php
function myTest() {
$x = 5; //variabilă locală
echo "<p> Variable x inside function is
$x </p>";
}
myTest();
//utilizarea variabilei x în exteriorul
funcției
//va genera eroare
echo "<p> Variable x outside function is $x
</p>";
?>

2. Creați o funcție myTest2 care conține variabila locală statică x.


<?php
function Mytest2 () {
static $x =0;
echo $x ." <br>";
$x++;
}
Mytest2 ();
Mytest2 ();
Mytest2 ();
?>

3. Creați o funcție myTest3 și o variabilă globală x.

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

<?php
$x = 5; //variabila globală
function Mytest3() {
//utilizarea variabilei x în interiorul
funcției
//va genera o eroare
echo "<p>Variable x inside function is : $x
</p>";
}
Mytest3();
echo "<p>Variable x outside function is:
$x</p>";
?>

4. Creați o funcție myTest4 și variabilele globale x și y.


<?php
$x = 5;
$y = 10;
function Mytest4(){
$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
}
Mytest4();
echo $y;//se afișează valoarea 15
?>

FIȘA DE LUCRU NR. 10- Crearea unui formular utilizând metodele


GET și POST
1. Creați un fișier HTML care afișează un formular cu două câmpuri
și un buton submit, utilizând metoda POST.
Exemplul nr.1
<html>
<body>
Welcome <b><?php echo $_POST["name"];?></b>
<br>
Your e-mail adress is: <b><?php echo
$_POST["e-mail"]; ?></b><br>
Your website is: <b><?php echo
$_POST["website"]; ?><br></b>
You say: <b><?php echo $_POST["comment"];
?><br></b>
And you are a : <b><?php echo
$_POST["gender"]; ?></b>
</body>

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

</html>

Exemplul nr. 2
<html>
<body>
<form action = "welcome.php" method="post">
Name: <input type="text" name="name" ><span
style="color:red">*</span><br>
E-mail: <input type="text" name="e-mail"><span
style="color:red">*</span><br>
WebSite: <input type="text"
name="website"><br>
Comment: <textarea name="comment" rows="5"
cols="40"></textarea><br>
<input type="radio" name="gender"
value="female">Female
<input type="radio" name="gender"
value="male">Male<br>
<input type="submit">
</form>
<p style="color:red">* required field</p>
</body>
</html>
2. Creați un fișier HTML care afișează un formular cu două câmpuri
și un buton submit, utilizând metoda GET pentru transmiterea
datelor.
Exemplul nr.1
<html>
<body>
Welcome <?php echo $_GET["name"];?> <br>
Your e-mail address is: <?php echo $_GET["e-
mail"]; ?>
</body>
</html>
Exemplul nr.2
<html>
<body>
<form action = "welcome_get.php" method="get">
Name: <input type="text" name="name" ><br>
E-mail: <input type="text" name="e-mail"><br>
<input type="submit">
</form>
</body> </html>

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

FIȘA DE LUCRU NR. 11- Crearea unui formular cu câmpuri


obligatorii și validarea datelor din câmpuri
1. În fișierul “form_handling.php” există un script care generează un
formular. Scrieți instrucțiunile necesare validării datelor din toate
câmpurile formularului.
2. Eliminați caracterele inutile (space, tab, newline) utilizând funcția
PHP trim().
3. Eliminați caracterele backslash (\)utilizând funcția PHP
stripslashes().
4. Creați o funcție test_input() care să realizeze toate verificările.
5. Adăugați variabilele $nameErr, $emailErr, $genderErr și
$websiteErr.
6. Adăugați o instrucțiune if pentru fiecare variabilă $_POST.
7. Verificați data introdusă în fiecare câmp din formular și afișați un
mesaj corespunzător de eroare în cazul în care într-un câmp nu s-au
introdus date.
8. Validați datele introduse, afișând mesaje ca "Does the Name field
contain only letters and whitespace?", "Does the E-mail field
contain a valid e-mail address syntax?", "Does the Website field
contain a valid URL?".
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>

<?php
// declară și inițizează variabilele folosite
//pentru afișarea mesajelor de eroare
$name = $email = $gender = $comment = $website
= "";
$nameErr = $emailErr = $genderErr =
$websiteErr = $commentErr ="";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if(empty($_POST["name"]))
{
$nameErr="Name is required";
}
68
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

else
{
$name=test_input($_POST["name"]);
}
if(empty($_POST["email"]))
{
$emailErr="Email is required";
}
else
{
$email=test_input($_POST["email"]);
}
if(empty($_POST["website"]))
{
$websiteErr="Website is required";
}
else
{

$website=test_input($_POST["website"]);
}
if(empty($_POST["comment"]))
{
$commentErr="Comment is required";
}
else
{

$comment=test_input($_POST["comment"]);
}
if(empty($_POST["gender"]))
{
$genderErr="Gender is required";
}
else
{

$gender=test_input($_POST["gender"]);
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

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

?>

<h2>PHP Form Validation Example</h2>


<form method="post" action="<?php echo
htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input type="text" name="name">
<?php echo $nameErr; ?> <br><br>
E-mail: <input type="text" name="email">
<?php echo $emailErr;?> <br><br>
Website: <input type="text" name="website">
<?php echo $websiteErr;?> <br><br>
Comment: <textarea name="comment" rows="5"
cols="40"></textarea>
<?php echo $commentErr;?> <br><br>
Gender:
<input type="radio" name="gender"
value="female">Female
<input type="radio" name="gender"
value="male">Male
<?php echo $genderErr;?> <br><br>
<input type="submit" name="submit"
value="Submit">
</form>

<?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>

</body>
</html>

FIȘA DE LUCRU NR. 12- Crearea, modificarea și ștergerea unui


cookie
1. Creați un cookie numit "user" care să memoreze valoarea "John

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

Doe". Cookie-ul va expira după 30 de zile (86400 * 30). Simbolul


"/" semnifică faptul că cookie-ul va fi vizibil în întreg site-ul.
Determinarea valorii memorate de cookie se realizează cu ajutorul
variabilei globale. Utilizați funcția isset() pentru a verifica dacă au
fost făcute setările pentru cookie.
<?php
$cookie_name="user";
$cookie_value="John Doe";
setcookie($cookie_name,$cookie_value, time()+
(86400*30) ,"/");
?>
<html>
<body>
<?php
if(!isset($_COOKIE[$cookie_name])){
echo "Cookie named '".$cookie_name."'is
not set!";
}
else{
echo "Cookie named '".$cookie_name."'
is set!<br>";
echo "Value is:
".$_COOKIE[$cookie_name];
}
?>
</body>
</html>

2. Ștergeți cookie-ul “user”, utilizând funcția setcookie() pentru


setarea orei de expirare cu o oră în urmă față de ora curentă.
<?php
//setăm ora de expirare cu o oră în urmă
//față de ora curentă
setcookie("user","",time() -3600);
?>
<html>
<body>
<?php
echo "Cookie 'user' is deleted ";
?>
</body>
</html>

3. Verificați dacă un cookie este activ. Mai întâi, creați un cookie


utilizând funcția setcookie(), apoi verificați numărul de cookies
active folosind funcția count().
71
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

<?php
setcookie("test_cookie", "test", time() +
3600, '/');
?>

<html>
<body>

<?php
if(count($_COOKIE)>0) {
echo "Cookies are enabled.";
}
else {
echo "Cookies are disabled.";
}
?>
</body>
</html>

FIȘA DE LUCRU NR. 13 - Crearea, modificarea și ștergerea


sesiunilor
1. Creați o sesiune care să conțină variabilele favcolor și favanimal
<?php
//începerea sesiunii
session_start();
?>

<html>
<body>

<?php
// Setarea datelor sesiunii
$_SESSION["favcolor"] = "none";
$_SESSION["favanimal"] = "dog (Golden
Retriever)";
echo "Session variables are set.";
?>

</body>
</html>

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

2. Utilizați instrucțiunea print_r pentru a afișa valorile variabilelor


sesiunii curente.
<?php
session_start()
?>

<html>
<body>
<?php
print_r($_SESSION);
?>

</body>
</html>

3. Scrieți un script PHP pentru a modifica valoarea variabilei favcolor


a sesiunii curente prin suprascriere
<?php
session_start()
?>
<html>
<body>
<?php
//modificăm variabila sesiune prin
suprascriere
$_SESSION["favcolor"] = "fuchsia";
print_r($_SESSION);
?>
</body>
</html>
4. Scrieți un script PHP pentru eliminarea tuturor datelor unei sesiuni
<?php
session_start()
?>
<html>
<body>
<php session_unset();
session_destroy(); ?></body>
</html>

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

FIȘA DE LUCRU NR. 14- MySQL-Crearea conexiunii la baza de


date, crearea bazei de date și a tabelelor
1. Scrieți un script PHP pentru conexiunea la baza de date.
<?php
$servername="localhost";
$username="root";
$password="";
$conn=mysqli_connect($servername,$username,$pa
ssword);
if(!$conn)
{
die("connection
failed".mysqli_connect_error());
}
else
echo "Connected succeded";
?>

2. Scrieți un script PHP pentru a crea baza de date myDB


<?php
$servername="localhost";
$username="root";
$password="";
$conn=mysqli_connect($servername,$username,$pa
ssword);
if(!$conn)
{
die("connection
failed".mysqli_connect_error());
}
// echo "Connected succeded";
$sql = "CREATE DATABASE myDB";
if (mysqli_query($conn, $sql)) {
echo "Database created successfully";
} else {
echo "Error creating database: " .
mysqli_error($conn);
}
mysqli_close($conn); ?>

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

3. Scrieți un script PHP care creează tabela Myguests în interiorul


bazei de date myDB.
<?php
$servername="localhost";
$username="root";
$password="";
$dbname="myDB";
$conn=mysqli_connect($servername,$username,$pa
ssword,$dbname);
if(!$conn)
{
die("connection
failed".mysqli_connect_error());
}
// echo "Connected succeded";
$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 with
success!";
}
else {
echo "Error creating
table!".mysqli_error($conn);
}
mysqli_close($conn);
?>

FIȘA DE LUCRU NR. 15 - MySQL - Utilizarea comenzilor INSERT


și UPDATE
1. Scrieți un script PHP care înserează în tabela Myguests o
înregistrare nouă cu numele John Doe și email-ul
john@example.com.
<?php
$servername="localhost";
$username="root";
$password="";
$dbname="myDB";

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

$conn=mysqli_connect($servername,$username,$pa
ssword,$dbname);

if(!$conn)
{
die("connection
failed".mysqli_connect_error());
}

// echo "Connected succeded";


$sql="INSERT INTO MyGuests (firstname,
lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";
if(mysqli_query($conn,$sql)){
echo "New recorded created with
success!";
}
else {
echo
"Error:".$sql."<br>".mysqli_error($conn);
}
mysqli_close($conn);
?>

2. Scrieți un script PHP care înserează în tabela Myguests trei


înregistrări.
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
$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,

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

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);
}

mysqli_close($conn);
?>

FIȘA DE LUCRU NR. 16- MySQL- afișarea datelor unui utilizator


stocate în baza de date în cadrul unui script de login la site
1. Scrieți un script PHP care să permită conectarea unui utilizator la
baza de date cu ajutorul datelor introduse într-un formular.
<?php
//start session or take session
session_start();
//Connection with database project
$servername="localhost";
$username="root";
$password="";
$dbname="project";
//create connection
$conn = mysqli_connect($servername, $username,
$password, $dbname);
if(!$conn)
die("Connection failed ".
mysqli_connect_error());
$sql="SELECT * FROM person Where
Lastname LIKE '" . $_POST["name"]. "' AND
Password LIKE '" .$_POST["password"]. "' ";

$result=mysqli_query($conn, $sql);
if(mysqli_num_rows ($result) > 0){
$row = mysqli_fetch_assoc($result);
$_SESSION["name"] = $_POST["name"];
$_SESSION["firstname"]=$row["firstname"
];
$_SESSION["role"]=$row["role"];
$_SESSION["gender"]=$row["gender"];

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

$_SESSION["email"]=$row["email"];

}
?>

<?php
include 'control.inc.php';
?>
<html>
<body>
<h3>Intro page</h3>
<?php
echo "<p>Hello ". $_SESSION["name"]. " !
</p>";
echo "<h3>You are a ". $_SESSION['role'].
"</h3>";
echo "<h3>And you are a " .$_SESSION['gender']
. "</h3>";
echo "<h3>Your email is " . $_SESSION['email']
. "</h3>";
?>
<p><a href="http://localhost/Day_5/other.php">
Go to another page </a></p>
<p><a
href="http://localhost/Day_5/logoff.php"> Log off
</a></p>
</body>
</html>

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

4. Crearea unui website dinamic utilizând PHP


Magazin online
Proiectul MAGAZIN ONLINE constă în realizarea unui webs ite de
comenzi virtuale pentru rechizite școlare folosind cunoştinţe de html,
css, php și mysql.
Pentru început se va crea un șablon pentru site.
Paginile html, vor avea secțiunile: antet, subsol, meniul principal si
porțiunea în care va fi afișat conținutul, secțiuni realizate folosind div-
uri.
Site-ul conține un meniu cu următoarele opțiuni:
• Home,
• Descriere
• Produse
• Contact
Pentru realizarea unui design cât mai atractiv au fost create mai multe
fișiere .css pentru formatarea paginilor site-ului.
Astfel:
• în login.css este inclus codul folosit la pagina de logare
• style-cos.css include codul folosit la coșul de cumpărături
• style-home.css include stilul pentru pagina de Start și pentru
pagina principală
• style-item.css creează un stil pentru obiectele, imaginile site-
ului
• style-contact.css asigură stilul paginii de contact
• style-descriere.css conferă paginii de descriere un aspect mai
complex
• în style-produse.css este creat stilul paginii produse.php

Conținutul fișierului home.php este următorul:


<html>
<head>
<title> magazinonline.ro </title>
<?php
// se specifica includerea fisierului php.
include 'include/include_start.php';
?>
<!-- se specifica includerea fisierului css -->
<link rel='stylesheet' href='css/style-
home.css'>
79
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

</head>
<body style='background-image:
url("img/background.jpg");'>
<?php
include 'include/user-bar.php';
?>

<div class='container'>
<?php
include 'include/menu.php';
?>
<div class='content'><img src='img/main.jpg'></div>
</div>
<?php
include 'include/footer.php';
?>
</body>
</html>

Conținutul fișierului style-home.css:


body{
margin: 0px;
padding: 0px;
}

.container {
margin-bottom:100px;
overflow:hidden;
margin-top: 40px;
}

.content {
width: 900px;
height: 480px;
margin: auto;
margin-top: 10px;
}

.content img{
width:900px;
height: 480px;
}

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

Fișierul style-produse.css:
body{
margin: 0px;
padding: 0px;
}

.container {
margin-bottom:100px;
overflow:hidden;
margin-top: 40px;
}

.search {
width: 400px;
margin-top: 10px;
margin-left: 20px;

.search input{
width: 100%;
font-family:Verdana, Geneva, sans-serif;
padding: 5px;
}
.left-bar {
float: left;
width: 300px;
background-color: #E6E6E6;
margin-top: 50px;
margin-left: 50px;
display: inline-block;
}

.left-bar ul{
margin-left: 0px;
}

.left-bar ul li{
padding: 5px;
border-bottom: 1px solid white;
}

.left-bar ul li a{
text-decoration: none;
color: black;
}
81
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

.left-bar ul li a:hover {
color: blue;
padding: 10px;
font-size: 20px;
}

.category-header{
background-color: #11A1D1;
height: 30px;
line-height: 40px;
color: white;
padding-left: 30px;
}

.content {
background-color: #D3F5BC;
float: right;
width: 800px;
margin-right: 50px;
margin-top: 50px;
display: inline-block;
}

.imagine-produs{
width: 234px;
height: 300px;
padding: 5px;
margin: 10px;
float: left;
border: 1px solid black;
}

.imagine-produs img{
width: 228px;
height: 228px;
margin: 5px;
}

.imagine-produs a{
text-decoration: none;
color: black;
}

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

Continutul fișierului login.css este:


html, body{
margin: 0;
padding: 0;
}
.container{
width: 720px;
margin: auto;
margin-top: 40px;
margin-bottom: 100px;
}

.login{
float: left;
background-color: #3AE8B7;
width: 300px;
height: 200px;
margin-top: 40px;
margin-bottom: 100px;
padding: 20px;
}

.sign-up{
float: right;
background-color: #3AE8B7;
width: 300px;
height: 350px;
margin-top: 40px;
margin-bottom: 100px;
padding: 20px;
}

h1 {
text-align: center;
color: black;
}

.form {
width: 250px;
margin: auto;
}
.error {
color: red;
text-align: center;
}

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

Fișierul style-item.css cu următorul conținut formatează imaginile


inserate în pagini:
html body{
margin: 0;
padding: 0;
}

.container{
background-color: #9BF2D8;
margin: auto;
width: 1000px;
margin-top: 100px;
height: 500px;
margin-bottom: 100px;
}

.image{
float: left;
width: 300px;
height: 300px;
margin: 20px;
}

.image img{
width: 100%;
height: 100%;
border: 1px solid black;
}

.content {
padding-top: 50px;
padding-left: 400px;
padding-bottom: 120px
}

Fișierul style-descriere.css:
html, body{
padding: 0px;
margin: 0px;
}
.content{
width: 800px;
background-color: #b3ffcc;
margin: auto;
height: 400px;
84
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

margin-top: 50px;
border: 5px dotted black;
}
.descriere{
padding: 30px;
}
.descriere h1{
color: #ff3300;
font-family:"Lucida Sans Unicode", "Lucida
Grande", sans-serif;
text-align: center;
}
descrie ul{
list-style-type: circle;
}
.descriere li{
color: #00cc44;
margin-top: 20px;
font-family:"Lucida Sans Unicode", "Lucida
Grande", sans-serif;
}
.descriere p{
font-family:"Lucida Sans Unicode", "Lucida
Grande", sans-serif;
float: right;
bottom: 0px;
font-size: 15px;
color: #ff3300;
}

Fișierul style-cos.css:
html, body{
margin: 0;
padding: 0;
}
.container{
margin-bottom: 100px;
}
.content{
width: 740px;
background-color: rgb(189,249,136);
margin: auto;
margin-bottom: 100px;
margin-top: 50px;
padding-bottom: 30px;
85
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

}
.obiect {
background-color: rgb(241,248,203);
margin-top: 10px;
height: 200px;
border: 1px solid rgb(159,159,159);
}
.imagine {
float: left;
height: 200px;
width: 200px;
}
.imagine img{
height: 100%;
width:100%;
}
.descriere {
float:right;
width: 480px;
height: 180px;
padding-top: 3px;
}
.total {
height: 100px;
background-color: #AFC3F0;
margin-top: 50px;
text-align: center;
padding-top: 2px;
margin-bottom: 0px;
border: 1px solid rgb(159,159,159);
}

Fișierul style-contact.css:
html, body{
padding: 0px;
margin: 0px;
}
.content{
width: 800px;
background-color: #b3ffcc;
margin: auto;
height: 400px;
margin-top: 50px;
border: 1px solid rgb(159,159,159);
}

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

.descriere{
float: right;
width: 340px;
height: 340px;
padding: 30px;
background-color: white;
border-left: 1px solid rgb(159,159,159);
}
.descriere h1{
color: #ff3300;
font-family:"Lucida Sans Unicode", "Lucida
Grande", sans-serif;
text-align: center;
}
.descriere p{
font-family:"Lucida Sans Unicode", "Lucida
Grande", sans-serif;
bottom: 0px;
font-size: 15px;
color: #ff3300;
}
.descriere img{
width: 40px;
haight: 40px;
}
.map{
width:399px;
height:400px;
float: left;
}

Pentru crearea bazei de date a site-ului se vor activa Apache, MySQL,


FileZilla din aplicația xampp, apoi se deschide în browser fereastra
localhost/phpmyadmin.

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

Pasul 1. Se va crea o nouă bază de date, numită în cazul nostru


magazin. Pentru aceasta se acționează butonul New din lista din
stânga ferestrei.

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

În noua bază de date vom crea tabelele:

• cos este tabela care conține produsele selectate de utilizator


• produse este tabela care conține detalii despre fiecare produs
în parte
• utilizator este tabela care conține date despre utilizatori

Tabela utilizator conține următoarele câmpuri:


• id_user int(11), auto_increment, cheie primară
• email varchar(60)
• parola varchar(30)
• judet varchar(20)
• localitate varchar(20)
• adresa varchar(100)
• telefon varchar(15)

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

Tabela produse conține următoarele câmpuri:


• id int(11), auto_increment, cheie primară
• nume varchar(50)
• imagine varchar(50)
• pret float(10, 2)
• categorie varchar(50)
• descriere text
• stoc int(11)

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

Tabela cos conține următoarele câmpuri:


• id_comanda int(11), auto_increment, cheie primară
• id_produs int(11)
• id_user int(11)
• stoc int(11)
• comanda int(11)

Pasul 2. Odată realizate tabelele, se vor stabili relațiile dintre ele în


modul design, ca în imaginea de mai jos.
91
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

Observație: Dacă unei tabele nu i s -a stabilit o cheie primară, pentru a


putea realiza o relație, trebuie să ne asigurăm că este indexat câmpul
de legătură.

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

În continuare vom popula tabelele cu informații.

Pasul 3. Vom crea un fișier care va face conexiunea la baza de date.

include_database.php
<?php
session_start();

$servername = „localhost‟;
$username = „root‟;
$password = „‟;
$dbname = „magazin‟;
$conn = mysqli_connect($servername, $username,
$password, $dbname);
?>

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

Pasul 4. Se pot afișa informațiile din tabele, de exemplu din tabela


produse.

produse.php
<html>
<head>
//includem pagina de conectare la baza de date
<?php
include “include_database. php”;
?>
</head>
<body>
<h1> acestea sunt produsele noastre: </h1>
<?php
/*afisam continutul tabelei folosind comanda sql,
select*/
$sql = “SELECT * FROM produse”;
94
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

//executam cerinta
$result = mysqli_query($conn, $sql);
//afisam detaliile fiecarui produs
while($row = mysqli_fetch_assoc($result)){
echo “<img src=‟img/”.$row[„imagine‟].”‟><br>
Nume: “.$row[„nume‟].”<br> Pret:
“.$row[„pret‟].”<br> Descriere:
“.$row[„descriere‟].” <br> Stoc: “.$row[„stoc‟].”
<br> Categorie: “.$row[„categorie‟].””;
}
?>
</body>
</html>

Pasul 4. Adăugăm o bară de căutare pentru produse.


produse.php
<html>
<head>
//includem pagina de conectare la baza de date
<?php
include “include_database.php”;
?>
</head>
<body>
<!--Adaugam bara de cautare sub aspectul unei
forme-->
<form action=‟produse.php‟ action=‟post‟>
<input type=‟text‟ name=‟cauta‟
placeholer=‟Cauta produse‟>
</form>
<h1> acestea sunt produsele noastre </h1>
<?php
/*aplicam comanda select pentru a afisa continutul
tabelei produse*/
$sql = “SELECT * FROM produse”;
/*verificam daca bara de cautare a fost completata
si nu este goala*/
if(isset($_POST[„cauta‟]) && $_POST[„cauta‟]
!= „‟)
{
//adaugam comenzi la variabila sql
$sql .= “ WHERE nume LIKE
„%”.$_POST[„cauta‟].”%‟ OR descriere LIKE
„%”.$_POST[„cauta‟].”%‟ OR categorie LIKE
„”.$_POST[„cauta‟].”‟”;
95
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

/*caracterele % se folosesc în structura %string%


pentru a cauta in baza de date stringul dat ca si
secventa: de exemplu daca in baza de date este
stringul “Bine ati venit la cursul de php!” si
cautam “%php%” vom gasi propozitia dorita */
}
$result = mysqli_query($conn, $sql);
//pentru fiecare produs afisam detaliile
while($row = mysqli_fetch_assoc($result)){
echo “<img src=‟img/”.$row[„imagine‟].”‟><br>
Nume: “.$row[„nume‟].”<br> Pret:
“.$row[„pret‟].”<br> Descriere:
“.$row[„descriere‟].” <br> Stoc: “.$row[„stoc‟].”
<br> Categorie: “.$row[„categorie‟].””;
}
?>
</body>
</html>

Pasul 5. Vom crea o pagină de logare pentru utilizatori.


login.php
<html>
<head>
<!--includem pagina de conectare la baza de date-->
96
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

<?php
include “include_database.php”;
//verificam existenta contului in baza de date
include “control_login.php”;
?>
</head>
<body>

<!--realizam un formular pentru logare (nu uitati sa


introduceti si cativa utilizatori in tabela
utilizatori din baza de date) -->
<form action=‟login.php‟ method=‟post‟>
<input type=‟email‟ name=‟email‟
placeholder=‟Email‟>
<input type=‟password‟ name=‟parola‟
placeholder=‟Parola‟>
<input type=‟submit‟ name=‟send‟ value=‟Login‟>
</form>
</body>
</html>

control_login.php
<?php
<!--verificam daca a fost trimis vreun formular de
logare, testand daca exista variabila $_POST[„send‟]
-->
if(isset($_POST[„send‟]))
{
<!--verificam daca au fost completate campurile
trimise si nu au fost vide -->
if($_POST[„email‟] != „‟ && $_POST[„parola‟] !=
„‟)
{
//verificam daca exista contul dat
$sql = “SELECT * FROM utilizator WHERE email
= „”.$_POST[„email‟].”‟ AND parola =
„”.$_POST[„parola‟].”‟”;

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

$result = mysqli_query($conn, $sql);


//daca exista contul, il memora m in sesiune
if(mysqli_num_rows($result)>0)
{

<!--memorăm datele utilizatorului in variabila $row


si salvam id-ul in sesiune-->
$row = mysqli_fetch_assoc($result);
$_SESSION[„id‟] = $row[„id‟];
} } }
?>

Pasul 6. În fișierul produse.php adăugam butonul ”Adauga in cos”


pentru fiecare produs.

produse.php
<html>
<head>
<!--includem pagina de conectare la baza de date-->
<?php
include “include_database.php”;
//includem pagina pentru adaugarea de produse in cos
include “adauga_cos.php”;
?>
</head>
<body>
<!--bara de cautare-->
<form action=‟produse.php‟ action=‟post‟>
<input type=‟text‟ name=‟cauta‟
placeholer=‟Cauta produse‟>
</form>
<h1> acestea sunt produsele noastre </h1>
<?php
//se afiseaza tabela
$sql = “SELECT * FROM produse”;
//se verifica daca bara de cautare nu este goala
if(isset($_POST[„cauta‟]) &&
$_POST[„cauta‟] != „‟)
{
//se adauga criterii de cautare
$sql .= “ WHERE nume LIKE
„%”.$_POST[„cauta‟].”%‟ OR descriere LIKE
„%”.$_POST[„cauta‟].”%‟ OR categorie LIKE
„”.$_POST[„cauta‟].”‟”;

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

<!--se cauta in baza de date secventa care contine


structura %string%-->
//se executa comanda
$result = mysqli_query($conn, $sql);
//se afiseaza detaliile fiecarui produs
while($row = mysqli_fetch_assoc($result)){
echo “<img src=‟img/”.$row[„imagine‟].”‟><br>
Nume: “.$row[„nume‟].”<br> Pret:
“.$row[„pret‟].”<br> Descriere:
“.$row[„descriere‟].” <br> Stoc: “.$row[„stoc‟].”
<br> Categorie: “.$row[„categorie‟].””;
echo “<br> <form
action=‟produse.php?produs_id=”.$row[„id‟].”‟
method=‟post‟>
<input type=‟submit‟ name=‟adauga‟
value=‟Adauga in cos‟>
</form>”;
}
?>
</body>
</html>

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

adauga_cos.php
<?php
/*verificam daca utilizatorul este logat, daca s-a
trimis formularul si id-ul produsului adaugat in
cos*/
if(isset($_SESSION[„id‟]) &&
isset($_GET[produs_id]) && isset($_POST[„adauga‟]))
{
//interogam tabela cautand produsul adaugat in cos
$sql = “SELECT * FROM produse WHERE id =
„”.$_GET[„produs_id‟].”‟”;

//se executa comanda


$result = mysqli_query($conn, $sql);
//se verifica daca exista produsul
if(mysqli_num_rows($result) > 0)
{
//se memoreaza datele produsului
$row = mysqli_fetch_assoc($result);
//se adauga produsul in cos
$sql =
”INSERT INTO cos (`id_produs`, `id_user`, `stoc`, `c
omanda`)
VALUES ( '”.$row[„id‟].”', '”.$_SESSION[„id‟].”', '
1', '0')”;
//se memoreaza produsul in variabila $res
$res = mysqli_query($conn, $sql);
} }?>

Pasul 7. În pagina cos.php vom afișa conținutul coșului utilizatorului


logat.

cos.php
<html>
<head>
<!--se include pagina de conectare la baza de date
-->
<?php
include “include_database.php”;
?>
</head>
<body>
<h1> Cosul meu </h1>

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

<!--se afiseaza toate produsele din cosul


utilizatorului, daca acesta este logat -->
<?php
//se verifica daca utilizatorul este logat
if(isset($_SESSION[„id‟]))
{
/*se selecteaza toate produsele din cos care au id-
ul utilizatorului si inca nu au fost comandate*/
$sql = “SELECT * FROM cos WHERE id_user =
„“.$_SESSION[„id‟].”‟ AND comanda = „0‟”;
// se memoreaza rezultatul
$result = mysqli_query($conn, $sql);
//pentru fiecare produs ga sit
while($row_cos = mysqli_fetch_assoc($result))
{
//se selecteaza produsul cu id-ul din cos
$sql = “SELECT * FROM produse WHERE id =
„”.$row_cos[„id_produs‟].”‟”;
//se memoreaza rezultatul
$res = mysqli_query($conn, $sql);
//se memoreaza datele produsului
$produs = mysqli_fetch_assoc($res);
//se afiseaza date despre fiecare produs din cos
echo “<img
src=‟img/”.$produs[„imagine‟].”‟><br>
Pret: “.$produs[„pret‟].”<br>
Descriere: “.$produs[„descriere‟].”<br>”;
}
}
?>
</body>
</html>

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

Pasul 8. Se calculează totalul comenzii și se activează butonul de


ștergere a produselor din coș.

cos.php
<html>
<head>
<!--se include pagina de conectare la baza de date
-->
<?php
include “include_database.php”;
//se include fișierul operatii_in_cos.php
include “operatii_in_cos.php”;
?>
</head>
<body>
<h1> Cosul meu </h1>

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

<!--se afiseaza toate produsele din cosul


utilizatorului, daca acesta este logat -->
<?php
//se verifica dacă utilizatorul este logat
if(isset($_SESSION[„id‟]))
{
/*se selecteaza toate produsele din cos care au id-
ul utilizatorului si inca nu au fost comandate*/
$sql = “SELECT * FROM cos WHERE id_user =
„“.$_SESSION[„id‟].”‟ AND comanda = „0‟”;
//se memoreaza rezultatul
$result = mysqli_query($conn, $sql);
//se initializeaza pretul total
$total = 0;
//pentru fiecare produs ga sit
while($row_cos = mysqli_fetch_assoc($result))
{
//se selecteaza produsul cu id-ul din cos
$sql = “SELECT * FROM produse WHERE id =
„”.$row_cos[„id_produs‟].”‟”;
//se memoreaza rezultatul
$res = mysqli_query($conn, $sql);
//se memoreaza datele produsului
$produs = mysqli_fetch_assoc($res);
//se adauga pretul produsului la total
$total += $produs[„pret‟];
//se afiseaza date despre fiecare produs din cos
echo “<img
src=‟img/”.$produs[„imagine‟].”‟><br>
Pret: “.$produs[„pret‟].”<br>
Descriere: “.$produs[„descriere‟].”<br>”;
//se adauga buton pentru stergere din cos
echo “<form
action=‟cos.php?produs_id=”.$produs[„id‟].”‟
method=‟post‟>
<input type=‟submit‟ name=‟delete‟
value=‟Sterge din cos‟>
</form>”;
}
/*dupa ce s-au afisat toate produsele se afiseaza
pret total comanda*/
echo “<br><b>Pret total comanda: </b> ”.$total;
}
?>
</body>
</html>

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

operatii_in_cos.php
<?php
/*se verifica daca s-a trimis formularul pentru
stergerea unui obiect din cos*/
if(isset($_POST[„delete‟]) &&
isset($_GET[„produs_id‟]))
{
//daca e cazul,se sterge obiectul din cos
$sql e ca = “DELETE FROM cos WHERE id_produs =
„”.$_GET[„produs_id‟].”‟ AND id_user =
„”.$_SESSION[„id‟].”‟ AND comanda = „0‟”;
//se memoreaza rezultatul
$res = mysqli_query($conn, $sql);
}
?>

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

Pasul 9. Se finalizează comanda printr-un buton specific, care odată


activat va face o serie de verificări: de logare și de calcul a
conținutului coșului.
cos.php
<html>
<head>
<!--se include pagina de conectare la baza de date
-->
<?php
include “include_database.php”;
//se include fisierul operatii_in_cos.php
include “operatii_in_cos.php”;
?>
</head>
<body>

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

<h1> Cosul meu </h1>


<!--se afiseaza toate produsele din cosul
utilizatorului, daca acesta este logat -->
<?php
//se verifica dacă utilizatorul este logat
if(isset($_SESSION[„id‟]))
{
/*se selecteaza toate produsele din cos care au id-
ul utilizatorului si inca nu au fost comandate */
$sql = “SELECT * FROM cos WHERE id_user =
„“.$_SESSION[„id‟].”‟ AND comanda = „0‟”;
//se memoreaza rezultatul
$result = mysqli_query($conn, $sql);
//se initializeaza pretul total
$total = 0;
//pentru fiecare produs ga sit in cos
while($row_cos = mysqli_fetch_assoc($result))
{
//se selecteaza produsul cu id-ul din cos
$sql = “SELECT * FROM produse WHERE id =
„”.$row_cos[„id_produs‟].”‟”;
//se memoreaza rezultatul
$res = mysqli_query($conn, $sql);
//se memoreaza datele produsului
$produs = mysqli_fetch_assoc($res);
//se adauga pretul produsului la total
$total += $produs[„pret‟];
//se afiseaza date despre fiecare produs din cos
echo “<img src=‟img/”.$produs[„imagine‟].”‟><br>
Pret: “.$produs[„pret‟].”<br>
Descriere: “.$produs[„descriere‟].”<br>”;
//se adauga buton pentru stergere din cos
echo “<form
action=‟cos.php?produs_id=”.$produs[„id‟].”‟
method=‟post‟>
<input type=‟submit‟ name=‟delete‟ value=‟Sterge din
cos‟>
</form>”;
}

//se afiseaza pretul total


echo “<br><b>Pret total comanda: </b> ”.$total;
//se adauga buton pentru comanda
echo “<form action=‟cos.php‟ method=‟post‟
<input type=‟submit‟ name=‟comanda‟ value=‟Finiseaza
comanda‟>

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

</form>”;
}
?>
</body></html>

operatii_in_cos.php
<?php
/*se verifica daca s-a trimis formularul pentru
stergerea unui obiect din cos */
if(isset($_POST[„delete‟]) &&
isset($_GET[„produs_id‟]))
{
//se sterge obiectul din cos
$sql = “DELETE FROM cos WHERE id_pro dus =
„”.$_GET[„produs_id‟].”‟ AND id_user =
„”.$_SESSION[„id‟].”‟ AND comanda = „0‟”;
//se memoreaza rezultatul
$res = mysqli_query($conn, $sql);
}
//daca este actionat butonul comenzii finale
if(isset($_POST['comanda']))
{
/*se cauta toate produsele din cosul utilizatorului
care nu au fost comandate inca si se marcheaza ca
fiind trimise*/
$sql = "SELECT * FROM cos WHERE id_user =
'".$_SESSION['id']."' AND comanda = '0'";
//se memoreaza rezultatul
$result = mysqli_query($conn, $sql);
/*pentru fiecare produs din cos variabila $row preia
datele */
while($row = mysqli_fetch_assoc($result))
{
//se realizeaza un update in campul comanda
$sql = "UPDATE cos SET comanda = '1' WHERE
id_comanda = '".$row['id_comanda']."'";
//se memoreaza rezultatul
$res = mysqli_query($conn, $sql);
/*se calculeaza cat a mai ramas stocul produsului
comandat, se cauta produsul comandat cu ajutorul id -
ului*/
$sql = "SELECT * FROM produse WHERE id =
'".$row['id_produs']."'";
//se memoreaza rezultatul
$rezultat = mysqli_query($conn, $sql);

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

//se preiau datele produsului i n $produs


$produs = mysqli_fetch_assoc($rezultat);
//se calculeaza stocul ramas in $stoc_ramas
$stoc_ramas = $produs['stoc'] - $row['stoc'];
//se face actualizarea produsului
$sql = "UPDATE produse SET stoc =
'".$stoc_ramas."' WHERE id = '".$produs['id']."';";
//se memoreaza rezultatul
$rezultat_final = mysqli_query($conn, $sql);
}
}
?>

Folderul website-ului ar trebui să conțină următoarele fișiere și


subfoldere:

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

Pentru se putea realiza logarea se va crea fișierul login.php.


Împărțirea paginii se face folosind secțiuni create cu div-uri.
Formularul pentru autentificare utilizează o adresă de email ce va fi
stocată în baza de date și o parolă.

login.php
<html>
<head>
<title> magazinonline.ro </title>
<link rel='stylesheet' href='css/login.css'>

<?php
include 'include/include_start.php';
include 'include/control_login.php'
?>

</head>
<body style='background-image:
url("img/background.jpg");padding-top: 40px;'>
<?php
include 'include/user-bar.php';
include 'include/menu.php';
?>
<div class='container'>
<div class='login'>

<?php
/*verificarea datelor de autentificare memorate in
baza de date */
if(isset($login))
echo $login;
?>
109
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

<h1> Autentifica-te </h1>


<div class='form'>

<form method='post' action=''>


<p>email: <input type='email'
name='email'></p>
<p>parola: <input type='password'
name='parola'></p>
<input type='submit' name='login'
value='Autentifica-te'>
</form>
</div>
</div>
<div class='sign-up'>

<?php
if(isset($done))
echo $done;
?>
<!-- la crearea contului se vor memora datele
introduse: email, nume, parola, adresa, numar de
telefon -->
<h1> Creaza un nou cont </h1>

<div class='form'>
<form method='post' action=''>

<p>email: <input type='email'


name='email'></p>
<p>parola: <input type='password'
name='parola'></p>
<p>judet: <input type='text'
name='judet'></p>
<p>localitate: <input type='text'
name='localitate'></p>
<p>adresa: <input type='text'
name='adresa'></p>
<p>telefon: <input type='text'
name='telefon'></p>
<input type='submit' name='signin'
value= 'Inregistreaza-te'>
</form>
</div>
</div>

</div>
110
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

<?php
include 'include/footer.php';
?>
</body>
</html>

Se va crea fișierul item.php cu următorul conținut:


<html>
<?php
include 'include/include_start.php';
include 'include/control_cos.php'
?>
<head>
<title> magazinonline.ro </title>
<link rel='stylesheet' href='css/style-
item.css'>

<script>
/*cod javascript pentru a calcula pretul total al
comenzii*/
function get_number(){
var $valoare =
document.getElementById('numar').value;
var $pret =
document.getElementById('pret').value;
var $total = $pret * $valoare;
document.getElementById("total").innerHTML =
"Pret total achizitie: "+ $total +" lei";
}
</script>
</head>
<body style='background-image:
url("img/background.jpg");'>
<!--Codul urmator verifica daca a fost trimis id-ul
elementului cautat. In caz afirmativ, il cauta in
baza de date si ii afiseaza toate proprietatile:
imagine, nume, descriere, pret, stoc, etc.-->
<?php
include 'include/user-bar.php';
?>
<div class='container'>
<?php
//daca a fost trimis un id
if(isset($_GET['id']))
{
111
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

//cauta in baza de date obiectul cu id-ul dat


$sql = "SELECT * FROM produse WHERE id
= '".$_GET['id']."'";
//executa cererea
$result = mysqli_query($conn, $sql);
//verifica daca obiectul exista in baza de date
if(mysqli_num_rows($result)!=0)
{
/*daca exista, se salveaza proprietatile produsului
in variabila $row */
$row =
mysqli_fetch_assoc($result);
//se afiseaza proprietatile produsului
echo "
<div class='image'>
<img src='img/".$row['imagine']."'>
</div>
<div class='content'>";
if(isset($done))
echo $done;
//se initializeaza cosul
$cos = 0;
//se verifica daca utilizatorul este logat
if(isset($_SESSION['id'])){
/*se cauta in baza de date id-ul produsului pentru
utilizatorul logat si daca nu este deja comandat */
$sql = "SELECT * FROM cos WHERE id_user =
'".$_SESSION['id']."' AND id_produs =
'".$_GET['id']."' AND comanda = '0'";
//se executa comanda
$res = mysqli_query($conn, $sql);
/*pentru fiecare item gasit in cos se adauga stocul
in variabila $cos */
while($rand = mysqli_fetch_assoc($res))
{
$cos = $cos + $rand['stoc'];
}
}
//se calculeaza cat a mai ramas in stoc
$stoc_ramas = $row['stoc'] - $cos;
//afisam datele obiectului
echo"
<h3> ".$row['nume']." </h3>
<p> Descriere obiect:
<br>".$row['descriere']."</p>

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

<p> Pret: <input id='pret'


type='text' readonly value='".$row['pret']."'> de
lei</p>
<p> Stoc ramas: ".$stoc_ramas."
</p>

<form
action='?id=".$_GET['id']."' method='post'>
<input type='number' min=1
max=".$stoc_ramas." name='numar' id='numar'
onchange='get_number();'>
<input type='submit'
name='submit' value='Adauga in cos'>
</form>
<p id='total'> Pret total
achizitie: 0 lei </p>
</div>";
} }
?>
</div>
<?php
include 'include/footer.php';
?>
</body>
</html>

Pagina produse.php are următorul conținut:


<html>
<?php
include 'include/include_start.php';
?>
<head>
<title> magazinonline.ro </title>
<link rel='stylesheet' href='css/style-
produse.css'>
</head>
<body style='background-image:
url("img/background.jpg");'>

<?php
include 'include/user-bar.php';
?>

<div class='container'>

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

<?php
include 'include/menu.php';
include 'include/left-bar.php';
?>

<div class='content'>
<div class='search'>
<!--bara de cautare pentru produse -->
<form action='produse.php' method='post'>
<input type='text' name='search'
placeholder='Cauta obiect in functie de nume sau de
categorie'>
</form>
</div>
<?php
//se afiseaza toate produsele
$sql = "SELECT * FROM produse";
/*se verifica daca utilizatorul a ales categoria sau
s-a realizat o cautare */
if(isset($_GET['categorie']) ||
isset($_POST['search'])){
if(isset($_GET['categorie']))
//se verifica daca s-a ales o categorie
$sql .= " WHERE categorie =
'".$_GET['categorie']."'";
if(isset($_POST['search']) &&
$_POST['search'] != ''){
//se verifica daca s-a facut o cautare
$sql .= " WHERE categorie LIKE
'".$_POST['search']."' OR
nume LIKE '%".$_POST['search']."%' OR
descriere LIKE
'%".$_POST['search']."%'";
/*se cauta secvente de text prin intermediul
structurii %string% */
}
}
//se executa cerinta
$result = mysqli_query($conn, $sql);

/*pentru fiecare produs gasit in baza de date, $row


va memora linia din tabela corespunzatoare */
while($row =
mysqli_fetch_assoc($result))
{
//odata gasit obiectul se afiseaza proprietatile

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

echo "
<div class='imagine-produs'>
<a href='item.php?id=".$row['id']."'
target='_blank'>
<img src='img/".$row['imagine']."'
alt='".$row['categorie']."'>
<p>".$row['nume']."</p>
<p>Pret: ".$row['pret']." Stoc ramas:
".$row['stoc']."</p>
</a>
</div>";
}
?>
</div>
</div>
<?php
include 'include/footer.php';
?>
</body>
</html>

Fișierul home.php are următorul conținut:


<html>
<?php
include 'include/include_start.php';
?>
<head>
<title> magazinonline.ro </title>
<link rel='stylesheet' href='css/style-
home.css'>
</head>
<body style='background-image:
url("img/background.jpg");'>
<?php
include 'include/user-bar.php';
?>
<div class='container'>
<?php
include 'include/menu.php';
?>
<div class='content'><img src='img/main.jpg'></div>
</div>
<?php
include 'include/footer.php';
?>

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

</body>
</html>

Fișierul descriere.php are următorul conținut:


<html>
<?php
include 'include/include_start.php';
?>
<head>
<title> magazinonline.ro </title>
<link rel='stylesheet' href='css/style-
descriere.css'>
</head>
<body style='background-image:
url("img/background.jpg");padding-top: 40px;'>

<div class='container'>
<?php
include 'include/user-bar.php';
include 'include/menu.php';
?>
<div class='content'>
<div class='descriere'>
<h1> Descrierea site-ului
magazinonline.com </h1>
<ul>
<li>
Magazinonline.com a fost creat in cadrul proiectului
Erasmus+ Actiunea Cheie 102 „ Acquisition of
professional web programming skills for an earlier
integration in the labor market” nr. ref. 2015 -1-
RO01-A102-014297.
</li>
<li>
Acesta are ca scop oferirea utilizatorului unei
platforme cat mai simple pentru a viziona produse si
chiar pentru a le cumpara.
</li>
<li>
Site-ul magazinonline.com ofera o gama variata de
rechizite pentru scolarii de pretuti ndeni la preturi
accesibile tuturor categoriilor sociale.
</li>
</ul>

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

<p>Va multumim pentru


utilizarea platformei noastre! Speram ca v-am
satifacut cerintele.</p>
</div>
</div>

</div>
<?php
include 'include/footer.php';
?>
</body>
</html>

Fișierul contact.php are următorul conținut:


<html>
<?php
include 'include/include_start.php';
?>
<head>
<title> magazinonline.ro </title>
<link rel='stylesheet' href='css/style-
contact.css'>
<script
src="http://maps.googleapis.com/maps/api/js"></scrip
t>
<script>
//acest script este pentru amplasarea hartii
var myCenter=new
google.maps.LatLng(47.73866,26.66515);

function initialize()
{
var mapProp = {
center:myCenter,
zoom:5,
mapTypeId:google.maps.MapTypeId.ROADMAP
};
var map= new
google.maps.Map(document.getElementById("googleMap")
,mapProp);
var marker=new google.maps.Marker({
position:myCenter,
});
marker.setMap(map);

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

google.maps.event.addDomListener(window, 'load',
initialize);
</script>
</head>
<body style='background-image:
url("img/background.jpg");padding-top: 40px;'>
<div class='container'>
<?php
include 'include/user-bar.php';
include 'include/menu.php';
?>

<div class='content'>
<div id="googleMap"
class='map'></div>
<div class='descriere'>
<h1>Contact</h1>
<p><img
src='img/phone.jpg'>Contacteaza -ne la numarul de
telefon: 0740 112 112</p>
<p><img src='img/email.ico'>Sau
trimite-ne un email la adresa:
proiect@phpinatl.org</p>
<p><img
src='img/location.png'>Vizitati -ne la adresa: Strada
Nicolae Iorga 19, Botoșani, Romania</p>
</div>
</div>

</div>
<?php
include 'include/footer.php';
?>
</body>
</html>

Site-ul are acum un aspect decent. Urmează să-i conferim și o


funcționalitate pe măsură prin intermediul fișierului
control_login.php din folderul ”include”.

control_login.php
<?php

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

/*daca suntem deja intr-o sesiune si dorim sa ne


delogam atunci trebuie sa resetam toate variab ilele
tip session_cache_expire */
if(isset($_SESSION['id']))
session_unset();
//daca a fost trimis un formular pt inregistrare
if(isset($_POST['signin']))
{
/*daca sunt valide informatiile date, campurile nu
sunt goale */
if($_POST['email']!='' &&
$_POST['parola']!='' &&
$_POST['judet']!='' &&
$_POST['localitate']!='' &&
$_POST['adresa']!='' &&
$_POST['telefon']!='')
{
//se verifica daca emailul exista deja
$sql = "SELECT * FROM utilizator
WHERE email = '".$_POST['email']."'";
/*se cauta in tabelul utilizator emailul transmis
prin formular */
//se executa cerinta data
$result = mysqli_query($conn, $sql);
//se verifica daca exista emailul in tabela
if(mysqli_num_rows($result)==0)
{
//daca nu, se introduc datele in baza de date
$sql = "INSERT INTO `utilizator`
(`email`, `parola`, `judet`, `localitate`, `adresa`,
`telefon`)
VALUES ('".$_POST['email']."',
'".$_POST['parola']."', '".$_POST['judet']."',
'".$_POST['localitate']."', '".$_POST['adresa']."',
'".$_POST['telefon']."')";
//se executa cerinta in mysqli
$res = mysqli_query($conn, $sql);
/*se afiseaza mesaj de confirmare pentru
inregistrarea contului */
$done = "<span
class='error'>Contul tau a fost inregistrat cu
succes, te poti loga.</span>";

}
//daca emailul exista deja
else

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

{
$done = "<span
class='error'>Email deja utilizat!</span>";
}
}
//se verifica daca sunt campuri necompletate
else
{
$done = "<span class='error'>Toate
campurile trebuie completate!</span>";
}
}
//daca a fost trimis un formular de autentificare
if(isset($_POST['login']))
{
//se verifica daca sunt completate campurile
if($_POST['email']!='' &&
$_POST['parola']!='')
{
//se verifica daca exista un astfel de cont
$sql = "SELECT * FROM utilizator
WHERE email = '".$_POST['email']."' AND parola =
'".$_POST['parola']."'";
//se executa cerinta
$result = mysqli_query($conn, $sql);
if(mysqli_num_rows($result)>0)
{
/*contul exista in baza de date, se salveaza contul
in sesiune, mai exact id-ul contului */
$row = mysqli_fetch_assoc($result);
/* se salveaza in sesiune variabila $row (vector)
care memoreaza tot randul cu utilizatorul gasit */
$_SESSION['id'] = $row['id_user'];
//se afiseaza mesaj de confirmare a inregistrarii
$login = "<span class='error'>Ai fost inregistrat cu
succes!</span>";
//dupa inregistrare se deschide pagina home
header( 'Location: produse.php' )
;
}
//daca nu este gasit contu l in baza de date
else{
$login = "<span
class='error'>Email sau parola gresite!</span>";
}
}

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

//daca exista campuri necompletate


else{
$login = "<span class='error'>Toate
campurile trebuie completate!</span>";
}
}
?>

Fișierul footer.php are următorul conținut:


<style>
.footer {
background-color: #494949;
position: fixed;
width: 100%;
height: 75px;
clear: both;
margin: 0px;
bottom: 0px;
color: white;
padding: 10px;
font-size: 15px;
}
</style>
<div class='footer'>
Site-ul a fost creat de catre Batalan Vlad,
elev in clasa a 11-a D la Colegiul National "A. T.
Laurian" in cadrul proiectului Erasmus+ Actiunea
Cheie 102
„ Acquisition of professional web programming skills
for an earlier integration in the labor market” nr.
ref. 2015-1-RO01-A102-014297.</div>

Fișierul include-start.php conține informații legate de publicarea


site-ului pe un server folosind date de logare, astfel încât accesul la
acesta să se execute în siguranță.
<?php
session_start();

$host='localhost';
$username='root';
$password='';
$dbname='magazin';
$conn = mysqli_connect($host, $username,
$password, $dbname);

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

?>

Pagina left-bar.php conține:


<div class='left-bar'>

<div class='category-header'>
CATEGORII
</div>

<ul>
<li><a
href='produse.php?categorie=birotica'>Produse de
birotica</a></li>
<li><a
href='produse.php?categorie=caiete'>Caiete</a></li>
<li><a
href='produse.php?categorie=rigle'>Rigle</a></li>
<li><a
href='produse.php?categorie=penare'>Penare si
ghiozdane</a></li>
<li><a
href='produse.php?categorie=hartie'>Hartie si
etichete</a></li>
</ul>
</div>

Fișierul user-bar.php conține:


<style>
.user-bar{
top: 0;
position: fixed;
height: 40px;
overflow: hidden;
display: inline-block;
background-color: #81D6F7;
width: 100%;
border-bottom: 1px solid black;
}
.user-bar ul{
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;

}
122
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

.user-bar li{
float: right;
margin-left: 30px;
height: 100%;
padding: 5px;
}
.user-bar li a{
text-decoration: none;
display: block;
color: #FCFC9F;
font-size: 20px;

}
.user-bar li a:hover {
color: #FCFC00;
font-size: 25px;
}
.user-bar img{
width: 30px;
height: 30px;
}
.left{
float: left;
font-family:"Lucida Sans Unicode", "Lucida
Grande", sans-serif;
}
</style>

<div class='user-bar'>
<?php
/*se verifica daca utilizatorul este logat si
afiseaza emailul in stanga */
if(isset($_SESSION['id']))
{
/*se cauta utilizatorul in baza de date dupa id pt a
se identifica emailul */
$sql = "SELECT * FROM utilizator
WHERE id_user = '".$_SESSION['id']."'";
//se executa cerinta
$result = mysqli_query($conn, $sql);
//este memorat de session, $row memoreaza randul
$row = mysqli_fetch_assoc($result);
//se afiseaza emailul
echo "<spam
class='left'>".$row['email']."</spam>";

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

}
?>
<ul>
<li>
<a href='cos.php'>
<img src='img/cart.jpg'>Cosul meu
</a>
</li>
<li>
<?php
/*daca utilizatorul este logat, se verifica daca a
fost creata sesiunea */
if(isset($_SESSION['id']))
{
echo "<a
href='login.php'>Delogare</a>";
}
else
{
echo "<a href='login.php'>Autentificare</a>";
}
?>
</li> </ul></div>

Coșul de cumparaturi a neces itat crearea unei pagini cu conținutul aflat


în fișierul operatii_in_cos.php.
<?php
/*se executa stergerea unui obiect din cos, se
verifica daca a fost actionat butonul delete si daca
a fost trimis id-ul comenzii sterse */
if(isset($_POST['delete']) &&
isset($_GET['delete']))
{
//se sterge obiectul selectat din cos
$sql = "DELETE FROM cos WHERE id_produs =
'".$_GET['delete']."' AND id_user =
'".$_SESSION['id']."'";
//se executa operatia
$result = mysqli_query($conn, $sql);
/*se afiseaza mesaj de confirmare pentru stergerea
obiectului */
$done = "<span style='color:
red;'>Stergerea obiectului a fost realizata cu
succes!</span>";
}

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

//realizarea comenzii
//daca este actionat butonul comenzii
if(isset($_POST['comanda']))
{
/*se cauta toate produsele din cosul utilizatorului
care nu au fost comandate inca si se marcheaza ca
fiind trimise*/
$sql = "SELECT * FROM cos WHERE id_user =
'".$_SESSION['id']."' AND comanda = '0'";
//se executa cererea
$result = mysqli_query($conn, $sql);
/*pentru fiecare produs din cos variabila $row preia
datele, se seteaza comanda cu valoarea 1 si se
adauga in tabela comanda*/
while($row = mysqli_fetch_assoc($result))
{
//se actualizeaza campul comand a
$sql = "UPDATE cos SET comanda = '1'
WHERE id_comanda = '".$row['id_comanda']."'";
//se executa cerinta
$res = mysqli_query($conn, $sql);
/*se calculeaza cat a ramas stocul produsului
comandat, se cauta produsul comandat cu ajutorul id -
ului*/
$sql = "SELECT * FROM produse WHERE
id = '".$row['id_produs']."'";
//se executa cerinta
$rezultat = mysqli_query($conn, $sql);
//se preiau datele produsului in $produs
$produs = mysqli_fetch_assoc($rezultat);
//se calculeaza stocul ramas in $stoc_ramas
$stoc_ramas = $produs['stoc'] - $row['stoc'];
//se actualizeaza produsul
$sql = "UPDATE produse SET stoc =
'".$stoc_ramas."' WHERE id = '".$produs['id']."';";
//se executa cerinta
$resultat_final = mysqli_query($conn, $sql);
}
/*se afiseaza mesaj de confirmare pentu finalizarea
operatiei */
$done = "<span style='color: red;'>Comanda
dumneavoastra a fost realizata cu succes!</span>";
}
?>

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

Verificarea coșului se realizează prin intermediul codului din fișierul


control-cos.php.
<?php
//se verifica daca a fost trimis formularul
if(isset($_POST['submit']))
{
/*se verifica daca stocul nu este gol, daca
id_produs a fost trimis si userul este logat */
if($_POST['numar']!='' &&
isset($_GET['id']) && isset($_SESSION['id']))
{
/*conditia este indeplinita, se introduc datele in
baza de date */
$sql = "INSERT INTO `cos`
(`id_produs`, `id_user`, `stoc`)
VALUES ('".$_GET['id']."',
'".$_SESSION['id']."', '".$_POST['numar']."');";
//se executa cerinta
$result = mysqli_query($conn, $sql);
/*se afiseaza mesaj de confirmare a realizarii
cerintei */
$done = '<span style="color:red; font-size:
20px;">Obiectul a fost adaugat in cos.</span>';
}
}
?>

Meniul principal va fi introdus prin intermediul fișierului menu.php.


<style>
.menu{
width: 100%;
height: 50px;
background-color: #242424;
overflow: hidden;
display: inline-block;

}
.menu ul{
list-style-type: none;
}
.menu ul li{
float: left;
}
.menu ul li a{
display: block;
126
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI

color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;

}
.menu ul li a:hover:not(.active) {
color: #aaaaaa;
}
.active{
background-color: #4CAF50;
}
</style>

<div class='menu'>
<ul>
<li><a href='home.php'
<?php
//se verifica daca numele fișierului este home.php

if(basename($_SERVER['PHP_SELF'])=='home.php')
echo "class='active'"?>
> Home </a></li>
<li><a href='descriere.php'
<?php
/*se verifica daca numele fișierului este
descriere.php */

if(basename($_SERVER['PHP_SELF'])=='descriere.p
hp') echo "class='active'"?>
> Descriere </a></li>
<li><a href='produse.php'
<?php
/*se verifica daca numele fișierului este
produse.php */

if(basename($_SERVER['PHP_SELF'])=='produse.php
') echo "class='active'"?>
> Produse </a></li>
<li><a href='contact.php'
<?php
/*se verifica daca numele fișierului este
contact.php */

if(basename($_SERVER['PHP_SELF'])=='contact.php
') echo "class='active'"?>

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

> Contact </a></li>


</ul>
</div>

Paginile website-ul arată ca în imaginile următoare:

1. main.php

2. descriere.php

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

3. produse.php

După cum putem observa, site-ul ne semnalează niște erori apărute în


cod. Acestea se datorează faptului că baza de date nu a fost completată
cu date.

4. contact.php

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

5. login.php

6. cos.php

Acum site-ul magazinonline.com este complet. Observați


funcționalitatea acestuia: se pot realiza operații de înregistrare,
autentificare, de căutare a produselor, de selectare și adăugare în coș,
de finalizare a comenzii.

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

Webografie

• http://www.w3schools.com/html/default.asp
• http://www.w3schools.com/css/default.asp
• http://www.w3schools.com/sql/default.asp
• http://www.w3schools.com/php/default.asp
• https://secure.php.net/manual/ro/
• http://www.learn-php.org/
• http://www.homeandlearn.co.uk/php/php.html

131

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