Documente Academic
Documente Profesional
Documente Cultură
1
Cristian MARINOIU
Programarea în PHP
3
Programarea în PHP
Copyright© 2011
EDITURA UNIVERSITĂŢII PETROL-GAZE DIN PLOIEŞTI
Toate drepturile asupra acestei ediţii sunt rezervate editurii
004.43 PHP
Control ştiinţific:
Prof. dr. ing. Liviu Dumitraşcu
Redactor:
Prof. dr. ing. Liviu Dumitraşcu
Tehnoredactare computerizată :
Daniela Babkin Marinoiu
Director editură:
Prof. dr. ing. Şerban Vasilescu
4
Prefaţă
Această carte reprezintă o introducere în limbajul PHP, fiind adresată
tuturor celor care doresc să înveţe unul din cele mai utilizate limbaje de
programare web din acest moment. Pentru parcurgerea şi asimilarea
materialului nu sunt necesare cunoştinţe prealabile din domeniul limbajelor
de programare. Totuşi, cunoaşterea unui limbaj, şi în mod special a
limbajului C, favorizează o înţelegere mai rapidă a problematicii expuse.
Modul de abordare a prezentării se bazează în special pe experienţa
dobândită de autor în predarea limbajelor de programare la specializările
Informatică, Informatică economică şi Calculatoare şi Automatică, de la
Universitatea Petrol-Gaze din Ploieşti.
5
Programarea în PHP
6
Cuprins
CAPITOLUL 1
1. Introducere ........................................................................................ 13
1.1. PHP – scurt istoric ....................................................................... 13
1.2. PHP - caracteristici de bază.......................................................... 13
1.3. PHP – Noţiuni introductive .......................................................... 14
CAPITOLUL 2
2. Variabile, constante, tipuri de date..................................................... 19
2.1. Variabile ...................................................................................... 19
2.2. Constante ..................................................................................... 21
2.3. Tipuri de date ............................................................................... 22
2.3.1. Tipuri de date scalare ............................................................. 22
2.3.2. Tipuri de date compuse .......................................................... 24
2.3.3. Tipuri de date speciale ........................................................... 29
CAPITOLUL 3
3. Operatori şi expresii ...................................................................................... 31
3.1. Clase de precedenţă...................................................................... 31
3.2. Operatori aritmetici ...................................................................... 33
3.3. Operatori de comparaţie............................................................... 34
3.4. Operatori logici ............................................................................ 35
3.5. Operatorul de concatenare............................................................ 36
3.6. Operatori la nivel de bit................................................................ 36
3.7. Operatori de atribuire și de incrementare/decrementare............... 38
3.8. Operatorul cast – conversii explicite de tip................................... 41
CAPITOLUL 4
4. Instrucţiuni de control în PHP............................................................ 43
4.1. Instrucţiuni de atribuire, apeluri de funcţii, instrucţiunea vidă ..... 43
4.2. Instrucţiuni de decizie .................................................................. 44
7
Programarea în PHP
CAPITOLUL 5
5. Vectori. Operaţii de bază ................................................................... 59
5.1. Parcurgerea vectorilor .................................................................. 59
5.1.1. Parcurgerea vectorilor folosind while, for sau do...while........ 60
5.1.2. Parcurgerea vectorilor folosind while, for sau do...while
împreună cu funcţiile list() şi each()....................................... 61
5.1.3. Parcurgerea vectorilor folosind funcţia foreach() ................... 64
5.2. Sortarea vectorilor........................................................................ 66
5.2.1. Sortarea vectorilor după valori, cu distrugerea
cheilor iniţiale....................................................................... 66
5.2.2. Sortarea vectorilor după valori, cu păstrarea corelării
acestora cu cheile iniţiale ....................................................... 68
5.2.3. Sortarea naturală a vectorilor după valori,
cu păstrarea corelării acestora cu cheile iniţiale ...................... 69
5.2.4. Sortarea vectorilor după chei, cu păstrarea corelaţiilor
acestora cu valorile iniţiale..................................................... 72
5.2.5. Sortarea simultană a vectorilor şi a vectorilor
multidimensionali .................................................................. 74
5.3. Alte funcţii utile de lucru cu vectorii............................................ 79
8
Cuprins
CAPITOLUL 6
6. Funcţii utilizate în prelucrarea şirurilor de caractere,
a datelor calendaristice şi a orei ......................................................... 87
6.1. Afișarea fără format a șirurilor de caractere utilizând
instrucţiunea echo şi funcţia print................................................. 88
6.2. Funcţii de citire şi afişare care utilizează un format ..................... 94
6.2.1. Funcţia sscanf() de citire dintr-un şir, cu format..................... 94
6.2.2. Funcţiile de afişare cu format printf() şi sprintf() ...................... 95
6.2.3. Utilizarea etichetelor <pre> şi </pre> pentru
vizualizarea spaţiilor ............................................................ 100
6.2.4. Asocierea explicită a specificatorilor de conversie
cu argumentele funcţiei printf().Funcţia sprintf()
de formatare a unei liste de argumente .................................. 102
6.3. Funcţiile strtok(), explode() și implode()................................... 103
6.4. Funcţii pentru curăţarea șirurilor: trim(), ltrim(), rtrim(),
stripslashes(), strip_tags()........................................................... 108
6.5. Alte funcţii utile pentru prelucrarea șirurilor de caractere .......... 113
6.6. Funcţii pentru prelucrarea datelor calendaristice şi a orei........... 121
CAPITOLUL 7
7. Transmiterea datelor către scripturile PHP....................................... 127
7.1. Transmiterea datelor către scripturile PHP utilizând
link-urile HTML ....................................................................... 129
7.2. Transmiterea datelor către scripturile PHP cu ajutorul
formularelor HTML .................................................................. 131
7.2.1. Folosirea unui singur script atât pentru transmiterea
datelor prin formular, cât și pentru prelucrarea lor ............... 134
CAPITOLUL 8
8. Elemente de bază în crearea formularelor ........................................ 139
8.1. Eticheta input ............................................................................. 140
8.2. Eticheta textarea......................................................................... 145
8.3. Eticheta select ............................................................................ 146
9
Programarea în PHP
CAPITOLUL 9
9. Funcţii ............................................................................................. 149
9.1. Variabile locale .......................................................................... 155
9.2. Variabile globale ........................................................................ 156
9.3. Variabile statice ......................................................................... 157
9.4. Transfer prin valoare, transfer prin referinţă............................... 159
CAPITOLUL 10
10. Clase şi obiecte ............................................................................. 163
10.1. Clasa ca un container .............................................................. 163
10.2. Clasa ca un tip de date............................................................. 168
10.3. Accesul la proprietăţile şi metodele unei clase ........................ 169
10.3.1. Accesul din afara clasei..................................................... 169
10.3.2. Accesul din interiorul clasei. Pseudo variabila this ........... 171
10.3.3. Constructori ...................................................................... 173
10.3.4. Apelul unei metode din interiorul altei metode ................. 174
10.3.5. Transferul obiectelor unei clase către metodele
altei clase ......................................................................... 175
10.4. Moştenirea .............................................................................. 176
CAPITOLUL 11
11. Persistenţa datelor utilizând câmpuri ascunse, cookie-uri,
sesiuni .......................................................................................... 181
11.1. Câmpuri ascunse ..................................................................... 182
11.2. Cookie-uri: creare, referire, ștergere........................................ 185
11.3. Sesiuni .................................................................................... 191
11.3.1. Funcţii şi variabile de sesiune ........................................... 193
11.3.2. Generarea unei sesiuni ...................................................... 195
11.3.3. Ştergerea unei sesiuni ................................................................ 198
11.4. Aplicaţii. Simularea unui mecanism de autentificare
și autorizare ............................................................................ 201
11.4.1. Varianta bazată pe utilizarea coockie-urilor ...................... 202
11.4.2. Varianta bazată pe utilizarea sesiunilor ............................. 204
10
Cuprins
CAPITOLUL 12
12. Fişiere ........................................................................................... 207
12.1. Funcţia de deschidere fopen() şi funcţia de închidere
fclose() ................................................................................... 207
12.2. Scrierea datelor în fişiere ........................................................ 210
12.2.1. Funcţiile fwrite() şi fputs() pentru scrierea în fişiere ......... 210
12.2.2. Funcţia file_puts_contents() pentru scriere în fişiere ......... 213
12.2.3. Funcţia flock() pentru blocarea şi deblocarea fişierelor ..... 215
12.3. Citirea datelor din fişier .......................................................... 217
12.3.1. Funcţia fgetc()................................................................... 218
12.3.2. Funcţia fgets()................................................................... 220
12.3.3. Funcţia fgetcsv() ............................................................... 222
12.3.4. Funcţia fgetss() ................................................................. 224
12.3.5. Funcţiile readfile(), file() şi file_get_contents()................. 226
12.4. Funcţii care permit testarea stării unui fişier............................ 229
12.4.1. Funcţia file_exists() .......................................................... 229
12.4.2. Funcţiile is_file() şi is_dir() .............................................. 230
12.4.3. Funcţiile is_readable(), is_writable() şi is_executable() .... 230
12.4.4. Funcţia filesize() ............................................................... 230
12.5. Funcţia include() ..................................................................... 232
CAPITOLUL 13
13. Directoare ..................................................................................... 239
13.1. Funcţia opendir() pentru deschiderea unui director ................. 239
13.2. Funcţia readdir() pentru citirea dintr-un director ..................... 240
13.3. Funcţia closedir() pentru închiderea unui director ................... 240
13.4. Funcţia rewinddir() pentru poziţionarea la începutul
directorului............................................................................. 241
13.5. Funcţia mkdir() de creare a directoarelor................................. 243
13.6. Funcţia chdir() de schimbare a directorului curent .................. 244
13.7. Funcţia getcwd() care indică directorul curent......................... 244
13.8. Funcţia rmdir() de ştergere a unui director .............................. 244
13.9. Funcţia scandir() pentru deschiderea, citirea şi închiderea
unui director ............................................................................ 248
13.10. Aplicaţii care utilizează funcţii ce manipulează fişiere
şi directoare ............................................................................ 251
11
Programarea în PHP
CAPITOLUL 14
14. Crearea şi prelucrarea bazelor de date MySql utilizând PHP......... 257
14.1. Conectarea la serverul de date MySql ..................................... 258
14.2. Selectarea unei baze de date.................................................... 261
14.3. Interogarea unei baze de date .................................................. 262
14.3.1. Crearea unei baze de date.................................................. 262
14.3.2. Crearea unei tabele într-o bază de date.............................. 263
14.3.3. Adăugarea datelor într-o tabelă ......................................... 265
14.3.4. Afişarea datelor dintr-o tabelă........................................... 267
14.3.5. Ştergerea datelor dintr-o tabelă ......................................... 271
14.3.6. Modificarea datelor dintr-o tabelă ..................................... 278
12
P H P
Capitolul 1
1. Introducere
13
Programarea în PHP
Aplicaţie
PHP
HTML
Figura 1.1. Schema de funcţionare a unei aplicaţii web care utilizează PHP
14
Capitolul 1. Introducere
15
Programarea în PHP
Scriptul 1.1
<html>
<head>
<title>Scriptul 1.1</title>
</head>
<body>
<b>S-a executat scriptul numarul 1</b>
</body>
</html>
Scriptul 1.2
<html>
<head>
<title>Scriptul 1.2</title>
</head>
<body>
<?php
print "<b>S-a executat scriptul PHP numarul 1</b>";
?>
</body>
</html>
16
Capitolul 1. Introducere
print date("j.m.Y");
Funcţia date() din PHP ne va furniza la fiecare execuţie a
scriptului data modificată corespunzător.
Elementele PHP pot fi integrate în blocuri separate de cod PHP în
cadrul unui script, ca în exemplul următor (Scriptul 1.3.php):
Scriptul 1.3
<head>
<title>
<?php
$n=1.3;
?>
</title></head>
<body>
<?
print "<b>S-a executat scriptul numarul $n</b>";
?>
</body>
</html>
17
Programarea în PHP
Scriptul 1.4
<html>
<head>
<title>Scriptul 1.4</title>
</head>
<body>
<?php
/* Acest script ilustreaza tipurile de comentarii
care sunt acceptate in limbajul PHP */
$x=2;
$y=4;
print "<br>x=$x"; // se va afisa x=2
print "<br>y=$y"; # se va afisa y=4
?>
</body>
</html>
18
P H P
Capitolul 2
2. Variabile, constante,
tipuri de date
O variabilă este un nume (identificator) care se asociază unei zone
de memorie în care pot fi memorate diverse valori. Conţinutul zonei de
memorie poate fi schimbat cu alte valori permise, ori de câte ori este
nevoie.
Spre deosebire de variabile, constantele sunt entităţi a căror valoare
rămâne neschimbată pe toată durata execuţiei unui script.
Atât variabilele cât și constantele aparţin unui tip de date. Un tip de
date indică mulţimea valorilor posibile precum şi operaţiile care se pot face
asupra acestor valori. În limbajul PHP sunt prezente următoarele tipuri de
date:
ü Tipuri de date scalare: integer, float, boolean, string;
ü Tipuri de date compuse: array, object;
ü Tipuri de date speciale: resource, NULL.
2.1. Variabile
Numele unei variabile PHP trebuie să fie alcătuit din litere, cifre sau
liniuţe de subliniere, primul caracter al numelui fiind obligatoriu o literă
19
Programarea în PHP
20
Capitolul 2. Variabile, constante, tipuri de date
2.2. Constante
21
Programarea în PHP
22
Capitolul 2. Variabile, constante, tipuri de date
Exemple
ü în notaţie cu punct: – 2.3916, + 415, 63.945, – 0.329
ü în notaţie exponenţială: 1.2E4, – 9E-9, 0.52e+07
ü Notaţiile nE±k şi ne±k au înţelesul de n x 10±k. De exemplu,
1.2E+04 înseamnă 1.2x104, 0.3e-04 înseamnă 0.3x10-4 etc.
23
Programarea în PHP
24
Capitolul 2. Variabile, constante, tipuri de date
unde:
ü val_1, val_2, val_3,...,val_n reprezintă valori care se
memorează în vector, însoţite eventual de cheile corespunzătoare,
dacă vectorul este multidimensional;
ü cheie_1, cheie_2, cheie_3,...,cheie_n sunt cheile de
identificare a acestor valori.
Un vector în care nu se memorează nici o valoare se numește vector
vid. Un vector vid se reprezintă printr-o listă vidă de componente, adică
sub forma array(). Cheile unui vector pot fi de tip integer, de tip
string sau mixte .
O cheie de de tip integer, arată poziţia valorii care ne interesează
în cadrul vectorului. În acest caz, în locul cuvîntului cheie se poate folosi
cuvîntul indice (index). De asemenea, se spune că vectorul este indexat.
Exemplu. Instrucţiunea
$x=array(1=>23, 3=>456, 5=>-67);
creează tabloul $x cu valorile 23,456,-67. Referirea la aceste valori se
face sub forma $x[1], $x[3] și respectiv $x[5].
Așa cum se vede și din sintaxă, prezenţa cheilor nu este obligatorie.
Dacă toate cheile lipsesc, celor n valori prezente li se vor asocia implicit de
la stânga la dreapta indicii 0,1,2,...,n-1. De exemplu, construcţia
$tricolor=array('rosu','galben','albastru');
se poate scrie echivalent
$tricolor=array(0=>'rosu',1=>'galben',2=>'albastru');
O formă echivalentă de generare a unui vector se poate realiza prin
setarea explicită a valorilor vectorului, folosind operatorul [], conform
sintaxei:
$nume_vector[cheie]=valoare;
unde cheie poate lipsi.
Astfel, vectorul $x se poate genera executând secvenţa de
instrucţiuni:
$x[1]=23;
$x[3]=456;
$x[5]=-67;
25
Programarea în PHP
26
Capitolul 2. Variabile, constante, tipuri de date
$capitala["Romania"]="Bucuresti";
$capitala["Franta"]="Paris";
$capitala["Anglia"]="Londra";
Un alt exemplu:
$situatie=array('nume'=>'Ion','prenume'=>'Gheorghe','n
ota'=>8);
Exemplul de mai sus se poate rescrie, pentru claritate, astfel:
$situatie=array(
'nume'=>'Ion',
'prenume'=>'Gheorghe',
'nota'=>8
);
Cheile unui vector pot fi mixte, adică atât de tip integer cât și de
tip string, după cum se poate constata în exemplul de mai jos:
$x=array(3=>67,'a'=>5,'b'=>-7);
Referirea la valorile 67, 5 și -7 se face sub forma $x[3], $x['a']
și respectiv $x['b'].
Vectorii prezentaţi până în prezent au fost vectori unidimensionali.
Mai jos, prezentăm un exemplu de vector multidimensional.
Exemplu.Tabloul extras_catalog, de mai jos (Figura 2.1).
27
Programarea în PHP
'nota'=>7
),
3=>array(
'nume'=>'Ionescu',
'prenume'=>'Gabriela',
'nota'=>10
),
);
28
Capitolul 2. Variabile, constante, tipuri de date
//corpul functiei
}
}
//declaratia obiectului
$z=new complex;
Cuvântului cheie class permite declaraţia clasei, declaraţia
variabilelor clasei se face cu ajutorul cuvântului cheie var, iar declaraţia
obiectului $z cu ajutorul operatorului new. Funcţiile
adunare_complex() şi înmultire_complex() sunt metode ale clasei
complex.
29
P H P
Capitolul 3
3. Operatori și expresii
Expresia este o combinaţie validă de operanzi (variabile, constante,
funcţii) şi de operatori. Operatorii indică ce operaţii trebuie făcute pentru
evaluarea expresiei. Ordinea de evaluare a expresiei este dată de priorităţile
operatorilor săi. Această ordine, reflectată în clase de precedenţă, poate fi
schimbată cu ajutorul parantezelor rotunde.
31
Programarea în PHP
Observaţii
ü Atât pentru conjuncţie (ŞI) cât și pentru disjuncţie (SAU) sunt
prevăzuţi câte doi operatori, situaţi însă în clase de precedenţă
diferite;
ü Fiecare dintre operatorii prezentaţi în tabel poate fi asociativ la
stânga, asociativ la dreapta sau neasociativ. Pentru operatorii care au
aceeaşi clasă de precedenţă asociativitatea la stânga implică
evaluarea de la stânga la dreapta a expresiei, iar asociativitatea la
dreapta, evaluarea în sens invers.
32
Capitolul 3. Operatori și expresii
33
Programarea în PHP
34
Capitolul 3. Operatori și expresii
35
Programarea în PHP
36
Capitolul 3. Operatori și expresii
& ŞI pe bit ;
| SAU exclusiv pe bit ;
~ NU pe bit (complement faţă de 1) ;
>> deplasare dreapta (shift dreapta);
<< deplasare stânga (shift stânga).
0010 1011
0000 1001 0010 1011
$a^$b = 0010 0010 ~$a = 1101 0100
37
Programarea în PHP
38
Capitolul 3. Operatori și expresii
39
Programarea în PHP
40
Capitolul 3. Operatori și expresii
41
P H P
Capitolul 4
4. Instrucţiuni de control
în PHP
Instrucţiunile de control din limbajul PHP se clasifică astfel:
ü instrucţiunii de atribuire şi apeluri de funcţie;
ü instrucţiunea vidă;
ü instrucţiuni de decizie;
ü instrucţiuni iterative;
ü instrucţiuni de salt.
O instrucţiune compusă sau instrucţiune grup se obţine prin gruparea
mai multor instrucţiuni între acolada stângă { şi acolada dreaptă }.
Utilitatea ei apare atunci când logica programului impune folosirea mai
multor instrucţiuni, însă sintaxa cere prezenţa unei singure instrucţiuni.
Sintaxa multor instrucţiuni PHP este identică sau asemănătoare cu
cea a instrucţiunilor C. O instrucţiune se încheie prin punct și virgulă (;).
43
Programarea în PHP
unde:
ü $v este o variabilă;
ü e este o expresie validă în PHP.
Rezultatul evaluării expresiei e se atribuie variabilei $v; de asemenea, aşa
cum s-a văzut în Capitolul 2 variabila $v preia tipul expresiei e.
De exemplu, în urma execuţiei instrucţiunii:
$x=3+5.2;
variabila $x va primi valoarea 8.2, iar tipul ei va fi numeric. Dacă vom
continua cu
$x="PHP";
variabilei $x i se va atribui şirul de caractere "PHP";, iar tipul ei va fi tipul
de date string.
O instrucţiune apel de funcţie are forma:
nume_functie (lista de parametri);
Efectul ei constă în apelarea funcţiei nume_functie cu valorile
parametrilor efectivi din lista de parametri.
De exemplu, apelul
echo "Lista notelor este următoarea";
va avea ca efect afişarea în browser a mesajului dintre ghilimele.
Atunci când sintaxa impune într-un anumit loc prezenţa unei
instrucţiuni, dar aceasta lipseşte, se consideră că acolo se află o
instrucţiune vidă. Un prim exemplu de instrucţiune vidă apare în
construcţia
$x=;
Aici, între operatorul = şi semnul ; este o instrucţiune vidă.
4.2.1. Instrucţiunea if
44
Capitolul 4. Instrucţiuni de control în PHP
Scriptul 4.1
<html>
<head>
<title >Scriptul 4.1</title>
</head>
<body>
<?php
$nota=6;
if ($nota >= 5) {
echo "Rezultat: Admis";
}
?>
</body>
</html>
45
Programarea în PHP
instructiune_2;
}
Efectul instrucţiunii este următorul: dacă expresie are valoarea True
se execută instructiune_1, în caz contrar (expresie are valoarea
False) se execută instructiune_2.
Exemplu. Scriptul 4.2.php compară valoarea variabilei $nota cu 5
şi afişează mesajul Rezultat: Admis dacă $nota>=5 şi
Rezultat:Respins în caz contrar ($nota<5).
Scriptul 4.2
<html>
<head>
<title>Scriptul 4.2</title>
</head>
<body>
<?php
$nota=4;
if ($nota >= 5) {
echo "Rezultat: Admis";
} else {
echo "Rezultat: Respins";
}
?>
</body>
</html>
46
Capitolul 4. Instrucţiuni de control în PHP
if(expresie_1)
instructiune_1;
elseif(expresie_2)
instructiune_2;
elseif(expresie_3)
instructiune_3;
....................
elseif(expresie_n)
instructiune_n;
else
instructiune_n+1;
Scriptul 4.3
<html>
<head>
<title>Scriptul 4.3</title>
</head>
<body>
<?php
$nota = 4;
if ($nota >= 8) {
echo "Rezultat:Foarte bine";
} elseif ($nota >= 6) {
echo "Rezultat:Bine ";
} elseif ($nota = 5) {
echo ("Rezultat:Satisfacator");
47
Programarea în PHP
48
Capitolul 4. Instrucţiuni de control în PHP
Observaţii
ü Entităţile expresie, valoare_1, valoare_2, …, valoare_n
pot fi de tip numeric, de tip string sau boolean.
ü Instrucţiunea break este o instrucţiune de salt. Utilizarea ei în
cadrul structurii switch este opţională. Când este prezentă, ea
realizează saltul în afara acestei structuri. Lipsa instrucţiunii break
determină execuţia în secvenţă a instrucţiunilor prezente în switch
până la prima instrucţiune de salt întâlnită, iar dacă aceasta nu există,
până la sfârşitul structurii switch.
Scriptul 4.4
<html>
<head>
<title>Scriptul 4.4</title>
</head>
<body>
<?php
$nota=3;
switch ($nota) {
case 1:;
case 2:;
case 3:;
case 4: echo "Respins";break;
case 5: echo "Nota cinci";break;
case 6: echo "Nota sase";break;
case 7: echo "Nota sapte";break;
case 8: echo "Nota opt";break;
case 9: echo "Nota noua";break;
case 10: echo "Nota zece";break;
default:echo "Eroare!";
}
?>
</body>
</html>
49
Programarea în PHP
Scriptul 4.5
<html>
<head>
<title>Scriptul 4.5</title>
</head>
<body>
<?php
$nota = 6;
$mesaj =($nota >= 5)? "Admis" : "Respins";
50
Capitolul 4. Instrucţiuni de control în PHP
Observaţii
ü Instrucţiunea while este o instrucţiune cu test iniţial deoarece testul
condiţiei se face înainte de a executa instrucţiunea instructiune.
Din acest motiv, dacă din start conditie este falsă,
instructiune nu se mai execută.
51
Programarea în PHP
Scriptul 4.6
<html>
<head>
<title >Scriptul 4.6</title>
</head>
<body>
<?php
$i = 2;
while ($i < 9) {
echo $i;
$i+=2;
}
?>
</body>
</html>
52
Capitolul 4. Instrucţiuni de control în PHP
initializare
while (conditie) {
instrucţiune
actualizare
}
Evident, în astfel de situaţii, folosirea instrucţiunii for aduce un plus
de simplitate programului. Astfel, porţiunea de cod PHP care ilustrează
bucla while din exemplul precedent poate fi rescrisă cu ajutorul buclei
for, după cum urmează:
Scriptul 4.7
<html>
<head>
<title>Scriptul 4.7</title>
</head>
<body>
<?php
for ($i=2; $i<10; $i+=2)
echo "$i";
?>
</body>
</html>
Observaţii
ü oricare din componetele initializare, conditie sau
actualizare poate să lipsească, însă, păstrarea semnelor punct şi
virgulă (;) este obligatorie;
ü absenţa componentei conditie este interpretată ca fiind
echivalentă cu conditie adevărată. Bucla obţinută este evident o
buclă eternă;
ü componentele initializare, conditie, actualizare nu se
referă întotdeauna la o singură variabilă contor, iar instrucţiunea
ciclată poate fi vidă.
53
Programarea în PHP
Scriptul 4.8
<html>
<head>
<title>Scriptul 4.8</title>
</head>
<body>
<?php
for ($i=1,$s=0; $s<=10; $i+=2) {
$s+=$i;
}
echo "Suma calculata este $s";
?>
</body>
</html>
Observaţii
ü Când corpul ciclului instrucţiunii do...while este format dintr-o
singură instrucţiune, acoladele pot lipsi.
ü Datorită poziţiei finale a testului, grupul de instrucţiuni se execută
cel puţin o dată.
ü Ca şi în cazul instrucţiunii while, instructiuni trebuie să
conţină operaţii pentru care conditie să devină falsă după un
număr finit de paşi. În caz contrar, se produce ciclu infinit sau buclă
eternă.
54
Capitolul 4. Instrucţiuni de control în PHP
Scriptul 4.9
<html>
<head>
<title>Scriptul 4.9</title>
</head>
<body>
<?php
$s = 0;
$i = 1;
do {
$s+=$i;
$i++;
}
while($i <= 10);
echo "Suma primelor 10 numere naturale este $s";
?>
</body>
</html>
Scriptul 4.10
<html>
<head>
<title>Scriptul 4.10</title>
</head>
<body>
<?php
55
Programarea în PHP
56
Capitolul 4. Instrucţiuni de control în PHP
Scriptul 4.11
<html>
<head>
<title>Scriptul 4.11</title>
</head>
<body>
<?php
for ($i=1; $i<6; $i++){
for ( $j=1; $j<6; $j++) {
if ( $j == 4){
echo "Impartire la 0<br>";
break 1;
} else {
$e=round($i/($j-4),2);
echo "e($i,$j)=$e ";
}
}
}
?>
</body>
</html>
Observaţii
ü Deoarece în interiorul ciclurilor avem break 1, se încheie doar
ciclul controlat de variabila $j;
ü Dacă în loc de break 1 vom pune break 2 efectul va consta în
încheierea ambelor cicluri for, iar rezultatul afişat va fi
e(1,1)=-0.33
e(1,2)=-0.5
e(1,3)=-1 Împărţire la 0.
57
Programarea în PHP
Scriptul 4.12
<html>
<head>
<title>Scriptul 4.12</title></head>
<body>
<?php
for ($i=-5; $i<6; $i++) {
if ($i == 0) {
continue;
} else {
$e=round(3/$i,2);
echo "i=$i e=$e<br>";
}
}
?>
</body>
</html>
58
P H P
Capitolul 5
5. Vectori. Operaţii
de bază
Scopul acestui capitol este de a familiariza cititorul cu cele mai
utilizate funcţii de prelucrare a vectorilor în PHP, insisistându-se în mod
special asupra principalelor modalităţi de parcurgere şi sortare a acestora.
59
Programarea în PHP
Situaţia cea mai simplă de parcurgere este când indicii sunt de tip
integer şi consecutivi. De exemplu, pentru a lista conţinutul vectorului
$extras_catalog (creat în Capitolul 2) putem folosi scriptul 5.1.php:
Scriptul 5.1
<html>
<head>
<title>Scriptul 5.1</title>
</head>
<body>
<?php
$extras_catalog=array(
1=>array(
'nume'=>'Ion',
'prenume'=>'Gheorghe',
'nota'=>8
),
2=>array(
'nume'=>'Popescu',
'prenume'=>'Vasile',
'nota'=>7
),
3=>array(
'nume'=>'Ionescu',
'prenume'=>'Gabriela',
'nota'=>10
),
);
for ($i=1; $i<=3; $i++) {
echo 'Nume:'.$extras_catalog[$i]['nume'].'<br>';
echo 'Prenume:'.$extras_catalog[$i]['prenume'].'<br>';
echo 'Nota:'.$extras_catalog[$i]['nota'].'<br>';
}
?>
</body>
</html>
60
Capitolul 5. Vectori. Operaţii de bază
Nume:Popescu
Prenume:Vasile
Nota:7
Nume:Ionescu
Prenume:Gabriela
Nota:10
61
Programarea în PHP
list($x)=$v;
echo "x=$x";
iar rezultatul execuţiei sale este: x=7.
Funcţia each() aplicată unui vector returnează valoarea curentă a
indicelui, precum şi valoarea memorată în componenta indicată de acesta.
Aceste valori sunt memorate într-un vector cu dimensiunea patru având
cheile 0,1 key, value. În locaţiile indicate de cheile 0 şi key este
memorată valoarea cheii curente, iar în cele indicate de 1 şi value este
memorată valoarea componentei corespunzătoare acestei chei. Execuţia
funcţiei each() implică şi deplasarea pe următorul element al vectorului.
Poziţionarea pe prima componentă a vectorului se face cu ajutorul funcţiei
reset().
Exemplu. În urma execuţiei secvenţei de program
$v=array(7,10,9);
reset($v);
$rez=each($v);
echo"Cheia este $rez[0],iar valoarea memorata este
$rez[1].";
se afişează mesajul
Cheia este 0,iar valoarea memorata este 7
După execuţia acestei secvenţe de program cheile şi componentele
vectorilor $v şi $rez vor fi
7 10 9
0 1 2
respectiv,
0 7 0 7
0 1 key value
62
Capitolul 5. Vectori. Operaţii de bază
1 10 1 10
0 1 key value
Scriptul 5.2
<html>
<head>
<title>Scriptul 5.2</title>
</head>
<body>
<?php
$tari=array(
'ro'=>'Romania',
'fr'=>'Franta',
'it'=>'Italia',
'au'=>'Austria'
);
echo "Indicii si valorile corespunzatoare memorate in
vector sunt:"."<br>";
while (list($indice, $valoare)=each($tari)) {
echo "<br> $indice=>$valoare";
}
?>
</body>
</html>
63
Programarea în PHP
64
Capitolul 5. Vectori. Operaţii de bază
Scriptul 5.3
<html>
<head>
<title>Scriptul 5.3</title>
</head>
<body>
<?php
$extras_catalog=array(
1=>array(
"nume"=>"Ion",
"prenume"=>"Gheorghe",
"nota"=>8
),
2=>array(
'nume'=>'Popescu',
'prenume'=>'Vasile',
'nota'=>7
),
3=>array(
'nume'=>'Ionescu',
'prenume'=>'Gabriela',
'nota'=>10
),
);
foreach ($extras_catalog as $linie){
echo "<br>";
foreach ($linie as $val) {
echo "$val " ;
}
}
?>
</body></html>
65
Programarea în PHP
66
Capitolul 5. Vectori. Operaţii de bază
Scriptul 5.4
<html>
<head>
<title>Scriptul 5.4</title>
</head>
<body>
<?php
$tari=array(
'ro'=>'Romania',
'au'=>'Austria',
'fr'=>'Franta',
'it'=>'Italia',
);
print "<br>Cheile si valorile vectorului inainte de
sortare:";
foreach ($tari as $ind=>$tara){
echo "<br>$ind=>$tara" ;
}
sort($tari);
print "<br>Cheile si valorile vectorului dupa sortarea
crescatoare a valorilor:";
foreach ($tari as $ind=>$tara) {
echo "<br>$ind=>$tara" ;
}
rsort($tari);
print "<br>Cheile si valorile vectorului dupa sortarea
descrescatoare a valorilor:";
foreach ($tari as $ind=>$tara){
echo "<br>$ind=>$tara" ;
}
?>
</body></html>
67
Programarea în PHP
68
Capitolul 5. Vectori. Operaţii de bază
69
Programarea în PHP
Scriptul 5.5
<html>
<head>
<title>Scriptul 5.5</title>
</head>
<body>
<?php
$siruri = array(
12=>'x12',
'2'=>'x2',
'34'=>'X34',
'251'=>'x251',
);
print "<br>Cheile si valorile vectorului inainte de
sortare:";
foreach ($siruri as $cheie=>$sir) {
echo "<br>$cheie=>$sir" ;
70
Capitolul 5. Vectori. Operaţii de bază
71
Programarea în PHP
Scriptul 5.6
<html>
<head>
<title>Scriptul 5.6</title>
</head>
<body>
<?php
$materiale=array(
'504'=>'creioane',
'634'=>'pixuri',
'423'=>'agrafe',
'109'=>'cerneala',
);
print "<br>Cheile si valorile vectorului inainte de
sortare:";
foreach ($materiale as $cod=>$material) {
72
Capitolul 5. Vectori. Operaţii de bază
După cum se poate constata vectorul a fost sortat după chei prima
dată crescător, a doua oară descrescător, păstrându-se de fiecare dată
corelaţia dintre chei și valorile iniţiale.
73
Programarea în PHP
74
Capitolul 5. Vectori. Operaţii de bază
Scriptul 5.7
<html>
<head>
<title>Scriptul 5.7</title>
</head>
<body>
<?php
$x=array(5,2,5,2,6);
$y=array(4,9,4,1,8);
$z=array(7,9,3,7,7);
print "Afisarea vectorilor x,y si z inainte de sortare:
<br>";
echo "x=(";
foreach ($x as $val) {
echo "$val ";
}
echo ")<br>";
echo "y=(";
foreach ($y as $val) {
echo "$val ";
}
echo ")<br>";
echo "z=(";
foreach ($z as $val) {
75
Programarea în PHP
$xa=array("a"=>3,5,1,5);
$yb=array(9,7,"b"=>8,6);
print "Afisarea vectorilor xa si yb inainte de sortare:
<br>";
echo "xa=(";
foreach ($xa as $cheie=>$val) {
echo "$cheie=>$val ";
}
echo ")<br>";
echo "yb=(";
foreach ($yb as $cheie=>$val) {
echo "$cheie=>$val ";
}
echo ")<br>";
array_multisort($xa,$yb);
print "<br>Afisarea vectorilor xa si yb dupa sortare:
<br>";
echo "xa=(";
foreach ($xa as $cheie=>$val) {
echo "$cheie=>$val ";
}
echo ")<br>";
echo "yb=(";
foreach ($yb as $cheie=>$val) {
echo "$cheie=>$val ";
}
76
Capitolul 5. Vectori. Operaţii de bază
77
Programarea în PHP
z=(7 9 3 7 7 )
Afisarea vectorilor x,y si z dupa sortare:
x=(2 2 5 5 6 )
y=(1 9 4 4 8 )
z=(7 9 3 7 7 )
Afisarea vectorilor xa si yb inainte de sortare:
xa=(a=>3 0=>5 1=>1 2=>5 )
yb=(0=>9 1=>7 b=>8 2=>6 )
Afisarea vectorilor xa si yb dupa sortare:
xa=(0=>1 a=>3 1=>5 2=>5 )
yb=(b=>8 0=>9 1=>6 2=>7 )
Afisarea matricii inainte de sortare:
’Ionescu’ ’Gheorghe’ 8
’Popescu’ ’Vasile’ 7
’Ionescu’ ’Gabriela’ 10
Afisarea matricii dupa sortare:
’Ionescu’ ’Gheorghe’ 8
’Ionescu’ ’Gabriela’ 10
’Popescu’ ’Vasile’ 7
78
Capitolul 5. Vectori. Operaţii de bază
79
Programarea în PHP
80
Capitolul 5. Vectori. Operaţii de bază
Scriptul 5.8
<html>
<head>
<title>Scriptul S5.7</title>
</head>
<body>
<?php
81
Programarea în PHP
82
Capitolul 5. Vectori. Operaţii de bază
83
Programarea în PHP
84
Capitolul 5. Vectori. Operaţii de bază
85
P H P
Capitolul 6
6. Funcţii utilizate în
prelucrarea şirurilor de
caractere, a datelor
calendaristice şi a orei
Alături de imagine, textul joacă un rol important în construcţia site-
urilor. Din acest motiv limbajul PHP oferă programatorilor o mulţime de
funcţii utile pentru prelucrarea șirurilor de caractere. Sunt funcţii pe care le
întâlnim în mod obișnuit și în alte limbaje, dar și funcţii create pentru a
rezolva problemele specifice care apar din interacţiunea PHP cu HTML și
MySQL. În continuare vom prezenta principalele funcţii și construcţii de
limbaj utilizate în prelucrarea șirurilor de caractere, a datelor calendaristice
şi a orei.
87
Programarea în PHP
88
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
$x=2;
$y=3;
echo "x=$x y=$y";
și
$x=2;
$y=3;
echo "x=$x \ny=$y";
va produce același rezultat, adică x=2 y=3. Efectul caracterului linie nouă
(\n) se observă însă în codul HTML generat: execuţia primei secvenţe de
instrucţiuni(fără codul \n) va produce codul HTML x=2 y=3, iar execuţia
celei de-a doua secvenţe de instrucţiuni (cu codul \n) va produce codul
HTML
x=2
y=3
Pentru afișarea pe două rânduri a rezultatului trebuie folosit codul
HTML <br> într-una din formele: echo "x=$x <br>y=$y"; sau echo
"x=$x <br>\ny=$y";
Atunci când lista de afișare cuprinde numai nume de variabile,
ghilimelele pot lipsi. Astfel, în loc de instrucţiunea echo "$a","$b"; se
poate utiliza varianta mai simplă echo $a,$b;.
Este foarte important de reţinut faptul că utilizarea apostrofurilor în
locul ghilimelelor va avea ca efect afișarea numelor variabilelor și nu a
valorilor acestora, precum și a eventualelor caractere backslash folosite.
Astfel, execuţia secvenţei de instrucţiuni
$x=3;
echo 'x=$x\n';
$y[7]=8;
echo 'y[7]=$y[7]';
89
Programarea în PHP
va produce rezultatul
x=$x\ny[7]=$y[7]
De asemenea, afișarea elementelor unui vector necesită o atenţie
deosebită. De exemplu, execuţia secvenţei de instrucţiuni
$x=array(2=>7,5);
echo "x[2]=$x[2]<br>";
va produce, așa cum era de așteptat, rezultatul x[2]=7.
În același timp, în cazul în care cheile sunt de tip string, schema de
mai sus va funcţiona numai dacă structura nume_variabila[cheie] va
fi cuprinsă între acolade, adică va fi de forma
{nume_variabila[cheie]}.
Mai jos prezentăm un astfel de exemplu. Execuţia secvenţei de instrucţiuni
$y=array("ro"=>"Romania");
$z=array('fr'=>'Franta');
echo "y[ro]={$y["ro"]}<br>";
echo "z[fr]={$z['fr']}<br>";
va produce rezultatul
y[ro]=Romania
z[fr]=Franta
Pentru a înţelege și mai bine legătura dintre instrucţiunile PHP și
codul HTML ne propunem să rezolvăm următoarea problemă: să se
elaboreze un script PHP care să afișeze valorile 1,2,3,4,5,6,7,8,9,
10,11,12 sub forma
1 2 3 4
5 6 7 8
9 10 11 12
O rezolvare a acestei probleme este realizată de scriptul 6.1.php :
Scriptul 6.1
<html>
<head>
<title>Scriptul 6.1</title>
</head>
<body>
<?php
for ($i=1; $i<=3; $i++){
echo "<br>";
for ($j=1;$j<=4;$j++){
$e=$j+4*($i-1);
90
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
1 2 3 4
5 6 7 8
9 10 11 12
Scriptul 6.2
<html>
<head>
<title>Scriptul 6.2</title>
</head>
<body>
<table border="1">
<?php
for ($i=1; $i<=3; $i++){
echo "<tr>";
for ($j=1; $j<=4; $j++){
echo "<td>";
$e=$j+4*($i-1);
echo $e;
echo "</td>";
}
echo "</tr>";
91
Programarea în PHP
1 2 3 4
5 6 7 8
9 10 11 12
Observaţii
ü Etichetele HTML <table border="1"> și </table> pot fi și ele
afișate în browser cu ajutorul instrucţiunii echo, modificând scriptul
astfel (vezi scriptul 6.3.php):
Scriptul 6.3
<html>
<head>
<title>Scriptul 6.3</title>
</head>
<body>
<?php
echo '<table border="1">';
for ($i=1; $i<=3; $i++) {
echo "<tr>";
for ($j=1; $j<=4; $j++) {
echo "<td>";
$e=$j+4*($i-1);
echo $e;
echo "</td>\n ";
}
echo "</tr>\n";
}
echo "</table>";
?>
</body>
</html
92
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
<html>
<head>
<title>Scriptul 6.3</title>
</head>
<body>
<table border="1">
<tr><td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr><td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
</tr>
<tr><td>9</td>
<td>10</td>
<td>11</td>
<td>12</td>
</tr>
</table>
</body>
</html
93
Programarea în PHP
<html>
<head>
<title>scriptul 6.3</title>
</head>
<body>
<table border="1">
<tr><td>1</td><td>2</td><td>3</td><td>4</td></tr><tr><td>5<
/td><td>6</td><td>7</td><td>8</td></tr><tr><td>9</td><td>10
</td><td>11</td><td>12</td></tr>
</table>
</body>
</html>
94
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
unde:
ü sir reprezinta șirul de unde se citește informaţia;
ü format este formatul cu care se citește șirul;
ü lista_de_argumente se referă la o listă de argumente opţionale;
ü tip este tipul de date array dacă lista_de_argumente este vidă și
este tipul de date integer dacă lista_de_argumente este
prezentă.
Sunt posibile două cazuri. Dacă sunt prezente doar primele două
argumente, funcţia întoarce un vector care are dimensiunea egală cu
numărul specificatorilor din şirul format. Dacă în plus apar şi argumente
opţionale atunci este returnat numărul acestora. Cele două cazuri sunt
exemplificate în scriptul de mai jos:
<?php
situatie1="Ionescu Mircea 7";
list($nume, $prenume, $nota)=sscanf($situatie1, "%s %s
%d");
echo "<br>Nume=$nume, Prenume=$prenume, Nota=$nota";
$situatie2="Popescu Ion 10";
scanf($situatie2, "%s %s %d",$nume, $prenume, $nota);
echo "<br>Nume=$nume, Prenume=$prenume, Nota=$nota";
?>
95
Programarea în PHP
Scriptul 6.4
<html>
<head>
<title>Scriptul 6.4</title>
</head>
<body>
<?php
$x=174;
printf(" Conversia numarului %d in zecimal este %d <br>",
$x,$x);
printf(" Conversia numarului %d intr-un intreg fara semn
este %u<br>", -$x,$x);
96
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
97
Programarea în PHP
98
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
99
Programarea în PHP
100
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
101
Programarea în PHP
102
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
103
Programarea în PHP
104
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
w=de
w=date
w=string
w=Functii
w=String
w=php
Scriptul 6.5
<html>
<head>
<title>Scriptul 6.5</title>
</head>
<body>
<?php
105
Programarea în PHP
106
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
x[0]=Ionescu
x[1]=Mircea
x[2]=7
Limita egala cu 2.Subsiruri extrase:
x[0]=Ionescu
x[1]=Mircea 7
Limita egala cu -2.Subsiruri extrase:
x[0]=Ionescu
Separator care nu este in sir.Subsiruri extrase:
x[0]=Ionescu Mircea 7
Separatorul este vid.Subsiruri extrase:
Nu se extrage nici un subsir; functia intoarce valoarea
false
Scriptul 6.6
<html>
<head>
<title>Scriptul 6.6</title>
</head>
<body>
<?php
$situatie="Ionescu Mircea 7";
// se extrag in vectorul $x toate subsirurile delimitate de
spatii din sirul situatie
$x=explode(" ",$situatie);
echo "<br>S-a generat vectorul x:<br>";
for ($i=0; $i<count($x); $i++) {
print "x[$i]=$x[$i]<br>";
107
Programarea în PHP
108
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
Scriptul 6.7
<html>
<head>
<title>Scriptul 6.7</title>
</head>
<body>
<?php
// sirul initial
$sir="\tx=2 y=5 ";
echo "<br> Sirul initial este:<br>";
echo "<pre>$sir</pre>";
109
Programarea în PHP
110
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
Scriptul 6.8
<html>
<head>
<title>Scriptul 6.8</title>
</head>
<body>
<?php
$z="Atunci, O'Neal a spus in limba romana:'Imi place
Romania'";
echo "<br>Sirul generat este: $z";
//se adauga backslashuri in fata apostrofurilor
$z=addslashes($z);
echo "<br>Sirul generat dupa aplicarea functiei
addslashes(); este: $z";
//se elimina backslashurile adaugate
$z=stripslashes($z);
echo "<br>Sirul generat dupa aplicarea functiei
stripslashes() este: $z";
?>
</body>
</html>
111
Programarea în PHP
Scriptul 6.9
<html>
<head>
<title>Scriptul 6.9</title>
</head>
<body>
<?php
$x=7;
// generarea unui sir care contine etichete HTML
$z="<br><b><i>x=$x</i></b>";
echo "<br>Valoarea initiala a sirului este: $z";
112
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
113
Programarea în PHP
114
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
115
Programarea în PHP
116
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
117
Programarea în PHP
Observaţii
ü Dacă vectorul $deinlocuit are mai multe componente decât
vectorul $seinlocuiestecu, componentele în exces se înlocuiesc
cu șirul vid ("").
118
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
119
Programarea în PHP
120
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
2551120293148
2551120293148
2551120293148
2551120293148
121
Programarea în PHP
122
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
Scriptul 6.10
<html>
<head>
<title>Scriptul 6.10</title>
</head>
<body>
<?php
$timestamp=time();
echo "Suntem in data de ";
$data=date("j F Y \o\\r\a g.i:s A", $timestamp);
echo "$data";
?>
</body>
</html>
123
Programarea în PHP
124
Capitolul 6. Funcţii utilizate în prelucrarea şirurilor de caractere, a datelor calendaristice
şi a orei
Scriptul 6.11
<html>
<head>
<title>Scriptul 6.11</title></head>
<body>
<?php
$timestamp=time();
$v=getdate($timestamp);
echo "Suntem in data de".$v['mday']."/"
.$v['mon']."/".$v['year'];
echo " ora ".$v['hours']."." .$v['minutes'].
":".$v['seconds'];
?>
</body>
</html>
Scriptul 6.12
<html>
<head>
<title>Scriptul 6.12</title>
</head>
<body>
<?php
$timestamp=mktime(19,22,57,8,24,2009);
$v=getdate($timestamp);
echo "Suntem in data de ".$v['mday']."/"
.$v['mon']."/".$v['year'];
125
Programarea în PHP
Scriptul 6.13
<html>
<head>
<title>Scriptul 6.13</title>
</head>
<body>
<?php
$check=checkdate(8,24,2009);
if ($check) {
print "Data este valida!";
} else {
print "Data nu este valida!";
}
?>
</body>
</html>
126
P H P
Capitolul 7
7. Transmiterea datelor
către scripturile PHP
127
Programarea în PHP
?variabila_1=valoare_1&variabila_2=valoare_2&...variab
ila_n=valoare_n.
Totuşi, acest sistem „manual” se foloseşte de regulă când vrem să
transmitem către scripturi un număr mic de valori. De asemenea, datorită
faptului că datele transmise sunt vizualizate în bara de adrese a
browserului, metoda „manuală” nu se folosește în cazul în care dorim ca
aceste date să rămână confidenţiale (de exemplu, nu se pot transmite
parole).
Prin facilităţile de comunicare oferite, formularul HTML rămâne
instrumentul principal de transmitere a datelor câtre scripturi. Capitolul 8
este dedicat în întregime descrierii principalelor etichete (tag-uri) ale unui
formular. În acest capitol însă, vom considera următoarea structură
simplificată de formular:
<form action="nume_script" method ="metoda">
<input type="tip" name="nume" value="valoare"
size="marime">
</form>.
unde:
ü nume_script este numele scriptului care prelucrează datele
transmise;
ü metoda reprezintă metoda de transmitere a datelor către scriptul de
prelucrare;
ü etichetele formular pot fi : input, textarea, select etc.
Metodele folosite pentru transmiterea datelor sunt GET și POST.
Utilizând metoda GET, datele sunt ataşate la adresa URL exact ca şi
în cazul transmiterii manuale. Din acest motiv, principalele neajunsuri ale
transmiterii manuale – lipsa confidenţialităţi, volumul limitat al datelor care
pot fi transmise, faptul că nu se pot transmite decât caractere ASCII – le
întâlnim şi în cazul metodei GET.
Spre deosebire de metoda „manuală” și de metoda GET, metoda
POST asigură confidenţialitatea transmiterii datelor, deoarece acestea nu
sunt vizualizate în bara browserului. Aceste avantaje o recomandă ca fiind
metoda favorită de transmitere a datelor către scripturi.
128
Capitolul 7. Transmiterea datelor către scripturile PHP
Scriptul 7.1
<html>
<head>
<title>Scriptul 7.1</title>
</head>
<body>
129
Programarea în PHP
Scriptul 7.2
<html>
<head>
<title>Scriptul 7.2</title>
</head>
<body>
<?php
$x=$_GET['x'];
$y=$_GET['y'];
echo "Rezultat comparatie: ";
if ($x < $y) {
print "Maximul dintre x=$x si y=$y este y=$y";
} else {
print "Maximul dintre x=$x si y=$y este x=$x";
}
?>
</body>
</html>
130
Capitolul 7. Transmiterea datelor către scripturile PHP
Scriptul 7.3
<html>
<head>
<title>Scriptul 7.3</title>
</head>
<body>
<form action="7.4.php" method ="POST">
<b>x=</b><input type="text" name="x" size="3"><br>
<b>y=</b><input type="text" name="y" size="3"><br>
<input type="submit" name="trimite" value ="Compara">
</form>
</body>
</html>
131
Programarea în PHP
Scriptul 7.4
<html>
<head>
<title>Scriptul 7.4</title>
</head>
132
Capitolul 7. Transmiterea datelor către scripturile PHP
133
Programarea în PHP
<b>x=</b><input
type="text"name="x"value="5"size="3"><br>
<b>y=</b><input
type="text"name="y"value="10"size="3"><br>
134
Capitolul 7. Transmiterea datelor către scripturile PHP
//Afiseaza formular
Scriptul 7.5
<?php
if (isset($_POST['trimite'])) {
$x=$_POST['x'];
$y=$_POST['y'];
echo "Suma numerelor x=$x si y=$y este=". ($x+$y);
}
?>
<html>
<head>
<title>Scriptul 7.5</title>
</head>
<body>
<h3>
Calculator pentru adunarea a doua numere
</h3>
<form action="<?php echo $_SERVER[PHP_SELF]?>" method
="POST" >
<br>x:<input type="text" name="x" size="8">
<br>y:<input type="text" name="y" size="8">
<br><input type="submit" name="trimite" value ="Trimite
datele de intrare" >
</form>
</body>
</html>
135
Programarea în PHP
Scriptul 7.6
<?php
if (isset($_POST['trimite'])) {
$x=$_POST['x'];
$y=$_POST['y'];
echo "Suma numerelor x=$x si y=$y este=". ($x+$y);
} else {
print '<html>
<head>
<title>7.6.php</title>
</head>
<body>
<h3>
Calculeaza suma a doua numere
136
Capitolul 7. Transmiterea datelor către scripturile PHP
137
P H P
Capitolul 8
8. Elemente de bază în
crearea formularelor
În secţiunile anterioare am folosit pentru exemplificarea schemei
transmiterii datelor către scriptul PHP, un exemplu simplu de formular,
insistând mai degrabă asupra înţelegerii acestei scheme decât asupra
varietăţii de prezentare a datelor prin astfel de formulare.
Deoarece formularele constituie modalitatea curentă de transmitere a
datelor către scripturi, în cele ce urmează ne propunem, să prezentăm
variantele cele mai frecvent folosite.
Toate elementele unui formular sunt cuprinse între etichetele
<form> și </form>. Eticheta <form> suportă mai multe atribute, cele
mai importante fiind action şi method. Plasarea lor în cadrul etichetei
form se face conform sintaxei:
<form action="actiune" method="metoda">
unde:
ü actiune specifică scriptul de prelucrare al formularului;
ü metoda specifică metoda HTTP folosită pentru transmiterea datelor
din formular.
De exemplu, construcţia de mai jos,
<form action="compara.php" method ="POST">
139
Programarea în PHP
140
Capitolul 8. Elemente de bază în crearea formularelor
141
Programarea în PHP
Efect: creează trei butoane radio unele sub altele (Figura 8.3).
Butoanele sunt plasate pe rânduri diferite datorită etichetei <br>. Se
observă că toate au acelaşi nume logic (name) şi anume, disciplina. La
un moment dat poate fi selectat doar unul dintre butoane. Adăugarea
atributului checked a condus la preselecţia butonului Informatica.
142
Capitolul 8. Elemente de bază în crearea formularelor
Efect: creează trei casete de validare aşezate unele sub altele (Figura
8.4). În cazul casetelor de validare, numele logic name poate avea valori
diferite și este posibilă selectarea mai multor butoane simultan. Dacă se
adaugă şi opţiunea checked, butonul respectiv poate fi preselectat.
În cazul de faţă sunt preselectate butoanele Ploiesti şi Targu
Jiu.
143
Programarea în PHP
144
Capitolul 8. Elemente de bază în crearea formularelor
unde:
ü nume_atasat_fisier reprezintă numele cu care va fi încărcat
fişierul pe server;
ü adresa_URL _fisier reprezintă adresa URL a fişierului care se
încarcă pe server;
ü multipart/form_data este metoda de criptare a datelor din
fişier.
Efect: permite selectarea unui fişier de pe calculatorul utilizatorului
şi încărcarea (uploadarea) lui pe server, după ce a fost apăsat butonul de
trimitere.
145
Programarea în PHP
unde:
ü nume este numele zonei de text;
ü linii reprezintă numărul de rânduri de text vizibile;
ü coloane reprezintă numărul de coloane care înmulţite cu lăţimea
medie a unui caracter furnizează lăţimea vizibilă a textului;
ü aranjare este un parametru care specifică formatul afişării.
Exemplu
<b> Comentarii </b> <br>
<textarea name ="Comentarii" rows="5"
cols="30"></textarea>
146
Capitolul 8. Elemente de bază în crearea formularelor
Exemplu
Selecteaza o culoare<br>
<select name = "culoare" size = "3" multiple>
<option value = "Rosu"> Rosu </option>
<option value = "Galben"> Galben </option>
<option value = "Albastru"> Albastru </option>
<option value = "Verde"> Verde </option>
<option value = "Alb"> Alb </option>
</select>
147
Programarea în PHP
148
P H P
Capitolul 9
9. Funcţii
O funcţie este o porţiune de cod, organizată sub un nume, care poate
fi apelată şi executată ori de câte ori este nevoie. Funcţiile permit crearea
unor programe clare şi elegante.
Funcţiile pot fi predefinite şi definite de utilizator. Funcţiile
predefinite pot fi apelate şi utilizate în orice script. Utilizarea unei funcţii
presupune cunoştinţe minimale: ce face funcţia, cum se apelează, cum
avem acces la rezultatele returnate (întoarse) de ea. Felul în care funcţia
este proiectată pentru a-şi îndeplini sarcinile nu prezintă, de obicei, interes
pentru utilizator. Limbajul PHP are implementate câteva sute de funcţii
predefinite, deosebit de utile în uşurarea muncii de programare. Iată câteva
exemple: abs() pentru calculul valorii absolute a unui număr real,
count() şi sizeof() pentru aflarea numărului de elemente ale unui
vector, strcmp()pentru compararea lexicografică a două şiruri etc.
Limbajul PHP oferă posibilitatea programatorului să-şi creeze
propriile funcţii, numite funcţii utilizator.
Sintaxa unei funcţii PHP este următoarea:
function nume_functie(lista_de_argumente_formale){
//corpul functiei
}
149
Programarea în PHP
unde:
ü nume_functie este numele funcţiei pe care dorim să o definim;
ü lista_de_argumente_formale conţine variabilele care vor
prelua valori pentru a fi prelucrate sau adrese de variabile;
ü corpul functiei reprezintă codul funcţiei.
Observaţii
ü Identificatorul nume_functie se formează după regulile de
formare a numelor de variabilă. Spre deosebire de acestea, nu
necesită însă semnul dolar ca prefix şi nu depind de capitalizare. De
exemplu, afisare() şi Afisare() desemnează aceeaşi funcţie.
ü Este posibil ca lista de argumente să fie vidă. Chiar şi în aceste
condiţii parantezele trebuie să fie prezente: se va scrie Afisare() şi
nu Afisare.
Apelul unei funcţii se face sub forma:
nume_functie(lista_de_argumente_efective);
unde lista_de_argumente_efective reprezintă valori sau expresii
ale căror valori vor fi transmise funcţiei.
În urma apelului, funcţia poate să returneze sau nu o valoare.
Un exemplu simplu de funcţie care nu întoarce o valoare este
prezentat în scriptul 9.1.php:
Scriptul 9.1
<html>
<head>
<title >Scriptul 9.1</title>
</head>
<body>
<?php
function MesajEroare() {
echo "Eroare!";
}
MesajEroare();
?>
</body>
</html>
150
Capitolul 9. Funcţii
Scriptul 9.2
<html>
<head>
<title>Scriptul 9.2</title>
</head>
<body>
<?php
function MesajEroare() {
return "Eroare!";
}
echo MesajEroare();
?>
</body>
</html>
Scriptul 9.3
<html>
<head>
<title>Scriptul 9.3</title>
</head>
<body>
<?php
function Anotimp($luna) {
switch ($luna) {
case 12: ;
case 1: ;
151
Programarea în PHP
Scriptul 9.4
<html>
<head>
<title>Scriptul 9.4</title>
</head>
<body>
<?php
function LuniAnotimp($Anotimp){
switch($Anotimp) {
case "Primavara" :
return array("Martie","Aprilie", "Mai");
break;
case "Vara" :
return array("Iunie","Iulie", "August");
break;
case "Toamna" :
return array("Septembrie","Octombrie",
"Noiembrie"); break;
case "Iarna" :
return array("Decembrie","Ianuarie",
"Februarie");
}
}
152
Capitolul 9. Funcţii
Scriptul 9.5
<html>
<head>
<title>Scriptul 9.5</title>
</head>
<body>
<?php
function SituatieStudent($Anl,$Alg,$Mec,$Prag){
$media=($Anl+$Alg+$Mec)/3;
return ($media>=$Prag)?"Admis!":"Respins!";
}
$Anl=6;$Alg=9;$Mec=5;
$Prag=7;
echo "Situatie
student:".SituatieStudent($Anl,$Alg,$Mec,$Prag);
?>
</body>
</html>
153
Programarea în PHP
Scriptul 9.6
<html>
<head>
<title>Scriptul 9.6</title>
</head>
<body>
<?php
function SituatieStudent($Anl,$Alg,$Mec,$Prag=5){
$media=($Anl+$Alg+$Mec)/3;
return ($media>=$Prag)?"Admis!":"Respins!";
}
$Anl=6;$Alg=9;$Mec=5;
echo "Situatie student pentru pragul de admitere egal cu
5:".SituatieStudent($Anl,$Alg,$Mec);
$Prag=7;
echo "<br>Situatie student pentru pragul de admitere egal
cu 7:".SituatieStudent($Anl,$Alg,$Mec,$Prag);
?>
</body>
</html>
154
Capitolul 9. Funcţii
Scriptul 9.7
<html>
<head>
<title>Scriptul 9.7</title>
</head>
<body>
<?php
$x=32;
echo "In script x=$x<br>";
function Mesaj1() {
$x=100;
echo "In functia Mesaj1(), x=$x<br>";
}
function Mesaj2(){
echo "\nIn functia Mesaj2(), x=$x<br>";
}
Mesaj1();
Mesaj2();
?>
</body>
</html>
155
Programarea în PHP
Scriptul 9.8
<html>
<head>
<title>Scriptul 9.8</title>
</head>
<body>
<?php
$x=32;
echo "In script x=$x<br>";
function Mesaj1(){
$x=100;
echo "In functia Mesaj1(), x=$x<br>";
}
function Mesaj2() {
global $x;
echo "In functia Mesaj2(), x=$x<br>";
}
Mesaj1();
Mesaj2();
?>
</body>
</html>
156
Capitolul 9. Funcţii
Scriptul 9.9
<html>
<head>
<title>Scriptul 9.9</title></head>
<body>
<?php
function afisare_rand() {
157
Programarea în PHP
echo "<br>";
for ($i=1; $i<=5; $i++) {
afisare_rand();
}
?>
</body>
</html>
static $i=1;
Scriptul 9.10
<html>
<head>
<title >Scriptul 9.10</title>
</head>
158
Capitolul 9. Funcţii
159
Programarea în PHP
Scriptul 9.11
<html>
<head>
<title>Scriptul 9.11</title>
</head>
<body>
<?php
if (isset($_POST['trimite'])){
function comut($x,$y) {
$z=$x;
$x=$y;
$y=$z;
}
$a=$_POST['a'];
$b=$_POST['b'];
comut($a,$b);
echo "valorile comutate sunt:a=$a, b=$b ";
}
?>
<html>
<form action="<?php echo $_SERVER[PHP_SELF]?>" method
="POST" >
<br> a=<input type="text" name="a" value =3 size="3">
<br> b=<input type="text" name="b" value =5 size="3">
<br> <input type="submit" name="trimite" value ="Trimite
datele de intrare">
</form>
</html>
160
Capitolul 9. Funcţii
Script Comut1()
$a = 3 $x = 3 5
$b = 5 $y = 5 3
Script Comut2()
5
$a → 3 ← $x
$b → 5 ← $y
3
Figura 9.2. Transfer prin referinţă
161
P H P
Capitolul 10
function SetNote($x,$y) {
global $NotaInf, $NotaMat;
$NotaMat=$x;
163
Programarea în PHP
function AfisNote() {
global $NotaInf, $NotaMat ;
return "Nota la Matematica
este:".$NotaMat."<br>"."Nota la Informatica
este:".$NotaInf;
}
function MediaArit() {
global $NotaInf, $NotaMat;
return ($NotaInf+$NotaMat)/2;
}
function MesajMedieArit() {
return "<br>Media aritmetica este:";
}
function MediaGeom() {
global $NotaInf, $NotaMat;
return sqrt($NotaInf*$NotaMat);
}
function MesajMedieGeom() {
return "<br>Media geometrica este:" ;
}
$x=3;
$y=7;
SetNote($x,$y);
echo AfisNote();
echo MesajMedieArit().MediaArit();
echo MesajMedieGeom().MediaGeom();
?>
</body>
</html>
164
Capitolul 10. Clase şi obiecte
unde:
ü class şi var sunt cuvinte cheie;
ü nume_clasa este numele clasei; aceasta poate fi orice identificator
acceptat în PHP, cu excepţia cuvântului rezervat stdtclass;
ü nume_variabila_i,i=1,2,…,n şi definitie-functie_i,
i=1,2,…,m sunt nume de variabile şi respectiv definiţii de funcţii
PHP. O clasă poate conţine numai nume de variabile, numai nume de
funcţii sau atât nume de variabile cât şi definiţii de funcţii.
Scriptul 10.2
<html>
<head>
<title>Scriptul 10.2</title>
</head>
<body
<?php
165
Programarea în PHP
class MediaAritmetica {
function Media() {
global $NotaInf, $NotaMat;
return ($NotaInf+$NotaMat)/2;
}
function MesajMedie() {
return "<br>Media aritmetica a notelor
este:";
}
}
class MediaGeometrica {
function Media() {
global $NotaInf, $NotaMat;
return sqrt($NotaInf*$NotaMat);
}
function MesajMedie() {
return "<br>Media geometrica a notelor
este:" ;
}
}
$x=3;
$y=7;
Setari::SetNote($x,$y);
echo Setari::AfisNote();
echo MediaAritmetica::MesajMedie();
echo MediaAritmetica::Media();
echo MediaGeometrica::MesajMedie();
echo MediaGeometrica::Media();
?>
</body>
</html>
166
Capitolul 10. Clase şi obiecte
Observaţii
ü Fiecare clasă defineşte un domeniu propriu de vizibilitate. Acest
lucru permite ca variabilele sau funcţiile aflate în clase diferite să
poată avea aceleaşi nume. De exemplu, în programul de mai sus,
funcţiile MediaArit() şi MediaGeom() sunt numite acum
Media(), iar funcţiile MesajMedieArit() şi
MesajMedieGeom() sunt redenumite MesajMedie().Se
observă că funcţiile din două clase diferite (clasele
MediaAritmetică şi MediaGeometrică) pot avea aceleaşi
nume. Din acest motiv, clasele pot fi proiectate separat fără teama de
a apare conflicte de nume.
ü Referirea la variabilele sau funcţiile unei clase din afara acesteia se
face cu ajutorul operatorului de rezoluţie (sau a operatorului scope)
:: sub forma:
nume_clasa::nume_functie
sau
nume_clasa::nume_variabila
De exemplu, în programul de mai sus, funcţia SetNote() este
apelată sub forma Setari::SetNote();
Scriptul 10.3
<html>
<head>
<title>Scriptul 10.3</title>
</head>
<body>
<?php
class Student {
167
Programarea în PHP
Până acum, clasele au fost folosite doar pentru a organiza mai bine
funcţiile unui program. Adevărata putere a noţiunii de clasă apare însă în
momentul în care clasa este folosită ca un tip de date. În această viziune,
obiectul se defineşte ca o instanţă a unei clase, sau mai simplu, ca o
variabilă al cărei tip este o clasă.
Scriptul 10.4.php, prezentat în continuare, conţine clasa Student cu
proprietăţile $NotaInf şi $NotaMat. Definirea obiectului $Student1 ca
instanţă a acestei clase se face cu ajutorul operatorului new, conform
sintaxei:
$variabila_obiect=new nume_clasa();
Proprietăţile $NotaInf şi $NotaMat din clasa Student sunt
iniţializate cu două constante, 7 respectiv 8. În general o proprietate a unei
clase poate fi iniţializată cu o constantă folosind sintaxa:
var nume_proprietate=constanta;
Constanta poate fi un scalar, un vector sau un obiect.
Scriptul 10.4
<html>
<head>
<title>Scriptul 10.4</title>
</head>
<body>
<?php
class Student {
var $NotaInf=7;
168
Capitolul 10. Clase şi obiecte
function Mesaj() {
return "Media aritmetica = ";
}
}
$Student1=new Student();
echo "<br>NotaInf=".$Student1->NotaInf;
echo "<br>NotaMat=".$Student1->NotaMat;
$MediaArit=($Student1->NotaInf+$Student1->NotaMat)/2;
echo "<br>".$Student1->Mesaj() . $MediaArit;
?>
</body>
</html>
169
Programarea în PHP
nume_obiect → nume_metoda.
Scriptul 10.5
<html>
<head>
<title>Scriptul 10.5</title></head>
<body>
<?php
class Student {
var $NotaInf=7;
var $NotaMat=8;
function Mesaj() {
return "Media aritmetica = ";
}
}
$Student1=new Student();
$Student1->NotaInf=9;
$Student1->NotaMat=10;
echo "<br>NotaInf=".$Student1->NotaInf;
echo "<br>NotaMat=".$Student1->NotaMat;
$MediaArit=($Student1->NotaInf+$Student1->NotaMat)/2;
echo "<br>".$Student1->Mesaj() . $MediaArit;
?>
</body>
</html>
170
Capitolul 10. Clase şi obiecte
Scriptul 10.6
<html>
<head>
<title>Scriptul 10.6</title></head>
<body>
<?php
class Student {
var $NotaInf;
var $NotaMat;
function Media() {
return ($this->NotaInf+$this->NotaMat)/2;
}
}
$Student1=new Student();
$Student1->NotaInf=7;
$Student1->NotaMat=9;
echo "<br>Media=".$Student1->Media();
$Student2=new Student();
$Student2->NotaInf=10;
$Student2->NotaMat=6;
171
Programarea în PHP
?>
</body>
</html>
Scriptul 10.7
<html>
<head>
<title>Scriptul 10.7</title>
</head>
<body>
<?php
class Student {
var $NotaInf=7;
var $NotaMat=8;
function Media(){
return ($this->NotaInf+$this->NotaMat)/2;
}
function SetNote($x,$y) {
$this->NotaMat=$x;
$this->NotaInf=$y;
}
}
$Student1=new Student();
echo "<br>Media=".$Student1->Media();
$x=9; $y=10;
$Student1->SetNote($x,$y);
echo "<br>Media=".$Student1->Media();
?>
</body>
</html>
172
Capitolul 10. Clase şi obiecte
10.3.3. Constructori
Un constructor este o metodă care are acelaşi nume cu clasa din care
face parte. Constructorul este apelat automat la fiecare generare a unui
obiect. Această particularitate a sa permite folosirea constructorilor ca
mijloace elegante de iniţializare a proprietăţilor unui obiect. Pentru
exemplificare, prezentăm mai jos scriptul 10.8.php.
Scriptul 10.8
<html>
<head>
<title>Scriptul 10.8</title>
</head>
<?php
class Student {
var $NotaInf=7;
var $NotaMat=8;
function Media() {
return ($this->NotaInf+$this->NotaMat)/2;
}
function Student($x,$y) {
$this->NotaMat=$x;
$this->NotaInf=$y;
}
}
$x=9; $y=10;
$Student1=new Student($x,$y);
echo "Media=".$Student1->Media();
?>
</body>
</html>
Observaţii
ü Acest script este de fapt scriptul 10.7.php modificat .
ü Numele funcţiei SetNote() a fost schimbat în Student(), adică
s-a definit un constructor al clasei.
ü Funcţia Student() nu este apelată în mod explicit pentru a iniţializa
proprietăţile obiectului Student1. Apelul acesteia a fost realizat automat prin
173
Programarea în PHP
Scriptul 10.9
<html>
<head>
<title>Scriptul 10.9</title>
</head>
<body>
<?php
class Student {
var $NotaInf;
var $NotaMat;
function Media() {
return ($this->NotaInf+$this->NotaMat)/2;
}
function Student($x,$y){
$this->NotaMat=$x;
$this->NotaInf=$y;
}
function Afisare() {
return "Media este:".$this->Media();
}
}
$Student1=new Student(10,6);
echo $Student1->Afisare();
?>
</body>
</html>
174
Capitolul 10. Clase şi obiecte
Scriptul 10.10
<html>
<head>
<title>Scriptul 10.10</title>
</head>
<body>
<?php
class Student {
var $NotaInf;
var $NotaMat;
function Media() {
return ($this->NotaInf+$this->NotaMat)/2;
}
function Student($x,$y) {
$this->NotaMat=$x;
$this->NotaInf=$y;
}
}
class PrimireObiectSiAfisare {
var $student;
function PrimireObiectsiAfisare($student) {
$this->student=$student;
}
function Afisare() {
return "Media=".$this->student->Media();
}
}
$Student1=new Student(9,10);
$transfer=new PrimireObiectSiAfisare($Student1) ;
echo $transfer->Afisare();
?>
</body>
</html>
175
Programarea în PHP
10.4. Moştenirea
176
Capitolul 10. Clase şi obiecte
Scriptul 10.11
<html>
<head>
<title>Scriptul 10.11</title>
</head>
<body
<?php
class SSuma {
function suma($n,$x) {
177
Programarea în PHP
$ob=new MMedia();
$n=rand(3,4);
echo "n=".$n;
for ($i=0; $i<$n; $i++) {
$x[$i]=rand(2,50);
echo "<br>x[$i]=".$x[$i];
}
echo "<br>Media=".$ob->medie($n,$x);
?>
</body>
</html>
În cazul în care în cele două clase, clasa copil şi clasa părinte există
proprietăţi sau metode cu acelaşi nume, atunci proprietăţile și metodele
clasei_copil vor suprascrie (redefini) proprietăţile și metodele
corespunzătoare clasei_parinte. Astfel, de exemplu, la apelul unei
metode comune ambelor clase, se va apela întotdeauna metoda din clasa
copil. În scriptul 10.12.php listat mai jos, metoda medie() este comună
claselor SumProd și MMedia. Apelul metodei medie() prin intermediul
obiectului $mediarit al clasei_copil MMedie se referă la metoda
medie() a clasei MMedie. Accesul direct la metoda medie() a clasei
părinte SumProd se poate realiza, de exemplu, prin intermediul obiectului
$mediageom al acestei clase.
178
Capitolul 10. Clase şi obiecte
Scriptul 10.12
<html>
<head>
<title>Scriptul 10.12</title>
</head>
<body
<?php
class SumProd {
function suma($n,$x) {
for ($i=0,$s=0; $i<$n; $i++) {
$s+=$x[$i];
}
return $s;
}
function prod($n,$x) {
for ($i=0,$p=1; $i<$n; $i++) {
$p*=$x[$i];
}
return $p;
}
function medie($n,$x) {
$z=$this->prod($n,$x);
return exp((1/$n)*log($z));
}
}
179
P H P
Capitolul 11
181
Programarea în PHP
Scriptul 11.1
<?php
$x=6;
?>
<html>
<head>
<title>Scriptul 11.1</title>
</head>
<body>
<form action="S11.2.php" method ="POST" >
<input type="hidden" name="x" value=<?php echo $x?>
size="3">
<input type="submit" name="trimite" value="Trimite datele
">
</form>
</body>
</html>
Scriptul 11.2
<html>
<head>
<title>Scriptul 11.2</title>
</head>
<body
<?php<
print '<br> Suntem in scriptul 11.2.php! ';
print '<br>Valoarea transmisa din scriptul 11.1.php este
x='.$_POST["x"];
?>
</body>
</html>
182
Capitolul 11. Persistenţa datelor utilizând câmpuri ascunse, cookie-uri, sesiuni
Observaţii
ü Execuţia scriptului 11.1.php va avea ca efect afişarea butonului de de
trimitere a datelor către scriptul 11.2.php; evident, valoarea ascunsă nu
va fi afişată!
ü Valoarea ascunsă $x=6, trimisă în scriptul 11.2.php, este accesibilă prin
intermediul variabilei globale .$_POST["x"] şi apoi afişată. În urma
execuţiei scriptului 11.2.php se vor afişa mesajele :
Suntem in scriptul 11.2.php!
Valoarea transmisa din scriptul 11.1.php este x=6
Scriptul 11.3
<html>
<head>
<title>Scriptul 11.3</title>
</head>
<body>
</form>
</body>
<form action="11.4.php" method ="POST" ><br>
Tasteaza n=<input type="text" name="n" value ="" size="3">
<br>
<input type="submit" name="trimite" value ="Trimite n" >
</form>
</body>
</html>
Scriptul 11.4
<html>
<head>
<title>Scriptul 11.4</title>
</head>
<body>
<?php
if (isset($_POST['n']) && is_numeric($_POST['n'])) {
$n=$_POST['n'];
if (!isset($_POST['trimit'])) {
183
Programarea în PHP
184
Capitolul 11. Persistenţa datelor utilizând câmpuri ascunse, cookie-uri, sesiuni
185
Programarea în PHP
186
Capitolul 11. Persistenţa datelor utilizând câmpuri ascunse, cookie-uri, sesiuni
Observaţii
ü Un site poate trimite unui utilizator maxim 20 cookie-uri fiecare
având o limită maximă de 4 kb. De exemplu, putem avea:
setcookie("culoare", "alb", ",",0);
setcookie("saptamana", "marti");
etc.
ü Dacă dorim să ignorăm un argument, atunci acesta trebuie să aibă
valoarea 0 dacă este de tip întreg, sau un şir vid (''sau""), dacă
este de tip string. Astfel, în exemplul de mai sus, dacă punem
valoarea 0 în loc de valoarea time()+3600, argumentul va fi
ignorat, iar cookie-ul creat va fi disponibil doar în timpul sesiunii de
lucru respective.
ü Dacă se lucrează cu browserul Internet Explorer cookie-urile sunt
creeate într-un director numit “cookies”.
ü Numele unui cookie poate fi componenta unei variabile de tip
array. Astfel, culoare şi saptamana pot fi, respectiv, indicii a
două componente ale unui tablou tab, după cum urmează:
setcookie("tab[culoare] ", "alb", ",",0);
setcookie("tab[saptamana] ","marti");
187
Programarea în PHP
Scriptul 11.5
<?php
setcookie('x','5',time()+60);
?>
<html>
<head>
<title>Scriptul 11.5</title>
</head>
<body>
<?php
print 'Valoarea din cookie este:'.$_COOKIE['x'];
?>
</body>
</html>
</html>
188
Capitolul 11. Persistenţa datelor utilizând câmpuri ascunse, cookie-uri, sesiuni
Scriptul 11.6
<html>
<head>
<title>Scriptul 11.6</title>
</head>
<body>
<?php
print 'Valoarea x in scriptul 11.6 este:'.$_COOKIE['x'];
?>
</body>
</html>
</html>
va produce rezultatul:
Valoarea x in scriptul 11.6 este:5
189
Programarea în PHP
Scriptul 11.7
<html>
<head>
<title>Scriptul 11.7</title>
</head>
<body>
<?php
setcookie('x','',time()-120);
print 'Valoarea din cookie dupa stergere este:
'.$_COOKIE['x'];
?>
</body>
</html>
</html>
190
Capitolul 11. Persistenţa datelor utilizând câmpuri ascunse, cookie-uri, sesiuni
Scriptul 11.8
<?php
if (!isset($_COOKIE['contor'])) {
setcookie('contor','1');
print 'Scriptul a fost apelat 1 data ';
} else {
//prelucrari script
$_COOKIE['contor']+=1;
setcookie('contor',$_COOKIE['contor']);
print "Scriptul 11.8 a fost apelat de
{$_COOKIE['contor']} ori";
}
?>
<html>
<head>
<title>Scriptul 11.8</title>
</head>
<body>
<!-- prelucrari script-->
</body>
</html>
</html>
11.3. Sesiuni
Când un utilizator răsfoieşte paginile unui site, de cele mai multe ori
are nevoie de un mecanism care să-i permite accesul la anumite informaţii,
indiferent de pagina pe care o traversează.
Sesiunile reprezintă o soluţie alternativă la folosirea cookie-urilor în
revolvarea acestei probleme. În esenţă, mecanismul de lucru al unei sesiuni
este următorul. În momentul când utilizatorul accesează pagina unui site
care beneficiază de o astfel de facilitate, se iniţiază o sesiune care are ca
efect generarea aleatoare a unui identificator unic de sesiune (ID). Acest ID
191
Programarea în PHP
Un fişier temporar care are acelaşi nume cu ID-ul generat este creat
pe server. Acest fișier permite memorarea sub forma unor variabile de
sesiune a informaţiilor care se doresc a fi accesibile şi din alte pagini ale
site-ului. Când se vizitează o astfel de pagină, în cadrul aceleiaşi sesiuni de
lucru, prin intermediul ID-ului prezent în cookie-ul PHPSESSID se
accesează fişierul temporar cu acelaşi nume de pe server. Informaţiile
memorate în acest fișier tempoar devin astfel accesibile, prin intermediul
variabilelor de sesiune, și celorlalte pagini ale site-ului.
Unul din punctele forte ale sesiunilor constă în stabilirea
identificatorului unic ID pentru utilizatorul de sesiune. În felul acesta,
utilizatorul este recunoscut sub acest „nume” în toate paginile dorite ale
site-ului. Faptul că acest ID este memorat într-un cookie, face metoda
dependentă de browser, în sensul că acesta ar putea să accepte sau nu
cookie-uri. Pentru a fi siguri că metoda funcţionează chiar şi atunci când
browserul nu acceptă cookie-uri există posibilitatea de a transmite
identificatorul de sesiune (ID) de la o pagină la alta adăugându-l într-o
referinţă, ca în exemplul de mai jos, sub forma
<a href="Paginak.php?<?php echo SID;?>">Acceseaza o
pagina cu SID adaugat la URL</a>
192
Capitolul 11. Persistenţa datelor utilizând câmpuri ascunse, cookie-uri, sesiuni
193
Programarea în PHP
194
Capitolul 11. Persistenţa datelor utilizând câmpuri ascunse, cookie-uri, sesiuni
195
Programarea în PHP
Scriptul 11.9
<php
session_start()
?>
<html>
<head>
<title>Scriptul 11.9</title>
</head>
<body>
<?php
if (isset($_POST["trimite"])) {
print '<p>Identificatorul de sesiune(ID)
este:'.session_id().'</p>';
print '<p>Numele sesiunii este:'.session_name().'</p>';
print '<p>Directorul sesiunii curente
este:'.session_save_path("D:\wamp").'</p>';
print '<p>SID este :'.SID.'</p>';
$_SESSION["x"]=$_POST["x"];
$_SESSION["y"]=$_POST["y"];
print 'Variabilele de sesiune sunt:x='.$_SESSION["x"].'
si y='.$_SESSION["y"];
print '<br><p> <a href= "11.10.php">Vezi sesiune</a>
</p>';
} else {
print "<form action=\"$_SERVER[PHP_SELF]\" method
=\"POST\" ><br>
x:<input type=\"text\" name=\"x\" value =3
size=\"3\"><br>
y:<input type=\"text\" name=\"y\" value =7
size=\"3\"><br>
<input type=\"submit\" name=\"trimite\" value
=\"Trimite datele de intrare\">
</form>";
}
?>
</body>
</html>
196
Capitolul 11. Persistenţa datelor utilizând câmpuri ascunse, cookie-uri, sesiuni
Scriptul 11.10
<?php
session_start();
?>
<html>
<head>
<title>Scriptul 11.10</title>
</head>
<body>
<?php
print 'Identificatorul de sesiune
este:'.session_id().'<br>';
print 'In scriptul 11.10.php,variabilele de sesiune
sunt:x='.$_SESSION["x"].' si y='.$_SESSION["y"];
?>
</body>
</html>
197
Programarea în PHP
198
Capitolul 11. Persistenţa datelor utilizând câmpuri ascunse, cookie-uri, sesiuni
Scriptul 11.11
<?php
session_start();
?>
<html>
<head>
<title>Scriptul 11.11</title>
</head>
<body
<?php
$_SESSION['traseu'][]='A ';
print '<p> <a href= "11.11.php">A </a></p>';
print '<p> <a href= "11.12.php">B </a> </p>';
print '<p> <a href= "11.13.php">C</a></p>';
print '<p> <a href= "11.14.php">Traseu parcurs</a></p>';
?>
</body>
</html>
Scriptul 11.12
<?php
session_start();
?>
<html>
<head>
<title>Scriptul 11.12</title>
</head>
199
Programarea în PHP
Scriptul 11.13
<?php
session_start();
?>
<html>
<head>
<title>Scriptul 11.13</title>
</head>
<body
<?php
$_SESSION['traseu'][]='C ';
print '<p> <a href= "11.11.php">A</a></p>';
print '<p> <a href= "11.12.php">B</a> </p>';
print '<p> <a href= "11.13.php">C</a></p>';
print '<p> <a href= "11.14.php">Traseu parcurs</a></p>';
?>
</body>
</html>
Scriptul 11.14
<?php
session_start();
$n=count($_SESSION['traseu']);
?>
<html>
<head>
<title>Scriptul 11.14</title>
</head>
<body
<?php
print '<p> <a href= "11.11.php">A</a></p>';
print '<p> <a href= "11.12.php">B</a></p>';
200
Capitolul 11. Persistenţa datelor utilizând câmpuri ascunse, cookie-uri, sesiuni
201
Programarea în PHP
Login
Logout
AfisareUser
Scriptul 11.15
<?php
// Acest script permite logarea la mini-site
setcookie('autorizare',"1");
setcookie('nume',"user");
?>
<html>
<head>
<title>Scriptul 11.15</title>
</head>
<body>
<?php
if (isset($_POST['trimite'])) {
202
Capitolul 11. Persistenţa datelor utilizând câmpuri ascunse, cookie-uri, sesiuni
Scriptul 11.16
<?php
// Acest script realizeaza delogarea
setcookie('autorizare',"",time()-120);
?>
<html>
<head>
<title>Scriptul 11.16</title>
</head>
<body>
<?php
print 'Sesiune de lucru terminata!';
print '<br><a href="S11.15.php">Login</a><br>
<a href="S11.16.php">Logout</a><br>
<a href="S11.17.php">AfisareUser </a><br>';
?>
</body>
</html>
203
Programarea în PHP
Scriptul 11.17
<html>
<head>
<title>Scriptul 11.17</title>
</head>
<body>
<?php
//Acest script testeaza daca utilizatorul este autorizat
if($_COOKIE['autorizare']=="1") {
print 'Acces autorizat la aceasta pagina pentru domnul
'.$_COOKIE["nume"];
} else {
print 'Acces interzis1 Mergeti la pagina de Login<br>' ;
}
print '<br><a href="S11.15.php">Login</a><br>
<a href="S11.16.php">Logout</a><br>
<a href="S11.17.php">AfisareUser </a><br>';
?>
</body>
</html>
Scriptul 11.18
<?php
// Acest script permite logarea la mini-site
session_start();
?>
<html>
<head>
<title>Scriptul 11.18</title>
</head>
<body>
<?php
if (isset($_POST['trimite'])) {
if( !empty($_POST['nume']) && !empty($_POST['parola']))
{
if ($_POST['nume'] == 'user' && $_POST['parola'] ==
'password') {
$_SESSION['nume']=$_POST['nume'];
204
Capitolul 11. Persistenţa datelor utilizând câmpuri ascunse, cookie-uri, sesiuni
Scriptul 11.19
<?php
// Acest script realizeaza delogarea
session_start();
?>
<html>
<head>
<title>Scriptul S11.19</title>
</head>
<body>
<?php
unset($_SESSION);
session_destroy();
print 'Sesiune de lucru terminata!';
print '<br><a href="S11.18.php">Login</a><br>
<a href="S11.19.php">Logout</a><br>
<a href="S11.20.php">AfisareUser </a><br>';
?>
</body></html>
205
Programarea în PHP
Scriptul 11.20
<?php
//Acest script testeaza daca utilizatorul este autorizat
session_start();
?>
<html>
<head>
<title>Scriptul 11.20</title>
</head>
<body>
<?php
if (($_SESSION["nume"]=='user')&&
($_SESSION["parola"]=='password')) {
print 'Acces autorizat la aceasta pagina pentru domnul
'.$_SESSION["nume"];
} else {
print 'Acces interzis1 Mergeti la pagina de Login<br>' ;
}
print '<br><a href="S11.18.php">Login</a><br>
<a href="S11.16.php">Logout</a><br>
<a href="S11.17.php">AfisareUser </a><br>';
?>
206
P H P
Capitolul 12
12. Fişiere
În acest capitol prezentăm funcţiile de bază care permit crearea şi
exploatarea datelor fişierelor PHP.
207
Programarea în PHP
208
Capitolul 12. Fişiere
$fp=fopen(nume_fisier, mod)
if ($fp){
//prelucrari
}
sau
if ($fp=fopen(nume_fisier, mod)){
//prelucrari
}
sau
$fp=fopen(nume_fisier, mod) or die ("Nu se poate
deschide fisierul!");
209
Programarea în PHP
Scriptul 12.1
<html>
<head>
<title>Scriptul 12.1</title>
</head>
<body>
<?php
$fis="test.txt";
$f=fopen($fis,'w') or die("Nu se poate deschide fisierul
$fis");
210
Capitolul 12. Fişiere
Scriptul 12.2
<html>
<head>
<title>Scriptul 12.2</title>
</head>
<body>
<?php
if (isset($_POST["trimite"])) {
$f=fopen('a.txt','a') or die('Nu se poate deschide
fisierul a.txt!');
$randul=$_POST["randul"];
fwrite($f,"$randul\r\n" ) or die('Nu se poate scrie in
fisierul a.txt!');
echo "S-a scris in fisier sirul de caracterele
".$_POST["randul"];
fclose($f);
} else {
print '<form action="12.2.php" method ="POST">
<br>Sirul:<input type="text" name="randul" size="20">
<br><input type="submit" name="trimite" value ="Trimite
datele de intrare">';
}
?>
</body>
</html>
211
Programarea în PHP
Scriptul 12.3
<html>
<head>
<title>Scriptul 12.3</title>
</head>
<body>
<?php
if (!isset($_POST["trimite"])) {
$k=0;
$n=5;
echo "n=$n";
} else {
$f=fopen('a.txt','a') or die('Nu se poate deschide
fisierul a.txt!');
$randul=$_POST["randul"];
fwrite($f,"$randul\r\n" ) or die('Nu se poate scrie in
fisierul a.txt!');
$k=$_POST['k']+1;
$n=$_POST['n'];
if ($k==$n) {
fclose($f);
echo "$k siruri de caractere au fost scrise in
fisierul a.txt!";
exit();
}
}
?>
212
Capitolul 12. Fişiere
213
Programarea în PHP
ü flag – este un parametru opţional care poate lua diferite valori (de
exemplu, FILE_APPEND pentru adăugare în fişier, LOOKEY pentru
blocarea fişierului etc.).
În caz de succes, funcţia întoarce numărul de octeţi scrişi în fişier, iar
în caz contrar valoarea False.
În continuare, vom ilustra utilizarea funcţiei
file_puts_contents() prin două exemple: în primul exemplu se scrie
în fişier un şir de caractere, iar în al doilea un vector.
Scriptul 12.4.php, prezentat mai jos, realizează scrierea unui şir de
caractere într-un fişier. Scriptul este este o copie a scriptului 12.3.php, în
care cele trei funcţii fopen(), fwrite() şi fclose() au fost înlocuite
cu funcţia file_put_contents. Se observă şi prezenţa parametrului
FILE_APPEND care permite adăugarea datelor noi la cele deja prezente în
fişier.
Scriptul 12.4
<html>
<head>
<title>Scriptul 12.4</title>
</head>
<body>
<?php
if (!isset($_POST["trimite"])) {
$k=0;
$n=5;
echo "n=$n";
} else {
$randul=$_POST["randul"];
file_put_contents('a.txt',"$randul\r\n",FILE_APPEND );
$k=$_POST['k']+1;
$n=$_POST['n'];
if ($k==$n) {
echo "$k siruri de caractere au fost scrise in
fisierul a.txt!";
exit();
}
}
?>
<form action="<?php echo $_SERVER[PHP_SELF]?>" method
="POST" >
<br>Sirul:<input type="text" name="randul" size="20">
<input type="hidden" name="k" value ="<?php echo $k ?>" >
<input type="hidden" name="n" value ="<?php echo $n ?>" >
214
Capitolul 12. Fişiere
Scriptul 12.5
<html>
<head>
<title>Scriptul 12.5</title>
</head>
<body>
<?php
$z=array('a'=>3,'b'=>8,'c'=>7);
file_put_contents('a.txt',$z,FILE_APPEND );
echo "Au fost scrise in fisier componentele vectorului:
{$z['a']},{$z['b']} si {$z['c']}";
?>
</body>
</html>
215
Programarea în PHP
unde:
ü fp este pointerul fişierului;
ü operatie poate lua una din următoarele valori: LOCK_SH,
LOCK_EX, LOCK_UN sau LOCK_NB
Tipurile uzuale de blocaj sunt:
ü partajat – permite altor procese să citească din fişier, dar nu
permite scrierea (se foloseşte la citirea din fişier). Constanta folosită
este LOCK_SH;
ü exclusiv – nu permite altor procese scrierea sau citirea din fisier
(se foloseşte la scrierea în fişier). Constanta folosită este LOCK_EX;
ü eliminare blocaj – elimină blocajul partajat sau exclusiv asupra
fişierului. Se foloseşte constanta LOCK_UN.
Funcţia are efect dacă este utilizată de toate scripturile care scriu sau
citesc din fişier.
Exemplu. În scriptul 12.6.php, prezentat mai jos, se ilustrează modul
în care este utilizată funcţia flock().
Scriptul 12.6
<html>
<head>
<title>Scriptul 12.6</title>
</head>
<body>
<?php
if (!isset($_POST["trimite"])) {
$k=0;
echo "k=$k";
} else {
$rindul=$_POST["x"].' '.$_POST["y"];
$f=fopen('a.txt','a') or die('Nu se poate deschide
fisierul a.txt');
flock($f,LOCK_EX); //blocare fisier
fwrite($f,"$rindul\r\n" );
flock($f,LOCK_UN); //deblocare fisier
fwrite($f,"$rindul\r\n" );
$k=$_POST[k]+1;
if ($k>=3) {
fclose($f);
echo "Datele au fost scrise in fisier!";
exit();
}
}
216
Capitolul 12. Fişiere
217
Programarea în PHP
Scriptul 12.7
<html>
<head>
<title>Scriptul 12.7</title>
</head>
<body>
<?php
$f=fopen('a.txt','r') or die('Nu se deschide fisierul
a.txt!');
print 'Literele mari continute in fisierul a.txt
sunt:<br>';
while (!feof($f)) {
$ch=fgetc($f);
if ('A'<=$ch && $ch<='Z') {
print $ch.' ';
}
}
fclose($f);
?>
</body>
</html>
218
Capitolul 12. Fişiere
Scriptul 12.8
<html>
<head>
<title>Scriptul 12.8</title>
</head>
<body>
<?php
$f=fopen('a.txt','r') or die('Nu se deschide fisierul
a.txt!');
print 'Literele mari continute in fisierul a.txt
sunt:<br>';
$ch=fgetc($f);
while ($ch!==false) {
if ('A'<=$ch && $ch<='Z') {
print $ch.' ';
}
$ch=fgetc($f);
}
fclose($f);
?>
</body>
</html>
Scriptul 12.9
<html>
<html>
<head>
<title>Scriptul 12.9</title>
</head>
<body
<?php
$f=fopen('a.txt','r') or die('Nu se deschide fisierul
a.txt!');
219
Programarea în PHP
220
Capitolul 12. Fişiere
unde:
ü fp – reprezintă pointerul fişierului returnat de funcţita fopen();
ü ls – este un argument operaţional care indică lungimea şirului citit
de funcţia fgets(), şi anume maxim ls-1 caractere. Dacă
argumentul ls lipseşte, se citesc toate caracterele până se atinge
sfârşitul liniei sau sfârşitul fişierului.
În general, după ce se apelează funcţia, citirea caracterelor se opreşte
când este îndeplinită una din condiţiile:
ü s-au citit ls-1 caractere;
ü s-a atins sfârşitul fişierului;
ü s-a atins sfârşitul de linie.
În caz de eroare funcţia returnează valoarea False.
Exemplu. Dacă fişierul a.txt conţine şirul abcdefghijklmn, atunci
execuţia scriptului 12.10.php, va afişa următorul rezultat:
abcd
efgh
ijkl
mn
Scriptul 12.10
<html>
<head>
<title>Scriptul 12.10</title>
</head>
<body
<?php
$f=fopen('a.txt','r') or die('Nu se poate deschide
fisierul!');
$ls=5;
echo "<br>";
while (!feof($f)) {
$rind=fgets($f,$ls);
print $rind.'<br>';
}
fclose($f);
?>
</body>
</html>
221
Programarea în PHP
Scriptul 12.11
<html>
<head>
<title>Scriptul 12.11</title>
</head>
<body
<?php
$f=fopen('a.txt','r') or die('Nu se poate deschide
fisierul!');
$linie=fgetcsv($f);
for ($i=0; $i<count($linie); $i++) {
print $linie[$i].'<br>';
}
222
Capitolul 12. Fişiere
Observaţii
ü În urma execuţiei instrucţiunii
$linie=fgetcsv($f);
se va citi din fişier prima linie, adică şirul Luni,Marti,Miercuri,
iar şirurile delimitate de virgulă se vor memora în vectorul $linie după
cum urmează:
$linie[0]= 'Luni'
$linie[1]= 'Marti'
$linie[2]= 'Miercuri'
ü În urma execuţiei instrucţiunii
$linie=fgetcsv($f,7);
se vor citi din fişier primii 7-1=6 octeţi. Astfel, primii 3 octeţi (echivalenţi
şirului Joi) vor fi memoraţi în $linie[0], iar următorii 3 octeţi
(echivalenţi şirului Vin) vor fi memoraţi în $linie[1].
223
Programarea în PHP
Scriptul 12.12
<html>
<head>
<title>Scriptul 12.12</title>
</head>
<body<?php
$f=fopen('a.txt','r') or die('Nu se poate deschide
fisierul');
while ($linie=fgetcsv($f)) {
for ($i=0; $i<count($linie); $i++) {
print $linie[$i].'<br>';
}
}
fclose($f);
?>
</body>
</html>
224
Capitolul 12. Fişiere
Scriptul 12.13
<html>
<head>
<title>Scriptul 12.13</title>
</head>
<body
<?php
$f=fopen('p17.php','r') or die('Nu se poate deschide
fisierul!');
while (!feof($f)) {
$rind=fgetss($f,filesize('p17.php'));
print $rind.'<br>';
}
fclose($f);
?>
</body>
</html>
Fişierul p17.php
<html>
<head>
<title> formular.html</title>
</head>
<body>
<form action="P18.php" method ="POST" >
<b>x=</b><input type="text" name="x" size="3"> <br>
<b>y=</b><input type="text" name="y" size="3"><br>
<input type="submit" name="Trimite" value ="Trimite datele
de intrare">
</form>
</body>
</html>
225
Programarea în PHP
Scriptul 12.14
<html>
<head>
<title>Scriptul 12.14</title>
</head>
<body
<?php
$f=fopen('p17.php','r') or die('Nu se deschide');
While (!feof($f)) {
$rind=fgetss($f,filesize('p17.php'),'<b>');
print $rind.'<br>';
}
fclose($f);
?>
</body>
</html>
226
Capitolul 12. Fişiere
Scriptul 12.15
<html>
<head>
<title>Scriptul 12.15</title>
</head>
<body
<?php
print 'Exemplu de citire a unui fisier cu functia
readfile()';
print '<br>Continutul fisierului a.txt este:<br>';
readfile('a.txt');
?>
</body>
</html>
227
Programarea în PHP
Scriptul 12.16
<html>
<head>
<title>Scriptul 12.16</title>
</head>
<body
<?php
$fisier=file('a.txt');
print 'Exemplu de citirea unui fisier cu functia file()';
print '<br>Continutul fisierului a.txt este:<br>';
for ($i=0; $i<count($fisier); $i++) {
print "<br>$fisier[$i]";
}
?>
</body>
</html>
Scriptul 12.17
<html>
<head>
<title>Scriptul 12.17</title>
</head>
<body>
<?php
228
Capitolul 12. Fişiere
Limbajul PHP are un set de funcţii care permit testarea stării unui
fişier. În cele ce urmează prezentăm pe scurt funcţiile: file_exists(),
is_file(), is_dir(), is_readable(), is_writeable(),
filesize(). În sintaxa acestor funcţii se utilizează parametrul
nume_fisier care reprezintă numele fişierului sau al directorului vizat,
identificat printr-o cale absolută sau relativă.
229
Programarea în PHP
Aceste trei funcţii verifică dacă un fişier există şi, în caz afirmativ
dacă poate fi citit (is_readable), dacă se poate scrie în el
(is_writable) sau dacă este executabil (is_executable).
Sintaxa celor trei funcţii enunţate în titlu este:
bool is_readable(string nume-fisier);
bool is_writable(string nume-fisier);
bool is_executable(string nume-fisier);
Funcţiile is_readable()/is_writable()/is_executable()
returnează valoarea True dacă fişierul există şi dacă este permisă
citirea/scrierea/executarea lui. În caz contrar returnează valoarea False.
230
Capitolul 12. Fişiere
Scriptul 12.18
<html>
<head>
<title>Scriptul 12.18</title>
</head>
<body>
<?php
if (isset($_POST["trimite"])) {
$fisier=trim($_POST['x']);
if (!file_exists($fisier)) {
print '<p>Fisierul '. $fisier.' nu exista </p>';
exit();
} else {
print '<p>Fisierul '. $fisier.' exista </p>';
}
if (is_file($fisier)) {
print '<p>Fisierul '. $fisier.' este fisier </p>';
} else {
print '<p>Fisierul '. $fisier.' nu este fisier
</p>';
}
if (is_dir($fisier)) {
print '<p>Fisierul '. $fisier.' este director </p>';
} else {
print '<p>Fisierul '. $fisier.' nu este director
</p>';
}
if (is_readable($fisier)) {
print '<p>Fisierul '. $fisier.' se poate citi </p>';
} else {
print '<p>Fisierul '. $fisier.' nu se poate citi
</p>';
}
if (is_writeable($fisier)) {
print '<p>In fisierul '. $fisier.' se poate scrie
</p>';
} else {
print '<p>In fisierul '. $fisier.'nu se poate scrie
</p>';
}
print '<p>Fisierul '. $fisier.' are '.filesize($fisier).
' octeti </p>';
exit();
231
Programarea în PHP
232
Capitolul 12. Fişiere
Observaţii
ü În locul apostrofurilor se pot folosi şi ghilimele, iar parantezele
rotunde pot lipsi;
ü Referirea la nume_fisier se poate se poate face utilizând căi
absolute sau relative.
233
Programarea în PHP
Scriptul 12.19
<?php
session_start();
?>
<html>
<head>
<title>Scriptul 12.19</title>
</head>
<body>
<?php
$_SESSION['traseu'][]='A ';
include '12.23.php';
?>
</body>
</html
234
Capitolul 12. Fişiere
Scriptul 12.20
<?php
session_start();
?>
<html>
<head>
<title>Scriptul 12.20</title>
</head>
<body>
<?php
$_SESSION['traseu'][]='B ';
include '12.23.php';
?>
</body>
</html>
Scriptul 12.21
<?php
session_start();
?>
<html>
<head>
<title>Scriptul 12.21</title>
</head>
<body>
<?php
$_SESSION['traseu'][]='C ';
include '12.23.php';
?>
</body>
</html>
Scriptul 12.22
<?php
session_start();
$n=count($_SESSION['traseu']);
?>
<html>
<head>
235
Programarea în PHP
Scriptul 12.23
<?php
print '<p> <a href= "12.19.php">A</a></p>';
print '<p> <a href= "12.20.php">B</a> </p>';
print '<p> <a href= "12.21.php">C</a></p>';
print '<p> <a href= "12.22.php">TraseuSesiune.php</a></p>';
?>
Scriptul 12.24
<html>
<head>
<title>Scriptul 12.24</title>
</head>
<body>
<?php
include '12.25.php';
?>
236
Capitolul 12. Fişiere
Scriptul 12.25
<html>
<head>
<title>Scriptul 12.25</title>
</head>
<body>
echo 'Acesta este un test!';
</body>
</html>
</html>
Scriptul 12.26
<html>
<head>
<title>Scriptul 12.26</title>
</head>
<body>
<?php
$z=include '12.27.php';
echo "Valoarea returnata este $z";
?>
</body>
</html>
237
Programarea în PHP
Scriptul 12.27
<html>
<head>
<title>Scriptul 12.27</title>
</head>
<body>
<?php
$x=3;
$y=7;
return $x*$y;
?>
</body>
</html>
238
P H P
Capitolul 13
13. Directoare
Limbajul PHP permite folosirea unui set de funcţii pentru
manipularea directoarelor. Prezentăm în continuare câteva astfel de funcţii
(secţiunile 13.1-13.9) şi exemple de utilizare a lor (scripturile 13.1, 13.2 şi
13.3). De asemenea, în secţiunea 13.10 sunt prezentate două aplicaţii care
utilizează funcţii de lucru cu fişiere şi directoare.
239
Programarea în PHP
240
Capitolul 13. Directoare
Scriptul 13.1
<html>
<head>
<title>Scriptul 13.1</title>
</head>
<body>
<?
$dirname = "D:/wamp/www/lucru/10-Fisiere si directoare";
$dp = opendir($dirname);
$ora=12;
$min=16;
$sec=43;
$luna=6;
$ziua=15;
$anul=2009;
$data_limita_stamp=mktime($ora,$min,$sec,$luna,$ziua,$anul)
;
$data_limita=date("m/d/y G.i:s",$data_limita_stamp);
print 'Fisiere si directore care au fost accesate ultima
oara inainte de '.$data_limita.'<br>';
while (($fis=readDir($dp))!==false) {
if (($fis != '.') && ($fis != '..')) {
$ultimacces_stamp=fileatime($dirname.'/'.$fis);
$ultimacces=date("m/d/y G.i:s",
$ultimacces_stamp);
if ($ultimacces_stamp < $data_limita_stamp) {
print $fis.'<br>';
}
}
241
Programarea în PHP
242
Capitolul 13. Directoare
243
Programarea în PHP
244
Capitolul 13. Directoare
Scriptul 13.2
<html>
<head>
<title>Scriptul 13.2</title>
</head>
<body>
<?
$dirname = "D:/wamp/www/lucru";
$dirnou="D:/wamp/www/lucru/10-Fisiere si directoare/index";
$dp = opendir($dirname);
if ($_POST['trimite']) {
if ($_POST['x']=='c') {
if (!(file_exists($dirnou))) {
if (mkdir($dirnou)) {
print "Directorul $dirnou a fost creat! <br>";
} else {
print "Directorul $dirnou nu se poate crea!";
exit();
}
} else {
print "Directorul $dirnou deja exista!<br> " ;
}
chdir($dirnou);
echo 'Directorul curent este '.getcwd().'<br>';
if ($fp = fopen("FisierIndex.html", "w")) {
while (($fis=readdir($dp)) !== false) {
$extensie = substr(strrchr($fis, "."), 1);
if (!(strcmp($extensie, "php"))) {
$output='<a ref="'.'http://localhost/lucru/'.
$fis.'">'.$fis.'</a><br>';
fputs ($fp, $output);
}
}
fclose($fp);
print "Fisierul FisierIndex.html a fost creat!<br>";
} else {
print "Fisierul FisierIndex.html nu se poate crea!
;<br>";
}
245
Programarea în PHP
c
Creeaza director(c)/Sterge director(s):
Trimite
246
Capitolul 13. Directoare
Afisare.php
body.php
Copy of 21.php
Creare catalog.php
dirsort.php
fincluscorect.php
finclusincorect.php
fis write.php
fisdir.php
fisfile.php
fisfile_put-contents.php
fisgetc.php
fisgetcsv.php
fisgets.php
fisgetss.php
fisiercareinclude.php
fisread.php
fistarefisier.php
fistestfunctii.php
fisupload.php
247
Programarea în PHP
248
Capitolul 13. Directoare
Scriptul 13.3
<html>
<head>
<title>Scriptul 13.3</title>
</head>
<body>
<?
$dirname = "D:/wamp/www/lucru";
$dirnou="D:/wamp/www/lucru/10-Fisiere si directoare/index";
$dp = opendir($dirname);
if ($_POST['trimite']) {
if ($_POST['x']=='c') {
if (!(file_exists($dirnou))) {
if (mkdir($dirnou)) {
print "Directorul $dirnou a fost creat! <br>" ;
} else {
print "Directorul $dirnou nu se poate crea! " ;
exit();
}
} else {
print "Directorul $dirnou deja exista!<br> " ;
}
chdir($dirnou);
echo 'Directorul curent este '.getcwd().'<br>';
if ($fp = fopen("FisierIndex.html", "w")) {
$fisiere=scandir($dirname,1);
foreach($fisiere as $fis ){
$extensie = substr(strrchr($fis, "."), 1);
if (!(strcmp($extensie, "php"))) {
$output='<a
href="'.'http://localhost/lucru/'.$fis.'">'.$
fis.'</a><br>';
fputs ($fp, $output);
}
}
249
Programarea în PHP
Observaţii
ü Scriptul 13.3.php a fost obţinut prin modificarea scriptului
13.2.php. Principalele modificări se referă la înlocuirea funcţiilor
250
Capitolul 13. Directoare
Scriptul 13.4
<html>
<head>
<title>Scriptul 13.4</title>
</head>
<body>
<?php
if (isset($_POST["trimite"]) ) {
$dirname=trim($_POST['dir']);
echo getcwd() . "\n";
251
Programarea în PHP
252
Capitolul 13. Directoare
Scriptul 13.5
<html>
<head>
<title>Scriptul 13.5</title>
</head>
<body>
<?php
$dir="D:/wamp/www/lucru/";
$d=opendir($dir);
$k=0;
while ($fis = readdir($d)) {
$x[$k]=$fis;
$fis=$dir.'/'.$fis;
$y[$k]=filesize($fis);
$z[$k]=date('Y M d D g:i A',fileatime($fis));
$w[$k]=date('Y M d D g:i A',filemtime($fis));
$t[$k]=is_file($fis)?'f':'d';
$k++;
}
if (!isset($key)) {
$key = "x";
}
print $_GET[key];
253
Programarea în PHP
254
Capitolul 13. Directoare
255
P H P
Capitolul 14
14. Crearea şi
prelucrarea bazelor de
date MySql utilizând PHP
Posibilitatea de a stoca date în fişiere sau în baze de date creşte
spectaculos utilitatea unui script PHP. Limbajul PHP are suport încorporat
pentru diferite tipuri de baze de date, dintre acestea MySQL fiind un sistem
de gestiune a bazelor de date folosit foarte des. În acest capitol vom
prezenta câteva exemple comentate referitoare la gestiunea bazelor de date
MySQL, prin intermediul scripturilor PHP. Pentru a uşura înţelegerea lor
facem şi o scurtă prezentare a sintaxei de bază pentru comenzile MySQL
utilizate. Totuşi, acest capitol nu îşi propune să înveţe cititorul cum să
proiecteze o bază de date şi nici să prezinte în detaliu MySQL, ci reprezintă
mai degrabă o abordare simplă şi practică a unui domeniu deosebit de
important în informatică, din perspectiva utilizării limbajului PHP.
257
Programarea în PHP
258
Capitolul 14. Crearea şi prelucrarea bazelor de date MySql utilizând PHP
Scriptul 14.1
<html>
<head>
<title>Scriptul 14.1</title>
</head>
<body>
<?php
$con=@mysql_connect('localhost','root','');
if ($con) {
print '<p> S-a creat conexiunea!';
print '<p>Resursa conexiunii este: '.$con;
mysql_close();
} else {
die ('<p> Nu s-a putut crea conexiunea
deoarece:'.mysql_errno().': '.mysql_error());
}
?>
</body>
</html>
259
Programarea în PHP
int mysql_errno(identificator_conexiune );
Comentariile făcute în cazul funcţiei mysql_error() sunt valabile
şi aici, cu precizarea că funcţia mysql_errno() returnează fie un cod de
eroare, fie valoarea 0, dacă execuţia funcţiei MySql apelată anterior a fost
fără erori.
Pentru a ilustra modul de execuţie al funcţiilor mysql_error() şi
mysql_errno() producem intenţionat o eroare în execuţia scriptului
14.1.php, scriind localhos în loc de localhost.
Scriptul 14.2
<html>
<head>
<title>Scriptul 14.2</title>
</head>
<body>
<?php
$con=@mysql_connect('localhos','root','');
if ($con) {
print '<p> S-a creat conexiunea!';
print '<p>Resursa conexiunii este: '.$con;
mysql_close();
} else {
die ('<p> Nu s-a putut crea conexiunea
deoarece:'.mysql_errno().': '.mysql_error());
}
?>
</body>
</html>
260
Capitolul 14. Crearea şi prelucrarea bazelor de date MySql utilizând PHP
Scriptul 14.3
<html>
<head>
<title>Scriptul 14.3</title>
</head>
<body
<?php
$con=@mysql_connect('localhost','root','');
if ($con) {
print '<p> S-a creat conexiunea!';
$sel=@mysql_select_db("cataloage",$con);
if ($sel) {
print '<p> S-a selectat baza de date cataloage!';
} else {
die ('<p> Nu s-a putut selecta baza de date
cataloage deoarece:'.mysql_error());
}
//prelucrari
mysql_close();
} else {
die ('<p> Nu s-a putut crea conexiunea
deoarece:'.mysql_error());
}
?>
</body>
</html>
261
Programarea în PHP
262
Capitolul 14. Crearea şi prelucrarea bazelor de date MySql utilizând PHP
Scriptul 14.4
<html>
<head>
<title>Scriptul 14.4</title>
</head>
<body>
<?php
$con=mysql_connect('localhost','root','');
if ($con) {
print '<p> S-a creat conexiunea!';
$crea=mysql_query('CREATE DATABASE cataloage');
if ($crea) {
print '<p> S-a creat baza de date cataloage!';
} else {
die ('<p> Nu s-a putut crea baza de date cataloage
deoarece:'.mysql_error());
}
mysql_close();
} else {
die ('<p> Nu s-a putut crea conexiunea
deoarece:'.mysql_error());
}
?>
</body>
</html>
263
Programarea în PHP
Scriptul 14.5
<html>
<head>
<title>Scriptul 14.5</title>
</head>
<body><?php
$con=@mysql_connect('localhost','root','');
if ($con) {
print '<p> S-a creat conexiunea!';
$sel=@mysql_select_db("cataloage",$con);
if ($sel) {
print '<p> S-a selectat baza de date cataloage!';
} else {
264
Capitolul 14. Crearea şi prelucrarea bazelor de date MySql utilizând PHP
unde:
ü nume_tabela reprezintă numele tabelei în care se face adăugarea;
ü lista_nume_coloane_tabela este lista numelor coloanelor
tabelei;
265
Programarea în PHP
Scriptul 14.6
<html>
<head>
<title>Scriptul 14.6</title>
</head>
<body>
<?php
if ($_POST['trimite']) {
$con=@mysql_connect('localhost','root','');
if ($con) {
print '<p> S-a creat conexiunea!';
$sel=@mysql_select_db("cataloage",$con);
if ($sel) {
print '<p> S-a selectat baza de date cataloage!';
} else {
die ('<p> Nu s-a putut selecta baza de date
cataloage deoarece:'.mysql_error());
}
$ins="INSERT INTO catalog(id,nume,prenume,nota)
VALUES('','$_POST[nume]','$_POST[prenume]',
'$_POST[nota]')";
if (@mysql_query($ins)){
266
Capitolul 14. Crearea şi prelucrarea bazelor de date MySql utilizând PHP
267
Programarea în PHP
Scriptul 14.7
<html>
<head>
<title>Scriptul 14.7</title>
</head>
<body>
<?php
$con=@mysql_connect('localhost','root','');
if ($con) {
print '<p> S-a creat conexiunea!';
$sel=@mysql_select_db("cataloage",$con);
if ($sel) {
print '<p> S-a selectat baza de date cataloage!';
} else {
die ('<p> Nu s-a putut selecta baza de date
cataloage deoarece:'.mysql_error());
}
$sql="SELECT * FROM catalog";
$rezultat=@mysql_query($sql);
if ($rezultat) {
print '<p> Lista inregistrarilor din catalog:';
print "<table border='1'>";
while ($rand=mysql_fetch_array($rezultat)) {
$id=$rand['id'];
$nume=$rand['nume'];
$prenume=$rand['prenume'];
$nota=$rand['nota'];
print "<tr><td>$id</td><td>$nume
</td><td>$prenume</td><td>$nota</td></tr>";
}
print "</table>";
268
Capitolul 14. Crearea şi prelucrarea bazelor de date MySql utilizând PHP
37 Vasilescu Vasile 10
38 Georgescu George 6
39 Iliescu Ilie 7
36 Ionescu Ion 8
Scriptul 14.8
<html>
<head>
<title>Scriptul 14.8</title>
</head>
<body>
<?php
$con=@mysql_connect('localhost','root','');
if ($con) {
print '<p> S-a creat conexiunea!';
$sel=@mysql_select_db("cataloage",$con);
if ($sel) {
269
Programarea în PHP
Observaţii
ü Selectarea coloanelor nume şi prenume s-a făcut cu ajutorul
comenzii
SELECT nume, prenume FROM catalog;
270
Capitolul 14. Crearea şi prelucrarea bazelor de date MySql utilizând PHP
Observaţii
ü Comanda DELETE şterge întotdeauna o întreagă înregistrare; nu este
posibilă ştergerea doar a anumitor coloane dintr-o înregistrare.
ü Atenţie! Dacă se utilizează numai forma
DELETE FROM nume_tabela
se şterg toate înregistrările din tabela cu numele nume_tabela !
271
Programarea în PHP
Scriptul 14.9
<html>
<head>
<title>Scriptul 14.9</title>
</head>
<body>
<?php
$con=@mysql_connect('localhost','root','');
if ($con) {
print '<p> S-a creat conexiunea!';
} else {
die ('<p> Nu s-a putut crea conexiunea
deoarece:'.mysql_error());
}
$sel=@mysql_select_db('cataloage',$con);
if ($sel) {
print '<p> S-a selectat baza de date cataloage!';
} else {
die ('<p> Nu s-a putut selecta baza de date cataloage
deoarece:'.mysql_error());
}
if ($_POST['trim']) {
$del="DELETE FROM catalog WHERE id=".$_POST['id'];
if (@mysql_query($del)) {
print '<p> Inregistrarea selectata a fost
stearsa!';
} else {
print '<p> Nu se poate face stergerea
deoarece:!'.mysql_error();
}
} else {
print ' <form action="14.9.php" method ="POST">
<select name="id">';
$sql="SELECT * FROM catalog ORDER BY nume ASC";
$rezultat=@mysql_query($sql);
272
Capitolul 14. Crearea şi prelucrarea bazelor de date MySql utilizând PHP
273
Programarea în PHP
Nu sterge!
Prezentăm mai jos scriptul 14.10.php:
Scriptul 14.10
<html>
<head>
<title>Scriptul 14.10</title>
</head>
<body>
<?php
$con=@mysql_connect('localhost','root','');
if ($con) {
print '<p> S-a creat conexiunea!';
} else {
die ('<p> Nu s-a putut crea conexiunea
deoarece:'.mysql_error());
}
$sel=@mysql_select_db('cataloage',$con);
if ($sel) {
print '<p> S-a selectat baza de date cataloage!';
} else {
die ('<p> Nu s-a putut selecta baza de date cataloage
deoarece:'.mysql_error());
}
if ($_POST['trim']) {
$sql="SELECT id, nume, prenume, nota FROM catalog
WHERE id=".$_POST['id'];
$rezultat=@mysql_query($sql);
if ($rezultat) {
print '<br>Sunteti sigur ca doriti stergerea
urmatoarei inregistrari?';
print '<form action="14.12.php" method="GET">';
print "<table border='1'>";
274
Capitolul 14. Crearea şi prelucrarea bazelor de date MySql utilizând PHP
275
Programarea în PHP
Scriptul 14.11
<html>
<head>
<title>Scriptul 14.11</title>
</head>
<body>
<?php
$con=@mysql_connect('localhost','root','');
if($con) {
print '<p> S-a creat conexiunea!';
} else {
die ('<p> Nu s-a putut crea conexiunea
deoarece:'.mysql_error());
}
$sel=@mysql_select_db('cataloage',$con);
if ($sel) {
print '<p> S-a selectat baza de date cataloage!';
} else {
die ('<p> Nu s-a putut selecta baza de date cataloage
deoarece:'.mysql_error());
}
if (is_numeric($_GET['id'])) {
$idst=$_GET['id'];
print "id=".$idst;
$sql="SELECT id, nume, prenume, nota FROM catalog
WHERE id=".$_GET['id'];
$rezultat=@mysql_query($sql);
276
Capitolul 14. Crearea şi prelucrarea bazelor de date MySql utilizând PHP
Aşa cum s-a precizat deja, scriptul care realizează efectiv ştergerea
este scriptul 14.12.php.
277
Programarea în PHP
Scriptul 14.12
<html>
<head>
<title>Scriptul 14.12</title>
</head>
<body>
<?php
$con=@mysql_connect('localhost','root','');
if ($con) {
print '<p> S-a creat conexiunea! </p>';
$sel=@mysql_select_db('cataloage',$con);
if ($sel) {
print '<p> S-a selectat baza de date cataloage!';
} else {
die ('<p> Nu s-a putut selecta baza de date cataloage
deoarece:'.mysql_error());
}
$id="DELETE FROM catalog WHERE id=".$_GET['idst'];
if (@mysql_query($id)) {
print '<p> Inregistrarea a fost stearsa! </p>';
} else {
print '<p> Nu se poate face stergerea
deoarece:!'.mysql_error().'</p>';
}
mysql_close();
} else {
die ('<p> Nu s-a putut crea conexiunea
deoarece:'.mysql_error().'</p>');
}
?>
</body>
</html>
278
Capitolul 14. Crearea şi prelucrarea bazelor de date MySql utilizând PHP
unde:
ü nume_tabela indică tabela in care se modifică înregistrările;
ü coloana_1, coloana_2, …, coloana_n reprezintă coloanele
care vor fi modificate respectiv cu valorile: valoare_1,
valoare_2,…, valoare_n;
ü conditie reprezintă condiţia pe care trebuie să o îndeplinească
răndurile din tabelă care sunt selectate pentru modificare.
Comanda REPLACE are următoarea sintaxă:
REPLACE INTO nume_tabela(lista_nume_coloane_tabela)
VALUES (lista_valori_pentru_coloane)
unde:
ü nume_tabela reprezintă numele tabelei în care se face modificarea;
ü lista_nume_coloane_tabela este lista numelor coloanelor
tabelei;
ü lista_valori_pentru_coloane este lista de valori care se
memorează în coloanele corespunzătoare ale tabelei.
279
Programarea în PHP
Scriptul 14.13
<html>
<head>
<title>Scriptul 14.13</title>
</head>
<body>
<?php
$con=@mysql_connect('localhost','root','');
if($con) {
print '<p> S-a creat conexiunea!';
} else {
die ('<p> Nu s-a putut crea conexiunea
deoarece:'.mysql_error());
}
$sel=@mysql_select_db('cataloage',$con);
if ($sel) {
print '<p> S-a selectat baza de date cataloage!';
} else {
die ('<p> Nu s-a putut selecta baza de date cataloage
deoarece:'.mysql_error());
}
if ($_POST['trim']) {
print '<p>Completeaza modificarile:
<p> <form action="14.16.php" method="POST">
<p> Nume:<input type="text" name="nume" value="" size
="30">
<p> Prenume:<input type="text" name="prenume"
value="" size ="40">
<p> Nota:<input type="text" name="nota" value="" size
="2">
<input type="hidden" name="idmod" value
="'.$_POST['id'].'">
<input type="submit" name="submit" value="Trimite
modificarile">';
} else {
print' <form action="14.13.php" method ="POST">
<select name="id">';
$sql="SELECT * FROM catalog ORDER BY nume ASC";
$rezultat=@mysql_query($sql);
if ($rezultat) {
while ($rand=mysql_fetch_array($rezultat)) {
$id=$rand['id'];
$nume=$rand['nume'];
280
Capitolul 14. Crearea şi prelucrarea bazelor de date MySql utilizând PHP
Scriptul 14.14
<html>
<head>
<title>Scriptul 14.14</title>
</head>
<body>
<?php
281
Programarea în PHP
282
Capitolul 14. Crearea şi prelucrarea bazelor de date MySql utilizând PHP
283
Programarea în PHP
Scriptul 14.15
<html>
<head>
<title>14.15</title>
</head>
<body>
<?php
$con=@mysql_connect('localhost','root','');
if ($con) {
print '<p> S-a creat conexiunea!';
} else {
die ('<p> Nu s-a putut crea conexiunea
deoarece:'.mysql_error());
}
$sel=@mysql_select_db('cataloage',$con);
if ($sel) {
print '<p> S-a selectat baza de date cataloage!';
} else {
die ('<p> Nu s-a putut selecta baza de date cataloage
deoarece:'.mysql_error());
}
if (is_numeric($_GET['id'])) {
$sql="SELECT nume, prenume, nota FROM catalog WHERE
id=".$_GET['id'];
$rezultat=@mysql_query($sql);
if ($rezultat) {
print '<form action="14.16.php" method="POST">';
while ($rand=mysql_fetch_array($rezultat)) {
$id=$rand['id'];
$nume=$rand['nume'];
$prenume=$rand['prenume'];
$nota=$rand['nota'];
print '<p> Efectueaza modificarile:
<p> Nume:<input type="text" name="nume"
value="'.$nume.'">
<p> Prenume:<input type="text"
name="prenume" value="'.$prenume.'">
<p> Nota:<input type="text" name="nota"
value="'.$nota.'">';
}
print '<input type="hidden" name="idmod" value
="'.$_GET['id'].'">';
print '<input type="submit" name="submit"
value="Trimite modificarile">';
} else {
print '<p> Catalogul nu a fost gasit !';
}
} else {
284
Capitolul 14. Crearea şi prelucrarea bazelor de date MySql utilizând PHP
Scriptul 14.16
<html>
<head>
<title>Scriptul 14.16</title>
</head>
<body>
<?php
$con=@mysql_connect('localhost','root','');
if ($con) {
print '<p> S-a creat conexiunea!';
$sel=@mysql_select_db('cataloage',$con);
if ($sel) {
print '<p> S-a selectat baza de date cataloage!';
} else {
die('<p> Nu s-a putut selecta baza de date
cataloage deoarece:'.mysql_error());
}
285
Programarea în PHP
286
P H P
Bibliografie
1. Meloni Julie C., Învaţă singur PHP, MYSQL şi APACHE-Toate într-o
singură carte, Editura Corint, Bucureşti, 2005
2. Ullman Larry, PHP pentru World Wide Web: în imagini, Editura Teora,
2004
3. Anghel Traian, Programarea în PHP:ghid practic, Editura Polirom,
2005
4. Marinoiu Cristian, Programarea în C, Editura Universităţii din Ploieşti,
2000
5. Gilmore Jason W., A Programmer’s Introduction to PHP 4.0. APRESS,
U.S.A, 2001
6. Converse Tim, Park Joyce, Morgan Clark, PHP5 and MySql Bible,
Wiley Publishing Inc., Indianapolis, Indiana, U.S.A,2004
7. Zandstra Matt, Teach yourself PHP in 24 hours, Sams Publishing,
U.S.A 2004
8. Gugoiu Teodoru, HTML prin exemple, Editura Teora, Bucureşti, 2001
9. PHP şi MySQL pe înţelesul tuturor-Soluţia completă pentru un magazin
online, Revista Chip, nr.2,2003
10.http://php.net/manual/ro/index.php
11.http://www.w3school.com
287