MANUELA CARPEN * ROXANA ASANDULUI * MIHAIELA TUNEA CARMEN-AFRODITA GIOCAȘ * CERASELA-DANIELA CARDAȘ
PHP
GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
2
Carte elaborată în cadrul proiectului Erasmus + ”Acquisition of professional web programming skills for an earlier integration in the labor market” nr. ref. 2015-1-RO01-A102-014297.
Colaboratori:
Conținuturi capitolele 1, 2 : Ralph-Müller Lucanus Conținuturi capitolul 3 : Mihaela-Liliana Prăjinariu Conținuturi capitolul 4 : Vlad Batalan Copertă : Andra-Mălina Cardaș
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
3
Cuprins 1. Introducere .............................................................. 5
Ce este PHP? ...........................................................5
De ce să alegi programare în PHP?............................6
2. Programarea web în limbajul PHP ........................ 16
Elemente de sintaxă ale limbajului PHP................... 16
Variabile PHP ........................................................ 18
Crearea (declararea ) variabilelor PHP............... 18
Variabile de ieșire ............................................. 19
Domeniul de vizibilitate al variabilelor ............... 20
Domeniul Global și Local ................................... 20
Specificatorul global ........................................ 21
Instrucțiunile echo și print ................................ 22
Stringuri PHP.................................................... 23
Constante PHP ...................................................... 23
Operatori PHP ....................................................... 24
Structuri de control ............................................... 24
Instrucțiuni de decizie....................................... 24
Instrucțiuni de ciclare în PHP ............................. 25
Funcții PHP ........................................................... 25
Funcții definite de utilizator în limbajul PHP ....... 25
Tablouri PHP ......................................................... 26
Sortarea tablourilor .......................................... 27
Variabile globale și superglobale în PHP .................. 27
Gestionarea formularelor în PHP ............................ 27
Formulare HTML simple.................................... 28
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
4
Metoda HTTP POST și variabila superglobală $_POST ........................................................................ 28
GET versus POST .............................................. 29
Validarea datelor din formulare ........................ 30
Câmpuri obligatorii în formulare PHP................. 32
Afișarea mesajelor de eroare la completarea câmpurilor unui formular .............................................. 33
Cookies în limbajul PHP.......................................... 34
Crearea unui cookie în PHP ............................... 34
Sesiuni .................................................................. 35
Deschiderea unei sesiuni PHP............................ 36
Obținerea valorilor variabilelor sesiune ............. 36
Baze de date ......................................................... 39
Ce reprezintă MySQL? ...................................... 40
Exemple de scripturi care utilizează MySQLi ....... 41
PhpMyAdmin ................................................... 50
Etapele creării unei baze de date MySQL ........... 51
Gestionarea fișierelor pe server ............................. 51
3. Fișe de lucru ........................................................... 60
4. Crearea unui website dinamic utilizând PHP ......... 79
Webografie .............................................................. 131
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
5
1. Introducere
Limbajele pe care se bazează PHP sunt :
• HTML ( Hyper Text Markup Language) – pentru definirea
conținuturilor paginilor web
• CSS ( Cascading Style Sheets)- pentru definirea aspectului
paginilor web
• JavaScript- pentru programarea evenimentelor din paginile
web, pentru a adăuga interactivitate paginilor web
Tutoriale :
• HTML Tutorial
[http://www.w3schools.com/cssref/default.asp]
• CSS Reference
[http://www.w3schools.com/cssref/default.asp]
• JavaScript Reference
[http://www.w3schools.com/jsref/default.asp]
Alte resurse utile:
• http://php.net/manual/ro/
Ce este PHP?
• … un acronim pentru “PHP: Hypertext Preprocessor”
• …un limbaj de programare open-source, cu o largă răspândire
în domeniul IT
• … gratis pentru a fi descărcat și utilizat
De ce este un limbaj atât de atractiv și popular?
• pentru că este suficient de puternic pentru a fi în centrul celui
mai mare sistem de blogging pe web (WordPress)!
• pentru că este suficient de complex pentru a rula cea mai
mare rețea socială (Facebook)!
• de asemenea, este destul de ușor să fii un programator
începător de server-side!
PHP...
• Fișierele PHP pot conține text, coduri HTML, CSS,
JavaScript și coduri PHP
• codurile PHP sunt executate pe server, iar rezultatul este
returnat în browser ca un cod HTML simplu
• Fișierele PHP au extensia ".php"
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
6
Vă prezentăm un exemplu de cod PHP (introduction.php)
<!DOCTYPE html>
<html>
<body>
<?php
echo "My first PHP script!";
?>
</body>
</html>
Ce avem de făcut?
Server side:
• La început pornim serverul web (localhost).
• Apoi scriem codul de mai sus într-un editor de text, cum ar fi
Notepad++ .
• Salvăm fișierul cu numele „introduction.php“ în directorul
„C:/xampp/htdocs“.
Client side:
• După salvarea fișierului îl deschidem în browser
(http://localhost/introduction.php) și analizăm conținutul
paginii web afișate în browser.
În PHP se pot realiza următoarele operații:
... generare de pagini cu conținut dinamic
... creare, deschidere, citire, scriere, ștergere și închidere de
fișiere de pe server
... colectarea datelor din formulare
... trimiterea și primirea cookie-urilor
...adăugarea, ștergerea, actualizarea datelor din baza de date
... controlul accesului utilizatorilor
... criptarea datelor
PHP nu te limitează în privința obiectelor afișate prin pagini web: pot
fi afișate imagini, fișiere PDF, video Flash, texte XHTML sau XML.
De ce să alegi programare în PHP?
• PHP rulează pe diferite platforme (Windows, Linux, Unix,
Mac OS X, etc.)
• PHP este compatibil cu aproape toate serverele utilizate în
prezent (Apache, IIS etc.)
• PHP suportă o gamă largă de baze de date
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
7
• PHP este gratuit. Descărcați-l din resursa oficială PHP:
www.php.net
• PHP este ușor de învățat și rulează eficient pe partea de server
De ce anume avem nevoie?
Pentru a începe să utilizați PHP, parcurgeți pașii de mai jos:
• Identificați o gazdă web PHP gazdă și suport MySQL
• Instalați un server web pe propriul PC, apoi instalați PHP și
MySQL
• Urmați instrucțiunile de instalare de pe situl oficial
http://php.net/manual/en/install.php
• De ce avem cu adevărat nevoie în acest curs?
• Un server web XAMPP ( Apache), un interpretor PHP și un
SBGD (MySQL)
• Un editor de text (Notepad++)
• Un browser (Firefox)
În cadrul acestui seminar, vom configura PHP pe propriul PC prin
utilizarea XAMPP (inclusiv Apache și PHP, MySQL).
Site-ul oficial PHP (PHP.net) are instrucțiuni de instalare pentru PHP:
http://php.net/manual/en/install.php
Exemplul următor evidențiază modul în care PHP lucrează cu HTML,
CSS și JavaScript:
Ce vom realiza?
• vom crea un fișier *.php dintr-un fișier *.html deja existent
• vom adăuga stiluri utilizând CSS
• vom adăuga/include pagini dinamice (fișiere *.php)
• vom include un subsol, conținut ș i un meniu de navigare în
paginile web.
Fișierele basis.html și basis.css au fost create și au următorul
conținut:
basis.css
* {
margin: 0px;
padding: 0px;
}
body {
font-size: 12pt;
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
8
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;
}
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
9
/* 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;
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
10
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;
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
11
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">
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
12
<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>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
13
Primii pași:
• Creați un nou folder în directorul "C: / xampp /" (denumit
"day_1")
• Copiați "basis.html" cu numele "basis.php" în directorul "C: /
xampp / htdocs / day_1"
• Creați un folder denumit "css" în "C: / xampp / htdocs /
day_1" și copiați "basis.ccs" în "C: / xampp / htdocs / day_1 /
css"
• Creați fișierele pe care le veți include în fișierul .php (Footer,
Content, Navigation)
• Pentru a include fișierele în "basis.php", utilizați instrucțiunea
include.
Pentru o organizare optimă a fișierelor pe disc vă propunem
următoarea structură de directoare și fișiere :
Figura de mai jos evidențiază ce se întâmplă la execuția pe server a
fișierului basis.php:
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
14
Ce este World Wide Web (www) ?
• Termenul World Wide Web este un sistem de documente și
informații de tip hipertext legate între ele care pot fi accesate
prin rețeaua mondială de Internet. Documentele, care rezidă
în diferite locații pe diverse calculatoare server, pot fi regăsite
cu ajutorul unui identificator univoc numit URI. Hipertextul
inclusiv imagini etc. este afișat cu ajutorul unui program de
navigare în web numit browser, care descarcă paginile web de
pe un server web și le afișează pe un terminal „client” la
utilizator.
• Toate calculatoarele
folosesc un protocol
de comunicare numit
HTTP
Cum funcționează www?
• Informațiile web sunt
stocate în documente
numite pagini web
• Paginile Web sunt
fișiere stocate pe
computere numite
servere web
• Calculatoarele care
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
15
”citesc” paginile web sunt numite clienți web
• Clienții web vizualizează paginile cu un program numit
browser web
• Cele mai populare browsere sunt Google Chrome, Firefox și
Internet Explorer
sursa imaginii: Wikipedia
Figura de mai sus evidențiază comunicarea ”statică” în www.
Interpretorul PHP acționează ca o
extensie a serverului web care
este invocată de ori câte ori o
pagina PHP este
accesată(imaginea din dreapta ).
Această componentă procesează
codul-sursa din pagină și apoi
transmite rezultatul înapoi la
web-server, ajungând în final în
browserele utilizatorilor.
Modul de funcționare al
interpretorului PHP este ilustrat
de figura din dreapta și de figura
din pagina următoare :
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
16
2. Programarea web în limbajul PHP
Elemente de sintaxă ale limbajului PHP
Un script PHP poate fi plasat oriunde în interiorul unui fișier HTML.
Scriptul PHP începe cu <?php și se termină cu ?>: <?php
// cod scris în PHP
?>
Extensia predefinită a unui fișier PHP este " .php".
În mod obișnuit , un fișier PHP conține taguri HTML și instrucțiuni de
cod PHP.
<!DOCTYPE html>
<html>
<body>
<h1>My first PHP page</h1>
<?php
echo "Hello World!";
?>
</body>
</html>
Notă : Instrucțiunile PHP se încheie cu simbolul ”;”.
Comentarii
Un comentariu în cod PHP este o linie care nu este citită/ executată ca
parte a programului. Singurul său scop este de a fi citit de către cineva
care analizează codul.
Comentariile pot fi folosite pentru:
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
17
• Alte persoane să înțeleagă scopul în care au fost scrise
anumite linii de cod
• Autorul codului/ programatorul să își poată aminti de ce a
scris respectivele instrucțiuni. Cei mai mulți programatori
trăiesc experiența de a reveni la propria lor muncă un an sau
doi mai târziu și de a constata că au uitat de ce au scris
anumite linii de cod .
Există mai multe posibilități de a realiza comentarii în PHP:
<!DOCTYPE html>
<html>
<body>
<?php
// Acesta este un comentariu uni-linie
# Acesta este de asemenea un comentariu uni-linie
/* Acesta este format din mai multe linii de
comentariu bloc care se întinde pe mai multe linii
*/
// Comentariile pot fi folosite pentru a ”anula”
//anumite secvențe de cod
$x = 5 /* + 15 */ + 5;
echo $x;
?>
</body>
</html>
Case-sensitivity în PHP
În PHP, toate cuvintele cheie (de exemplu if, else, while, echo, etc.),
clase, funcții și funcții definite de utilizator nu sunt sensibile la
scrierea cu litere mici sau cu litere mari.
În exemplul de mai jos, cele 3 instrucțiuni echo sunt corecte (și
echivalente, ca rezultat):
Exemplu:
<!DOCTYPE html>
<html> <body>
<?php
ECHO "Hello World!<br>";
echo "Hello World!<br>";
EcHo "Hello World!<br>";
?> </body>
</html>
Cu toate acestea, identificatorii de variabile sunt case-sensitive.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
18
În exemplul de mai jos doar prima instrucțiune va afișa valoarea
variabilei $color, deoarece $color, $COLOR și $coLOR sunt tratate ca
variabile distincte.
Exemplu:
<!DOCTYPE html>
<html>
<body>
<?php
$color = "red";
echo "My car is " . $color . "<br>";
echo "My house is " . $COLOR . "<br>";
echo "My boat is " . $coLOR . "<br>";
?>
</body>
</html>
Notă: Identificatorii de variabile sunt case-sensitive.
Variabile PHP
Variabilele reprezintă ”containere” pentru memorarea informațiilor.
Crearea (declararea ) variabilelor PHP
În PHP, un identificator de variabilă începe cu simbolul $, urmat de
numele propriu-zis al variabilei:
Exemplu:
<?php
$txt = "Hello world!";
$x = 5;
$y = 10.5;
?>
După execuția instrucțiunilor de mai sus, variabila $txt va memora
valoarea Hello world!, variabila $x va memora valoarea 5, iar
variabila $y va memora valoarea 10.5.
Notă: La atribuirea unei valori de tip șir de caractere, valoarea trebuie
încadrată între ghilimele.
Spre deosebire de alte limbaje de programare, în PHP nu există o
instrucțiune de declarare a variabilelor. Aceasta este creată în
momentul în care i se atribuie prima valoare.
Tratați variabilele ca și containere pentru stocarea informațiilor!
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
19
Un identificator de variabilă poate fi scurt(x sau y) sau poate fi
descriptiv(age, carname, total_volume).
Reguli pentru identificatorii de variabile PHP:
Identificatorul variabilei începe cu simbolul $, urmat de numele
variabilei
• Numele variabilei trebuie să înceapă cu o literă sau cu
simbolul ”_”
• Numele variabilei nu poate să înceapă cu o cifră
• Numele variabilei poate conține doar caractere alfa-numerice
(A-z, 0-9) și simbolul ”_”
• Numele de variabile sunt case-sensitive ($age și $AGE
reprezintă variabile distincte)
Variabile de ieșire
Instrucțiunea echo este adesea utilizată pentru a afișa date pe ecran.
Următorul exemplu evidențiază modul în care se va afișa un text și
valoarea unei variabile pe ecran: <?php
$txt = "PHP-Schools";
echo "I love $txt!";
?>
Următorul exemplu produce același rezultat ca exemplul anterior: <?php
$txt = "PHP-Schools";
echo "I love " . $txt . "!";
?>
Exemplul de mai jos va afișa suma valorilor stocate în 2 variabile x și
y: <?php
$x = 5;
$y = 4;
echo $x + $y;
?>
Mai multe informații găsiți la adresa:
http://www.w3schools.com/php/php_variables.asp
În limbajul PHP tipurile de date nu sunt foarte clar utilizate!
Limbajul PHP nu necesită declararea tipurilor de date.
În exemplul de mai sus, observați că variabilele x și y nu au fost
declarate înaintea utilizării lor, nu au fost asociate tipuri de date
acestor variabile.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
20
PHP convertește automat variabila la tipul corect de date, în
funcție de valoarea care i-a fost atribuită.
În alte limbaje, cum ar fi C, C++ și Java, programatorii trebuie să
declare numele și tipul de date al variabilei înainte de a o utiliza.
PHP suportă următoarele tipuri de date:
• String
• Integer
• Float
• Boolean
• Array
• Object
• Null
• Resource
În PHP, funcția var_dump() returnează tipul de date și valoarea unei
variabile: <?php
$x = 5985;
var_dump();
?>
Pentru mai multe informații, accesați link-ul:
http://www.w3schools.com/php/php_datatypes.asp
Domeniul de vizibilitate al variabilelor
În PHP, variabilele pot fi declarate oriunde în interiorul scriptului.
Domeniul de vizibilitate al unei variabile este zona din script în care
variabila poate fi referită / utilizată.
În PHP există trei domenii distincte de vizibilitate a variabilelor:
• Local | Static (în interiorul unei funcții)
• Global ( în afara unei funcții)
• Super Global (toate domeniile)
Domeniul Global și Local
O variabilă declarată în afara unei funcții are un domeniu de
vizibilitate GLOBAL și poate fi accesată doar în afara unei funcții: <?php
$x = 5; // domeniu global
function myTest() {
// utilizarea variabilei x în interiorul funcției va
genera eroare
echo "<p>Variable x inside function is: $x</p>";
}
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
21
myTest();
echo "<p>Variable x outside function is: $x</p>";
?>
O variabilă declarată în cadrul unei funcții are un domeniu de
vizibilitate LOCAL și poate fi accesată numai în această funcție:
<?php
function myTest() {
$x = 5; // domeniu local
echo "<p>Variable x inside function is:$x </p>";
}
myTest();
// utilizarea variabilei x în afara funcției va
genera eroare
echo "<p>Variable x outside function is:$x</p>";
?>
Notă: Puteți avea variabile locale cu același nume, în diferite funcții,
deoarece variabilele locale sunt recunoscute numai de funcția în care
acestea sunt declarate.
Specificatorul global
Specificatorul global este utilizat pentru a accesa o variabilă globală
din cadrul unei funcții. Pentru a realiza acest lucru, utilizați
specificatorul global înaintea variabilei (în interiorul funcției):
<?php
$x = 5;
$y = 10;
function myTest() {
global $x, $y;
$y = $x + $y;
}
myTest();
echo $y; // afișează 15
?>
PHP stochează, de asemenea, toate variabilele globale într-o matrice
numita $GLOBALS [index]. Indicele are numele variabilei. De
asemenea, această matrice este accesibilă din funcții și poate fi
utilizată pentru a actualiza în mod direct variabilele globale.
<?php
$x = 5;
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
22
$y = 10;
function myTest() {
$GLOBALS['y'] = $GLOBALS['x']+$GLOBALS['y'];
}
myTest();
echo $y; // outputs 15
?>
În mod normal, atunci când o funcție este executată, toate variabilele
sale sunt șterse. Cu toate acestea, uneori, ne dorim ca o variabilă locală
să NU fie eliminată pentru a o utiliza într-o altă secvență de
instrucțiuni.
Pentru a nu fi eliminată din memorie se utilizează specificatorul static
la prima declarare a variabilei:
<?php
function myTest() {
static $x = 0;
echo $x;
$x++;
}
myTest();
myTest();
myTest();
?>
Apoi, de fiecare dată când funcția este apelată, acea variabilă va
memora în continuare informațiile pe care le conținea la u ltimul apel.
Notă: Variabila este locală funcției.
Instrucțiunile echo și print
În PHP există două moduri de bază pentru afișare: echo și print.
Instrucțiunile echo și print sunt mai mult sau mai puțin asemănătoare.
Ambele sunt utilizate pentru afișarea datelor pe ecran.
Diferențele care pot fi semnalate sunt:
• echo nu returnează nici o valoare, în timp ce print returnează
1, astfel încât poate fi utilizată în cadrul expresiilor.
• echo poate avea parametri multipli (mai rar), în timp ce print
are un parametru unic.
• echo este o instrucțiune relativ mai rapidă decât print.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
23
Pentru mai multe informații, accesați link-ul:
http://www.w3schools.com/php/php_echo_print.asp
Stringuri PHP
Un string reprezintă un șir de caractere, cum ar fi “Hello World!“.
Funcții PHP specifice lucrului cu șiruri de caractere:
• Lungimea unui șir de caractere: funcția strlen() returnează
numărul de caractere al unui string.
Exemplu:
<?php
echo strlen(“Hello World!“);
// afișează 12
?>
• Numărul de cuvinte al unui șir de caractere: Funcția
str_word_count() returnează numărul de cuvinte al stringului
primit ca parametru
• Inversarea unui șir de caractere: Funcția PHP strrev()
inversează stringul.
• Căutarea unui text specific din cadrul unui șir: Funcția
strpos() caută un text specific într-un șir de caractere.
• Înlocuirea unui subșir într-un șir: Funcția PHP str_replace()
înlocuiește unele caractere cu alte caractere dintr-un șir de
caractere.
Pentru mai multe informații, accesați link-ul: http://www.
w3schools.com/ php/ php_ref_string.asp
Constante PHP
O constantă este un identificator (nume) pentru o valoare simplă.
Valoarea nu poate fi modificată în timpul execuției scriptului.
Un identificator valid de constantă începe cu o literă sau cu simbolul
”_” (nu se utilizează simbolul $).
Notă: Spre deosebire de variabile, constantele sunt vizibile global în
cadrul scriptului.
Pentru crearea unei constante se utilizează funcția define().
Modul de utilizare a funcției define():
define(nume, valoare, case-insensitive)
Parametrii funcției și semnificația acestora:
• nume: specifică numele constantei
• valoarea: specifică valoarea constantei
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
24
• case-insensitive: specifică dacă numele constantei este sau nu
sensibilă la scrierea cu majuscule. Implicit acest parametru
are valoarea fals.
În exemplul de mai jos se creează constanta GREETING, case-
insensitive :
<?php
define("GREETING","Welcome to alfatraining!", true);
echo GREETING;
?>
Operatori PHP
Operatorii sunt utilizați pentru a realiza diferite operații cu variabile și
valori constante.
Operatorii în limbajul PHP se clasifică astfel:
• Operatori aritmetici (+, -, *, /, %, **)
• Operatori de atribuire (=, +=, -=, *=, /=, %=)
• Operatori relaționali (==, ===, !=, <>, !==, >, <, >=, <=)
• Operatori de incrementare/decrementare (++$x, $x++, --$x,
$x--)
• Operatori logici (and, or, xor, &&, |, !)
• Operatori pe stringuri (., .=)
• Operatori pe tablouri (+, ==, ===, !=, <>, !==)
Pentru mai multe informații accesați linkul:
http://www.w3schools.com/php/php_operators.asp
Structuri de control
Instrucțiuni de decizie
Instrucțiunile condiționale (de decizie) sunt utilizate pentru a executa
anumite acțiuni bazate pe condiții.
Foarte des atunci când scriem cod, dorim să efectuăm acțiuni diferite
pentru diferite condiții.
În PHP există următoarele instrucțiuni de decizie:
• if – execută o secvență de cod dacă o condiție logică este
adevărată
• if...else - execută o secvență de cod dacă o condiție logică
este adevărată și execută altă secvență de cod dacă condiția
este falsă
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
25
• if...elseif....else – execută diferite secvențe de cod pentru două
sau mai multe condiții logice
• switch – selectează o secvență de cod care va fi executată în
funcție de valoarea unei expresii-selector
Pentru sintaxă și exemple accesați linkurile
http://www.w3schools.com/php/php_if_else.asp
http://www.w3schools.com/php/php_switch.asp
Instrucțiuni de ciclare în PHP
Instrucțiunile de ciclare (repetitive) PHP execută o secvență de cod cât
timp o condiție logică este adevărată.
De multe ori, atunci când scriem cod, aceeași secvență de cod dorim să
se execute de mai multe ori. Pentru a evita scrierea de linii de cod
identice în mod repetat, putem utiliza instrucțiuni de ciclare.
În PHP avem următoarele instrucțiuni de ciclare:
• while - execută o secvență de cod cât timp o condiție logică
este adevărată.
• do...while - execută o secvență de cod o dată, apoi repetă
execuția secvenței cât timp o condiție logică este adevărată.
• for - execută o secvență de cod de un număr de ori specificat
• foreach - execută o secvență de cod pentru fiecare element al
unui tablou
Pentru sintaxă și exemple accesați linkurile:
http://www.w3schools.com/php/php_looping.asp
http://www.w3schools.com/php/php_looping_for.asp
Funcții PHP
Adevărata putere a limbajului PHP derivă din funcțiile sale, limbajul
încorporează peste 1000 de funcții predefinite.
Funcții definite de utilizator în limbajul PHP
• În afară de funcțiile predefinite ale limbajului, ne putem crea
propriile noastre funcții.
• Funcția reprezintă un bloc de instrucțiuni care poate fi
executat în mod repetat în cadrul unui program.
• Funcția nu se va executa imediat ce se încarcă pagina în
browser, aceasta se va executa doar în urma unui apel.
Crearea unei funcții definite de utilizator în PHP:
O funcție definită de utilizator începe cu cuvântul rezervat "function":
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
26
Sintaxa: function functionName() {
code to be executed;
}
Notă: Numele unei funcții începe cu o literă sau simbolul ”_”, nu
poate începe cu o cifră.
Alegeți nume sugestive pentru funcții care să reflecte scopul acesteia.
Numele de funcții nu sunt case-sensitive.
Pentru mai multe detalii accesați:
http://php.net/manual/en/functions.user-defined.php
Tablouri PHP
Un tablou reprezintă o structură de date care memorează într-o singură
variabilă o mulțime de valori.
Exemplu:
<?php
$cars = array("Volvo","BMW", "Toyota");
echo "I like ".$cars[0].",".$cars[1]."and"
.$cars[2].".";
?>
Dacă aveți de memorat o listă de valori (de exemplu numele unor
mașini), memorarea acestor date ar arăta în modul următor:
$cars1 = "Volvo";
$cars2 = "BMW";
$cars3 = "Toyota";
Dacă ar trebui să scrieți un cod pentru identificarea une i anumite
mașini dintr-o mulțime de 3 sau 300 de mașini, cum ar arăta codul?
Soluția în acest caz este să creați un tablou.
Un tablou poate stoca o mulțime de valori, utilizând un nume unic, iar
regăsirea unei valori se va realiza prin referirea la un anumit
index(poziția ocupată de valoare ).
Pentru crearea unui tablou în PHP se utilizează funcția array().
În PHP, există 3 tipuri de tablouri:
• Tablouri indexate – tablouri indexate numeric
• Tablouri asociative – tablouri în care identificarea unui
element se realizează pe baza unei chei
• Tablouri multidimensionale – tablouri care conțin unul sau
mai multe tablouri
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
27
Sortarea tablourilor
• sort() – sortează tablourile în ordine crescătoare
• rsort() - sortează tablourile în ordine descrescătoare
• asort() - sortează tablourile asociative în ordine crescătoare,
în funcție de o valoare dată
• ksort() - sortează tablourile asociative în ordine crescătoare,
în funcție de o cheie dată
• arsort() - sortează tablourile asociative în ordine
descrescătoare, în funcție de o valoare dată
• krsort() - sortează tablourile asociative în ordine
descrescătoare, în funcție de o cheie dată
Pentru mai multe detalii accesați linkurile:
http://www.w3schools.com/php/php_arrays.asp
http://www.w3schools.com/php/php_arrays_sort.asp
Variabile globale și superglobale în PHP
Variabilele superglobale, "superglobals", au fost introduse o dată cu
versiunea PHP 4.1.0 și reprezintă variabile predefinite ale limbajului
care sunt întotdeauna accesibile, indiferent de domeniul de vizibilitate
- și pot fi accesate din orice funcție, clasă sau fișier, fără a fi nevoie de
alte instrucțiuni.
Variabilele superglobale în PHP sunt:
• $GLOBA LS
• $_SERVER
• $_REQUEST
• $_POST
• $_GET
• $_FILES
• $_ENV
• $_COOKIE
• $_SESSION
Detalii legate de semnificația fiecărei astfel de variabile găsiți la adresa
: http://www.w3schools.com/php/php_superglobals.asp
Gestionarea formularelor în PHP
Variabilele superglobale $_GET și $_POST sunt utilizate pentru
colectarea datelor în formulare de date.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
28
Formulare HTML simple
Exemplul de mai jos prezintă un formular HTML simplu, cu două
câmpuri și un buton de ”submit”.
Exemplu:
<html>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>
</body>
</html>
Atunci când utilizatorul completează formularul de mai sus și dă clic
pe butonul de trimitere, datele din formular sunt trimise pentru
procesare într-un fișier PHP denumit "welcome.php". Datele din
formular sunt trimise prin metoda HTTP POST.
Metoda HTTP POST și variabila superglobală $_POST
Pentru afișarea datelor trimise prin intermediul formularu lui putem
utiliza variabila superglobală $_POST și instrucțiuni de afișare a
diferitelor componente ale acesteia. Fișierul "welcome.php" va arăta
astfel:
<html>
<body>
Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"];
?>
</body>
</html>
Pe ecran vor fi afișate următoarele date: Welcome John
Your email address is [email protected]
Rezultate identice cu cele din scriptul anterior se obțin utilizând
metoda HTTP GET:
<html>
<body>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
29
<form action="welcome_get.php" method="get">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>
</body>
</html>
Fișierul "welcome_get.php" va avea următorul conținut:
<html>
<body>
Welcome <?php echo $_GET["name"]; ?><br>
Your email address is: <?php echo $_GET["email"]; ?>
</body>
</html>
În procesarea formularelor este importantă SECURITATEA datelor
transmise!
GET versus POST
Ambele metode GET și POST creează un tablou de forma (cheie1 =>
valoare1, cheie2 => valoare2,....), în care cheile reprezintă numele
câmpurilor din formular, iar valorile reprezintă datele introduse de
utilizator în aceste câmpuri.
Informațiile trimise prin metodele GET și POST se recuperează prin
intermediul variabilelor superglobale $_POST și $_GET .
$_GET este un tablou de variabile transferat scriptului curent prin
parametri URL.
$_POST este un tablou de variabile transferat scriptului curent prin
metoda HTTP POST.
Programatorii preferă metoda POST pentru trimiterea datelor din
formulare.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
30
Când să utilizăm metoda GET?
Informațiile transmise dintr-un formular prin metoda GET sunt vizibile
tuturor( toate numele și valorile variabilelor sunt afișate în URL).
GET este o metodă care restricționează volumul de informație trimis la
aproximativ 2000 de caractere. Datorită faptului că variab ilele sunt
afișate în URL, este posibil să marcăm pagina, lucru util în anumite
situații.
Metoda GET poate fi utilizată în transmiterea datelor mai puțin
importante.
Notă: Metoda GET nu trebuie utilizată pentru trimiterea parolelor
sau a altor informații importante!
Când anume utilizăm metoda POST?
Informațiile transmise dintr-un formular prin metoda POST nu sunt
vizibile altor persoane(numele/valorile sunt încorporate în cadrul unei
cereri HTTP) și nu există limitări din punct de vedere al volumului de
informație transmis.
În plus, metoda POST oferă o funcționalitate avansată cum ar fi suport
pentru operația de încărcare a fișierelor pe server în format binar.
Deoarece variabilele nu sunt afișate în URL marcarea paginii care
conține formularul nu este posibilă.
Pentru mai multe informații accesați link-ul :
http://www.w3schools.com/php/php_forms.aspf
Validarea datelor din formulare
Pentru protejarea datelor dintr-un formular trebuie să realizați o
validare corectă a datelor care să protejeze formularul împotriva
atacurilor provocat de hackeri sau a spam-urilor.
Ce este funcția htmlspecialchars()?
Funcția htmlspecialchars() convertește caracterele spec iale în entități
HTML. De exemplu, caractere ca ” < ” și ” >” vor fi înlocuite cu <
și >.
Acest lucru împiedică atacatorii să exploateze codul prin inserarea de
coduri HTML sau Javascript în formulare (atacuri de tip Cross -site
Scripting).
Notă : Foarte important în securitatea unui formular PHP –
Variabila $_SERVER["PHP_SELF"] poate fi utilizată de hackeri!
Dacă utilizați în pagină parametrul PHP_SELF atunci un hacker poate
introduce în cod un simbol ”/” și comenzi de tip Cross Site Scripting
(XSS) pentru a exploata datele.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
31
Cum putem evita vulnerabilitatea variabilei
$_SERVER["PHP_SELF"] în propriile pagini? Prin utilizarea funcției
htmlspecialchars().
Codul din pagina care conține formularul ar arăta astfel:
<form method="post" action="
<?php echo
htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Dacă un hacker ar încerca să exploateze variabila PHP_SELF,
rezultatul ar fi următorul:
<form method=”post”
action=”test_form.php/"><script>alert(
‚hacked‟)</script>”>
Atacul asupra paginii ar eșua!
Regula care trebuie respectată este cea în care variabilele trebuie
transmise prin funcția htmlspecialchars(). Dacă un hacker încearcă să
insereze în pagină scriptul următor: <script>location.href('http://www.hacked.com')
</script>
acesta nu va fi executat, deoarece codul se va transforma astfel:
<script>location.href('http://www.hacked.com')</script>
În aceste condiții, datele formularului pot fi afișate în siguranță într-o
pagină sau în cadrul unui email.
De asemenea, trebuie realizate următoarele operații la transmiterea
datelor unui formular:
1. Eliminați caracterele inutile ( space, tab, newline) din datele
de intrare cu ajutorul funcției trim()
2. Eliminați caracterele backslash (\)din datele de intrare cu
ajutorul funcției stripslashes ().
Următorul pas este cel de a crea o funcție care realizează toate
verificările datelor introduse în formular.
Vom numi această funcție test_input(). Vom verifica fiecare variabilă
$_POST cu această funcție. Conținutul funcției este prezentat mai jos:
<?php
// definim și inițializăm variabilele asociate
câmpurilor cu șirul vid
$name = $email = $gender = $comment = $website =
"";
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
32
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment = test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
Câmpuri obligatorii în formulare PHP
Toate câmpurile din formularul de mai sus sunt opționale. Pentru a
obține câmpuri obligatorii vom utiliza o funcție și variabile
suplimentare.
În următorul exemplu vom adăuga variabile noi: $nameErr, $emailErr,
$genderErr, and $websiteErr. Rolul acestor variabile este de a memora
mesaje care vor fi afișate pentru câmpurile obligatorii.
Adăugăm de asemenea, o instrucțiune if-else pentru fiecare variabilă
$_POST. Aceasta va verifica dacă variabila $_POST este vidă ( cu
ajutorul funcției PHP empty()). Dacă variabila este vidă un mesaj de
eroare va fi memorat în variabila de eroare asociată respectivului
câmp, în caz contrar, variabila asociată câmpului din formular va stoca
rezultatul returnat de funcția test_input().
<?php
// definim și inițializăm variabilele de eroare cu
șirul vid
$nameErr = $emailErr = $genderErr = $websiteErr =
"";
// definim și inițializăm variabilele asociate
câmpurilor cu șirul vid
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
} else {
$name = test_input($_POST["name"]);
}
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
33
if (empty($_POST["email"])) {
$emailErr = "Email is required";
} else {
$email = test_input($_POST["email"]);
}
}
?>
Apoi, în formularul HTML adăugăm un mic script după fiecare câmp
care generează mesajul de eroare corespunzător. Acest mesaj va fi
afișat dacă utilizatorul încearcă să trimită datele fără a completa unul
dintre câmpurile obligatorii.
Afișarea mesajelor de eroare la completarea câmpurilor unui
formular
Exemplu
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name:
<input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail:
<input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
Validarea datelor din câmpul ”Name”
Codul de mai jos exemplifică un mod simplu de a verifica dacă câmpul
name conține numai litere și caractere albe. Dacă valoarea din câmpul
name nu este validă, se va stoca un mesaj de eroare în variabila
$nameErr.
$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters and white space allowed";
}
Funcția preg_match() returnează true dacă toate caracterele stocate în
variabila $name aparțin mulțimii de caractere șablon dată ca parametru
al funcției și fals în caz contrar.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
34
Validarea datelor din câmpul ”Email”
Cel mai simplu mod de a valida o adresă de email este utilizarea
funcției PHP filter_var().
În codul de mai jos se verifică corectitudinea adresei de email. În cazul
în care textul nu este valid se va stoca în variabila $emailErr un mesaj
de eroare:
$email = test_input($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
}
Validarea datelor din câmpul ”URL”
În codul de mai jos se verifică corectitudinea adresei URL (expresia
permite, de asemenea, utilizarea cratimelor în cadrul URL). În cazul în
care textul nu este valid se va stoca în variabila $websiteErr un mesaj
de eroare:
$website = test_input($_POST["website"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-
a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-
9+&@#\/%=~_|]/i",$website)) {
$websiteErr = "Invalid URL";
}
Cookies în limbajul PHP
Un cookie este utilizat pentru identificarea unui utilizator. Un cookie
reprezintă un mic fișier stocat pe computerul utilizatorului.
De fiecare dată când de pe un computer se execută o cerere de
încărcare a unei pagini în browser va fi trimis serverului fișierul cookie
pentru identificarea utilizatorului. Cu ajutorul limbajului PHP puteți
crea sau regăsi valori cookie.
Crearea unui cookie în PHP
Un cookie se creează cu ajutorul funcției setcookie().
În exemplul următor se creează un cookie numit "user" cu valoarea
"John Doe". Acest cookie va expira în 30 zile(86400 * 30). Simbolul
"/" arată că cookie va fi disponibil în toate paginile site-ului.
Pentru identificarea unui cookie "user" utilizăm variabila globală
$_COOKIE.
Funcția isset() verifică dacă cookie a fost creat:
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
35
Exemplu:
<?php
$cookie_name = "user";
$cookie_value = "John Doe";
setcookie($cookie_name, $cookie_value, time()+
(86400 * 30), "/"); // 86400 = 1 zi
?>
<html>
<body>
<?php
if(!isset($_COOKIE[$cookie_name])) {
echo "Cookie named '" . $cookie_name . "' is not
set!";
} else {
echo "Cookie '" . $cookie_name . "' is
set!<br>";
echo "Value is: " . $_COOKIE[$cookie_name];
}
?>
</body>
</html>
Funcția setcookie() trebuie să apară înaintea tagului <html>.
Pentru a afla detalii legate de operații cu cookie accesați linkul
http://www.w3schools.com/php/php_cookies.asp
Sesiuni
Sesiunea reprezintă o metodă de stocare în variabile a informațiilor
astfel încât acestea să poată fi utilizate în mai multe pagini web. Spre
deosebire de un cookie, informațiile nu sunt stocate pe computerul
utilizatorului.
O sesiune durează atât timp cât utilizatorul accesează un site și se
încheie o dată cu închiderea browserului. Accesarea unei pagini web
este o operație de sine stătătoare, orice accesare ulterioară a aceleiași
pagini (spre exemplu un refresh) se va face fără ca serverul "să știe" de
accesările anterioare. La fel se întâmplă atunci când sunt accesate mai
multe pagini diferite una după alta.
Variabilele sesiune rezolvă această problemă prin stocarea
informațiilor legate de utilizator și utilizarea lor în cadrul mai multor
pagini vizitate de acesta. (de exemplu: username, favorite color, etc).
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
36
Implicit, variabilele sesiune sunt stocate pe server până la închiderea
browserului.
Notă: Pentru memorarea permanentă a datelor unui utilizator există
opțiunea memorării acestora într-o bază de date.
Deschiderea unei sesiuni PHP
O sesiune începe la apelul funcției session_start().
Variabilele sesiune sunt setate cu variabila globală $_SESSION.
Vom crea o pagină numită "demo_session1.php", în care vom
deschide o nouă sesiune și vom seta câteva variabile de tip ses iune.
Notă: Funcția session_start() trebuie apelată la începutul paginii,
înaintea oricăror taguri HTML.
<?php
// deschide sesiunea
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// Atribuirea de valori variabilelor de tip sesiune
$_SESSION["favcolor"] = "green";
$_SESSION["favanimal"] = "cat";
echo "Session variables are set.";
?>
</body>
</html>
Obținerea valorilor variabilelor sesiune
Vom crea o altă pagină numită "demo_session2.php". Din această
pagină vom accesa informațiile variabilelor ses iune din pagina creată
anterior ("demo_session1.php").
Observați că variabilele sesiune nu sunt transmise în mod individual
pentru fiecare pagină nouă, în schimb, acestea sunt preluate din
sesiunea deschisă la începutul fiecărei pagini (session_start ()).
De asemenea, observați că toate valorile variabilelor sesiune sunt
stocate în variabila globală $_SESSION:
<?php
session_start();
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
37
?>
<!DOCTYPE html>
<html>
<body>
<?php
// Se afișează valorile variabilelor sesiune setate
în pagina anterioară
echo "Favorite color is " . $_SESSION["favcolor"] .
".<br>";
echo "Favorite animal is " . $_SESSION["favanimal"]
. ".";
?>
</body>
</html>
Figura de mai jos ilustrează fluxul de date în sesiunile existente în
paginile web:
Cele patru fișiere .php sunt prezentate în paginile următoare.
Pagina session_login.php conține următorul cod:
<?php
/*before destroying the Session –
you have to receive the session */
session_start();
// destroy the session
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
38
session_destroy();
$_SESSION = array();
?>
<html>
<body>
<h3>Login-Pages</h3>
<form action="intro.php" method="post">
<p><input name="name" /> Name</p>
<p><input type="password" name="password" />
Password</p>
<p><input type ="submit" value="login" /></p>
</form>
</body>
</html>
Pagina intro.php conține următorul cod:
<?php
// deschiderea sesiunii
session_start();
// verifică dacă există apel din pagina
session_login.php
if(isset($_POST["name"])) {
// verifică dacă numele și parola sunt corecte
if ($_POST["name"] == "Marina" && $_POST["password"]
== "elefant"
|| $_POST["name"] == "Andra" && $_POST["password"]
== "castle")
{
// numele și parola sunt corecte
$_SESSION['name'] = $_POST["name"];
}
}
// check if inside the session
include "control.inc.php";
?>
<html><body>
<h3>Intro Page</h3>
<?php
echo "<p>Hello " . $_SESSION['name'] . "</p>";
?>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
39
<p><a href="other.php">Go to another Page </a></p>
<p><a href="session_login.php">Log off </a></p>
</body></html>
Pagina other.php conține următorul cod:
<?php
// deschiderea sesiunii
session_start();
// check if you are inside the session
include "control.inc.php";
?>
<html>
<body>
<h3>This is the other page</h3>
<?php
echo "<p>Hello " . $_SESSION['name'] . "</P>";
?>
<p> <a href ="intro.php"> Go to Intro-Page</a></p>
<p> <a href ="session_login.php"> Log off</a></p>
</body>
</html>
Pagina control.inc.php conține următorul cod:
<?php
// control if inside the session
if (!isset($_SESSION["name"]))
{
echo "<p>no entry</p>";
echo "<p><a href ='session_login.php'>Go to Login
</a></p>";
echo "</body></html>";
exit;
}?>
Baze de date
O bază de date reprezintă o colecție de date organizată astfel încât un
program să poată selecta rapid datele necesare la un moment dat.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
40
Putem asocia conceptul de bază de date celui de sistem de arhivare
electronică a datelor.
Bazele de date tradiționale sunt organizate în câmpuri și înregistrări
memorate în tabele(fișiere). Câmpul reprezintă un atribut al
informației, înregistrarea este alcătuită dintr-o mulțime de câmpuri , iar
tabela reprezintă o colecție de înregistrări..
Pentru a accesa date stocate într-o bază de date este necesar un sistem
de gestiune a bazelor de date (DBMS). Acesta reprezintă o colecție de
programe care permit memorarea, organizarea și regăsirea datelor din
baza de date.
PHP permite conexiunea la o bază de date. MySQL este cel mai
popular sistem de gestiune a bazelor de date cu ajutorul limbajului
PHP.
Ce reprezintă MySQL?
• MySQL este un sistem de baze de date utilizat pe web
• MySQL este un sistem de baze de date care rulează pe un
server
• MySQL este ideal pentru aplicații mici și mari
• MySQL este foarte rapid, fiabil și ușor de utilizat
• MySQL utilizează standardul SQL
• MySQL compilează pe o varietate de platforme
• MySQL este open source, poate fi descărcat și folosit
• MySQL este dezvoltat, distribuit și susținut de Oracle
Corporation
• MySQL este numit My, după fiica co-fondatorului său Monty
Widenius
Datele dintr-o bază de date MySQL sunt organizate în tabele. Tabelele
reprezintă o colecții de date relaționate, organizate pe linii și coloane.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
41
Pentru mai multe informații accesați link-ul:
http://www.w3schools.com/php/php_mysql_intro.asp
MySQL este sistemul de baze de date standard pentru website-uri cu
volume mari atât de date, cât și de utilizatori finali (cum ar fi
Facebook, Twitter și Wikipedia).
PHP 5 poate lucra cu o bază de date MySQL utilizând:
• extensia MySQLi ("i" provine de la ”improved”)
• PDO (PHP Data Objects)
Atât MySQLi, cât și PDO au propriile avantaje:
• PDO lucrează cu 12 sisteme diferite de baze de date, pe când
MySQLi lucrează doar cu baze de date MySQL.
• Așa încât, dacă vrei ca proiectul tău să utilizeze altă bază de
date, PDO face ca acest proces să fie simplu. Trebuie
modificat doar stringul de conectare și câteva interogări. Cu
MySQLi va trebui să rescrii întregul cod sau interogările
incluse.
• Ambele extensii sunt orientate pe obiect, dar MySQLi oferă
în plus o interfață procedurală API.
• Ambele suportă conceptul de Prepared Statements (șabloane
compilate pentru SQL care pot fi rulate şi care pot fi
particularizate folosind ca parametri diverse variabile). Aceste
șabloane sunt foarte importante pentru securitatea aplicației
web.
Exemple de scripturi care utilizează MySQLi
1. Deschiderea unei conexiuni la MySQL
<?php
$servername = “localhost“;
$username = “root“;
$password = ““;
// Crearea conexiunii
$conn = mysqli_connect($servername, $username,
$password);
// verificarea conexiunii
If (!$conn) {
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
42
die (“Connection failed: “ .
Mysqli_connect_error());
}
echo “Connected successfully“;
?>
2. Închiderea unei conexiuni
mysqli_close($conn);
Pentru crearea sau ștergerea unei baze de date sunt necesare privilegii
de tip CREATE.
3. Crearea unei baze de date MySQL utilizând MySQLi
Comanda CREATE DATABASE este utilizată pentru crearea unei
baze de date în MySQL. În exemplul următor se creează o bază de date
cu numele “myDB“:
<?php
$servername = “localhost“;
$username = “root“;
$password = ““;
// Crearea conexiunii
$conn = mysqli_connect($servername, $username,
$password);
// verificarea conexiunii
If (!$conn) {
die (“Connection failed: “ .
mysqli_connect_error());
}
// Crearea bazei de date
$sql = “CREATE DATABASE myDB“;
if (mysqli_query($conn, $sql)) {
echo “Database created successfully“;
} else {
echo “Error creating database: “ .
mysqli_error($conn);
}
mysqli_close($conn);
?>
Comanda CREATE TABLE este utilizată în MySQL pentru crearea
unei tabele.
4. Crearea tabelei MyGuests
Tabela va conține 5 coloane "id", "firstname", "lastname", "email" și
"reg_date":
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
43
CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)
Tipul de date specifică ce tip de date va stoca un câmp al tabelei.
Există câteva atribute opționale care pot fi specificate pentru fiecare
câmp al tabelei:
• NOT NULL – Fiecare înregistrare trebuie să conțină o
valoare pentru acel câmp, valorile nule nu sunt permise
• DEFAULT valoare – setează o valoare predefinită care va fi
memorată automat în tabelă, de fiecare dată când câmpul
respectiv nu este completat
• UNSIGNED – utilizat pentru tipuri numerice, permite
stocarea doar de valori pozitive, inclusiv zero
• AUTO INCREMENT - MySQL incrementează automat cu 1
valoarea câmpului de fiecare dată când este adăugată o nouă
înregistrare
• PRIMARY KEY – utilizat pentru identificarea unică a
înregistrărilor din tabelă. Coloana PRIMARY KEY este,
deseori, un câmp numeric ID setat cu atributul
AUTO_INCREMENT
Notă: Fiecare tabelă trebuie să conțină o coloană de tip cheie primară,
cu valori unice pentru fiecare înregistrare.
5. Crearea unei baze de date numite myDB și a tabelei MyGuests.
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";
// crearea conexiunii
$conn = mysqli_connect($servername, $username,
$password, $dbname);
// verificarea conexiunii
if (!$conn) {
die("Connection failed: " .
mysqli_connect_error());
}
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
44
// sql to create table
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";
if (mysqli_query($conn, $sql)) {
echo "Table MyGuests created successfully";
} else {
echo "Error creating table: " .
mysqli_error($conn);
}
mysqli_close($conn);
?>
După crearea bazei de date și a tabelei, putem adăuga date.
6. Inserarea datelor în tabele MySQL
Reguli care trebuie respectate la inserarea datelor în tabele:
• Interogarea SQL trebuie să fie încadrată între ghilimele în
PHP
• Stringurile din interiorul unei interogări trebuie să fie
delimitate de ghilimele
• Valorile numerice nu se scriu între ghilimele
• Cuvântul NULL nu se scrie între ghilimele
Comanda INSERT INTO este utilizată pentru adăugarea de noi
înregistrări într-o tabelă MySQL:
Sintaxa: INSERT INTO table_name (column1, column2,
column3,...)
VALUES (value1, value2, value3,...)
Notă: Dacă o coloană are unul dintre atributele AUTO_INCREMENT
sau TIMESTAMP nu este necesar ca aceste coloane să apară în
interogare; MySQL va adăuga automat valori în aceste câmpuri.
În exemplul următor vom adăuga o nouă înregistrare în tabela
"MyGuests" creată în scriptul precedent.
<?php
$servername = "localhost";
$username = „root";
$password = "";
$dbname = "myDB";
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
45
// 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', '[email protected]')";
if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" .
mysqli_error($conn);
}
mysqli_close($conn);
?>
Dacă se execută o comandă INSERT sau UPDATE într-o tabelă cu un
câmp ID cu atributul AUTO_INCREMENT, putem obține valoarea
din câmpul ID al ultimei înregistrări inserate/actualizate.
7. Obținerea ID-ului ultimei înregistrări inserate în tabelă
<?php
$servername = "localhost";
$username = „root";
$password = "";
$dbname = "myDB";
// Crearea conexiunii
$conn = mysqli_connect($servername, $username,
$password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " .
mysqli_connect_error());
}
$sql = "INSERT INTO MyGuests (firstname, lastname,
email)
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
46
VALUES ('John', 'Doe', '[email protected]')";
if (mysqli_query($conn, $sql)) {
$last_id = mysqli_insert_id($conn);
echo "New record created successfully. Last
inserted ID is: " . $last_id;
} else {
echo "Error: " . $sql . "<br>" .
mysqli_error($conn);
}
mysqli_close($conn);
?>
8. Inserarea unui grup de înregistrări în MySQL
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Crearea conexiunii
$conn = mysqli_connect($servername, $username,
$password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " .
mysqli_connect_error());
}
$sql = "INSERT INTO MyGuests (firstname, lastname,
email)
VALUES ('John', 'Doe', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname,
email)
VALUES ('Mary', 'Moe', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname, lastname,
email)
VALUES ('Julie', 'Dooley', '[email protected]')";
if (mysqli_multi_query($conn, $sql)) {
echo "New records created successfully";
} else {
echo "Error: " . $sql . "<br>" .
mysqli_error($conn);
}
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
47
mysqli_close($conn);
?>
9. Interogarea datelor dintr-o bază de date MySQL
Comanda SELECT este utilizată pentru interogarea uneia sau mai
multor tabele :
Sintaxa: SELECT column_name(s) FROM table_name
Putem utiliza caracterul ’ * ’ pentru a selecta toate coloanele unei
tabele:
Sintaxa: SELECT * FROM table_name
<?php
$servername = "localhost";
$username = „root";
$password = "";
$dbname = "myDB";
// Crearea conexiunii
$conn = mysqli_connect($servername, $username,
$password, $dbname);
// Verificarea conexiunii
if (!$conn) {
die("Connection failed: " .
mysqli_connect_error());
}
$sql = "SELECT id, firstname, lastname FROM
MyGuests";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
// afișează datele fiecărei înregistrări
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Name: " .
$row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
mysqli_close($conn);
?>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
48
10. Ștergerea datelor în MySQL
Comanda DELETE este utilizată pentru ștergerea datelor dintr-o
tabelă:
Sintaxa: DELETE FROM table_name
WHERE some_column = some_value
Notă: Clauza WHERE specifică care înregistrare va fi ștearsă. Dacă
această clauză nu apare, vor fi șterse toate înregistrările.
<?php
$servername = "localhost";
$username = „root";
$password = "";
$dbname = "myDB";
// Crearea conexiunii
$conn = mysqli_connect($servername, $username,
$password, $dbname);
// Verificarea conexiunii
if (!$conn) {
die("Connection failed: " .
mysqli_connect_error());
}
// sql va șterge înregistrarea cu ID-ul 3
$sql = "DELETE FROM MyGuests WHERE id=3";
if (mysqli_query($conn, $sql)) {
echo "Record deleted successfully";
} else {
echo "Error deleting record: " .
mysqli_error($conn);
}
mysqli_close($conn);
?>
11. Actualizarea datelor în tabele MySQL
Comanda UPDATE este utilizată pentru actualizarea datelor dintr-o
tabelă:
Sintaxa: UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
49
Notă: Clauza WHERE specifică care înregistrare/înregistrări va/vor fi
actualizată/actualizate. Dacă se omite această clauză, toate
înregistrările vor fi actualizate.
<?php
$servername = "localhost";
$username = “root";
$password = "";
$dbname = "myDB";
// Crearea conexiunii
$conn = mysqli_connect($servername, $username,
$password, $dbname);
// verificarea conexiunii
if (!$conn) {
die("Connection failed: " .
mysqli_connect_error());
}
$sql = "UPDATE MyGuests SET lastname=„Travolta'
WHERE id=2";
if (mysqli_query($conn, $sql)) {
echo "Record updated successfully";
} else {
echo "Error updating record: " .
mysqli_error($conn);
}
mysqli_close($conn);
?>
12. Limitarea selecției datelor în MySQL
Clauza LIMIT este folosită în comanda MySQL SELECT pentru a
limita numărul de înregistrări returnate în urma interogării care
urmează să fie afișate. Poate avea unul sau două argumente , acestea
fiind numere întregi pozitive sau zero.
Clauza LIMIT este utilă în obținerea rezultatelor din tabele foarte mari
ca volum, selectarea unui număr foarte mare de înregistrări afectând
performanța.
Dacă trebuie să interogăm date din tabela "Orders" din primele 30 de
înregistrări, interogarea SQL arată ca în exemplul de mai jos: $sql = "SELECT * FROM Orders LIMIT 30";
Dar dacă ar trebui interogate înregistrările cu ID-ul cuprins între 16 și
25 ?
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
50
MySQL oferă o soluție în acest caz: utilizarea clauzei OFFSET.
Interogarea SQL de mai jos se poate traduce astfel "returnează numai
10 înregistrări, începând cu înregistrarea 16 (OFFSET 15)": $sql = "SELECT * FROM Orders LIMIT 10 OFFSET
15";
Pentru același rezultat se poate utiliza și comanda de mai jos: $sql = "SELECT * FROM Orders LIMIT 15, 10";
Observați că numerele trebuie inversate când sunt separate cu virgula.
PhpMyAdmin
PhpMyAdmin este un sistem de gestiune a bazelor de date MySQL
free, open source, scris în PHP și destinat administrării bazelor de date
prin intermediul unui browser web. Prin phpMyAdmin se pot
întreprinde diverse operații cum ar fi crearea, modificarea sau
ștergerea bazelor de date, tabelelor, câmpurilor sau rândurilor;
executarea de comenzi (interogări) SQL și administrarea utilizatorilor
și privilegiilor.
În PhpMyAdmin sunt posibile următoarele operații:
• Crearea și ștergerea unei baze de date
• Crearea / ștergerea/ modificarea tabelelor și a tabelelor
virtuale (views)
• Ștergerea / editarea / adăugarea câmpurilor în tabele
• Execuția oricărei instrucțiune SQL
• Gestionarea cheilor asociate câmpurilor
• Gestionarea privilegiilor
• Gestionarea declanșatoarelor și a procedurilor stocate
• exportul datelor în diferite formate (CSV, SQL, XML, PDF
… )
PhpMyAdmin este disponibil în 62 de limbi.
Pentru documentație detaliată accesați link-ul:
https://www.phpmyadmin.net/docs/
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
51
Etapele creării unei baze de date MySQL
Gestionarea fișierelor pe server
În acest capitol veți învăța să deschideți, să accesați pentru citire și să
închideți fișiere stocate pe server.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
52
Deschiderea unui fișier în PHP utilizând funcția fopen()
Funcția fopen() permite deschiderea unui fișier de pe server și oferă
mai multe opțiuni față de funcția readfile().
Vom utiliza fișierul "webdictionary.txt", fișier care are conținutul de
mai jos:
AJAX = Asynchronous JavaScript and XML
CSS = Cascading Style Sheets
HTML = Hyper Text Markup Language
PHP = PHP Hypertext Preprocessor
SQL = Structured Query Language
SVG = Scalable Vector Graphics
XML = EXtensible Markup Language
Primul parametru al funcției fopen() specifică numele fișierului, iar al
doilea parametru reprezintă modul de deschidere a fișierului.
<?php
$myfile = fopen("webdictionary.txt", "r") or
die("Unable to open file!");
echo fread($myfile,filesize("webdictionary.txt"));
fclose($myfile);
?>
Moduri de deschidere a unui fișier
Mod Descriere
r Deschidere doar pentru citire. Pointerul la inceputul fișierului.
Modul se mai numește și mod citire
r+ Deschidere atât pentru citire, cât și pentru scriere. Pointer la
începutul fișierului.
w Deschidere doar pentru scriere. Pointerul este la începutul
fișierului, iar tot conținutul fișierului este șters în momentul
deschiderii. În caz că fișierul nu există, acesta va fi creat.
Modul se mai numește și mod scriere.
w+ Deschidere atât pentru scriere, cât și pentru citire. Pointerul
este la începutul fișierului, iar tot conținutul fișierului este
șters în momentul deschiderii. În caz că fișierul nu există,
acesta va fi creat.
a Deschidere doar pentru scriere. Pointerul este la sfârșitul
fișierului. Dacă fișierul nu există, acesta va fi creat. Modul se
mai numește și mod adăugare.
a+ Deschidere atât pentru scriere, cât și pentru citire. Pointerul
este la sfârșitul fișierului. Dacă fiș ierul nu există, acesta va fi
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
53
creat.
x Fișierul este creat și deschis pentru scriere. Pointerul la
începutul fișierului. În caz că fișierul există se generează o
eroare de tip E_WARNING, iar funcția fopen() returnează
false.
x+ Fișierul este creat și deschis pentru scriere și citire. Pointerul
la începutul fișierului. În caz că fișierul există se generează o
eroare de tip E_WARNING, iar funcția fopen() returnează
false.
Citirea dintr-un fișier
Funcția fread() citește date dintr-un fișier.
Primul parametru al funcției fread() conține numele fișierului, iar cel
de-al doilea parametru specifică numărul maxim de octeți care va fi
citit.
În următorul exemplu se citește întreg conținutul fișierului
"webdictionary.txt" : fread($myfile,filesize("webdictionary.txt"));
Închiderea unui fișier
Funcția fclose() este utilizată pentru închiderea unui fișier.
Notă: O practică corectă este cea de a închide toate fișierele după
finalizarea operațiilor de prelucrare a datelor, pentru a nu fi distruse
accidental.
Funcția fclose() necesită ca parametru numele fișierului care va fi
închis:
<?php
$myfile = fopen("webdictionary.txt", "r");
// cod ce va fi executat..
fclose($myfile);
?>
Citirea linie cu linie dintr-un fișier
Funcția fgets() este utilizată pentru citirea unei linii din fișier.
În exemplul de mai jos se afișează prima linie din fiș ierul
"webdictionary.txt":
<?php
$myfile = fopen("webdictionary.txt", "r") or
die("Unable to open file!");
echo fgets($myfile);
fclose($myfile); ?>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
54
Notă: După apelul funcției fgets() , pointerul de fișier se mută la
începutul celei de-a doua linii din fișier.
Verificarea sfârșitului de fișier
Funcția feof() function verifică dacă pointerul a ajuns la sfârșitul
fișierului.
Funcția feof() este utilă în parcurgerea fișierelor a căror dimensiune nu
se cunoaște.
În exemplul de mai jos, fiecare linie din fișierul "webdictionary.txt"
este citită și afișată pe ecran, până când se întâlnește marcajul de
sfârșit de fișier:
<?php
$myfile = fopen("webdictionary.txt", "r") or
die("Unable to open file!");
// se afișează linie cu linie
while(!feof($myfile)) {
echo fgets($myfile) . "<br>";
}
fclose($myfile);
?>
Citirea unui caracter din fișier
Funcția fgetc() citește un singur caracter din fișierul dat ca parametru.
În exemplul de mai jos, se afișează pe ecran caracter cu caracter
conținutul fișierului "webdictionary.txt":
<?php
$myfile = fopen("webdictionary.txt", "r") or
die("Unable to open file!");
// afișează fiecare caracter din fișier
while(!feof($myfile)) {
echo fgetc($myfile);
}
fclose($myfile);
?>
Notă: După apelul funcției fgetc() , pointerul de fișier se mută pe
următorul caracter.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
55
Crearea și scrierea în fișiere stocate pe server
Funcția fopen() este utilizată în PHP fie pentru deschiderea unui fișier,
fie pentru crearea lui.
Pentru crearea unui fișier, modul de deschidere al acestuia va fi pentru
scriere(w) sau pentru adăugare(a).
În exemplul următor se va crea fișierul "testfile.txt", în același director
în care este salvat fișierul .php care conține codul pentru crearea
fișierului: $myfile = fopen("testfile.txt", "w");
Notă: Dacă aveți erori atunci când încercați codul de mai sus,
verificați mai întâi dacă aveți drepturi de scriere pe hard disk.
Scrierea într-un fișier
Funcția fwrite() scrie date în fișierul specificat în primul parametru. Al
doilea parametru al funcției va conține șirul de caractere ce urmează a
fi scris în fișier.
În exemplul de mai jos, se vor scrie pe linii separate numele a două
persoane("John Doe" , "Jane Doe") în fișierul "newfile.txt":
<?php
$myfile = fopen("newfile.txt", "w") or die("Unable
to open file!");
$txt = "John Doe\n";
fwrite($myfile, $txt);
$txt = "Jane Doe\n";
fwrite($myfile, $txt);
fclose($myfile);
?>
Fișierul "newfile.txt" va avea următorul conținut, după execuția
scriptului:
John Doe
Jane Doe
Suprascrierea într-un fișier
În exemplul următor deschidem fișierul "newfile.txt" în modul de
deschidere pentru scriere (w) și scriem numele a două persoane pe
primele 2 linii de fișier:
<?php
$myfile = fopen("newfile.txt", "w") or die("Unable
to open file!");
$txt = "Mickey Mouse\n";
fwrite($myfile, $txt);
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
56
$txt = "Minnie Mouse\n";
fwrite($myfile, $txt);
fclose($myfile);
?>
Datele stocate în fișier înaintea execuției acestui script s -au pierdut și
fișierul are acum următorul conținut:
Mickey Mouse
Minnie Mouse
Upload-ul fișierelor pe server
În PHP operația de upload este facilă, cu toate acestea trebuie să fim
precauți în momentul în care executăm această operație.
Configurarea fișierului "php.ini"
Primul pas este cel în care PHP va fi configurat să permită operația de
upload.
În fișierul "php.ini" directiva file_uploads va fi setată pe On: file_uploads = On
Fișierul „php.ini“ este localizat în „c:/xampp/php/php.ini“.
În continuare, creăm un formular HTML care permite utilizatorilor să
aleagă imaginea care doresc să o încarce pe server:
<html>
<body>
<form action="upload.php" method="post"
enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload"
id="fileToUpload">
<input type="submit" value="Upload Image"
name="submit">
</form>
</body>
</html>
Reguli care trebuie respectate la crearea formularului HTML de mai
sus:
• Metoda utilizată în formular trebuie să fie "post"
• Un atribut obligatoriu este enctype="multipart/form-data". Acesta
specifică tipul conținutului utilizat la trimiterea formularului.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
57
Notă:
• Atributul type="file" al tagului <input> setează câmpul din
formular ca fiind un control de tip file-select, care va afișa în
formular un buton "Browse"
În continuare, creăm un fișier "upload.php".
<?php
$target_dir = "uploads/";
$target_file = $target_dir .
basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType =
pathinfo($target_file,PATHINFO_EXTENSION);
// Verifica daca fisierul este intr-adevar o imagine
if(isset($_POST["submit"])) {
$check =
getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - ". $check["mime"]. ".";
$uploadOk = 1;
}
else {
echo "File is not an image.";
$uploadOk = 0;
}
}
?>
Notă: Fișierul "upload.php" va fi salvat în directorul uploads creat
anterior.
În continuare, adăugăm câteva restricții.
Verificarea existenței unui fișier
Mai întâi verificăm dacă fișierul upload.php există în directorul
uploads. În caz contrar, va fi afișat un mesaj de eroare și variabila
$uploadOk va fi setată pe 0:
// Verificăm dacă există fișierul
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
58
Restricționarea dimensiunii unui fișier pentru upload
În exemplul de mai jos câmpul din formular se numește
"fileToUpload".
Dacă dimensiunea fișierului este mai mare de 500KB, va fi afișat un
mesaj de eroare și variabila $uploadOk va fi setată pe 0:
// verificăm dimensiunea fișierului
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
Restricționarea formatului unui fișier pentru upload
În exemplul de mai jos este permis upload-ul doar pentru fișiere de tip
JPG, JPEG, PNG, și GIF. Pentru toate celelalte formate de fișier va fi
afișat un mesaj de eroare și variabila $uploadOk va fi setată pe 0:
// permite anumite formate pentru fișierul de upload
if($imageFileType != "jpg" && $imageFileType !=
"png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files
are allowed.";
$uploadOk = 0;
}
Forma finală a scriptului PHP pentru upload-ul unui fișier
<?php
$target_dir = "uploads/";
$target_file = $target_dir .
basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType =
pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake
image
if(isset($_POST["submit"])) {
$check =
getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"]
. ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
59
}
}
// verificăm dacă fișierul există în directorul
uploads
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// verificăm dimensiunea fișierului
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Verificăm formatele de fișier
if($imageFileType != "jpg" && $imageFileType !=
"png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are
allowed.";
$uploadOk = 0;
}
// Verificăm starea variabilei $uploadOk
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// dacă totul este OK atunci încercăm upload-ul pe
server
} else {
if
(move_uploaded_file($_FILES["fileToUpload"]["tmp_nam
e"], $target_file)) {
echo "The file ". basename(
$_FILES["fileToUpload"]["name"]). " has been
uploaded.";
} else {
echo "Sorry, there was an error uploading
your file.";
}
}
?>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
60
3. Fișe de lucru
FIȘA DE LUCRU NR.1- instalarea produselor software
1. Download-ați pachetul web XAMPP compatibil cu sistemul de
operare instalat pe computerul vostru de la adresa
https://www.apachefriends.org/ro/download.html și acceptați
setările implicite pentru instalare.
2. Navigați în Windows și localizați directorul C:/XAMPP cu
subdirectorul htdocs.
3. Porniți aplicația XAMPP - Control Panel lansând în execuție
fișierul xampp-control.exe.
FIȘA DE LUCRU NR.2- crearea fișierelor html, css și php
1. Creați un nou director numit „day_1“ în directorul „C:/xampp/“.
2. Copiați fișierul “basis.html “ în directorul „C:/xampp
/htdocs/day_1“și redenumiți-l „basis.php“;
3. Creați directorul „css“ în „C:/xampp/htdocs/day_1“ și copiați
„basis.css“ în „C:/xampp/htdocs/day_1/css“;
4. Modificați fișierul .css, prin aplicarea de noi stiluri pentru font și
background;
5. Creați o listă ne-ordonată pentru a o utiliza în secțiunea de meniu;
6. Creați un fișier “menu.php” care va conține tagurile pentru crearea
listei ne-ordonate
<?php
echo '<ul>
<li><a href="">Home</a></li>
<li><a href="http://www.w3schools.com /php/
default.asp"> PHP-Tutorial</a></li>
<li><a href="http:// www.w3schools.com/html/
default.asp">HTML-Tutorial</a></li>
<li><a href="http:// www.w3schools.com/ css/
default.asp"> CSS-Tutorial</a></li>
<li><a href="http:// www.w3schools.com /js/
default.asp" >JavaScript-Tutorial</a></li>
</ul>';
?>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
61
FIȘA DE LUCRU NR.3- transformarea paginilor statice în pagini
dinamice
În directorul Day_1 există fișierele basis.html și basis.css
1. Scrieți în basis.html codul PHP pentru includerea codului PHP în
pagina html
2. Creați fișierele pentru secțiunile paginii web, de tip include-files
(Footer, Content, Navigation)
3. Pentru includerea fișierelor create mai sus în “basis.php“ utilizaț i
instrucțiunea include
<html>
<head>
<link rel="stylesheet" type="text/css"
href="css /basis.css">
</head>
<body>
<div id="container">
<div id="header">
<div id="logo">###LOGO###</div>
<div id="slogan">###SLOGAN###</div>
<div id="search">###SEARCH###</div>
</div>
<div id="rootline">###ROOTLINE###</div>
<div id="left">
<div id="languages">###LANGUAGES###</div>
<div id="left-menu">###LEFT-MENU###</div> <div id="motto">###MOTTO###</div>
<div id="left-menu">
<?PHP
include 'menu.php';
?>
</div>
</div>
<div id="middle">
<h1>Welcome to my webpage</h1>
<?php
include 'vars.php';
echo "I have $number $color $car. ";
?>
</div>
<div id="right"> ###RIGHT###
<div id="topnews">###TOPNEWS###</div>
</div>
<div id="footer">
<?PHP
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
62
include 'footer.php';
?>
</div>
</div>
</body>
</html>
FIȘA DE LUCRU NR.4- utilizarea instrucțiunii de afișare în PHP
1. Creați în directorul “day_1” scripturi php pentru obținerea
următoarelor rezultate:
Afișarea în browser a mesajului “Welcome to Alfatraining” <html>
<body>
<?php
echo " Welcome to Alfatraining!";
?>
</body>
</html>
2. Adăugați comentarii liniilor de cod PHP
3. Studiați proprietatea non case-sensitivity a instrucțiunilor PHP
FIȘA DE LUCRU NR.5- utilizarea variabilelor
Creați în directorul “day_1” scripturi php pentru obținerea
următoarelor rezultate:
1. Declararea variabilelor color, car, house și atribuirea de valori <?php
$number = 100;
$color = 'silver';
$car = 'Peugeot 206';
?>
2. Afișarea valorilor memorate în variabile și a tipurilor de date ale
acestora utilizând funcția var_dump(). <?php
$x = 4569;
var_dump($x);
?>
3. Modificați numele variabilelor în instrucțiunea de afișare pentru a
observa proprietatea case-sensitivity a variabilelor. <html>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
63
<body>
<?php
$color = "red";
echo " My car is " . " . $color . ";
echo " My house is" . " . $COLOR. ";
echo " My boat is" . " . $CoLoR.";
?>
</body>
</html>
FIȘA DE LUCRU NR.6- utilizarea structurilor de control
Creați în directorul “day_1” scripturi php pentru a testa rezultatele
structurilor de control în PHP.
1. Structurile de decizie if, if else și if elseif <?php
$t = date("H");
if ($t < "10") {
echo "Have a good morning!";
}
else {
if ($t < 20) {
echo "Have a good day!";
}
else {
echo "Have a good night!";
}
}
?>
2. Structurile repetitive for, while, do while, foreach <?php
$colors=array("red","green","blue","yellow");
foreach($colors as $value){
echo "$value <br>";
}
?>
FIȘA DE LUCRU NR.7- crearea și utilizarea tablourilor
1. Declarați și inițializați un tablou numit cars care să memoreze
mărcile a trei mașini. Afișați datele memorate în tablou utilizând
instrucțiunea foreach. <?php
$cars = array("Volvo", "BMW", "Toyota");
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
64
foreach($cars as $car)
echo "I like " . $car. "<br>";
?> 2. Declarați și inițializați un tablou numit cars în care memorați
mărcile a 3 mașini. Sortați crescător tabloul și afișați datele. <?php
$cars = array("Volvo", "BMW", "Toyota");
sort($cars);
foreach($cars as $car)
{
echo $car;
echo "<br>";
}
?>
FIȘA DE LUCRU NR.8- transformarea paginilor statice în pagini
dinamice
1. În directorul “Day 2/static_HTML” identificați fișierele resurse ale
unui website (fișiere .html, imagine, .css, etc).
2. Creați fișierele .php necesare pentru toate secțiunile unei pagini
web (header, menu, footer).
Menu.php <?php
echo "<ul id='main_menu'>";
echo"<li";
if(basename($_SERVER['PHP_SELF'])=="aktuell.ph
p")
echo " class='selected'";
echo "><a
href='aktuell.php'>Aktuelles</a></li>";
echo "<li";
if(basename($_SERVER['PHP_SELF'])=="ueber_uns.
php")
echo " class='selected'";
echo "><a href='ueber_uns.php'>Über
uns</a></li>";
echo "<li";
if(basename($_SERVER['PHP_SELF'])=="leistungen
.php")
echo " class='selected'";
echo "><a
href='leistungen.php'>Leistungen</a></li>";
echo "<li";
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
65
if(basename($_SERVER['PHP_SELF'])=="team.php")
echo " class='selected'";
echo "><a href='team.php'>Team und
Kontakt</a></li>";
echo "<li";
if(basename($_SERVER['PHP_SELF'])=="impressum.
php")
echo " class='selected'";
echo "><a
href='impressum.php'>Impressum</a></li>";
echo "</ul>";
?>
3. Ștergeți fișierele html.
FIȘA DE LUCRU NR.9- Crearea funcțiilor și studiul
comportamentului variabilelor în diferite domenii de vizib ilitate
1. Creați o funcție myTest care conține variabila locală x <?php
function myTest() {
$x = 5; //variabilă locală
echo "<p> Variable x inside function is
$x </p>";
}
myTest();
//utilizarea variabilei x în exteriorul
funcției
//va genera eroare
echo "<p> Variable x outside function is $x
</p>";
?>
2. Creați o funcție myTest2 care conține variabila locală statică x. <?php
function Mytest2 () {
static $x =0;
echo $x ." <br>";
$x++;
}
Mytest2 ();
Mytest2 ();
Mytest2 ();
?>
3. Creați o funcție myTest3 și o variabilă globală x.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
66
<?php
$x = 5; //variabila globală
function Mytest3() {
//utilizarea variabilei x în interiorul
funcției
//va genera o eroare
echo "<p>Variable x inside function is : $x
</p>";
}
Mytest3();
echo "<p>Variable x outside function is:
$x</p>";
?>
4. Creați o funcție myTest4 și variabilele globale x și y. <?php
$x = 5;
$y = 10;
function Mytest4(){
$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
}
Mytest4();
echo $y;//se afișează valoarea 15
?>
FIȘA DE LUCRU NR. 10- Crearea unui formular utilizând metodele
GET și POST
1. Creați un fișier HTML care afișează un formular cu două câmpuri
și un buton submit, utilizând metoda POST.
Exemplul nr.1 <html>
<body>
Welcome <b><?php echo $_POST["name"];?></b>
<br>
Your e-mail adress is: <b><?php echo
$_POST["e-mail"]; ?></b><br>
Your website is: <b><?php echo
$_POST["website"]; ?><br></b>
You say: <b><?php echo $_POST["comment"];
?><br></b>
And you are a : <b><?php echo
$_POST["gender"]; ?></b>
</body>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
67
</html>
Exemplul nr. 2 <html>
<body>
<form action = "welcome.php" method="post">
Name: <input type="text" name="name" ><span
style="color:red">*</span><br>
E-mail: <input type="text" name="e-mail"><span
style="color:red">*</span><br>
WebSite: <input type="text"
name="website"><br>
Comment: <textarea name="comment" rows="5"
cols="40"></textarea><br>
<input type="radio" name="gender"
value="female">Female
<input type="radio" name="gender"
value="male">Male<br>
<input type="submit">
</form>
<p style="color:red">* required field</p>
</body>
</html>
2. Creați un fișier HTML care afișează un formular cu două câmpuri
și un buton submit, utilizând metoda GET pentru transmiterea
datelor.
Exemplul nr.1 <html>
<body>
Welcome <?php echo $_GET["name"];?> <br>
Your e-mail address is: <?php echo $_GET["e-
mail"]; ?>
</body>
</html>
Exemplul nr.2
<html>
<body>
<form action = "welcome_get.php" method="get">
Name: <input type="text" name="name" ><br>
E-mail: <input type="text" name="e-mail"><br>
<input type="submit">
</form>
</body> </html>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
68
FIȘA DE LUCRU NR. 11- Crearea unui formular cu câmpuri
obligatorii și validarea datelor din câmpuri
1. În fișierul “form_handling.php” există un script care generează un
formular. Scrieți instrucțiunile necesare validării datelor din toate
câmpurile formularului.
2. Eliminați caracterele inutile (space, tab, newline) utilizând funcția
PHP trim().
3. Eliminați caracterele backslash (\)utilizând funcția PHP
stripslashes().
4. Creați o funcție test_input() care să realizeze toate verificările.
5. Adăugați variabilele $nameErr, $emailErr, $genderErr și
$websiteErr.
6. Adăugați o instrucțiune if pentru fiecare variabilă $_POST.
7. Verificați data introdusă în fiecare câmp din formular și afișați un
mesaj corespunzător de eroare în cazul în care într-un câmp nu s-au
introdus date.
8. Validați datele introduse, afișând mesaje ca "Does the Name field
contain only letters and whitespace?", "Does the E-mail field
contain a valid e-mail address syntax?", "Does the Website field
contain a valid URL?". <!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<?php
// declară și inițizează variabilele folosite
//pentru afișarea mesajelor de eroare
$name = $email = $gender = $comment = $website
= "";
$nameErr = $emailErr = $genderErr =
$websiteErr = $commentErr ="";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if(empty($_POST["name"]))
{
$nameErr="Name is required";
}
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
69
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;
}
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
70
?>
<h2>PHP Form Validation Example</h2>
<form method="post" action="<?php echo
htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input type="text" name="name">
<?php echo $nameErr; ?> <br><br>
E-mail: <input type="text" name="email">
<?php echo $emailErr;?> <br><br>
Website: <input type="text" name="website">
<?php echo $websiteErr;?> <br><br>
Comment: <textarea name="comment" rows="5"
cols="40"></textarea>
<?php echo $commentErr;?> <br><br>
Gender: <input type="radio" name="gender"
value="female">Female
<input type="radio" name="gender"
value="male">Male
<?php echo $genderErr;?> <br><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>
</body>
</html>
FIȘA DE LUCRU NR. 12- Crearea, modificarea și ștergerea unui
cookie
1. Creați un cookie numit "user" care să memoreze valoarea "John
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
71
Doe". Cookie-ul va expira după 30 de zile (86400 * 30). Simbolul
"/" semnifică faptul că cookie-ul va fi vizibil în întreg site-ul.
Determinarea valorii memorate de cookie se realizează cu ajutorul
variabilei globale. Utilizați funcția isset() pentru a verifica dacă au
fost făcute setările pentru cookie. <?php
$cookie_name="user";
$cookie_value="John Doe";
setcookie($cookie_name,$cookie_value, time()+
(86400*30) ,"/");
?>
<html>
<body>
<?php
if(!isset($_COOKIE[$cookie_name])){
echo "Cookie named '".$cookie_name."'is
not set!";
}
else{
echo "Cookie named '".$cookie_name."'
is set!<br>";
echo "Value is:
".$_COOKIE[$cookie_name];
}
?>
</body>
</html>
2. Ștergeți cookie-ul “user”, utilizând funcția setcookie() pentru
setarea orei de expirare cu o oră în urmă față de ora curentă. <?php
//setăm ora de expirare cu o oră în urmă
//față de ora curentă
setcookie("user","",time()-3600);
?>
<html>
<body>
<?php
echo "Cookie 'user' is deleted ";
?>
</body>
</html>
3. Verificați dacă un cookie este activ. Mai întâi, creați un cookie
utilizând funcția setcookie(), apoi verificați numărul de cookies
active folosind funcția count().
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
72
<?php
setcookie("test_cookie", "test", time() +
3600, '/');
?>
<html>
<body>
<?php
if(count($_COOKIE)>0) {
echo "Cookies are enabled.";
}
else {
echo "Cookies are disabled.";
}
?>
</body>
</html>
FIȘA DE LUCRU NR. 13 - Crearea, modificarea și ștergerea
sesiunilor
1. Creați o sesiune care să conțină variabilele favcolor și favanimal <?php
//începerea sesiunii
session_start();
?>
<html>
<body>
<?php
// Setarea datelor sesiunii
$_SESSION["favcolor"] = "none";
$_SESSION["favanimal"] = "dog (Golden
Retriever)";
echo "Session variables are set.";
?>
</body>
</html>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
73
2. Utilizați instrucțiunea print_r pentru a afișa valorile variabilelor
sesiunii curente. <?php
session_start()
?>
<html>
<body>
<?php
print_r($_SESSION);
?>
</body>
</html>
3. Scrieți un script PHP pentru a modifica valoarea variabilei favcolor
a sesiunii curente prin suprascriere <?php
session_start()
?>
<html>
<body>
<?php
//modificăm variabila sesiune prin
suprascriere
$_SESSION["favcolor"] = "fuchsia";
print_r($_SESSION);
?>
</body>
</html>
4. Scrieți un script PHP pentru eliminarea tuturor datelor unei sesiuni <?php
session_start()
?>
<html>
<body>
<php session_unset();
session_destroy(); ?></body>
</html>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
74
FIȘA DE LUCRU NR. 14- MySQL-Crearea conexiunii la baza de
date, crearea bazei de date și a tabelelor
1. Scrieți un script PHP pentru conexiunea la baza de date. <?php
$servername="localhost";
$username="root";
$password="";
$conn=mysqli_connect($servername,$username,$pa
ssword);
if(!$conn)
{
die("connection
failed".mysqli_connect_error());
}
else
echo "Connected succeded";
?>
2. Scrieți un script PHP pentru a crea baza de date myDB <?php
$servername="localhost";
$username="root";
$password="";
$conn=mysqli_connect($servername,$username,$pa
ssword);
if(!$conn)
{
die("connection
failed".mysqli_connect_error());
}
// echo "Connected succeded";
$sql = "CREATE DATABASE myDB";
if (mysqli_query($conn, $sql)) {
echo "Database created successfully";
} else {
echo "Error creating database: " .
mysqli_error($conn);
}
mysqli_close($conn); ?>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
75
3. Scrieți un script PHP care creează tabela Myguests în interiorul
bazei de date myDB. <?php
$servername="localhost";
$username="root";
$password="";
$dbname="myDB";
$conn=mysqli_connect($servername,$username,$pa
ssword,$dbname);
if(!$conn)
{
die("connection
failed".mysqli_connect_error());
}
// echo "Connected succeded";
$sql="CREATE TABLE Myguests(id INT(6) UNSIGNED
AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
) ";
if(mysqli_query($conn,$sql)){
echo "Table Myguests created with
success!";
}
else {
echo "Error creating
table!".mysqli_error($conn);
}
mysqli_close($conn);
?>
FIȘA DE LUCRU NR. 15 - MySQL - Utilizarea comenzilor INSERT
și UPDATE
1. Scrieți un script PHP care înserează în tabela Myguests o
înregistrare nouă cu numele John Doe și email-ul
[email protected]. <?php
$servername="localhost";
$username="root";
$password="";
$dbname="myDB";
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
76
$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', '[email protected]')";
if(mysqli_query($conn,$sql)){
echo "New recorded created with
success!";
}
else {
echo
"Error:".$sql."<br>".mysqli_error($conn);
}
mysqli_close($conn);
?>
2. Scrieți un script PHP care înserează în tabela Myguests trei
înregistrări. <?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
$conn = mysqli_connect($servername, $username,
$password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " .
mysqli_connect_error());
}
$sql = "INSERT INTO MyGuests (firstname,
lastname, email)
VALUES ('John', 'Doe', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname,
lastname, email)
VALUES ('Mary', 'Moe', '[email protected]');";
$sql .= "INSERT INTO MyGuests (firstname,
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
77
lastname, email)
VALUES ('Julie', 'Dooley',
'[email protected]')";
if (mysqli_multi_query($conn, $sql)) {
echo "New records created successfully";
} else {
echo "Error: " . $sql . "<br>" .
mysqli_error($conn);
}
mysqli_close($conn);
?>
FIȘA DE LUCRU NR. 16- MySQL- afișarea datelor unui utilizator
stocate în baza de date în cadrul unui script de login la site
1. Scrieți un script PHP care să permită conectarea unui utilizator la
baza de date cu ajutorul datelor introduse într-un formular. <?php
//start session or take session
session_start();
//Connection with database project
$servername="localhost";
$username="root";
$password="";
$dbname="project";
//create connection
$conn = mysqli_connect($servername, $username,
$password, $dbname);
if(!$conn)
die("Connection failed ".
mysqli_connect_error());
$sql="SELECT * FROM person Where
Lastname LIKE '" . $_POST["name"]. "' AND
Password LIKE '" .$_POST["password"]. "' ";
$result=mysqli_query($conn, $sql);
if(mysqli_num_rows ($result) > 0){
$row = mysqli_fetch_assoc($result);
$_SESSION["name"] = $_POST["name"];
$_SESSION["firstname"]=$row["firstname"
];
$_SESSION["role"]=$row["role"];
$_SESSION["gender"]=$row["gender"];
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
78
$_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>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
79
4. Crearea unui website dinamic utilizând PHP
Magazin online
Proiectul MAGAZIN ONLINE constă în realizarea unui webs ite de
comenzi virtuale pentru rechizite școlare folosind cunoştinţe de html,
css , php și mysql.
Pentru început se va crea un șablon pentru site.
Paginile html, vor avea secțiunile: antet, subsol, meniul principal si
porțiunea în care va fi afișat conținutul, secțiuni realizate folosind div-
uri.
Site-ul conține un meniu cu următoarele opțiuni:
• Home,
• Descriere
• Produse
• Contact
Pentru realizarea unui design cât mai atractiv au fost create mai multe
fișiere .css pentru formatarea paginilor site-ului.
Astfel:
• în login.css este inclus codul folosit la pagina de logare
• style-cos.css include codul folosit la coșul de cumpărături
• style-home.css include stilul pentru pagina de Start și pentru
pagina principală
• style-item.css creează un stil pentru obiectele, imaginile site-
ului
• style-contact.css asigură stilul paginii de contact
• style-descriere.css conferă paginii de descriere un aspect mai
complex
• în style-produse.css este creat stilul paginii produse.php
Conținutul fișierului home.php este următorul:
<html>
<head>
<title> magazinonline.ro </title>
<?php
// se specifica includerea fisierului php.
include 'include/include_start.php';
?>
<!-- se specifica includerea fisierului css -->
<link rel='stylesheet' href='css/style-
home.css'>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
80
</head>
<body style='background-image:
url("img/background.jpg");'>
<?php
include 'include/user-bar.php';
?>
<div class='container'>
<?php
include 'include/menu.php';
?>
<div class='content'><img src='img/main.jpg'></div>
</div>
<?php
include 'include/footer.php';
?>
</body>
</html>
Conținutul fișierului style-home.css:
body{
margin: 0px;
padding: 0px;
}
.container {
margin-bottom:100px;
overflow:hidden;
margin-top: 40px;
}
.content {
width: 900px;
height: 480px;
margin: auto;
margin-top: 10px;
}
.content img{
width:900px;
height: 480px;
}
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
81
Fișierul style-produse.css:
body{
margin: 0px;
padding: 0px;
}
.container {
margin-bottom:100px;
overflow:hidden;
margin-top: 40px;
}
.search {
width: 400px;
margin-top: 10px;
margin-left: 20px;
}
.search input{
width: 100%;
font-family:Verdana, Geneva, sans-serif;
padding: 5px;
}
.left-bar {
float: left;
width: 300px;
background-color: #E6E6E6;
margin-top: 50px;
margin-left: 50px;
display: inline-block;
}
.left-bar ul{
margin-left: 0px;
}
.left-bar ul li{
padding: 5px;
border-bottom: 1px solid white;
}
.left-bar ul li a{
text-decoration: none;
color: black;
}
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
82
.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;
}
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
83
Continutul fișierului login.css este:
html, body{
margin: 0;
padding: 0;
}
.container{
width: 720px;
margin: auto;
margin-top: 40px;
margin-bottom: 100px;
}
.login{
float: left;
background-color: #3AE8B7;
width: 300px;
height: 200px;
margin-top: 40px;
margin-bottom: 100px;
padding: 20px;
}
.sign-up{
float: right;
background-color: #3AE8B7;
width: 300px;
height: 350px;
margin-top: 40px;
margin-bottom: 100px;
padding: 20px;
}
h1 {
text-align: center;
color: black;
}
.form {
width: 250px;
margin: auto;
}
.error {
color: red;
text-align: center;
}
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
84
Fișierul style-item.css cu următorul conținut formatează imaginile
inserate în pagini:
html body{
margin: 0;
padding: 0;
}
.container{
background-color: #9BF2D8;
margin: auto;
width: 1000px;
margin-top: 100px;
height: 500px;
margin-bottom: 100px;
}
.image{
float: left;
width: 300px;
height: 300px;
margin: 20px;
}
.image img{
width: 100%;
height: 100%;
border: 1px solid black;
}
.content {
padding-top: 50px;
padding-left: 400px;
padding-bottom: 120px
}
Fișierul style-descriere.css:
html, body{
padding: 0px;
margin: 0px;
}
.content{
width: 800px;
background-color: #b3ffcc;
margin: auto;
height: 400px;
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
85
margin-top: 50px;
border: 5px dotted black;
}
.descriere{
padding: 30px;
}
.descriere h1{
color: #ff3300;
font-family:"Lucida Sans Unicode", "Lucida
Grande", sans-serif;
text-align: center;
}
descrie ul{
list-style-type: circle;
}
.descriere li{
color: #00cc44;
margin-top: 20px;
font-family:"Lucida Sans Unicode", "Lucida
Grande", sans-serif;
}
.descriere p{
font-family:"Lucida Sans Unicode", "Lucida
Grande", sans-serif;
float: right;
bottom: 0px;
font-size: 15px;
color: #ff3300;
}
Fișierul style-cos.css:
html, body{
margin: 0;
padding: 0;
}
.container{
margin-bottom: 100px;
}
.content{
width: 740px;
background-color: rgb(189,249,136);
margin: auto;
margin-bottom: 100px;
margin-top: 50px;
padding-bottom: 30px;
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
86
}
.obiect {
background-color: rgb(241,248,203);
margin-top: 10px;
height: 200px;
border: 1px solid rgb(159,159,159);
}
.imagine {
float: left;
height: 200px;
width: 200px;
}
.imagine img{
height: 100%;
width:100%;
}
.descriere {
float:right;
width: 480px;
height: 180px;
padding-top: 3px;
}
.total {
height: 100px;
background-color: #AFC3F0;
margin-top: 50px;
text-align: center;
padding-top: 2px;
margin-bottom: 0px;
border: 1px solid rgb(159,159,159);
}
Fișierul style-contact.css:
html, body{
padding: 0px;
margin: 0px;
}
.content{
width: 800px;
background-color: #b3ffcc;
margin: auto;
height: 400px;
margin-top: 50px;
border: 1px solid rgb(159,159,159);
}
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
87
.descriere{
float: right;
width: 340px;
height: 340px;
padding: 30px;
background-color: white;
border-left: 1px solid rgb(159,159,159);
}
.descriere h1{
color: #ff3300;
font-family:"Lucida Sans Unicode", "Lucida
Grande", sans-serif;
text-align: center;
}
.descriere p{
font-family:"Lucida Sans Unicode", "Lucida
Grande", sans-serif;
bottom: 0px;
font-size: 15px;
color: #ff3300;
}
.descriere img{
width: 40px;
haight: 40px;
}
.map{
width:399px;
height:400px;
float: left;
}
Pentru crearea bazei de date a site-ului se vor activa Apache, MySQL,
FileZilla din aplicația xampp, apoi se deschide în browser fereastra
localhost/phpmyadmin.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
88
Pasul 1. Se va crea o nouă bază de date, numită în cazul nostru
magazin. Pentru aceasta se acționează butonul New din lista din
stânga ferestrei.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
89
În noua bază de date vom crea tabelele:
• cos este tabela care conține produsele selectate de utilizator
• produse este tabela care conține detalii despre fiecare produs
în parte
• utilizator este tabela care conține date despre utilizatori
Tabela utilizator conține următoarele câmpuri:
• id_user int(11), auto_increment, cheie primară
• email varchar(60)
• parola varchar(30)
• judet varchar(20)
• localitate varchar(20)
• adresa varchar(100)
• telefon varchar(15)
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
90
Tabela produse conține următoarele câmpuri:
• id int(11), auto_increment, cheie primară
• nume varchar(50)
• imagine varchar(50)
• pret float(10, 2)
• categorie varchar(50)
• descriere text
• stoc int(11)
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
91
Tabela cos conține următoarele câmpuri:
• id_comanda int(11), auto_increment, cheie primară
• id_produs int(11)
• id_user int(11)
• stoc int(11)
• comanda int(11)
Pasul 2. Odată realizate tabelele, se vor stabili relațiile dintre ele în
modul design, ca în imaginea de mai jos.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
92
Observație: Dacă unei tabele nu i s -a stabilit o cheie primară, pentru a
putea realiza o relație, trebuie să ne asigurăm că este indexat câmpul
de legătură.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
93
În continuare vom popula tabelele cu informații.
Pasul 3. Vom crea un fișier care va face conexiunea la baza de date.
include_database.php
<?php
session_start();
$servername = „localhost‟;
$username = „root‟;
$password = „‟;
$dbname = „magazin‟;
$conn = mysqli_connect($servername, $username,
$password, $dbname);
?>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
94
Pasul 4. Se pot afișa informațiile din tabele, de exemplu din tabela
produse.
produse.php
<html>
<head>
//includem pagina de conectare la baza de date
<?php
include “include_database.php”;
?>
</head>
<body>
<h1> acestea sunt produsele noastre: </h1>
<?php
/*afisam continutul tabelei folosind comanda sql,
select*/
$sql = “SELECT * FROM produse”;
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
95
//executam cerinta
$result = mysqli_query($conn, $sql);
//afisam detaliile fiecarui produs
while($row = mysqli_fetch_assoc($result)){
echo “<img src=‟img/”.$row[„imagine‟].”‟><br>
Nume: “.$row[„nume‟].”<br> Pret:
“.$row[„pret‟].”<br> Descriere:
“.$row[„descriere‟].” <br> Stoc: “.$row[„stoc‟].”
<br> Categorie: “.$row[„categorie‟].””;
}
?>
</body>
</html>
Pasul 4. Adăugăm o bară de căutare pentru produse.
produse.php
<html>
<head>
//includem pagina de conectare la baza de date
<?php
include “include_database.php”;
?>
</head>
<body>
<!--Adaugam bara de cautare sub aspectul unei
forme--> <form action=‟produse.php‟ action=‟post‟>
<input type=‟text‟ name=‟cauta‟
placeholer=‟Cauta produse‟>
</form>
<h1> acestea sunt produsele noastre </h1>
<?php
/*aplicam comanda select pentru a afisa continutul
tabelei produse*/
$sql = “SELECT * FROM produse”;
/*verificam daca bara de cautare a fost completata
si nu este goala*/
if(isset($_POST[„cauta‟]) && $_POST[„cauta‟]
!= „‟)
{
//adaugam comenzi la variabila sql $sql .= “ WHERE nume LIKE
„%”.$_POST[„cauta‟].”%‟ OR descriere LIKE
„%”.$_POST[„cauta‟].”%‟ OR categorie LIKE
„”.$_POST[„cauta‟].”‟”;
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
96
/*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-->
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
97
<?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‟].”‟”;
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
98
$result = mysqli_query($conn, $sql);
//daca exista contul, il memoram in sesiune
if(mysqli_num_rows($result)>0)
{
<!--memorăm datele utilizatorului in variabila $row
si salvam id-ul in sesiune-->
$row = mysqli_fetch_assoc($result);
$_SESSION[„id‟] = $row[„id‟];
} } }
?>
Pasul 6. În fișierul produse.php adăugam butonul ”Adauga in cos”
pentru fiecare produs.
produse.php
<html>
<head>
<!--includem pagina de conectare la baza de date-->
<?php
include “include_database.php”;
//includem pagina pentru adaugarea de produse in cos
include “adauga_cos.php”;
?>
</head>
<body>
<!--bara de cautare-->
<form action=‟produse.php‟ action=‟post‟>
<input type=‟text‟ name=‟cauta‟
placeholer=‟Cauta produse‟>
</form>
<h1> acestea sunt produsele noastre </h1>
<?php
//se afiseaza tabela
$sql = “SELECT * FROM produse”;
//se verifica daca bara de cautare nu este goala
if(isset($_POST[„cauta‟]) &&
$_POST[„cauta‟] != „‟)
{
//se adauga criterii de cautare
$sql .= “ WHERE nume LIKE
„%”.$_POST[„cauta‟].”%‟ OR descriere LIKE
„%”.$_POST[„cauta‟].”%‟ OR categorie LIKE
„”.$_POST[„cauta‟].”‟”;
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
99
<!--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>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
100
adauga_cos.php
<?php
/*verificam daca utilizatorul este logat, daca s-a
trimis formularul si id-ul produsului adaugat in
cos*/
if(isset($_SESSION[„id‟]) &&
isset($_GET[produs_id]) && isset($_POST[„adauga‟]))
{
//interogam tabela cautand produsul adaugat in cos
$sql = “SELECT * FROM produse WHERE id =
„”.$_GET[„produs_id‟].”‟”;
//se executa comanda
$result = mysqli_query($conn, $sql);
//se verifica daca exista produsul
if(mysqli_num_rows($result) > 0)
{
//se memoreaza datele produsului
$row = mysqli_fetch_assoc($result);
//se adauga produsul in cos
$sql =
”INSERT INTO cos (`id_produs`, `id_user`, `stoc`, `c
omanda`)
VALUES ( '”.$row[„id‟].”', '”.$_SESSION[„id‟].”', '
1', '0')”;
//se memoreaza produsul in variabila $res
$res = mysqli_query($conn, $sql);
} }?>
Pasul 7. În pagina cos.php vom afișa conținutul coșului utilizatorului
logat.
cos.php
<html>
<head>
<!--se include pagina de conectare la baza de date
-->
<?php
include “include_database.php”;
?>
</head>
<body>
<h1> Cosul meu </h1>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
101
<!--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 gasit
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>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
102
Pasul 8. Se calculează totalul comenzii și se activează butonul de
ștergere a produselor din coș.
cos.php
<html>
<head>
<!--se include pagina de conectare la baza de date
-->
<?php
include “include_database.php”;
//se include fișierul operatii_in_cos.php
include “operatii_in_cos.php”;
?>
</head>
<body>
<h1> Cosul meu </h1>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
103
<!--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 gasit
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>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
104
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);
}
?>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
105
Pasul 9. Se finalizează comanda printr-un buton specific, care odată
activat va face o serie de verificări: de logare și de calcul a
conținutului coșului.
cos.php
<html>
<head>
<!--se include pagina de conectare la baza de date
-->
<?php
include “include_database.php”;
//se include fisierul operatii_in_cos.php
include “operatii_in_cos.php”;
?>
</head>
<body>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
106
<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 gasit 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‟>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
107
</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_produs =
„”.$_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);
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
108
//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 face actualizarea produsului
$sql = "UPDATE produse SET stoc =
'".$stoc_ramas."' WHERE id = '".$produs['id']."';";
//se memoreaza rezultatul
$rezultat_final = mysqli_query($conn, $sql);
}
}
?>
Folderul website-ului ar trebui să conțină următoarele fișiere și
subfoldere:
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
109
Pentru se putea realiza logarea se va crea fișierul login.php.
Împărțirea paginii se face folosind secțiuni create cu div-uri.
Formularul pentru autentificare utilizează o adresă de email ce va fi
stocată în baza de date și o parolă.
login.php
<html>
<head>
<title> magazinonline.ro </title>
<link rel='stylesheet' href='css/login.css'>
<?php
include 'include/include_start.php';
include 'include/control_login.php'
?>
</head>
<body style='background-image:
url("img/background.jpg");padding-top: 40px;'>
<?php
include 'include/user-bar.php';
include 'include/menu.php';
?>
<div class='container'>
<div class='login'>
<?php
/*verificarea datelor de autentificare memorate in
baza de date */
if(isset($login))
echo $login;
?>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
110
<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>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
111
<?php
include 'include/footer.php';
?>
</body>
</html>
Se va crea fișierul item.php cu următorul conținut:
<html>
<?php
include 'include/include_start.php';
include 'include/control_cos.php'
?>
<head>
<title> magazinonline.ro </title>
<link rel='stylesheet' href='css/style-
item.css'>
<script>
/*cod javascript pentru a calcula pretul total al
comenzii*/
function get_number(){
var $valoare =
document.getElementById('numar').value;
var $pret =
document.getElementById('pret').value;
var $total = $pret * $valoare;
document.getElementById("total").innerHTML =
"Pret total achizitie: "+ $total +" lei";
}
</script>
</head>
<body style='background-image:
url("img/background.jpg");'>
<!--Codul urmator verifica daca a fost trimis id-ul
elementului cautat. In caz afirmativ, il cauta in
baza de date si ii afiseaza toate proprietatile:
imagine, nume, descriere, pret, stoc, etc.-->
<?php
include 'include/user-bar.php';
?>
<div class='container'>
<?php
//daca a fost trimis un id
if(isset($_GET['id']))
{
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
112
//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>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
113
<p> Pret: <input id='pret'
type='text' readonly value='".$row['pret']."'> de
lei</p>
<p> Stoc ramas: ".$stoc_ramas."
</p>
<form
action='?id=".$_GET['id']."' method='post'>
<input type='number' min=1
max=".$stoc_ramas." name='numar' id='numar'
onchange='get_number();'>
<input type='submit'
name='submit' value='Adauga in cos'>
</form>
<p id='total'> Pret total
achizitie: 0 lei </p>
</div>";
} }
?>
</div>
<?php
include 'include/footer.php';
?>
</body>
</html>
Pagina produse.php are următorul conținut:
<html>
<?php
include 'include/include_start.php';
?>
<head>
<title> magazinonline.ro </title>
<link rel='stylesheet' href='css/style-
produse.css'>
</head>
<body style='background-image:
url("img/background.jpg");'>
<?php
include 'include/user-bar.php';
?>
<div class='container'>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
114
<?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
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
115
echo "
<div class='imagine-produs'>
<a href='item.php?id=".$row['id']."'
target='_blank'>
<img src='img/".$row['imagine']."'
alt='".$row['categorie']."'>
<p>".$row['nume']."</p>
<p>Pret: ".$row['pret']." Stoc ramas:
".$row['stoc']."</p>
</a>
</div>";
}
?> </div>
</div>
<?php
include 'include/footer.php';
?>
</body>
</html>
Fișierul home.php are următorul conținut:
<html>
<?php
include 'include/include_start.php';
?>
<head>
<title> magazinonline.ro </title>
<link rel='stylesheet' href='css/style-
home.css'>
</head>
<body style='background-image:
url("img/background.jpg");'>
<?php
include 'include/user-bar.php';
?>
<div class='container'>
<?php
include 'include/menu.php';
?>
<div class='content'><img src='img/main.jpg'></div>
</div>
<?php
include 'include/footer.php';
?>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
116
</body>
</html>
Fișierul descriere.php are următorul conținut:
<html>
<?php
include 'include/include_start.php';
?>
<head>
<title> magazinonline.ro </title>
<link rel='stylesheet' href='css/style-
descriere.css'>
</head>
<body style='background-image:
url("img/background.jpg");padding-top: 40px;'>
<div class='container'>
<?php
include 'include/user-bar.php';
include 'include/menu.php';
?>
<div class='content'>
<div class='descriere'>
<h1> Descrierea site-ului
magazinonline.com </h1>
<ul>
<li>
Magazinonline.com a fost creat in cadrul proiectului
Erasmus+ Actiunea Cheie 102 „ Acquisition of
professional web programming skills for an earlier
integration in the labor market” nr. ref. 2015-1-
RO01-A102-014297.
</li>
<li>
Acesta are ca scop oferirea utilizatorului unei
platforme cat mai simple pentru a viziona produse si
chiar pentru a le cumpara.
</li>
<li>
Site-ul magazinonline.com ofera o gama variata de
rechizite pentru scolarii de pretutindeni la preturi
accesibile tuturor categoriilor sociale.
</li>
</ul>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
117
<p>Va multumim pentru
utilizarea platformei noastre! Speram ca v-am
satifacut cerintele.</p>
</div>
</div>
</div>
<?php
include 'include/footer.php';
?>
</body>
</html>
Fișierul contact.php are următorul conținut:
<html>
<?php
include 'include/include_start.php';
?>
<head>
<title> magazinonline.ro </title>
<link rel='stylesheet' href='css/style-
contact.css'>
<script
src="http://maps.googleapis.com/maps/api/js"></scrip
t>
<script>
//acest script este pentru amplasarea hartii
var myCenter=new
google.maps.LatLng(47.73866,26.66515);
function initialize()
{
var mapProp = {
center:myCenter,
zoom:5,
mapTypeId:google.maps.MapTypeId.ROADMAP
};
var map= new
google.maps.Map(document.getElementById("googleMap")
,mapProp);
var marker=new google.maps.Marker({
position:myCenter,
});
marker.setMap(map);
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
118
}
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:
<p><img
src='img/location.png'>Vizitati-ne la adresa: Strada
Nicolae Iorga 19, Botoșani, Romania</p>
</div>
</div>
</div>
<?php
include 'include/footer.php';
?>
</body>
</html>
Site-ul are acum un aspect decent. Urmează să-i conferim și o
funcționalitate pe măsură prin intermediul fișierului
control_login.php din folderul ”include”.
control_login.php
<?php
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
119
/*daca suntem deja intr-o sesiune si dorim sa ne
delogam atunci trebuie sa resetam toate variabilele
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
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
120
{
$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 contul in baza de date
else{
$login = "<span
class='error'>Email sau parola gresite!</span>";
}
}
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
121
//daca exista campuri necompletate
else{
$login = "<span class='error'>Toate
campurile trebuie completate!</span>";
}
}
?>
Fișierul footer.php are următorul conținut:
<style>
.footer {
background-color: #494949;
position: fixed;
width: 100%;
height: 75px;
clear: both;
margin: 0px;
bottom: 0px;
color: white;
padding: 10px;
font-size: 15px;
}
</style>
<div class='footer'>
Site-ul a fost creat de catre Batalan Vlad,
elev in clasa a 11-a D la Colegiul National "A. T.
Laurian" in cadrul proiectului Erasmus+ Actiunea
Cheie 102
„ Acquisition of professional web programming skills
for an earlier integration in the labor market” nr.
ref. 2015-1-RO01-A102-014297.</div>
Fișierul include-start.php conține informații legate de publicarea
site-ului pe un server folosind date de logare, astfel încât accesul la
acesta să se execute în siguranță.
<?php
session_start();
$host='localhost';
$username='root';
$password='';
$dbname='magazin';
$conn = mysqli_connect($host, $username,
$password, $dbname);
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
122
?>
Pagina left-bar.php conține:
<div class='left-bar'>
<div class='category-header'>
CATEGORII
</div>
<ul>
<li><a
href='produse.php?categorie=birotica'>Produse de
birotica</a></li>
<li><a
href='produse.php?categorie=caiete'>Caiete</a></li>
<li><a
href='produse.php?categorie=rigle'>Rigle</a></li>
<li><a
href='produse.php?categorie=penare'>Penare si
ghiozdane</a></li>
<li><a
href='produse.php?categorie=hartie'>Hartie si
etichete</a></li>
</ul>
</div>
Fișierul user-bar.php conține:
<style>
.user-bar{
top: 0;
position: fixed;
height: 40px;
overflow: hidden;
display: inline-block;
background-color: #81D6F7;
width: 100%;
border-bottom: 1px solid black;
}
.user-bar ul{
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
}
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
123
.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>";
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
124
}
?>
<ul>
<li>
<a href='cos.php'>
<img src='img/cart.jpg'>Cosul meu
</a>
</li>
<li>
<?php
/*daca utilizatorul este logat, se verifica daca a
fost creata sesiunea */
if(isset($_SESSION['id']))
{
echo "<a
href='login.php'>Delogare</a>";
}
else
{
echo "<a href='login.php'>Autentificare</a>";
}
?>
</li> </ul></div>
Coșul de cumparaturi a neces itat crearea unei pagini cu conținutul aflat
în fișierul operatii_in_cos.php.
<?php
/*se executa stergerea unui obiect din cos, se
verifica daca a fost actionat butonul delete si daca
a fost trimis id-ul comenzii sterse */
if(isset($_POST['delete']) &&
isset($_GET['delete']))
{
//se sterge obiectul selectat din cos
$sql = "DELETE FROM cos WHERE id_produs =
'".$_GET['delete']."' AND id_user =
'".$_SESSION['id']."'";
//se executa operatia
$result = mysqli_query($conn, $sql);
/*se afiseaza mesaj de confirmare pentru stergerea
obiectului */
$done = "<span style='color:
red;'>Stergerea obiectului a fost realizata cu
succes!</span>";
}
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
125
//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 comanda
$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>";
}
?>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
126
Verificarea coșului se realizează prin intermediul codului din fișierul
control-cos.php.
<?php
//se verifica daca a fost trimis formularul
if(isset($_POST['submit']))
{
/*se verifica daca stocul nu este gol, daca
id_produs a fost trimis si userul este logat */
if($_POST['numar']!='' &&
isset($_GET['id']) && isset($_SESSION['id']))
{
/*conditia este indeplinita, se introduc datele in
baza de date */
$sql = "INSERT INTO `cos`
(`id_produs`, `id_user`, `stoc`)
VALUES ('".$_GET['id']."',
'".$_SESSION['id']."', '".$_POST['numar']."');";
//se executa cerinta
$result = mysqli_query($conn, $sql);
/*se afiseaza mesaj de confirmare a realizarii
cerintei */
$done = '<span style="color:red; font-size:
20px;">Obiectul a fost adaugat in cos.</span>';
}
}
?>
Meniul principal va fi introdus prin intermediul fișierului menu.php.
<style>
.menu{
width: 100%;
height: 50px;
background-color: #242424;
overflow: hidden;
display: inline-block;
}
.menu ul{
list-style-type: none;
}
.menu ul li{
float: left;
}
.menu ul li a{
display: block;
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
127
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
.menu ul li a:hover:not(.active) {
color: #aaaaaa;
}
.active{
background-color: #4CAF50;
}
</style>
<div class='menu'>
<ul>
<li><a href='home.php'
<?php
//se verifica daca numele fișierului este home.php
if(basename($_SERVER['PHP_SELF'])=='home.php')
echo "class='active'"?>
> Home </a></li>
<li><a href='descriere.php'
<?php
/*se verifica daca numele fișierului este
descriere.php */
if(basename($_SERVER['PHP_SELF'])=='descriere.p
hp') echo "class='active'"?>
> Descriere </a></li>
<li><a href='produse.php'
<?php
/*se verifica daca numele fișierului este
produse.php */
if(basename($_SERVER['PHP_SELF'])=='produse.php
') echo "class='active'"?>
> Produse </a></li>
<li><a href='contact.php'
<?php
/*se verifica daca numele fișierului este
contact.php */
if(basename($_SERVER['PHP_SELF'])=='contact.php
') echo "class='active'"?>
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
128
> Contact </a></li>
</ul>
</div>
Paginile website-ul arată ca în imaginile următoare:
1. main.php
2. descriere.php
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
129
3. produse.php
După cum putem observa, site-ul ne semnalează niște erori apărute în
cod. Acestea se datorează faptului că baza de date nu a fost completată
cu date.
4. contact.php
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
130
5. login.php
6. cos.php
Acum site-ul magazinonline.com este complet. Observați
funcționalitatea acestuia: se pot realiza operații de înregistrare,
autentificare, de căutare a produselor, de selectare și adăugare în coș,
de finalizare a comenzii.
PHP- GHID DE PROGRAMARE WEB PENTRU ÎNCEPĂTORI
131
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