PHP si MySql
I.1.CE ESTE PHP
PHP este abrevierea de la PHP - Hypertext Preprocessor (similar cu GNU ce reprezinta abrevierea de la GNU's Not Unix).
PHP este un
limbaj de programare pentru creerea site -urilor dinamice si interactive si a
fost introdus de Rasmus Lerdorf in 1994. De atunci PHP a suferit numeroase
schimbari.
In termeni tehnici PHP4 este un limbaj tip script, cross platform, HTML embedded
si server side.
Cross platform - puteti rula PHP pe sisteme de operare diferite, in majoritatea cazurilor fara modificari.
HTML embedded - codul PHP este o mixtura de instructiuni PHP si cod HTML.
Server side - programele scrise in PHP ruleaza pe un server (in general un Web Server cum ar fi Apache, IIS, etc..).
PHP4 este ultima implementare stabila de PHP si ea ruleaza pe serverele unui numar mare de ISP, ceea ce inseamna ca odata ce scrieti o aplicatie in PHP4, o puteti cu usurinta gazdui pe Web.
I.2. SCRIEREA PROGRAMELOR IN PHP
Programele PHP sunt o mixtura de trei elemente : text, cod HTML si script PHP
Pentru ca paginile ce contin script PHP sa poata fi procesate de modulul PHP implementat in Apache sau alt server de pagini Web este necesar ca paginile sa aiba acea extensie pe care ati specificat-o la incarcarea modulului in serverul de web (standard, extensia implicita este .php).
Primul exemplu de program:
<HTML>
<BODY>Program 1 <BR>
<?php
echo "Salut studentule !!";
?>
</BODY>
</HTML>
Salvati acest fisier in directorul radacina al paginilor de web, sub numele de program1.php .
Programul va afisa mesajul :
Program 1
Salut studentule !!
Daca studiem codul vom vedea ca sunt trei categorii de cod :
i) <HTML>,<BODY>,<BR> sunt elemente tag din sitaxa HTML ;
ii) Program 1 este text
iii) Codul cuprins intre <?php si ?> este cod PHP. Delimitatorul uzual pentru PHP este <?php , respectiv inchiderea se face prin ?>. Exista varianta simpla <? , respectiv inchidere prin ?> . Intre aceste taguri trebuie sa existe NUMAI cod PHP.
Cum functioneaza codul ?
Fisierul program1.php este trimis modulului de
php incarcat in serverul de web. Modulul prelucreaza NUMAI ce se afla intre
tagurile <?php si ?> restul fiind trimis catre serverul
web fara a fi prelucrat sau interpretat.
Rezultatul prelucrarii este si el trimis serverului de web care trimite mai
departe catre client (browser).
Comanda echo este folosita pentru trimiterea catre serverul de web a textului inscris intre cele doua ghilimele.
Fiecare linie de cod PHP (dupa terminare) trebuie inchisa de semnul punct-si-virgula (;).
I.3. DESPRE PHP
I.3.1.LIMBAJUL PHP
Variabila reprezinta un identificato 333e45d r la o locatie de memorie si se foloseste pentru stocarea, prelucrarea si stergerea datelor.
Variabilele in PHP sunt apelate folosind prefixul '$'.
Ex: $nume="Andrei";
Dupa ce am initializat o variabila atribuindu-i o valoare putem folosi acea variabila.
Ex: echo $nume;
Limitari si reguli ale variabilelor
In multe limbaje de programare exista o limitare a numarului de caractere din numele variabilei (intre 255-1000 caractere).
In PHP nu exista astfel de limitari.
O regula a variabilelor este ca ele trebuie sa inceapa cu o litera sau cu un
underscore (dupa prefixul '$').
O alta regula este ca in corpul numelui variabilei sunt acceptate litere, numere si underscore, simboluri precum +,-,* si & nefiind admise.
Variabilele in PHP sunt case-sensitive, adica $student este diferit de $Student .
Exemplu: - asignarea unei valori variabilei si afisarea ei.
<html>
<body>
Numele dvs. este :
<?php
$nume="Gigel";
echo $nume;
?>
</body>
</html>
I.3.2.TIPURI DE DATE IN PHP
PHP cuprinde mai multe tipuri de variabile, dintre care cele mai importante sunt cele ce contin valori de tip text si numeric.
string (text)
integer (numeric)
double (numeric)
array
object
Tipurile de date nu sunt stabilite de programator; PHP decide asupra lor atunci cand interpreteaza codul.
Tipul de data string - tot ce este cuprins intre ghilimele la initializare se considera string (chiar si numerele).
Exemplu :
$nume="Ionescu";
$nr="5";
In acest caz, ambele variabile sunt de tip string.
Concatenarea stringurilor se face prin operatorul '.' .
Exemplu:
$marca="Renault";
$tip="Megane";
$capacitate="1.9";
$carburant="D";
$masina=$marca." ".$tip." ".$capacitate." ".$carburant;
(intre "" este un spatiu).
Astfel, o apelare de forma : echo $masina;
va afisa : Renault Megane 1.9 D
Date de tip numeric
In PHP exista 2 tipuri de date numerice : integer si double.
Integer sunt numere fara virgula, in timp ce double reprezinta numere cu zecimale.
Exemplu:
$int1=15;
$int2=-1500;
$double1=9.57;
$double2=-15.9;
Valorile minime si maxime cuprinse in tipurile de date de mai sus sunt :
Integer = -32768 <-> 32768
Double pentru numere negative : -1.79*10^308 <-> -4.94*10^-324
Double pentru numere pozitive : 4.94*10-394 <-> 1.79*10^308
Operatori numerici: sunt cei standard (+,-,*,/,%);
Ex: $v1=$v2+$v3;
$v4=$v4+5; $v4+=5;
$v5=$v5+1; $v5++;
$v6=$v6-1; $v6--;
$v7=$v7*5; $v7*=5;
$v8=$v8/5; $v8/=5;
$v9=$v9%2 $v9%=2;
Pentru tipul de data numeric se pot folosi si functii matematice, cum ar fi :
pow(x,y) - va returna rezulatul ridicarii lui x la puterea y;
sqrt(x) - va returna radicalul lui x.
I.3.3.CONSTANTE SI CONVERSII
O variabila isi poate modifica continutul de mai multe ori pe parcursul unui program. Daca dorim ca o locatie de memorie sa nu poata fi schimbata pe parcursul unui program putem folosi instructiunea define.
Ex: define("ZINATIONALA","1DEC");
Constantele sunt scrise prin conventie cu MAJUSCULE. Constantele se pot afisa avand grija sa nu folositi semnul $.
Ex : echo "Ziua nationala este:".ZINATIONALA;
- va returna Ziua nationala este 1DEC
Daca am fi scris :
echo "Ziua nationala este ZINATIONALA";
- rezultatul ar fi fost : Ziua nationala este ZINATIONALA
PHP are propriile sale constante, cum ar fi PHP_OS;
Conversii
Pentru ca in PHP variabilele nu pot fi definite ca in alte limbaje (C++), conversiile joaca un rol foarte important atunci cand doriti sa trasformati tipul de data al unei variabile sau sa determinati ce tip de data a atribuit PHP variabilei dvs.
Spre deosebire de alte limbaje unde puteati efectua operatii numai intre doua sau mai multe variabile de acelasi tip, in PHP puteti face urmatoarele :
$motor="1400";
$rata_asigurare=0.05;
$plata=$motor*$rata_asigurare;
Prin afisarea variabilei $plata se va face produsul 0.05*1400, adica 70.
Mai mult, daca am fi avut :
$motor="1400MPI";
$rata_asigurare=0.05;
$plata=$motor*$rata_asigurare;
Prin afisarea variabilei $plata s-ar fi obtinut acelasi rezultat, adica 70.
Casting
Daca totusi doriti ca o variabila sa fie de anumit tip, puteti forta tipul returnat folosind un operator cast sau o functie pentru cast.
Exemplu :
$varsta=20;
$varsta=(string)$varsta;
Functia gettype() returneaza tipul de data atribuit variabilei parametru.
Exemplu:
$varsta=20;
echo gettype($varsta);
va returna integer
Castingul se poate realiza folosind o alta functie din biblioteca PHP, functie numita settype();
Exemplu:
$varsta=20;
settype($varsta,"string");
echo gettype($varsta);
Prin utilizarea functiilor intval() si strval() se pot returna valori ale variabilelor, in integer, respectiv ca string.
Functia isset() - va permite sa vedeti daca o variabila a fost creata sau nu.
Exemplu:
echo isset($varsta);
va returna 1 daca variabila a fost creata sau NIMIC (void) daca nu a fost creata.
Functia unset() - este folosita pentru a distruge atat continutul cat si numele variabilei, putand astfel elibera locatia de memorie.
Exemplu :
echo unset($varsta);
Functia empty() - este opusul logic al functiei isset(). Returneaza 1 daca nu exista variabila $varsta sau $varsta este 0 sau "" (string -ul gol) sau NIMIC (void) daca aceasta variabila exista.
I.3.4.BLOCURI DECIZIONALE IN PHP
Ca si in C/C++ , se pot folosi urmatoarele blocuri instructiuni :
IF
Sintaxa : if (<conditie>)
Exemplu :
$numar=15;
if ($numar==15) echo "Numarul ales este
".$numar;
SWITCH
In cazul in care avem o
$a=15;
$b=10;
$op="suma";
if ($op=="suma") echo $a+$b;
else if ($op=="diferenta") echo $a-$b;
else if ($op=="produs") echo $a*$b;
else echo $a/$b;
se pot inlocui, mai eficient prin :
$a=15;
$b=10;
$op="suma";
switch ($op)
I.3.5. CICLURI SI STRUCTURI REPETITIVE IN PHP
Ciclurile (buclele) sunt folosite atunci cand dorim sa executam de mai multe ori un bloc (ex: parcurgerea unui vector).
while - verifica o conditie si daca aceasta este adevarata executa blocul de dupa conditie. Pentru ca while verifica o conditie la inceput, ciclul este cu test initial.
Ex:
$i=5;
while ($i>=0)
do while - executa blocul de dupa do, urmand ca la sfarsitul blocului sa se evalueze conditia, astfel fiind un ciclu cu test final. Este de preferat sa folositi do while atunci cand doriti ca un bloc sa se execute de minim o data.
Ex:
$i=5;
do while ($i>=0);
Daca in primul exemplu (while) am fi avut un i negativ ciclul nu ar fi afisat nimic, in schimb la al doilea exemplu (do while) ar fi afisat valoarea lui i dupa care nu ar mai fi inceput iteratia urmatoare.
for - este un ciclu cu intitializare de parametru si cu test initial. Este folosit acolo unde se doreste control total asupra numarului de iteratii (vectori).
Ex:
for ($contor=1;$contor<=10;$contor++) echo $contor."/";
Rezultatul va fi : 1/2/3/4/5/6/7/8/9/10/
Remarcam claritatea cu care se poate controla numarul de iteratii (de 10 ori).
Acelasi lucru l-am fi putut scrie cu ajutorul unei bucle while :
Ex:
$contor=0;
while ($contor<10) ;
De cate ori s-ar fi executat aceasta bucla ? De 10 ori, pornind cu un contor de la 0, pe care il incrementam inainte de a-i afisa valoarea.
Structuri repetitive (vectori) - reprezinta un set de variabile cu acelasi nume, dar un index diferit. Fiecare membru al unui vector este numit element. Diferentierea dintre elemente se face cu ajutorul parantezelor patrate [] in mijlocul carora este un index, ce poate fi de tip numeric sau (spre deosebire de limbajul C++) un string.
Ex:
<?
//rezultatele obtinute la o extragere 6/49
$numar[1]=15;$numar[2]=7;$numar[3]=13;
$numar[4]=44;$numar[5]=9;$numar[6]=21;
//parcurgerea si afisarea rezultatelor
for ($i=1;$i<=6;$i++) echo $numar[$i]."/";
//date despre persoane - matrice
$date[1]["nume"]="Ion";
$date[1]["prenume"]="Costin";
$date[1]["varsta"]=30;
$date[2]["nume"]="Hagi";
$date[2]["prenume"]="Gheorghe";
$date[2]["varsta"]=38;
$date[3]["nume"]="Pop";
$date[3]["prenume"]="Vasile";
$date[3]["varsta"]=19;
//parcurgerea si afisarea datelor
for ($i=1;$i<=3;$i++)
?>
Pentru a afla numarul de elemente al unui vector putem folosi functia count(), ce admite ca parametru vectorul pentru care calculam numarul de elemente.
Exemplu:
//parcurgerea si afisarea datelor
for ($i=1;$i<=count($date);$i++)
Initializarea vectorilor se mai poate face folosind functia array().
Ex:
$orase=array("Bucuresti","
//automat se va crea indexul pornind de la 0
for ($i=0;$i<count($orase);$i++) echo $orase[$i];
//daca dorim ca indexul sa plece de la alt numar
$orase=array(1=>"Bucuresti",2=>"
for ($i=1;$i<=count($orase);$i++) echo $orase[$i];
//index de tip string
$orase=array("bu"=>"Bucuresti","ct"=>"Constanta","is"=>"Iasi");
//parcurgerea urmatoare nu va avea nici un sens
for ($i=1;$i<=count($orase);$i++) echo $orase[$i];
//in locul ei se poate parcurge vectorul utilizand functia foreach()
foreach ($orase as $valoarecurenta) echo $valoarecurenta."/";
Daca avem un vector initializat sub forma :
<?
$date=array(1=>'unu',30=>'doi','aa'=>'text');
?>
Nu am putea face nimic cu o bucla standard, ci doar cu foreach();
Vom folosi functia next() pentru a pozitiona pointerul pe inregistrarea urmatoare si functia prev() pe cea dinainte si vom afisa folosindu-ne de functia key() ce returneaza indexul curent.
<?
$date=array(1=>'unu',30=>'doi','aa'=>'text');
echo $date[key($date)];
next($date);
next($date);
echo $date[key($date)];
prev($date);
echo
$date[key($date)];
?>
Ultima varianta de citire a vectorilor indexati non-secvential este folosind functiile list() si each().
while(list($index,$element))= each ($date)
Sortarea vectorilor
Functia sort() este cea mai des folosita.
Ex:
$orase=array("zalau","
//afisare
for($i=0;$i<count($orase);$i++) echo $orase[$i]."/";
//rezulatul va fi afisat in ordinea definirii
sort($orase);
//afisare dupa sortare
for($i=0;$i<count($orase);$i++) echo $orase[$i]."/";
Functia rsort() sorteaza descrescator un vector (invers decat sort()).
Functia asort() sorteaza crescator un vector pastrand relatia element->index.
Ex:
$orase=array("bu"=>"bucuresti","is"=>"iasi","ct"=>"constanta");
asort($orase);
//afisare
foreach ($orase as $val) echo $val."/";
//in exemplul precedent (sort) la o afisare de forma
echo $orase["is"];
//se
pierdea indexul, astfel ca la afisare ar fi scris
Functia arsort() sorteaza descrescator un vector pastrand relatia element->index.
Functia ksort() sorteaza crescator un vector, dupa valoarea indexului, nu al elementelor.
Ex:
$orase=array("bu"=>"bucuresti","is"=>"iasi","ct"=>"constanta");
ksort($orase);
//afisare
foreach ($orase as $val) echo $val."/";
implode() si explode()
In cazul in care avem un vector si dorim ca toate elementele sale sa le punem intr-un string putem scrie :
Ex:
<?
$v=array("ion","matei","gheorghe");
foreach ($v as $val) $string.=$val.",";
//am folosit virgula ca delimitator
?>
Sau putem apela la functia implode() astfel :
<?
$v=array("ion","matei","gheorghe");
$string=implode(",",$v);
//in care virgula dintre ghilimele este de asemenea delimitator
?>
Inversa acestei functii este explode(), care transforma un string in care cuvintele cheie sunt delimitate dupa un semn distinct intr-un vector ale carui elemente sunt cuvintele cheie, dupa cum urmeaza:
Exemplu:
<?
$string="ion,matei,gheorghe";
$v=explode(",",$string);
//afisarea se face standard
foreach ($v as $val) echo $val."<br>";
?>
I.3.6.FUNCTII IN PHP
Functiile sunt portiuni de cod definite pentru a executa anumite sarcini.
Functiile pot fi chemate de mai multe ori pe parcursul executiei unui program.
Ele primesc argumente (valori de intrare) cu ajutorul carora executa cateva operatii dupa care returneaza o valoare. Functiile transfera orice valoare primita ca argument in variabile temporare numite parametrii ce pot fi folositi numai pe parcursul executiei functiei.
Definire :
function <nume_functie> (<parametrii>)
Exemplu:
function tva($lei)
O apelare de forma :
echo tva(100000);
va produce rezultatul 119000.
Pentru returnarea unei valori am folosit cuvantul cheie return.
Functia poate fi apelata si fara argumente :
function tva()
Daca dorim sa transmitem un numar mai mare de parametrii catre functie, atunci ii putem delimita cu virgula.
function suma($a,$b)
O apelare de forma : echo suma(5,10);
va produce rezultatul 15.
Exemplu practic (functii si switch):
<?
$valuta="euro";
$suma=500;
$curseuro=39890;
$cursusd=32800;
switch($valuta)
function calculeaza ($suma,$curs)
?>
Putem observa cu usurinta cum am folosit functia de doua ori, adaptand valorile de intrare dupa caz (euro sau usd).
Trimiterea variabilelor
prin valoare :
<?
$a=5;$b=10;
suma($a,$b);
function suma($a,$b)
echo "Valoarea lui a dupa rularea functiei ".$a;
?>
Putem observa ca a ia pe rand valoarea 5 (in programul principal), ulterior se transmite functiei, care copiaza pe o stiva valoarea lui a dupa care il incrementeaza cu valoarea lui b (si ea copiata intr-o variabila temporara).
La iesirea din functie, a si b din interiorul functiei se distrug, in afara ei variabilele a si b ramanand nemodificate.
Prin urmare, pe ecran vor fi afisate urmatoarele:
Valoarea lui a in cadrul functiei 15
Valoarea lui a dupa rularea functiei 5
prin referinta
A doua metoda de a trimite variabile unei functii este prin referinta, mod ce permite functiei sa modifice valoarea unei variabile, inclusiv in afara functiei.
Pentru a indica trimiterea prin referinta, se adauga in fata variabilei un ampersand.
<?
$a=5;$b=10;
suma($a,$b);
function suma(&$a,$b)
echo "Valoarea lui a dupa rularea functiei ".$a;
?>
Vor fi afisate urmatoarele :
Valoarea lui a in cadrul functiei 15
Valoarea lui a dupa rularea functiei 15
Stabilirea valorilor implicite
Sunt situatii cand unul sau mai multi parametrii nu primesc intializarea cu argumente. Ex:
<?
$a=5;$b=10;
suma($a);
function suma($a,$b)
?>
Va produce ca rezultat : Valoarea lui a in cadrul functiei 5
Daca totusi dorim ca un parametru sa ia anumita valoare chiar daca nu este primit in functie ca argument, folosim descrierea functiei dupa cum urmeaza:
<?
$a=5;$b=15;
suma($a);
function suma($a,$b=10)
?>
Rezultatul va fi : Valoarea lui a in cadrul functiei 15
O apelare de forma : suma($a,$b) va produce in programul de mai sus rezultatul :
Valoarea lui a in cadrul functiei 20.
Ordinea initializarii parametrilor in functii este de la stanga la dreapta, deci trebuie sa punem intai parametrii ce ii trimitem ca argumente la apelarea functiei, dupa care, la final parametrii cu valoare implicita.
Un astfel de program :
<?
$a=5;$b=15;
suma(,$b);
function suma($a=5,$b)
?>
desi are setat parametrul a cu valoare implicita, va genera o eroare.
Solutia este inversarea ordinii, lasand parametrii optionali la sfarsit.
In functie de versiunea de PHP pe care rulati puteti face o apelare a functiei cu mai putine argumente decat definitia, chiar daca nu sunt asignate valori implicite parametrilor. Ex :
<?
$a=5;$b=15;
suma($a);
function suma($a,$b)
?>
va returna Valoarea lui a in cadrul
functiei 5
cu cel mult un mesaj de atentionare (warning).
Un minus al trimiterii parametrilor prin referinta este urmatorul :
<?
suma(5,10);
function suma(&$a,$b)
?>
Aparent programul nu prezinta nici o eroare.
Totusi, la o examinare mai atenta se poate vedea ca parametrul a este initializat prin referinta fata de un intreg (nu o variabila).
Prin urmare modificarea lui a ar echivala cu modificarea intregului 5, nu al continutului unei variabile (similar cu 5=5+10).
Programul va prezenta eroarea "Only variables can be passed by reference".
Locul variabilelor in program
Variabilele din interiorul functiilor nu se pot vedea in exteriorul lor (se distrug la terminarea functiei) decat daca sunt transmise ca referinta.
Variabilele pot fi :
globale
locale
Variabilele globale sunt variabilele ce isi mentin existenta pe parcursul executiei intregului program, in timp ce variabilele locale sunt variabilele din interiorul functiilor ce isi inceteaza existenta dupa terminarea functiei.
Ex :
<?
$salariu=800;
$taxe=0.25;
calculeaza($salariu,$taxe);
function calculeaza ($salariu,$taxe)
//daca in schimb afisam in exterior
echo "Salariul net este : ".$salariu_net;
//se va afisa doar string -ul Salariul net este :
?>
Daca dorim o vizualizare globala a variabilelor locale functiei avem 2 posibilitati :
le trimitem ca referinta
le asociem parametrul global inainte de a opera cu variabilele sau folosind vectorul $GLOBALS[]
Variabilele statice - sunt folosite atunci cand este necesar ca acestea sa existe pe parcursul mai multor apelari ale functiilor, fara a mai fi necesara o reatribuire.
Ex 1:
<?
function vizitatori()
//un apel de forma
echo vizitatori();
//va afisa 1
//la urmatorul apel
echo vizitatori();
//se va afisa tot 1
?>
Este destul de neplacut ca pe parcursul unei numaratori sa aveti variabile ce se reseteaza la fiecare apelare a functiei. Pentru a asigura persistenta variabilei, se foloseste cuvantul cheie static.
I.3.7.OBIECTE IN PHP
O clasa este o colectie de variabile si functii (metode).
Definire :
<?php
class Cart
// Take $num articles of $artnr
out of the cart
function remove_item $artnr $num) else
?>
Aceasta defineste o clasa numita Cart care contine un vector asociat articolelor din cos, si doua functii care adauga sau sterg produse din cosul de cumparaturi.
ATENTIE: O clasa nu poate fi
In PHP4, doar initializarile de variabile constante sunt permise cu ajutorul cuvantului cheie var.
Pentru initializarea variabilelor cu valori ce nu sunt constante, aveti nevoie de o functie de initializare care este apelata ori de cate ori este construit un obiect din acea clasa.
Acea functie se numeste constructor.
<?php
class Cart
/* Iata cum trebuie scris. */
class Cart
}
?>
Pentru creerea unui obiect se foloseste operatorul new.
<?
$cart=new Cart;
$cart->add_item("10",1);
$another_cart=new Cart;
$another_cart->add_item("800",3);
?>
Vectorii $items, functiile de adaugare si stergere a elementelor sunt diferite pentru fiecare obiect in parte (priviti fiecare obiect ca un director separat pe HDD, directoare in care pot exista aceleasi fisiere cu continut diferit).
O initializare de forma $cart->items = array( => ) este corecta pentru ca se refera la variabila items a lui $cart (ca si la vectori indexati dupa chei de tip string).
Prin urmare o apelare $cart->$items = array( => ), va deveni $cart->"".
Daca dorim ca totusi sa folosim o variabila pentru a returna numele variabilei din clasa, trebuie mai intai sa declaram $items.
Corect ar fi :
$items="items";
$cart->$items = array( =>
Astfel, variabila $items va returna stringul "items", string ce va fi folosit in apelarea clasei.
Destructorul nu trebuie definit implicit, pentru ca la
terminarea scriptului, memoria se elibereaza automat. Totusi, daca dorim
simularea unui destructor, putem apela functia unset pe toate variabilele
folosite in functie.
Exemplu:
<?
function DestroyObject $name
class xyz
// ### This is the destructor
which will be called
function Destroy
function SomeDo
$example = new xyz
// . doing something
here
$example->somevar
$example->SomeDo
DestroyObject 'example'
// ### Test => should
produce an error !
$example->SomeDo
?>
I.3.8.LUCRUL CU CLIENTUL
PHP poate prelua interactiv datele de la client prin intermediul formularelor.
Elementele cele mai importante ale unui form sunt :
- ACTION - transmite serverului la ce pagina sa se duca si sa transmita datele completate in momentul in care utilizatorul a trimis formularul.
- METHOD - reprezinta modul in care datele sunt trimise serverului.
Metoda GET adauga variabilele in campul de adresa al paginii web.
Metoda POST trimite ascuns variabilele catre pagina descrisa la ACTION.
Exemplu:
<form action="test.php" method="get">
.
</form>
sau
<form action="test.php" method="post">
.
</form>
In cadrul formularului putem avea campuri :
text
textarea
list box (select)
radio
checkbox
hidden
password
Aceste campuri se trimit catre scriptul PHP printr-un buton de tip submit.
Toate campurile de mai sus au un parametru numit name ce trebuie specificat obligatoriu in cazul in care dorim preluarea si/sau prelucrarea ulterioara a datelor introduse.
Ex :
Fisierul html :
<form action="test.php" method="post">
Cum va numiti ?
<input type="text" name="nume">
<input type="submit" value="Trimite">
</form>
Fisierul test.php :
<?
echo "Salut ".$nume;
?>
Valoarea parametrului name din cadrul fiecarui camp din formular va deveni variabila in scriptul specificat la parametrul ACTION al formularului.
In cazul in care numele ce este scris la parametrul name din cadrul formularului nu devine variabila in scriptul de la action, verificati in fisierul PHP.INI (ce rezida de obicei acolo unde exista si fisierul de configurare (HTTPD.CONF) al serverului web Apache daca parametrul register_globals este pus pe On.
In cazul in care nu aveti permisiuni de modificare al acestui fisier sau din motive de siguranta se prefera un register_globals pus pe Off, variabilele trimise de formular se pot citi cu :
$HTTP_POST_VARS["numevariabila"], respectiv $HTTP_GET_VARS["numevariabila"].
Sau
$_POST["numevariabila"], respectiv
$_GET["numevariabila"].
Unde numevariabila reprezinta valoarea acordata parametrului name din cadrul formularului.
Persistenta
Persistenta reprezinta modul in care putem transmite variabile in cadrul unei vizite, de la o pagina la alta. O astfel de variabila ar fi un nume de utilizator si o parola sau produsele comandate la un moment dat, diverse setari, etc..
Primul tip de persistenta se poate realiza cu formulare al caror campuri sunt de tip hidden.
Al doilea tip de persistenta se poate realiza folosind cookie -urile.
Cookie -urile sunt fisiere de dimensiuni mici ce rezida pe calculatorul clientului cu ajutorul carora sunt stocate diverse informatii ce pot fi ulterior regasite de catre server.
Comanda prin care sunt trimise cookie -urile pe masina clientului este :
setcookie ("nume","valoare",timp in secunde de la 1 Ian 1970 pana cand expira);
Ex :
<?
$username="gigel";
$password="1234";
setcookie("username","$username",time()+3600);
setcookie("password","$password",time()+3600);
?>
Apelarea se face in modul urmator :
echo $HTTP_COOKIE_VARS["username"];
echo $HTTP_COOKIE_VARS["password"];
sau
echo _COOKIE["username"];
echo _COOKIE["password"];
Atentie : daca exista diferente de ceas intre server si client cookie -urile pot fi interpretate de browser ca fiind deja expirate, astfel vor fi sterse de pe calculatorul clientului.
Distrugerea cookie -urilor se poate face in doua moduri :
setcookie ("nume","valoare",time()-9999999);
setcookie ("nume");
I.4.CE ESTE MYSQL
Aproape toate aplicatiile au nevoie de mijloace prin care sa stocheze sau sa prelucreze date. Lucurul cu fisierele, desi ofera un acces mai rapid, au anumite lipsuri, dintre care cel mai important este accesul simultan la acelasi fisier.
O baza de date este o colectie de date care este organizata incat continutul poate fi cu usurinta accesat si manipulat. Prin aceasta organizare bazele de date sunt printre cele mai viabile solutii pentru stocarea datelor.
Un DBMS (Database Management System) reprezinta software -ul folosit pentru a stoca, culege si modifica datele dintr-o baza de date.
O baza de date aranjeaza datele in tabele, ce cuprind linii si coloane. O inregistrare reprezinta o linie din tabel, ce contine mai multe coloane.
Presupunand ca doriti sa stocati informatii cu privire la ultima vizita a utilizatorilor pe site, puteti construi o tabela de forma :
User ID |
UserName |
UserCountry |
Page |
Last Access |
unreal |
John Wayne |
|
index.php |
2004-03-22 |
tournament |
John Travolta |
|
forum.php |
2004-03-28 |
unreal |
John Wayne |
|
index.php |
2004-03-29 |
O astfel de abordare este total neeficienta, pentru ca anumite informatii despre utilizator se stocheaza la fiecare vizita. Din aceasta cauza, multe informatii sunt redundante.
Astfel a aparut conceptul de normalizare, ce cuprinde 5 forme normale, din care 3 sunt foarte importante.
Cele 3 reguli de normalizare se pot reduce la :
eliminarea informatiilor redundante prin creerea de tabele individuale
crearea unui tabel separat pentru toate informatiile ce au legatura intre ele
specificarea unui
Prin simpla impartire a tabelei in 2 subtabele, considerand ca userid -ul este cheie primara, avem o baza de date normalizata :
Tabela 1.
User ID |
UserName |
UserCountry |
unreal |
John Wayne |
|
tournament |
John Travolta |
|
unreal |
John Wayne |
|
Tabela 2.
User ID |
Page |
Last Access |
unreal |
index.php |
2004-03-22 |
tournament |
forum.php |
2004-03-28 |
unreal |
index.php |
2004-03-29 |
I.5.SINTAXA MYSQL
SQL (Structured Query Language) este un limbaj universal adoptat de mai toate SGBD -urile actuale.
SELECT este folosit pentru a regasi inregistrari sau coloane din inregistrari SELECT`matricol` int(5) NOT NULL default '0',
`nume` varchar(40) NOT NULL default '',
`initiala` varchar(6) NOT NULL default '',
`prenume` varchar(50) NOT NULL default '',
`an` int(1) NOT NULL default '0',
`forma` char(2) NOT NULL default '')
ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT;
I.6.PRELUARE SI MANIPULARE DE DATE
In PHP sunt integrate functii pentru conectarea, preluarea si manipularea datelor din SGBD -ul MySQL.
Functia pentru conectarea la baza de date este mysql_connect(), functie ce accepta 3 parametrii de intrare, dupa cum urmeaza : hostname sau ip, username, password.
Ex :
$link=mysql_connect("localhost","root","parola123");
Ca si in lucrul cu fisierele o conexiune trebuie inchisa (daca totusi uitam, ea se va inchide la sfarsitul executiei scriptului).
Functia pentru deconectare este mysql_close() ce accepta ca parametru de intrare pointerul (variabila) returnata de mysql_connect().
Ex :
mysql_close($link);
Dupa conectare trebuie selectata baza de date cu care dorim sa lucram.
Astfel vom folosi functia mysql_select_db(), ce accepta ca parametrii un string ce contine numele bazei de date dorite, si optional pointerul catre conexiune.
Ex :
mysql_select_db("studenti");
mysql_select_db("studenti",$link);
Pentru a face o interogare se foloseste functia mysql_query(), functie ce accepta un string si optional un pointer de conexiune.
Ex:
$result=$mysqli->query("select * from info");
$result=$mysqli->query("select * from info",$link);
Numarul de coloane ce rezulta dintr-o interogare este redat de functia mysqli_num_rows();
Ex :
$result=$mysqli->query("select * from info");
echo "Numarul de inregistrari este : ".mysqli_num_rows($result);
Numarul de inregistrari "afectate" de INSERT, UPDATE sau DELETE rezulta din utilizarea functiei mysql_affected_rows();
Ex:
$result=$mysqli->query("update info set nrcrt=nrcrt+1");
echo "Numarul de inregistrari este : ".mysql_affected_rows($result);
Regasirea datelor se face cu o diversitate de functii, precum : mysql_result(), mysqli_fetch_row(),mysql_fetch_assoc(),mysql_fetch_array(), mysql_fetch_object().
Ex:
$link=mysql_connect("localhost","root","");
mysql_select_db("studenti");
$result=$mysqli->query("select * from info");
for ($i=0;$i<mysqli_num_rows();$i++)
echo mysql_result($result,$i);
mysql_close($link);
|