Sunteți pe pagina 1din 131

MANUELA CARPEN * ROXANA ASANDULUI * MIHAIELA TUNEA

CARMEN-AFRODITA GIOCA * CERASELA-DANIELA CARDA

PHP
GHID DE PROGRAMARE WEB
PENTRU NCEPTORI
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

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:
Coninuturi capitolele 1, 2 : Ralph-Mller Lucanus
Coninuturi capitolul 3 : Mihaela-Liliana Prjinariu
Coninuturi capitolul 4 : Vlad Batalan
Copert : Andra-Mlina Carda

2
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

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 ieire ............................................. 19
Domeniul de vizibilitate al variabilelor ............... 20
Domeniul Global i Local ................................... 20
Specificatorul global ........................................ 21
Instruciunile echo i print ................................ 22
Stringuri PHP.................................................... 23
Constante PHP ...................................................... 23
Operatori PHP....................................................... 24
Structuri de control ............................................... 24
Instruciuni de decizie....................................... 24
Instruciuni de ciclare n PHP ............................. 25
Funcii PHP ........................................................... 25
Funcii 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 NCEPTORI

Metoda HTTP POST i variabila superglobal


$_POST ........................................................................ 28
GET versus POST .............................................. 29
Validarea datelor din formulare ........................ 30
Cmpuri obligatorii n formulare PHP................. 32
Afiarea mesajelor de eroare la completarea
cmpurilor unui formular.............................................. 33
Cookies n limbajul PHP.......................................... 34
Crearea unui cookie n PHP ............................... 34
Sesiuni .................................................................. 35
Deschiderea unei sesiuni PHP............................ 36
Obinerea valorilor variabilelor sesiune ............. 36
Baze de date ......................................................... 39
Ce reprezint MySQL? ...................................... 40
Exemple de scripturi care utilizeaz MySQLi ....... 41
PhpMyAdmin ................................................... 50
Etapele crerii unei baze de date MySQL ........... 51
Gestionarea fiierelor pe server ............................. 51
3. Fie de lucru........................................................... 60
4. Crearea unui website dinamic utiliznd PHP ......... 79
Webografie .............................................................. 131

4
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

1. Introducere
Limbajele pe care se bazeaz PHP sunt :
HTML ( Hyper Text Markup Language) pentru definirea
coninuturilor paginilor web
CSS ( Cascading Style Sheets)- pentru definirea aspectului
paginilor web
JavaScript- pentru programarea evenimentelor din paginile
web, pentru a aduga 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 rspndire
n domeniul IT
gratis pentru a fi descrcat i utilizat
De ce este un limbaj att 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 reea social (Facebook)!
de asemenea, este destul de uor s fii un programator
nceptor de server-side!
PHP...
Fiierele PHP pot conine 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
Fiierele PHP au extensia ".php"

5
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

V prezentm un exemplu de cod PHP (introduction.php)


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

Ce avem de fcut?
Server side:
La nceput pornim serverul web (localhost).
Apoi scriem codul de mai sus ntr-un editor de text, cum ar fi
Notepad++ .
Salvm fiierul cu numele introduction.php n directorul
C:/xampp/htdocs.
Client side:
Dup salvarea fiierului l deschidem n browser
(http://localhost/introduction.php) i analizm coninutul
paginii web afiate n browser.

n PHP se pot realiza urmtoarele operaii:


... generare de pagini cu coninut dinamic
... creare, deschidere, citire, scriere, tergere i nchidere de
fiiere de pe server
... colectarea datelor din formulare
... trimiterea i primirea cookie-urilor
...adugarea, tergerea, actualizarea datelor din baza de date
... controlul accesului utilizatorilor
... criptarea datelor
PHP nu te limiteaz n privina obiectelor afiate prin pagini web: pot
fi afiate imagini, fiiere 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 NCEPTORI

PHP este gratuit. Descrcai-l din resursa oficial PHP:


www.php.net
PHP este uor de nvat i ruleaz eficient pe partea de server
De ce anume avem nevoie?
Pentru a ncepe s utilizai PHP, parcurgei paii de mai jos:
Identificai o gazd web PHP gazd i suport MySQL
Instalai un server web pe propriul PC, apoi instalai PHP i
MySQL
Urmai instruciunile de instalare de pe situl oficial
http://php.net/manual/en/install.php
De ce avem cu adevrat 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 instruciuni de instalare pentru PHP:
http://php.net/manual/en/install.php
Exemplul urmtor evideniaz modul n care PHP lucreaz cu HTML,
CSS i JavaScript:
Ce vom realiza?
vom crea un fiier *.php dintr-un fiier *.html deja existent
vom aduga stiluri utiliznd CSS
vom aduga/include pagini dinamice (fiiere *.php)
vom include un subsol, coninut i un meniu de navigare n
paginile web.
Fiierele basis.html i basis.css au fost create i au urmtorul
coninut:
basis.css
* {
margin: 0px;
padding: 0px;
}
body {
font-size: 12pt;

7
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

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 NCEPTORI

/* 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 NCEPTORI

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 NCEPTORI

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 NCEPTORI

<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 NCEPTORI

Primii pai:
Creai un nou folder n directorul "C: / xampp /" (denumit
"day_1")
Copiai "basis.html" cu numele "basis.php" n directorul "C: /
xampp / htdocs / day_1"
Creai un folder denumit "css" n "C: / xampp / htdocs /
day_1" i copiai "basis.ccs" n "C: / xampp / htdocs / day_1 /
css"
Creai fiierele pe care le vei include n fiierul .php (Footer,
Content, Navigation)
Pentru a include fiierele n "basis.php", utilizai instruciunea
include.
Pentru o organizare optim a fiierelor pe disc v propunem
urmtoarea structur de directoare i fiiere :

Figura de mai jos evideniaz ce se ntmpl la execuia pe server a


fiierului basis.php:

13
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

Ce este World Wide Web (www) ?


Termenul World Wide Web este un sistem de documente i
informaii de tip hipertext legate ntre ele care pot fi accesate
prin reeaua mondial de Internet. Documentele, care rezid
n diferite locaii pe diverse calculatoare server, pot fi regsite
cu ajutorul unui identificator univoc numit URI. Hipertextul
inclusiv imagini etc. este afiat cu ajutorul unui program de
navigare n web numit browser, care descarc paginile web de
pe un server web i le afieaz pe un terminal client la
utilizator.
Toate calculatoarele
folosesc un protocol
de comunicare numit
HTTP

Cum funcioneaz www?

Informaiile web sunt


stocate n documente
numite pagini web
Paginile Web sunt
fiiere stocate pe
computere numite
servere web
Calculatoarele care
14
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

citesc paginile web sunt numite clieni web


Clienii 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 evideniaz comunicarea static n www.

Interpretorul PHP acioneaz ca o


extensie a serverului web care
este invocat de ori cte ori o
pagina PHP este
accesat(imaginea din dreapta ).
Aceast component proceseaz
codul-sursa din pagin i apoi
transmite rezultatul napoi la
web-server, ajungnd n final n
browserele utilizatorilor.

Modul de funcionare al
interpretorului PHP este ilustrat
de figura din dreapta i de figura
din pagina urmtoare :

15
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

2. Programarea web n limbajul PHP


Elemente de sintax ale limbajului PHP
Un script PHP poate fi plasat oriunde n interiorul unui fiier HTML.
Scriptul PHP ncepe cu <?php i se termin cu ?>:
<?php
// cod scris n PHP
?>
Extensia predefinit a unui fiier PHP este " .php".
n mod obinuit , un fiier PHP conine taguri HTML i instruciuni de
cod PHP.
<!DOCTYPE html>
<html>
<body>
<h1>My first PHP page</h1>
<?php
echo "Hello World!";
?>
</body>
</html>
Not : Instruciunile PHP se ncheie cu simbolul ;.
Comentarii
Un comentariu n cod PHP este o linie care nu este citit/ executat ca
parte a programului. Singurul su scop este de a fi citit de ctre cineva
care analizeaz codul.
Comentariile pot fi folosite pentru:

16
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

Alte persoane s neleag scopul n care au fost scrise


anumite linii de cod
Autorul codului/ programatorul s i poat aminti de ce a
scris respectivele instruciuni. Cei mai muli programatori
triesc experiena de a reveni la propria lor munc un an sau
doi mai trziu i de a constata c au uitat de ce au scris
anumite linii de cod .
Exist mai multe posibiliti 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 secvene 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, funcii i funcii definite de utilizator nu sunt sensibile la
scrierea cu litere mici sau cu litere mari.
n exemplul de mai jos, cele 3 instruciuni 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 NCEPTORI

n exemplul de mai jos doar prima instruciune va afia 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 informaiilor.
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 execuia instruciunilor 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
instruciune de declarare a variabilelor. Aceasta este creat n
momentul n care i se atribuie prima valoare.
Tratai variabilele ca i containere pentru stocarea informaiilor!

18
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

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 conine doar caractere alfa-numerice
(A-z, 0-9) i simbolul _
Numele de variabile sunt case-sensitive ($age i $AGE
reprezint variabile distincte)
Variabile de ieire
Instruciunea echo este adesea utilizat pentru a afia date pe ecran.
Urmtorul exemplu evideniaz modul n care se va afia un text i
valoarea unei variabile pe ecran:
<?php
$txt = "PHP-Schools";
echo "I love $txt!";
?>
Urmtorul exemplu produce acelai rezultat ca exemplul anterior:
<?php
$txt = "PHP-Schools";
echo "I love " . $txt . "!";
?>
Exemplul de mai jos va afia suma valorilor stocate n 2 variabile x i
y:
<?php
$x = 5;
$y = 4;
echo $x + $y;
?>
Mai multe informaii gsii 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, observai c variabilele x i y nu au fost
declarate naintea utilizrii lor, nu au fost asociate tipuri de date
acestor variabile.

19
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

PHP convertete automat variabila la tipul corect de date, n


funcie 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 urmtoarele tipuri de date:
String
Integer
Float
Boolean
Array
Object
Null
Resource
n PHP, funcia var_dump() returneaz tipul de date i valoarea unei
variabile:
<?php
$x = 5985;
var_dump();
?>
Pentru mai multe informaii, accesai 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 funcii)
Global ( n afara unei funcii)
Super Global (toate domeniile)
Domeniul Global i Local
O variabil declarat n afara unei funcii are un domeniu de
vizibilitate GLOBAL i poate fi accesat doar n afara unei funcii:
<?php
$x = 5; // domeniu global
function myTest() {
// utilizarea variabilei x n interiorul funciei va
genera eroare
echo "<p>Variable x inside function is: $x</p>";
}

20
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

myTest();
echo "<p>Variable x outside function is: $x</p>";
?>

O variabil declarat n cadrul unei funcii are un domeniu de


vizibilitate LOCAL i poate fi accesat numai n aceast funcie:
<?php
function myTest() {
$x = 5; // domeniu local
echo "<p>Variable x inside function is:$x </p>";
}
myTest();
// utilizarea variabilei x n a fara funciei va
genera eroare
echo "<p>Variable x outside function is:$x</p>";
?>
Not: Putei avea variabile locale cu acelai nume, n diferite funcii,
deoarece variabilele locale sunt recunoscute numai de funcia n care
acestea sunt declarate.
Specificatorul global
Specificatorul global este utilizat pentru a accesa o variabil global
din cadrul unei funcii. Pentru a realiza acest lucru, utilizai
specificatorul global naintea variabilei (n interiorul funciei):
<?php
$x = 5;
$y = 10;

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

myTest();
echo $y; // afieaz 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 funcii i poate fi
utilizat pentru a actualiza n mod direct variabilele globale.
<?php
$x = 5;

21
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

$y = 10;

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

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

n mod normal, atunci cnd o funcie 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
instruciuni.
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 cnd funcia este apelat, acea variabil va


memora n continuare informaiile pe care le coninea la u ltimul apel.
Not: Variabila este local funciei.
Instruciunile echo i print
n PHP exist dou moduri de baz pentru afiare: echo i print.
Instruciunile echo i print sunt mai mult sau mai puin asemntoare.
Ambele sunt utilizate pentru afiarea datelor pe ecran.
Diferenele care pot fi semnalate sunt:
echo nu returneaz nici o valoare, n timp ce print returneaz
1, astfel nct poate fi utilizat n cadrul expresiilor.
echo poate avea parametri multipli (mai rar), n timp ce print
are un parametru unic.
echo este o instruciune relativ mai rapid dect print.

22
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

Pentru mai multe informaii, accesai 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!.
Funcii PHP specifice lucrului cu iruri de caractere:
Lungimea unui ir de caractere: funcia strlen() returneaz
numrul de caractere al unui string.
Exemplu:
<?php
echo strlen(Hello World!);
// afieaz 12
?>
Numrul de cuvinte al unui ir de caractere: Funcia
str_word_count() returneaz numrul de cuvinte al stringului
primit ca parametru
Inversarea unui ir de caractere: Funcia PHP strrev()
inverseaz stringul.
Cutarea unui text specific din cadrul unui ir: Funcia
strpos() caut un text specific ntr-un ir de caractere.
nlocuirea unui subir ntr-un ir: Funcia PHP str_replace()
nlocuiete unele caractere cu alte caractere dintr-un ir de
caractere.
Pentru mai multe informaii, accesai 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 execuiei 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 funcia define().
Modul de utilizare a funciei define():
define(nume, valoare, case-insensitive)
Parametrii funciei i semnificaia acestora:
nume: specific numele constantei
valoarea: specific valoarea constantei

23
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

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 utilizai pentru a realiza diferite operaii cu variabile i
valori constante.
Operatorii n limbajul PHP se clasific astfel:
Operatori aritmetici (+, -, *, /, %, **)
Operatori de atribuire (=, +=, -=, *=, /=, %=)
Operatori relaionali (==, ===, !=, <>, !==, >, <, >=, <=)
Operatori de incrementare/decrementare (++$x, $x++, --$x,
$x--)
Operatori logici (and, or, xor, &&, |, !)
Operatori pe stringuri (., .=)
Operatori pe tablouri (+, ==, ===, !=, <>, !==)
Pentru mai multe informaii accesai linkul:
http://www.w3schools.com/php/php_operators.asp

Structuri de control
Instruciuni de decizie
Instruciunile condiionale (de decizie) sunt utilizate pentru a executa
anumite aciuni bazate pe condiii.
Foarte des atunci cnd scriem cod, dorim s efectum aciuni diferite
pentru diferite condiii.
n PHP exist urmtoarele instruciuni de decizie:
if execut o secven de cod dac o condiie logic este
adevrat
if...else - execut o secven de cod dac o condiie logic
este adevrat i execut alt secven de cod dac condiia
este fals

24
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

if...elseif....else execut diferite secvene de cod pentru dou


sau mai multe condiii logice
switch selecteaz o secven de cod care va fi executat n
funcie de valoarea unei expresii-selector
Pentru sintax i exemple accesai linkurile
http://www.w3schools.com/php/php_if_else.asp
http://www.w3schools.com/php/php_switch.asp
Instruciuni de ciclare n PHP
Instruciunile de ciclare (repetitive) PHP execut o secven de cod ct
timp o condiie logic este adevrat.
De multe ori, atunci cnd scriem cod, aceeai 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 instruciuni de ciclare.
n PHP avem urmtoarele instruciuni de ciclare:
while - execut o secven de cod ct timp o condiie logic
este adevrat.
do...while - execut o secven de cod o dat, apoi repet
execuia secvenei ct timp o condiie logic este adevrat.
for - execut o secven de cod de un numr de ori specificat
foreach - execut o secven de cod pentru fiecare element al
unui tablou
Pentru sintax i exemple accesai linkurile:
http://www.w3schools.com/php/php_looping.asp
http://www.w3schools.com/php/php_looping_for.asp

Funcii PHP
Adevrata putere a limbajului PHP deriv din funciile sale, limbajul
ncorporeaz peste 1000 de funcii predefinite.
Funcii definite de utilizator n limbajul PHP
n afar de funciile predefinite ale limbajului, ne putem crea
propriile noastre funcii.
Funcia reprezint un bloc de instruciuni care poate fi
executat n mod repetat n cadrul unui program.
Funcia nu se va executa imediat ce se ncarc pagina n
browser, aceasta se va executa doar n urma unui apel.
Crearea unei funcii definite de utilizator n PHP:
O funcie definit de utilizator ncepe cu cuvntul rezervat "function":
25
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

Sintaxa:
function functionName() {
code to be executed;
}
Not: Numele unei funcii ncepe cu o liter sau simbolul _, nu
poate ncepe cu o cifr.
Alegei nume sugestive pentru funcii care s reflecte scopul acesteia.
Numele de funcii nu sunt case-sensitive.
Pentru mai multe detalii accesai:
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 mulime de valori.
Exemplu:
<?php
$cars = array("Volvo","BMW", "Toyota");
echo "I like ".$cars[0].",".$cars[1] ."and"
.$cars[2].".";
?>
Dac avei de memorat o list de valori (de exemplu numele unor
maini), memorarea acestor date ar arta n modul urmtor:
$cars1 = "Volvo";
$cars2 = "BMW";
$cars3 = "Toyota";
Dac ar trebui s scriei un cod pentru identificarea une i anumite
maini dintr-o mulime de 3 sau 300 de maini, cum ar arta codul?
Soluia n acest caz este s creai un tablou.
Un tablou poate stoca o mulime de valori, utiliznd un nume unic, iar
regsirea unei valori se va realiza prin referirea la un anumit
index(poziia ocupat de valoare ).
Pentru crearea unui tablou n PHP se utilizeaz funcia 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 conin unul sau
mai multe tablouri
26
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

Sortarea tablourilor
sort() sorteaz tablourile n ordine cresctoare
rsort() - sorteaz tablourile n ordine descresctoare
asort() - sorteaz tablourile asociative n ordine cresctoare,
n funcie de o valoare dat
ksort() - sorteaz tablourile asociative n ordine cresctoare,
n funcie de o cheie dat
arsort() - sorteaz tablourile asociative n ordine
descresctoare, n funcie de o valoare dat
krsort() - sorteaz tablourile asociative n ordine
descresctoare, n funcie de o cheie dat

Pentru mai multe detalii accesai 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 funcie, clas sau fiier, fr a fi nevoie de
alte instruciuni.
Variabilele superglobale n PHP sunt:
$GLOBA LS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION
Detalii legate de semnificaia fiecrei astfel de variabile gsii 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 NCEPTORI

Formulare HTML simple


Exemplul de mai jos prezint un formular HTML simplu, cu dou
cmpuri 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 cnd utilizatorul completeaz formularul de mai sus i d clic
pe butonul de trimitere, datele din formular sunt trimise pentru
procesare ntr-un fiier PHP denumit "welcome.php". Datele din
formular sunt trimise prin metoda HTTP POST.
Metoda HTTP POST i variabila superglobal $_POST
Pentru afiarea datelor trimise prin intermediul formularu lui putem
utiliza variabila superglobal $_POST i instruciuni de afiare a
diferitelor componente ale acesteia. Fiierul "welcome.php" va arta
astfel:
<html>
<body>

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


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

Pe ecran vor fi afiate urmtoarele date:


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

Rezultate identice cu cele din scriptul anterior se obin utiliznd


metoda HTTP GET:
<html>
<body>

28
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

<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>

Fiierul "welcome_get.php" va avea urmtorul coninut:


<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
cmpurilor din formular, iar valorile reprezint datele introduse de
utilizator n aceste cmpuri.
Informaiile 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 NCEPTORI

Cnd s utilizm metoda GET?


Informaiile transmise dintr-un formular prin metoda GET sunt vizibile
tuturor( toate numele i valorile variabilelor sunt afiate n URL).
GET este o metod care restricioneaz volumul de informaie trimis la
aproximativ 2000 de caractere. Datorit faptului c variabilele sunt
afiate n URL, este posibil s marcm pagina, lucru util n anumite
situaii.
Metoda GET poate fi utilizat n transmiterea datelor mai puin
importante.
Not: Metoda GET nu trebuie utilizat pentru trimiterea parolelor
sau a altor informaii importante!
Cnd anume utilizm metoda POST?
Informaiile transmise dintr-un formular prin metoda POST nu sunt
vizibile altor persoane(numele/valorile sunt ncorporate n cadrul unei
cereri HTTP) i nu exist limitri din punct de vedere al volumului de
informaie transmis.
n plus, metoda POST ofer o funcionalitate avansat cum ar fi suport
pentru operaia de ncrcare a fiierelor pe server n format binar.
Deoarece variabilele nu sunt afiate n URL marcarea paginii care
conine formularul nu este posibil.
Pentru mai multe informaii accesai link-ul :
http://www.w3schools.com/php/php_forms.aspf
Validarea datelor din formulare
Pentru protejarea datelor dintr-un formular trebuie s realizai o
validare corect a datelor care s protejeze formularul mpotriva
atacurilor provocat de hackeri sau a spam-urilor.
Ce este funcia htmlspecialchars()?
Funcia htmlspecialchars() convertete caracterele speciale n entiti
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 utilizai 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 NCEPTORI

Cum putem evita vulnerabilitatea variabilei


$_SERVER["PHP_SELF"] n propriile pagini? Prin utilizarea funciei
htmlspecialchars().
Codul din pagina care conine formularul ar arta astfel:
<form method="post" action="
<?php echo
htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Dac un hacker ar ncerca s exploateze variabila PHP_SELF,


rezultatul ar fi urmtorul:
<form method=post
action=test_form.php/&quot;&gt;&lt;script&gt;alert(
hacked)&lt;/script&gt;>

Atacul asupra paginii ar eua!


Regula care trebuie respectat este cea n care variabilele trebuie
transmise prin funcia htmlspecialchars(). Dac un hacker n cearc s
insereze n pagin scriptul urmtor:
<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 condiii, datele formularului pot fi afiate n siguran ntr-o
pagin sau n cadrul unui email.
De asemenea, trebuie realizate urmtoarele operaii la transmiterea
datelor unui formular:
1. Eliminai caracterele inutile ( space, tab, newline) din datele
de intrare cu ajutorul funciei trim()
2. Eliminai caracterele backslash (\)din datele de intrare cu
ajutorul funciei stripslashes ().

Urmtorul pas este cel de a crea o funcie care realizeaz toate


verificrile datelor introduse n formular.
Vom numi aceast funcie test_input(). Vom verifica fiecare variabil
$_POST cu aceast funcie. Coninutul funciei este prezentat mai jos:
<?php
// definim i iniializm variabilele asociate
cmpurilor cu irul vid
$name = $email = $gender = $comment = $website =
"";

31
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

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

Cmpuri obligatorii n formulare PHP


Toate cmpurile din formularul de mai sus sunt opionale. Pentru a
obine cmpuri obligatorii vom utiliza o funcie i variabile
suplimentare.
n urmtorul exemplu vom aduga variabile noi: $nameErr, $emailErr,
$genderErr, and $websiteErr. Rolul acestor variabile este de a memora
mesaje care vor fi afiate pentru cmpurile obligatorii.
Adugm de asemenea, o instruciune if-else pentru fiecare variabil
$_POST. Aceasta va verifica dac variabila $_POST este vid ( cu
ajutorul funciei PHP empty()). Dac variabila este vid un mesaj de
eroare va fi memorat n variabila de eroare asociat respectivului
cmp, n caz contrar, variabila asociat cmpului din formular va stoca
rezultatul returnat de funcia test_input().
<?php
// definim i iniializm variabilel e de eroare cu
irul vid
$nameErr = $emailErr = $genderErr = $websiteErr =
"";
// definim i iniializm variabilele asociate
cmpurilor 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 NCEPTORI

if (empty($_POST["email"])) {
$emailErr = "Email is required";
} else {
$email = test_input($_POST["email"]);
}
}
?>
Apoi, n formularul HTML adugm un mic script dup fiecare cmp
care genereaz mesajul de eroare corespunztor. Acest mesaj va fi
afiat dac utilizatorul ncearc s trimit datele fr a completa unul
dintre cmpurile obligatorii.
Afiarea mesajelor de eroare la completarea cmpurilor 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 cmpul Name


Codul de mai jos exemplific un mod simplu de a verifica dac cmpul
name conine numai litere i caractere albe. Dac valoarea din cmpul
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";
}

Funcia preg_match() returneaz true dac toate caracterele stocate n


variabila $name aparin mulimii de caractere ablon dat ca parametru
al funciei i fals n caz contrar.

33
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

Validarea datelor din cmpul Email


Cel mai simplu mod de a valida o adres de email este utilizarea
funciei 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 cmpul 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 fiier stocat pe computerul utilizatorului.

De fiecare dat cnd de pe un computer se execut o cerere de


ncrcare a unei pagini n browser va fi trimis serverului fiierul cookie
pentru identificarea utilizatorului. Cu ajutorul limbajului PHP putei
crea sau regsi valori cookie.
Crearea unui cookie n PHP
Un cookie se creeaz cu ajutorul funciei setcookie().
n exemplul urmtor 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" utilizm variabila global
$_COOKIE.
Funcia isset() verific dac cookie a fost creat:

34
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

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>

Funcia setcookie() trebuie s apar naintea tagului <html>.


Pentru a afla detalii legate de operaii cu cookie accesai linkul
http://www.w3schools.com/php/php_cookies.asp

Sesiuni
Sesiunea reprezint o metod de stocare n variabile a informaiilor
astfel nct acestea s poat fi utilizate n mai multe pagini web. Spre
deosebire de un cookie, informaiile nu sunt stocate pe computerul
utilizatorului.
O sesiune dureaz att timp ct utilizatorul acceseaz un site i se
ncheie o dat cu nchiderea browserului. Accesarea unei pagini web
este o operaie de sine stttoare, orice accesare ulterioar a aceleiai
pagini (spre exemplu un refresh) se va face fr ca serverul "s tie" de
accesrile anterioare. La fel se ntmpl atunci cnd sunt accesate mai
multe pagini diferite una dup alta.
Variabilele sesiune rezolv aceast problem prin stocarea
informaiilor 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 NCEPTORI

Implicit, variabilele sesiune sunt stocate pe server pn la nchiderea


browserului.
Not: Pentru memorarea permanent a datelor unui utilizator exist
opiunea memorrii acestora ntr-o baz de date.
Deschiderea unei sesiuni PHP
O sesiune ncepe la apelul funciei 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 cteva variabile de tip ses iune.
Not: Funcia session_start() trebuie apelat la nceputul paginii,
naintea oricror 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>

Obinerea valorilor variabilelor sesiune


Vom crea o alt pagin numit "demo_session2.php". Din aceast
pagin vom accesa informaiile variabilelor ses iune din pagina creat
anterior ("demo_session1.php").
Observai c variabilele sesiune nu sunt transmise n mod individual
pentru fiecare pagin nou, n schimb, acestea sunt preluate din
sesiunea deschis la nceputul fiecrei pagini (session_start ()).
De asemenea, observai c toate valorile variabilelor sesiune sunt
stocate n variabila global $_SESSION:

<?php
session_start();

36
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

?>
<!DOCTYPE html>
<html>
<body>

<?php
// Se afieaz 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 fiiere .php sunt prezentate n paginile urmtoare.


Pagina session_login.php conine urmtorul cod:
<?php
/*before destroying the Session
you have to receive the session */
session_start();

// destroy the session

37
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

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 conine urmtorul 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 NCEPTORI

<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 conine urmtorul 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 conine urmtorul 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 colecie de date organizat astfel nct un
program s poat selecta rapid datele necesare la un moment dat.

39
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

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


electronic a datelor.

Bazele de date tradiionale sunt organizate n cmpuri i nregistrri


memorate n tabele(fiiere). Cmpul reprezint un atribut al
informaiei, nregistrarea este alctuit dintr-o mulime de cmpuri , iar
tabela reprezint o colecie de nregistrri..
Pentru a accesa date stocate ntr-o baz de date este necesar un sistem
de gestiune a bazelor de date (DBMS). Acesta reprezint o colecie de
programe care permit memorarea, organizarea i regsirea 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 aplicaii mici i mari
MySQL este foarte rapid, fiabil i uor de utilizat
MySQL utilizeaz standardul SQL
MySQL compileaz pe o varietate de platforme
MySQL este open source, poate fi descrcat i folosit
MySQL este dezvoltat, distribuit i susinut de Oracle
Corporation
MySQL este numit My, dup fiica co-fondatorului su Monty
Widenius
Datele dintr-o baz de date MySQL sunt organizate n tabele. Tabelele
reprezint o colecii de date relaionate, organizate pe linii i coloane.

40
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

Pentru mai multe informaii accesai 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 att de date, ct i de utilizatori finali (cum ar fi
Facebook, Twitter i Wikipedia).
PHP 5 poate lucra cu o baz de date MySQL utiliznd:
extensia MySQLi ("i" provine de la improved)
PDO (PHP Data Objects)
Att MySQLi, ct i PDO au propriile avantaje:
PDO lucreaz cu 12 sisteme diferite de baze de date, pe cnd
MySQLi lucreaz doar cu baze de date MySQL.
Aa nct, dac vrei ca proiectul tu s utilizeze alt baz de
date, PDO face ca acest proces s fie simplu. Trebuie
modificat doar stringul de conectare i cteva interogri. Cu
MySQLi va trebui s rescrii ntregul cod sau interogrile
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 aplicaiei
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 NCEPTORI

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 utiliznd MySQLi
Comanda CREATE DATABASE este utilizat pentru crearea unei
baze de date n MySQL. n exemplul urmtor 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 conine 5 coloane "id", "firstname", "lastname", "email" i
"reg_date":
42
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

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 cmp al tabelei.
Exist cteva atribute opionale care pot fi specificate pentru fiecare
cmp al tabelei:
NOT NULL Fiecare nregistrare trebuie s conin o
valoare pentru acel cmp, valorile nule nu sunt permise
DEFAULT valoare seteaz o valoare predefinit care va fi
memorat automat n tabel, de fiecare dat cnd cmpul
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 cmpului de fiecare dat cnd este adugat o nou
nregistrare
PRIMARY KEY utilizat pentru identificarea unic a
nregistrrilor din tabel. Coloana PRIMARY KEY este,
deseori, un cmp numeric ID setat cu atributul
AUTO_INCREM ENT
Not: Fiecare tabel trebuie s conin 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 NCEPTORI

// 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 aduga 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 interogri trebuie s fie
delimitate de ghilimele
Valorile numerice nu se scriu ntre ghilimele
Cuvntul NULL nu se scrie ntre ghilimele
Comanda INSERT INTO este utilizat pentru adugarea de noi
nregistrri 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 aduga automat valori n aceste cmpuri.
n exemplul urmtor vom aduga 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 NCEPTORI

// 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
cmp ID cu atributul AUTO_INCREMENT, putem obine valoarea
din cmpul ID al ultimei nregistrri inserate/actualizate.
7. Obinerea ID-ului ultimei nregistrri 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 NCEPTORI

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 nregistrri 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 NCEPTORI

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) {
// afieaz datele fiecrei nregistrri
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 NCEPTORI

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 nregistrrile.
<?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 NCEPTORI

Not: Clauza WHERE specific care nregistrare/nregistrri va/vor fi


actualizat/actualizate. Dac se omite aceast clauz, toate
nregistrrile 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 seleciei datelor n MySQL


Clauza LIMIT este folosit n comanda MySQL SELECT pentru a
limita numrul de nregistrri returnate n urma interogrii care
urmeaz s fie afiate. Poate avea unul sau dou argumente, acestea
fiind numere ntregi pozitive sau zero.
Clauza LIMIT este util n obinerea rezultatelor din tabele foarte mari
ca volum, selectarea unui numr foarte mare de nregistrri afectnd
performana.
Dac trebuie s interogm date din tabela "Orders" din primele 30 de
nregistrri, interogarea SQL arat ca n exemplul de mai jos:
$sql = "SELECT * FROM Orders LIMIT 30";
Dar dac ar trebui interogate nregistrrile cu ID-ul cuprins ntre 16 i
25 ?
49
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

MySQL ofer o soluie n acest caz: utilizarea clauzei OFFSET.


Interogarea SQL de mai jos se poate traduce astfel "returneaz numai
10 nregistrri, ncepnd cu nregistrarea 16 (OFFSET 15)":
$sql = "SELECT * FROM Orders LIMIT 10 OFFSET
15";
Pentru acelai rezultat se poate utiliza i comanda de mai jos:
$sql = "SELECT * FROM Orders LIMIT 15, 10";
Observai c numerele trebuie inversate cnd 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 administrrii bazelor de date
prin intermediul unui browser web. Prin phpMyAdmin se pot
ntreprinde diverse operaii cum ar fi crearea, modificarea sau
tergerea bazelor de date, tabelelor, cmpurilor sau rndurilor;
executarea de comenzi (interogri) SQL i administrarea utilizatorilor
i privilegiilor.
n PhpMyAdmin sunt posibile urmtoarele operaii:
Crearea i tergerea unei baze de date
Crearea / tergerea/ modificarea tabelelor i a tabelelor
virtuale (views)
tergerea / editarea / adugarea cmpurilor n tabele
Execuia oricrei instruciune SQL
Gestionarea cheilor asociate cmpurilor
Gestionarea privilegiilor
Gestionarea declanatoarelor i a procedurilor stocate
exportul datelor n diferite formate (CSV, SQL, XML, PDF
)
PhpMyAdmin este disponibil n 62 de limbi.
Pentru documentaie detaliat accesai link-ul:
https://www.phpmyadmin.net/docs/

50
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

Etapele crerii unei baze de date MySQL

Gestionarea fiierelor pe server


n acest capitol vei nva s deschidei, s accesai pentru citire i s
nchidei fiiere stocate pe server.
51
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

Deschiderea unui fiier n PHP utiliznd funcia fopen()


Funcia fopen() permite deschiderea unui fiier de pe server i ofer
mai multe opiuni fa de funcia readfile().
Vom utiliza fiierul "webdictionary.txt", fiier care are coninutul 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 funciei fopen() specific numele fiierului, iar al


doilea parametru reprezint modul de deschidere a fiierului.
<?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 fiier


Mod Descriere
r Deschidere doar pentru citire. Pointerul la inceputul fiierului.
Modul se mai numete i mod citire
r+ Deschidere att pentru citire, ct i pentru scriere. Pointer la
nceputul fiierului.
w Deschidere doar pentru scriere. Pointerul este la nceputul
fiierului, iar tot coninutul fiierului este ters n momentul
deschiderii. n caz c fiierul nu exist, acesta va fi creat.
Modul se mai numete i mod scriere.
w+ Deschidere att pentru scriere, ct i pentru citire. Pointerul
este la nceputul fiierului, iar tot coninutul fiierului este
ters n momentul deschiderii. n caz c fiierul nu exist,
acesta va fi creat.
a Deschidere doar pentru scriere. Pointerul este la sfritul
fiierului. Dac fiierul nu exist, acesta va fi creat. Modul se
mai numete i mod adugare.
a+ Deschidere att pentru scriere, ct i pentru citire. Pointerul
este la sfritul fiierului. Dac fi ierul nu exist, acesta va fi
52
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

creat.
x Fiierul este creat i deschis pentru scriere. Pointerul la
nceputul fiierului. n caz c fiierul exist se genereaz o
eroare de tip E_WARNING, iar funcia fopen() returneaz
false.
x+ Fiierul este creat i deschis pentru scriere i citire. Pointerul
la nceputul fiierului. n caz c fiierul exist se genereaz o
eroare de tip E_WARNING, iar funcia fopen() returneaz
false.

Citirea dintr-un fiier


Funcia fread() citete date dintr-un fiier.
Primul parametru al funciei fread() conine numele fiierului, iar cel
de-al doilea parametru specific numrul maxim de octei care va fi
citit.
n urmtorul exemplu se citete ntreg coninutul fiierului
"webdictionary.txt" :
fread($myfile,filesize("webdictionary.txt"));

nchiderea unui fiier


Funcia fclose() este utilizat pentru nchiderea unui fiier.
Not: O practic corect este cea de a nchide toate fiierele dup
finalizarea operaiilor de prelucrare a datelor, pentru a nu fi distruse
accidental.
Funcia fclose() necesit ca parametru numele fiierului care va fi
nchis:
<?php
$myfile = fopen("webdictionary.txt", "r");
// cod ce va fi executat..
fclose($myfile);
?>

Citirea linie cu linie dintr-un fiier


Funcia fgets() este utilizat pentru citirea unei linii din fiier.
n exemplul de mai jos se afieaz 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 NCEPTORI

Not: Dup apelul funciei fgets() , pointerul de fiier se mut la


nceputul celei de-a doua linii din fiier.
Verificarea sfritului de fiier
Funcia feof() function verific dac pointerul a ajuns la sfritul
fiierului.
Funcia feof() este util n parcurgerea fiierelor a cror dimensiune nu
se cunoate.
n exemplul de mai jos, fiecare linie din fiierul "webdictionary.txt"
este citit i afiat pe ecran, pn cnd se ntlnete marcajul de
sfrit de fiier:

<?php
$myfile = fopen("webdictionary.txt", "r") or
die("Unable to open file!");

// se afieaz linie cu linie


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

fclose($myfile);
?>

Citirea unui caracter din fiier


Funcia fgetc() citete un singur caracter din fiierul dat ca parametru.
n exemplul de mai jos, se afieaz pe ecran caracter cu caracter
coninutul fiierului "webdictionary.txt":
<?php
$myfile = fopen("webdictionary.txt", "r") or
die("Unable to open file!");

// afieaz fiecare caracter din fiier


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

fclose($myfile);
?>

Not: Dup apelul funciei fgetc() , pointerul de fiier se mut pe


urmtorul caracter.

54
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

Crearea i scrierea n fiiere stocate pe server


Funcia fopen() este utilizat n PHP fie pentru deschiderea unui fiier,
fie pentru crearea lui.
Pentru crearea unui fiier, modul de deschidere al acestuia va fi pentru
scriere(w) sau pentru adugare(a).

n exemplul urmtor se va crea fiierul "testfile.txt", n acelai director


n care este salvat fiierul .php care conine codul pentru crearea
fiierului:
$myfile = fopen("testfile.txt", "w");
Not: Dac avei erori atunci cnd ncercai codul de mai sus,
verificai mai nti dac avei drepturi de scriere pe hard disk.
Scrierea ntr-un fiier
Funcia fwrite() scrie date n fiierul specificat n primul parametru. Al
doilea parametru al funciei va conine irul de caractere ce urmeaz a
fi scris n fiier.

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


persoane("John Doe" , "Jane Doe") n fiierul "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);
?>

Fiierul "newfile.txt" va avea urmtorul coninut, dup execuia


scriptului:
John Doe
Jane Doe
Suprascrierea ntr-un fiier
n exemplul urmtor deschidem fiierul "newfile.txt" n modul de
deschidere pentru scriere (w) i scriem numele a dou persoane pe
primele 2 linii de fiier:
<?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 NCEPTORI

$txt = "Minnie Mouse\n";


fwrite($myfile, $txt);
fclose($myfile);
?>

Datele stocate n fiier naintea execuiei acestui script s -au pierdut i


fiierul are acum urmtorul coninut:
Mickey Mouse
Minnie Mouse

Upload-ul fiierelor pe server


n PHP operaia de upload este facil, cu toate acestea trebuie s fim
precaui n momentul n care executm aceast operaie.
Configurarea fiierului "php.ini"
Primul pas este cel n care PHP va fi configurat s permit operaia de
upload.
n fiierul "php.ini" directiva file_uploads va fi setat pe On:
file_uploads = On
Fiierul php.ini este localizat n c:/xampp/php/php.ini.

n continuare, crem 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 coninutului utilizat la trimiterea formularului.

56
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

Not:
Atributul type="file" al tagului <input> seteaz cmpul din
formular ca fiind un control de tip file-select, care va afia n
formular un buton "Browse"

n continuare, crem un fiier "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: Fiierul "upload.php" va fi salvat n directorul uploads creat


anterior.
n continuare, adugm cteva restricii.
Verificarea existenei unui fiier
Mai nti verificm dac fiierul upload.php exist n directorul
uploads. n caz contrar, va fi afiat un mesaj de eroare i variabila
$uploadOk va fi setat pe 0:
// Verificm dac exist fiierul
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}

57
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

Restricionarea dimensiunii unui fiier pentru upload


n exemplul de mai jos cmpul din formular se numete
"fileToUpload".
Dac dimensiunea fiierului este mai mare de 500KB, va fi afiat un
mesaj de eroare i variabila $uploadOk va fi setat pe 0:
// verificm dimensiunea fiierului
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}

Restricionarea formatului unui fiier pentru upload


n exemplul de mai jos este permis upload-ul doar pentru fiiere de tip
JPG, JPEG, PNG, i GIF. Pentru toate celelalte formate de fiier va fi
afiat un mesaj de eroare i variabila $uploadOk va fi setat pe 0:
// permite anumite formate pentru fiierul 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 fiier


<?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 NCEPTORI

}
}
// verificm dac fiierul exist n directorul
uploads
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// verificm dimensiunea fiierului
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Verificm formatele de fiier

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


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

// Verificm starea variabilei $uploadOk


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

// dac totul este OK atunci ncercm 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 NCEPTORI

3. Fie de lucru
FIA DE LUCRU NR.1- instalarea produselor software
1. Download-ai pachetul web XAMPP compatibil cu sistemul de
operare instalat pe computerul vostru de la adresa
https://www.apachefriends.org/ro/download.html i acceptai
setrile implicite pentru instalare.
2. Navigai n Windows i localizai directorul C:/XAMPP cu
subdirectorul htdocs.
3. Pornii aplicaia XAMPP - Control Panel lansnd n execuie
fiierul xampp-control.exe.

FIA DE LUCRU NR.2- crearea fiierelor html, css i php


1. Creai un nou director numit day_1 n directorul C:/xampp/.
2. Copiai fiierul basis.html n directorul C:/xampp
/htdocs/day_1i redenumii-l basis.php;
3. Creai directorul css n C:/xampp/htdocs/day_1 i copiai
basis.css n C:/xampp/htdocs/day_1/css;
4. Modificai fiierul .css, prin aplicarea de noi stiluri pentru font i
background;
5. Creai o list ne-ordonat pentru a o utiliza n seciunea de meniu;
6. Creai un fiier menu.php care va conine 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 NCEPTORI

FIA DE LUCRU NR.3- transformarea paginilor statice n pagini


dinamice
n directorul Day_1 exist fiierele basis.html i basis.css
1. Scriei n basis.html codul PHP pentru includerea codului PHP n
pagina html
2. Creai fiierele pentru seciunile paginii web, de tip include-files
(Footer, Content, Navigation)
3. Pentru includerea fiierelor create mai sus n basis.php utiliza i
instruciunea 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 NCEPTORI

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

FIA DE LUCRU NR.4- utilizarea instruciunii de afiare n PHP


1. Creai n directorul day_1 scripturi php pentru obinerea
urmtoarelor rezultate:
Afiarea n browser a mesajului Welcome to Alfatraining
<html>
<body>
<?php
echo " Welcome to Alfatraining!";
?>
</body>
</html>
2. Adugai comentarii liniilor de cod PHP
3. Studiai proprietatea non case-sensitivity a instruciunilor PHP

FIA DE LUCRU NR.5- utilizarea variabilelor


Creai n directorul day_1 scripturi php pentru obinerea
urmtoarelor rezultate:
1. Declararea variabilelor color, car, house i atribuirea de valori
<?php
$number = 100;
$color = 'silver';
$car = 'Peugeot 206';
?>
2. Afiarea valorilor memorate n variabile i a tipurilor de date ale
acestora utiliznd funcia var_dump().
<?php
$x = 4569;
var_dump($x);
?>
3. Modificai numele variabilelor n instruciunea de afiare pentru a
observa proprietatea case-sensitivity a variabilelor.
<html>

62
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

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

FIA DE LUCRU NR.6- utilizarea structurilor de control


Creai 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>";
}
?>

FIA DE LUCRU NR.7- crearea i utilizarea tablourilor


1. Declarai i iniializai un tablou numit cars care s memoreze
mrcile a trei maini. Afiai datele memorate n tablou utiliznd
instruciunea foreach.
<?php
$cars = array("Volvo", "BMW", "Toyota");

63
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

foreach($cars as $car)
echo "I like " . $car. "<br>";
?>
2. Declarai i iniializai un tablou numit cars n care memorai
mrcile a 3 maini. Sortai cresctor tabloul i afiai datele.
<?php
$cars = array("Volvo", "BMW", "Toyota");
sort($cars);
foreach($cars as $car)
{
echo $car;
echo "<br>";
}
?>

FIA DE LUCRU NR.8- transformarea paginilor statice n pagini


dinamice
1. n directorul Day 2/static_HTML identificai fiierele resurse ale
unui website (fiiere .html, imagine, .css, etc).
2. Creai fiierele .php necesare pentru toate seciunile 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 NCEPTORI

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. tergei fiierele html.

FIA DE LUCRU NR.9- Crearea funciilor i studiul


comportamentului variabilelor n diferite domenii de vizib ilitate
1. Creai o funcie myTest care conine 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
funciei
//va genera eroare
echo "<p> Variable x outside function is $x
</p>";
?>

2. Creai o funcie myTest2 care conine variabila local static x.


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

3. Creai o funcie myTest3 i o variabil global x.

65
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

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

4. Creai o funcie myTest4 i variabilele globale x i y.


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

FIA DE LUCRU NR. 10- Crearea unui formular utiliznd metodele


GET i POST
1. Creai un fiier HTML care afieaz un formular cu dou cmpuri
i un buton submit, utiliznd 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 NCEPTORI

</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. Creai un fiier HTML care afieaz un formular cu dou cmpuri
i un buton submit, utiliznd 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 NCEPTORI

FIA DE LUCRU NR. 11- Crearea unui formular cu cmpuri


obligatorii i validarea datelor din cmpuri
1. n fiierul form_handling.php exist un script care genereaz un
formular. Scriei instruciunile necesare validrii datelor din toate
cmpurile formularului.
2. Eliminai caracterele inutile (space, tab, newline) utiliznd funcia
PHP trim().
3. Eliminai caracterele backslash (\)utiliznd funcia PHP
stripslashes().
4. Creai o funcie test_input() care s realizeze toate verificrile.
5. Adugai variabilele $nameErr, $emailErr, $genderErr i
$websiteErr.
6. Adugai o instruciune if pentru fiecare variabil $_POST.
7. Verificai data introdus n fiecare cmp din formular i afiai un
mesaj corespunztor de eroare n cazul n care ntr-un cmp nu s-au
introdus date.
8. Validai datele introduse, afind 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 iniizeaz variabilele folosite
//pentru afiarea 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 NCEPTORI

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 NCEPTORI

?>

<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>

FIA DE LUCRU NR. 12- Crearea, modificarea i tergerea unui


cookie
1. Creai un cookie numit "user" care s memoreze valoarea "John

70
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

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. Utilizai funcia isset() pentru a verifica dac au
fost fcute setrile 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. tergei cookie-ul user, utiliznd funcia setcookie() pentru


setarea orei de expirare cu o or n urm fa de ora curent.
<?php
//setm 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. Verificai dac un cookie este activ. Mai nti, creai un cookie


utiliznd funcia setcookie(), apoi verificai numrul de cookies
active folosind funcia count().
71
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

<?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>

FIA DE LUCRU NR. 13 - Crearea, modificarea i tergerea


sesiunilor
1. Creai o sesiune care s conin 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 NCEPTORI

2. Utilizai instruciunea print_r pentru a afia valorile variabilelor


sesiunii curente.
<?php
session_start()
?>

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

</body>
</html>

3. Scriei un script PHP pentru a modifica valoarea variabilei favcolor


a sesiunii curente prin suprascriere
<?php
session_start()
?>
<html>
<body>
<?php
//modificm variabila sesiune prin
suprascriere
$_SESSION["favcolor"] = "fuchsia";
print_r($_SESSION);
?>
</body>
</html>
4. Scriei 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 NCEPTORI

FIA DE LUCRU NR. 14- MySQL-Crearea conexiunii la baza de


date, crearea bazei de date i a tabelelor
1. Scriei 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. Scriei 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 NCEPTORI

3. Scriei 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);
?>

FIA DE LUCRU NR. 15 - MySQL - Utilizarea comenzilor INSERT


i UPDATE
1. Scriei 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 NCEPTORI

$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. Scriei un script PHP care nsereaz n tabela Myguests trei


nregistrri.
<?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 NCEPTORI

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

FIA DE LUCRU NR. 16- MySQL- afiarea datelor unui utilizator


stocate n baza de date n cadrul unui script de login la site
1. Scriei 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 NCEPTORI

$_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 NCEPTORI

4. Crearea unui website dinamic utiliznd PHP


Magazin online
Proiectul MAGAZIN ONLINE const n realizarea unui webs ite de
comenzi virtuale pentru rechizite colare folosind cunotine de html,
css, php i mysql.
Pentru nceput se va crea un ablon pentru site.
Paginile html, vor avea seciunile: antet, subsol, meniul principal si
poriunea n care va fi afiat coninutul, seciuni realizate folosind div-
uri.
Site-ul conine un meniu cu urmtoarele opiuni:
Home,
Descriere
Produse
Contact
Pentru realizarea unui design ct mai atractiv au fost create mai multe
fiiere .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 coul de cumprturi
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

Coninutul fiierului home.php este urmtorul:


<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 NCEPTORI

</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>

Coninutul fiierului 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 NCEPTORI

Fiierul 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 NCEPTORI

.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 NCEPTORI

Continutul fiierului 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 NCEPTORI

Fiierul style-item.css cu urmtorul coninut 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
}

Fiierul 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 NCEPTORI

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

Fiierul 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 NCEPTORI

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

Fiierul 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 NCEPTORI

.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 aplicaia xampp, apoi se deschide n browser fereastra
localhost/phpmyadmin.

87
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

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


magazin. Pentru aceasta se acioneaz butonul New din lista din
stnga ferestrei.

88
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

n noua baz de date vom crea tabelele:

cos este tabela care conine produsele selectate de utilizator


produse este tabela care conine detalii despre fiecare produs
n parte
utilizator este tabela care conine date despre utilizatori

Tabela utilizator conine urmtoarele cmpuri:


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 NCEPTORI

Tabela produse conine urmtoarele cmpuri:


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 NCEPTORI

Tabela cos conine urmtoarele cmpuri:


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 relaiile dintre ele n


modul design, ca n imaginea de mai jos.
91
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

Observaie: Dac unei tabele nu i s -a stabilit o cheie primar, pentru a


putea realiza o relaie, trebuie s ne asigurm c este indexat cmpul
de legtur.

92
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

n continuare vom popula tabelele cu informaii.

Pasul 3. Vom crea un fiier 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 NCEPTORI

Pasul 4. Se pot afia informaiile 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 NCEPTORI

//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. Adugm o bar de cutare 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 NCEPTORI

/*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 NCEPTORI

<?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 NCEPTORI

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


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

<!--memorm datele utilizatorului in variabila $row


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

Pasul 6. n fiierul produse.php adugam 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 NCEPTORI

<!--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 NCEPTORI

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 afia coninutul coului 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 NCEPTORI

<!--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 NCEPTORI

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 fiierul operatii_in_cos.php
include operatii_in_cos.php;
?>
</head>
<body>
<h1> Cosul meu </h1>

102
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

<!--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 NCEPTORI

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 NCEPTORI

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


activat va face o serie de verificri: de logare i de calcul a
coninutului coului.
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 NCEPTORI

<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 NCEPTORI

</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 NCEPTORI

//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 conin urmtoarele fiiere i


subfoldere:

108
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

Pentru se putea realiza logarea se va crea fiierul login.php.


mprirea paginii se face folosind seciuni 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 NCEPTORI

<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 NCEPTORI

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

Se va crea fiierul item.php cu urmtorul coninut:


<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 NCEPTORI

//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 NCEPTORI

<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 urmtorul coninut:


<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 NCEPTORI

<?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 NCEPTORI

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>

Fiierul home.php are urmtorul coninut:


<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 NCEPTORI

</body>
</html>

Fiierul descriere.php are urmtorul coninut:


<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 NCEPTORI

<p>Va multumim pentru


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

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

Fiierul contact.php are urmtorul coninut:


<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 NCEPTORI

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, Botoani, 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


funcionalitate pe msur prin intermediul fiierului
control_login.php din folderul include.

control_login.php
<?php

118
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

/*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 NCEPTORI

{
$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 NCEPTORI

//daca exista campuri necompletate


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

Fiierul footer.php are urmtorul coninut:


<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>

Fiierul include-start.php conine informaii legate de publicarea


site-ului pe un server folosind date de logare, astfel nct 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 NCEPTORI

?>

Pagina left-bar.php conine:


<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>

Fiierul user-bar.php conine:


<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 NCEPTORI

.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 NCEPTORI

}
?>
<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>

Coul de cumparaturi a neces itat crearea unei pagini cu coninutul aflat


n fiierul 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 NCEPTORI

//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 NCEPTORI

Verificarea coului se realizeaz prin intermediul codului din fiierul


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 fiierului 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 NCEPTORI

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 fiierului 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 fiierului 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 fiierului 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 fiierului este
contact.php */

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

127
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

> Contact </a></li>


</ul>
</div>

Paginile website-ul arat ca n imaginile urmtoare:

1. main.php

2. descriere.php

128
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

3. produse.php

Dup cum putem observa, site-ul ne semnaleaz nite erori aprute 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 NCEPTORI

5. login.php

6. cos.php

Acum site-ul magazinonline.com este complet. Observai


funcionalitatea acestuia: se pot realiza operaii de nregistrare,
autentificare, de cutare a produselor, de selectare i adugare n co,
de finalizare a comenzii.

130
PHP- GHID DE PROGRAMARE WEB PENTRU NCEPTORI

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