You are on page 1of 27

DEZVOLTAREA

APLICAŢIILOR
WEB
Bogdan Pătruţ
Laborator 1. Introducere

a) Ce inseamna o pagina web dinamica, care sunt diferentele fata de una statica?
La o pagina statica te uiti, la o pagina dinamica interactionezi in ambele sensuri.
b) Cum putem realiza o pagina web dinamica?
Folosind un mediu de programare web adecvat: Medii de programare web:
PHP/MySQL, ASP .NET, Flash – ActionScript, VB Script, JavaScript etc.
c) Ce presupune sa realizezi o pagina web sau un site dinamic?
Un calculator pe care sunt instalate urmatoarele 3 servere: server web (ca sa
recunoasca adrese gen http://....), un server PHP (ca sa poate interpreta programele
PHP) si un server pentru baze de date MySQL (pentru a putea accesa si prelucra
tabelele din bazele de date)
d) Cum putem sa instalam toate acestea?
Exista kitul all-in-one EasyPHP sau PHP Triad care le cuprinde pe toate trei. Le
cautam pe web cu Google si le descarcam si instalam pe calculatorul propriu.
e) OK, fac pagina web dinamica pe calculatorul meu, cum pot sa fac sa o vada
oricine?
Trebuie sa iti cumperi un domeniu (de exemplu www.exemplu.ro, de la www.rotld.ro
sau www.hostdomain.ro sau altii) sau sa inchiriezi unul de la cei care ofera gratis
(www.xhost.ro, www.3x.ro etc.) sau pe bani (www.vodafone.ro etc). Apoi, vei plati
lunar o taxa (in jur de 5 euro) si vei putea sa-ti depozitezi acolo site-ul tau si baza ta
de date (folosind protocolul FTP din programul Total Commander, de exemplu).
f) Un prim program PHP care va aduna doua numere
Vom crea doua fisiere: “index.html” si “suma.php”
In “index.html” vom avea un formular continand doua casete de text pentru cele doua
numere:

Descrierea sa in format HTML este:


<html>
<head>
<title>Suma a doua numere</title>
</head>
<body>
<p>Suma a doua numere:</p>
<form method="POST" action="suma.php">
<p>Primul numar: <input type="text" size="5" name="x">
Al doilea numar: <input type="text" size="5" name="y">
</p><p><input type="submit" name="B1" value="Suma"></p>
</form>
</body>
</html>
Asadar, atunci când se actioneaza butonul de subscriere "Suma" se lanseaza in executie
programul aflat in fisierul SUMA.PHP. Un program PHP este capabil sa genereze cod
HTML, folosind functia “echo” sau functia “printf”.
Iata continutul fisierul “suma.php”.
<?php
$suma=$x+$y;
echo("Suma este: $suma");
?>
Ambele fisiere vor fi realizate folosind un editor de texte, de exemplu Notepad. Putem
descarca de pe web un mediu de editare – compilare – executie mai performant (IDE).

Observatii: exista doua metode de a trimite variabile de la fisierul HTML catre programul
PHP: POST si GET.
• Daca folositi metoda POST, atunci programul PHP recunoaste automat variabilele
din formularul HTML, dar variabilele din PHP se scriu cu simbolul “$” in fata.
De exemplu x din formular devine $x in PHP, y din formular devine $y in PHP.
Securitatea datelor este mai mica, variabilele pot fi preluate si de alte programe
rau intentionate.
• Daca folositi metoda GET, atunci puteti prelua in programul PHP variabilele din
formularul HTML, folosind $_GET[‘x’] si $_GET[‘y’]. Securitatea este mai
buna.
Programul PHP va genera un simplu fisier text, in care va afisa “Suma este: “ si suma.
Daca vrem ca sa generam o intreaga pagina web avem doua variante:
• Generare din cod PHP, folosind functia echo:
<?php
echo(“<html><head><title>Suma</title></head><body>”);
$suma=$x+$y;
echo("<p>Suma este: $suma");
echo(“</p></body></html>”);
?>

• Inserarea codului HTML static, pe langa codul PHP pentru calcule:


<html><head><title>Suma</title></head><body>
<p>Suma este:
<?php
$suma=$x+$y;
echo($suma);
?>
</p></body></html>
Atentie! Si acest fisier se salveaza cu extensia PHP, chiar daca are elemente HTML in el.

O alta varianta este crearea unui singur fisier “index.php”, care sa cuprinda atat
formularul pentru introducerea operanzilor, cat si codul PHP pentru calculat suma si apoi
se va reimprospata pagina respectiva.

Exercitii:
1) Descarcati de la www.php.net si de la www.mysql.com documentatiile (in limba
romana) ale celor doua produse (PHP, respectiv MySQL). Daca nu v-ati prins, functia
este “sqrt”. Cum se foloseste?
2) Cautati in documentatia PHP online sau in cea descarcata functia matematica pentru a
calcula radacina patrata a unui numar real pozitiv.
3) Realizati un formular HTML si un program PHP pentru a calcula
a) perimetrul unui triunghi
b) aria unui triunghi
avand lungimile laturilor a, b si c.
Folositi formula lui Heron pentru a calcula aria:
a+b+c
Aria = p ( p − a )( p − b)( p − c) , unde p este semiperimetrul: p = .
2
4) Realizati un formular HTML si un program PHP pentru a calcula cel mai mic dintre
doua numere:
a) folosind functia predefinita “min”;
b) folosind instructiunea de decizie “if”. Aceasta are forma ca in limbajul C.

5) Realizati un formular HTML si un program PHP pentru a calcula suma 1+2+3+...+n,


unde n este citit din formular. Se va folosi, pe rand, oricare dintre instructiunile repetitive
urmatoare:
a) while
b) do – while
c) for
Nu uitati ca fiecare variabila trebuie precedata de simbolul $.

Laboratorul 2. Utilizarea fisierelor text


PHP este un mediu de programare server-side, spre deosebire de JavaScript, care este
client-side. Cu alte cuvinte, programele PHP ruleaza pe serverul pe care va conectati, iar
nu pe calculatoarele voastre de la care va conectati. Asadar, puteti lucra cu fisiere (text,
de exemplu) de pe server, indiferent de la ce calculator va conectati. Exemplu: o persoana
poate stoca o informatie intr-un fisier text de la un calculator, iar alta persoana poate
accesa acea informatie de la alt calculator.
Functiile de lucru cu fisiere text sunt identice celor din limbajul C.
Vom exemplifica aceste functii, creand un cod PHP care sa contorizeze de cate ori e
vizitata o pagina web.

Acest lucru - atât de popular - se poate realiza foarte usor in limbajul PHP in felul
urmator. Vom crea mai intâi un fisier text (VIZ.TXT) care sa contina doar valoarea 0
scrisa in el, apoi, la fiecare incarcare a paginii web (care va fi denumita "index.php" si nu
"index.html"!), programul PHP va citi valoarea aflata in fisier, o va incrementa (cu 1), o
va afisa, iar apoi o va salva in fisier, in locul vechii valori. Atentie! Atat fisierul
VIZ.TXT, cat si INDEX.PHP trebuie sa fie pe server!

Asadar, programul va arata astfel:


<?php
echo("<html><head><title>Salutare!</title></head>");
echo("<body bgcolor='fuschia'>");
// deschid fisierul nrvizit pentru citire
$f = fopen("nrvizit","r");
// citesc nr. de vizitatori de acolo
fscanf($f,"%d",$x);
// fscanf(fisierul de unde citesc, tipul de data,
// variabila citita). obs: %d - numar intreg

$x = $x + 1; // am crescut cu 1 numarul de vizitatori


echo("Esti vizitatorul nr. $x");

fclose($f); // am inchis fisierul


$f = fopen("nrvizit","w");
// deschid din nou fisierul, de data asta pentru a scrie
// in el
// scrie un sir $x intr-un fisier $f, conversia
// de la intreg la sir se face automat
fputs($f,$x);
fclose($f); // am inchis din nou fisierul
?>

Fisierul VIZ.TXT va contine un simplu 0 in el.

Programul contine apelurile functiilor fopen - deschidere fisier text. Primul argument este
numele extern al fisierului, adica numele sau de pe disc, iar cel de al doilea argument este
modul in care se deschide fisierul. Astfel "r" este pentru citire, "w" pentru rescriere, iar
"a" pentru adaugare (append). O modalitate de a citi un numar intreg $x dintr-un fisier
asociat variabile $f este:
fscanf($f,"%d",$x);

Inchiderea fisierului se realizeaza cu un apel simplu al lui fclose.


fclose($f); // am inchis fisierul

Pentru a scrie in fisier, am apelat la o functie speciala, numita fputs, care scrie intr-un
fisier text un sir de caractere, dar conversia de la numar intreg la sir de caractere se
realizeaza automat. De fapt, limbajul PHP este foarte puternic in privinta conversiei
dintre date de diferite tipuri.

Exercitii:
1) Scrieti un program PHP care preia dintr-un formular HTML urmatoarele date din
CV-ul unei persoane (ex. numele, prenumele, adresa, numar de telefon, adresa de
e-mail, sexul, educatie, locuri de munca, pasiuni etc.) si le salveaza intr-un fisier
text.
Laborator 3. Prelucrarea datelor dintr-un formular

a) Validarea datelor unui formular si salvarea lor intr-un fisier

In continuare, sa presupunem ca dorim sa salvam datele dintr-un formular intr-un fisier


text. Pentru a exemplifica acest lucru, sa consideram ca dorim infiinaarea unui club de
elevi, cu diferite preocupari. Am realizat, in acest sens, urmatorul formular de inscriere:

Acest formula este descris in cod HTML astfel:


<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>Formular de inscriere:</title>
</head>
<body>
<p align="center"><font size="6"><strong>Clubul nostru - Formular
de inscriere:</strong></font></p>
<p align="center"><font size="2"><em>(campurile marcate cu
steluta sunt obligatorii)</em></font></p>
<form action="formular.php" method="POST" name="formular_inscriere">
<p align="left"><strong>*Numele si prenumele:</strong><input
type="text" size="16" name="nume"><strong>&nbsp;&nbsp;
*Adresa de e-mail:</strong><input type="text" size="16"
name="email"></p>
<p align="left"><strong>*Numar de telefon fix:</strong><input
type="text" size="14" name="telefon">
&nbsp;&nbsp;&nbsp;<strong>Poate
aveti si un mobil:</strong><input type="text" size="14"
name="mobil"></p>
<p><strong>Sexul: </strong><input type="radio" checked
name="sex" value="masculin">masculin &nbsp;&nbsp;&nbsp;<input
type="radio" name="sex" value="feminin">feminin <strong>Clasa:
</strong><input type="radio" checked name="clasa" value="9">a
IX-a &nbsp;&nbsp;<input type="radio" name="clasa" value="10">a
X-a &nbsp;&nbsp;<input type="radio" name="clasa" value="11">a
XI-a &nbsp;&nbsp;<input type="radio" name="clasa" value="12">a
XII-a &nbsp;<select name="lclasa" size="1">
<option>A</option>
<option>B</option>
<option>C</option>
<option>D</option>
<option>E</option>
<option>F</option>
<option>G</option>
<option>H</option>
</select></p>
<p><strong>Pasiunile dvs.: </strong><input type="checkbox"
name="C1" value="ON">literatura &nbsp;&nbsp;<input
type="checkbox" name="C2" value="ON">limbile straine
&nbsp;&nbsp;<input type="checkbox" name="C3" value="ON">artele
plastice, muzica&nbsp;<input type="checkbox" name="C4"
value="ON">matematica &nbsp;&nbsp;<input type="checkbox"
name="C5" value="ON">informatica &nbsp;&nbsp;<input
type="checkbox" name="C6" value="ON">psihologia
&nbsp;&nbsp;<input
type="checkbox" name="C7" value="ON">fizica &nbsp;&nbsp;<input
type="checkbox" name="C8" value="ON">chimia &nbsp;</p>
<p><input type="checkbox" name="C9" value="ON">biologia
&nbsp;&nbsp;<input type="checkbox" name="C10" value="ON">sportul
&nbsp;&nbsp;
<input type="checkbox" name="C11" value="ON">geografia
&nbsp;&nbsp;<input type="checkbox" name="C12" value="ON">istoria
&nbsp;&nbsp;
<input type="checkbox" name="C13" value="ON">economia</p>
<table border="0">
<tr>
<td><strong>*Disponibilitatea dumneavoastra:
&nbsp;&nbsp;&nbsp;</strong><p><select name="disponib"
size="6">
<option>zilnica</option>
<option>de doua ori pe saptamana</option>
<option>o data pe saptamana</option>
<option>in week-end</option>
<option>o data pe luna</option>
<option>la cerere</option>
</select></p>
</td>
<td><strong>Sectiunile (programele) pentru care
optati:</strong><p><em>(va recomandam sa alegeti
maxim 2)</em></p>
<p><input type="checkbox" name="PR1" value="ON">
Revista &nbsp; <input type="checkbox" name="PR3"
value="ON"> Administrare retea &nbsp;&nbsp;&nbsp;<input
type="checkbox" name="PR5" value="ON">
Poesis&nbsp;&nbsp;</p>
<p><input type="checkbox" name="PR2" value="ON">
Thalia &nbsp;&nbsp; &nbsp;<input type="checkbox"
name="PR4" value="ON">&nbsp;Apollo &nbsp;<input
type="checkbox" name="PR6" value="ON">Muzicienii
informaticieni</p>
</td>
</tr>
</table>
<p><strong>Sugestiile si comentariile dumneavoastra sunt
binevenite:</strong></p>
<p><textarea name="sugestii" rows="3" cols="56"></textarea>
<input type="submit" name="butonok" value="OK, inregistrare"
action="formular.php"> <input type="reset" name="butonnu"
value="Reluare"></p>
</form>
</body>
</html>

In continuare, vom prezenta programul (FORMULAR.PHP), care va scrie datele despre


un elev care se inscrie in club.

Programul face simple verificari asupra datelor introduse, semnalând eroare in cazul in
care lipsesc anumite câmpuri, declarate ca fiind obligatorii: numele, adresa de posta
electronica, disponibilitatea si numarul de telefon. De asemenea, folosind functia PHP
ereg se testeaza daca adresa de e-mail data ar putea fi reala (functia ereg este foarte
puternica, ea lucrând cu expresii regulate, despre care puteti afla mai multe din Internet,
chiar de la adresa www.php.net).
<?php
if (!$nume || !$email || !$disponib || !$telefon)
{
echo("<html><title>Eroare</title><body background='fond.jpg'>");
echo("<br><br>");
echo("<center><font size=+2 color='blue'>");
echo("Campurile marcate cu steluta sunt ");
echo("obligatorii!</font></center><br><br>");
echo("<p align='center'>");
echo("<a href='javascript:history.back()'>");
echo("<img src='previous.gif'></img></a></p>");
echo("</body></html>");
}
else
if (!ereg("^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+",$email))
{
echo("<html><title>Eroare</title>");
echo(<body background='fond.jpg'>");
echo("<br><br>");
echo("<center><font size=+2 color='blue'>");
echo("Eroare la adresa de e-mail</font></center><br><br>");
echo("<p align='center'>");
echo("<a href='javascript:history.back()'>");
echo("<img src='previous.gif'></img></a></p>");
echo("</body></html>");
}
else
{
// preiau datele si le stochez pe disc
echo("<html><title>Inscriere</title>");
echo("<body background='fond.jpg'>");
echo("<br><br>");
echo("<center><font size=+2 color='blue'>");
echo("Datele introduse de dvs. sunt</font>");
echo("</center><br><br>");
echo("<p align='left'>");
echo("<ul>");
echo("<li>Numele si prenumele: $nume</li>");
echo("<li>Adresa de e-mail: $email</li>");
echo("<li>Telefon fix: $telefon</li>");
echo("<li>Telefon mobil: $mobil</li>");
echo("<li>Sexul: ");
if ($sex=="masculin") echo("baiat</li>");
else echo("fata</li>");
echo("<li>Clasa: ");
if ($clasa==9) echo("a noua $lclasa");
if ($clasa==10) echo("a zecea $lclasa");
if ($clasa==11) echo("a unsprezecea $lclasa");
if ($clasa==12) echo("a douasprezecea $lclasa");
echo("<li>Pasiuni:<ol>");
if ($C1=="ON") echo("<li>literatura");
if ($C2=="ON") echo("<li>limbile straine");
if ($C3=="ON") echo("<li>arta");
if ($C4=="ON") echo("<li>matematica");
if ($C5=="ON") echo("<li>informatica");
if ($C6=="ON") echo("<li>psihologia");
if ($C7=="ON") echo("<li>fizica");
if ($C8=="ON") echo("<li>chimia");
if ($C9=="ON") echo("<li>biologia");
if ($C10=="ON") echo("<li>sportul");
if ($C11=="ON") echo("<li>geografia");
if ($C12=="ON") echo("<li>istoria");
if ($C13=="ON") echo("<li>economia");
echo("</li></ol>");
echo("<li>Disponibilitatea: $disponib");
echo("<li>Sectiuni (programe):<ol>");
if ($PR1=="ON") echo("<li>Revista");
if ($PR2=="ON") echo("<li>Cercul de teatru Thalia");
if ($PR3=="ON")
echo("<li>Administrarea retelei de calculatoare");
if ($PR4=="ON") echo("<li>Cercul de arta Apollo");
if ($PR5=="ON") echo("<li>Cenaclul literar Poesis");
if ($PR6=="ON") echo("<li>Muzicienii informaticieni");
echo("</li></ol>");
echo("<li>Sugestii/comentarii: $sugestii</li></ul>");
echo("</p>");
echo("<p><center><font size=+2 color='blue'>");
echo("Va multumim pentru inscrierea dvs. in ");
echo("<a href='clubul.html'>Clubul nostru</a>!");
echo("</font></center></p>");
echo("<p align='center'><a href='javascript:history.back()'>
echo("<img src='previous.gif'></img></a></p>");
echo("</body></html>");
$f=fopen("formular.txt","a");
fwrite($f,"------------------------------\n");
fwrite($f,$nume); fwrite($f,"\n");
fwrite($f,$email); fwrite($f,"\n");
fwrite($f,$telefon); fwrite($f,"\n");
fwrite($f,$mobil); fwrite($f,"\n");
fwrite($f,$sex); fwrite($f,"\n");
fwrite($f,$clasa); fwrite($f,$lclasa); fwrite($f,"\n");
if ($C1=="ON") fwrite($f,"1-da\n"); else fwrite($f,"1-nu\n");
if ($C2=="ON") fwrite($f,"2-da\n"); else fwrite($f,"2-nu\n");
if ($C3=="ON") fwrite($f,"3-da\n"); else fwrite($f,"3-nu\n");
if ($C4=="ON") fwrite($f,"4-da\n"); else fwrite($f,"4-nu\n");
if ($C5=="ON") fwrite($f,"5-da\n"); else fwrite($f,"5-nu\n");
if ($C6=="ON") fwrite($f,"6-da\n"); else fwrite($f,"6-nu\n");
if ($C7=="ON") fwrite($f,"7-da\n"); else fwrite($f,"7-nu\n");
if ($C8=="ON") fwrite($f,"8-da\n"); else fwrite($f,"8-nu\n");
if ($C9=="ON") fwrite($f,"9-da\n"); else fwrite($f,"9-nu\n");
if ($C10=="ON") fwrite($f,"10-da\n");
else fwrite($f,"10-nu\n");
if ($C11=="ON") fwrite($f,"11-da\n");
else fwrite($f,"11-nu\n");
if ($C12=="ON") fwrite($f,"12-da\n");
else fwrite($f,"12-nu\n");
if ($C13=="ON") fwrite($f,"13-da\n");
else fwrite($f,"13-nu\n");
fwrite($f,$disponib); fwrite($f,"\n");
if ($PR1=="ON") fwrite($f,"1-da\n");
else fwrite($f,"1-nu\n");
if ($PR2=="ON") fwrite($f,"2-da\n");
else fwrite($f,"2-nu\n");
if ($PR3=="ON") fwrite($f,"3-da\n");
else fwrite($f,"3-nu\n");
if ($PR4=="ON") fwrite($f,"4-da\n");
else fwrite($f,"4-nu\n");
if ($PR5=="ON") fwrite($f,"5-da\n");
else fwrite($f,"5-nu\n");
if ($PR6=="ON") fwrite($f,"6-da\n");
else fwrite($f,"6-nu\n");
fwrite($f,$sugestii); fwrite($f,"\n");
fclose($f);
}
?>

Fisierul rezultat (FORMULAR.TXT) va arata cam asa:


------------------------------
Dragoi Daniel
dragdan20@hotmail.com
034/127347
094/885264
masculin
9E
1-nu
2-da
3-nu
4-nu
5-da
6-nu
7-nu
8-nu
9-nu
10-nu
11-nu
12-nu
13-nu
o data pe saptamana
1-nu
2-nu
3-da
4-nu
5-nu
6-nu
Sunteti grozavi!
#
------------------------------
Ionescu Maria
ionescu_maria@yahoo.com
034/174396
092/189112
feminin
10E
1-da
2-nu
3-da
4-da
5-da
6-nu
7-nu
8-nu
9-nu
10-nu
11-nu
12-nu
13-nu
in week-end
1-nu
2-nu
3-nu
4-nu
5-da
6-da
Ar fi bine sa existe si un cerc de limbi straine.
#

b) Citirea si afisarea datelor dintr-un fisier

In continuare vom realiza programul PHP care sa citeasca si sa afiseze datele din fisierul
FORMULAR.TXT din exemplul anterior. Fireste, nu este cel mai potrivit mod de a lucra
cu date atât de complexe, de aceea vom apela la un sistem de gestiune a bazelor de date
(SGBD), precum MySQL, care este foarte simplu de invatat si de utilizat, este liber si
versiunile sale pentru Windows95/98 si Linux pot fi desc`rcate din web de la adresa
http://www.mysql.com.

Dar pâna atunci, programul care realizeaza citirea si afisarea datelor despre persoanele
incluse in club este cel de mai jos. Din punct de vedere didactic, acest program si cel de
la punctul anterior au rolul de a prezenta utlizarea eficienta a instructiunii if-else,
lucrul cu fisiere text, precum si crearea de pagini web in mod dinamic, direct din cod
PHP.

Programul de mai jos prezinta si o utilizare interesanta a functiei de generare a numerelor


aleatoare, care face ca de fiecare data când se va genera pagina web dinamica sa se obtina
o alta imagine GIF in cadrul paginii. Daca imaginile GIF sunt si animate, efectul este
foarte captivant.
<?php
echo("<html><title>Persoane inscrise in club</title>");
echo("<body background='fond.jpg'>");
echo("<p align='center'>");
srand((double)microtime()*1000000);
$r = rand(0,3);
if ($r==0) {
echo("<a href='formular.html'>");
echo("<img src='clubarta.gif'></a>\n")"); }
else
if ($r==1) { echo("<a href='formular.html'>");
echo("<img src='clubmuzica.gif'></a>\n");}
else if ($r==2)
{ echo("<a href='formular.html'>");
echo("<img src='clubretea.gif'></a>\n");}
else if ($r==3)
{ echo("<a href='veniti_cu_noi.html'>");
echo("<img src='veniticunoi.gif'></a>\n"); }
echo("</p><br>");
echo("<img src='calv.gif'>\n");
echo("<center><font size=+2 color='blue'>");
echo("Persoanele inscrise in <b><a href='clubul.html'>");
echo("CLUBUL NOSTRU</a></b> sunt:</font></center><br><br>");
echo("<p align='right'>");
echo("<ol>");
$denumire[1]="Revista"; $denumire[2]="Thalia";
$denumire[3]="Retea"; $denumire[4]="Apollo";
$denumire[5]="Poesis"; $denumire[6]="Muzica";
$f=fopen("formular.txt","r");
$n=0;
while (!feof ($f)) {
$s = fgets($f, 4096);
if ($s!="") {
$numele = fgets($f, 4096);
$n=$n+1;
for ($i=3; $i<7; $i++)
$s = fgets($f, 4096);
$cl = fgets($f, 4096);
for ($i=8; $i<22; $i++)
$s = fgets($f, 4096);
echo("<p>$n. <b>$numele</b>, <i>$cl</i>---> ");
for ($i=22; $i<28; $i=$i+1) {
$s = fgets($f, 4096);
if ($s[2]=="d") { $y=$s[0]; echo("$denumire[$y]; "); }
}
$gata=0;
while (!$gata) {
$s = fgets($f, 4096);
if ($s[0]=='#') $gata=1;
}
}
echo("</p>");
}
fclose ($f);
echo("<p><br><b>Total: $n persoane.</b></p>");
?>

In acest program am folosit functia fgets pentru a citi date dintr-un fisier text. PHP
dispune de o mare varietate de functii de intrare-iesire a datelor din fisiere, asa ca ramâne
la latitudinea fiecarui programator de a alege cea mai potrivita varianta, pentru o situatie
data.
Laboratorul 4. Utilizarea sistemului de baze de date MYSQL din linia
de comanda
Ca si PHP, MySQL se gaseste liber pe Internet, la adresa http://www.mysql.com,
de unde il puteti descarca si instala. Puteti testa programele sub Windows 95/98 si apoi sa
le transferati sub mediul Linux, cu mici modificari legate de conectarea la serverul
MySQL.

Crearea bazei de date.... Sa zicem ca se va numi “baza”. Cum se face? [SIMONA]

Interogarea MySQL

Limbajul SQL care sta la baza interogarilor bazelor de date relationale nu este foarte
complicat, dar invatarea lui nu constituie obiectul acestui material. Totusi, câteva
comenzi de baza si exemple de utilizare vom prezenta in continuare. Toate comenzile in
MySQL trebuie sa se termine cu simbolul punct si virgula ";".

1) Conectarea utilizatorului la serverul MySQL se poate face cu:

connect;

Parametrii optionali pot fi baza de date si calculatorul gazd`.

Exemplu:
mysql> connect
Connection id: 5
Current database: baza

2) Dând comanda use baza; ne putem alege baza de date "baza" pentru a lucra in
continuare cu ea (o deschidem).

Exemplu:
mysql> use baza;
Database changed

3) Comanda create table ne permite crearea unui nou tabel, cu o anumita structura, in
cadrul bazei de date curente.

Exemplu: Vom crea tabelul agenda pentru gestionarea numelor si vârstelor unor
persoane:
mysql> create table agenda (nume char(30), varsta int(3));
Query OK, 0 rows affected (0.22 sec)

Creati tabela/tabelul marfuri cu urmatoarea structura. Ce tipuri de date ar fi potrivite


pentru fiecare din aceste campuri?
+------------+------+------+---------+
| denumire | pu | cant | valoare |
+------------+------+------+---------+
4) Comanda show tables ne da lista tuturor tabelelor existente in baza curenta:

Exemplu:
mysql> show tables;
+----------------+
| Tables_in_baza |
+----------------+
| agenda |
| marfuri |
+----------------+
2 rows in set (0.22 sec)

5) Pentru a introduce (adauga) o noua inregistrare in tabelul marfuri al bazei de date


curente, putem folosi comanda insert, ca in exemplu urmator:

Exemplu: Adaugam in tabel un nou produs, numit 'CONOPIDA', precizându-i toate


câmpurile si toate valorile corespunzatoare câmpurilor, apoi vizualizam tabelul rezultat
dupa adaugare (scrieti cu litere mari CONOPIDA!).

mysql> insert into marfuri(denumire, pu, cant, valoare)


values('CONOPIDA',8,10,80) ;
Query OK, 1 row affected (0.00 sec)

Sa mai adaugam in tabelul marfuri si urmatoarele inregistari (scrieti conopida, mazare,


piersici etc. cu litere mici!)
| conopida | 18 | 43 | 774 |
| mazare | 35 | 3 | 105 |
| piersici | 6 | 56 | 336 |
| cartofi | 19 | 34 | 646 |
| morcovi | 10 | 20 | 200 |
| conopida | 16 | 7 | 112 |
| castraveti | 8 | 10 | 80 |
| pepene | 78 | 18 | 1404 |

Acum sa invatam cum puteam vedea ce avem in tabel.

6) Pentru a realiza o interogare a unui tabel din baza de date, deci pentru a selecta si afisa
toate sau doar o parte din inregistrarile dintr-un tabel, se foloseste comanda select, care
este cea mai complexa comanda SQL, iar descrierea ei in totalitate nu face subiectul
acestui material. Revedeti cursul de Baze de date sau pe cel de Sisteme de gestiunea
bazelor de date!

Exista, insa, o serie de manuale de baze de date sau despre limbajul SQL din care poti
invata mult mai multe. Totusi, câteva exemple folosind comanda SQL vor fi date mai jos.
Toate exemplele se refera la tabelul marfuri din baza de date curenta (baza).

Exemple:

a) Afisarea tuturor inregistrarilor din tabel:


mysql> select * from marfuri;
+------------+------+------+---------+
| denumire | pu | cant | valoare |
+------------+------+------+---------+
| conopida | 18 | 43 | 774 |
| mazare | 35 | 3 | 105 |
| piersici | 6 | 56 | 336 |
| cartofi | 19 | 34 | 646 |
| morcovi | 10 | 20 | 200 |
| conopida | 16 | 7 | 112 |
| castraveti | 8 | 10 | 80 |
| pepene | 78 | 18 | 1404 |
| CONOPIDA | 8 | 10 | 80 |
+------------+------+------+---------+
9 rows in set (0.00 sec)

b) Afisarea doar a denumirilor si a valorii tuturor inregistrarilor din tabel:


mysql> select denumire, valoare from marfuri;
+------------+---------+
| denumire | valoare |
+------------+---------+
| conopida | 774 |
| mazare | 105 |
| piersici | 336 |
| cartofi | 646 |
| morcovi | 200 |
| conopida | 112 |
| castraveti | 80 |
| pepene | 1404 |
+------------+---------+
8 rows in set (0.05 sec)

c) Afisarea doar a produselor cu valoarea mai mare sau egala cu o valoare data (500):
mysql> select * from marfuri where valoare>=500;
+----------+------+------+---------+
| denumire | pu | cant | valoare |
+----------+------+------+---------+
| conopida | 18 | 43 | 774 |
| cartofi | 19 | 34 | 646 |
| pepene | 78 | 18 | 1404 |
+----------+------+------+---------+
3 rows in set (0.06 sec)

d) Afisarea valorii produselor din tabel si a valorii cu tot cu TVA (se considera cota TVA
ca fiind de 19%). Desi in structura tabelului nu exista câmpul val_tva, se va genera
aceasta coloana prin comanda select de mai jos:
mysql> select denumire, valoare, valoare*1.19 as val_tva from marfuri;
+------------+---------+---------+
| denumire | valoare | val_tva |
+------------+---------+---------+
| conopida | 774 | 921.06 |
| mazare | 105 | 124.95 |
| piersici | 336 | 399.84 |
| cartofi | 646 | 768.74 |
| morcovi | 200 | 238.00 |
| conopida | 112 | 133.28 |
| castraveti | 80 | 95.20 |
| pepene | 1404 | 1670.76 |
+------------+---------+---------+
8 rows in set (0.00 sec)

e) Selectarea produselor din tabel cu preturi unitare intre doua valori date (de exemplu 10
si 40), in ordine alfabetica:
mysql> select * from marfuri where pu between 10 and 40 order by
denumire;
+----------+------+------+---------+
| denumire | pu | cant | valoare |
+----------+------+------+---------+
| cartofi | 19 | 34 | 646 |
| conopida | 18 | 43 | 774 |
| conopida | 16 | 7 | 112 |
| mazare | 35 | 3 | 105 |
| morcovi | 10 | 20 | 200 |
+----------+------+------+---------+
5 rows in set (0.00 sec)

7) Instruc\iunea SQL delete sterge una sau mai multe intregistrari dintr-un tabel al
bazei de date. Se pot folosi, ca si la select, diferite criterii de stergere.

Exemplu: La tabelul de mai sus, daca aplicam urmatoarea instructiune delete, vom
elimina din tabel rândurile ce contin atât denumirea 'conopida', cât si denumirea
'CONOPIDA". Acest lucru se datoreazaoperatorului special like, care nu deosebeste
literele mari de cele mici.
mysql> delete from tabel where denumire like 'conopida';
Query OK, 3 rows affected (0.05 sec)
mysql> select * from tabel;
+------------+------+------+---------+
| denumire | pu | cant | valoare |
+------------+------+------+---------+
| mazare | 35 | 3 | 105 |
| piersici | 6 | 56 | 336 |
| cartofi | 19 | 34 | 646 |
| morcovi | 10 | 20 | 200 |
| castraveti | 8 | 10 | 80 |
| pepene | 78 | 18 | 1404 |
+------------+------+------+---------+
6 rows in set (0.16 sec)

8) In sfârsit, instructiunea update permite actualizarea unui articol din baza de date. Afla
singur cum se foloseste!

Corespunzatoare tuturor acestor instructiuni SQL exista functiile PHP de lucru cu baze de
date MySQL numite mysql_connect pentru conectarea la baza de date si
mysql_query pentru realizarea de interogari SQL, deci pentru celelalte comenzi.
Acestea vor fi exemplificate in continuare.
Laboratorul 5. Lucrare de verificare cu diferite exercitii
In care se va constata care studenti au priceput si stiu ceva (Dragos, Florin, Doina,
Corneliu, Vlad, Andrei) si care nu (ceilalti)

Laboratorul 6. Transmiterea datelor prin FTP (upload) si generarea


automata de e-mail.

Funcţiile ftp_connect, ftp_login, ftp_put, ftp_quit, send_mail?

Exemplu:
$con=ftp_connect("bogdan");
ftp_login($con,"bogdan","passw");
$nf=$den."_".$pret."_".$cantit;
$p=strrpos($poza,".");
$extensie=substr($poza,$p+1);
$fis_poza=$nf.".".$extensie;
ftp_put($con,$fis_poza,$poza,FTP_BINARY);
ftp_quit($con);
echo "<html><head><title>Adaugare</title></head>";
echo "<body background='fond.jpg'>";
echo "<br>Am adaugat: <b>$den</b>, PU: $pret Cant: $cantit Val:
$valoare";
$s=stripslashes($poza);
echo ("<p align='center'><img src='$s'</p>");
echo("</body></html>");
}

Laboratoarele 7-12. Realizarea unei aplicatii practice in echipe de cate


1-3
Teme (pot fi si sugestii ale studentilor)
• Depozit virtual
• Magazin virtual
• Blog
• Forum de discutii
• Site matrimoniale
• Site anunturi
• Site job-uri
• Catalog online pentru biblioteci
• Site cumparari/vanzari auto
• Site de socializare

Laboratoarele 13 si 14. Prezentarea proiectului si notare


Anexă

Exemplu de aplicate complexaPHP-MySQL


In continuare vom prezenta o aplicatie PHP cu o baza de date MySQL mai complexa, In
care putem face adaugari, stergeri, vizualizari intr-un tabel MySQL, direct dintr-o pagina
web, prin intermediul unor functii PHP.

Astfel, sa consider`m ca avem o baza de date numita chiar BAZA, ce contine un tabel
numit chiar TABEL, acesta având urmatoarea structura:

denumire - caracter(20), pu - numeric(5), cant - numeric(5), valoare - numeric(10)

Baza de date se refera la produsele (m`rfurile) dintr-o magazie. Câmpul valoare este
determinat ca fiind pu inmultit cu cant.

Vom crea o pagina web cu doua cadre: in cadrul din stânga vom avea un meniu de unde
putem accesa diferite comenzi asupra tabelului, comenzi al caror efect se va vizualiza in
cadrul din dreapta.

Iata cum va arata pagina web in cazul in care s-a actionat, de exemplu, comanda
"Adaugare":

Practic, va trebui sa cream, pentru aplicatia noastra, urmatoarele fisiere:

• INDEX.HTML - pagina principala, cea care va fi accesata de catre utilizatorul


aplicatiei; in aceasta pagina sunt descrise cadrele din stânga si din dreapta
<html>
<head>
<title>Depozitul virtual</title>
<frameset border="5" frameborder="5" cols="180,*">
<frame name="left" target="right" resizable src="meniu.html" scrolling="yes">
<frame name="right" resizable src="prezentare.html">
<noframes>
</head>
<body>
Depozitul virtual.
This page uses frames, but your browser
doesn't support them.
</body>
</noframes>
</frameset>
</html>

• MENIU.HTML - pagina ce contine referinte catre paginile ce implementeaza


comenzile de lucru cu tabelul TABEL din baza de date BAZA:
ƒ PREZENTARE.HTML,
ƒ ADAUGARE.HTML,
ƒ STERGERE.HTML,
ƒ MODIFICARE.HTML,
ƒ VIZUALIZARE.HTML.
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>Meniu principal</title>
</head>
<body background="fond.jpg" bgcolor="#C0C0C0">
<p><font color="#800000" size="4"><strong>Depozitul virtual</strong></font></p>
<p><a href="prezentare.html" target="right">Prezentare</a></p>
<p><a href="adaugare.html" target="right">Adaugare</a></p>
<p><a href="stergere.html" target="right">Stergere</a></p>
<p><a href="modificare.html" target="right">Modificare</a></p>
<p><a href="vizualizare.html" target="right">Vizualizare</a></p>
<p>&nbsp;</p>
</body>
</html>

Fireste, vom avea cele cinci fisiere care sunt apelate din meniu. Fisierul
MODIFICARE.HTML nu este creat; Iti propun drept exercirtiu implementarea comenzii
de modificare a unui articol din baza de date. Vei folosi instructiunea UPDATE din SQL.

• PREZENTARE.HTML este incarcat imediat chiar din INDEX.HTML si contine o


scurta descriere a aplicatiei noastre:
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>Prezentare</title>
</head>
<body background="fond.jpg" bgcolor="#FFFFFF">

<p><font color="#FF0000" size="5"><strong>Depozitul


virtual:</strong></font></p>
<p>Puteti adauga, sterge si vizualiza selectiv informatiile
despre mai multe produse dintr-un depozit.</p>
<p>Alegeti comenzile din maniul din partea stanga.</p>
<p>(C) 2001 <strong>Bogdan Patrut</strong></p>
</body>
</html>

Sub forma grafica, aceasta pagina arata astfel:

• Urm`toarea pagina, ADAUGARE.HTML, contine un formular de adaugare, a carei


actiune este in script-ul ADAUGARE.PHP:
<html>
<head>
<title>Adaugare</title>
</head>
<body background="fond.jpg" bgcolor="#FFFFFF">
<p><font color="#FF0000" size="5">
<strong>Adaugare produs:</strong></font></p>
<p>Se adauga un produs nou in baza de date.</p>
<form action="adaugare.php" method="POST">
<p>Denumire: <input type="text" size="20" name="den">&nbsp;
Pret unitar: <input type="text" size="20" name="pret"></p>
<p>Cantitate: <input type="text" size="20" name="cantit">
<p>Fisier cu poza: <input type="file" size="20" name="poza">
<p><input type="submit" name="butonOK" value="Adauga"> Parola de
adaugare: <input type="password" size="8" name="parola"></p>
</form>
</body>
</html>
Grafic, aceasta pagina arata astfel:

• Pagina de stergere, STERGERE.HTML, contine un formular similar ce face apel la


script-ul PHP descris in fisierul STERGERE.PHP.
<html>
<head>
<title>Stergere</title>
</head>
<body background="fond.jpg" bgcolor="#FFFFFF">
<p><font color="#FF0000" size="5">
<strong>Stergere produse:</strong></font></p>
<p>Se sterg produse diin baza de date, dupa criterii:</p>
<form action="stergere.php" method="POST">
<p>Denumire: <input type="text" size="20" name="den">&nbsp;
Pret unitar: <input type="text" size="20" name="pret"></p>
<p>Cantitate: <input type="text" size="20" name="cantit"><input
type="submit" name="butonOK" value="Sterge"> Parola de
stergere: <input type="password" size="9" name="parola"></p>
</form> </body> </html>

In programul de navigare vom vedea aceasta pagina astfel:


• In sfârsit, VIZUALIZARE.HTML contine un formular asemanator:

<html>
<head>
<title>Vizualizare</title>
</head>
<body background="fond.jpg" bgcolor="#FFFFFF">
<p><font color="#FF0000" size="5">
<strong>Vizualizare produse:</strong></font></p>
<p>Se listeaza produse din baza de date, dupa criterii:</p>
<form action="vizualizare.php" method="POST">
<p>Denumire: <input type="text" size="20" name="den">&nbsp;
Pret unitar: <input type="text" size="20" name="pret"></p>
<p>Cantitate: <input type="text" size="20"
name="cantit">&nbsp;<input
type="submit" name="butonOK" value="Listeaza"></p>
<p>Ordonare dupa: <input type="radio" checked name="R1"
value="denumire"> denumire <input type="radio" name="R1"
value="pu"> pret unitar <input type="radio" name="R1"
value="cantitate">cantitate</p>
</form>
</body>
</html>

Aceast` descriere va aparea in pagina web astfel:


Comanda de vizualizare poate avea urmatorul efect, daca se lasa libere toate câmpurile:

In continuare, vom prezenta cele trei script-uri care realizeaza operatiile de adaugare,
stergere si respectiv vizualizare a unor inregistrari din tabelul bazei de date, pe baza
formularelor descrise. Conventia la vizualizare este ca daca nu se introduce nici un câmp
in formular, atunci se vor vizualiza toate inregistrarile din baza de date, dar fara fotografii
(ci doar cu trimiteri la ele).

• Programul: ADAUGARE.PHP - adauga produsul cu datele din formular in baza de


date. Formularul contine un câmp de parola, asa incât nu orice persoana poate adauga
un articol in baza de date, ci doar cei ce cunosc parola (care este chiar textul
"parola").
<?php
if ($parola!="parola")
{
echo "<html><head><title>Stergere</title></head>";
echo "<body background='fond.jpg'>";
echo "<br>Adaugarea o poate face doar";
echo "administratorul!";
echo "<br>El cunoaste parola de stergere!";
echo "</body></html>";
}
else {
// bogdan=127.0.0.1
$con=mysql_connect("","bogdan","passw") or
die("Nu ma pot conecta!");
mysql_select_db("baza",$con);
$valoare=$cantit*$pret;
mysql_query("insert into tabel(denumire,pu,cant,valoare) values(\"$den\",
\"$pret\", \"$cantit\", \"$valoare\");", $con);
mysql_close($con);

$con=ftp_connect("bogdan");
ftp_login($con,"bogdan","passw");
$nf=$den."_".$pret."_".$cantit;
$p=strrpos($poza,".");
$extensie=substr($poza,$p+1);
$fis_poza=$nf.".".$extensie;
ftp_put($con,$fis_poza,$poza,FTP_BINARY);
ftp_quit($con);
echo "<html><head><title>Adaugare</title></head>";
echo "<body background='fond.jpg'>";
echo "<br>Am adaugat: <b>$den</b>, PU: $pret Cant: $cantit Val:
$valoare";
$s=stripslashes($poza);
echo ("<p align='center'><img src='$s'</p>");
echo("</body></html>");
}
?>

Vei observa cu usurinta faptul ca in afara de a adauga datele unui produs in baza de date,
are loc si un transfer al unui fisier binar continând imaginea produsului. Acest fisier se
afla pe calculatorul client si este transferat pe calculatorul server (gazda), prin protocolul
FTP, folosind chiar functii specializate pe "File transfer protocol" pe care le detine PHP.
Daca ti se pare ca nu intelegi cum stau lucrurile cu transferul prin FTP sau ai o problema
cu acest lucru, poti elimina liniile de program care fac referinta la transferul imaginii
produsului.

• Programul STERGERE.PHP realizeaza eliminarea tuturor produselor din baza de


date care se potrivesc modelului dat de felul in care este completat formularul din
pagina STERGERE.HTML.
<?php
if ($parola!="parola")
{
echo "<html><head><title>Stergere</title></head>";
echo "<body background='fond.jpg'>";
echo "<br>Stergerea o poate face doar";
echo "administratorul!";
echo "<br>El cunoaste parola de stergere!";
echo "</body></html>";
}
else {
if (($den=="") && ($pret=="") && ($cantit==""))
{
$con=mysql_connect("","bogdan","passw") or
die("Nu ma pot conecta!");
mysql_select_db("baza",$con);
$s="delete from tabel";
mysql_query($s,$con);
mysql_close($con);
echo "<html><head><title>Stergere</title></head>";
echo "<body background='fond.jpg'>";
echo "<br>S-au sters toate inregistrarile!";
echo "</body></html>";
}
else
{
// server, cont, parola
$con=mysql_connect("","bogdan","passw") or
die("Nu ma pot conecta!");
mysql_select_db("baza",$con);
$s="delete from tabel where ";
if ($den!="")
if (($pret!="") or ($cantit!=""))
$s1="denumire like \"$den\" and ";
else $s1="denumire like \"$den\"";
else
$s1="";
if ($pret!="")
if ($cantit!="") $s2="pu=$pret and";
else $s2="pu=$pret";
else $s2="";
if ($cantit!="") $s3="cant=$cantit"; else $s3="";
$s=$s.$s1.$s2.$s3.";";
mysql_query($s,$con);
mysql_close($con);
echo "<html><head><title>Stergere</title></head>";
echo "<body background='fond.jpg'>";
echo "<br>Am sters toate produsele $s";
echo "</body></html>";
}
}
?>

• Programul de vizualizare VIZUALIZARE.HTML este prezentat mai jos si ia in


discutie mai multe modalitati de vizualizare a continutului bazei de date:
<?php
if (($den=="") && ($pret=="") && ($cantit==""))
{
$con=mysql_connect("","bogdan","passw") or
die("Nu ma pot conecta!");
mysql_select_db("baza",$con);
echo "<html><head><title>Vizualizare</title></head>";
echo "<body background='fond.jpg'>";
echo "<br>Mai jos sunt listate toate produsele<p>";
echo "<table border=\"1\">";
echo "<tr>";
echo "<td><strong>Nr. crt.</strong></td>";
echo "<td><strong>Denumire</strong></td>";
echo "<td><strong>Pret unitar</strong></td>";
echo "<td><strong>Cantitate</strong></td>";
echo "<td><strong>Valoare</strong></td>";
echo "<td><strong>Imagine</strong></td></tr>";
$s="select * from tabel order by ";
if ($R1=="denumire") $s=$s."denumire;";
else
if ($R1=="pu") $s=$s."pu;";
else $s=$s."cant desc;";
echo ($s);
$rez=mysql_query($s, $con);

$conftp=ftp_connect("bogdan");
ftp_login($conftp,"bogdan","passw");

$i=0;

while ($sir=mysql_fetch_array($rez))
{
$i=$i+1;
echo "<tr>";
echo "<td>$i</td>";
echo "<td>$sir[0]</td>";
echo "<td>$sir[1]</td>";
echo "<td>$sir[2]</td>";
echo "<td>$sir[3]</td>";

$nf=$sir[0]."_".$sir[1]."_".$sir[2].".jpg"; //!!!
// ftp_get($conftp,"c:\\Windows\\Temp\\".$nf,$nf,FTP_BINARY);
$poza = stripslashes($nf);
// $ss="c:\\Windows\\Temp\\".$nf;
$ss="ftp://bogdan//".$nf;
echo "<td><a href=$ss>click aici pentru ";
echo "foto</a></td>";

echo "</tr>";
}
echo "</table>";

mysql_free_result($rez);
ftp_quit($conftp);

echo "</p></body></html>";
}
else
{
$con=mysql_connect("","bogdan","passw") or
die("Nu ma pot conecta!");
mysql_select_db("baza",$con);
$s="select * from tabel where ";
if ($den!="")
if (($pret!="") or ($cantit!=""))
$s1="denumire like \"$den\" and ";
else
$s1="denumire like \"$den\"";
else
$s1="";
if ($pret!="")
if ($cantit!="") $s2="pu=$pret and";
else $s2="pu=$pret";
else $s2="";
if ($cantit!="") $s3="cant=$cantit"; else $s3="";
$s=$s.$s1.$s2.$s3.";";
echo "<html><head><title>Vizualizare</title></head>";
echo "<body background='fond.jpg'>";
echo "<br>Mai jos sunt listate toate produsele $s<p>";
echo "<table border=\"1\">";
echo "<tr>";
echo "<td><strong>Nr. crt.</strong></td>";
echo "<td><strong>Denumire</strong></td>";
echo "<td><strong>Pret unitar</strong></td>";
echo "<td><strong>Cantitate</strong></td>";
echo "<td><strong>Valoare</strong></td>";
echo "<td><strong>Imagine</strong></td></tr>";
$rez = mysql_query($s, $con);

$conftp=ftp_connect("bogdan");
ftp_login($conftp,"bogdan","passw");

$i=0;
while ($sir=mysql_fetch_array($rez))
{
$i=$i+1;
echo "<tr>";
echo "<td>$i</td>";
echo "<td>$sir[0]</td>";
echo "<td>$sir[1]</td>";
echo "<td>$sir[2]</td>";
echo "<td>$sir[3]</td>";

$nf=$sir[0]."_".$sir[1]."_".$sir[2].".jpg"; //!!!
ftp_get($conftp,$nf,$nf,FTP_BINARY);
$poza = stripslashes($nf);
// echo "<td><a href='$poza'>click aici pentru ";
// echo "foto</a></td>";
echo "<td><img src='$poza'></td>";

echo "</tr>";
}

echo "</table>";
mysql_free_result($rez);
ftp_quit($conftp);

echo "</p></body></html>";
}
?>

Incearca acest exemplu, schimbând la nevoie numele serverului, numele utilizatorului si


parola si apoi fa mici modificari, pentru a invata prin descoperire ce sta in spatele acestor
programe. Apoi incearca singur sa obtii rezultate deosebite exploatând baze de date direct
din paginile web.

Mult succes!

You might also like